@mnaoumov/obsidian-lib 4.3.0 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/cjs/__merged.cjs +11 -1
- package/dist/lib/cjs/__merged.d.cts +3 -3
- package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +1 -1
- package/dist/lib/cjs/components/case-insensitive-file-index-component.d.cts +1 -1
- package/dist/lib/cjs/components/plugin-context-component.cjs +3 -1
- package/dist/lib/cjs/components/plugin-context-component.d.cts +2 -1
- package/dist/lib/cjs/components/plugin-gate-component.cjs +3 -3
- package/dist/lib/cjs/components/plugin-suggestion-component.cjs +2 -2
- package/dist/lib/cjs/components/plugin-suggestion-component.d.cts +1 -1
- package/dist/lib/cjs/components/settings-migration-component.cjs +1 -1
- package/dist/lib/cjs/components/settings-migration-component.d.cts +1 -1
- package/dist/lib/cjs/css-class.cjs +3 -2
- package/dist/lib/cjs/css-class.d.cts +12 -4
- package/dist/lib/cjs/debug.cjs +22 -2
- package/dist/lib/cjs/debug.d.cts +10 -3
- package/dist/lib/cjs/demo-vault-helper-settings.cjs +1 -1
- package/dist/lib/cjs/demo-vault-helper-settings.d.cts +1 -1
- package/dist/lib/cjs/frontmatter.cjs +1 -1
- package/dist/lib/cjs/frontmatter.d.cts +1 -1
- package/dist/lib/cjs/generated-during-build.cjs +2 -2
- package/dist/lib/cjs/generated-during-build.d.cts +2 -2
- package/dist/lib/cjs/i18n/i18n.cjs +2 -2
- package/dist/lib/cjs/i18n/i18n.d.cts +1 -1
- package/dist/lib/cjs/i18n/locales/en.cjs +5 -2
- package/dist/lib/cjs/i18n/locales/en.d.cts +4 -1
- package/dist/lib/cjs/i18n/locales/translations-map.d.cts +4 -1
- package/dist/lib/cjs/library-styles.cjs +2 -2
- package/dist/lib/cjs/library.cjs +5 -2
- package/dist/lib/cjs/library.d.cts +12 -5
- package/dist/lib/cjs/modals/minimizable-modal.cjs +1 -1
- package/dist/lib/cjs/modals/minimizable-modal.d.cts +1 -1
- package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +1 -1
- package/dist/lib/cjs/modals/suggest-modal-command-builder.d.cts +3 -3
- package/dist/lib/cjs/obsidian-dev-utils-state.cjs +21 -1
- package/dist/lib/cjs/obsidian-dev-utils-state.d.cts +10 -2
- package/dist/lib/cjs/path-settings.cjs +214 -35
- package/dist/lib/cjs/path-settings.d.cts +21 -5
- package/dist/lib/cjs/plugin/plugin-api.cjs +1 -1
- package/dist/lib/cjs/plugin/plugin-api.d.cts +1 -1
- package/dist/lib/cjs/plugin/plugin-context.cjs +5 -2
- package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +44 -4
- package/dist/lib/cjs/plugin/plugin-lifecycle-events.d.cts +66 -15
- package/dist/lib/cjs/plugin/plugin.cjs +2 -2
- package/dist/lib/cjs/plugin/plugin.d.cts +1 -1
- package/dist/lib/cjs/resource-lock.cjs +1 -1
- package/dist/lib/cjs/setting-components/checkbox-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/checkbox-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/code-highlighter-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/date-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/date-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/date-time-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/date-time-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/email-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/email-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/file-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/file-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/month-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/month-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/multiple-dropdown-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/multiple-email-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/multiple-email-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/multiple-file-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/multiple-file-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/multiple-text-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/multiple-text-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/number-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/number-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/password-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/password-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/telephone-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/telephone-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/time-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/time-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/tri-state-checkbox-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/typed-dropdown-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/url-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/url-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/week-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/week-component.d.cts +1 -1
- package/dist/lib/cjs/vault.cjs +1 -1
- package/dist/lib/cjs/vault.d.cts +2 -2
- package/dist/lib/esm/__merged.d.mts +3 -3
- package/dist/lib/esm/__merged.mjs +11 -1
- package/dist/lib/esm/components/case-insensitive-file-index-component.d.mts +1 -1
- package/dist/lib/esm/components/case-insensitive-file-index-component.mjs +1 -1
- package/dist/lib/esm/components/plugin-context-component.d.mts +2 -1
- package/dist/lib/esm/components/plugin-context-component.mjs +3 -1
- package/dist/lib/esm/components/plugin-gate-component.mjs +3 -3
- package/dist/lib/esm/components/plugin-suggestion-component.d.mts +1 -1
- package/dist/lib/esm/components/plugin-suggestion-component.mjs +2 -2
- package/dist/lib/esm/components/settings-migration-component.d.mts +1 -1
- package/dist/lib/esm/components/settings-migration-component.mjs +1 -1
- package/dist/lib/esm/css-class.d.mts +12 -4
- package/dist/lib/esm/css-class.mjs +3 -2
- package/dist/lib/esm/debug.d.mts +10 -3
- package/dist/lib/esm/debug.mjs +26 -3
- package/dist/lib/esm/demo-vault-helper-settings.d.mts +1 -1
- package/dist/lib/esm/frontmatter.d.mts +1 -1
- package/dist/lib/esm/frontmatter.mjs +1 -1
- package/dist/lib/esm/generated-during-build.d.mts +2 -2
- package/dist/lib/esm/generated-during-build.mjs +2 -2
- package/dist/lib/esm/i18n/i18n.d.mts +1 -1
- package/dist/lib/esm/i18n/i18n.mjs +2 -2
- package/dist/lib/esm/i18n/locales/en.d.mts +4 -1
- package/dist/lib/esm/i18n/locales/en.mjs +5 -2
- package/dist/lib/esm/i18n/locales/translations-map.d.mts +4 -1
- package/dist/lib/esm/library-styles.mjs +3 -3
- package/dist/lib/esm/library.d.mts +12 -5
- package/dist/lib/esm/library.mjs +4 -2
- package/dist/lib/esm/modals/minimizable-modal.d.mts +1 -1
- package/dist/lib/esm/modals/minimizable-modal.mjs +1 -1
- package/dist/lib/esm/modals/suggest-modal-command-builder.d.mts +3 -3
- package/dist/lib/esm/modals/suggest-modal-command-builder.mjs +1 -1
- package/dist/lib/esm/obsidian-dev-utils-state.d.mts +10 -2
- package/dist/lib/esm/obsidian-dev-utils-state.mjs +20 -1
- package/dist/lib/esm/path-settings.d.mts +21 -5
- package/dist/lib/esm/path-settings.mjs +215 -41
- package/dist/lib/esm/plugin/plugin-api.d.mts +1 -1
- package/dist/lib/esm/plugin/plugin-api.mjs +1 -1
- package/dist/lib/esm/plugin/plugin-context.mjs +6 -3
- package/dist/lib/esm/plugin/plugin-lifecycle-events.d.mts +66 -15
- package/dist/lib/esm/plugin/plugin-lifecycle-events.mjs +41 -4
- package/dist/lib/esm/plugin/plugin.d.mts +1 -1
- package/dist/lib/esm/plugin/plugin.mjs +2 -2
- package/dist/lib/esm/resource-lock.mjs +1 -1
- package/dist/lib/esm/setting-components/checkbox-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/checkbox-component.mjs +1 -1
- package/dist/lib/esm/setting-components/code-highlighter-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/code-highlighter-component.mjs +1 -1
- package/dist/lib/esm/setting-components/date-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/date-component.mjs +1 -1
- package/dist/lib/esm/setting-components/date-time-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/date-time-component.mjs +1 -1
- package/dist/lib/esm/setting-components/email-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/email-component.mjs +1 -1
- package/dist/lib/esm/setting-components/file-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/file-component.mjs +1 -1
- package/dist/lib/esm/setting-components/month-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/month-component.mjs +1 -1
- package/dist/lib/esm/setting-components/multiple-dropdown-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/multiple-dropdown-component.mjs +1 -1
- package/dist/lib/esm/setting-components/multiple-email-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/multiple-email-component.mjs +1 -1
- package/dist/lib/esm/setting-components/multiple-file-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/multiple-file-component.mjs +1 -1
- package/dist/lib/esm/setting-components/multiple-text-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/multiple-text-component.mjs +1 -1
- package/dist/lib/esm/setting-components/number-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/number-component.mjs +1 -1
- package/dist/lib/esm/setting-components/password-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/password-component.mjs +1 -1
- package/dist/lib/esm/setting-components/telephone-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/telephone-component.mjs +1 -1
- package/dist/lib/esm/setting-components/time-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/time-component.mjs +1 -1
- package/dist/lib/esm/setting-components/tri-state-checkbox-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/tri-state-checkbox-component.mjs +1 -1
- package/dist/lib/esm/setting-components/typed-dropdown-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/typed-dropdown-component.mjs +1 -1
- package/dist/lib/esm/setting-components/typed-multiple-dropdown-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/typed-multiple-dropdown-component.mjs +1 -1
- package/dist/lib/esm/setting-components/url-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/url-component.mjs +1 -1
- package/dist/lib/esm/setting-components/week-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/week-component.mjs +1 -1
- package/dist/lib/esm/vault.d.mts +2 -2
- package/dist/lib/esm/vault.mjs +1 -1
- package/package.json +3 -3
|
@@ -522,4 +522,4 @@ function validatePayload(params) {
|
|
|
522
522
|
publishPluginApi,
|
|
523
523
|
watchPluginApi
|
|
524
524
|
});
|
|
525
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW4vcGx1Z2luLWFwaS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogQSB0eXBlZCwgdmVyc2lvbmVkLCBsaWZlY3ljbGUtYXdhcmUgcmVnaXN0cnkgZm9yIGNyb3NzLXBsdWdpbiBBUElzIOKAlCB0aGUgYWR2YW5jZWQgc3VjY2Vzc29yIHRvXG4gKiBgQHZhbmFrYXQvcGx1Z2luLWFwaWAuXG4gKlxuICogQSBwcm92aWRlciBwdWJsaXNoZXMgaXRzIEFQSSBvbmNlLCB1bmRlciBhIGNvbnRyYWN0IHZlcnNpb24gdGhhdCBpcyBpbmRlcGVuZGVudCBvZiBpdHMgcGx1Z2luIHZlcnNpb246XG4gKlxuICogYGBgdHNcbiAqIHB1Ymxpc2hQbHVnaW5BcGkoe1xuICogICBhcGk6IG5ldyBNeUFwaSh0aGlzKSxcbiAqICAgYXBpVmVyc2lvbjogJzIuMS4wJyxcbiAqICAgY29udHJhY3Q6IE1ZX0FQSV9DT05UUkFDVF9WMixcbiAqICAgcGx1Z2luOiB0aGlzXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEEgY29uc3VtZXIgZ2V0cyBhIExJVkUgUkVGIHdob3NlIHtAbGluayBQbHVnaW5BcGlSZWYudmFsdWV9IGlzIGFsd2F5cyBjdXJyZW50IOKAlCBgbnVsbGAgYmVmb3JlIHRoZVxuICogcHJvdmlkZXIgbG9hZHMsIHRoZSBBUEkgb25jZSBpdCBwdWJsaXNoZXMsIGBudWxsYCBhZ2FpbiBvbmNlIGl0IHVubG9hZHMsIGFuZCB0aGUgQVBJIGFnYWluIGFmdGVyIGFcbiAqIHJlLWVuYWJsZTpcbiAqXG4gKiBgYGB0c1xuICogY29uc3QgcmVmID0gd2F0Y2hQbHVnaW5BcGk8TXlBcGk+KHtcbiAqICAgYXBpVmVyc2lvblJhbmdlOiAnXjInLFxuICogICBhcHA6IHRoaXMuYXBwLFxuICogICBjb21wb25lbnQ6IHRoaXMsXG4gKiAgIHBsdWdpbklkOiAnbXktcHJvdmlkZXInXG4gKiB9KTtcbiAqXG4gKiByZWYudmFsdWU7ICAgICAgICAgICAgICAgICAgICAvLyBNeUFwaSB8IG51bGwg4oCUIHN5bmMsIGZyZWUsIGFsd2F5cyBjb3JyZWN0XG4gKiBhd2FpdCByZWYud2hlbkF2YWlsYWJsZSgpOyAgICAvLyBvbmUtc2hvdCBmbG93czsgcmVqZWN0cyB3aXRoIGEgdHlwZWQsIGNsYXNzaWZpZWQgZXJyb3JcbiAqIHJlZi5vbignY2hhbmdlJywgKCkgPT4geyB9KTsgLy8gZm9yIGNvbnN1bWVycyB0aGF0IG11c3QgUkVBQ1QgcmF0aGVyIHRoYW4gcmVhZFxuICogYGBgXG4gKlxuICogV2hhdCB0aGlzIGZpeGVzLCByZWxhdGl2ZSB0byBwdWJsaXNoaW5nIGEgYmFyZSBvYmplY3Qgb24gYHdpbmRvdy5QbHVnaW5BcGlgOlxuICpcbiAqIC0gKipMb2FkIG9yZGVyLioqIFRoZSByZWYgc3Vic2NyaWJlczsgaXQgZG9lcyBub3Qgc2FtcGxlLiBSZWFkaW5nIGBudWxsYCBkdXJpbmcgYG9ubG9hZGAgbWVhbnMgXCJub3QgeWV0XCIsXG4gKiAgIGFuZCBpdCBiZWNvbWVzIG5vbi1gbnVsbGAgb24gaXRzIG93bi5cbiAqIC0gKipWZXJzaW9uIG5lZ290aWF0aW9uLioqIFRoZSBwcm92aWRlciBkZWNsYXJlcyBhIGNvbnRyYWN0IHZlcnNpb247IHRoZSBjb25zdW1lciBkZWNsYXJlcyB0aGUgcmFuZ2UgaXRcbiAqICAgY29tcGlsZWQgYWdhaW5zdDsgdGhlIGhpZ2hlc3Qgc2F0aXNmeWluZyByZWNvcmQgd2lucy5cbiAqIC0gKipTdGFsZSBoYW5kbGVzLioqIFRoZSB2YWx1ZSBpcyBhIHJldm9jYWJsZSBoYW5kbGUg4oCUIGFmdGVyIHRoZSBwcm92aWRlciB1bmxvYWRzLCBhIHByb3BlcnR5IHJlYWQgdGhyb3dzXG4gKiAgIGEge0BsaW5rIFBsdWdpbkFwaVJldm9rZWRFcnJvcn0gbmFtaW5nIHRoZSBwcm92aWRlciBpbnN0ZWFkIG9mIGEgbnVsbCBkZXJlZiBkZWVwIGluIHNvbWVvbmUgZWxzZSdzIHN0YWNrLlxuICogLSAqKkZyZWUtc3RyaW5nIG5hbWVzLioqIFJlY29yZHMgYXJlIGtleWVkIGJ5IGBwbHVnaW4ubWFuaWZlc3QuaWRgLCB3aGljaCBPYnNpZGlhbiBhbHJlYWR5IGtlZXBzIHVuaXF1ZS5cbiAqIC0gKipMZWdpYmxlIGZhaWx1cmUuKioge0BsaW5rIFBsdWdpbkFwaVJlZi53aGVuQXZhaWxhYmxlfSByZWplY3RzIHdpdGggYVxuICogICB7QGxpbmsgUGx1Z2luQXBpVW5hdmFpbGFibGVFcnJvcn0gY2FycnlpbmcgYSB7QGxpbmsgUGx1Z2luQXBpVW5hdmFpbGFiaWxpdHlSZWFzb259LCBzbyB0aGUgZml2ZSBkaXN0aW5jdFxuICogICBjYXVzZXMgYXJlIHRvbGQgYXBhcnQuXG4gKlxuICogUGF5bG9hZCB2YWxpZGF0aW9uIGlzIG9wdC1pbiBwZXIgbWV0aG9kIHRocm91Z2gge0BsaW5rIGh0dHBzOi8vc3RhbmRhcmRzY2hlbWEuZGV2IHwgU3RhbmRhcmQgU2NoZW1hfSwgc29cbiAqIHpvZCAvIHZhbGlib3QgLyBhcmt0eXBlIC8gYSBoYW5kLXdyaXR0ZW4gdmFsaWRhdG9yIGFsbCBwbHVnIGluIGFuZCBub25lIG9mIHRoZW0gaXMgYSBkZXBlbmRlbmN5IGhlcmUuIEl0XG4gKiBydW5zIG9ubHkgd2hpbGUgdGhlIGBvYnNpZGlhbi1saWI6dmFsaWRhdGUtcGx1Z2luLWFwaS1wYXlsb2Fkc2AgZGVidWcgc3dpdGNoIGlzIG9uIChvZmYgYnkgZGVmYXVsdCwgc2VlXG4gKiB7QGxpbmsgZ2V0VmFsaWRhdGVQbHVnaW5BcGlQYXlsb2Fkc0RlYnVnU3dpdGNofSksIHNvIHByb2R1Y3Rpb24gcGF5cyBub3RoaW5nLiBUaGUgYG9ic2lkaWFuLWRldi11dGlsczpQbHVnaW5BcGlgXG4gKiBkZWJ1Z2dlciBjb250cm9scyBsb2dnaW5nIG9ubHk6IHR1cm5pbmcgaXQgb24gY2hhbmdlcyBubyBiZWhhdmlvci5cbiAqXG4gKiBUaGUgY29udHJhY3QgaXRzZWxmIOKAlCBpdHMgdHlwZXMgYW5kIHRoZSBzY2hlbWEgYnVpbGRlcnMg4oCUIGlzIG5vdCBPYnNpZGlhbi1zcGVjaWZpYyBhbmQgbGl2ZXMgaW5cbiAqIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXBpLWNvbnRyYWN0YCAoYEFwaUNvbnRyYWN0YCwgYGNyZWF0ZUFyZ3VtZW50c1NjaGVtYWAsIGBjcmVhdGVUeXBlR3VhcmRTY2hlbWFgLFxuICogYGRlZmluZUFwaUNvbnRyYWN0YCkuIFRoaXMgbW9kdWxlIG93bnMgd2hhdCBpczogdGhlIHJlZ2lzdHJ5IGtleWVkIGJ5IHBsdWdpbiBpZCwgdGhlIHJldm9jYWJsZSBoYW5kbGVzLCB0aGVcbiAqIGRlYnVnIHN3aXRjaCBhbmQgdGhlIHZhbGlkYXRpb24gZXJyb3JzLiBBIGNvbnRyYWN0J3MgS0VZUyBkcml2ZSB0aGUgc2hhcGUgY2hlY2sgdGhhdCBkZWNpZGVzIHdoZXRoZXIgYSBwdWJsaXNoZWRcbiAqIHJlY29yZCBpcyB1c2FibGUgYXQgYWxsOyBpdHMgc2NoZW1hcyBhcmUgb25seSBldmVyIGNvbnN1bHRlZCB3aGlsZSB0aGUgc3dpdGNoIGlzIG9uLlxuICpcbiAqIFdoeSB0aGUgc2hhcGUgY2hlY2sgaXMgYSBgdHlwZW9mYCByYXRoZXIgdGhhbiBhIHNjaGVtYSBvdmVyIHRoZSB3aG9sZSBBUEkgb2JqZWN0LiBJbiB6b2QgNCBgei5mdW5jdGlvbigpYFxuICogcmV0dXJucyBhIGZ1bmN0aW9uIEZBQ1RPUlksIG5vdCBhIHNjaGVtYSwgc28gaXQgY2Fubm90IGJlIGEgYHoub2JqZWN0KClgIG1lbWJlciBkaXJlY3RseS4gVGhlcmUgaXMgYSBrbm93blxuICogd29ya2Fyb3VuZCAoem9kIzQxNDMpIOKAlCBgei5jdXN0b20oKGZuKSA9PiBmdW5jdGlvblNjaGVtYS5pbXBsZW1lbnQoZm4pKWAg4oCUIGFuZCBpdCBkb2VzIGJ1eSBjb3JyZWN0XG4gKiBgei5pbmZlcmAgdHlwZXMgZm9yIGEgZnVuY3Rpb24gbWVtYmVyLiBJdCBkb2VzIG5vdCBidXkgcnVudGltZSB2YWxpZGF0aW9uIGhlcmUsIHRob3VnaDogYHouY3VzdG9tYCBpcyBhXG4gKiBib29sZWFuIHByZWRpY2F0ZSB0aGF0IHJldHVybnMgaXRzIGlucHV0IHVuY2hhbmdlZCwgc28gdGhlIHZhbGlkYXRpbmcgd3JhcHBlciBgaW1wbGVtZW50YCBidWlsZHMgaXNcbiAqIGRpc2NhcmRlZCBhbmQgdGhlIGNoZWNrIGNvbGxhcHNlcyBiYWNrIHRvIFwiaXMgaXQgY2FsbGFibGVcIi4gS2VlcGluZyB0aGF0IHdyYXBwZXIgd291bGQgbmVlZCBhIGZ1cnRoZXJcbiAqIGAudHJhbnNmb3JtKClgLCBhbmQgd291bGQgdGhlbiBtb3ZlIHZhbGlkYXRpb24gb250byBldmVyeSBjYWxsIGluc3RlYWQgb2YgYmVoaW5kIHRoZSBkZWJ1ZyBzd2l0Y2gsIGFuZCBiaW5kXG4gKiB0aGUgY29udHJhY3QgdG8gem9kIHNwZWNpZmljYWxseSDigJQgd2hpY2ggaXMgZXhhY3RseSB3aGF0IHJlYWNoaW5nIHRocm91Z2ggU3RhbmRhcmQgU2NoZW1hIGF2b2lkcy4gU28gdGhlXG4gKiBkZWNsYXJlZCBtZXRob2QgbmFtZXMgYXJlIGNoZWNrZWQgd2l0aCBgdHlwZW9mYCwgYW5kIHRoZSBwYXlsb2FkcyBhcmUgdmFsaWRhdGVkIHBlciBtZXRob2QgaW5zdGVhZC5cbiAqXG4gKiBAcmVtYXJrc1xuICogRXZlcnkgcGx1Z2luIGJ1bmRsZXMgaXRzIE9XTiBjb3B5IG9mIGBvYnNpZGlhbi1kZXYtdXRpbHNgLCBzbyBhIHJlZ2lzdHJ5IHJlY29yZCBpcyBhIHdpcmUgZm9ybWF0IGJldHdlZW5cbiAqIGRpZmZlcmVudCBsaWJyYXJ5IHZlcnNpb25zIGFuZCBtdXN0IHN0YXkgYmFja3dhcmQtY29tcGF0aWJsZSBmb3JldmVyLiBOb3RoaW5nIGNyb3NzaW5nIGl0IG1heSBiZVxuICogYGluc3RhbmNlb2ZgLWNoZWNrZWQg4oCUIHJlYWRzIGFyZSBzdHJ1Y3R1cmFsLCBhbmQgb25seSBwbGFpbiBkYXRhIG9iamVjdHMgYW5kIHBsYWluIGZ1bmN0aW9ucyBhcmUgc3RvcmVkLlxuICpcbiAqIFRoYXQgd2lyZSBmb3JtYXQgaXMgYWxzbyBQVUJMSVNIRUQsIGFzIG9mIHRoZSBgUGx1Z2luIEFQSSBwcm90b2NvbGAgZ3VpZGU6IGEgcGx1Z2luIHRoYXQgZG9lcyBub3QgdXNlXG4gKiB0aGlzIGxpYnJhcnkgcmVhY2hlcyBhbiBBUEkgYnkgcmVhZGluZ1xuICogYGdsb2JhbFRoaXMuX19vYnNpZGlhbkRldlV0aWxzLnBsdWdpbkFwaVJlZ2lzdHJ5LnZhbHVlLnJlY29yZHNbcGx1Z2luSWRdYCBhbmQgYXBwbHlpbmcgdGhlIHNlbGVjdGlvbiBydWxlXG4gKiB7QGxpbmsgc2VsZWN0UmVjb3JkfSBpbXBsZW1lbnRzLiBTbyB7QGxpbmsgUHVibGlzaGVkUGx1Z2luQXBpUmVjb3JkfSdzIGZpZWxkIG5hbWVzLCB0aGUgc3RhdGUga2V5LCBhbmRcbiAqIFwiaGlnaGVzdCBsaXZlIHJlY29yZCBzYXRpc2Z5aW5nIHRoZSByYW5nZSB3aW5zXCIgYXJlIGEgZG9jdW1lbnRlZCBjb250cmFjdCB3aXRoIGFuIGF1ZGllbmNlIG91dHNpZGUgdGhpc1xuICogcmVwb3NpdG9yeSwgYW5kIHRoZSBndWlkZSBoYXMgdG8gYmUgdXBkYXRlZCBpbiB0aGUgc2FtZSBjaGFuZ2UgYXMgYW55IG9mIHRoZW0uIE9ubHkgYHBsdWdpbkFwaVJlZ2lzdHJ5YFxuICogaXMgcHVibGljIHdpdGhpbiB0aGUgc2hhcmVkLXN0YXRlIGJhZzsgdGhlIHJlc3Qgb2YgaXQgc3RheXMgaW50ZXJuYWwuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcGlDb250cmFjdCxcbiAgQXBpTWV0aG9kQ29udHJhY3QsXG4gIEFwaU1ldGhvZE5hbWUsXG4gIEFwaU1ldGhvZHMsXG4gIFR5cGVkQXBpQ29udHJhY3Rcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FwaS1jb250cmFjdCc7XG5pbXBvcnQgdHlwZSB7IEFzeW5jRXZlbnRTb3VyY2UgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMtZXZlbnRzJztcbmltcG9ydCB0eXBlIHtcbiAgRGVidWdTd2l0Y2gsXG4gIERlYnVnU3dpdGNoRGVmaW5pdGlvblxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvZGVidWctc3dpdGNoZXMnO1xuaW1wb3J0IHR5cGUgeyBTdGFuZGFyZFNjaGVtYVYxIH0gZnJvbSAnQHN0YW5kYXJkLXNjaGVtYS9zcGVjJztcbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBDb21wb25lbnQsXG4gIFBsdWdpblxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IHNuYXBzaG90IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FycmF5JztcbmltcG9ydCB7XG4gIGludm9rZUFzeW5jU2FmZWx5LFxuICBydW5XaXRoVGltZW91dFxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMnO1xuaW1wb3J0IHsgbWl4aW5Bc3luY0V2ZW50cyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYy1ldmVudHMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJEZWJ1Z1N3aXRjaCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9kZWJ1Zy1zd2l0Y2hlcyc7XG5pbXBvcnQgeyBjYXN0VG8gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvb2JqZWN0LXV0aWxzJztcbmltcG9ydCB7XG4gIGNvbXBhcmVWZXJzaW9ucyxcbiAgc2F0aXNmaWVzIGFzIHNhdGlzZmllc1ZlcnNpb25cbn0gZnJvbSAnY29tcGFyZS12ZXJzaW9ucyc7XG5cbmltcG9ydCB7IGdldE9ic2lkaWFuTGliRGVidWdnZXIgfSBmcm9tICcuLi9kZWJ1Zy50cyc7XG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuLi9vYnNpZGlhbi1kZXYtdXRpbHMtc3RhdGUudHMnO1xuXG5jb25zdCBQTFVHSU5fQVBJX0RFQlVHR0VSX05BTUVTUEFDRSA9ICdQbHVnaW5BcGknO1xuY29uc3QgUExVR0lOX0FQSV9SRUdJU1RSWV9TVEFURV9LRVkgPSAncGx1Z2luQXBpUmVnaXN0cnknO1xuXG5jb25zdCBWQUxJREFURV9QTFVHSU5fQVBJX1BBWUxPQURTX0RFQlVHX1NXSVRDSF9ERUZJTklUSU9OOiBEZWJ1Z1N3aXRjaERlZmluaXRpb24gPSB7XG4gIGRlc2NyaXB0aW9uOiAnVmFsaWRhdGUgZXZlcnkgcGx1Z2luLUFQSSBjYWxsXFwncyBhcmd1bWVudHMgYW5kIHJldHVybiB2YWx1ZSBhZ2FpbnN0IHRoZSBjb250cmFjdCB0aGUgQVBJIGRlY2xhcmVzLCBhbmQgdGhyb3cgb24gYSBtaXNtYXRjaC4nLFxuICBpZDogJ29ic2lkaWFuLWxpYjp2YWxpZGF0ZS1wbHVnaW4tYXBpLXBheWxvYWRzJyxcbiAgaXNFbmFibGVkQnlEZWZhdWx0OiBmYWxzZSxcbiAgbmFtZTogJ1ZhbGlkYXRlIHBsdWdpbi1BUEkgcGF5bG9hZHMnXG59O1xuXG4vKipcbiAqIEhvdyBsb25nIHtAbGluayBQbHVnaW5BcGlSZWYud2hlbkF2YWlsYWJsZX0gd2FpdHMgYmVmb3JlIGdpdmluZyB1cCBhbmQgY2xhc3NpZnlpbmcgdGhlIGZhaWx1cmUuXG4gKi9cbmNvbnN0IERFRkFVTFRfV0hFTl9BVkFJTEFCTEVfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAxMF8wMDA7XG5cbi8qKlxuICogV2hpY2ggaGFsZiBvZiBhIG1ldGhvZCBjYWxsIGEgdmFsaWRhdGlvbiBmYWlsdXJlIGNhbWUgZnJvbS5cbiAqL1xuZXhwb3J0IGVudW0gUGx1Z2luQXBpUGF5bG9hZEtpbmQge1xuICAvKipcbiAgICogVGhlIG1ldGhvZCdzIGFyZ3VtZW50cy5cbiAgICovXG4gIElucHV0ID0gJ2lucHV0JyxcblxuICAvKipcbiAgICogVGhlIG1ldGhvZCdzIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIE91dHB1dCA9ICdvdXRwdXQnXG59XG5cbi8qKlxuICogVGhlIHJlYXNvbiBhIHBsdWdpbiBBUEkgY291bGQgbm90IGJlIGhhbmRlZCBvdmVyLlxuICpcbiAqIFRoZSB3aG9sZSBwb2ludCBvZiB0aGUgZW51bSBpcyB0aGF0IHRoZXNlIGFyZSB0b2xkIGFwYXJ0LiBgQHZhbmFrYXQvcGx1Z2luLWFwaWAgY2Fubm90IHRlbGwgYW55IG9mIHRoZW1cbiAqIGFwYXJ0LCBhbmQgbm90IHVuaWZvcm1seTogYE5vdEluc3RhbGxlZGAgLyBgTm90RW5hYmxlZGAgLyBgTm90UHVibGlzaGVkYCBhbGwgcmVkdWNlIHRvIG9uZSBgTm90aWNlYCBwbHVzXG4gKiBgdW5kZWZpbmVkYCwgd2hpbGUgYFZlcnNpb25NaXNtYXRjaGAgLyBgU2hhcGVNaXNtYXRjaGAgcHJvZHVjZSBOTyBzaWduYWwgYXQgYWxsIOKAlCBpdCBuZXZlciBleGFtaW5lcyB3aGF0IGl0XG4gKiBmb3VuZCwgc28gaXQgaGFuZHMgdGhlIG9iamVjdCBvdmVyIGFuZCB0aGUgbWlzbWF0Y2ggc3VyZmFjZXMgbGF0ZXIsIHNvbWV3aGVyZSBlbHNlLCBhcyBzb21lYm9keSBlbHNlJ3NcbiAqIGBUeXBlRXJyb3JgLlxuICpcbiAqIEByZW1hcmtzXG4gKiB7QGxpbmsgUGx1Z2luQXBpUmVmLndoZW5BdmFpbGFibGV9IGNhbiByZXBvcnQgdGhlIGZpcnN0IGZpdmU7IHtAbGluayBQbHVnaW5BcGlVbmF2YWlsYWJpbGl0eVJlYXNvbi5SZXZva2VkfVxuICogaXMgbm90IG9uZSBvZiB0aGVtLCBiZWNhdXNlIGl0IGRlc2NyaWJlcyBhIGhhbmRsZSB0aGF0IFdBUyB2YWxpZCBhbmQgaXMgY2FycmllZCBieVxuICoge0BsaW5rIFBsdWdpbkFwaVJldm9rZWRFcnJvcn0gaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGVudW0gUGx1Z2luQXBpVW5hdmFpbGFiaWxpdHlSZWFzb24ge1xuICAvKipcbiAgICogVGhlIHBsdWdpbiBpcyBpbnN0YWxsZWQgYnV0IG5vdCBlbmFibGVkLlxuICAgKi9cbiAgTm90RW5hYmxlZCA9ICdub3RFbmFibGVkJyxcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBpcyBub3QgaW5zdGFsbGVkIGluIHRoaXMgdmF1bHQuXG4gICAqL1xuICBOb3RJbnN0YWxsZWQgPSAnbm90SW5zdGFsbGVkJyxcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBpcyBpbnN0YWxsZWQgYW5kIGVuYWJsZWQgYnV0IGhhcyBub3QgcHVibGlzaGVkIGFueSBBUEkuXG4gICAqL1xuICBOb3RQdWJsaXNoZWQgPSAnbm90UHVibGlzaGVkJyxcblxuICAvKipcbiAgICogVGhlIGhhbmRsZSB3YXMgdmFsaWQgYnV0IHRoZSBwcm92aWRlciBoYXMgc2luY2UgdW5sb2FkZWQsIHNvIGl0IGhhcyBiZWVuIHJldm9rZWQuXG4gICAqL1xuICBSZXZva2VkID0gJ3Jldm9rZWQnLFxuXG4gIC8qKlxuICAgKiBBIHJlY29yZCBzYXRpc2ZpZXMgdGhlIHJlcXVlc3RlZCB2ZXJzaW9uIHJhbmdlLCBidXQgdGhlIEFQSSBvYmplY3QgaXMgbWlzc2luZyBhIG1ldGhvZCB0aGUgY29udHJhY3RcbiAgICogZGVjbGFyZXMg4oCUIHRoZSBwcm92aWRlcidzIHNoaXBwZWQgc2hhcGUgYW5kIGl0cyBkZWNsYXJlZCBzaGFwZSBkaXNhZ3JlZS5cbiAgICovXG4gIFNoYXBlTWlzbWF0Y2ggPSAnc2hhcGVNaXNtYXRjaCcsXG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gcHVibGlzaGVkIGFuIEFQSSwgYnV0IG5vIHB1Ymxpc2hlZCBjb250cmFjdCB2ZXJzaW9uIHNhdGlzZmllcyB0aGUgcmVxdWVzdGVkIHJhbmdlLlxuICAgKi9cbiAgVmVyc2lvbk1pc21hdGNoID0gJ3ZlcnNpb25NaXNtYXRjaCdcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZmluZFBsdWdpbkFwaX0uXG4gKlxuICogQHR5cGVQYXJhbSBUQXBpIC0gVGhlIEFQSSB0eXBlIHRoZSBjb25zdW1lciBjb21waWxlZCBhZ2FpbnN0LCB3aGljaCBhIHR5cGVkIGNvbnRyYWN0IGlzIGNoZWNrZWQgYWdhaW5zdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaW5kUGx1Z2luQXBpUGFyYW1zPFRBcGkgZXh0ZW5kcyBvYmplY3QgPSBvYmplY3Q+IHtcbiAgLyoqXG4gICAqIFRoZSBzZW12ZXIgcmFuZ2Ugb2YgY29udHJhY3QgdmVyc2lvbnMgdGhlIGNvbnN1bWVyIGNvbXBpbGVkIGFnYWluc3QuIFRoZSBzYW1lIHJ1bGVzIGFzXG4gICAqIHtAbGluayBXYXRjaFBsdWdpbkFwaVBhcmFtcy5hcGlWZXJzaW9uUmFuZ2V9IGFwcGx5LlxuICAgKi9cbiAgcmVhZG9ubHkgYXBpVmVyc2lvblJhbmdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250cmFjdCB0aGUgQ09OU1VNRVIgZXhwZWN0cy4gV2hlbiBzdXBwbGllZCwgaXQgd2lucyBvdmVyIHRoZSBwcm92aWRlcidzIHB1Ymxpc2hlZCBjb250cmFjdCwgYXMgaW5cbiAgICoge0BsaW5rIFdhdGNoUGx1Z2luQXBpUGFyYW1zLmNvbnRyYWN0fS5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRyYWN0PzogQXBpQ29udHJhY3Q8VEFwaT47XG5cbiAgLyoqXG4gICAqIFRoZSBgbWFuaWZlc3QuaWRgIG9mIHRoZSBwcm92aWRpbmcgcGx1Z2luLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgY29udHJhY3QgYSBwcm92aWRlciBkZWNsYXJlcyBmb3IgaXRzIEFQSS5cbiAqXG4gKiBAdHlwZVBhcmFtIFRBcGkgLSBUaGUgQVBJIHRoZSBjb250cmFjdCBkZXNjcmliZXMuIGBvYmplY3RgLCB0aGUgZGVmYXVsdCwgbWVhbnMgXCJub3QgdHlwZWRcIi5cbiAqIEBkZXByZWNhdGVkIFVzZSBgQXBpQ29udHJhY3RgIGZyb20gYEBtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hcGktY29udHJhY3RgLlxuICovXG5leHBvcnQgdHlwZSBQbHVnaW5BcGlDb250cmFjdDxUQXBpIGV4dGVuZHMgb2JqZWN0ID0gb2JqZWN0PiA9IEFwaUNvbnRyYWN0PFRBcGk+O1xuXG4vKipcbiAqIE9uZSBBUEkgYSBwbHVnaW4gZXhwb3NlczogdGhlIG9iamVjdCwgdGhlIGNvbnRyYWN0IHZlcnNpb24gaXQgc2F0aXNmaWVzLCBhbmQgb3B0aW9uYWxseSB0aGUgY29udHJhY3RcbiAqIGl0c2VsZi4gVGhpcyBpcyB7QGxpbmsgUHVibGlzaFBsdWdpbkFwaVBhcmFtc30gd2l0aG91dCB0aGUgcHVibGlzaGluZyBwbHVnaW4sIHNvIGEgcGx1Z2luIGNhbiBERUNMQVJFIHdoYXRcbiAqIGl0IGV4cG9zZXMgd2l0aG91dCBhbHNvIHN0YXRpbmcgd2hvIGlzIHB1Ymxpc2hpbmcgaXQg4oCUIHdoaWNoIGlzIHdoYXQgbGV0cyBgUGx1Z2luQmFzZS5nZXRQbHVnaW5BcGlzYCBjb2xsZWN0XG4gKiB0aGUgZGVjbGFyYXRpb25zIGFuZCBkbyB0aGUgcHVibGlzaGluZyBpdHNlbGYuXG4gKlxuICogQHR5cGVQYXJhbSBUQXBpIC0gVGhlIEFQSSB0eXBlIGJlaW5nIGRlY2xhcmVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbkFwaURlY2xhcmF0aW9uPFRBcGkgZXh0ZW5kcyBvYmplY3QgPSBvYmplY3Q+IHtcbiAgLyoqXG4gICAqIFRoZSBBUEkgb2JqZWN0IHRvIHB1Ymxpc2guIEl0cyBtZXRob2RzIGFyZSBoYW5kZWQgdG8gY29uc3VtZXJzIHRocm91Z2ggYSByZXZvY2FibGUgaGFuZGxlLCBhbmQgdGhleSBhcmVcbiAgICogYWx3YXlzIGludm9rZWQgd2l0aCB0aGlzIG9iamVjdCBhcyB0aGVpciBgdGhpc2AsIHNvIGFuIGltcGxlbWVudGF0aW9uIHVzaW5nIHByaXZhdGUgY2xhc3MgZmllbGRzIGtlZXBzXG4gICAqIHdvcmtpbmcuXG4gICAqL1xuICByZWFkb25seSBhcGk6IFRBcGk7XG5cbiAgLyoqXG4gICAqIFRoZSBDT05UUkFDVCB2ZXJzaW9uLCBpbiBzZW12ZXIgZm9ybSDigJQgaW5kZXBlbmRlbnQgb2YgdGhlIHBsdWdpbidzIG93biB2ZXJzaW9uLiBQbHVnaW4gYDEuNC43YCBtYXlcbiAgICogcGVyZmVjdGx5IHdlbGwgZXhwb3NlIEFQSSBgMi4wLjBgLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBpVmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udHJhY3QgdGhpcyB2ZXJzaW9uIG9mIHRoZSBBUEkgc2F0aXNmaWVzLiBPcHRpb25hbDogd2hlbiBvbWl0dGVkLCBubyBzaGFwZSBjaGVjayBpcyBwZXJmb3JtZWQgb25cbiAgICogdGhlIHByb3ZpZGVyJ3MgYmVoYWxmIGFuZCB0aGUgY29uc3VtZXIncyBvd24gY29udHJhY3QgKGlmIGFueSkgaXMgdXNlZCBpbnN0ZWFkLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udHJhY3Q/OiBBcGlDb250cmFjdDxUQXBpPjtcbn1cblxuLyoqXG4gKiBUaGUgcGF5bG9hZCBzY2hlbWFzIGZvciBhIHNpbmdsZSBBUEkgbWV0aG9kLlxuICpcbiAqIEB0eXBlUGFyYW0gVFBhcmFtZXRlcnMgLSBUaGUgbWV0aG9kJ3MgcGFyYW1ldGVycywgYXMgYSB0dXBsZSwgd2hpY2ggdGhlIGlucHV0IHNjaGVtYSBtdXN0IHByb2R1Y2UuXG4gKiBAdHlwZVBhcmFtIFRSZXR1cm5WYWx1ZSAtIFRoZSBtZXRob2QncyByZXR1cm4gdmFsdWUsIGF3YWl0ZWQsIHdoaWNoIHRoZSBvdXRwdXQgc2NoZW1hIG11c3QgcHJvZHVjZS5cbiAqIEBkZXByZWNhdGVkIFVzZSBgQXBpTWV0aG9kQ29udHJhY3RgIGZyb20gYEBtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hcGktY29udHJhY3RgLlxuICovXG5leHBvcnQgdHlwZSBQbHVnaW5BcGlNZXRob2RDb250cmFjdDxUUGFyYW1ldGVycyA9IHVua25vd24sIFRSZXR1cm5WYWx1ZSA9IHVua25vd24+ID0gQXBpTWV0aG9kQ29udHJhY3Q8VFBhcmFtZXRlcnMsIFRSZXR1cm5WYWx1ZT47XG5cbi8qKlxuICogVGhlIG5hbWVzIG9mIHRoZSBmdW5jdGlvbiBtZW1iZXJzIG9mIGFuIEFQSS5cbiAqXG4gKiBAdHlwZVBhcmFtIFRBcGkgLSBUaGUgQVBJLlxuICogQGRlcHJlY2F0ZWQgVXNlIGBBcGlNZXRob2ROYW1lYCBmcm9tIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXBpLWNvbnRyYWN0YC5cbiAqL1xuZXhwb3J0IHR5cGUgUGx1Z2luQXBpTWV0aG9kTmFtZTxUQXBpIGV4dGVuZHMgb2JqZWN0PiA9IEFwaU1ldGhvZE5hbWU8VEFwaT47XG5cbi8qKlxuICogVGhlIGZ1bmN0aW9uIG1lbWJlcnMgb2YgYW4gQVBJLlxuICpcbiAqIEB0eXBlUGFyYW0gVEFwaSAtIFRoZSBBUEkuXG4gKiBAZGVwcmVjYXRlZCBVc2UgYEFwaU1ldGhvZHNgIGZyb20gYEBtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hcGktY29udHJhY3RgLlxuICovXG5leHBvcnQgdHlwZSBQbHVnaW5BcGlNZXRob2RzPFRBcGkgZXh0ZW5kcyBvYmplY3Q+ID0gQXBpTWV0aG9kczxUQXBpPjtcblxuLyoqXG4gKiBBIGxpdmUgcmVmZXJlbmNlIHRvIGFub3RoZXIgcGx1Z2luJ3MgQVBJLlxuICpcbiAqIEB0eXBlUGFyYW0gVEFwaSAtIFRoZSBBUEkgdHlwZSB0aGUgY29uc3VtZXIgY29tcGlsZWQgYWdhaW5zdC5cbiAqXG4gKiBAcmVtYXJrc1xuICogVGhlIHJlZiBpcyB0aGUgV0hPTEUgY29uc3VtZXIgc3VyZmFjZSwgZGVsaWJlcmF0ZWx5LiBBIHBsYWluIHtAbGluayBQcm9taXNlfSBjYW5ub3QgbW9kZWwgdGhpcyBiZWNhdXNlIGl0XG4gKiBzZXR0bGVzIG9uY2UsIHdoZXJlYXMgYXZhaWxhYmlsaXR5IGlzIGEgcmVwZWF0aW5nIHNpZ25hbCAoYXZhaWxhYmxlIOKGkiBnb25lIOKGkiBhdmFpbGFibGUgYWdhaW4gYWNyb3NzIGFcbiAqIGRpc2FibGUvZW5hYmxlIGN5Y2xlKSDigJQgd2hpY2ggaXMgd2h5IHtAbGluayBQbHVnaW5BcGlSZWYud2hlbkF2YWlsYWJsZX0gaXMgYSBtZXRob2QgT04gdGhlIHJlZiByYXRoZXIgdGhhblxuICogdGhlIHRoaW5nIGhhbmRlZCBiYWNrLiBUaGUgYGNoYW5nZWAgZXZlbnQgZXhpc3RzIGZvciBjb25zdW1lcnMgdGhhdCBtdXN0IHJlYWN0IHJhdGhlciB0aGFuIHJlYWQsIGFuZCBpc1xuICogc2Vjb25kYXJ5OiBpdCBpbXBvc2VzIG5vIGNlcmVtb255IG9uIHRoZSBjb21tb24gY2FzZSwgd2hpY2ggaXMgcmVhZGluZyB7QGxpbmsgUGx1Z2luQXBpUmVmLnZhbHVlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5BcGlSZWY8VEFwaSBleHRlbmRzIG9iamVjdD4gZXh0ZW5kcyBBc3luY0V2ZW50U291cmNlPFBsdWdpbkFwaVJlZkV2ZW50TWFwPiB7XG4gIC8qKlxuICAgKiBXaHkgdGhlIEFQSSBpcyBub3QgYXZhaWxhYmxlIHJpZ2h0IG5vdywgb3IgYG51bGxgIHdoaWxlIGl0IGlzLlxuICAgKlxuICAgKiBDbGFzc2lmaWVkIGF0IHRoZSBtb21lbnQgb2YgcmVhZGluZywgYnkgdGhlIHNhbWUgcHJvYmUge0BsaW5rIFBsdWdpbkFwaVJlZi53aGVuQXZhaWxhYmxlfSB1c2VzIGZvciBpdHNcbiAgICogZXJyb3IsIHNvIGEgY2FsbGVyIHRoYXQgbXVzdCBkZWNpZGUgc3luY2hyb25vdXNseSDigJQgd2hpY2ggbWVzc2FnZSB0byBzaG93LCB3aGljaCBidXR0b24gdG8gb2ZmZXIg4oCUIGNhblxuICAgKiB0ZWxsIFwibm90IGluc3RhbGxlZFwiIGZyb20gXCJ0b28gb2xkXCIgd2l0aG91dCB3YWl0aW5nIGZvciBhIHRpbWVvdXQuIExpa2Uge0BsaW5rIFBsdWdpbkFwaVJlZi52YWx1ZX0sIGl0XG4gICAqIGRlc2NyaWJlcyBub3c6IGR1cmluZyBhIGNvbnN1bWVyJ3MgYG9ubG9hZGAgYSBwcm92aWRlciB0aGF0IGhhcyBub3QgbG9hZGVkIHlldCByZWFkcyBhc1xuICAgKiB7QGxpbmsgUGx1Z2luQXBpVW5hdmFpbGFiaWxpdHlSZWFzb24uTm90UHVibGlzaGVkfS5cbiAgICovXG4gIHJlYWRvbmx5IHVuYXZhaWxhYmlsaXR5UmVhc29uOiBudWxsIHwgUGx1Z2luQXBpVW5hdmFpbGFiaWxpdHlSZWFzb247XG5cbiAgLyoqXG4gICAqIFRoZSBBUEksIG9yIGBudWxsYCB3aGVuIGl0IGlzIG5vdCBjdXJyZW50bHkgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBBbHdheXMgY3VycmVudCwgc3luY2hyb25vdXMsIGFuZCBmcmVlIOKAlCB0aGUgcmVmIG1haW50YWlucyBpdCwgc28gdGhlcmUgaXMgbm8gcmVnaXN0cnkgbG9va3VwIHBlciByZWFkLlxuICAgKiBgbnVsbGAgaGVyZSBtZWFucyBcIm5vdCBhdmFpbGFibGUgcmlnaHQgbm93XCIsIE5PVCBcIm5vdCBpbnN0YWxsZWRcIjogZHVyaW5nIGEgY29uc3VtZXIncyBgb25sb2FkYCB0aGVcbiAgICogcHJvdmlkZXIgbWF5IHNpbXBseSBub3QgaGF2ZSBsb2FkZWQgeWV0LCBhbmQgdGhlIHZhbHVlIGJlY29tZXMgbm9uLWBudWxsYCBvbiBpdHMgb3duLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IG51bGwgfCBUQXBpO1xuXG4gIC8qKlxuICAgKiBXYWl0cyBmb3IgdGhlIEFQSSB0byBiZWNvbWUgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgd2FpdC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBBUEkuXG4gICAqIEB0aHJvd3MgQSB7QGxpbmsgUGx1Z2luQXBpVW5hdmFpbGFibGVFcnJvcn0gd2hvc2Uge0BsaW5rIFBsdWdpbkFwaVVuYXZhaWxhYmxlRXJyb3IucmVhc29ufSBzYXlzIHdoaWNoIG9mXG4gICAqIHRoZSBmaXZlIGZhaWx1cmVzIG9jY3VycmVkLCBpZiB0aGUgQVBJIGRvZXMgbm90IGJlY29tZSBhdmFpbGFibGUgYmVmb3JlIHRoZSB0aW1lb3V0IGVsYXBzZXMuXG4gICAqL1xuICB3aGVuQXZhaWxhYmxlOiAob3B0aW9ucz86IFdoZW5BdmFpbGFibGVQbHVnaW5BcGlPcHRpb25zKSA9PiBQcm9taXNlPFRBcGk+O1xufVxuXG4vKipcbiAqIFRoZSBldmVudHMgYSB7QGxpbmsgUGx1Z2luQXBpUmVmfSBmaXJlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5BcGlSZWZFdmVudE1hcCB7XG4gIC8qKlxuICAgKiBGaXJlZCB3aGVuZXZlciB7QGxpbmsgUGx1Z2luQXBpUmVmLnZhbHVlfSBjaGFuZ2VzIOKAlCBpbmNsdWRpbmcgd2hlbiBpdCBiZWNvbWVzIGBudWxsYCBiZWNhdXNlIHRoZSBwcm92aWRlclxuICAgKiB1bmxvYWRlZC5cbiAgICovXG4gIGNoYW5nZTogW107XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBQbHVnaW5BcGlVbmF2YWlsYWJsZUVycm9yfSBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5BcGlVbmF2YWlsYWJsZUVycm9yQ29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogQW4gZXhwbGljaXQgbWVzc2FnZS4gV2hlbiBvbWl0dGVkLCBvbmUgaXMgZGVyaXZlZCBmcm9tIHRoZSBwbHVnaW4gaWQgYW5kIHRoZSByZWFzb24uXG4gICAqL1xuICByZWFkb25seSBtZXNzYWdlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYG1hbmlmZXN0LmlkYCBvZiB0aGUgcGx1Z2luIHdob3NlIEFQSSB3YXMgcmVxdWVzdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogV2hpY2ggb2YgdGhlIGZpdmUgZmFpbHVyZXMgb2NjdXJyZWQuXG4gICAqL1xuICByZWFkb25seSByZWFzb246IFBsdWdpbkFwaVVuYXZhaWxhYmlsaXR5UmVhc29uO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSB7QGxpbmsgUGx1Z2luQXBpVmFsaWRhdGlvbkVycm9yfSBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5BcGlWYWxpZGF0aW9uRXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgaXNzdWVzIHRoZSBzY2hlbWEgcmVwb3J0ZWQuXG4gICAqL1xuICByZWFkb25seSBpc3N1ZXM6IHJlYWRvbmx5IFN0YW5kYXJkU2NoZW1hVjEuSXNzdWVbXTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB3aG9zZSBwYXlsb2FkIGZhaWxlZCB2YWxpZGF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgbWV0aG9kTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBpbnB1dCBvciB0aGUgb3V0cHV0IGZhaWxlZC5cbiAgICovXG4gIHJlYWRvbmx5IHBheWxvYWRLaW5kOiBQbHVnaW5BcGlQYXlsb2FkS2luZDtcblxuICAvKipcbiAgICogVGhlIGBtYW5pZmVzdC5pZGAgb2YgdGhlIHByb3ZpZGluZyBwbHVnaW4uXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBwdWJsaXNoUGx1Z2luQXBpfS5cbiAqXG4gKiBAdHlwZVBhcmFtIFRBcGkgLSBUaGUgQVBJIHR5cGUgYmVpbmcgcHVibGlzaGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1Ymxpc2hQbHVnaW5BcGlQYXJhbXM8VEFwaSBleHRlbmRzIG9iamVjdD4gZXh0ZW5kcyBQbHVnaW5BcGlEZWNsYXJhdGlvbjxUQXBpPiB7XG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHdob3NlIHVubG9hZCByZXZva2VzIHRoZSByZWNvcmQuIERlZmF1bHRzIHRvIHtAbGluayBQdWJsaXNoUGx1Z2luQXBpUGFyYW1zLnBsdWdpbn0sIHdoaWNoIGlzXG4gICAqIHRoZSByaWdodCBvd25lciBmb3IgYW4gQVBJIHB1Ymxpc2hlZCBmb3IgYXMgbG9uZyBhcyB0aGUgcGx1Z2luIHJ1bnMuXG4gICAqXG4gICAqIFBhc3MgYSBuYXJyb3dlciBvbmUgd2hlbiB0aGUgQVBJIGlzIG9ubHkgdmFsaWQgZm9yIHBhcnQgb2YgdGhlIHBsdWdpbidzIGxpZmUg4oCUIGEgcGx1Z2luIHdob3NlIGZlYXR1cmVcbiAgICogc3VyZmFjZSBpcyB0b3JuIGRvd24gYW5kIHJlYnVpbHQgd2hpbGUgdGhlIHBsdWdpbiBpdHNlbGYgc3RheXMgbG9hZGVkIG11c3QgcmV2b2tlIHdpdGggdGhlIHN1cmZhY2UsIG9yIGl0XG4gICAqIGxlYXZlcyBjb25zdW1lcnMgaG9sZGluZyBoYW5kbGVzIGludG8gY29kZSB0aGF0IGlzIG5vIGxvbmdlciB0aGVyZS5cbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudD86IENvbXBvbmVudDtcblxuICAvKipcbiAgICogVGhlIHB1Ymxpc2hpbmcgcGx1Z2luLiBUaGUgcmVjb3JkIGlzIGtleWVkIGJ5IGl0cyBgbWFuaWZlc3QuaWRgIGFuZCByZXZva2VkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgcGx1Z2luXG4gICAqIHVubG9hZHMsIHZpYSBgcGx1Z2luLnJlZ2lzdGVyKClgLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luOiBQbHVnaW47XG59XG5cbi8qKlxuICogVGhlIGNvbnRyYWN0IG9mIGEgbmFtZWQgQVBJLCB3aXRoIGJvdGggc2NoZW1hcyByZXF1aXJlZCBvbiBldmVyeSBlbnRyeS5cbiAqXG4gKiBAdHlwZVBhcmFtIFRBcGkgLSBUaGUgQVBJIHRoZSBjb250cmFjdCBkZXNjcmliZXMuXG4gKiBAZGVwcmVjYXRlZCBVc2UgYFR5cGVkQXBpQ29udHJhY3RgIGZyb20gYEBtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hcGktY29udHJhY3RgLlxuICovXG5leHBvcnQgdHlwZSBUeXBlZFBsdWdpbkFwaUNvbnRyYWN0PFRBcGkgZXh0ZW5kcyBvYmplY3Q+ID0gVHlwZWRBcGlDb250cmFjdDxUQXBpPjtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgd2F0Y2hQbHVnaW5BcGl9LlxuICpcbiAqIEB0eXBlUGFyYW0gVEFwaSAtIFRoZSBBUEkgdHlwZSB0aGUgY29uc3VtZXIgY29tcGlsZWQgYWdhaW5zdCwgd2hpY2ggYSB0eXBlZCBjb250cmFjdCBpcyBjaGVja2VkIGFnYWluc3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2F0Y2hQbHVnaW5BcGlQYXJhbXM8VEFwaSBleHRlbmRzIG9iamVjdCA9IG9iamVjdD4ge1xuICAvKipcbiAgICogVGhlIHNlbXZlciByYW5nZSBvZiBjb250cmFjdCB2ZXJzaW9ucyB0aGUgY29uc3VtZXIgY29tcGlsZWQgYWdhaW5zdCwgZS5nLiBgJ14yJ2AuIFRoZSBoaWdoZXN0IHB1Ymxpc2hlZFxuICAgKiB2ZXJzaW9uIHNhdGlzZnlpbmcgaXQgd2lucy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIHJhbmdlIGlzIGV2YWx1YXRlZCBieSBgY29tcGFyZS12ZXJzaW9uc2AsIHdoaWNoIGFjY2VwdHMgYF5gLCBgfmAsIGNvbXBhcmlzb24gb3BlcmF0b3JzLCBhbmQgYHhgXG4gICAqIHdpbGRjYXJkcyDigJQgYnV0IE5PVCBhIGJhcmUgYCpgLiBTcGVsbCBcImFueSB2ZXJzaW9uXCIgYXMgYCc+PTAuMC4wJ2AuXG4gICAqL1xuICByZWFkb25seSBhcGlWZXJzaW9uUmFuZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZSwgdXNlZCB0byBjbGFzc2lmeSBhIGZhaWx1cmUgYXMgbm90LWluc3RhbGxlZCB2cyBub3QtZW5hYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IG93bmluZyB0aGUgc3Vic2NyaXB0aW9uLiBUaGUgd2F0Y2ggaXMgdG9ybiBkb3duIHdoZW4gaXQgdW5sb2Fkcy5cbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudDogQ29tcG9uZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgY29udHJhY3QgdGhlIENPTlNVTUVSIGV4cGVjdHMuIE9wdGlvbmFsLCBhbmQgaXQgd2lucyBvdmVyIHRoZSBwcm92aWRlcidzIHB1Ymxpc2hlZCBjb250cmFjdCB3aGVuXG4gICAqIHN1cHBsaWVkIOKAlCBpdCBpcyB0aGUgY29uc3VtZXIncyBvd24gY29tcGlsZWQtYWdhaW5zdCBleHBlY3RhdGlvbiwgc28gaXQgaXMgdGhlIG9uZSB3aG9zZSB2aW9sYXRpb24gaXNcbiAgICogdGhlIGNvbnN1bWVyJ3MgcHJvYmxlbS5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRyYWN0PzogQXBpQ29udHJhY3Q8VEFwaT47XG5cbiAgLyoqXG4gICAqIFRoZSBgbWFuaWZlc3QuaWRgIG9mIHRoZSBwcm92aWRpbmcgcGx1Z2luLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgUGx1Z2luQXBpUmVmLndoZW5BdmFpbGFibGV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdoZW5BdmFpbGFibGVQbHVnaW5BcGlPcHRpb25zIHtcbiAgLyoqXG4gICAqIEhvdyBsb25nIHRvIHdhaXQgYmVmb3JlIGdpdmluZyB1cCBhbmQgY2xhc3NpZnlpbmcgdGhlIGZhaWx1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IDEwMDAwXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNyZWF0ZU1ldGhvZFdyYXBwZXJ9LlxuICovXG5pbnRlcmZhY2UgQ3JlYXRlTWV0aG9kV3JhcHBlclBhcmFtcyB7XG4gIHJlYWRvbmx5IG1ldGhvZENvbnRyYWN0OiBBcGlNZXRob2RDb250cmFjdCB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGh1bWFuLXJlYWRhYmxlIG5hbWUgdXNlZCBpbiBlcnJvciBtZXNzYWdlcyBhbmQgZGVidWcgb3V0cHV0LiBOT1QgYSBrZXkg4oCUIHNlZSB7QGxpbmsgcHJvcGVydHlLZXl9LlxuICAgKi9cbiAgcmVhZG9ubHkgbWV0aG9kTmFtZTogc3RyaW5nO1xuXG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBrZXkgdGhlIG1ldGhvZCBpcyBhY3R1YWxseSByZWFkIGJ5LCB3aGljaCBtYXkgYmUgYSBzeW1ib2wuXG4gICAqL1xuICByZWFkb25seSBwcm9wZXJ0eUtleTogUHJvcGVydHlLZXk7XG5cbiAgcmVhZG9ubHkgdGFyZ2V0OiBvYmplY3Q7XG59XG5cbi8qKlxuICogVGhlIHJlYWxtLWdsb2JhbCByZWdpc3RyeSBzaGFyZWQgYnkgZXZlcnkgYG9ic2lkaWFuLWRldi11dGlsc2AgY29weSBpbiB0aGUgcmVuZGVyZXIuXG4gKi9cbmludGVyZmFjZSBQbHVnaW5BcGlSZWdpc3RyeSB7XG4gIHJlY29yZHM6IFJlY29yZDxzdHJpbmcsIFB1Ymxpc2hlZFBsdWdpbkFwaVJlY29yZFtdPjtcbiAgc3Vic2NyaWJlcnM6ICgoKSA9PiB2b2lkKVtdO1xufVxuXG4vKipcbiAqIEEgcmVjb3JkIGFzIGl0IHNpdHMgaW4gdGhlIHNoYXJlZCByZWdpc3RyeS5cbiAqXG4gKiBAcmVtYXJrc1xuICogVGhpcyBpcyB0aGUgV0lSRSBGT1JNQVQgYmV0d2VlbiBkaWZmZXJlbnQgYG9ic2lkaWFuLWRldi11dGlsc2AgY29waWVzLCBzbyBpdCBob2xkcyBub3RoaW5nIGJ1dCBwbGFpbiBkYXRhXG4gKiBhbmQgcGxhaW4gZnVuY3Rpb25zLCBhbmQgZXZlcnkgcmVhZCBvZiBpdCBlbHNld2hlcmUgaW4gdGhpcyBmaWxlIGlzIHN0cnVjdHVyYWwuXG4gKlxuICogVW5leHBvcnRlZCBhbmQgbm9uZXRoZWxlc3MgUFVCTElDOiB0aGUgYFBsdWdpbiBBUEkgcHJvdG9jb2xgIGd1aWRlIGRvY3VtZW50cyB0aGVzZSBmaXZlIGZpZWxkIG5hbWVzIGZvclxuICogdGhpcmQtcGFydHkgcGx1Z2lucyB0aGF0IHJlYWQgdGhlIHJlZ2lzdHJ5IHdpdGhvdXQgdGhpcyBsaWJyYXJ5LCBhbmQgcmVwcm9kdWNlcyB0aGUgaW50ZXJmYWNlIHZlcmJhdGltXG4gKiBmb3IgdGhlbSB0byBwYXN0ZS4gSXQgc3RheXMgdW5leHBvcnRlZCBiZWNhdXNlIG5vIGNvbnN1bWVyIE9GIHRoaXMgbGlicmFyeSBldmVyIHRvdWNoZXMgYSByZWNvcmQg4oCUXG4gKiB7QGxpbmsgd2F0Y2hQbHVnaW5BcGl9IGlzIHRoZWlyIHdob2xlIHN1cmZhY2Ug4oCUIHNvIGV4cG9ydGluZyBpdCB3b3VsZCB3aWRlbiB0aGUgcGFja2FnZSdzIEFQSSBmb3IgYW5cbiAqIGF1ZGllbmNlIHRoYXQgZG9lcyBub3QgaW1wb3J0IHRoZSBwYWNrYWdlLiBSZW5hbWluZyBhIGZpZWxkIGhlcmUgaXMgYSBicmVha2luZyBjaGFuZ2UgdG8gdGhlIGd1aWRlLlxuICovXG5pbnRlcmZhY2UgUHVibGlzaGVkUGx1Z2luQXBpUmVjb3JkIHtcbiAgYXBpOiBvYmplY3Q7XG4gIGFwaVZlcnNpb246IHN0cmluZztcbiAgY29udHJhY3Q6IEFwaUNvbnRyYWN0O1xuICBpc1Jldm9rZWQ6IGJvb2xlYW47XG4gIHBsdWdpbklkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHZhbGlkYXRlUGF5bG9hZH0uXG4gKi9cbmludGVyZmFjZSBWYWxpZGF0ZVBheWxvYWRQYXJhbXMge1xuICByZWFkb25seSBtZXRob2ROYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBheWxvYWRLaW5kOiBQbHVnaW5BcGlQYXlsb2FkS2luZDtcbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc2NoZW1hOiBTdGFuZGFyZFNjaGVtYVYxO1xuICByZWFkb25seSB2YWx1ZTogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBIb2xkcyB3aGF0IGEgd2F0Y2ggbmVlZHMgcmVnYXJkbGVzcyBvZiB0aGUgQVBJIHR5cGUgaXQgaXMgdHlwZWQgYWdhaW5zdCwgc28gdGhlIHtAbGluayBtaXhpbkFzeW5jRXZlbnRzfVxuICogbWl4aW4gaGFzIGEgcmVhbCBiYXNlIHRvIGV4dGVuZC5cbiAqL1xuYWJzdHJhY3QgY2xhc3MgUGx1Z2luQXBpV2F0Y2hCYXNlIHtcbiAgcHJvdGVjdGVkIGhhbmRsZTogbnVsbCB8IG9iamVjdCA9IG51bGw7XG5cbiAgcHJvdGVjdGVkIHJlY29yZDogbnVsbCB8IFB1Ymxpc2hlZFBsdWdpbkFwaVJlY29yZCA9IG51bGw7XG5cbiAgLy8gQSBgcHJvdGVjdGVkYCBjb25zdHJ1Y3RvciBpcyBub3QgYXNzaWduYWJsZSB0byBgQWJzdHJhY3RDb25zdHJ1Y3RvcjxvYmplY3Q+YCwgd2hpY2ggaXMgd2hhdFxuICAvLyBgbWl4aW5Bc3luY0V2ZW50c2AgYWNjZXB0cywgc28gdGhpcyBzdGF5cyBwdWJsaWMgZXZlbiB0aG91Z2ggb25seSB0aGUgc3ViY2xhc3MgYmVsb3cgY2FsbHMgaXQuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgcGFyYW1zOiBXYXRjaFBsdWdpbkFwaVBhcmFtcykge31cblxuICAvKipcbiAgICogQnVpbGRzIHRoZSBlcnJvciBkZXNjcmliaW5nIHdoeSB0aGUgQVBJIGlzIG5vdCBhdmFpbGFibGUgcmlnaHQgbm93LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgY2xhc3NpZmllZCBlcnJvci5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVVbmF2YWlsYWJsZUVycm9yKCk6IFBsdWdpbkFwaVVuYXZhaWxhYmxlRXJyb3Ige1xuICAgIHJldHVybiBuZXcgUGx1Z2luQXBpVW5hdmFpbGFibGVFcnJvcih7XG4gICAgICBwbHVnaW5JZDogdGhpcy5wYXJhbXMucGx1Z2luSWQsXG4gICAgICByZWFzb246IHJlc29sdmVVbmF2YWlsYWJpbGl0eVJlYXNvbih0aGlzLnBhcmFtcylcbiAgICB9KTtcbiAgfVxufVxuXG5jbGFzcyBQbHVnaW5BcGlSZWZJbXBsPFRBcGkgZXh0ZW5kcyBvYmplY3Q+IGV4dGVuZHMgbWl4aW5Bc3luY0V2ZW50czxQbHVnaW5BcGlSZWZFdmVudE1hcD4oKShQbHVnaW5BcGlXYXRjaEJhc2UpIGltcGxlbWVudHMgUGx1Z2luQXBpUmVmPFRBcGk+IHtcbiAgcHVibGljIGdldCB1bmF2YWlsYWJpbGl0eVJlYXNvbigpOiBudWxsIHwgUGx1Z2luQXBpVW5hdmFpbGFiaWxpdHlSZWFzb24ge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZSA9PT0gbnVsbCA/IHJlc29sdmVVbmF2YWlsYWJpbGl0eVJlYXNvbih0aGlzLnBhcmFtcykgOiBudWxsO1xuICB9XG5cbiAgcHVibGljIGdldCB2YWx1ZSgpOiBudWxsIHwgVEFwaSB7XG4gICAgcmV0dXJuIGNhc3RUbzxudWxsIHwgVEFwaT4odGhpcy5oYW5kbGUpO1xuICB9XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogV2F0Y2hQbHVnaW5BcGlQYXJhbXMpIHtcbiAgICBzdXBlcihwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29tcHV0ZXMgdGhlIGN1cnJlbnQgdmFsdWUgZnJvbSB0aGUgcmVnaXN0cnksIGZpcmluZyBgY2hhbmdlYCBvbmx5IHdoZW4gaXQgYWN0dWFsbHkgY2hhbmdlZC5cbiAgICovXG4gIHB1YmxpYyByZWZyZXNoKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlY29yZCA9IHNlbGVjdFJlY29yZCh0aGlzLnBhcmFtcyk7XG4gICAgaWYgKHJlY29yZCA9PT0gdGhpcy5yZWNvcmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlY29yZCA9IHJlY29yZDtcbiAgICB0aGlzLmhhbmRsZSA9IHJlY29yZCA9PT0gbnVsbCA/IG51bGwgOiBjcmVhdGVSZXZvY2FibGVIYW5kbGUocmVjb3JkLCB0aGlzLnBhcmFtcy5jb250cmFjdCk7XG4gICAgdGhpcy50cmlnZ2VyKCdjaGFuZ2UnKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB3aGVuQXZhaWxhYmxlKG9wdGlvbnM/OiBXaGVuQXZhaWxhYmxlUGx1Z2luQXBpT3B0aW9ucyk6IFByb21pc2U8VEFwaT4ge1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgaWYgKGN1cnJlbnRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJ1bldpdGhUaW1lb3V0PFRBcGk+KHtcbiAgICAgICAgb3BlcmF0aW9uRnVuY3Rpb246IGFzeW5jIChhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwpOiBQcm9taXNlPFRBcGk+ID0+IGF3YWl0IHRoaXMud2FpdEZvclZhbHVlKGFib3J0U2lnbmFsKSxcbiAgICAgICAgb3BlcmF0aW9uTmFtZTogYHdhdGNoUGx1Z2luQXBpKFwiJHt0aGlzLnBhcmFtcy5wbHVnaW5JZH1cIikud2hlbkF2YWlsYWJsZWAsXG4gICAgICAgIHRpbWVvdXRJbk1pbGxpc2Vjb25kczogb3B0aW9ucz8udGltZW91dEluTWlsbGlzZWNvbmRzID8/IERFRkFVTFRfV0hFTl9BVkFJTEFCTEVfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFNcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhyb3cgdGhpcy5jcmVhdGVVbmF2YWlsYWJsZUVycm9yKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3YWl0Rm9yVmFsdWUoYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsKTogUHJvbWlzZTxUQXBpPiB7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlPFRBcGk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIFRoZSBsaXN0ZW5lciBpcyByZWdpc3RlcmVkIEZJUlNUIGFuZCBpbnZva2VkIHRocm91Z2ggYSB0aHVuaywgc28gYGV2ZW50UmVmYCBpcyBhbHJlYWR5IGJvdW5kIGJ5IHRoZVxuICAgICAgLy8gdGltZSBhbnl0aGluZyBjYW4gcmVhY2ggaXQg4oCUIHdoaWNoIGlzIHdoYXQgbGV0cyBgY2xlYW5VcGAgYmUgdW5jb25kaXRpb25hbCByYXRoZXIgdGhhbiBudWxsLWd1YXJkZWQuXG4gICAgICBjb25zdCBldmVudFJlZiA9IHRoaXMub24oJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgaGFuZGxlQ2hhbmdlKCk7XG4gICAgICB9KTtcblxuICAgICAgZnVuY3Rpb24gY2xlYW5VcCgpOiB2b2lkIHtcbiAgICAgICAgZXZlbnRSZWYuYXN5bmNFdmVudFNvdXJjZS5vZmZyZWYoZXZlbnRSZWYpO1xuICAgICAgICBhYm9ydFNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGhhbmRsZUFib3J0KTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gaGFuZGxlQWJvcnQoKTogdm9pZCB7XG4gICAgICAgIGNsZWFuVXAoKTtcbiAgICAgICAgcmVqZWN0KGFib3J0U2lnbmFsLnJlYXNvbiBhcyBFcnJvcik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhbmRsZUNoYW5nZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjbGVhblVwKCk7XG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgfTtcblxuICAgICAgYWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBoYW5kbGVBYm9ydCk7XG4gICAgICBoYW5kbGVDaGFuZ2UoKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIGEgcGx1Z2luIEFQSSBjYW5ub3QgYmUgaGFuZGVkIG92ZXIsIGNhcnJ5aW5nIHRoZSB7QGxpbmsgUGx1Z2luQXBpVW5hdmFpbGFiaWxpdHlSZWFzb259IHRoYXQgc2F5c1xuICogd2h5LlxuICovXG5leHBvcnQgY2xhc3MgUGx1Z2luQXBpVW5hdmFpbGFibGVFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyoqXG4gICAqIFRoZSBgbWFuaWZlc3QuaWRgIG9mIHRoZSBwbHVnaW4gd2hvc2UgQVBJIHdhcyByZXF1ZXN0ZWQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogV2hpY2ggb2YgdGhlIGZpdmUgZmFpbHVyZXMgb2NjdXJyZWQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVhc29uOiBQbHVnaW5BcGlVbmF2YWlsYWJpbGl0eVJlYXNvbjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHtAbGluayBQbHVnaW5BcGlVbmF2YWlsYWJsZUVycm9yfS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZXJyb3IuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBQbHVnaW5BcGlVbmF2YWlsYWJsZUVycm9yQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcihwYXJhbXMubWVzc2FnZSA/PyBgVGhlIEFQSSBvZiB0aGUgcGx1Z2luIFwiJHtwYXJhbXMucGx1Z2luSWR9XCIgaXMgdW5hdmFpbGFibGU6ICR7cGFyYW1zLnJlYXNvbn0uYCk7XG4gICAgdGhpcy5uYW1lID0gJ1BsdWdpbkFwaVVuYXZhaWxhYmxlRXJyb3InO1xuICAgIHRoaXMucGx1Z2luSWQgPSBwYXJhbXMucGx1Z2luSWQ7XG4gICAgdGhpcy5yZWFzb24gPSBwYXJhbXMucmVhc29uO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSBwcm9wZXJ0eSBpcyByZWFkIGZyb20gYSBoYW5kbGUgd2hvc2UgcHJvdmlkZXIgaGFzIHNpbmNlIHVubG9hZGVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIHBvaW50IG9mIGhhbmRpbmcgb3V0IGEgcmV2b2NhYmxlIGhhbmRsZSByYXRoZXIgdGhhbiB0aGUgcmF3IG9iamVjdDogYSBjb25zdW1lciB0aGF0IGNhY2hlZCB0aGVcbiAqIEFQSSBpbiBhIGZpZWxkIGFuZCBrZXB0IHVzaW5nIGl0IGFjcm9zcyBhIGRpc2FibGUgZ2V0cyBhbiBlcnJvciBuYW1pbmcgdGhlIHByb3ZpZGVyLCBpbnN0ZWFkIG9mXG4gKiBgQ2Fubm90IHJlYWQgcHJvcGVydGllcyBvZiB1bmRlZmluZWRgIHNvbWV3aGVyZSBkZWVwIGluc2lkZSBhIHRvcm4tZG93biBwbHVnaW4uXG4gKi9cbmV4cG9ydCBjbGFzcyBQbHVnaW5BcGlSZXZva2VkRXJyb3IgZXh0ZW5kcyBQbHVnaW5BcGlVbmF2YWlsYWJsZUVycm9yIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB7QGxpbmsgUGx1Z2luQXBpUmV2b2tlZEVycm9yfS5cbiAgICpcbiAgICogQHBhcmFtIHBsdWdpbklkIC0gVGhlIGBtYW5pZmVzdC5pZGAgb2YgdGhlIHBsdWdpbiB3aG9zZSBBUEkgd2FzIHJldm9rZWQuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGx1Z2luSWQ6IHN0cmluZykge1xuICAgIHN1cGVyKHtcbiAgICAgIG1lc3NhZ2U6IGBUaGUgQVBJIG9mIHRoZSBwbHVnaW4gXCIke3BsdWdpbklkfVwiIGhhcyBiZWVuIHJldm9rZWQsIGJlY2F1c2UgdGhlIHBsdWdpbiB3YXMgdW5sb2FkZWQuYCxcbiAgICAgIHBsdWdpbklkLFxuICAgICAgcmVhc29uOiBQbHVnaW5BcGlVbmF2YWlsYWJpbGl0eVJlYXNvbi5SZXZva2VkXG4gICAgfSk7XG4gICAgdGhpcy5uYW1lID0gJ1BsdWdpbkFwaVJldm9rZWRFcnJvcic7XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd24gd2hlbiBhIHB1Ymxpc2hlZCBBUEkncyBwYXlsb2FkIGZhaWxzIHRoZSBzY2hlbWEgaXRzIGNvbnRyYWN0IGRlY2xhcmVzLlxuICpcbiAqIE9ubHkgZXZlciB0aHJvd24gd2hpbGUgdGhlIGBvYnNpZGlhbi1saWI6dmFsaWRhdGUtcGx1Z2luLWFwaS1wYXlsb2Fkc2AgZGVidWcgc3dpdGNoIGlzIG9uIChzZWVcbiAqIHtAbGluayBnZXRWYWxpZGF0ZVBsdWdpbkFwaVBheWxvYWRzRGVidWdTd2l0Y2h9KSDigJQgb3RoZXJ3aXNlIG5vIHBheWxvYWQgaXMgdmFsaWRhdGVkIGF0IGFsbC5cbiAqL1xuZXhwb3J0IGNsYXNzIFBsdWdpbkFwaVZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyoqXG4gICAqIFRoZSBpc3N1ZXMgdGhlIHNjaGVtYSByZXBvcnRlZC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpc3N1ZXM6IHJlYWRvbmx5IFN0YW5kYXJkU2NoZW1hVjEuSXNzdWVbXTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB3aG9zZSBwYXlsb2FkIGZhaWxlZCB2YWxpZGF0aW9uLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1ldGhvZE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGBtYW5pZmVzdC5pZGAgb2YgdGhlIHByb3ZpZGluZyBwbHVnaW4uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHtAbGluayBQbHVnaW5BcGlWYWxpZGF0aW9uRXJyb3J9LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlcnJvci5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFBsdWdpbkFwaVZhbGlkYXRpb25FcnJvckNvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoXG4gICAgICBgVGhlICR7cGFyYW1zLnBheWxvYWRLaW5kfSBvZiBcIiR7cGFyYW1zLnBsdWdpbklkfVwiIEFQSSBtZXRob2QgXCIke3BhcmFtcy5tZXRob2ROYW1lfVwiIGZhaWxlZCB2YWxpZGF0aW9uOiAke2Zvcm1hdElzc3VlcyhwYXJhbXMuaXNzdWVzKX1gXG4gICAgKTtcbiAgICB0aGlzLm5hbWUgPSAnUGx1Z2luQXBpVmFsaWRhdGlvbkVycm9yJztcbiAgICB0aGlzLmlzc3VlcyA9IHBhcmFtcy5pc3N1ZXM7XG4gICAgdGhpcy5tZXRob2ROYW1lID0gcGFyYW1zLm1ldGhvZE5hbWU7XG4gICAgdGhpcy5wbHVnaW5JZCA9IHBhcmFtcy5wbHVnaW5JZDtcbiAgfVxufVxuXG4vKipcbiAqIExvb2tzIGFub3RoZXIgcGx1Z2luJ3MgQVBJIHVwIE9OQ0UsIGFuZCBhbnN3ZXJzIGZvciB0aGlzIG1vbWVudCBvbmx5LlxuICpcbiAqIEl0IGFwcGxpZXMgdGhlIHNhbWUgc2VsZWN0aW9uIHJ1bGUgYXMge0BsaW5rIHdhdGNoUGx1Z2luQXBpfSBhbmQgaGFuZHMgb3V0IHRoZSBzYW1lIHJldm9jYWJsZSBoYW5kbGUsIGJ1dCBpdFxuICogc3Vic2NyaWJlcyB0byBub3RoaW5nLCBzbyBpdCBuZXZlciBsZWFybnMgdGhhdCB0aGUgYW5zd2VyIGNoYW5nZWQuIFRoYXQgbWFrZXMgaXQgdGhlIHJpZ2h0IHNoYXBlIGZvciBhIGZyZWVcbiAqIGZ1bmN0aW9uIHRoYXQgaGFzIG5vIGNvbXBvbmVudCB0byBvd24gYSB3YXRjaCBhbmQgcnVucyBvbiBhIHVzZXItZHJpdmVuIHBhdGgsIHN1Y2ggYXMgYSBiYWNrbGluayBsb29rdXAgbWFkZVxuICogd2hpbGUgYSByZW5hbWUgaXMgaGFuZGxlZC4gSXQgaXMgdGhlIHdyb25nIHNoYXBlIGZvciBgb25sb2FkYDogcGx1Z2lucyBsb2FkIGluIGFuIHVuc3BlY2lmaWVkIG9yZGVyLCBzbyBhXG4gKiBgbnVsbGAgdGhlcmUgbWVhbnMgXCJub3QgeWV0XCIgYXMgb2Z0ZW4gYXMgXCJub3QgaW5zdGFsbGVkXCIuIENvZGUgdGhhdCBoYXMgYSBjb21wb25lbnQgYW5kIHJlYWRzIHRoZSBBUEkgbW9yZVxuICogdGhhbiBvbmNlIHNob3VsZCBob2xkIGEge0BsaW5rIHdhdGNoUGx1Z2luQXBpfSByZWYgaW5zdGVhZC5cbiAqXG4gKiBAdHlwZVBhcmFtIFRBcGkgLSBUaGUgQVBJIHR5cGUgdGhlIGNvbnN1bWVyIGNvbXBpbGVkIGFnYWluc3QuXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBsb29rdXAuXG4gKiBAcmV0dXJucyBUaGUgQVBJLCBvciBgbnVsbGAgd2hlbiBubyBsaXZlIHJlY29yZCBzYXRpc2ZpZXMgdGhlIHJhbmdlIGFuZCB0aGUgY29udHJhY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUGx1Z2luQXBpPFRBcGkgZXh0ZW5kcyBvYmplY3Q+KHBhcmFtczogRmluZFBsdWdpbkFwaVBhcmFtczxOb0luZmVyPFRBcGk+Pik6IG51bGwgfCBUQXBpIHtcbiAgZ2V0VmFsaWRhdGVQbHVnaW5BcGlQYXlsb2Fkc0RlYnVnU3dpdGNoKCk7XG4gIGNvbnN0IHJlY29yZCA9IHNlbGVjdFJlY29yZChwYXJhbXMpO1xuICByZXR1cm4gcmVjb3JkID09PSBudWxsID8gbnVsbCA6IGNhc3RUbzxUQXBpPihjcmVhdGVSZXZvY2FibGVIYW5kbGUocmVjb3JkLCBwYXJhbXMuY29udHJhY3QpKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBkZWJ1ZyBzd2l0Y2ggdGhhdCBkZWNpZGVzIHdoZXRoZXIgYSBwbHVnaW4tQVBJIGNhbGwncyBwYXlsb2FkcyBhcmUgdmFsaWRhdGVkIGFnYWluc3QgdGhlIGNvbnRyYWN0LlxuICpcbiAqIEl0cyBpZCBpcyBgb2JzaWRpYW4tbGliOnZhbGlkYXRlLXBsdWdpbi1hcGktcGF5bG9hZHNgIGFuZCBpdCBpcyBvZmYgYnkgZGVmYXVsdC4gV2hpbGUgaXQgaXMgb24sIGV2ZXJ5IGNhbGxcbiAqIHRocm91Z2ggYSBoYW5kbGUgZnJvbSB7QGxpbmsgd2F0Y2hQbHVnaW5BcGl9IG9yIHtAbGluayBmaW5kUGx1Z2luQXBpfSBjaGVja3MgaXRzIGFyZ3VtZW50cyBhbmQgaXRzIHJldHVybiB2YWx1ZVxuICogYWdhaW5zdCB0aGUgbWV0aG9kJ3MgZGVjbGFyZWQgc2NoZW1hcyBhbmQgdGhyb3dzIGEge0BsaW5rIFBsdWdpbkFwaVZhbGlkYXRpb25FcnJvcn0gb24gYSBtaXNtYXRjaC4gVGhlXG4gKiBgb2JzaWRpYW4tZGV2LXV0aWxzOlBsdWdpbkFwaWAgZGVidWdnZXIgZG9lcyBub3QgYWZmZWN0IGl0OiB0aGF0IG9ubHkgbG9ncy5cbiAqXG4gKiBUaGUgc3dpdGNoIGlzIHJlZ2lzdGVyZWQgb24gZXZlcnkgcmVhZCwgd2hpY2ggaXMgaWRlbXBvdGVudCwgYW5kIHdoZW5ldmVyIGFuIEFQSSBpcyBwdWJsaXNoZWQsIHdhdGNoZWQgb3IgbG9va2VkXG4gKiB1cCwgc28gYSBkZWJ1Zy1zZXR0aW5ncyBVSSBsaXN0cyBpdCBhcyBzb29uIGFzIGFueSBwbHVnaW4gQVBJIGlzIGluIHBsYXkuXG4gKlxuICogQHJldHVybnMgVGhlIGRlYnVnIHN3aXRjaC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbGlkYXRlUGx1Z2luQXBpUGF5bG9hZHNEZWJ1Z1N3aXRjaCgpOiBEZWJ1Z1N3aXRjaCB7XG4gIHJldHVybiByZWdpc3RlckRlYnVnU3dpdGNoKFZBTElEQVRFX1BMVUdJTl9BUElfUEFZTE9BRFNfREVCVUdfU1dJVENIX0RFRklOSVRJT04pO1xufVxuXG4vKipcbiAqIFB1Ymxpc2hlcyBhIHBsdWdpbidzIEFQSSBzbyBvdGhlciBwbHVnaW5zIGNhbiBjb25zdW1lIGl0LCBrZXllZCBieSB0aGUgcGx1Z2luJ3MgYG1hbmlmZXN0LmlkYCBhbmQgcmV2b2tlZFxuICogYXV0b21hdGljYWxseSB3aGVuIHRoZSBwbHVnaW4gdW5sb2Fkcy5cbiAqXG4gKiBTZXZlcmFsIGNvbnRyYWN0IHZlcnNpb25zIG1heSBiZSBwdWJsaXNoZWQgc2lkZSBieSBzaWRlLCBzbyBhIHByb3ZpZGVyIGNhbiBtb3ZlIHRvIGAyLjAuMGAgd2l0aG91dCBicmVha2luZ1xuICogY29uc3VtZXJzIHN0aWxsIHBpbm5lZCB0byBgXjFgLlxuICpcbiAqIEB0eXBlUGFyYW0gVEFwaSAtIFRoZSBBUEkgdHlwZSBiZWluZyBwdWJsaXNoZWQuXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHB1Ymxpc2hpbmcuXG4gKiBAdGhyb3dzIEFuIHtAbGluayBFcnJvcn0gaWYgdGhpcyBwbHVnaW4gaGFzIGFscmVhZHkgcHVibGlzaGVkIHRoaXMgZXhhY3QgYGFwaVZlcnNpb25gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHVibGlzaFBsdWdpbkFwaTxUQXBpIGV4dGVuZHMgb2JqZWN0PihwYXJhbXM6IFB1Ymxpc2hQbHVnaW5BcGlQYXJhbXM8VEFwaT4pOiB2b2lkIHtcbiAgZ2V0VmFsaWRhdGVQbHVnaW5BcGlQYXlsb2Fkc0RlYnVnU3dpdGNoKCk7XG4gIGNvbnN0IHBsdWdpbklkID0gcGFyYW1zLnBsdWdpbi5tYW5pZmVzdC5pZDtcbiAgY29uc3QgcmVnaXN0cnkgPSBnZXRSZWdpc3RyeSgpO1xuICBjb25zdCByZWNvcmRzID0gcmVnaXN0cnkucmVjb3Jkc1twbHVnaW5JZF0gPz8gW107XG4gIHJlZ2lzdHJ5LnJlY29yZHNbcGx1Z2luSWRdID0gcmVjb3JkcztcblxuICBpZiAocmVjb3Jkcy5zb21lKChyZWNvcmQpID0+IHJlY29yZC5hcGlWZXJzaW9uID09PSBwYXJhbXMuYXBpVmVyc2lvbikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBwbHVnaW4gXCIke3BsdWdpbklkfVwiIGhhcyBhbHJlYWR5IHB1Ymxpc2hlZCB0aGUgQVBJIHZlcnNpb24gXCIke3BhcmFtcy5hcGlWZXJzaW9ufVwiLmApO1xuICB9XG5cbiAgY29uc3QgcmVjb3JkOiBQdWJsaXNoZWRQbHVnaW5BcGlSZWNvcmQgPSB7XG4gICAgYXBpOiBwYXJhbXMuYXBpLFxuICAgIGFwaVZlcnNpb246IHBhcmFtcy5hcGlWZXJzaW9uLFxuICAgIGNvbnRyYWN0OiBwYXJhbXMuY29udHJhY3QgPz8ge30sXG4gICAgaXNSZXZva2VkOiBmYWxzZSxcbiAgICBwbHVnaW5JZFxuICB9O1xuICByZWNvcmRzLnB1c2gocmVjb3JkKTtcbiAgbm90aWZ5U3Vic2NyaWJlcnMoKTtcblxuICAocGFyYW1zLmNvbXBvbmVudCA/PyBwYXJhbXMucGx1Z2luKS5yZWdpc3RlcigoKSA9PiB7XG4gICAgcmV2b2tlUmVjb3JkKHJlY29yZCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFdhdGNoZXMgYW5vdGhlciBwbHVnaW4ncyBBUEkgYW5kIHJldHVybnMgYSBsaXZlIHtAbGluayBQbHVnaW5BcGlSZWZ9IHdob3NlIHtAbGluayBQbHVnaW5BcGlSZWYudmFsdWV9IHN0YXlzXG4gKiBjb3JyZWN0IGFjcm9zcyB0aGUgcHJvdmlkZXIncyBsb2FkLCB1bmxvYWQsIGFuZCByZS1lbmFibGUuXG4gKlxuICogVGhpcyBpcyB0aGUgY29uc3VtZXIgc3VyZmFjZSBmb3IgYW55dGhpbmcgdGhhdCBoYXMgYSBjb21wb25lbnQuIEl0cyBvbmUtc2hvdCBzaWJsaW5nIHtAbGluayBmaW5kUGx1Z2luQXBpfVxuICogb25seSBhbnN3ZXJzIFwibm93XCIgYW5kIG5ldmVyIHRlbGxzIHlvdSB3aGVuIFwibm93XCIgY2hhbmdlZCwgc28gY2FsbGluZyBpdCBkdXJpbmcgYG9ubG9hZGAgcmVhZHMgYG51bGxgIGFuZFxuICogaW52aXRlcyB0aGUgY29uY2x1c2lvbiBcIm5vdCBpbnN0YWxsZWRcIi4gQSBjb25zdW1lciB0aGF0IG5lZWRzIGEgc3luY2hyb25vdXMgYW5zd2VyIGluc2lkZSBhIGNhbGxiYWNrIHdob3NlXG4gKiBzaWduYXR1cmUgZm9yYmlkcyBgYXdhaXRgIOKAlCBgY2hlY2tDYWxsYmFjayhpc0NoZWNraW5nKTogYm9vbGVhbmAsIGBjYW5FeGVjdXRlKClgLCBhIHNldHRpbmdzLXJvdyBgdmlzaWJsZWBcbiAqIHByZWRpY2F0ZSDigJQgaG9sZHMgdGhlIHJlZiAob3IgdGhlIHZhbHVlIGl0IG1haW50YWlucykgaW4gYSBmaWVsZCBhbmQgcmVhZHMgdGhhdCwgd2hpY2ggaXMgYm90aCBjaGVhcGVyIGFuZFxuICogY29ycmVjdCBhY3Jvc3MgQk9USCBlZGdlcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFRBcGkgLSBUaGUgQVBJIHR5cGUgdGhlIGNvbnN1bWVyIGNvbXBpbGVkIGFnYWluc3QuXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSB3YXRjaC5cbiAqIEByZXR1cm5zIFRoZSBsaXZlIHJlZmVyZW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhdGNoUGx1Z2luQXBpPFRBcGkgZXh0ZW5kcyBvYmplY3Q+KHBhcmFtczogV2F0Y2hQbHVnaW5BcGlQYXJhbXM8Tm9JbmZlcjxUQXBpPj4pOiBQbHVnaW5BcGlSZWY8VEFwaT4ge1xuICBnZXRWYWxpZGF0ZVBsdWdpbkFwaVBheWxvYWRzRGVidWdTd2l0Y2goKTtcbiAgY29uc3QgcmVmID0gbmV3IFBsdWdpbkFwaVJlZkltcGw8VEFwaT4ocGFyYW1zKTtcbiAgY29uc3QgdW5zdWJzY3JpYmUgPSBzdWJzY3JpYmUoKCkgPT4ge1xuICAgIHJlZi5yZWZyZXNoKCk7XG4gIH0pO1xuICBwYXJhbXMuY29tcG9uZW50LnJlZ2lzdGVyKHVuc3Vic2NyaWJlKTtcbiAgcmVmLnJlZnJlc2goKTtcbiAgcmV0dXJuIHJlZjtcbn1cblxuLyoqXG4gKiBTdHJ1Y3R1cmFsbHkgZGV0ZWN0cyBhIHRoZW5hYmxlLiBBIGNyb3NzLWNvcHkgdmFsdWUgbWF5IGNvbWUgZnJvbSBhbm90aGVyIHJlYWxtLCBzbyBgaW5zdGFuY2VvZiBQcm9taXNlYCBpc1xuICogbm90IHVzYWJsZSBoZXJlIOKAlCB0aGUgc2FtZSBkaXNjaXBsaW5lIHRoZSByZWdpc3RyeSByZWNvcmRzIGZvbGxvdy5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdmFsdWUgdGhlIHRoZW5hYmxlIHJlc29sdmVzIHRvLlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHRlc3QuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgd2hlbiB0aGUgdmFsdWUgaXMgdGhlbmFibGUuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrSXNQcm9taXNlTGlrZTxUPih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFByb21pc2VMaWtlPFQ+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAmJiB2YWx1ZSAhPT0gbnVsbFxuICAgICYmICd0aGVuJyBpbiB2YWx1ZVxuICAgICYmIHR5cGVvZiAodmFsdWUgYXMgUHJvbWlzZUxpa2U8VD4pLnRoZW4gPT09ICdmdW5jdGlvbic7XG59XG5cbi8qKlxuICogQ2hlY2tzIHRoYXQgZXZlcnkgbWV0aG9kIHRoZSBlZmZlY3RpdmUgY29udHJhY3QgZGVjbGFyZXMgaXMgYWN0dWFsbHkgcHJlc2VudCBvbiB0aGUgcHVibGlzaGVkIEFQSS5cbiAqXG4gKiBAcGFyYW0gcmVjb3JkIC0gVGhlIHB1Ymxpc2hlZCByZWNvcmQuXG4gKiBAcGFyYW0gY29uc3VtZXJDb250cmFjdCAtIFRoZSBjb25zdW1lcidzIG93biBjb250cmFjdCwgd2hpY2ggd2lucyB3aGVuIHN1cHBsaWVkLlxuICogQHJldHVybnMgYHRydWVgIHdoZW4gdGhlIHNoYXBlIG1hdGNoZXMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrTWF0Y2hlc0NvbnRyYWN0U2hhcGUocmVjb3JkOiBQdWJsaXNoZWRQbHVnaW5BcGlSZWNvcmQsIGNvbnN1bWVyQ29udHJhY3Q/OiBBcGlDb250cmFjdCk6IGJvb2xlYW4ge1xuICBjb25zdCBjb250cmFjdCA9IGNvbnN1bWVyQ29udHJhY3QgPz8gcmVjb3JkLmNvbnRyYWN0O1xuICByZXR1cm4gT2JqZWN0LmtleXMoY29udHJhY3QpLmV2ZXJ5KChtZXRob2ROYW1lKSA9PiB0eXBlb2YgZ2V0TWVtYmVyKHJlY29yZC5hcGksIG1ldGhvZE5hbWUpID09PSAnZnVuY3Rpb24nKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGZ1bmN0aW9uIGEgY29uc3VtZXIgYWN0dWFsbHkgY2FsbHM6IGl0IGFsd2F5cyBpbnZva2VzIHRoZSBvcmlnaW5hbCB3aXRoIHRoZSByYXcgQVBJIG9iamVjdCBhc1xuICogYHRoaXNgLCBhbmQg4oCUIG9ubHkgd2hpbGUgdGhlIGBvYnNpZGlhbi1saWI6dmFsaWRhdGUtcGx1Z2luLWFwaS1wYXlsb2Fkc2AgZGVidWcgc3dpdGNoIGlzIG9uIOKAlCB2YWxpZGF0ZXMgdGhlXG4gKiBkZWNsYXJlZCBwYXlsb2FkcyBhcm91bmQgaXQuXG4gKlxuICogVGhlIHN3aXRjaCBpcyBjb25zdWx0ZWQgcGVyIGNhbGwgcmF0aGVyIHRoYW4gcGVyIHdyYXAsIHNvIHRvZ2dsaW5nIGl0IGF0IHJ1bnRpbWUgdGFrZXMgZWZmZWN0IHdpdGhvdXRcbiAqIHJlLWFjcXVpcmluZyB0aGUgaGFuZGxlLCB3aGlsZSB0aGUgd3JhcHBlcidzIGlkZW50aXR5IHN0YXlzIHN0YWJsZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSB3cmFwcGVyLlxuICogQHJldHVybnMgVGhlIHdyYXBwZXIgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU1ldGhvZFdyYXBwZXIocGFyYW1zOiBDcmVhdGVNZXRob2RXcmFwcGVyUGFyYW1zKTogKC4uLiRhcmd1bWVudHM6IHVua25vd25bXSkgPT4gdW5rbm93biB7XG4gIHJldHVybiBmdW5jdGlvbiBwbHVnaW5BcGlNZXRob2QoLi4uJGFyZ3VtZW50czogdW5rbm93bltdKTogdW5rbm93biB7XG4gICAgLy8gUmVhZCBieSB0aGUgT1JJR0lOQUwga2V5LCBub3QgYnkgdGhlIGRpc3BsYXkgbmFtZTogYFN0cmluZyhzeW1ib2wpYCBpcyBgJ1N5bWJvbCh4KSdgLCB3aGljaCBpcyBub3QgYVxuICAgIC8vIGtleSB0aGUgQVBJIG9iamVjdCBoYXMuXG4gICAgY29uc3QgbWV0aG9kID0gY2FzdFRvPCguLi4kaW5uZXJBcmd1bWVudHM6IHVua25vd25bXSkgPT4gdW5rbm93bj4oZ2V0TWVtYmVyKHBhcmFtcy50YXJnZXQsIHBhcmFtcy5wcm9wZXJ0eUtleSkpO1xuICAgIGNvbnN0IG1ldGhvZENvbnRyYWN0ID0gcGFyYW1zLm1ldGhvZENvbnRyYWN0O1xuXG4gICAgaWYgKG1ldGhvZENvbnRyYWN0ID09PSB1bmRlZmluZWQgfHwgIWdldFZhbGlkYXRlUGx1Z2luQXBpUGF5bG9hZHNEZWJ1Z1N3aXRjaCgpLmlzRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm4gbWV0aG9kLmFwcGx5KHBhcmFtcy50YXJnZXQsICRhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGlmIChtZXRob2RDb250cmFjdC5pbnB1dCkge1xuICAgICAgdmFsaWRhdGVQYXlsb2FkKHtcbiAgICAgICAgbWV0aG9kTmFtZTogcGFyYW1zLm1ldGhvZE5hbWUsXG4gICAgICAgIHBheWxvYWRLaW5kOiBQbHVnaW5BcGlQYXlsb2FkS2luZC5JbnB1dCxcbiAgICAgICAgcGx1Z2luSWQ6IHBhcmFtcy5wbHVnaW5JZCxcbiAgICAgICAgc2NoZW1hOiBtZXRob2RDb250cmFjdC5pbnB1dCxcbiAgICAgICAgdmFsdWU6ICRhcmd1bWVudHNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJldHVyblZhbHVlID0gbWV0aG9kLmFwcGx5KHBhcmFtcy50YXJnZXQsICRhcmd1bWVudHMpO1xuICAgIGNvbnN0IG91dHB1dFNjaGVtYSA9IG1ldGhvZENvbnRyYWN0Lm91dHB1dDtcbiAgICBpZiAoIW91dHB1dFNjaGVtYSkge1xuICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICAgIH1cblxuICAgIGlmIChjaGVja0lzUHJvbWlzZUxpa2UocmV0dXJuVmFsdWUpKSB7XG4gICAgICByZXR1cm4gcmV0dXJuVmFsdWUudGhlbigocmVzb2x2ZWRWYWx1ZTogdW5rbm93bikgPT4ge1xuICAgICAgICB2YWxpZGF0ZVBheWxvYWQoe1xuICAgICAgICAgIG1ldGhvZE5hbWU6IHBhcmFtcy5tZXRob2ROYW1lLFxuICAgICAgICAgIHBheWxvYWRLaW5kOiBQbHVnaW5BcGlQYXlsb2FkS2luZC5PdXRwdXQsXG4gICAgICAgICAgcGx1Z2luSWQ6IHBhcmFtcy5wbHVnaW5JZCxcbiAgICAgICAgICBzY2hlbWE6IG91dHB1dFNjaGVtYSxcbiAgICAgICAgICB2YWx1ZTogcmVzb2x2ZWRWYWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVkVmFsdWU7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZVBheWxvYWQoe1xuICAgICAgbWV0aG9kTmFtZTogcGFyYW1zLm1ldGhvZE5hbWUsXG4gICAgICBwYXlsb2FkS2luZDogUGx1Z2luQXBpUGF5bG9hZEtpbmQuT3V0cHV0LFxuICAgICAgcGx1Z2luSWQ6IHBhcmFtcy5wbHVnaW5JZCxcbiAgICAgIHNjaGVtYTogb3V0cHV0U2NoZW1hLFxuICAgICAgdmFsdWU6IHJldHVyblZhbHVlXG4gICAgfSk7XG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9O1xufVxuXG4vKipcbiAqIFdyYXBzIGEgcHVibGlzaGVkIEFQSSBpbiBhIHJldm9jYWJsZSBoYW5kbGUuXG4gKlxuICogQSBmbGFnLWNoZWNraW5nIGBnZXRgIHRyYXAgaXMgdXNlZCByYXRoZXIgdGhhbiBgUHJveHkucmV2b2NhYmxlYCwgYmVjYXVzZSB0aGUgbGF0dGVyIHRocm93cyBhIGJhcmVcbiAqIGBUeXBlRXJyb3JgIHdob3NlIG1lc3NhZ2Ugd2UgY2Fubm90IHBocmFzZSDigJQgYW5kIHRoZSB3aG9sZSB2YWx1ZSBvZiByZXZva2luZyBpcyB0aGF0IHRoZSBlcnJvciBuYW1lcyB0aGVcbiAqIHByb3ZpZGVyLlxuICpcbiAqIE1ldGhvZHMgYXJlIGJvdW5kIHRvIHRoZSBSQVcgYXBpIG9iamVjdCByYXRoZXIgdGhhbiB0byB0aGUgcHJveHk6IGFuIGltcGxlbWVudGF0aW9uIHVzaW5nIHByaXZhdGUgY2xhc3NcbiAqIGZpZWxkcyAoYCNmaWVsZGApIHRocm93cyBpZiBpdHMgYHRoaXNgIGlzIGEgcHJveHkuXG4gKlxuICogQHBhcmFtIHJlY29yZCAtIFRoZSBwdWJsaXNoZWQgcmVjb3JkLlxuICogQHBhcmFtIGNvbnN1bWVyQ29udHJhY3QgLSBUaGUgY29uc3VtZXIncyBvd24gY29udHJhY3QsIHdoaWNoIHdpbnMgb3ZlciB0aGUgcHVibGlzaGVkIG9uZSB3aGVuIHN1cHBsaWVkLlxuICogQHJldHVybnMgVGhlIGhhbmRsZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUmV2b2NhYmxlSGFuZGxlKHJlY29yZDogUHVibGlzaGVkUGx1Z2luQXBpUmVjb3JkLCBjb25zdW1lckNvbnRyYWN0PzogQXBpQ29udHJhY3QpOiBvYmplY3Qge1xuICBjb25zdCBjb250cmFjdCA9IGNvbnN1bWVyQ29udHJhY3QgPz8gcmVjb3JkLmNvbnRyYWN0O1xuICBjb25zdCBtZXRob2RDYWNoZSA9IG5ldyBNYXA8UHJvcGVydHlLZXk+KCk7XG5cbiAgcmV0dXJuIG5ldyBQcm94eShyZWNvcmQuYXBpLCB7XG4gICAgZ2V0KHRhcmdldDogb2JqZWN0LCBwcm9wZXJ0eUtleTogUHJvcGVydHlLZXkpOiB1bmtub3duIHtcbiAgICAgIGlmIChyZWNvcmQuaXNSZXZva2VkKSB7XG4gICAgICAgIHRocm93IG5ldyBQbHVnaW5BcGlSZXZva2VkRXJyb3IocmVjb3JkLnBsdWdpbklkKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsdWUgPSBnZXRNZW1iZXIodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgbGV0IG1ldGhvZCA9IG1ldGhvZENhY2hlLmdldChwcm9wZXJ0eUtleSk7XG4gICAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbWV0aG9kID0gY3JlYXRlTWV0aG9kV3JhcHBlcih7XG4gICAgICAgICAgbWV0aG9kQ29udHJhY3Q6IHR5cGVvZiBwcm9wZXJ0eUtleSA9PT0gJ3N0cmluZycgPyBjb250cmFjdFtwcm9wZXJ0eUtleV0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgbWV0aG9kTmFtZTogU3RyaW5nKHByb3BlcnR5S2V5KSxcbiAgICAgICAgICBwbHVnaW5JZDogcmVjb3JkLnBsdWdpbklkLFxuICAgICAgICAgIHByb3BlcnR5S2V5LFxuICAgICAgICAgIHRhcmdldFxuICAgICAgICB9KTtcbiAgICAgICAgbWV0aG9kQ2FjaGUuc2V0KHByb3BlcnR5S2V5LCBtZXRob2QpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1ldGhvZDtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgc2NoZW1hIGlzc3VlcyBpbnRvIGEgc2luZ2xlIHJlYWRhYmxlIGxpbmUuXG4gKlxuICogQHBhcmFtIGlzc3VlcyAtIFRoZSBpc3N1ZXMgdG8gcmVuZGVyLlxuICogQHJldHVybnMgVGhlIHJlbmRlcmVkIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdElzc3Vlcyhpc3N1ZXM6IHJlYWRvbmx5IFN0YW5kYXJkU2NoZW1hVjEuSXNzdWVbXSk6IHN0cmluZyB7XG4gIHJldHVybiBpc3N1ZXNcbiAgICAubWFwKChpc3N1ZSkgPT4ge1xuICAgICAgY29uc3QgcGF0aCA9IGlzc3VlLnBhdGg/Lm1hcCgoc2VnbWVudCkgPT4gU3RyaW5nKHR5cGVvZiBzZWdtZW50ID09PSAnb2JqZWN0JyA/IHNlZ21lbnQua2V5IDogc2VnbWVudCkpLmpvaW4oJy4nKTtcbiAgICAgIHJldHVybiBwYXRoID8gYCR7cGF0aH06ICR7aXNzdWUubWVzc2FnZX1gIDogaXNzdWUubWVzc2FnZTtcbiAgICB9KVxuICAgIC5qb2luKCc7ICcpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHJlY29yZHMgYSBwbHVnaW4gY3VycmVudGx5IGhhcyBwdWJsaXNoZWQsIGV4Y2x1ZGluZyBhbnkgdGhhdCBoYXZlIGJlZW4gcmV2b2tlZC5cbiAqXG4gKiBAcGFyYW0gcGx1Z2luSWQgLSBUaGUgYG1hbmlmZXN0LmlkYCBvZiB0aGUgcHJvdmlkaW5nIHBsdWdpbi5cbiAqIEByZXR1cm5zIFRoZSBsaXZlIHJlY29yZHMuXG4gKi9cbmZ1bmN0aW9uIGdldExpdmVSZWNvcmRzKHBsdWdpbklkOiBzdHJpbmcpOiBQdWJsaXNoZWRQbHVnaW5BcGlSZWNvcmRbXSB7XG4gIHJldHVybiAoZ2V0UmVnaXN0cnkoKS5yZWNvcmRzW3BsdWdpbklkXSA/PyBbXSkuZmlsdGVyKChyZWNvcmQpID0+ICFyZWNvcmQuaXNSZXZva2VkKTtcbn1cblxuLyoqXG4gKiBSZWFkcyBhIG1lbWJlciBvZmYgYSBwdWJsaXNoZWQgQVBJIG9iamVjdCB3aXRob3V0IG5hcnJvd2luZyBpdCDigJQgdGhlIEFQSSBjcm9zc2VzIGEgbGlicmFyeS12ZXJzaW9uIGJvdW5kYXJ5LFxuICogc28gbm90aGluZyBhYm91dCBpdHMgc2hhcGUgbWF5IGJlIGFzc3VtZWQuXG4gKlxuICogQHBhcmFtIGFwaSAtIFRoZSBwdWJsaXNoZWQgQVBJIG9iamVjdC5cbiAqIEBwYXJhbSBtZXRob2ROYW1lIC0gVGhlIG1lbWJlciB0byByZWFkLlxuICogQHJldHVybnMgVGhlIG1lbWJlcidzIHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRNZW1iZXIoYXBpOiBvYmplY3QsIG1ldGhvZE5hbWU6IFByb3BlcnR5S2V5KTogdW5rbm93biB7XG4gIHJldHVybiBSZWZsZWN0LmdldChhcGksIG1ldGhvZE5hbWUpO1xufVxuXG4vKipcbiAqIFRoZSBkZWJ1Z2dlciB0aGF0IGxvZ3MgYW4gYXN5bmNocm9ub3VzIHBheWxvYWQgdmFsaWRhdGlvbiBmYWlsdXJlLlxuICpcbiAqIEByZXR1cm5zIFRoZSBkZWJ1Z2dlci5cbiAqL1xuZnVuY3Rpb24gZ2V0UGx1Z2luQXBpRGVidWdnZXIoKTogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0T2JzaWRpYW5MaWJEZWJ1Z2dlcj4ge1xuICByZXR1cm4gZ2V0T2JzaWRpYW5MaWJEZWJ1Z2dlcihQTFVHSU5fQVBJX0RFQlVHR0VSX05BTUVTUEFDRSk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBzaGFyZWQgcmVnaXN0cnksIHRvbGVyYXRpbmcgYSBiYWcgd3JpdHRlbiBieSBhIERJRkZFUkVOVCBgb2JzaWRpYW4tZGV2LXV0aWxzYCBjb3B5IHRoYXQgbWF5XG4gKiBwcmVkYXRlIG9uZSBvZiBpdHMgZmllbGRzLlxuICpcbiAqIEByZXR1cm5zIFRoZSByZWdpc3RyeS5cbiAqL1xuZnVuY3Rpb24gZ2V0UmVnaXN0cnkoKTogUGx1Z2luQXBpUmVnaXN0cnkge1xuICBjb25zdCB3cmFwcGVyID0gZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlPFBhcnRpYWw8UGx1Z2luQXBpUmVnaXN0cnk+PihQTFVHSU5fQVBJX1JFR0lTVFJZX1NUQVRFX0tFWSwge30pO1xuICBjb25zdCByZWdpc3RyeSA9IHdyYXBwZXIudmFsdWU7XG4gIHJlZ2lzdHJ5LnJlY29yZHMgPz89IHt9O1xuICByZWdpc3RyeS5zdWJzY3JpYmVycyA/Pz0gW107XG4gIHJldHVybiBjYXN0VG88UGx1Z2luQXBpUmVnaXN0cnk+KHJlZ2lzdHJ5KTtcbn1cblxuLyoqXG4gKiBOb3RpZmllcyBldmVyeSBzdWJzY3JpYmVyLCBvdmVyIGEgU05BUFNIT1Qgb2YgdGhlIGxpc3Qg4oCUIGEgY2FsbGJhY2sgaXMgZnJlZSB0byB1bnN1YnNjcmliZSAob3Igc3Vic2NyaWJlKVxuICogd2hpbGUgdGhlIHN3ZWVwIGlzIHJ1bm5pbmcuXG4gKi9cbmZ1bmN0aW9uIG5vdGlmeVN1YnNjcmliZXJzKCk6IHZvaWQge1xuICBmb3IgKGNvbnN0IHN1YnNjcmliZXIgb2Ygc25hcHNob3QoZ2V0UmVnaXN0cnkoKS5zdWJzY3JpYmVycykpIHtcbiAgICBzdWJzY3JpYmVyKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoaWNoIG9mIHRoZSBmaXZlIGZhaWx1cmVzIGFwcGxpZXMsIHByb2JpbmcgdGhlIGNhdXNlcyBmcm9tIHRoZSBvdXRlcm1vc3QgaW53YXJkcyBzbyB0aGUgbW9zdFxuICogYWN0aW9uYWJsZSBvbmUgd2lucy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHdhdGNoIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgcmVhc29uLlxuICovXG5mdW5jdGlvbiByZXNvbHZlVW5hdmFpbGFiaWxpdHlSZWFzb24ocGFyYW1zOiBXYXRjaFBsdWdpbkFwaVBhcmFtcyk6IFBsdWdpbkFwaVVuYXZhaWxhYmlsaXR5UmVhc29uIHtcbiAgaWYgKCFPYmplY3QuaGFzT3duKHBhcmFtcy5hcHAucGx1Z2lucy5tYW5pZmVzdHMsIHBhcmFtcy5wbHVnaW5JZCkpIHtcbiAgICByZXR1cm4gUGx1Z2luQXBpVW5hdmFpbGFiaWxpdHlSZWFzb24uTm90SW5zdGFsbGVkO1xuICB9XG5cbiAgaWYgKCFwYXJhbXMuYXBwLnBsdWdpbnMuZW5hYmxlZFBsdWdpbnMuaGFzKHBhcmFtcy5wbHVnaW5JZCkpIHtcbiAgICByZXR1cm4gUGx1Z2luQXBpVW5hdmFpbGFiaWxpdHlSZWFzb24uTm90RW5hYmxlZDtcbiAgfVxuXG4gIGNvbnN0IHJlY29yZHMgPSBnZXRMaXZlUmVjb3JkcyhwYXJhbXMucGx1Z2luSWQpO1xuICBpZiAocmVjb3Jkcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUGx1Z2luQXBpVW5hdmFpbGFiaWxpdHlSZWFzb24uTm90UHVibGlzaGVkO1xuICB9XG5cbiAgcmV0dXJuIHJlY29yZHMuZXZlcnkoKHJlY29yZCkgPT4gIXNhdGlzZmllc1ZlcnNpb24ocmVjb3JkLmFwaVZlcnNpb24sIHBhcmFtcy5hcGlWZXJzaW9uUmFuZ2UpKSA/IFBsdWdpbkFwaVVuYXZhaWxhYmlsaXR5UmVhc29uLlZlcnNpb25NaXNtYXRjaCA6IFBsdWdpbkFwaVVuYXZhaWxhYmlsaXR5UmVhc29uLlNoYXBlTWlzbWF0Y2g7XG59XG5cbi8qKlxuICogTWFya3MgYSByZWNvcmQgcmV2b2tlZCBhbmQgZHJvcHMgaXQgZnJvbSB0aGUgcmVnaXN0cnksIHRoZW4gdGVsbHMgZXZlcnkgd2F0Y2hlciB0byByZWNvbXB1dGUuXG4gKlxuICogVGhlIHJlY29yZCBvYmplY3QgaXRzZWxmIGlzIGRlbGliZXJhdGVseSBrZXB0IGFsaXZlIGFuZCBmbGFnZ2VkIHJhdGhlciB0aGFuIGRpc2NhcmRlZCwgYmVjYXVzZSBoYW5kbGVzXG4gKiBhbHJlYWR5IGhhbmRlZCBvdXQgY2xvc2Ugb3ZlciBpdCDigJQgdGhhdCBmbGFnIGlzIHdoYXQgdHVybnMgYSBsYXRlciBwcm9wZXJ0eSByZWFkIGludG8gYVxuICoge0BsaW5rIFBsdWdpbkFwaVJldm9rZWRFcnJvcn0uXG4gKlxuICogQHBhcmFtIHJlY29yZCAtIFRoZSByZWNvcmQgdG8gcmV2b2tlLlxuICovXG5mdW5jdGlvbiByZXZva2VSZWNvcmQocmVjb3JkOiBQdWJsaXNoZWRQbHVnaW5BcGlSZWNvcmQpOiB2b2lkIHtcbiAgcmVjb3JkLmlzUmV2b2tlZCA9IHRydWU7XG4gIGNvbnN0IHJlZ2lzdHJ5ID0gZ2V0UmVnaXN0cnkoKTtcbiAgY29uc3QgcmVjb3JkcyA9IHJlZ2lzdHJ5LnJlY29yZHNbcmVjb3JkLnBsdWdpbklkXTtcbiAgaWYgKHJlY29yZHMpIHtcbiAgICByZWdpc3RyeS5yZWNvcmRzW3JlY29yZC5wbHVnaW5JZF0gPSByZWNvcmRzLmZpbHRlcigoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUgIT09IHJlY29yZCk7XG4gIH1cbiAgbm90aWZ5U3Vic2NyaWJlcnMoKTtcbn1cblxuLyoqXG4gKiBQaWNrcyB0aGUgaGlnaGVzdCBwdWJsaXNoZWQgcmVjb3JkIHRoYXQgaXMgbGl2ZSwgc2F0aXNmaWVzIHRoZSByZXF1ZXN0ZWQgdmVyc2lvbiByYW5nZSwgYW5kIG1hdGNoZXMgdGhlXG4gKiBlZmZlY3RpdmUgY29udHJhY3QncyBzaGFwZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGxvb2t1cCBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgVGhlIHdpbm5pbmcgcmVjb3JkLCBvciBgbnVsbGAgd2hlbiBub25lIHF1YWxpZmllcy5cbiAqL1xuZnVuY3Rpb24gc2VsZWN0UmVjb3JkKHBhcmFtczogRmluZFBsdWdpbkFwaVBhcmFtcyk6IG51bGwgfCBQdWJsaXNoZWRQbHVnaW5BcGlSZWNvcmQge1xuICBjb25zdCBjYW5kaWRhdGVzID0gZ2V0TGl2ZVJlY29yZHMocGFyYW1zLnBsdWdpbklkKVxuICAgIC5maWx0ZXIoKHJlY29yZCkgPT4gc2F0aXNmaWVzVmVyc2lvbihyZWNvcmQuYXBpVmVyc2lvbiwgcGFyYW1zLmFwaVZlcnNpb25SYW5nZSkpXG4gICAgLmZpbHRlcigocmVjb3JkKSA9PiBjaGVja01hdGNoZXNDb250cmFjdFNoYXBlKHJlY29yZCwgcGFyYW1zLmNvbnRyYWN0KSlcbiAgICAuc29ydCgoYSwgYikgPT4gY29tcGFyZVZlcnNpb25zKGIuYXBpVmVyc2lvbiwgYS5hcGlWZXJzaW9uKSk7XG5cbiAgcmV0dXJuIGNhbmRpZGF0ZXNbMF0gPz8gbnVsbDtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBjYWxsYmFjayBmaXJlZCB3aGVuZXZlciB0aGUgcmVnaXN0cnkgY2hhbmdlcy5cbiAqXG4gKiBAcGFyYW0gc3Vic2NyaWJlciAtIFRoZSBjYWxsYmFjay5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCB1bnJlZ2lzdGVycyB0aGUgY2FsbGJhY2suXG4gKi9cbmZ1bmN0aW9uIHN1YnNjcmliZShzdWJzY3JpYmVyOiAoKSA9PiB2b2lkKTogKCkgPT4gdm9pZCB7XG4gIGNvbnN0IHJlZ2lzdHJ5ID0gZ2V0UmVnaXN0cnkoKTtcbiAgcmVnaXN0cnkuc3Vic2NyaWJlcnMucHVzaChzdWJzY3JpYmVyKTtcbiAgcmV0dXJuICgpOiB2b2lkID0+IHtcbiAgICBjb25zdCBpbmRleCA9IHJlZ2lzdHJ5LnN1YnNjcmliZXJzLmluZGV4T2Yoc3Vic2NyaWJlcik7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgcmVnaXN0cnkuc3Vic2NyaWJlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUnVucyBvbmUgU3RhbmRhcmQgU2NoZW1hIG92ZXIgb25lIHBheWxvYWQuXG4gKlxuICogQSBzY2hlbWEgdGhhdCBhbnN3ZXJzIFNZTkNIUk9OT1VTTFkgdGhyb3dzIGF0IHRoZSBjYWxsIHNpdGUsIHdoaWNoIGlzIHRoZSB3aG9sZSBwb2ludCDigJQgYSB2ZXJzaW9uIHNrZXcgcmVhZHNcbiAqIGFzIGEgbGVnaWJsZSBlcnJvciB3aGVyZSB0aGUgY2FsbCB3YXMgbWFkZS4gQSBzY2hlbWEgdGhhdCBhbnN3ZXJzIHdpdGggYSB7QGxpbmsgUHJvbWlzZX0gY2Fubm90IGRvIHRoYXQ6IHRoZVxuICogc3luY2hyb25vdXMgY2FsbCBpdCB3YXMgZ3VhcmRpbmcgaGFzIGFscmVhZHkgcmV0dXJuZWQgYnkgdGhlIHRpbWUgdGhlIGFuc3dlciBhcnJpdmVzLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvXG4gKiB0aHJvdyBpbnRvIGFuZCB0aGUgZmFpbHVyZSBpcyByZXBvcnRlZCB0aHJvdWdoIHRoZSBsaWJyYXJ5IGRlYnVnZ2VyIGluc3RlYWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgdmFsaWRhdGlvbi5cbiAqIEB0aHJvd3MgQSB7QGxpbmsgUGx1Z2luQXBpVmFsaWRhdGlvbkVycm9yfSBpZiBhIHN5bmNocm9ub3VzIHNjaGVtYSByZXBvcnRzIGlzc3Vlcy5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVQYXlsb2FkKHBhcmFtczogVmFsaWRhdGVQYXlsb2FkUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHJlc3VsdCA9IHBhcmFtcy5zY2hlbWFbJ35zdGFuZGFyZCddLnZhbGlkYXRlKHBhcmFtcy52YWx1ZSk7XG5cbiAgaWYgKGNoZWNrSXNQcm9taXNlTGlrZTxTdGFuZGFyZFNjaGVtYVYxLlJlc3VsdDx1bmtub3duPj4ocmVzdWx0KSkge1xuICAgIGludm9rZUFzeW5jU2FmZWx5KGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGFzeW5jUmVzdWx0ID0gYXdhaXQgcmVzdWx0O1xuICAgICAgaWYgKGFzeW5jUmVzdWx0Lmlzc3Vlcykge1xuICAgICAgICBnZXRQbHVnaW5BcGlEZWJ1Z2dlcigpKFxuICAgICAgICAgICdBc3luY2hyb25vdXMgdmFsaWRhdGlvbiBvZiB0aGUgJXMgb2YgXCIlc1wiIEFQSSBtZXRob2QgXCIlc1wiIGZhaWxlZDogJXMnLFxuICAgICAgICAgIHBhcmFtcy5wYXlsb2FkS2luZCxcbiAgICAgICAgICBwYXJhbXMucGx1Z2luSWQsXG4gICAgICAgICAgcGFyYW1zLm1ldGhvZE5hbWUsXG4gICAgICAgICAgZm9ybWF0SXNzdWVzKGFzeW5jUmVzdWx0Lmlzc3VlcylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocmVzdWx0Lmlzc3Vlcykge1xuICAgIHRocm93IG5ldyBQbHVnaW5BcGlWYWxpZGF0aW9uRXJyb3Ioe1xuICAgICAgaXNzdWVzOiByZXN1bHQuaXNzdWVzLFxuICAgICAgbWV0aG9kTmFtZTogcGFyYW1zLm1ldGhvZE5hbWUsXG4gICAgICBwYXlsb2FkS2luZDogcGFyYW1zLnBheWxvYWRLaW5kLFxuICAgICAgcGx1Z2luSWQ6IHBhcmFtcy5wbHVnaW5JZFxuICAgIH0pO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBc0dBLG1CQUF5QjtBQUN6QixtQkFHTztBQUNQLDBCQUFpQztBQUNqQyw0QkFBb0M7QUFDcEMsMEJBQXVCO0FBQ3ZCLDhCQUdPO0FBRVAsbUJBQXVDO0FBQ3ZDLHNDQUF5QztBQUV6QyxNQUFNLGdDQUFnQztBQUN0QyxNQUFNLGdDQUFnQztBQUV0QyxNQUFNLHVEQUE4RTtBQUFBLEVBQ2xGLGFBQWE7QUFBQSxFQUNiLElBQUk7QUFBQSxFQUNKLG9CQUFvQjtBQUFBLEVBQ3BCLE1BQU07QUFDUjtBQUtBLE1BQU0saURBQWlEO0FBS2hELElBQUssdUJBQUwsa0JBQUtBLDBCQUFMO0FBSUwsRUFBQUEsc0JBQUEsV0FBUTtBQUtSLEVBQUFBLHNCQUFBLFlBQVM7QUFUQyxTQUFBQTtBQUFBLEdBQUE7QUEwQkwsSUFBSyxnQ0FBTCxrQkFBS0MsbUNBQUw7QUFJTCxFQUFBQSwrQkFBQSxnQkFBYTtBQUtiLEVBQUFBLCtCQUFBLGtCQUFlO0FBS2YsRUFBQUEsK0JB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LENBQUM7QUFFN0QsU0FBTyxXQUFXLENBQUMsS0FBSztBQUMxQjtBQVFBLFNBQVMsVUFBVSxZQUFvQztBQUNyRCxRQUFNLFdBQVcsWUFBWTtBQUM3QixXQUFTLFlBQVksS0FBSyxVQUFVO0FBQ3BDLFNBQU8sTUFBWTtBQUNqQixVQUFNLFFBQVEsU0FBUyxZQUFZLFFBQVEsVUFBVTtBQUNyRCxRQUFJLFVBQVUsSUFBSTtBQUNoQixlQUFTLFlBQVksT0FBTyxPQUFPLENBQUM7QUFBQSxJQUN0QztBQUFBLEVBQ0Y7QUFDRjtBQWFBLFNBQVMsZ0JBQWdCLFFBQXFDO0FBQzVELFFBQU0sU0FBUyxPQUFPLE9BQU8sV0FBVyxFQUFFLFNBQVMsT0FBTyxLQUFLO0FBRS9ELE1BQUksbUJBQXFELE1BQU0sR0FBRztBQUNoRSx3Q0FBa0IsWUFBWTtBQUM1QixZQUFNLGNBQWMsTUFBTTtBQUMxQixVQUFJLFlBQVksUUFBUTtBQUN0Qiw2QkFBcUI7QUFBQSxVQUNuQjtBQUFBLFVBQ0EsT0FBTztBQUFBLFVBQ1AsT0FBTztBQUFBLFVBQ1AsT0FBTztBQUFBLFVBQ1AsYUFBYSxZQUFZLE1BQU07QUFBQSxRQUNqQztBQUFBLE1BQ0Y7QUFBQSxJQUNGLENBQUM7QUFDRDtBQUFBLEVBQ0Y7QUFFQSxNQUFJLE9BQU8sUUFBUTtBQUNqQixVQUFNLElBQUkseUJBQXlCO0FBQUEsTUFDakMsUUFBUSxPQUFPO0FBQUEsTUFDZixZQUFZLE9BQU87QUFBQSxNQUNuQixhQUFhLE9BQU87QUFBQSxNQUNwQixVQUFVLE9BQU87QUFBQSxJQUNuQixDQUFDO0FBQUEsRUFDSDtBQUNGOyIsIm5hbWVzIjpbIlBsdWdpbkFwaVBheWxvYWRLaW5kIiwiUGx1Z2luQXBpVW5hdmFpbGFiaWxpdHlSZWFzb24iLCJyZWNvcmQiLCJzYXRpc2ZpZXNWZXJzaW9uIl19
|
|
525
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW4vcGx1Z2luLWFwaS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogQSB0eXBlZCwgdmVyc2lvbmVkLCBsaWZlY3ljbGUtYXdhcmUgcmVnaXN0cnkgZm9yIGNyb3NzLXBsdWdpbiBBUElzIOKAlCB0aGUgYWR2YW5jZWQgc3VjY2Vzc29yIHRvXG4gKiBgQHZhbmFrYXQvcGx1Z2luLWFwaWAuXG4gKlxuICogQSBwcm92aWRlciBwdWJsaXNoZXMgaXRzIEFQSSBvbmNlLCB1bmRlciBhIGNvbnRyYWN0IHZlcnNpb24gdGhhdCBpcyBpbmRlcGVuZGVudCBvZiBpdHMgcGx1Z2luIHZlcnNpb246XG4gKlxuICogYGBgdHNcbiAqIHB1Ymxpc2hQbHVnaW5BcGkoe1xuICogICBhcGk6IG5ldyBNeUFwaSh0aGlzKSxcbiAqICAgYXBpVmVyc2lvbjogJzIuMS4wJyxcbiAqICAgY29udHJhY3Q6IE1ZX0FQSV9DT05UUkFDVF9WMixcbiAqICAgcGx1Z2luOiB0aGlzXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEEgY29uc3VtZXIgZ2V0cyBhIExJVkUgUkVGIHdob3NlIHtAbGluayBQbHVnaW5BcGlSZWYudmFsdWV9IGlzIGFsd2F5cyBjdXJyZW50IOKAlCBgbnVsbGAgYmVmb3JlIHRoZVxuICogcHJvdmlkZXIgbG9hZHMsIHRoZSBBUEkgb25jZSBpdCBwdWJsaXNoZXMsIGBudWxsYCBhZ2FpbiBvbmNlIGl0IHVubG9hZHMsIGFuZCB0aGUgQVBJIGFnYWluIGFmdGVyIGFcbiAqIHJlLWVuYWJsZTpcbiAqXG4gKiBgYGB0c1xuICogY29uc3QgcmVmID0gd2F0Y2hQbHVnaW5BcGk8TXlBcGk+KHtcbiAqICAgYXBpVmVyc2lvblJhbmdlOiAnXjInLFxuICogICBhcHA6IHRoaXMuYXBwLFxuICogICBjb21wb25lbnQ6IHRoaXMsXG4gKiAgIHBsdWdpbklkOiAnbXktcHJvdmlkZXInXG4gKiB9KTtcbiAqXG4gKiByZWYudmFsdWU7ICAgICAgICAgICAgICAgICAgICAvLyBNeUFwaSB8IG51bGwg4oCUIHN5bmMsIGZyZWUsIGFsd2F5cyBjb3JyZWN0XG4gKiBhd2FpdCByZWYud2hlbkF2YWlsYWJsZSgpOyAgICAvLyBvbmUtc2hvdCBmbG93czsgcmVqZWN0cyB3aXRoIGEgdHlwZWQsIGNsYXNzaWZpZWQgZXJyb3JcbiAqIHJlZi5vbignY2hhbmdlJywgKCkgPT4geyB9KTsgLy8gZm9yIGNvbnN1bWVycyB0aGF0IG11c3QgUkVBQ1QgcmF0aGVyIHRoYW4gcmVhZFxuICogYGBgXG4gKlxuICogV2hhdCB0aGlzIGZpeGVzLCByZWxhdGl2ZSB0byBwdWJsaXNoaW5nIGEgYmFyZSBvYmplY3Qgb24gYHdpbmRvdy5QbHVnaW5BcGlgOlxuICpcbiAqIC0gKipMb2FkIG9yZGVyLioqIFRoZSByZWYgc3Vic2NyaWJlczsgaXQgZG9lcyBub3Qgc2FtcGxlLiBSZWFkaW5nIGBudWxsYCBkdXJpbmcgYG9ubG9hZGAgbWVhbnMgXCJub3QgeWV0XCIsXG4gKiAgIGFuZCBpdCBiZWNvbWVzIG5vbi1gbnVsbGAgb24gaXRzIG93bi5cbiAqIC0gKipWZXJzaW9uIG5lZ290aWF0aW9uLioqIFRoZSBwcm92aWRlciBkZWNsYXJlcyBhIGNvbnRyYWN0IHZlcnNpb247IHRoZSBjb25zdW1lciBkZWNsYXJlcyB0aGUgcmFuZ2UgaXRcbiAqICAgY29tcGlsZWQgYWdhaW5zdDsgdGhlIGhpZ2hlc3Qgc2F0aXNmeWluZyByZWNvcmQgd2lucy5cbiAqIC0gKipTdGFsZSBoYW5kbGVzLioqIFRoZSB2YWx1ZSBpcyBhIHJldm9jYWJsZSBoYW5kbGUg4oCUIGFmdGVyIHRoZSBwcm92aWRlciB1bmxvYWRzLCBhIHByb3BlcnR5IHJlYWQgdGhyb3dzXG4gKiAgIGEge0BsaW5rIFBsdWdpbkFwaVJldm9rZWRFcnJvcn0gbmFtaW5nIHRoZSBwcm92aWRlciBpbnN0ZWFkIG9mIGEgbnVsbCBkZXJlZiBkZWVwIGluIHNvbWVvbmUgZWxzZSdzIHN0YWNrLlxuICogLSAqKkZyZWUtc3RyaW5nIG5hbWVzLioqIFJlY29yZHMgYXJlIGtleWVkIGJ5IGBwbHVnaW4ubWFuaWZlc3QuaWRgLCB3aGljaCBPYnNpZGlhbiBhbHJlYWR5IGtlZXBzIHVuaXF1ZS5cbiAqIC0gKipMZWdpYmxlIGZhaWx1cmUuKioge0BsaW5rIFBsdWdpbkFwaVJlZi53aGVuQXZhaWxhYmxlfSByZWplY3RzIHdpdGggYVxuICogICB7QGxpbmsgUGx1Z2luQXBpVW5hdmFpbGFibGVFcnJvcn0gY2FycnlpbmcgYSB7QGxpbmsgUGx1Z2luQXBpVW5hdmFpbGFiaWxpdHlSZWFzb259LCBzbyB0aGUgZml2ZSBkaXN0aW5jdFxuICogICBjYXVzZXMgYXJlIHRvbGQgYXBhcnQuXG4gKlxuICogUGF5bG9hZCB2YWxpZGF0aW9uIGlzIG9wdC1pbiBwZXIgbWV0aG9kIHRocm91Z2gge0BsaW5rIGh0dHBzOi8vc3RhbmRhcmRzY2hlbWEuZGV2IHwgU3RhbmRhcmQgU2NoZW1hfSwgc29cbiAqIHpvZCAvIHZhbGlib3QgLyBhcmt0eXBlIC8gYSBoYW5kLXdyaXR0ZW4gdmFsaWRhdG9yIGFsbCBwbHVnIGluIGFuZCBub25lIG9mIHRoZW0gaXMgYSBkZXBlbmRlbmN5IGhlcmUuIEl0XG4gKiBydW5zIG9ubHkgd2hpbGUgdGhlIGBvYnNpZGlhbi1saWI6dmFsaWRhdGUtcGx1Z2luLWFwaS1wYXlsb2Fkc2AgZGVidWcgc3dpdGNoIGlzIG9uIChvZmYgYnkgZGVmYXVsdCwgc2VlXG4gKiB7QGxpbmsgZ2V0VmFsaWRhdGVQbHVnaW5BcGlQYXlsb2Fkc0RlYnVnU3dpdGNofSksIHNvIHByb2R1Y3Rpb24gcGF5cyBub3RoaW5nLiBUaGUgYG9ic2lkaWFuLWRldi11dGlsczpQbHVnaW5BcGlgXG4gKiBkZWJ1Z2dlciBjb250cm9scyBsb2dnaW5nIG9ubHk6IHR1cm5pbmcgaXQgb24gY2hhbmdlcyBubyBiZWhhdmlvci5cbiAqXG4gKiBUaGUgY29udHJhY3QgaXRzZWxmIOKAlCBpdHMgdHlwZXMgYW5kIHRoZSBzY2hlbWEgYnVpbGRlcnMg4oCUIGlzIG5vdCBPYnNpZGlhbi1zcGVjaWZpYyBhbmQgbGl2ZXMgaW5cbiAqIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXBpLWNvbnRyYWN0YCAoYEFwaUNvbnRyYWN0YCwgYGNyZWF0ZUFyZ3VtZW50c1NjaGVtYWAsIGBjcmVhdGVUeXBlR3VhcmRTY2hlbWFgLFxuICogYGRlZmluZUFwaUNvbnRyYWN0YCkuIFRoaXMgbW9kdWxlIG93bnMgd2hhdCBpczogdGhlIHJlZ2lzdHJ5IGtleWVkIGJ5IHBsdWdpbiBpZCwgdGhlIHJldm9jYWJsZSBoYW5kbGVzLCB0aGVcbiAqIGRlYnVnIHN3aXRjaCBhbmQgdGhlIHZhbGlkYXRpb24gZXJyb3JzLiBBIGNvbnRyYWN0J3MgS0VZUyBkcml2ZSB0aGUgc2hhcGUgY2hlY2sgdGhhdCBkZWNpZGVzIHdoZXRoZXIgYSBwdWJsaXNoZWRcbiAqIHJlY29yZCBpcyB1c2FibGUgYXQgYWxsOyBpdHMgc2NoZW1hcyBhcmUgb25seSBldmVyIGNvbnN1bHRlZCB3aGlsZSB0aGUgc3dpdGNoIGlzIG9uLlxuICpcbiAqIFdoeSB0aGUgc2hhcGUgY2hlY2sgaXMgYSBgdHlwZW9mYCByYXRoZXIgdGhhbiBhIHNjaGVtYSBvdmVyIHRoZSB3aG9sZSBBUEkgb2JqZWN0LiBJbiB6b2QgNCBgei5mdW5jdGlvbigpYFxuICogcmV0dXJucyBhIGZ1bmN0aW9uIEZBQ1RPUlksIG5vdCBhIHNjaGVtYSwgc28gaXQgY2Fubm90IGJlIGEgYHoub2JqZWN0KClgIG1lbWJlciBkaXJlY3RseS4gVGhlcmUgaXMgYSBrbm93blxuICogd29ya2Fyb3VuZCAoem9kIzQxNDMpIOKAlCBgei5jdXN0b20oKGZuKSA9PiBmdW5jdGlvblNjaGVtYS5pbXBsZW1lbnQoZm4pKWAg4oCUIGFuZCBpdCBkb2VzIGJ1eSBjb3JyZWN0XG4gKiBgei5pbmZlcmAgdHlwZXMgZm9yIGEgZnVuY3Rpb24gbWVtYmVyLiBJdCBkb2VzIG5vdCBidXkgcnVudGltZSB2YWxpZGF0aW9uIGhlcmUsIHRob3VnaDogYHouY3VzdG9tYCBpcyBhXG4gKiBib29sZWFuIHByZWRpY2F0ZSB0aGF0IHJldHVybnMgaXRzIGlucHV0IHVuY2hhbmdlZCwgc28gdGhlIHZhbGlkYXRpbmcgd3JhcHBlciBgaW1wbGVtZW50YCBidWlsZHMgaXNcbiAqIGRpc2NhcmRlZCBhbmQgdGhlIGNoZWNrIGNvbGxhcHNlcyBiYWNrIHRvIFwiaXMgaXQgY2FsbGFibGVcIi4gS2VlcGluZyB0aGF0IHdyYXBwZXIgd291bGQgbmVlZCBhIGZ1cnRoZXJcbiAqIGAudHJhbnNmb3JtKClgLCBhbmQgd291bGQgdGhlbiBtb3ZlIHZhbGlkYXRpb24gb250byBldmVyeSBjYWxsIGluc3RlYWQgb2YgYmVoaW5kIHRoZSBkZWJ1ZyBzd2l0Y2gsIGFuZCBiaW5kXG4gKiB0aGUgY29udHJhY3QgdG8gem9kIHNwZWNpZmljYWxseSDigJQgd2hpY2ggaXMgZXhhY3RseSB3aGF0IHJlYWNoaW5nIHRocm91Z2ggU3RhbmRhcmQgU2NoZW1hIGF2b2lkcy4gU28gdGhlXG4gKiBkZWNsYXJlZCBtZXRob2QgbmFtZXMgYXJlIGNoZWNrZWQgd2l0aCBgdHlwZW9mYCwgYW5kIHRoZSBwYXlsb2FkcyBhcmUgdmFsaWRhdGVkIHBlciBtZXRob2QgaW5zdGVhZC5cbiAqXG4gKiBAcmVtYXJrc1xuICogRXZlcnkgcGx1Z2luIGJ1bmRsZXMgaXRzIE9XTiBjb3B5IG9mIHRoaXMgbGlicmFyeSAob3Igb2YgdGhlIG9sZGVyIGBvYnNpZGlhbi1kZXYtdXRpbHNgKSwgc28gYSByZWdpc3RyeSByZWNvcmQgaXMgYSB3aXJlIGZvcm1hdCBiZXR3ZWVuXG4gKiBkaWZmZXJlbnQgbGlicmFyeSB2ZXJzaW9ucyBhbmQgbXVzdCBzdGF5IGJhY2t3YXJkLWNvbXBhdGlibGUgZm9yZXZlci4gTm90aGluZyBjcm9zc2luZyBpdCBtYXkgYmVcbiAqIGBpbnN0YW5jZW9mYC1jaGVja2VkIOKAlCByZWFkcyBhcmUgc3RydWN0dXJhbCwgYW5kIG9ubHkgcGxhaW4gZGF0YSBvYmplY3RzIGFuZCBwbGFpbiBmdW5jdGlvbnMgYXJlIHN0b3JlZC5cbiAqXG4gKiBUaGF0IHdpcmUgZm9ybWF0IGlzIGFsc28gUFVCTElTSEVELCBhcyBvZiB0aGUgYFBsdWdpbiBBUEkgcHJvdG9jb2xgIGd1aWRlOiBhIHBsdWdpbiB0aGF0IGRvZXMgbm90IHVzZVxuICogdGhpcyBsaWJyYXJ5IHJlYWNoZXMgYW4gQVBJIGJ5IHJlYWRpbmdcbiAqIGBnbG9iYWxUaGlzLl9fb2JzaWRpYW5EZXZVdGlscy5wbHVnaW5BcGlSZWdpc3RyeS52YWx1ZS5yZWNvcmRzW3BsdWdpbklkXWAgYW5kIGFwcGx5aW5nIHRoZSBzZWxlY3Rpb24gcnVsZVxuICoge0BsaW5rIHNlbGVjdFJlY29yZH0gaW1wbGVtZW50cy4gU28ge0BsaW5rIFB1Ymxpc2hlZFBsdWdpbkFwaVJlY29yZH0ncyBmaWVsZCBuYW1lcywgdGhlIHN0YXRlIGtleSwgYW5kXG4gKiBcImhpZ2hlc3QgbGl2ZSByZWNvcmQgc2F0aXNmeWluZyB0aGUgcmFuZ2Ugd2luc1wiIGFyZSBhIGRvY3VtZW50ZWQgY29udHJhY3Qgd2l0aCBhbiBhdWRpZW5jZSBvdXRzaWRlIHRoaXNcbiAqIHJlcG9zaXRvcnksIGFuZCB0aGUgZ3VpZGUgaGFzIHRvIGJlIHVwZGF0ZWQgaW4gdGhlIHNhbWUgY2hhbmdlIGFzIGFueSBvZiB0aGVtLiBPbmx5IGBwbHVnaW5BcGlSZWdpc3RyeWBcbiAqIGlzIHB1YmxpYyB3aXRoaW4gdGhlIHNoYXJlZC1zdGF0ZSBiYWc7IHRoZSByZXN0IG9mIGl0IHN0YXlzIGludGVybmFsLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBpQ29udHJhY3QsXG4gIEFwaU1ldGhvZENvbnRyYWN0LFxuICBBcGlNZXRob2ROYW1lLFxuICBBcGlNZXRob2RzLFxuICBUeXBlZEFwaUNvbnRyYWN0XG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hcGktY29udHJhY3QnO1xuaW1wb3J0IHR5cGUgeyBBc3luY0V2ZW50U291cmNlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jLWV2ZW50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIERlYnVnU3dpdGNoLFxuICBEZWJ1Z1N3aXRjaERlZmluaXRpb25cbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2RlYnVnLXN3aXRjaGVzJztcbmltcG9ydCB0eXBlIHsgU3RhbmRhcmRTY2hlbWFWMSB9IGZyb20gJ0BzdGFuZGFyZC1zY2hlbWEvc3BlYyc7XG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgQ29tcG9uZW50LFxuICBQbHVnaW5cbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBzbmFwc2hvdCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hcnJheSc7XG5pbXBvcnQge1xuICBpbnZva2VBc3luY1NhZmVseSxcbiAgcnVuV2l0aFRpbWVvdXRcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IG1peGluQXN5bmNFdmVudHMgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMtZXZlbnRzJztcbmltcG9ydCB7IHJlZ2lzdGVyRGVidWdTd2l0Y2ggfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvZGVidWctc3dpdGNoZXMnO1xuaW1wb3J0IHsgY2FzdFRvIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQge1xuICBjb21wYXJlVmVyc2lvbnMsXG4gIHNhdGlzZmllcyBhcyBzYXRpc2ZpZXNWZXJzaW9uXG59IGZyb20gJ2NvbXBhcmUtdmVyc2lvbnMnO1xuXG5pbXBvcnQgeyBnZXRPYnNpZGlhbkxpYkRlYnVnZ2VyIH0gZnJvbSAnLi4vZGVidWcudHMnO1xuaW1wb3J0IHsgZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlIH0gZnJvbSAnLi4vb2JzaWRpYW4tZGV2LXV0aWxzLXN0YXRlLnRzJztcblxuY29uc3QgUExVR0lOX0FQSV9ERUJVR0dFUl9OQU1FU1BBQ0UgPSAnUGx1Z2luQXBpJztcbmNvbnN0IFBMVUdJTl9BUElfUkVHSVNUUllfU1RBVEVfS0VZID0gJ3BsdWdpbkFwaVJlZ2lzdHJ5JztcblxuY29uc3QgVkFMSURBVEVfUExVR0lOX0FQSV9QQVlMT0FEU19ERUJVR19TV0lUQ0hfREVGSU5JVElPTjogRGVidWdTd2l0Y2hEZWZpbml0aW9uID0ge1xuICBkZXNjcmlwdGlvbjogJ1ZhbGlkYXRlIGV2ZXJ5IHBsdWdpbi1BUEkgY2FsbFxcJ3MgYXJndW1lbnRzIGFuZCByZXR1cm4gdmFsdWUgYWdhaW5zdCB0aGUgY29udHJhY3QgdGhlIEFQSSBkZWNsYXJlcywgYW5kIHRocm93IG9uIGEgbWlzbWF0Y2guJyxcbiAgaWQ6ICdvYnNpZGlhbi1saWI6dmFsaWRhdGUtcGx1Z2luLWFwaS1wYXlsb2FkcycsXG4gIGlzRW5hYmxlZEJ5RGVmYXVsdDogZmFsc2UsXG4gIG5hbWU6ICdWYWxpZGF0ZSBwbHVnaW4tQVBJIHBheWxvYWRzJ1xufTtcblxuLyoqXG4gKiBIb3cgbG9uZyB7QGxpbmsgUGx1Z2luQXBpUmVmLndoZW5BdmFpbGFibGV9IHdhaXRzIGJlZm9yZSBnaXZpbmcgdXAgYW5kIGNsYXNzaWZ5aW5nIHRoZSBmYWlsdXJlLlxuICovXG5jb25zdCBERUZBVUxUX1dIRU5fQVZBSUxBQkxFX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMTBfMDAwO1xuXG4vKipcbiAqIFdoaWNoIGhhbGYgb2YgYSBtZXRob2QgY2FsbCBhIHZhbGlkYXRpb24gZmFpbHVyZSBjYW1lIGZyb20uXG4gKi9cbmV4cG9ydCBlbnVtIFBsdWdpbkFwaVBheWxvYWRLaW5kIHtcbiAgLyoqXG4gICAqIFRoZSBtZXRob2QncyBhcmd1bWVudHMuXG4gICAqL1xuICBJbnB1dCA9ICdpbnB1dCcsXG5cbiAgLyoqXG4gICAqIFRoZSBtZXRob2QncyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBPdXRwdXQgPSAnb3V0cHV0J1xufVxuXG4vKipcbiAqIFRoZSByZWFzb24gYSBwbHVnaW4gQVBJIGNvdWxkIG5vdCBiZSBoYW5kZWQgb3Zlci5cbiAqXG4gKiBUaGUgd2hvbGUgcG9pbnQgb2YgdGhlIGVudW0gaXMgdGhhdCB0aGVzZSBhcmUgdG9sZCBhcGFydC4gYEB2YW5ha2F0L3BsdWdpbi1hcGlgIGNhbm5vdCB0ZWxsIGFueSBvZiB0aGVtXG4gKiBhcGFydCwgYW5kIG5vdCB1bmlmb3JtbHk6IGBOb3RJbnN0YWxsZWRgIC8gYE5vdEVuYWJsZWRgIC8gYE5vdFB1Ymxpc2hlZGAgYWxsIHJlZHVjZSB0byBvbmUgYE5vdGljZWAgcGx1c1xuICogYHVuZGVmaW5lZGAsIHdoaWxlIGBWZXJzaW9uTWlzbWF0Y2hgIC8gYFNoYXBlTWlzbWF0Y2hgIHByb2R1Y2UgTk8gc2lnbmFsIGF0IGFsbCDigJQgaXQgbmV2ZXIgZXhhbWluZXMgd2hhdCBpdFxuICogZm91bmQsIHNvIGl0IGhhbmRzIHRoZSBvYmplY3Qgb3ZlciBhbmQgdGhlIG1pc21hdGNoIHN1cmZhY2VzIGxhdGVyLCBzb21ld2hlcmUgZWxzZSwgYXMgc29tZWJvZHkgZWxzZSdzXG4gKiBgVHlwZUVycm9yYC5cbiAqXG4gKiBAcmVtYXJrc1xuICoge0BsaW5rIFBsdWdpbkFwaVJlZi53aGVuQXZhaWxhYmxlfSBjYW4gcmVwb3J0IHRoZSBmaXJzdCBmaXZlOyB7QGxpbmsgUGx1Z2luQXBpVW5hdmFpbGFiaWxpdHlSZWFzb24uUmV2b2tlZH1cbiAqIGlzIG5vdCBvbmUgb2YgdGhlbSwgYmVjYXVzZSBpdCBkZXNjcmliZXMgYSBoYW5kbGUgdGhhdCBXQVMgdmFsaWQgYW5kIGlzIGNhcnJpZWQgYnlcbiAqIHtAbGluayBQbHVnaW5BcGlSZXZva2VkRXJyb3J9IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBlbnVtIFBsdWdpbkFwaVVuYXZhaWxhYmlsaXR5UmVhc29uIHtcbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gaXMgaW5zdGFsbGVkIGJ1dCBub3QgZW5hYmxlZC5cbiAgICovXG4gIE5vdEVuYWJsZWQgPSAnbm90RW5hYmxlZCcsXG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gaXMgbm90IGluc3RhbGxlZCBpbiB0aGlzIHZhdWx0LlxuICAgKi9cbiAgTm90SW5zdGFsbGVkID0gJ25vdEluc3RhbGxlZCcsXG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gaXMgaW5zdGFsbGVkIGFuZCBlbmFibGVkIGJ1dCBoYXMgbm90IHB1Ymxpc2hlZCBhbnkgQVBJLlxuICAgKi9cbiAgTm90UHVibGlzaGVkID0gJ25vdFB1Ymxpc2hlZCcsXG5cbiAgLyoqXG4gICAqIFRoZSBoYW5kbGUgd2FzIHZhbGlkIGJ1dCB0aGUgcHJvdmlkZXIgaGFzIHNpbmNlIHVubG9hZGVkLCBzbyBpdCBoYXMgYmVlbiByZXZva2VkLlxuICAgKi9cbiAgUmV2b2tlZCA9ICdyZXZva2VkJyxcblxuICAvKipcbiAgICogQSByZWNvcmQgc2F0aXNmaWVzIHRoZSByZXF1ZXN0ZWQgdmVyc2lvbiByYW5nZSwgYnV0IHRoZSBBUEkgb2JqZWN0IGlzIG1pc3NpbmcgYSBtZXRob2QgdGhlIGNvbnRyYWN0XG4gICAqIGRlY2xhcmVzIOKAlCB0aGUgcHJvdmlkZXIncyBzaGlwcGVkIHNoYXBlIGFuZCBpdHMgZGVjbGFyZWQgc2hhcGUgZGlzYWdyZWUuXG4gICAqL1xuICBTaGFwZU1pc21hdGNoID0gJ3NoYXBlTWlzbWF0Y2gnLFxuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIHB1Ymxpc2hlZCBhbiBBUEksIGJ1dCBubyBwdWJsaXNoZWQgY29udHJhY3QgdmVyc2lvbiBzYXRpc2ZpZXMgdGhlIHJlcXVlc3RlZCByYW5nZS5cbiAgICovXG4gIFZlcnNpb25NaXNtYXRjaCA9ICd2ZXJzaW9uTWlzbWF0Y2gnXG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGZpbmRQbHVnaW5BcGl9LlxuICpcbiAqIEB0eXBlUGFyYW0gVEFwaSAtIFRoZSBBUEkgdHlwZSB0aGUgY29uc3VtZXIgY29tcGlsZWQgYWdhaW5zdCwgd2hpY2ggYSB0eXBlZCBjb250cmFjdCBpcyBjaGVja2VkIGFnYWluc3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmluZFBsdWdpbkFwaVBhcmFtczxUQXBpIGV4dGVuZHMgb2JqZWN0ID0gb2JqZWN0PiB7XG4gIC8qKlxuICAgKiBUaGUgc2VtdmVyIHJhbmdlIG9mIGNvbnRyYWN0IHZlcnNpb25zIHRoZSBjb25zdW1lciBjb21waWxlZCBhZ2FpbnN0LiBUaGUgc2FtZSBydWxlcyBhc1xuICAgKiB7QGxpbmsgV2F0Y2hQbHVnaW5BcGlQYXJhbXMuYXBpVmVyc2lvblJhbmdlfSBhcHBseS5cbiAgICovXG4gIHJlYWRvbmx5IGFwaVZlcnNpb25SYW5nZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udHJhY3QgdGhlIENPTlNVTUVSIGV4cGVjdHMuIFdoZW4gc3VwcGxpZWQsIGl0IHdpbnMgb3ZlciB0aGUgcHJvdmlkZXIncyBwdWJsaXNoZWQgY29udHJhY3QsIGFzIGluXG4gICAqIHtAbGluayBXYXRjaFBsdWdpbkFwaVBhcmFtcy5jb250cmFjdH0uXG4gICAqL1xuICByZWFkb25seSBjb250cmFjdD86IEFwaUNvbnRyYWN0PFRBcGk+O1xuXG4gIC8qKlxuICAgKiBUaGUgYG1hbmlmZXN0LmlkYCBvZiB0aGUgcHJvdmlkaW5nIHBsdWdpbi5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGNvbnRyYWN0IGEgcHJvdmlkZXIgZGVjbGFyZXMgZm9yIGl0cyBBUEkuXG4gKlxuICogQHR5cGVQYXJhbSBUQXBpIC0gVGhlIEFQSSB0aGUgY29udHJhY3QgZGVzY3JpYmVzLiBgb2JqZWN0YCwgdGhlIGRlZmF1bHQsIG1lYW5zIFwibm90IHR5cGVkXCIuXG4gKiBAZGVwcmVjYXRlZCBVc2UgYEFwaUNvbnRyYWN0YCBmcm9tIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXBpLWNvbnRyYWN0YC5cbiAqL1xuZXhwb3J0IHR5cGUgUGx1Z2luQXBpQ29udHJhY3Q8VEFwaSBleHRlbmRzIG9iamVjdCA9IG9iamVjdD4gPSBBcGlDb250cmFjdDxUQXBpPjtcblxuLyoqXG4gKiBPbmUgQVBJIGEgcGx1Z2luIGV4cG9zZXM6IHRoZSBvYmplY3QsIHRoZSBjb250cmFjdCB2ZXJzaW9uIGl0IHNhdGlzZmllcywgYW5kIG9wdGlvbmFsbHkgdGhlIGNvbnRyYWN0XG4gKiBpdHNlbGYuIFRoaXMgaXMge0BsaW5rIFB1Ymxpc2hQbHVnaW5BcGlQYXJhbXN9IHdpdGhvdXQgdGhlIHB1Ymxpc2hpbmcgcGx1Z2luLCBzbyBhIHBsdWdpbiBjYW4gREVDTEFSRSB3aGF0XG4gKiBpdCBleHBvc2VzIHdpdGhvdXQgYWxzbyBzdGF0aW5nIHdobyBpcyBwdWJsaXNoaW5nIGl0IOKAlCB3aGljaCBpcyB3aGF0IGxldHMgYFBsdWdpbkJhc2UuZ2V0UGx1Z2luQXBpc2AgY29sbGVjdFxuICogdGhlIGRlY2xhcmF0aW9ucyBhbmQgZG8gdGhlIHB1Ymxpc2hpbmcgaXRzZWxmLlxuICpcbiAqIEB0eXBlUGFyYW0gVEFwaSAtIFRoZSBBUEkgdHlwZSBiZWluZyBkZWNsYXJlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5BcGlEZWNsYXJhdGlvbjxUQXBpIGV4dGVuZHMgb2JqZWN0ID0gb2JqZWN0PiB7XG4gIC8qKlxuICAgKiBUaGUgQVBJIG9iamVjdCB0byBwdWJsaXNoLiBJdHMgbWV0aG9kcyBhcmUgaGFuZGVkIHRvIGNvbnN1bWVycyB0aHJvdWdoIGEgcmV2b2NhYmxlIGhhbmRsZSwgYW5kIHRoZXkgYXJlXG4gICAqIGFsd2F5cyBpbnZva2VkIHdpdGggdGhpcyBvYmplY3QgYXMgdGhlaXIgYHRoaXNgLCBzbyBhbiBpbXBsZW1lbnRhdGlvbiB1c2luZyBwcml2YXRlIGNsYXNzIGZpZWxkcyBrZWVwc1xuICAgKiB3b3JraW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBpOiBUQXBpO1xuXG4gIC8qKlxuICAgKiBUaGUgQ09OVFJBQ1QgdmVyc2lvbiwgaW4gc2VtdmVyIGZvcm0g4oCUIGluZGVwZW5kZW50IG9mIHRoZSBwbHVnaW4ncyBvd24gdmVyc2lvbi4gUGx1Z2luIGAxLjQuN2AgbWF5XG4gICAqIHBlcmZlY3RseSB3ZWxsIGV4cG9zZSBBUEkgYDIuMC4wYC5cbiAgICovXG4gIHJlYWRvbmx5IGFwaVZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvbnRyYWN0IHRoaXMgdmVyc2lvbiBvZiB0aGUgQVBJIHNhdGlzZmllcy4gT3B0aW9uYWw6IHdoZW4gb21pdHRlZCwgbm8gc2hhcGUgY2hlY2sgaXMgcGVyZm9ybWVkIG9uXG4gICAqIHRoZSBwcm92aWRlcidzIGJlaGFsZiBhbmQgdGhlIGNvbnN1bWVyJ3Mgb3duIGNvbnRyYWN0IChpZiBhbnkpIGlzIHVzZWQgaW5zdGVhZC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRyYWN0PzogQXBpQ29udHJhY3Q8VEFwaT47XG59XG5cbi8qKlxuICogVGhlIHBheWxvYWQgc2NoZW1hcyBmb3IgYSBzaW5nbGUgQVBJIG1ldGhvZC5cbiAqXG4gKiBAdHlwZVBhcmFtIFRQYXJhbWV0ZXJzIC0gVGhlIG1ldGhvZCdzIHBhcmFtZXRlcnMsIGFzIGEgdHVwbGUsIHdoaWNoIHRoZSBpbnB1dCBzY2hlbWEgbXVzdCBwcm9kdWNlLlxuICogQHR5cGVQYXJhbSBUUmV0dXJuVmFsdWUgLSBUaGUgbWV0aG9kJ3MgcmV0dXJuIHZhbHVlLCBhd2FpdGVkLCB3aGljaCB0aGUgb3V0cHV0IHNjaGVtYSBtdXN0IHByb2R1Y2UuXG4gKiBAZGVwcmVjYXRlZCBVc2UgYEFwaU1ldGhvZENvbnRyYWN0YCBmcm9tIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXBpLWNvbnRyYWN0YC5cbiAqL1xuZXhwb3J0IHR5cGUgUGx1Z2luQXBpTWV0aG9kQ29udHJhY3Q8VFBhcmFtZXRlcnMgPSB1bmtub3duLCBUUmV0dXJuVmFsdWUgPSB1bmtub3duPiA9IEFwaU1ldGhvZENvbnRyYWN0PFRQYXJhbWV0ZXJzLCBUUmV0dXJuVmFsdWU+O1xuXG4vKipcbiAqIFRoZSBuYW1lcyBvZiB0aGUgZnVuY3Rpb24gbWVtYmVycyBvZiBhbiBBUEkuXG4gKlxuICogQHR5cGVQYXJhbSBUQXBpIC0gVGhlIEFQSS5cbiAqIEBkZXByZWNhdGVkIFVzZSBgQXBpTWV0aG9kTmFtZWAgZnJvbSBgQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FwaS1jb250cmFjdGAuXG4gKi9cbmV4cG9ydCB0eXBlIFBsdWdpbkFwaU1ldGhvZE5hbWU8VEFwaSBleHRlbmRzIG9iamVjdD4gPSBBcGlNZXRob2ROYW1lPFRBcGk+O1xuXG4vKipcbiAqIFRoZSBmdW5jdGlvbiBtZW1iZXJzIG9mIGFuIEFQSS5cbiAqXG4gKiBAdHlwZVBhcmFtIFRBcGkgLSBUaGUgQVBJLlxuICogQGRlcHJlY2F0ZWQgVXNlIGBBcGlNZXRob2RzYCBmcm9tIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXBpLWNvbnRyYWN0YC5cbiAqL1xuZXhwb3J0IHR5cGUgUGx1Z2luQXBpTWV0aG9kczxUQXBpIGV4dGVuZHMgb2JqZWN0PiA9IEFwaU1ldGhvZHM8VEFwaT47XG5cbi8qKlxuICogQSBsaXZlIHJlZmVyZW5jZSB0byBhbm90aGVyIHBsdWdpbidzIEFQSS5cbiAqXG4gKiBAdHlwZVBhcmFtIFRBcGkgLSBUaGUgQVBJIHR5cGUgdGhlIGNvbnN1bWVyIGNvbXBpbGVkIGFnYWluc3QuXG4gKlxuICogQHJlbWFya3NcbiAqIFRoZSByZWYgaXMgdGhlIFdIT0xFIGNvbnN1bWVyIHN1cmZhY2UsIGRlbGliZXJhdGVseS4gQSBwbGFpbiB7QGxpbmsgUHJvbWlzZX0gY2Fubm90IG1vZGVsIHRoaXMgYmVjYXVzZSBpdFxuICogc2V0dGxlcyBvbmNlLCB3aGVyZWFzIGF2YWlsYWJpbGl0eSBpcyBhIHJlcGVhdGluZyBzaWduYWwgKGF2YWlsYWJsZSDihpIgZ29uZSDihpIgYXZhaWxhYmxlIGFnYWluIGFjcm9zcyBhXG4gKiBkaXNhYmxlL2VuYWJsZSBjeWNsZSkg4oCUIHdoaWNoIGlzIHdoeSB7QGxpbmsgUGx1Z2luQXBpUmVmLndoZW5BdmFpbGFibGV9IGlzIGEgbWV0aG9kIE9OIHRoZSByZWYgcmF0aGVyIHRoYW5cbiAqIHRoZSB0aGluZyBoYW5kZWQgYmFjay4gVGhlIGBjaGFuZ2VgIGV2ZW50IGV4aXN0cyBmb3IgY29uc3VtZXJzIHRoYXQgbXVzdCByZWFjdCByYXRoZXIgdGhhbiByZWFkLCBhbmQgaXNcbiAqIHNlY29uZGFyeTogaXQgaW1wb3NlcyBubyBjZXJlbW9ueSBvbiB0aGUgY29tbW9uIGNhc2UsIHdoaWNoIGlzIHJlYWRpbmcge0BsaW5rIFBsdWdpbkFwaVJlZi52YWx1ZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luQXBpUmVmPFRBcGkgZXh0ZW5kcyBvYmplY3Q+IGV4dGVuZHMgQXN5bmNFdmVudFNvdXJjZTxQbHVnaW5BcGlSZWZFdmVudE1hcD4ge1xuICAvKipcbiAgICogV2h5IHRoZSBBUEkgaXMgbm90IGF2YWlsYWJsZSByaWdodCBub3csIG9yIGBudWxsYCB3aGlsZSBpdCBpcy5cbiAgICpcbiAgICogQ2xhc3NpZmllZCBhdCB0aGUgbW9tZW50IG9mIHJlYWRpbmcsIGJ5IHRoZSBzYW1lIHByb2JlIHtAbGluayBQbHVnaW5BcGlSZWYud2hlbkF2YWlsYWJsZX0gdXNlcyBmb3IgaXRzXG4gICAqIGVycm9yLCBzbyBhIGNhbGxlciB0aGF0IG11c3QgZGVjaWRlIHN5bmNocm9ub3VzbHkg4oCUIHdoaWNoIG1lc3NhZ2UgdG8gc2hvdywgd2hpY2ggYnV0dG9uIHRvIG9mZmVyIOKAlCBjYW5cbiAgICogdGVsbCBcIm5vdCBpbnN0YWxsZWRcIiBmcm9tIFwidG9vIG9sZFwiIHdpdGhvdXQgd2FpdGluZyBmb3IgYSB0aW1lb3V0LiBMaWtlIHtAbGluayBQbHVnaW5BcGlSZWYudmFsdWV9LCBpdFxuICAgKiBkZXNjcmliZXMgbm93OiBkdXJpbmcgYSBjb25zdW1lcidzIGBvbmxvYWRgIGEgcHJvdmlkZXIgdGhhdCBoYXMgbm90IGxvYWRlZCB5ZXQgcmVhZHMgYXNcbiAgICoge0BsaW5rIFBsdWdpbkFwaVVuYXZhaWxhYmlsaXR5UmVhc29uLk5vdFB1Ymxpc2hlZH0uXG4gICAqL1xuICByZWFkb25seSB1bmF2YWlsYWJpbGl0eVJlYXNvbjogbnVsbCB8IFBsdWdpbkFwaVVuYXZhaWxhYmlsaXR5UmVhc29uO1xuXG4gIC8qKlxuICAgKiBUaGUgQVBJLCBvciBgbnVsbGAgd2hlbiBpdCBpcyBub3QgY3VycmVudGx5IGF2YWlsYWJsZS5cbiAgICpcbiAgICogQWx3YXlzIGN1cnJlbnQsIHN5bmNocm9ub3VzLCBhbmQgZnJlZSDigJQgdGhlIHJlZiBtYWludGFpbnMgaXQsIHNvIHRoZXJlIGlzIG5vIHJlZ2lzdHJ5IGxvb2t1cCBwZXIgcmVhZC5cbiAgICogYG51bGxgIGhlcmUgbWVhbnMgXCJub3QgYXZhaWxhYmxlIHJpZ2h0IG5vd1wiLCBOT1QgXCJub3QgaW5zdGFsbGVkXCI6IGR1cmluZyBhIGNvbnN1bWVyJ3MgYG9ubG9hZGAgdGhlXG4gICAqIHByb3ZpZGVyIG1heSBzaW1wbHkgbm90IGhhdmUgbG9hZGVkIHlldCwgYW5kIHRoZSB2YWx1ZSBiZWNvbWVzIG5vbi1gbnVsbGAgb24gaXRzIG93bi5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlOiBudWxsIHwgVEFwaTtcblxuICAvKipcbiAgICogV2FpdHMgZm9yIHRoZSBBUEkgdG8gYmVjb21lIGF2YWlsYWJsZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIHdhaXQuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgQVBJLlxuICAgKiBAdGhyb3dzIEEge0BsaW5rIFBsdWdpbkFwaVVuYXZhaWxhYmxlRXJyb3J9IHdob3NlIHtAbGluayBQbHVnaW5BcGlVbmF2YWlsYWJsZUVycm9yLnJlYXNvbn0gc2F5cyB3aGljaCBvZlxuICAgKiB0aGUgZml2ZSBmYWlsdXJlcyBvY2N1cnJlZCwgaWYgdGhlIEFQSSBkb2VzIG5vdCBiZWNvbWUgYXZhaWxhYmxlIGJlZm9yZSB0aGUgdGltZW91dCBlbGFwc2VzLlxuICAgKi9cbiAgd2hlbkF2YWlsYWJsZTogKG9wdGlvbnM/OiBXaGVuQXZhaWxhYmxlUGx1Z2luQXBpT3B0aW9ucykgPT4gUHJvbWlzZTxUQXBpPjtcbn1cblxuLyoqXG4gKiBUaGUgZXZlbnRzIGEge0BsaW5rIFBsdWdpbkFwaVJlZn0gZmlyZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luQXBpUmVmRXZlbnRNYXAge1xuICAvKipcbiAgICogRmlyZWQgd2hlbmV2ZXIge0BsaW5rIFBsdWdpbkFwaVJlZi52YWx1ZX0gY2hhbmdlcyDigJQgaW5jbHVkaW5nIHdoZW4gaXQgYmVjb21lcyBgbnVsbGAgYmVjYXVzZSB0aGUgcHJvdmlkZXJcbiAgICogdW5sb2FkZWQuXG4gICAqL1xuICBjaGFuZ2U6IFtdO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSB7QGxpbmsgUGx1Z2luQXBpVW5hdmFpbGFibGVFcnJvcn0gY29uc3RydWN0b3IuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luQXBpVW5hdmFpbGFibGVFcnJvckNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIEFuIGV4cGxpY2l0IG1lc3NhZ2UuIFdoZW4gb21pdHRlZCwgb25lIGlzIGRlcml2ZWQgZnJvbSB0aGUgcGx1Z2luIGlkIGFuZCB0aGUgcmVhc29uLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGBtYW5pZmVzdC5pZGAgb2YgdGhlIHBsdWdpbiB3aG9zZSBBUEkgd2FzIHJlcXVlc3RlZC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoaWNoIG9mIHRoZSBmaXZlIGZhaWx1cmVzIG9jY3VycmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVhc29uOiBQbHVnaW5BcGlVbmF2YWlsYWJpbGl0eVJlYXNvbjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB0aGUge0BsaW5rIFBsdWdpbkFwaVZhbGlkYXRpb25FcnJvcn0gY29uc3RydWN0b3IuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luQXBpVmFsaWRhdGlvbkVycm9yQ29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGlzc3VlcyB0aGUgc2NoZW1hIHJlcG9ydGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNzdWVzOiByZWFkb25seSBTdGFuZGFyZFNjaGVtYVYxLklzc3VlW107XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2Qgd2hvc2UgcGF5bG9hZCBmYWlsZWQgdmFsaWRhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGhvZE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgaW5wdXQgb3IgdGhlIG91dHB1dCBmYWlsZWQuXG4gICAqL1xuICByZWFkb25seSBwYXlsb2FkS2luZDogUGx1Z2luQXBpUGF5bG9hZEtpbmQ7XG5cbiAgLyoqXG4gICAqIFRoZSBgbWFuaWZlc3QuaWRgIG9mIHRoZSBwcm92aWRpbmcgcGx1Z2luLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcHVibGlzaFBsdWdpbkFwaX0uXG4gKlxuICogQHR5cGVQYXJhbSBUQXBpIC0gVGhlIEFQSSB0eXBlIGJlaW5nIHB1Ymxpc2hlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWJsaXNoUGx1Z2luQXBpUGFyYW1zPFRBcGkgZXh0ZW5kcyBvYmplY3Q+IGV4dGVuZHMgUGx1Z2luQXBpRGVjbGFyYXRpb248VEFwaT4ge1xuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB3aG9zZSB1bmxvYWQgcmV2b2tlcyB0aGUgcmVjb3JkLiBEZWZhdWx0cyB0byB7QGxpbmsgUHVibGlzaFBsdWdpbkFwaVBhcmFtcy5wbHVnaW59LCB3aGljaCBpc1xuICAgKiB0aGUgcmlnaHQgb3duZXIgZm9yIGFuIEFQSSBwdWJsaXNoZWQgZm9yIGFzIGxvbmcgYXMgdGhlIHBsdWdpbiBydW5zLlxuICAgKlxuICAgKiBQYXNzIGEgbmFycm93ZXIgb25lIHdoZW4gdGhlIEFQSSBpcyBvbmx5IHZhbGlkIGZvciBwYXJ0IG9mIHRoZSBwbHVnaW4ncyBsaWZlIOKAlCBhIHBsdWdpbiB3aG9zZSBmZWF0dXJlXG4gICAqIHN1cmZhY2UgaXMgdG9ybiBkb3duIGFuZCByZWJ1aWx0IHdoaWxlIHRoZSBwbHVnaW4gaXRzZWxmIHN0YXlzIGxvYWRlZCBtdXN0IHJldm9rZSB3aXRoIHRoZSBzdXJmYWNlLCBvciBpdFxuICAgKiBsZWF2ZXMgY29uc3VtZXJzIGhvbGRpbmcgaGFuZGxlcyBpbnRvIGNvZGUgdGhhdCBpcyBubyBsb25nZXIgdGhlcmUuXG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnQ/OiBDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBwdWJsaXNoaW5nIHBsdWdpbi4gVGhlIHJlY29yZCBpcyBrZXllZCBieSBpdHMgYG1hbmlmZXN0LmlkYCBhbmQgcmV2b2tlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIHBsdWdpblxuICAgKiB1bmxvYWRzLCB2aWEgYHBsdWdpbi5yZWdpc3RlcigpYC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbjogUGx1Z2luO1xufVxuXG4vKipcbiAqIFRoZSBjb250cmFjdCBvZiBhIG5hbWVkIEFQSSwgd2l0aCBib3RoIHNjaGVtYXMgcmVxdWlyZWQgb24gZXZlcnkgZW50cnkuXG4gKlxuICogQHR5cGVQYXJhbSBUQXBpIC0gVGhlIEFQSSB0aGUgY29udHJhY3QgZGVzY3JpYmVzLlxuICogQGRlcHJlY2F0ZWQgVXNlIGBUeXBlZEFwaUNvbnRyYWN0YCBmcm9tIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXBpLWNvbnRyYWN0YC5cbiAqL1xuZXhwb3J0IHR5cGUgVHlwZWRQbHVnaW5BcGlDb250cmFjdDxUQXBpIGV4dGVuZHMgb2JqZWN0PiA9IFR5cGVkQXBpQ29udHJhY3Q8VEFwaT47XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHdhdGNoUGx1Z2luQXBpfS5cbiAqXG4gKiBAdHlwZVBhcmFtIFRBcGkgLSBUaGUgQVBJIHR5cGUgdGhlIGNvbnN1bWVyIGNvbXBpbGVkIGFnYWluc3QsIHdoaWNoIGEgdHlwZWQgY29udHJhY3QgaXMgY2hlY2tlZCBhZ2FpbnN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdhdGNoUGx1Z2luQXBpUGFyYW1zPFRBcGkgZXh0ZW5kcyBvYmplY3QgPSBvYmplY3Q+IHtcbiAgLyoqXG4gICAqIFRoZSBzZW12ZXIgcmFuZ2Ugb2YgY29udHJhY3QgdmVyc2lvbnMgdGhlIGNvbnN1bWVyIGNvbXBpbGVkIGFnYWluc3QsIGUuZy4gYCdeMidgLiBUaGUgaGlnaGVzdCBwdWJsaXNoZWRcbiAgICogdmVyc2lvbiBzYXRpc2Z5aW5nIGl0IHdpbnMuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSByYW5nZSBpcyBldmFsdWF0ZWQgYnkgYGNvbXBhcmUtdmVyc2lvbnNgLCB3aGljaCBhY2NlcHRzIGBeYCwgYH5gLCBjb21wYXJpc29uIG9wZXJhdG9ycywgYW5kIGB4YFxuICAgKiB3aWxkY2FyZHMg4oCUIGJ1dCBOT1QgYSBiYXJlIGAqYC4gU3BlbGwgXCJhbnkgdmVyc2lvblwiIGFzIGAnPj0wLjAuMCdgLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBpVmVyc2lvblJhbmdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UsIHVzZWQgdG8gY2xhc3NpZnkgYSBmYWlsdXJlIGFzIG5vdC1pbnN0YWxsZWQgdnMgbm90LWVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCBvd25pbmcgdGhlIHN1YnNjcmlwdGlvbi4gVGhlIHdhdGNoIGlzIHRvcm4gZG93biB3aGVuIGl0IHVubG9hZHMuXG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnQ6IENvbXBvbmVudDtcblxuICAvKipcbiAgICogVGhlIGNvbnRyYWN0IHRoZSBDT05TVU1FUiBleHBlY3RzLiBPcHRpb25hbCwgYW5kIGl0IHdpbnMgb3ZlciB0aGUgcHJvdmlkZXIncyBwdWJsaXNoZWQgY29udHJhY3Qgd2hlblxuICAgKiBzdXBwbGllZCDigJQgaXQgaXMgdGhlIGNvbnN1bWVyJ3Mgb3duIGNvbXBpbGVkLWFnYWluc3QgZXhwZWN0YXRpb24sIHNvIGl0IGlzIHRoZSBvbmUgd2hvc2UgdmlvbGF0aW9uIGlzXG4gICAqIHRoZSBjb25zdW1lcidzIHByb2JsZW0uXG4gICAqL1xuICByZWFkb25seSBjb250cmFjdD86IEFwaUNvbnRyYWN0PFRBcGk+O1xuXG4gIC8qKlxuICAgKiBUaGUgYG1hbmlmZXN0LmlkYCBvZiB0aGUgcHJvdmlkaW5nIHBsdWdpbi5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIFBsdWdpbkFwaVJlZi53aGVuQXZhaWxhYmxlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXaGVuQXZhaWxhYmxlUGx1Z2luQXBpT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBIb3cgbG9uZyB0byB3YWl0IGJlZm9yZSBnaXZpbmcgdXAgYW5kIGNsYXNzaWZ5aW5nIHRoZSBmYWlsdXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxMDAwMFxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjcmVhdGVNZXRob2RXcmFwcGVyfS5cbiAqL1xuaW50ZXJmYWNlIENyZWF0ZU1ldGhvZFdyYXBwZXJQYXJhbXMge1xuICByZWFkb25seSBtZXRob2RDb250cmFjdDogQXBpTWV0aG9kQ29udHJhY3QgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBodW1hbi1yZWFkYWJsZSBuYW1lIHVzZWQgaW4gZXJyb3IgbWVzc2FnZXMgYW5kIGRlYnVnIG91dHB1dC4gTk9UIGEga2V5IOKAlCBzZWUge0BsaW5rIHByb3BlcnR5S2V5fS5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGhvZE5hbWU6IHN0cmluZztcblxuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUga2V5IHRoZSBtZXRob2QgaXMgYWN0dWFsbHkgcmVhZCBieSwgd2hpY2ggbWF5IGJlIGEgc3ltYm9sLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvcGVydHlLZXk6IFByb3BlcnR5S2V5O1xuXG4gIHJlYWRvbmx5IHRhcmdldDogb2JqZWN0O1xufVxuXG4vKipcbiAqIFRoZSByZWFsbS1nbG9iYWwgcmVnaXN0cnkgc2hhcmVkIGJ5IGV2ZXJ5IGNvcHkgb2YgdGhpcyBsaWJyYXJ5LCBhbmQgb2YgdGhlIG9sZGVyIGBvYnNpZGlhbi1kZXYtdXRpbHNgLCBpbiB0aGUgcmVuZGVyZXIuXG4gKi9cbmludGVyZmFjZSBQbHVnaW5BcGlSZWdpc3RyeSB7XG4gIHJlY29yZHM6IFJlY29yZDxzdHJpbmcsIFB1Ymxpc2hlZFBsdWdpbkFwaVJlY29yZFtdPjtcbiAgc3Vic2NyaWJlcnM6ICgoKSA9PiB2b2lkKVtdO1xufVxuXG4vKipcbiAqIEEgcmVjb3JkIGFzIGl0IHNpdHMgaW4gdGhlIHNoYXJlZCByZWdpc3RyeS5cbiAqXG4gKiBAcmVtYXJrc1xuICogVGhpcyBpcyB0aGUgV0lSRSBGT1JNQVQgYmV0d2VlbiBkaWZmZXJlbnQgY29waWVzIG9mIHRoaXMgbGlicmFyeSBhbmQgb2YgdGhlIG9sZGVyIGBvYnNpZGlhbi1kZXYtdXRpbHNgLCBzbyBpdCBob2xkcyBub3RoaW5nIGJ1dCBwbGFpbiBkYXRhXG4gKiBhbmQgcGxhaW4gZnVuY3Rpb25zLCBhbmQgZXZlcnkgcmVhZCBvZiBpdCBlbHNld2hlcmUgaW4gdGhpcyBmaWxlIGlzIHN0cnVjdHVyYWwuXG4gKlxuICogVW5leHBvcnRlZCBhbmQgbm9uZXRoZWxlc3MgUFVCTElDOiB0aGUgYFBsdWdpbiBBUEkgcHJvdG9jb2xgIGd1aWRlIGRvY3VtZW50cyB0aGVzZSBmaXZlIGZpZWxkIG5hbWVzIGZvclxuICogdGhpcmQtcGFydHkgcGx1Z2lucyB0aGF0IHJlYWQgdGhlIHJlZ2lzdHJ5IHdpdGhvdXQgdGhpcyBsaWJyYXJ5LCBhbmQgcmVwcm9kdWNlcyB0aGUgaW50ZXJmYWNlIHZlcmJhdGltXG4gKiBmb3IgdGhlbSB0byBwYXN0ZS4gSXQgc3RheXMgdW5leHBvcnRlZCBiZWNhdXNlIG5vIGNvbnN1bWVyIE9GIHRoaXMgbGlicmFyeSBldmVyIHRvdWNoZXMgYSByZWNvcmQg4oCUXG4gKiB7QGxpbmsgd2F0Y2hQbHVnaW5BcGl9IGlzIHRoZWlyIHdob2xlIHN1cmZhY2Ug4oCUIHNvIGV4cG9ydGluZyBpdCB3b3VsZCB3aWRlbiB0aGUgcGFja2FnZSdzIEFQSSBmb3IgYW5cbiAqIGF1ZGllbmNlIHRoYXQgZG9lcyBub3QgaW1wb3J0IHRoZSBwYWNrYWdlLiBSZW5hbWluZyBhIGZpZWxkIGhlcmUgaXMgYSBicmVha2luZyBjaGFuZ2UgdG8gdGhlIGd1aWRlLlxuICovXG5pbnRlcmZhY2UgUHVibGlzaGVkUGx1Z2luQXBpUmVjb3JkIHtcbiAgYXBpOiBvYmplY3Q7XG4gIGFwaVZlcnNpb246IHN0cmluZztcbiAgY29udHJhY3Q6IEFwaUNvbnRyYWN0O1xuICBpc1Jldm9rZWQ6IGJvb2xlYW47XG4gIHBsdWdpbklkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHZhbGlkYXRlUGF5bG9hZH0uXG4gKi9cbmludGVyZmFjZSBWYWxpZGF0ZVBheWxvYWRQYXJhbXMge1xuICByZWFkb25seSBtZXRob2ROYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBheWxvYWRLaW5kOiBQbHVnaW5BcGlQYXlsb2FkS2luZDtcbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc2NoZW1hOiBTdGFuZGFyZFNjaGVtYVYxO1xuICByZWFkb25seSB2YWx1ZTogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBIb2xkcyB3aGF0IGEgd2F0Y2ggbmVlZHMgcmVnYXJkbGVzcyBvZiB0aGUgQVBJIHR5cGUgaXQgaXMgdHlwZWQgYWdhaW5zdCwgc28gdGhlIHtAbGluayBtaXhpbkFzeW5jRXZlbnRzfVxuICogbWl4aW4gaGFzIGEgcmVhbCBiYXNlIHRvIGV4dGVuZC5cbiAqL1xuYWJzdHJhY3QgY2xhc3MgUGx1Z2luQXBpV2F0Y2hCYXNlIHtcbiAgcHJvdGVjdGVkIGhhbmRsZTogbnVsbCB8IG9iamVjdCA9IG51bGw7XG5cbiAgcHJvdGVjdGVkIHJlY29yZDogbnVsbCB8IFB1Ymxpc2hlZFBsdWdpbkFwaVJlY29yZCA9IG51bGw7XG5cbiAgLy8gQSBgcHJvdGVjdGVkYCBjb25zdHJ1Y3RvciBpcyBub3QgYXNzaWduYWJsZSB0byBgQWJzdHJhY3RDb25zdHJ1Y3RvcjxvYmplY3Q+YCwgd2hpY2ggaXMgd2hhdFxuICAvLyBgbWl4aW5Bc3luY0V2ZW50c2AgYWNjZXB0cywgc28gdGhpcyBzdGF5cyBwdWJsaWMgZXZlbiB0aG91Z2ggb25seSB0aGUgc3ViY2xhc3MgYmVsb3cgY2FsbHMgaXQuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgcGFyYW1zOiBXYXRjaFBsdWdpbkFwaVBhcmFtcykge31cblxuICAvKipcbiAgICogQnVpbGRzIHRoZSBlcnJvciBkZXNjcmliaW5nIHdoeSB0aGUgQVBJIGlzIG5vdCBhdmFpbGFibGUgcmlnaHQgbm93LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgY2xhc3NpZmllZCBlcnJvci5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVVbmF2YWlsYWJsZUVycm9yKCk6IFBsdWdpbkFwaVVuYXZhaWxhYmxlRXJyb3Ige1xuICAgIHJldHVybiBuZXcgUGx1Z2luQXBpVW5hdmFpbGFibGVFcnJvcih7XG4gICAgICBwbHVnaW5JZDogdGhpcy5wYXJhbXMucGx1Z2luSWQsXG4gICAgICByZWFzb246IHJlc29sdmVVbmF2YWlsYWJpbGl0eVJlYXNvbih0aGlzLnBhcmFtcylcbiAgICB9KTtcbiAgfVxufVxuXG5jbGFzcyBQbHVnaW5BcGlSZWZJbXBsPFRBcGkgZXh0ZW5kcyBvYmplY3Q+IGV4dGVuZHMgbWl4aW5Bc3luY0V2ZW50czxQbHVnaW5BcGlSZWZFdmVudE1hcD4oKShQbHVnaW5BcGlXYXRjaEJhc2UpIGltcGxlbWVudHMgUGx1Z2luQXBpUmVmPFRBcGk+IHtcbiAgcHVibGljIGdldCB1bmF2YWlsYWJpbGl0eVJlYXNvbigpOiBudWxsIHwgUGx1Z2luQXBpVW5hdmFpbGFiaWxpdHlSZWFzb24ge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZSA9PT0gbnVsbCA/IHJlc29sdmVVbmF2YWlsYWJpbGl0eVJlYXNvbih0aGlzLnBhcmFtcykgOiBudWxsO1xuICB9XG5cbiAgcHVibGljIGdldCB2YWx1ZSgpOiBudWxsIHwgVEFwaSB7XG4gICAgcmV0dXJuIGNhc3RUbzxudWxsIHwgVEFwaT4odGhpcy5oYW5kbGUpO1xuICB9XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogV2F0Y2hQbHVnaW5BcGlQYXJhbXMpIHtcbiAgICBzdXBlcihwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29tcHV0ZXMgdGhlIGN1cnJlbnQgdmFsdWUgZnJvbSB0aGUgcmVnaXN0cnksIGZpcmluZyBgY2hhbmdlYCBvbmx5IHdoZW4gaXQgYWN0dWFsbHkgY2hhbmdlZC5cbiAgICovXG4gIHB1YmxpYyByZWZyZXNoKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlY29yZCA9IHNlbGVjdFJlY29yZCh0aGlzLnBhcmFtcyk7XG4gICAgaWYgKHJlY29yZCA9PT0gdGhpcy5yZWNvcmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlY29yZCA9IHJlY29yZDtcbiAgICB0aGlzLmhhbmRsZSA9IHJlY29yZCA9PT0gbnVsbCA/IG51bGwgOiBjcmVhdGVSZXZvY2FibGVIYW5kbGUocmVjb3JkLCB0aGlzLnBhcmFtcy5jb250cmFjdCk7XG4gICAgdGhpcy50cmlnZ2VyKCdjaGFuZ2UnKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB3aGVuQXZhaWxhYmxlKG9wdGlvbnM/OiBXaGVuQXZhaWxhYmxlUGx1Z2luQXBpT3B0aW9ucyk6IFByb21pc2U8VEFwaT4ge1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgaWYgKGN1cnJlbnRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJ1bldpdGhUaW1lb3V0PFRBcGk+KHtcbiAgICAgICAgb3BlcmF0aW9uRnVuY3Rpb246IGFzeW5jIChhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwpOiBQcm9taXNlPFRBcGk+ID0+IGF3YWl0IHRoaXMud2FpdEZvclZhbHVlKGFib3J0U2lnbmFsKSxcbiAgICAgICAgb3BlcmF0aW9uTmFtZTogYHdhdGNoUGx1Z2luQXBpKFwiJHt0aGlzLnBhcmFtcy5wbHVnaW5JZH1cIikud2hlbkF2YWlsYWJsZWAsXG4gICAgICAgIHRpbWVvdXRJbk1pbGxpc2Vjb25kczogb3B0aW9ucz8udGltZW91dEluTWlsbGlzZWNvbmRzID8/IERFRkFVTFRfV0hFTl9BVkFJTEFCTEVfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFNcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhyb3cgdGhpcy5jcmVhdGVVbmF2YWlsYWJsZUVycm9yKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3YWl0Rm9yVmFsdWUoYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsKTogUHJvbWlzZTxUQXBpPiB7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlPFRBcGk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIFRoZSBsaXN0ZW5lciBpcyByZWdpc3RlcmVkIEZJUlNUIGFuZCBpbnZva2VkIHRocm91Z2ggYSB0aHVuaywgc28gYGV2ZW50UmVmYCBpcyBhbHJlYWR5IGJvdW5kIGJ5IHRoZVxuICAgICAgLy8gdGltZSBhbnl0aGluZyBjYW4gcmVhY2ggaXQg4oCUIHdoaWNoIGlzIHdoYXQgbGV0cyBgY2xlYW5VcGAgYmUgdW5jb25kaXRpb25hbCByYXRoZXIgdGhhbiBudWxsLWd1YXJkZWQuXG4gICAgICBjb25zdCBldmVudFJlZiA9IHRoaXMub24oJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgaGFuZGxlQ2hhbmdlKCk7XG4gICAgICB9KTtcblxuICAgICAgZnVuY3Rpb24gY2xlYW5VcCgpOiB2b2lkIHtcbiAgICAgICAgZXZlbnRSZWYuYXN5bmNFdmVudFNvdXJjZS5vZmZyZWYoZXZlbnRSZWYpO1xuICAgICAgICBhYm9ydFNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGhhbmRsZUFib3J0KTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gaGFuZGxlQWJvcnQoKTogdm9pZCB7XG4gICAgICAgIGNsZWFuVXAoKTtcbiAgICAgICAgcmVqZWN0KGFib3J0U2lnbmFsLnJlYXNvbiBhcyBFcnJvcik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhbmRsZUNoYW5nZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjbGVhblVwKCk7XG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgfTtcblxuICAgICAgYWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBoYW5kbGVBYm9ydCk7XG4gICAgICBoYW5kbGVDaGFuZ2UoKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIGEgcGx1Z2luIEFQSSBjYW5ub3QgYmUgaGFuZGVkIG92ZXIsIGNhcnJ5aW5nIHRoZSB7QGxpbmsgUGx1Z2luQXBpVW5hdmFpbGFiaWxpdHlSZWFzb259IHRoYXQgc2F5c1xuICogd2h5LlxuICovXG5leHBvcnQgY2xhc3MgUGx1Z2luQXBpVW5hdmFpbGFibGVFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyoqXG4gICAqIFRoZSBgbWFuaWZlc3QuaWRgIG9mIHRoZSBwbHVnaW4gd2hvc2UgQVBJIHdhcyByZXF1ZXN0ZWQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogV2hpY2ggb2YgdGhlIGZpdmUgZmFpbHVyZXMgb2NjdXJyZWQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVhc29uOiBQbHVnaW5BcGlVbmF2YWlsYWJpbGl0eVJlYXNvbjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHtAbGluayBQbHVnaW5BcGlVbmF2YWlsYWJsZUVycm9yfS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZXJyb3IuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBQbHVnaW5BcGlVbmF2YWlsYWJsZUVycm9yQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcihwYXJhbXMubWVzc2FnZSA/PyBgVGhlIEFQSSBvZiB0aGUgcGx1Z2luIFwiJHtwYXJhbXMucGx1Z2luSWR9XCIgaXMgdW5hdmFpbGFibGU6ICR7cGFyYW1zLnJlYXNvbn0uYCk7XG4gICAgdGhpcy5uYW1lID0gJ1BsdWdpbkFwaVVuYXZhaWxhYmxlRXJyb3InO1xuICAgIHRoaXMucGx1Z2luSWQgPSBwYXJhbXMucGx1Z2luSWQ7XG4gICAgdGhpcy5yZWFzb24gPSBwYXJhbXMucmVhc29uO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSBwcm9wZXJ0eSBpcyByZWFkIGZyb20gYSBoYW5kbGUgd2hvc2UgcHJvdmlkZXIgaGFzIHNpbmNlIHVubG9hZGVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIHBvaW50IG9mIGhhbmRpbmcgb3V0IGEgcmV2b2NhYmxlIGhhbmRsZSByYXRoZXIgdGhhbiB0aGUgcmF3IG9iamVjdDogYSBjb25zdW1lciB0aGF0IGNhY2hlZCB0aGVcbiAqIEFQSSBpbiBhIGZpZWxkIGFuZCBrZXB0IHVzaW5nIGl0IGFjcm9zcyBhIGRpc2FibGUgZ2V0cyBhbiBlcnJvciBuYW1pbmcgdGhlIHByb3ZpZGVyLCBpbnN0ZWFkIG9mXG4gKiBgQ2Fubm90IHJlYWQgcHJvcGVydGllcyBvZiB1bmRlZmluZWRgIHNvbWV3aGVyZSBkZWVwIGluc2lkZSBhIHRvcm4tZG93biBwbHVnaW4uXG4gKi9cbmV4cG9ydCBjbGFzcyBQbHVnaW5BcGlSZXZva2VkRXJyb3IgZXh0ZW5kcyBQbHVnaW5BcGlVbmF2YWlsYWJsZUVycm9yIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB7QGxpbmsgUGx1Z2luQXBpUmV2b2tlZEVycm9yfS5cbiAgICpcbiAgICogQHBhcmFtIHBsdWdpbklkIC0gVGhlIGBtYW5pZmVzdC5pZGAgb2YgdGhlIHBsdWdpbiB3aG9zZSBBUEkgd2FzIHJldm9rZWQuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGx1Z2luSWQ6IHN0cmluZykge1xuICAgIHN1cGVyKHtcbiAgICAgIG1lc3NhZ2U6IGBUaGUgQVBJIG9mIHRoZSBwbHVnaW4gXCIke3BsdWdpbklkfVwiIGhhcyBiZWVuIHJldm9rZWQsIGJlY2F1c2UgdGhlIHBsdWdpbiB3YXMgdW5sb2FkZWQuYCxcbiAgICAgIHBsdWdpbklkLFxuICAgICAgcmVhc29uOiBQbHVnaW5BcGlVbmF2YWlsYWJpbGl0eVJlYXNvbi5SZXZva2VkXG4gICAgfSk7XG4gICAgdGhpcy5uYW1lID0gJ1BsdWdpbkFwaVJldm9rZWRFcnJvcic7XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd24gd2hlbiBhIHB1Ymxpc2hlZCBBUEkncyBwYXlsb2FkIGZhaWxzIHRoZSBzY2hlbWEgaXRzIGNvbnRyYWN0IGRlY2xhcmVzLlxuICpcbiAqIE9ubHkgZXZlciB0aHJvd24gd2hpbGUgdGhlIGBvYnNpZGlhbi1saWI6dmFsaWRhdGUtcGx1Z2luLWFwaS1wYXlsb2Fkc2AgZGVidWcgc3dpdGNoIGlzIG9uIChzZWVcbiAqIHtAbGluayBnZXRWYWxpZGF0ZVBsdWdpbkFwaVBheWxvYWRzRGVidWdTd2l0Y2h9KSDigJQgb3RoZXJ3aXNlIG5vIHBheWxvYWQgaXMgdmFsaWRhdGVkIGF0IGFsbC5cbiAqL1xuZXhwb3J0IGNsYXNzIFBsdWdpbkFwaVZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyoqXG4gICAqIFRoZSBpc3N1ZXMgdGhlIHNjaGVtYSByZXBvcnRlZC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpc3N1ZXM6IHJlYWRvbmx5IFN0YW5kYXJkU2NoZW1hVjEuSXNzdWVbXTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB3aG9zZSBwYXlsb2FkIGZhaWxlZCB2YWxpZGF0aW9uLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1ldGhvZE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGBtYW5pZmVzdC5pZGAgb2YgdGhlIHByb3ZpZGluZyBwbHVnaW4uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHtAbGluayBQbHVnaW5BcGlWYWxpZGF0aW9uRXJyb3J9LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlcnJvci5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFBsdWdpbkFwaVZhbGlkYXRpb25FcnJvckNvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoXG4gICAgICBgVGhlICR7cGFyYW1zLnBheWxvYWRLaW5kfSBvZiBcIiR7cGFyYW1zLnBsdWdpbklkfVwiIEFQSSBtZXRob2QgXCIke3BhcmFtcy5tZXRob2ROYW1lfVwiIGZhaWxlZCB2YWxpZGF0aW9uOiAke2Zvcm1hdElzc3VlcyhwYXJhbXMuaXNzdWVzKX1gXG4gICAgKTtcbiAgICB0aGlzLm5hbWUgPSAnUGx1Z2luQXBpVmFsaWRhdGlvbkVycm9yJztcbiAgICB0aGlzLmlzc3VlcyA9IHBhcmFtcy5pc3N1ZXM7XG4gICAgdGhpcy5tZXRob2ROYW1lID0gcGFyYW1zLm1ldGhvZE5hbWU7XG4gICAgdGhpcy5wbHVnaW5JZCA9IHBhcmFtcy5wbHVnaW5JZDtcbiAgfVxufVxuXG4vKipcbiAqIExvb2tzIGFub3RoZXIgcGx1Z2luJ3MgQVBJIHVwIE9OQ0UsIGFuZCBhbnN3ZXJzIGZvciB0aGlzIG1vbWVudCBvbmx5LlxuICpcbiAqIEl0IGFwcGxpZXMgdGhlIHNhbWUgc2VsZWN0aW9uIHJ1bGUgYXMge0BsaW5rIHdhdGNoUGx1Z2luQXBpfSBhbmQgaGFuZHMgb3V0IHRoZSBzYW1lIHJldm9jYWJsZSBoYW5kbGUsIGJ1dCBpdFxuICogc3Vic2NyaWJlcyB0byBub3RoaW5nLCBzbyBpdCBuZXZlciBsZWFybnMgdGhhdCB0aGUgYW5zd2VyIGNoYW5nZWQuIFRoYXQgbWFrZXMgaXQgdGhlIHJpZ2h0IHNoYXBlIGZvciBhIGZyZWVcbiAqIGZ1bmN0aW9uIHRoYXQgaGFzIG5vIGNvbXBvbmVudCB0byBvd24gYSB3YXRjaCBhbmQgcnVucyBvbiBhIHVzZXItZHJpdmVuIHBhdGgsIHN1Y2ggYXMgYSBiYWNrbGluayBsb29rdXAgbWFkZVxuICogd2hpbGUgYSByZW5hbWUgaXMgaGFuZGxlZC4gSXQgaXMgdGhlIHdyb25nIHNoYXBlIGZvciBgb25sb2FkYDogcGx1Z2lucyBsb2FkIGluIGFuIHVuc3BlY2lmaWVkIG9yZGVyLCBzbyBhXG4gKiBgbnVsbGAgdGhlcmUgbWVhbnMgXCJub3QgeWV0XCIgYXMgb2Z0ZW4gYXMgXCJub3QgaW5zdGFsbGVkXCIuIENvZGUgdGhhdCBoYXMgYSBjb21wb25lbnQgYW5kIHJlYWRzIHRoZSBBUEkgbW9yZVxuICogdGhhbiBvbmNlIHNob3VsZCBob2xkIGEge0BsaW5rIHdhdGNoUGx1Z2luQXBpfSByZWYgaW5zdGVhZC5cbiAqXG4gKiBAdHlwZVBhcmFtIFRBcGkgLSBUaGUgQVBJIHR5cGUgdGhlIGNvbnN1bWVyIGNvbXBpbGVkIGFnYWluc3QuXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBsb29rdXAuXG4gKiBAcmV0dXJucyBUaGUgQVBJLCBvciBgbnVsbGAgd2hlbiBubyBsaXZlIHJlY29yZCBzYXRpc2ZpZXMgdGhlIHJhbmdlIGFuZCB0aGUgY29udHJhY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUGx1Z2luQXBpPFRBcGkgZXh0ZW5kcyBvYmplY3Q+KHBhcmFtczogRmluZFBsdWdpbkFwaVBhcmFtczxOb0luZmVyPFRBcGk+Pik6IG51bGwgfCBUQXBpIHtcbiAgZ2V0VmFsaWRhdGVQbHVnaW5BcGlQYXlsb2Fkc0RlYnVnU3dpdGNoKCk7XG4gIGNvbnN0IHJlY29yZCA9IHNlbGVjdFJlY29yZChwYXJhbXMpO1xuICByZXR1cm4gcmVjb3JkID09PSBudWxsID8gbnVsbCA6IGNhc3RUbzxUQXBpPihjcmVhdGVSZXZvY2FibGVIYW5kbGUocmVjb3JkLCBwYXJhbXMuY29udHJhY3QpKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBkZWJ1ZyBzd2l0Y2ggdGhhdCBkZWNpZGVzIHdoZXRoZXIgYSBwbHVnaW4tQVBJIGNhbGwncyBwYXlsb2FkcyBhcmUgdmFsaWRhdGVkIGFnYWluc3QgdGhlIGNvbnRyYWN0LlxuICpcbiAqIEl0cyBpZCBpcyBgb2JzaWRpYW4tbGliOnZhbGlkYXRlLXBsdWdpbi1hcGktcGF5bG9hZHNgIGFuZCBpdCBpcyBvZmYgYnkgZGVmYXVsdC4gV2hpbGUgaXQgaXMgb24sIGV2ZXJ5IGNhbGxcbiAqIHRocm91Z2ggYSBoYW5kbGUgZnJvbSB7QGxpbmsgd2F0Y2hQbHVnaW5BcGl9IG9yIHtAbGluayBmaW5kUGx1Z2luQXBpfSBjaGVja3MgaXRzIGFyZ3VtZW50cyBhbmQgaXRzIHJldHVybiB2YWx1ZVxuICogYWdhaW5zdCB0aGUgbWV0aG9kJ3MgZGVjbGFyZWQgc2NoZW1hcyBhbmQgdGhyb3dzIGEge0BsaW5rIFBsdWdpbkFwaVZhbGlkYXRpb25FcnJvcn0gb24gYSBtaXNtYXRjaC4gVGhlXG4gKiBgb2JzaWRpYW4tZGV2LXV0aWxzOlBsdWdpbkFwaWAgZGVidWdnZXIgZG9lcyBub3QgYWZmZWN0IGl0OiB0aGF0IG9ubHkgbG9ncy5cbiAqXG4gKiBUaGUgc3dpdGNoIGlzIHJlZ2lzdGVyZWQgb24gZXZlcnkgcmVhZCwgd2hpY2ggaXMgaWRlbXBvdGVudCwgYW5kIHdoZW5ldmVyIGFuIEFQSSBpcyBwdWJsaXNoZWQsIHdhdGNoZWQgb3IgbG9va2VkXG4gKiB1cCwgc28gYSBkZWJ1Zy1zZXR0aW5ncyBVSSBsaXN0cyBpdCBhcyBzb29uIGFzIGFueSBwbHVnaW4gQVBJIGlzIGluIHBsYXkuXG4gKlxuICogQHJldHVybnMgVGhlIGRlYnVnIHN3aXRjaC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbGlkYXRlUGx1Z2luQXBpUGF5bG9hZHNEZWJ1Z1N3aXRjaCgpOiBEZWJ1Z1N3aXRjaCB7XG4gIHJldHVybiByZWdpc3RlckRlYnVnU3dpdGNoKFZBTElEQVRFX1BMVUdJTl9BUElfUEFZTE9BRFNfREVCVUdfU1dJVENIX0RFRklOSVRJT04pO1xufVxuXG4vKipcbiAqIFB1Ymxpc2hlcyBhIHBsdWdpbidzIEFQSSBzbyBvdGhlciBwbHVnaW5zIGNhbiBjb25zdW1lIGl0LCBrZXllZCBieSB0aGUgcGx1Z2luJ3MgYG1hbmlmZXN0LmlkYCBhbmQgcmV2b2tlZFxuICogYXV0b21hdGljYWxseSB3aGVuIHRoZSBwbHVnaW4gdW5sb2Fkcy5cbiAqXG4gKiBTZXZlcmFsIGNvbnRyYWN0IHZlcnNpb25zIG1heSBiZSBwdWJsaXNoZWQgc2lkZSBieSBzaWRlLCBzbyBhIHByb3ZpZGVyIGNhbiBtb3ZlIHRvIGAyLjAuMGAgd2l0aG91dCBicmVha2luZ1xuICogY29uc3VtZXJzIHN0aWxsIHBpbm5lZCB0byBgXjFgLlxuICpcbiAqIEB0eXBlUGFyYW0gVEFwaSAtIFRoZSBBUEkgdHlwZSBiZWluZyBwdWJsaXNoZWQuXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHB1Ymxpc2hpbmcuXG4gKiBAdGhyb3dzIEFuIHtAbGluayBFcnJvcn0gaWYgdGhpcyBwbHVnaW4gaGFzIGFscmVhZHkgcHVibGlzaGVkIHRoaXMgZXhhY3QgYGFwaVZlcnNpb25gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHVibGlzaFBsdWdpbkFwaTxUQXBpIGV4dGVuZHMgb2JqZWN0PihwYXJhbXM6IFB1Ymxpc2hQbHVnaW5BcGlQYXJhbXM8VEFwaT4pOiB2b2lkIHtcbiAgZ2V0VmFsaWRhdGVQbHVnaW5BcGlQYXlsb2Fkc0RlYnVnU3dpdGNoKCk7XG4gIGNvbnN0IHBsdWdpbklkID0gcGFyYW1zLnBsdWdpbi5tYW5pZmVzdC5pZDtcbiAgY29uc3QgcmVnaXN0cnkgPSBnZXRSZWdpc3RyeSgpO1xuICBjb25zdCByZWNvcmRzID0gcmVnaXN0cnkucmVjb3Jkc1twbHVnaW5JZF0gPz8gW107XG4gIHJlZ2lzdHJ5LnJlY29yZHNbcGx1Z2luSWRdID0gcmVjb3JkcztcblxuICBpZiAocmVjb3Jkcy5zb21lKChyZWNvcmQpID0+IHJlY29yZC5hcGlWZXJzaW9uID09PSBwYXJhbXMuYXBpVmVyc2lvbikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBwbHVnaW4gXCIke3BsdWdpbklkfVwiIGhhcyBhbHJlYWR5IHB1Ymxpc2hlZCB0aGUgQVBJIHZlcnNpb24gXCIke3BhcmFtcy5hcGlWZXJzaW9ufVwiLmApO1xuICB9XG5cbiAgY29uc3QgcmVjb3JkOiBQdWJsaXNoZWRQbHVnaW5BcGlSZWNvcmQgPSB7XG4gICAgYXBpOiBwYXJhbXMuYXBpLFxuICAgIGFwaVZlcnNpb246IHBhcmFtcy5hcGlWZXJzaW9uLFxuICAgIGNvbnRyYWN0OiBwYXJhbXMuY29udHJhY3QgPz8ge30sXG4gICAgaXNSZXZva2VkOiBmYWxzZSxcbiAgICBwbHVnaW5JZFxuICB9O1xuICByZWNvcmRzLnB1c2gocmVjb3JkKTtcbiAgbm90aWZ5U3Vic2NyaWJlcnMoKTtcblxuICAocGFyYW1zLmNvbXBvbmVudCA/PyBwYXJhbXMucGx1Z2luKS5yZWdpc3RlcigoKSA9PiB7XG4gICAgcmV2b2tlUmVjb3JkKHJlY29yZCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFdhdGNoZXMgYW5vdGhlciBwbHVnaW4ncyBBUEkgYW5kIHJldHVybnMgYSBsaXZlIHtAbGluayBQbHVnaW5BcGlSZWZ9IHdob3NlIHtAbGluayBQbHVnaW5BcGlSZWYudmFsdWV9IHN0YXlzXG4gKiBjb3JyZWN0IGFjcm9zcyB0aGUgcHJvdmlkZXIncyBsb2FkLCB1bmxvYWQsIGFuZCByZS1lbmFibGUuXG4gKlxuICogVGhpcyBpcyB0aGUgY29uc3VtZXIgc3VyZmFjZSBmb3IgYW55dGhpbmcgdGhhdCBoYXMgYSBjb21wb25lbnQuIEl0cyBvbmUtc2hvdCBzaWJsaW5nIHtAbGluayBmaW5kUGx1Z2luQXBpfVxuICogb25seSBhbnN3ZXJzIFwibm93XCIgYW5kIG5ldmVyIHRlbGxzIHlvdSB3aGVuIFwibm93XCIgY2hhbmdlZCwgc28gY2FsbGluZyBpdCBkdXJpbmcgYG9ubG9hZGAgcmVhZHMgYG51bGxgIGFuZFxuICogaW52aXRlcyB0aGUgY29uY2x1c2lvbiBcIm5vdCBpbnN0YWxsZWRcIi4gQSBjb25zdW1lciB0aGF0IG5lZWRzIGEgc3luY2hyb25vdXMgYW5zd2VyIGluc2lkZSBhIGNhbGxiYWNrIHdob3NlXG4gKiBzaWduYXR1cmUgZm9yYmlkcyBgYXdhaXRgIOKAlCBgY2hlY2tDYWxsYmFjayhpc0NoZWNraW5nKTogYm9vbGVhbmAsIGBjYW5FeGVjdXRlKClgLCBhIHNldHRpbmdzLXJvdyBgdmlzaWJsZWBcbiAqIHByZWRpY2F0ZSDigJQgaG9sZHMgdGhlIHJlZiAob3IgdGhlIHZhbHVlIGl0IG1haW50YWlucykgaW4gYSBmaWVsZCBhbmQgcmVhZHMgdGhhdCwgd2hpY2ggaXMgYm90aCBjaGVhcGVyIGFuZFxuICogY29ycmVjdCBhY3Jvc3MgQk9USCBlZGdlcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFRBcGkgLSBUaGUgQVBJIHR5cGUgdGhlIGNvbnN1bWVyIGNvbXBpbGVkIGFnYWluc3QuXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSB3YXRjaC5cbiAqIEByZXR1cm5zIFRoZSBsaXZlIHJlZmVyZW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhdGNoUGx1Z2luQXBpPFRBcGkgZXh0ZW5kcyBvYmplY3Q+KHBhcmFtczogV2F0Y2hQbHVnaW5BcGlQYXJhbXM8Tm9JbmZlcjxUQXBpPj4pOiBQbHVnaW5BcGlSZWY8VEFwaT4ge1xuICBnZXRWYWxpZGF0ZVBsdWdpbkFwaVBheWxvYWRzRGVidWdTd2l0Y2goKTtcbiAgY29uc3QgcmVmID0gbmV3IFBsdWdpbkFwaVJlZkltcGw8VEFwaT4ocGFyYW1zKTtcbiAgY29uc3QgdW5zdWJzY3JpYmUgPSBzdWJzY3JpYmUoKCkgPT4ge1xuICAgIHJlZi5yZWZyZXNoKCk7XG4gIH0pO1xuICBwYXJhbXMuY29tcG9uZW50LnJlZ2lzdGVyKHVuc3Vic2NyaWJlKTtcbiAgcmVmLnJlZnJlc2goKTtcbiAgcmV0dXJuIHJlZjtcbn1cblxuLyoqXG4gKiBTdHJ1Y3R1cmFsbHkgZGV0ZWN0cyBhIHRoZW5hYmxlLiBBIGNyb3NzLWNvcHkgdmFsdWUgbWF5IGNvbWUgZnJvbSBhbm90aGVyIHJlYWxtLCBzbyBgaW5zdGFuY2VvZiBQcm9taXNlYCBpc1xuICogbm90IHVzYWJsZSBoZXJlIOKAlCB0aGUgc2FtZSBkaXNjaXBsaW5lIHRoZSByZWdpc3RyeSByZWNvcmRzIGZvbGxvdy5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdmFsdWUgdGhlIHRoZW5hYmxlIHJlc29sdmVzIHRvLlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHRlc3QuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgd2hlbiB0aGUgdmFsdWUgaXMgdGhlbmFibGUuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrSXNQcm9taXNlTGlrZTxUPih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFByb21pc2VMaWtlPFQ+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAmJiB2YWx1ZSAhPT0gbnVsbFxuICAgICYmICd0aGVuJyBpbiB2YWx1ZVxuICAgICYmIHR5cGVvZiAodmFsdWUgYXMgUHJvbWlzZUxpa2U8VD4pLnRoZW4gPT09ICdmdW5jdGlvbic7XG59XG5cbi8qKlxuICogQ2hlY2tzIHRoYXQgZXZlcnkgbWV0aG9kIHRoZSBlZmZlY3RpdmUgY29udHJhY3QgZGVjbGFyZXMgaXMgYWN0dWFsbHkgcHJlc2VudCBvbiB0aGUgcHVibGlzaGVkIEFQSS5cbiAqXG4gKiBAcGFyYW0gcmVjb3JkIC0gVGhlIHB1Ymxpc2hlZCByZWNvcmQuXG4gKiBAcGFyYW0gY29uc3VtZXJDb250cmFjdCAtIFRoZSBjb25zdW1lcidzIG93biBjb250cmFjdCwgd2hpY2ggd2lucyB3aGVuIHN1cHBsaWVkLlxuICogQHJldHVybnMgYHRydWVgIHdoZW4gdGhlIHNoYXBlIG1hdGNoZXMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrTWF0Y2hlc0NvbnRyYWN0U2hhcGUocmVjb3JkOiBQdWJsaXNoZWRQbHVnaW5BcGlSZWNvcmQsIGNvbnN1bWVyQ29udHJhY3Q/OiBBcGlDb250cmFjdCk6IGJvb2xlYW4ge1xuICBjb25zdCBjb250cmFjdCA9IGNvbnN1bWVyQ29udHJhY3QgPz8gcmVjb3JkLmNvbnRyYWN0O1xuICByZXR1cm4gT2JqZWN0LmtleXMoY29udHJhY3QpLmV2ZXJ5KChtZXRob2ROYW1lKSA9PiB0eXBlb2YgZ2V0TWVtYmVyKHJlY29yZC5hcGksIG1ldGhvZE5hbWUpID09PSAnZnVuY3Rpb24nKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGZ1bmN0aW9uIGEgY29uc3VtZXIgYWN0dWFsbHkgY2FsbHM6IGl0IGFsd2F5cyBpbnZva2VzIHRoZSBvcmlnaW5hbCB3aXRoIHRoZSByYXcgQVBJIG9iamVjdCBhc1xuICogYHRoaXNgLCBhbmQg4oCUIG9ubHkgd2hpbGUgdGhlIGBvYnNpZGlhbi1saWI6dmFsaWRhdGUtcGx1Z2luLWFwaS1wYXlsb2Fkc2AgZGVidWcgc3dpdGNoIGlzIG9uIOKAlCB2YWxpZGF0ZXMgdGhlXG4gKiBkZWNsYXJlZCBwYXlsb2FkcyBhcm91bmQgaXQuXG4gKlxuICogVGhlIHN3aXRjaCBpcyBjb25zdWx0ZWQgcGVyIGNhbGwgcmF0aGVyIHRoYW4gcGVyIHdyYXAsIHNvIHRvZ2dsaW5nIGl0IGF0IHJ1bnRpbWUgdGFrZXMgZWZmZWN0IHdpdGhvdXRcbiAqIHJlLWFjcXVpcmluZyB0aGUgaGFuZGxlLCB3aGlsZSB0aGUgd3JhcHBlcidzIGlkZW50aXR5IHN0YXlzIHN0YWJsZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSB3cmFwcGVyLlxuICogQHJldHVybnMgVGhlIHdyYXBwZXIgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU1ldGhvZFdyYXBwZXIocGFyYW1zOiBDcmVhdGVNZXRob2RXcmFwcGVyUGFyYW1zKTogKC4uLiRhcmd1bWVudHM6IHVua25vd25bXSkgPT4gdW5rbm93biB7XG4gIHJldHVybiBmdW5jdGlvbiBwbHVnaW5BcGlNZXRob2QoLi4uJGFyZ3VtZW50czogdW5rbm93bltdKTogdW5rbm93biB7XG4gICAgLy8gUmVhZCBieSB0aGUgT1JJR0lOQUwga2V5LCBub3QgYnkgdGhlIGRpc3BsYXkgbmFtZTogYFN0cmluZyhzeW1ib2wpYCBpcyBgJ1N5bWJvbCh4KSdgLCB3aGljaCBpcyBub3QgYVxuICAgIC8vIGtleSB0aGUgQVBJIG9iamVjdCBoYXMuXG4gICAgY29uc3QgbWV0aG9kID0gY2FzdFRvPCguLi4kaW5uZXJBcmd1bWVudHM6IHVua25vd25bXSkgPT4gdW5rbm93bj4oZ2V0TWVtYmVyKHBhcmFtcy50YXJnZXQsIHBhcmFtcy5wcm9wZXJ0eUtleSkpO1xuICAgIGNvbnN0IG1ldGhvZENvbnRyYWN0ID0gcGFyYW1zLm1ldGhvZENvbnRyYWN0O1xuXG4gICAgaWYgKG1ldGhvZENvbnRyYWN0ID09PSB1bmRlZmluZWQgfHwgIWdldFZhbGlkYXRlUGx1Z2luQXBpUGF5bG9hZHNEZWJ1Z1N3aXRjaCgpLmlzRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm4gbWV0aG9kLmFwcGx5KHBhcmFtcy50YXJnZXQsICRhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGlmIChtZXRob2RDb250cmFjdC5pbnB1dCkge1xuICAgICAgdmFsaWRhdGVQYXlsb2FkKHtcbiAgICAgICAgbWV0aG9kTmFtZTogcGFyYW1zLm1ldGhvZE5hbWUsXG4gICAgICAgIHBheWxvYWRLaW5kOiBQbHVnaW5BcGlQYXlsb2FkS2luZC5JbnB1dCxcbiAgICAgICAgcGx1Z2luSWQ6IHBhcmFtcy5wbHVnaW5JZCxcbiAgICAgICAgc2NoZW1hOiBtZXRob2RDb250cmFjdC5pbnB1dCxcbiAgICAgICAgdmFsdWU6ICRhcmd1bWVudHNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJldHVyblZhbHVlID0gbWV0aG9kLmFwcGx5KHBhcmFtcy50YXJnZXQsICRhcmd1bWVudHMpO1xuICAgIGNvbnN0IG91dHB1dFNjaGVtYSA9IG1ldGhvZENvbnRyYWN0Lm91dHB1dDtcbiAgICBpZiAoIW91dHB1dFNjaGVtYSkge1xuICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICAgIH1cblxuICAgIGlmIChjaGVja0lzUHJvbWlzZUxpa2UocmV0dXJuVmFsdWUpKSB7XG4gICAgICByZXR1cm4gcmV0dXJuVmFsdWUudGhlbigocmVzb2x2ZWRWYWx1ZTogdW5rbm93bikgPT4ge1xuICAgICAgICB2YWxpZGF0ZVBheWxvYWQoe1xuICAgICAgICAgIG1ldGhvZE5hbWU6IHBhcmFtcy5tZXRob2ROYW1lLFxuICAgICAgICAgIHBheWxvYWRLaW5kOiBQbHVnaW5BcGlQYXlsb2FkS2luZC5PdXRwdXQsXG4gICAgICAgICAgcGx1Z2luSWQ6IHBhcmFtcy5wbHVnaW5JZCxcbiAgICAgICAgICBzY2hlbWE6IG91dHB1dFNjaGVtYSxcbiAgICAgICAgICB2YWx1ZTogcmVzb2x2ZWRWYWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVkVmFsdWU7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZVBheWxvYWQoe1xuICAgICAgbWV0aG9kTmFtZTogcGFyYW1zLm1ldGhvZE5hbWUsXG4gICAgICBwYXlsb2FkS2luZDogUGx1Z2luQXBpUGF5bG9hZEtpbmQuT3V0cHV0LFxuICAgICAgcGx1Z2luSWQ6IHBhcmFtcy5wbHVnaW5JZCxcbiAgICAgIHNjaGVtYTogb3V0cHV0U2NoZW1hLFxuICAgICAgdmFsdWU6IHJldHVyblZhbHVlXG4gICAgfSk7XG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9O1xufVxuXG4vKipcbiAqIFdyYXBzIGEgcHVibGlzaGVkIEFQSSBpbiBhIHJldm9jYWJsZSBoYW5kbGUuXG4gKlxuICogQSBmbGFnLWNoZWNraW5nIGBnZXRgIHRyYXAgaXMgdXNlZCByYXRoZXIgdGhhbiBgUHJveHkucmV2b2NhYmxlYCwgYmVjYXVzZSB0aGUgbGF0dGVyIHRocm93cyBhIGJhcmVcbiAqIGBUeXBlRXJyb3JgIHdob3NlIG1lc3NhZ2Ugd2UgY2Fubm90IHBocmFzZSDigJQgYW5kIHRoZSB3aG9sZSB2YWx1ZSBvZiByZXZva2luZyBpcyB0aGF0IHRoZSBlcnJvciBuYW1lcyB0aGVcbiAqIHByb3ZpZGVyLlxuICpcbiAqIE1ldGhvZHMgYXJlIGJvdW5kIHRvIHRoZSBSQVcgYXBpIG9iamVjdCByYXRoZXIgdGhhbiB0byB0aGUgcHJveHk6IGFuIGltcGxlbWVudGF0aW9uIHVzaW5nIHByaXZhdGUgY2xhc3NcbiAqIGZpZWxkcyAoYCNmaWVsZGApIHRocm93cyBpZiBpdHMgYHRoaXNgIGlzIGEgcHJveHkuXG4gKlxuICogQHBhcmFtIHJlY29yZCAtIFRoZSBwdWJsaXNoZWQgcmVjb3JkLlxuICogQHBhcmFtIGNvbnN1bWVyQ29udHJhY3QgLSBUaGUgY29uc3VtZXIncyBvd24gY29udHJhY3QsIHdoaWNoIHdpbnMgb3ZlciB0aGUgcHVibGlzaGVkIG9uZSB3aGVuIHN1cHBsaWVkLlxuICogQHJldHVybnMgVGhlIGhhbmRsZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUmV2b2NhYmxlSGFuZGxlKHJlY29yZDogUHVibGlzaGVkUGx1Z2luQXBpUmVjb3JkLCBjb25zdW1lckNvbnRyYWN0PzogQXBpQ29udHJhY3QpOiBvYmplY3Qge1xuICBjb25zdCBjb250cmFjdCA9IGNvbnN1bWVyQ29udHJhY3QgPz8gcmVjb3JkLmNvbnRyYWN0O1xuICBjb25zdCBtZXRob2RDYWNoZSA9IG5ldyBNYXA8UHJvcGVydHlLZXk+KCk7XG5cbiAgcmV0dXJuIG5ldyBQcm94eShyZWNvcmQuYXBpLCB7XG4gICAgZ2V0KHRhcmdldDogb2JqZWN0LCBwcm9wZXJ0eUtleTogUHJvcGVydHlLZXkpOiB1bmtub3duIHtcbiAgICAgIGlmIChyZWNvcmQuaXNSZXZva2VkKSB7XG4gICAgICAgIHRocm93IG5ldyBQbHVnaW5BcGlSZXZva2VkRXJyb3IocmVjb3JkLnBsdWdpbklkKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsdWUgPSBnZXRNZW1iZXIodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgbGV0IG1ldGhvZCA9IG1ldGhvZENhY2hlLmdldChwcm9wZXJ0eUtleSk7XG4gICAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbWV0aG9kID0gY3JlYXRlTWV0aG9kV3JhcHBlcih7XG4gICAgICAgICAgbWV0aG9kQ29udHJhY3Q6IHR5cGVvZiBwcm9wZXJ0eUtleSA9PT0gJ3N0cmluZycgPyBjb250cmFjdFtwcm9wZXJ0eUtleV0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgbWV0aG9kTmFtZTogU3RyaW5nKHByb3BlcnR5S2V5KSxcbiAgICAgICAgICBwbHVnaW5JZDogcmVjb3JkLnBsdWdpbklkLFxuICAgICAgICAgIHByb3BlcnR5S2V5LFxuICAgICAgICAgIHRhcmdldFxuICAgICAgICB9KTtcbiAgICAgICAgbWV0aG9kQ2FjaGUuc2V0KHByb3BlcnR5S2V5LCBtZXRob2QpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1ldGhvZDtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgc2NoZW1hIGlzc3VlcyBpbnRvIGEgc2luZ2xlIHJlYWRhYmxlIGxpbmUuXG4gKlxuICogQHBhcmFtIGlzc3VlcyAtIFRoZSBpc3N1ZXMgdG8gcmVuZGVyLlxuICogQHJldHVybnMgVGhlIHJlbmRlcmVkIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdElzc3Vlcyhpc3N1ZXM6IHJlYWRvbmx5IFN0YW5kYXJkU2NoZW1hVjEuSXNzdWVbXSk6IHN0cmluZyB7XG4gIHJldHVybiBpc3N1ZXNcbiAgICAubWFwKChpc3N1ZSkgPT4ge1xuICAgICAgY29uc3QgcGF0aCA9IGlzc3VlLnBhdGg/Lm1hcCgoc2VnbWVudCkgPT4gU3RyaW5nKHR5cGVvZiBzZWdtZW50ID09PSAnb2JqZWN0JyA/IHNlZ21lbnQua2V5IDogc2VnbWVudCkpLmpvaW4oJy4nKTtcbiAgICAgIHJldHVybiBwYXRoID8gYCR7cGF0aH06ICR7aXNzdWUubWVzc2FnZX1gIDogaXNzdWUubWVzc2FnZTtcbiAgICB9KVxuICAgIC5qb2luKCc7ICcpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHJlY29yZHMgYSBwbHVnaW4gY3VycmVudGx5IGhhcyBwdWJsaXNoZWQsIGV4Y2x1ZGluZyBhbnkgdGhhdCBoYXZlIGJlZW4gcmV2b2tlZC5cbiAqXG4gKiBAcGFyYW0gcGx1Z2luSWQgLSBUaGUgYG1hbmlmZXN0LmlkYCBvZiB0aGUgcHJvdmlkaW5nIHBsdWdpbi5cbiAqIEByZXR1cm5zIFRoZSBsaXZlIHJlY29yZHMuXG4gKi9cbmZ1bmN0aW9uIGdldExpdmVSZWNvcmRzKHBsdWdpbklkOiBzdHJpbmcpOiBQdWJsaXNoZWRQbHVnaW5BcGlSZWNvcmRbXSB7XG4gIHJldHVybiAoZ2V0UmVnaXN0cnkoKS5yZWNvcmRzW3BsdWdpbklkXSA/PyBbXSkuZmlsdGVyKChyZWNvcmQpID0+ICFyZWNvcmQuaXNSZXZva2VkKTtcbn1cblxuLyoqXG4gKiBSZWFkcyBhIG1lbWJlciBvZmYgYSBwdWJsaXNoZWQgQVBJIG9iamVjdCB3aXRob3V0IG5hcnJvd2luZyBpdCDigJQgdGhlIEFQSSBjcm9zc2VzIGEgbGlicmFyeS12ZXJzaW9uIGJvdW5kYXJ5LFxuICogc28gbm90aGluZyBhYm91dCBpdHMgc2hhcGUgbWF5IGJlIGFzc3VtZWQuXG4gKlxuICogQHBhcmFtIGFwaSAtIFRoZSBwdWJsaXNoZWQgQVBJIG9iamVjdC5cbiAqIEBwYXJhbSBtZXRob2ROYW1lIC0gVGhlIG1lbWJlciB0byByZWFkLlxuICogQHJldHVybnMgVGhlIG1lbWJlcidzIHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRNZW1iZXIoYXBpOiBvYmplY3QsIG1ldGhvZE5hbWU6IFByb3BlcnR5S2V5KTogdW5rbm93biB7XG4gIHJldHVybiBSZWZsZWN0LmdldChhcGksIG1ldGhvZE5hbWUpO1xufVxuXG4vKipcbiAqIFRoZSBkZWJ1Z2dlciB0aGF0IGxvZ3MgYW4gYXN5bmNocm9ub3VzIHBheWxvYWQgdmFsaWRhdGlvbiBmYWlsdXJlLlxuICpcbiAqIEByZXR1cm5zIFRoZSBkZWJ1Z2dlci5cbiAqL1xuZnVuY3Rpb24gZ2V0UGx1Z2luQXBpRGVidWdnZXIoKTogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0T2JzaWRpYW5MaWJEZWJ1Z2dlcj4ge1xuICByZXR1cm4gZ2V0T2JzaWRpYW5MaWJEZWJ1Z2dlcihQTFVHSU5fQVBJX0RFQlVHR0VSX05BTUVTUEFDRSk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBzaGFyZWQgcmVnaXN0cnksIHRvbGVyYXRpbmcgYSBiYWcgd3JpdHRlbiBieSBhIERJRkZFUkVOVCBjb3B5IG9mIHRoaXMgbGlicmFyeSwgb3Igb2YgYG9ic2lkaWFuLWRldi11dGlsc2AsIHRoYXQgbWF5XG4gKiBwcmVkYXRlIG9uZSBvZiBpdHMgZmllbGRzLlxuICpcbiAqIEByZXR1cm5zIFRoZSByZWdpc3RyeS5cbiAqL1xuZnVuY3Rpb24gZ2V0UmVnaXN0cnkoKTogUGx1Z2luQXBpUmVnaXN0cnkge1xuICBjb25zdCB3cmFwcGVyID0gZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlPFBhcnRpYWw8UGx1Z2luQXBpUmVnaXN0cnk+PihQTFVHSU5fQVBJX1JFR0lTVFJZX1NUQVRFX0tFWSwge30pO1xuICBjb25zdCByZWdpc3RyeSA9IHdyYXBwZXIudmFsdWU7XG4gIHJlZ2lzdHJ5LnJlY29yZHMgPz89IHt9O1xuICByZWdpc3RyeS5zdWJzY3JpYmVycyA/Pz0gW107XG4gIHJldHVybiBjYXN0VG88UGx1Z2luQXBpUmVnaXN0cnk+KHJlZ2lzdHJ5KTtcbn1cblxuLyoqXG4gKiBOb3RpZmllcyBldmVyeSBzdWJzY3JpYmVyLCBvdmVyIGEgU05BUFNIT1Qgb2YgdGhlIGxpc3Qg4oCUIGEgY2FsbGJhY2sgaXMgZnJlZSB0byB1bnN1YnNjcmliZSAob3Igc3Vic2NyaWJlKVxuICogd2hpbGUgdGhlIHN3ZWVwIGlzIHJ1bm5pbmcuXG4gKi9cbmZ1bmN0aW9uIG5vdGlmeVN1YnNjcmliZXJzKCk6IHZvaWQge1xuICBmb3IgKGNvbnN0IHN1YnNjcmliZXIgb2Ygc25hcHNob3QoZ2V0UmVnaXN0cnkoKS5zdWJzY3JpYmVycykpIHtcbiAgICBzdWJzY3JpYmVyKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoaWNoIG9mIHRoZSBmaXZlIGZhaWx1cmVzIGFwcGxpZXMsIHByb2JpbmcgdGhlIGNhdXNlcyBmcm9tIHRoZSBvdXRlcm1vc3QgaW53YXJkcyBzbyB0aGUgbW9zdFxuICogYWN0aW9uYWJsZSBvbmUgd2lucy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHdhdGNoIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgcmVhc29uLlxuICovXG5mdW5jdGlvbiByZXNvbHZlVW5hdmFpbGFiaWxpdHlSZWFzb24ocGFyYW1zOiBXYXRjaFBsdWdpbkFwaVBhcmFtcyk6IFBsdWdpbkFwaVVuYXZhaWxhYmlsaXR5UmVhc29uIHtcbiAgaWYgKCFPYmplY3QuaGFzT3duKHBhcmFtcy5hcHAucGx1Z2lucy5tYW5pZmVzdHMsIHBhcmFtcy5wbHVnaW5JZCkpIHtcbiAgICByZXR1cm4gUGx1Z2luQXBpVW5hdmFpbGFiaWxpdHlSZWFzb24uTm90SW5zdGFsbGVkO1xuICB9XG5cbiAgaWYgKCFwYXJhbXMuYXBwLnBsdWdpbnMuZW5hYmxlZFBsdWdpbnMuaGFzKHBhcmFtcy5wbHVnaW5JZCkpIHtcbiAgICByZXR1cm4gUGx1Z2luQXBpVW5hdmFpbGFiaWxpdHlSZWFzb24uTm90RW5hYmxlZDtcbiAgfVxuXG4gIGNvbnN0IHJlY29yZHMgPSBnZXRMaXZlUmVjb3JkcyhwYXJhbXMucGx1Z2luSWQpO1xuICBpZiAocmVjb3Jkcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUGx1Z2luQXBpVW5hdmFpbGFiaWxpdHlSZWFzb24uTm90UHVibGlzaGVkO1xuICB9XG5cbiAgcmV0dXJuIHJlY29yZHMuZXZlcnkoKHJlY29yZCkgPT4gIXNhdGlzZmllc1ZlcnNpb24ocmVjb3JkLmFwaVZlcnNpb24sIHBhcmFtcy5hcGlWZXJzaW9uUmFuZ2UpKSA/IFBsdWdpbkFwaVVuYXZhaWxhYmlsaXR5UmVhc29uLlZlcnNpb25NaXNtYXRjaCA6IFBsdWdpbkFwaVVuYXZhaWxhYmlsaXR5UmVhc29uLlNoYXBlTWlzbWF0Y2g7XG59XG5cbi8qKlxuICogTWFya3MgYSByZWNvcmQgcmV2b2tlZCBhbmQgZHJvcHMgaXQgZnJvbSB0aGUgcmVnaXN0cnksIHRoZW4gdGVsbHMgZXZlcnkgd2F0Y2hlciB0byByZWNvbXB1dGUuXG4gKlxuICogVGhlIHJlY29yZCBvYmplY3QgaXRzZWxmIGlzIGRlbGliZXJhdGVseSBrZXB0IGFsaXZlIGFuZCBmbGFnZ2VkIHJhdGhlciB0aGFuIGRpc2NhcmRlZCwgYmVjYXVzZSBoYW5kbGVzXG4gKiBhbHJlYWR5IGhhbmRlZCBvdXQgY2xvc2Ugb3ZlciBpdCDigJQgdGhhdCBmbGFnIGlzIHdoYXQgdHVybnMgYSBsYXRlciBwcm9wZXJ0eSByZWFkIGludG8gYVxuICoge0BsaW5rIFBsdWdpbkFwaVJldm9rZWRFcnJvcn0uXG4gKlxuICogQHBhcmFtIHJlY29yZCAtIFRoZSByZWNvcmQgdG8gcmV2b2tlLlxuICovXG5mdW5jdGlvbiByZXZva2VSZWNvcmQocmVjb3JkOiBQdWJsaXNoZWRQbHVnaW5BcGlSZWNvcmQpOiB2b2lkIHtcbiAgcmVjb3JkLmlzUmV2b2tlZCA9IHRydWU7XG4gIGNvbnN0IHJlZ2lzdHJ5ID0gZ2V0UmVnaXN0cnkoKTtcbiAgY29uc3QgcmVjb3JkcyA9IHJlZ2lzdHJ5LnJlY29yZHNbcmVjb3JkLnBsdWdpbklkXTtcbiAgaWYgKHJlY29yZHMpIHtcbiAgICByZWdpc3RyeS5yZWNvcmRzW3JlY29yZC5wbHVnaW5JZF0gPSByZWNvcmRzLmZpbHRlcigoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUgIT09IHJlY29yZCk7XG4gIH1cbiAgbm90aWZ5U3Vic2NyaWJlcnMoKTtcbn1cblxuLyoqXG4gKiBQaWNrcyB0aGUgaGlnaGVzdCBwdWJsaXNoZWQgcmVjb3JkIHRoYXQgaXMgbGl2ZSwgc2F0aXNmaWVzIHRoZSByZXF1ZXN0ZWQgdmVyc2lvbiByYW5nZSwgYW5kIG1hdGNoZXMgdGhlXG4gKiBlZmZlY3RpdmUgY29udHJhY3QncyBzaGFwZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGxvb2t1cCBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgVGhlIHdpbm5pbmcgcmVjb3JkLCBvciBgbnVsbGAgd2hlbiBub25lIHF1YWxpZmllcy5cbiAqL1xuZnVuY3Rpb24gc2VsZWN0UmVjb3JkKHBhcmFtczogRmluZFBsdWdpbkFwaVBhcmFtcyk6IG51bGwgfCBQdWJsaXNoZWRQbHVnaW5BcGlSZWNvcmQge1xuICBjb25zdCBjYW5kaWRhdGVzID0gZ2V0TGl2ZVJlY29yZHMocGFyYW1zLnBsdWdpbklkKVxuICAgIC5maWx0ZXIoKHJlY29yZCkgPT4gc2F0aXNmaWVzVmVyc2lvbihyZWNvcmQuYXBpVmVyc2lvbiwgcGFyYW1zLmFwaVZlcnNpb25SYW5nZSkpXG4gICAgLmZpbHRlcigocmVjb3JkKSA9PiBjaGVja01hdGNoZXNDb250cmFjdFNoYXBlKHJlY29yZCwgcGFyYW1zLmNvbnRyYWN0KSlcbiAgICAuc29ydCgoYSwgYikgPT4gY29tcGFyZVZlcnNpb25zKGIuYXBpVmVyc2lvbiwgYS5hcGlWZXJzaW9uKSk7XG5cbiAgcmV0dXJuIGNhbmRpZGF0ZXNbMF0gPz8gbnVsbDtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBjYWxsYmFjayBmaXJlZCB3aGVuZXZlciB0aGUgcmVnaXN0cnkgY2hhbmdlcy5cbiAqXG4gKiBAcGFyYW0gc3Vic2NyaWJlciAtIFRoZSBjYWxsYmFjay5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCB1bnJlZ2lzdGVycyB0aGUgY2FsbGJhY2suXG4gKi9cbmZ1bmN0aW9uIHN1YnNjcmliZShzdWJzY3JpYmVyOiAoKSA9PiB2b2lkKTogKCkgPT4gdm9pZCB7XG4gIGNvbnN0IHJlZ2lzdHJ5ID0gZ2V0UmVnaXN0cnkoKTtcbiAgcmVnaXN0cnkuc3Vic2NyaWJlcnMucHVzaChzdWJzY3JpYmVyKTtcbiAgcmV0dXJuICgpOiB2b2lkID0+IHtcbiAgICBjb25zdCBpbmRleCA9IHJlZ2lzdHJ5LnN1YnNjcmliZXJzLmluZGV4T2Yoc3Vic2NyaWJlcik7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgcmVnaXN0cnkuc3Vic2NyaWJlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUnVucyBvbmUgU3RhbmRhcmQgU2NoZW1hIG92ZXIgb25lIHBheWxvYWQuXG4gKlxuICogQSBzY2hlbWEgdGhhdCBhbnN3ZXJzIFNZTkNIUk9OT1VTTFkgdGhyb3dzIGF0IHRoZSBjYWxsIHNpdGUsIHdoaWNoIGlzIHRoZSB3aG9sZSBwb2ludCDigJQgYSB2ZXJzaW9uIHNrZXcgcmVhZHNcbiAqIGFzIGEgbGVnaWJsZSBlcnJvciB3aGVyZSB0aGUgY2FsbCB3YXMgbWFkZS4gQSBzY2hlbWEgdGhhdCBhbnN3ZXJzIHdpdGggYSB7QGxpbmsgUHJvbWlzZX0gY2Fubm90IGRvIHRoYXQ6IHRoZVxuICogc3luY2hyb25vdXMgY2FsbCBpdCB3YXMgZ3VhcmRpbmcgaGFzIGFscmVhZHkgcmV0dXJuZWQgYnkgdGhlIHRpbWUgdGhlIGFuc3dlciBhcnJpdmVzLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvXG4gKiB0aHJvdyBpbnRvIGFuZCB0aGUgZmFpbHVyZSBpcyByZXBvcnRlZCB0aHJvdWdoIHRoZSBsaWJyYXJ5IGRlYnVnZ2VyIGluc3RlYWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgdmFsaWRhdGlvbi5cbiAqIEB0aHJvd3MgQSB7QGxpbmsgUGx1Z2luQXBpVmFsaWRhdGlvbkVycm9yfSBpZiBhIHN5bmNocm9ub3VzIHNjaGVtYSByZXBvcnRzIGlzc3Vlcy5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVQYXlsb2FkKHBhcmFtczogVmFsaWRhdGVQYXlsb2FkUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHJlc3VsdCA9IHBhcmFtcy5zY2hlbWFbJ35zdGFuZGFyZCddLnZhbGlkYXRlKHBhcmFtcy52YWx1ZSk7XG5cbiAgaWYgKGNoZWNrSXNQcm9taXNlTGlrZTxTdGFuZGFyZFNjaGVtYVYxLlJlc3VsdDx1bmtub3duPj4ocmVzdWx0KSkge1xuICAgIGludm9rZUFzeW5jU2FmZWx5KGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGFzeW5jUmVzdWx0ID0gYXdhaXQgcmVzdWx0O1xuICAgICAgaWYgKGFzeW5jUmVzdWx0Lmlzc3Vlcykge1xuICAgICAgICBnZXRQbHVnaW5BcGlEZWJ1Z2dlcigpKFxuICAgICAgICAgICdBc3luY2hyb25vdXMgdmFsaWRhdGlvbiBvZiB0aGUgJXMgb2YgXCIlc1wiIEFQSSBtZXRob2QgXCIlc1wiIGZhaWxlZDogJXMnLFxuICAgICAgICAgIHBhcmFtcy5wYXlsb2FkS2luZCxcbiAgICAgICAgICBwYXJhbXMucGx1Z2luSWQsXG4gICAgICAgICAgcGFyYW1zLm1ldGhvZE5hbWUsXG4gICAgICAgICAgZm9ybWF0SXNzdWVzKGFzeW5jUmVzdWx0Lmlzc3VlcylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocmVzdWx0Lmlzc3Vlcykge1xuICAgIHRocm93IG5ldyBQbHVnaW5BcGlWYWxpZGF0aW9uRXJyb3Ioe1xuICAgICAgaXNzdWVzOiByZXN1bHQuaXNzdWVzLFxuICAgICAgbWV0aG9kTmFtZTogcGFyYW1zLm1ldGhvZE5hbWUsXG4gICAgICBwYXlsb2FkS2luZDogcGFyYW1zLnBheWxvYWRLaW5kLFxuICAgICAgcGx1Z2luSWQ6IHBhcmFtcy5wbHVnaW5JZFxuICAgIH0pO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBc0dBLG1CQUF5QjtBQUN6QixtQkFHTztBQUNQLDBCQUFpQztBQUNqQyw0QkFBb0M7QUFDcEMsMEJBQXVCO0FBQ3ZCLDhCQUdPO0FBRVAsbUJBQXVDO0FBQ3ZDLHNDQUF5QztBQUV6QyxNQUFNLGdDQUFnQztBQUN0QyxNQUFNLGdDQUFnQztBQUV0QyxNQUFNLHVEQUE4RTtBQUFBLEVBQ2xGLGFBQWE7QUFBQSxFQUNiLElBQUk7QUFBQSxFQUNKLG9CQUFvQjtBQUFBLEVBQ3BCLE1BQU07QUFDUjtBQUtBLE1BQU0saURBQWlEO0FBS2hELElBQUssdUJBQUwsa0JBQUtBLDBCQUFMO0FBSUwsRUFBQUEsc0JBQUEsV0FBUTtBQUtSLEVBQUFBLHNCQUFBLFlBQVM7QUFUQyxTQUFBQTtBQUFBLEdBQUE7QUEwQkwsSUFBSyxnQ0FBTCxrQkFBS0MsbUNBQUw7QUFJTCxFQUFBQSwrQkFBQSxnQkFBYTtBQUtiLEVBQUFBLCtCQUFBLGtCQUFlO0FBS2YsRUFBQUEsK0JBQUEsa0JBQWU7QUFLZixFQUFBQSwrQkFBQSxhQUFVO0FBTVYsRUFBQUEsK0JBQUEsbUJBQWdCO0FBS2hCLEVBQUFBLCtCQUFBLHFCQUFrQjtBQTlCUixTQUFBQTtBQUFBLEdBQUE7QUE4V1osTUFBZSxtQkFBbUI7QUFBQTtBQUFBO0FBQUEsRUFPekIsWUFBK0IsUUFBOEI7QUFBOUI7QUFBQSxFQUErQjtBQUFBLEVBQS9CO0FBQUEsRUFONUIsU0FBd0I7QUFBQSxFQUV4QixTQUEwQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVcxQyx5QkFBb0Q7QUFDNUQsV0FBTyxJQUFJLDBCQUEwQjtBQUFBLE1BQ25DLFVBQVUsS0FBSyxPQUFPO0FBQUEsTUFDdEIsUUFBUSw0QkFBNEIsS0FBSyxNQUFNO0FBQUEsSUFDakQsQ0FBQztBQUFBLEVBQ0g7QUFDRjtBQUVBLE1BQU0sNkJBQThDLHNDQUF1QyxFQUFFLGtCQUFrQixFQUFnQztBQUFBLEVBQzdJLElBQVcsdUJBQTZEO0FBQ3RFLFdBQU8sS0FBSyxXQUFXLE9BQU8sNEJBQTRCLEtBQUssTUFBTSxJQUFJO0FBQUEsRUFDM0U7QUFBQSxFQUVBLElBQVcsUUFBcUI7QUFDOUIsZUFBTyw0QkFBb0IsS0FBSyxNQUFNO0FBQUEsRUFDeEM7QUFBQSxFQUVPLFlBQVksUUFBOEI7QUFDL0MsVUFBTSxNQUFNO0FBQUEsRUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS08sVUFBZ0I7QUFDckIsVUFBTSxTQUFTLGFBQWEsS0FBSyxNQUFNO0FBQ3ZDLFFBQUksV0FBVyxLQUFLLFFBQVE7QUFDMUI7QUFBQSxJQUNGO0FBRUEsU0FBSyxTQUFTO0FBQ2QsU0FBSyxTQUFTLFdBQVcsT0FBTyxPQUFPLHNCQUFzQixRQUFRLEtBQUssT0FBTyxRQUFRO0FBQ3pGLFNBQUssUUFBUSxRQUFRO0FBQUEsRUFDdkI7QUFBQSxFQUVBLE1BQWEsY0FBYyxTQUF3RDtBQUNqRixVQUFNLGVBQWUsS0FBSztBQUMxQixRQUFJLGlCQUFpQixNQUFNO0FBQ3pCLGFBQU87QUFBQSxJQUNUO0FBRUEsUUFBSTtBQUNGLGFBQU8sVUFBTSw2QkFBcUI7QUFBQSxRQUNoQyxtQkFBbUIsT0FBTyxnQkFBNEMsTUFBTSxLQUFLLGFBQWEsV0FBVztBQUFBLFFBQ3pHLGVBQWUsbUJBQW1CLEtBQUssT0FBTyxRQUFRO0FBQUEsUUFDdEQsdUJBQXVCLFNBQVMseUJBQXlCO0FBQUEsTUFDM0QsQ0FBQztBQUFBLElBQ0gsUUFBUTtBQUNOLFlBQU0sS0FBSyx1QkFBdUI7QUFBQSxJQUNwQztBQUFBLEVBQ0Y7QUFBQSxFQUVBLE1BQWMsYUFBYSxhQUF5QztBQUNsRSxXQUFPLE1BQU0sSUFBSSxRQUFjLENBQUMsU0FBUyxXQUFXO0FBR2xELFlBQU0sV0FBVyxLQUFLLEdBQUcsVUFBVSxNQUFNO0FBQ3ZDLHFCQUFhO0FBQUEsTUFDZixDQUFDO0FBRUQsZUFBUyxVQUFnQjtBQUN2QixpQkFBUyxpQkFBaUIsT0FBTyxRQUFRO0FBQ3pDLG9CQUFZLG9CQUFvQixTQUFTLFdBQVc7QUFBQSxNQUN0RDtBQUVBLGVBQVMsY0FBb0I7QUFDM0IsZ0JBQVE7QUFDUixlQUFPLFlBQVksTUFBZTtBQUFBLE1BQ3BDO0FBRUEsWUFBTSxlQUFlLE1BQVk7QUFDL0IsY0FBTSxRQUFRLEtBQUs7QUFDbkIsWUFBSSxVQUFVLE1BQU07QUFDbEI7QUFBQSxRQUNGO0FBRUEsZ0JBQVE7QUFDUixnQkFBUSxLQUFLO0FBQUEsTUFDZjtBQUVBLGtCQUFZLGlCQUFpQixTQUFTLFdBQVc7QUFDakQsbUJBQWE7QUFBQSxJQUNmLENBQUM7QUFBQSxFQUNIO0FBQ0Y7QUFNTyxNQUFNLGtDQUFrQyxNQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJbkM7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1QsWUFBWSxRQUFvRDtBQUNyRSxVQUFNLE9BQU8sV0FBVywwQkFBMEIsT0FBTyxRQUFRLHFCQUFxQixPQUFPLE1BQU0sR0FBRztBQUN0RyxTQUFLLE9BQU87QUFDWixTQUFLLFdBQVcsT0FBTztBQUN2QixTQUFLLFNBQVMsT0FBTztBQUFBLEVBQ3ZCO0FBQ0Y7QUFTTyxNQUFNLDhCQUE4QiwwQkFBMEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNNUQsWUFBWSxVQUFrQjtBQUNuQyxVQUFNO0FBQUEsTUFDSixTQUFTLDBCQUEwQixRQUFRO0FBQUEsTUFDM0M7QUFBQSxNQUNBLFFBQVE7QUFBQSxJQUNWLENBQUM7QUFDRCxTQUFLLE9BQU87QUFBQSxFQUNkO0FBQ0Y7QUFRTyxNQUFNLGlDQUFpQyxNQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJbEM7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9ULFlBQVksUUFBbUQ7QUFDcEU7QUFBQSxNQUNFLE9BQU8sT0FBTyxXQUFXLFFBQVEsT0FBTyxRQUFRLGlCQUFpQixPQUFPLFVBQVUsd0JBQXdCLGFBQWEsT0FBTyxNQUFNLENBQUM7QUFBQSxJQUN2STtBQUNBLFNBQUssT0FBTztBQUNaLFNBQUssU0FBUyxPQUFPO0FBQ3JCLFNBQUssYUFBYSxPQUFPO0FBQ3pCLFNBQUssV0FBVyxPQUFPO0FBQUEsRUFDekI7QUFDRjtBQWdCTyxTQUFTLGNBQW1DLFFBQXlEO0FBQzFHLDBDQUF3QztBQUN4QyxRQUFNLFNBQVMsYUFBYSxNQUFNO0FBQ2xDLFNBQU8sV0FBVyxPQUFPLFdBQU8sNEJBQWEsc0JBQXNCLFFBQVEsT0FBTyxRQUFRLENBQUM7QUFDN0Y7QUFlTyxTQUFTLDBDQUF1RDtBQUNyRSxhQUFPLDJDQUFvQixvREFBb0Q7QUFDakY7QUFhTyxTQUFTLGlCQUFzQyxRQUE0QztBQUNoRywwQ0FBd0M7QUFDeEMsUUFBTSxXQUFXLE9BQU8sT0FBTyxTQUFTO0FBQ3hDLFFBQU0sV0FBVyxZQUFZO0FBQzdCLFFBQU0sVUFBVSxTQUFTLFFBQVEsUUFBUSxLQUFLLENBQUM7QUFDL0MsV0FBUyxRQUFRLFFBQVEsSUFBSTtBQUU3QixNQUFJLFFBQVEsS0FBSyxDQUFDQyxZQUFXQSxRQUFPLGVBQWUsT0FBTyxVQUFVLEdBQUc7QUFDckUsVUFBTSxJQUFJLE1BQU0sZUFBZSxRQUFRLDRDQUE0QyxPQUFPLFVBQVUsSUFBSTtBQUFBLEVBQzFHO0FBRUEsUUFBTSxTQUFtQztBQUFBLElBQ3ZDLEtBQUssT0FBTztBQUFBLElBQ1osWUFBWSxPQUFPO0FBQUEsSUFDbkIsVUFBVSxPQUFPLFlBQVksQ0FBQztBQUFBLElBQzlCLFdBQVc7QUFBQSxJQUNYO0FBQUEsRUFDRjtBQUNBLFVBQVEsS0FBSyxNQUFNO0FBQ25CLG9CQUFrQjtBQUVsQixHQUFDLE9BQU8sYUFBYSxPQUFPLFFBQVEsU0FBUyxNQUFNO0FBQ2pELGlCQUFhLE1BQU07QUFBQSxFQUNyQixDQUFDO0FBQ0g7QUFpQk8sU0FBUyxlQUFvQyxRQUFpRTtBQUNuSCwwQ0FBd0M7QUFDeEMsUUFBTSxNQUFNLElBQUksaUJBQXVCLE1BQU07QUFDN0MsUUFBTSxjQUFjLFVBQVUsTUFBTTtBQUNsQyxRQUFJLFFBQVE7QUFBQSxFQUNkLENBQUM7QUFDRCxTQUFPLFVBQVUsU0FBUyxXQUFXO0FBQ3JDLE1BQUksUUFBUTtBQUNaLFNBQU87QUFDVDtBQVVBLFNBQVMsbUJBQXNCLE9BQXlDO0FBQ3RFLFNBQU8sT0FBTyxVQUFVLFlBQ25CLFVBQVUsUUFDVixVQUFVLFNBQ1YsT0FBUSxNQUF5QixTQUFTO0FBQ2pEO0FBU0EsU0FBUywwQkFBMEIsUUFBa0Msa0JBQXlDO0FBQzVHLFFBQU0sV0FBVyxvQkFBb0IsT0FBTztBQUM1QyxTQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUsTUFBTSxDQUFDLGVBQWUsT0FBTyxVQUFVLE9BQU8sS0FBSyxVQUFVLE1BQU0sVUFBVTtBQUM1RztBQWFBLFNBQVMsb0JBQW9CLFFBQTBFO0FBQ3JHLFNBQU8sU0FBUyxtQkFBbUIsWUFBZ0M7QUFHakUsVUFBTSxhQUFTLDRCQUFtRCxVQUFVLE9BQU8sUUFBUSxPQUFPLFdBQVcsQ0FBQztBQUM5RyxVQUFNLGlCQUFpQixPQUFPO0FBRTlCLFFBQUksbUJBQW1CLFVBQWEsQ0FBQyx3Q0FBd0MsRUFBRSxVQUFVLEdBQUc7QUFDMUYsYUFBTyxPQUFPLE1BQU0sT0FBTyxRQUFRLFVBQVU7QUFBQSxJQUMvQztBQUVBLFFBQUksZUFBZSxPQUFPO0FBQ3hCLHNCQUFnQjtBQUFBLFFBQ2QsWUFBWSxPQUFPO0FBQUEsUUFDbkIsYUFBYTtBQUFBLFFBQ2IsVUFBVSxPQUFPO0FBQUEsUUFDakIsUUFBUSxlQUFlO0FBQUEsUUFDdkIsT0FBTztBQUFBLE1BQ1QsQ0FBQztBQUFBLElBQ0g7QUFFQSxVQUFNLGNBQWMsT0FBTyxNQUFNLE9BQU8sUUFBUSxVQUFVO0FBQzFELFVBQU0sZUFBZSxlQUFlO0FBQ3BDLFFBQUksQ0FBQyxjQUFjO0FBQ2pCLGFBQU87QUFBQSxJQUNUO0FBRUEsUUFBSSxtQkFBbUIsV0FBVyxHQUFHO0FBQ25DLGFBQU8sWUFBWSxLQUFLLENBQUMsa0JBQTJCO0FBQ2xELHdCQUFnQjtBQUFBLFVBQ2QsWUFBWSxPQUFPO0FBQUEsVUFDbkIsYUFBYTtBQUFBLFVBQ2IsVUFBVSxPQUFPO0FBQUEsVUFDakIsUUFBUTtBQUFBLFVBQ1IsT0FBTztBQUFBLFFBQ1QsQ0FBQztBQUNELGVBQU87QUFBQSxNQUNULENBQUM7QUFBQSxJQUNIO0FBRUEsb0JBQWdCO0FBQUEsTUFDZCxZQUFZLE9BQU87QUFBQSxNQUNuQixhQUFhO0FBQUEsTUFDYixVQUFVLE9BQU87QUFBQSxNQUNqQixRQUFRO0FBQUEsTUFDUixPQUFPO0FBQUEsSUFDVCxDQUFDO0FBQ0QsV0FBTztBQUFBLEVBQ1Q7QUFDRjtBQWdCQSxTQUFTLHNCQUFzQixRQUFrQyxrQkFBd0M7QUFDdkcsUUFBTSxXQUFXLG9CQUFvQixPQUFPO0FBQzVDLFFBQU0sY0FBYyxvQkFBSSxJQUFpQjtBQUV6QyxTQUFPLElBQUksTUFBTSxPQUFPLEtBQUs7QUFBQSxJQUMzQixJQUFJLFFBQWdCLGFBQW1DO0FBQ3JELFVBQUksT0FBTyxXQUFXO0FBQ3BCLGNBQU0sSUFBSSxzQkFBc0IsT0FBTyxRQUFRO0FBQUEsTUFDakQ7QUFFQSxZQUFNLFFBQVEsVUFBVSxRQUFRLFdBQVc7QUFDM0MsVUFBSSxPQUFPLFVBQVUsWUFBWTtBQUMvQixlQUFPO0FBQUEsTUFDVDtBQUVBLFVBQUksU0FBUyxZQUFZLElBQUksV0FBVztBQUN4QyxVQUFJLFdBQVcsUUFBVztBQUN4QixpQkFBUyxvQkFBb0I7QUFBQSxVQUMzQixnQkFBZ0IsT0FBTyxnQkFBZ0IsV0FBVyxTQUFTLFdBQVcsSUFBSTtBQUFBLFVBQzFFLFlBQVksT0FBTyxXQUFXO0FBQUEsVUFDOUIsVUFBVSxPQUFPO0FBQUEsVUFDakI7QUFBQSxVQUNBO0FBQUEsUUFDRixDQUFDO0FBQ0Qsb0JBQVksSUFBSSxhQUFhLE1BQU07QUFBQSxNQUNyQztBQUNBLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRixDQUFDO0FBQ0g7QUFRQSxTQUFTLGFBQWEsUUFBbUQ7QUFDdkUsU0FBTyxPQUNKLElBQUksQ0FBQyxVQUFVO0FBQ2QsVUFBTSxPQUFPLE1BQU0sTUFBTSxJQUFJLENBQUMsWUFBWSxPQUFPLE9BQU8sWUFBWSxXQUFXLFFBQVEsTUFBTSxPQUFPLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFDL0csV0FBTyxPQUFPLEdBQUcsSUFBSSxLQUFLLE1BQU0sT0FBTyxLQUFLLE1BQU07QUFBQSxFQUNwRCxDQUFDLEVBQ0EsS0FBSyxJQUFJO0FBQ2Q7QUFRQSxTQUFTLGVBQWUsVUFBOEM7QUFDcEUsVUFBUSxZQUFZLEVBQUUsUUFBUSxRQUFRLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxTQUFTO0FBQ3JGO0FBVUEsU0FBUyxVQUFVLEtBQWEsWUFBa0M7QUFDaEUsU0FBTyxRQUFRLElBQUksS0FBSyxVQUFVO0FBQ3BDO0FBT0EsU0FBUyx1QkFBa0U7QUFDekUsYUFBTyxxQ0FBdUIsNkJBQTZCO0FBQzdEO0FBUUEsU0FBUyxjQUFpQztBQUN4QyxRQUFNLGNBQVUsMERBQXFELCtCQUErQixDQUFDLENBQUM7QUFDdEcsUUFBTSxXQUFXLFFBQVE7QUFDekIsV0FBUyxZQUFZLENBQUM7QUFDdEIsV0FBUyxnQkFBZ0IsQ0FBQztBQUMxQixhQUFPLDRCQUEwQixRQUFRO0FBQzNDO0FBTUEsU0FBUyxvQkFBMEI7QUFDakMsYUFBVyxrQkFBYyx1QkFBUyxZQUFZLEVBQUUsV0FBVyxHQUFHO0FBQzVELGVBQVc7QUFBQSxFQUNiO0FBQ0Y7QUFTQSxTQUFTLDRCQUE0QixRQUE2RDtBQUNoRyxNQUFJLENBQUMsT0FBTyxPQUFPLE9BQU8sSUFBSSxRQUFRLFdBQVcsT0FBTyxRQUFRLEdBQUc7QUFDakUsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJLENBQUMsT0FBTyxJQUFJLFFBQVEsZUFBZSxJQUFJLE9BQU8sUUFBUSxHQUFHO0FBQzNELFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxVQUFVLGVBQWUsT0FBTyxRQUFRO0FBQzlDLE1BQUksUUFBUSxXQUFXLEdBQUc7QUFDeEIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPLFFBQVEsTUFBTSxDQUFDLFdBQVcsS0FBQyx3QkFBQUMsV0FBaUIsT0FBTyxZQUFZLE9BQU8sZUFBZSxDQUFDLElBQUksMENBQWdEO0FBQ25KO0FBV0EsU0FBUyxhQUFhLFFBQXdDO0FBQzVELFNBQU8sWUFBWTtBQUNuQixRQUFNLFdBQVcsWUFBWTtBQUM3QixRQUFNLFVBQVUsU0FBUyxRQUFRLE9BQU8sUUFBUTtBQUNoRCxNQUFJLFNBQVM7QUFDWCxhQUFTLFFBQVEsT0FBTyxRQUFRLElBQUksUUFBUSxPQUFPLENBQUMsY0FBYyxjQUFjLE1BQU07QUFBQSxFQUN4RjtBQUNBLG9CQUFrQjtBQUNwQjtBQVNBLFNBQVMsYUFBYSxRQUE4RDtBQUNsRixRQUFNLGFBQWEsZUFBZSxPQUFPLFFBQVEsRUFDOUMsT0FBTyxDQUFDLGVBQVcsd0JBQUFBLFdBQWlCLE9BQU8sWUFBWSxPQUFPLGVBQWUsQ0FBQyxFQUM5RSxPQUFPLENBQUMsV0FBVywwQkFBMEIsUUFBUSxPQUFPLFFBQVEsQ0FBQyxFQUNyRSxLQUFLLENBQUMsR0FBRyxVQUFNLHlDQUFnQixFQUFFLFlBQVksRUFBRSxVQUFVLENBQUM7QUFFN0QsU0FBTyxXQUFXLENBQUMsS0FBSztBQUMxQjtBQVFBLFNBQVMsVUFBVSxZQUFvQztBQUNyRCxRQUFNLFdBQVcsWUFBWTtBQUM3QixXQUFTLFlBQVksS0FBSyxVQUFVO0FBQ3BDLFNBQU8sTUFBWTtBQUNqQixVQUFNLFFBQVEsU0FBUyxZQUFZLFFBQVEsVUFBVTtBQUNyRCxRQUFJLFVBQVUsSUFBSTtBQUNoQixlQUFTLFlBQVksT0FBTyxPQUFPLENBQUM7QUFBQSxJQUN0QztBQUFBLEVBQ0Y7QUFDRjtBQWFBLFNBQVMsZ0JBQWdCLFFBQXFDO0FBQzVELFFBQU0sU0FBUyxPQUFPLE9BQU8sV0FBVyxFQUFFLFNBQVMsT0FBTyxLQUFLO0FBRS9ELE1BQUksbUJBQXFELE1BQU0sR0FBRztBQUNoRSx3Q0FBa0IsWUFBWTtBQUM1QixZQUFNLGNBQWMsTUFBTTtBQUMxQixVQUFJLFlBQVksUUFBUTtBQUN0Qiw2QkFBcUI7QUFBQSxVQUNuQjtBQUFBLFVBQ0EsT0FBTztBQUFBLFVBQ1AsT0FBTztBQUFBLFVBQ1AsT0FBTztBQUFBLFVBQ1AsYUFBYSxZQUFZLE1BQU07QUFBQSxRQUNqQztBQUFBLE1BQ0Y7QUFBQSxJQUNGLENBQUM7QUFDRDtBQUFBLEVBQ0Y7QUFFQSxNQUFJLE9BQU8sUUFBUTtBQUNqQixVQUFNLElBQUkseUJBQXlCO0FBQUEsTUFDakMsUUFBUSxPQUFPO0FBQUEsTUFDZixZQUFZLE9BQU87QUFBQSxNQUNuQixhQUFhLE9BQU87QUFBQSxNQUNwQixVQUFVLE9BQU87QUFBQSxJQUNuQixDQUFDO0FBQUEsRUFDSDtBQUNGOyIsIm5hbWVzIjpbIlBsdWdpbkFwaVBheWxvYWRLaW5kIiwiUGx1Z2luQXBpVW5hdmFpbGFiaWxpdHlSZWFzb24iLCJyZWNvcmQiLCJzYXRpc2ZpZXNWZXJzaW9uIl19
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
* declared method names are checked with `typeof`, and the payloads are validated per method instead.
|
|
70
70
|
*
|
|
71
71
|
* @remarks
|
|
72
|
-
* Every plugin bundles its OWN copy of `obsidian-dev-utils
|
|
72
|
+
* Every plugin bundles its OWN copy of this library (or of the older `obsidian-dev-utils`), so a registry record is a wire format between
|
|
73
73
|
* different library versions and must stay backward-compatible forever. Nothing crossing it may be
|
|
74
74
|
* `instanceof`-checked — reads are structural, and only plain data objects and plain functions are stored.
|
|
75
75
|
*
|
|
@@ -132,6 +132,7 @@ function addPluginCssClasses(element, cssClasses) {
|
|
|
132
132
|
const extraCssClasses = typeof cssClasses === "string" ? [cssClasses] : cssClasses ?? [];
|
|
133
133
|
element.addClass(
|
|
134
134
|
import_css_class.CssClass.LibraryName,
|
|
135
|
+
import_css_class.CssClass.LegacyLibraryName,
|
|
135
136
|
...import_library2.ObsidianLibrary.cssClassScope ? [import_library2.ObsidianLibrary.cssClassScope] : [],
|
|
136
137
|
...extraCssClasses
|
|
137
138
|
);
|
|
@@ -151,7 +152,9 @@ function initPluginContext(pluginId) {
|
|
|
151
152
|
import_library2.ObsidianLibrary.init({ cssClassScope: pluginId });
|
|
152
153
|
import_library.Library.init({
|
|
153
154
|
debugGuideUrl: DEBUG_GUIDE_URL,
|
|
154
|
-
|
|
155
|
+
// TODO: Move to `OBSIDIAN_LIBRARY_NAME` once `@mnaoumov/typescript-lib` honours a legacy namespace alias, so
|
|
156
|
+
// filters written for this one keep showing the generic modules' messages.
|
|
157
|
+
debugNamespace: import_library2.LEGACY_OBSIDIAN_LIBRARY_NAME,
|
|
155
158
|
debugPrefixNamespace: `${pluginId}:`,
|
|
156
159
|
shouldPrintStackTrace: true
|
|
157
160
|
});
|
|
@@ -170,4 +173,4 @@ function initPluginContext(pluginId) {
|
|
|
170
173
|
initDebugController,
|
|
171
174
|
initPluginContext
|
|
172
175
|
});
|
|
173
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
176
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW4vcGx1Z2luLWNvbnRleHQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEluaXRpYWxpemVzIHRoZSBwbHVnaW4gY29udGV4dCBhbmQgc2V0cyB1cCB0aGUgcGx1Z2luIElELlxuICovXG5cbmltcG9ydCB0eXBlIHsgRGVidWdDb250cm9sbGVyIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2RlYnVnLWNvbnRyb2xsZXInO1xuaW1wb3J0IHR5cGUgeyBDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGdldFNoYXJlZEFib3J0Q29udHJvbGxlciB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hYm9ydC1jb250cm9sbGVyJztcbmltcG9ydCB7XG4gIGdldERlYnVnQ29udHJvbGxlcixcbiAgc2hvd0luaXRpYWxEZWJ1Z01lc3NhZ2Vcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2RlYnVnJztcbmltcG9ydCB7IExpYnJhcnkgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvbGlicmFyeSc7XG5cbmltcG9ydCB7IENzc0NsYXNzIH0gZnJvbSAnLi4vY3NzLWNsYXNzLnRzJztcbmltcG9ydCB7XG4gIExJQlJBUllfU1RZTEVTLFxuICBMSUJSQVJZX1ZFUlNJT05cbn0gZnJvbSAnLi4vZ2VuZXJhdGVkLWR1cmluZy1idWlsZC50cyc7XG5pbXBvcnQgeyBpbmplY3RMaWJyYXJ5U3R5bGVzIH0gZnJvbSAnLi4vbGlicmFyeS1zdHlsZXMudHMnO1xuaW1wb3J0IHtcbiAgTEVHQUNZX09CU0lESUFOX0xJQlJBUllfTkFNRSxcbiAgT2JzaWRpYW5MaWJyYXJ5XG59IGZyb20gJy4uL2xpYnJhcnkudHMnO1xuaW1wb3J0IHsgc2hhcmVUeXBlc2NyaXB0TGliU3RhdGVXaXRoT2JzaWRpYW5EZXZVdGlsc1N0YXRlIH0gZnJvbSAnLi4vb2JzaWRpYW4tZGV2LXV0aWxzLXN0YXRlLnRzJztcblxuaW50ZXJmYWNlIFBsdWdpbkNvbnRleHRXaW5kb3cge1xuICBERUJVRzogRGVidWdDb250cm9sbGVyIHwgdW5kZWZpbmVkO1xufVxuXG5jb25zdCBERUJVR19HVUlERV9VUkwgPSAnaHR0cHM6Ly9tbmFvdW1vdi5kZXYvb2JzaWRpYW4tbGliL2d1aWRlcy9kZWJ1Z2dpbmcvJztcblxuLyoqXG4gKiBTZXRzIHRoZSBDU1MgY2xhc3Mgb2YgYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBlbGVtZW50IHRvIHNldCB0aGUgQ1NTIGNsYXNzIG9mLlxuICogQHBhcmFtIGNzc0NsYXNzZXMgLSBUaGUgQ1NTIGNsYXNzZXMgdG8gc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkUGx1Z2luQ3NzQ2xhc3NlcyhlbGVtZW50OiBIVE1MRWxlbWVudCwgY3NzQ2xhc3Nlcz86IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZCB7XG4gIGNvbnN0IGV4dHJhQ3NzQ2xhc3NlcyA9IHR5cGVvZiBjc3NDbGFzc2VzID09PSAnc3RyaW5nJyA/IFtjc3NDbGFzc2VzXSA6IGNzc0NsYXNzZXMgPz8gW107XG4gIGVsZW1lbnQuYWRkQ2xhc3MoXG4gICAgQ3NzQ2xhc3MuTGlicmFyeU5hbWUsXG4gICAgQ3NzQ2xhc3MuTGVnYWN5TGlicmFyeU5hbWUsXG4gICAgLy8gVGhlIHNjb3BlIGlzIGVtcHR5IHVudGlsIHRoZSBwbHVnaW4gY29udGV4dCBpcyBpbml0aWFsaXplZDsgc2tpcCBpdCBzbyB3ZSBuZXZlciBhZGQgYW4gZW1wdHkgY2xhc3MuXG4gICAgLi4uKE9ic2lkaWFuTGlicmFyeS5jc3NDbGFzc1Njb3BlID8gW09ic2lkaWFuTGlicmFyeS5jc3NDbGFzc1Njb3BlXSA6IFtdKSxcbiAgICAuLi5leHRyYUNzc0NsYXNzZXNcbiAgKTtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplcyB0aGUgZGVidWcgY29udHJvbGxlci5cbiAqXG4gKiBAcGFyYW0gd2luIC0gVGhlIHdpbmRvdyB0byBpbml0aWFsaXplIHRoZSBkZWJ1ZyBjb250cm9sbGVyIGZvci5cbiAqIEBwYXJhbSBjb21wb25lbnQgLSBUaGUgY29tcG9uZW50IHRvIHJlZ2lzdGVyIGNsZWFudXAgb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0RGVidWdDb250cm9sbGVyKHdpbjogV2luZG93LCBjb21wb25lbnQ6IENvbXBvbmVudCk6IHZvaWQge1xuICBjb25zdCBwbHVnaW5Db250ZXh0V2luZG93ID0gd2luIGFzIFBhcnRpYWw8UGx1Z2luQ29udGV4dFdpbmRvdz47XG4gIGNvbnN0IG9sZERlYnVnID0gcGx1Z2luQ29udGV4dFdpbmRvdy5ERUJVRztcbiAgY29uc3QgbmV3RGVidWcgPSBnZXREZWJ1Z0NvbnRyb2xsZXIoKTtcbiAgcGx1Z2luQ29udGV4dFdpbmRvdy5ERUJVRyA9IG5ld0RlYnVnO1xuXG4gIGNvbXBvbmVudC5yZWdpc3RlcigoKSA9PiB7XG4gICAgaWYgKHBsdWdpbkNvbnRleHRXaW5kb3cuREVCVUcgPT09IG5ld0RlYnVnKSB7XG4gICAgICBwbHVnaW5Db250ZXh0V2luZG93LkRFQlVHID0gb2xkRGVidWc7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplcyB0aGUgcGx1Z2luIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHBsdWdpbklkIC0gVGhlIHBsdWdpbiBJRC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRQbHVnaW5Db250ZXh0KHBsdWdpbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgT2JzaWRpYW5MaWJyYXJ5LmluaXQoeyBjc3NDbGFzc1Njb3BlOiBwbHVnaW5JZCB9KTtcbiAgTGlicmFyeS5pbml0KHtcbiAgICBkZWJ1Z0d1aWRlVXJsOiBERUJVR19HVUlERV9VUkwsXG4gICAgLy8gVE9ETzogTW92ZSB0byBgT0JTSURJQU5fTElCUkFSWV9OQU1FYCBvbmNlIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWJgIGhvbm91cnMgYSBsZWdhY3kgbmFtZXNwYWNlIGFsaWFzLCBzb1xuICAgIC8vIGZpbHRlcnMgd3JpdHRlbiBmb3IgdGhpcyBvbmUga2VlcCBzaG93aW5nIHRoZSBnZW5lcmljIG1vZHVsZXMnIG1lc3NhZ2VzLlxuICAgIGRlYnVnTmFtZXNwYWNlOiBMRUdBQ1lfT0JTSURJQU5fTElCUkFSWV9OQU1FLFxuICAgIGRlYnVnUHJlZml4TmFtZXNwYWNlOiBgJHtwbHVnaW5JZH06YCxcbiAgICBzaG91bGRQcmludFN0YWNrVHJhY2U6IHRydWVcbiAgfSk7XG4gIHNob3dJbml0aWFsRGVidWdNZXNzYWdlKHBsdWdpbklkKTtcblxuICAvLyBOb3RoaW5nIGVsc2UgaW4gdGhlIGxpYnJhcnkgcmVhY2hlcyBmb3IgdGhlIHNoYXJlZCBhYm9ydCBjb250cm9sbGVyIC0tIG9ubHkgY29uc3VtZXIgcGx1Z2lucyBkby4gQ3JlYXRlXG4gIC8vIGl0IGhlcmUgc28gdGhlIGRldnRvb2xzIGNvbnNvbGUgcmVjaXBlIGluIHRoZSBkZWJ1Z2dpbmcgZ3VpZGUgYWx3YXlzIHJlc29sdmVzLCBpbnN0ZWFkIG9mIHRocm93aW5nIHVudGlsIHNvbWVcbiAgLy8gcGx1Z2luIGhhcHBlbnMgdG8gc3RhcnQgYW4gYWJvcnRhYmxlIG9wZXJhdGlvbi5cbiAgZ2V0U2hhcmVkQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgLy8gVGhlIGRlYnVnZ2VycywgdGhlIGBkZWJ1Z2AgaW5zdGFuY2UgYW5kIHRoZSBzaGFyZWQgYWJvcnQgY29udHJvbGxlciBtb3ZlZCBvdXQgb2YgYF9fb2JzaWRpYW5EZXZVdGlsc2AuIExpbmsgdGhlbVxuICAvLyBiYWNrIHVuZGVyIHRoZSBsZWdhY3kgZ2xvYmFsLCBzbyBwbHVnaW5zIGJ1bmRsaW5nIGFuIG9sZGVyIGNvcHkgb2YgdGhpcyBsaWJyYXJ5IHNoYXJlIHRoZW0uXG4gIHNoYXJlVHlwZXNjcmlwdExpYlN0YXRlV2l0aE9ic2lkaWFuRGV2VXRpbHNTdGF0ZSgpO1xuXG4gIGluamVjdExpYnJhcnlTdHlsZXMoe1xuICAgIGRvYzogZG9jdW1lbnQsXG4gICAgbGlicmFyeVN0eWxlczogTElCUkFSWV9TVFlMRVMsXG4gICAgbGlicmFyeVZlcnNpb246IExJQlJBUllfVkVSU0lPTlxuICB9KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFTQSw4QkFBeUM7QUFDekMsbUJBR087QUFDUCxxQkFBd0I7QUFFeEIsdUJBQXlCO0FBQ3pCLG9DQUdPO0FBQ1AsNEJBQW9DO0FBQ3BDLElBQUFBLGtCQUdPO0FBQ1Asc0NBQWlFO0FBTWpFLE1BQU0sa0JBQWtCO0FBUWpCLFNBQVMsb0JBQW9CLFNBQXNCLFlBQXNDO0FBQzlGLFFBQU0sa0JBQWtCLE9BQU8sZUFBZSxXQUFXLENBQUMsVUFBVSxJQUFJLGNBQWMsQ0FBQztBQUN2RixVQUFRO0FBQUEsSUFDTiwwQkFBUztBQUFBLElBQ1QsMEJBQVM7QUFBQSxJQUVULEdBQUksZ0NBQWdCLGdCQUFnQixDQUFDLGdDQUFnQixhQUFhLElBQUksQ0FBQztBQUFBLElBQ3ZFLEdBQUc7QUFBQSxFQUNMO0FBQ0Y7QUFRTyxTQUFTLG9CQUFvQixLQUFhLFdBQTRCO0FBQzNFLFFBQU0sc0JBQXNCO0FBQzVCLFFBQU0sV0FBVyxvQkFBb0I7QUFDckMsUUFBTSxlQUFXLGlDQUFtQjtBQUNwQyxzQkFBb0IsUUFBUTtBQUU1QixZQUFVLFNBQVMsTUFBTTtBQUN2QixRQUFJLG9CQUFvQixVQUFVLFVBQVU7QUFDMUMsMEJBQW9CLFFBQVE7QUFBQSxJQUM5QjtBQUFBLEVBQ0YsQ0FBQztBQUNIO0FBT08sU0FBUyxrQkFBa0IsVUFBd0I7QUFDeEQsa0NBQWdCLEtBQUssRUFBRSxlQUFlLFNBQVMsQ0FBQztBQUNoRCx5QkFBUSxLQUFLO0FBQUEsSUFDWCxlQUFlO0FBQUE7QUFBQTtBQUFBLElBR2YsZ0JBQWdCO0FBQUEsSUFDaEIsc0JBQXNCLEdBQUcsUUFBUTtBQUFBLElBQ2pDLHVCQUF1QjtBQUFBLEVBQ3pCLENBQUM7QUFDRCw0Q0FBd0IsUUFBUTtBQUtoQyx3REFBeUI7QUFJekIsd0ZBQWlEO0FBRWpELGlEQUFvQjtBQUFBLElBQ2xCLEtBQUs7QUFBQSxJQUNMLGVBQWU7QUFBQSxJQUNmLGdCQUFnQjtBQUFBLEVBQ2xCLENBQUM7QUFDSDsiLCJuYW1lcyI6WyJpbXBvcnRfbGlicmFyeSJdfQ==
|
|
@@ -87,20 +87,60 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
87
87
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
88
88
|
var plugin_lifecycle_events_exports = {};
|
|
89
89
|
__export(plugin_lifecycle_events_exports, {
|
|
90
|
+
LEGACY_PLUGIN_LOADED_EVENT_NAME: () => LEGACY_PLUGIN_LOADED_EVENT_NAME,
|
|
91
|
+
LEGACY_PLUGIN_UNLOADED_EVENT_NAME: () => LEGACY_PLUGIN_UNLOADED_EVENT_NAME,
|
|
90
92
|
PLUGIN_LOADED_EVENT_NAME: () => PLUGIN_LOADED_EVENT_NAME,
|
|
91
93
|
PLUGIN_UNLOADED_EVENT_NAME: () => PLUGIN_UNLOADED_EVENT_NAME,
|
|
94
|
+
registerPluginLifecycleEventRelay: () => registerPluginLifecycleEventRelay,
|
|
92
95
|
triggerPluginLifecycleEvent: () => triggerPluginLifecycleEvent
|
|
93
96
|
});
|
|
94
97
|
module.exports = __toCommonJS(plugin_lifecycle_events_exports);
|
|
95
|
-
|
|
96
|
-
const
|
|
98
|
+
var import_obsidian_dev_utils_state = require('../obsidian-dev-utils-state.cjs');
|
|
99
|
+
const PLUGIN_LOADED_EVENT_NAME = "obsidian-lib:plugin-loaded";
|
|
100
|
+
const PLUGIN_UNLOADED_EVENT_NAME = "obsidian-lib:plugin-unloaded";
|
|
101
|
+
const LEGACY_PLUGIN_LOADED_EVENT_NAME = "obsidian-dev-utils:plugin-loaded";
|
|
102
|
+
const LEGACY_PLUGIN_UNLOADED_EVENT_NAME = "obsidian-dev-utils:plugin-unloaded";
|
|
103
|
+
const PLUGIN_LIFECYCLE_EVENT_NAMES = [PLUGIN_LOADED_EVENT_NAME, PLUGIN_UNLOADED_EVENT_NAME];
|
|
104
|
+
const LEGACY_PLUGIN_LIFECYCLE_EVENT_NAMES = {
|
|
105
|
+
[PLUGIN_LOADED_EVENT_NAME]: LEGACY_PLUGIN_LOADED_EVENT_NAME,
|
|
106
|
+
[PLUGIN_UNLOADED_EVENT_NAME]: LEGACY_PLUGIN_UNLOADED_EVENT_NAME
|
|
107
|
+
};
|
|
108
|
+
const ANNOUNCED_PAYLOADS_STATE_KEY = "pluginLifecycleAnnouncedPayloadsV1";
|
|
109
|
+
function registerPluginLifecycleEventRelay(params) {
|
|
110
|
+
const { app, component } = params;
|
|
111
|
+
for (const name of PLUGIN_LIFECYCLE_EVENT_NAMES) {
|
|
112
|
+
component.registerEvent(app.workspace.on(LEGACY_PLUGIN_LIFECYCLE_EVENT_NAMES[name], (payload) => {
|
|
113
|
+
if (typeof payload !== "object" || payload === null) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const announcedPayloads = getAnnouncedPayloads(name);
|
|
117
|
+
if (announcedPayloads.has(payload)) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
announcedPayloads.add(payload);
|
|
121
|
+
app.workspace.trigger(name, payload);
|
|
122
|
+
}));
|
|
123
|
+
}
|
|
124
|
+
}
|
|
97
125
|
function triggerPluginLifecycleEvent(params) {
|
|
98
|
-
|
|
126
|
+
const { app, name, payload } = params;
|
|
127
|
+
getAnnouncedPayloads(name).add(payload);
|
|
128
|
+
app.workspace.trigger(name, payload);
|
|
129
|
+
app.workspace.trigger(LEGACY_PLUGIN_LIFECYCLE_EVENT_NAMES[name], payload);
|
|
130
|
+
}
|
|
131
|
+
function getAnnouncedPayloads(name) {
|
|
132
|
+
return (0, import_obsidian_dev_utils_state.getObsidianDevUtilsState)(ANNOUNCED_PAYLOADS_STATE_KEY, {
|
|
133
|
+
[PLUGIN_LOADED_EVENT_NAME]: /* @__PURE__ */ new WeakSet(),
|
|
134
|
+
[PLUGIN_UNLOADED_EVENT_NAME]: /* @__PURE__ */ new WeakSet()
|
|
135
|
+
}).value[name];
|
|
99
136
|
}
|
|
100
137
|
// Annotate the CommonJS export names for ESM import in node:
|
|
101
138
|
0 && (module.exports = {
|
|
139
|
+
LEGACY_PLUGIN_LOADED_EVENT_NAME,
|
|
140
|
+
LEGACY_PLUGIN_UNLOADED_EVENT_NAME,
|
|
102
141
|
PLUGIN_LOADED_EVENT_NAME,
|
|
103
142
|
PLUGIN_UNLOADED_EVENT_NAME,
|
|
143
|
+
registerPluginLifecycleEventRelay,
|
|
104
144
|
triggerPluginLifecycleEvent
|
|
105
145
|
});
|
|
106
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW4vcGx1Z2luLWxpZmVjeWNsZS1ldmVudHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSBsaWZlY3ljbGUgYnJvYWRjYXN0IGV2ZXJ5IHtAbGluayBQbHVnaW5CYXNlfSBtYWtlczogYG9ic2lkaWFuLWRldi11dGlsczpwbHVnaW4tbG9hZGVkYCB3aGVuIGl0IGhhc1xuICogZmluaXNoZWQgbG9hZGluZyBhbmQgYG9ic2lkaWFuLWRldi11dGlsczpwbHVnaW4tdW5sb2FkZWRgIHdoZW4gaXQgZ29lcyBhd2F5LlxuICpcbiAqIE9ic2lkaWFuIGdpdmVzIGEgcGx1Z2luIG5vIHdheSB0byBsZWFybiB0aGF0IEFOT1RIRVIgcGx1Z2luIHdhcyBlbmFibGVkIG9yIGRpc2FibGVkIOKAlCB0aGVyZSBpcyBubyBzdWNoXG4gKiBldmVudCBvbiBgYXBwLnBsdWdpbnNgLCBhbmQgYSBwbHVnaW4ncyBvd24gYEV2ZW50c2Agc291cmNlIGNhbm5vdCBoZWxwIGEgbGlzdGVuZXIgdGhhdCBkb2VzIG5vdCB5ZXQgaG9sZFxuICogdGhlIGluc3RhbmNlLiBTbyB0aGUgYnJvYWRjYXN0IGdvZXMgdGhyb3VnaCBgYXBwLndvcmtzcGFjZWAsIHdoaWNoIGlzIG9uZSBvYmplY3QgZXZlcnkgcGx1Z2luIGluIHRoZVxuICogdmF1bHQgY2FuIHJlYWNoLiBEZWxpYmVyYXRlbHkgTk9UIHRoZSBgZ2xvYmFsVGhpcy5fX29ic2lkaWFuRGV2VXRpbHNgIGJhZyB0aGUgcmVzdCBvZiB0aGUgbGlicmFyeSBzaGFyZXNcbiAqIGl0cyBzdGF0ZSB0aHJvdWdoOiBhIGxpc3RlbmVyIHRoZXJlIG5lZWRzIGl0cyBvd24gY29weSBvZiB0aGlzIGxpYnJhcnksIGFuZCB0aGVzZSBldmVudHMgYXJlIG1lYW50IHRvIGJlXG4gKiBjb25zdW1hYmxlIGJ5IGFueSBwbHVnaW4gYXQgYWxsLlxuICpcbiAqIFRoZSBuYW1lcyBhcmUgcGFzdCB0ZW5zZSBiZWNhdXNlIGEgYnJvYWRjYXN0IHN0YXRlcyBzb21ldGhpbmcgdGhhdCBoYXMgYWxyZWFkeSBoYXBwZW5lZC4gYGxvYWRlZGAgaW5cbiAqIHBhcnRpY3VsYXIgY2FycmllcyBhIGd1YXJhbnRlZTogaXQgaXMgdHJpZ2dlcmVkIG9ubHkgYWZ0ZXIgZXZlcnkgQVBJIHRoZSBwbHVnaW4gZGVjbGFyZXMgaGFzIGJlZW5cbiAqIHB1Ymxpc2hlZCwgc28gYSBsaXN0ZW5lciBtYXkgY2FsbCB0aGVtIGltbWVkaWF0ZWx5LlxuICpcbiAqIEJvdGggdGhlIGV2ZW50IG5hbWVzIGFuZCB7QGxpbmsgUGx1Z2luTGlmZWN5Y2xlRXZlbnRQYXlsb2FkfSBhcmUgYSBDUk9TUy1WRVJTSU9OIENPTlRSQUNULiBDb3BpZXMgb2ZcbiAqIHRoaXMgbGlicmFyeSBhdCBkaWZmZXJlbnQgdmVyc2lvbnMgcHVibGlzaCBhbmQgY29uc3VtZSB0aGVtIHNpZGUgYnkgc2lkZSBpbiBvbmUgdmF1bHQsIHNvIG5laXRoZXIgbWF5XG4gKiBjaGFuZ2UgaW5jb21wYXRpYmx5OiBwbGFpbiBkYXRhIG9ubHksIGFuZCBuZXcgcGF5bG9hZCBmaWVsZHMgb25seSBldmVyIGFkZGVkLlxuICpcbiAqIFRoYXQgY29udHJhY3QgaXMgYWxzbyBQVUJMSVNIRUQsIGFzIG9mIHRoZSBgUGx1Z2luIEFQSSBwcm90b2NvbGAgZ3VpZGU6IHRoaXJkLXBhcnR5IHBsdWdpbnMgdGhhdCB3aWxsXG4gKiBuZXZlciBpbnN0YWxsIHRoaXMgbGlicmFyeSBhcmUgdG9sZCB0byBoYXJkY29kZSB0aGVzZSB0d28gc3RyaW5ncyBhbmQgdGhpcyBwYXlsb2FkIHNoYXBlLiBQdWJsaXNoaW5nIGl0XG4gKiBhZGRlZCBubyBuZXcgY29uc3RyYWludCDigJQgdGhlIGNyb3NzLWNvcHkgb25lIGFib3ZlIGFscmVhZHkgZm9yYmFkZSBldmVyeSBjaGFuZ2UgYW4gb3V0c2lkZXIgY291bGRcbiAqIG5vdGljZSDigJQgYnV0IGl0IGRvZXMgbWVhbiBhIHJlbmFtZSBpcyBub3cgZG91Ymx5IHVuYXZhaWxhYmxlLiBUaGUgYG9ic2lkaWFuLWRldi11dGlsczpgIHByZWZpeCBuYW1lcyB0aGVcbiAqIGxpYnJhcnkgcmF0aGVyIHRoYW4gdGhlIHN1YmplY3QsIHdoaWNoIGlzIGEgd2FydCwgYW5kIGEgcGVybWFuZW50IG9uZTogYSBuZXV0cmFsIGFsaWFzIHdvdWxkIG5vdCByZXRpcmVcbiAqIHRoZSBvbGQgbmFtZSAoYWxyZWFkeS1yZWxlYXNlZCBwbHVnaW5zIGVtaXQgb25seSBpdCksIHNvIGl0IHdvdWxkIGxlYXZlIGV2ZXJ5IGNvcnJlY3QgY29uc3VtZXIgbGlzdGVuaW5nXG4gKiBmb3IgYm90aCwgZm9yZXZlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuLyoqXG4gKiBUaGUgbmFtZSBvZiBlaXRoZXIgbGlmZWN5Y2xlIGV2ZW50LlxuICovXG5leHBvcnQgdHlwZSBQbHVnaW5MaWZlY3ljbGVFdmVudE5hbWUgPSB0eXBlb2YgUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FIHwgdHlwZW9mIFBMVUdJTl9VTkxPQURFRF9FVkVOVF9OQU1FO1xuXG4vKipcbiAqIFRoZSBwYXlsb2FkIG9mIHtAbGluayBQTFVHSU5fTE9BREVEX0VWRU5UX05BTUV9IGFuZCB7QGxpbmsgUExVR0lOX1VOTE9BREVEX0VWRU5UX05BTUV9LlxuICpcbiAqIFBsYWluIGRhdGEgYnkgZGVzaWduIOKAlCBubyBjbGFzcyBpbnN0YW5jZXMgYW5kIG5vIHR5cGVzIG93bmVkIGJ5IHRoaXMgbGlicmFyeSDigJQgYmVjYXVzZSBpdCBjcm9zc2VzXG4gKiBiZXR3ZWVuIGluZGVwZW5kZW50bHkgYnVuZGxlZCBjb3BpZXMgb2YgaXQsIGFuZCBiZXR3ZWVuIHBsdWdpbnMgdGhhdCBkbyBub3QgdXNlIGl0IGF0IGFsbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5MaWZlY3ljbGVFdmVudFBheWxvYWQge1xuICAvKipcbiAgICogVGhlIGNvbnRyYWN0IHZlcnNpb25zIHRoZSBwbHVnaW4gcHVibGlzaGVkLCBlbXB0eSB3aGVuIGl0IHB1Ymxpc2hlcyBubyBBUEkuXG4gICAqXG4gICAqIEFuIGFycmF5IHJhdGhlciB0aGFuIGEgc2luZ2xlIHZlcnNpb24gYmVjYXVzZSBhIHByb3ZpZGVyIG1heSBwdWJsaXNoIHNldmVyYWwgY29udHJhY3QgdmVyc2lvbnMgc2lkZSBieVxuICAgKiBzaWRlLCBzbyBjb25zdW1lcnMgcGlubmVkIHRvIGFuIG9sZGVyIHJhbmdlIGtlZXAgd29ya2luZyBhY3Jvc3MgYSBicmVha2luZyBjaGFuZ2UuXG4gICAqXG4gICAqIFRoZSBBUEkgb2JqZWN0cyB0aGVtc2VsdmVzIGFyZSBkZWxpYmVyYXRlbHkgTk9UIGhlcmUuIEEgaGFuZGxlIGRlbGl2ZXJlZCBieSBhIG9uZS1zaG90IGV2ZW50IGlzIGFcbiAgICogcHJvYmU6IGl0IGFuc3dlcnMgXCJub3dcIiBhbmQgbmV2ZXIgc2F5cyB3aGVuIFwibm93XCIgY2hhbmdlZCwgYW5kIG9uZSB0aGF0IG91dGxpdmVzIHRoZSBwcm92aWRlciBpc1xuICAgKiBleGFjdGx5IHRoZSBzdGFsZSBoYW5kbGUgdGhlIHBsdWdpbi1hcGkgcmVnaXN0cnkncyByZXZvY2FibGUgaGFuZGxlcyBleGlzdCB0byBwcmV2ZW50LiBSZWFjaCB0aGUgQVBJXG4gICAqIHRocm91Z2ggYHdhdGNoUGx1Z2luQXBpYCBpbnN0ZWFkLCB3aG9zZSByZWZlcmVuY2Ugc3RheXMgY29ycmVjdCBhY3Jvc3MgdW5sb2FkIGFuZCByZS1lbmFibGUuXG4gICAqL1xuICByZWFkb25seSBhcGlWZXJzaW9uczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBpZHMgb2YgdGhlIHBsdWdpbnMgdGhpcyBvbmUgZGVjbGFyZXMgYXMgbWFuZGF0b3J5IGRlcGVuZGVuY2llcywgZW1wdHkgd2hlbiBpdCBkZWNsYXJlcyBub25lLlxuICAgKlxuICAgKiBQcmVzZW50IHNvIHRoZSByZWxhdGlvbnNoaXAgY2FuIGJlIHJlYWQgZnJvbSB0aGUgT1RIRVIgZW5kOiBhIHByb3ZpZGVyIGhhcyBubyB3YXkgdG8gYXNrIHdobyBkZXBlbmRzXG4gICAqIG9uIGl0IOKAlCB0aGUgcmVnaXN0cnkgb25seSBhbnN3ZXJzIGNvbnN1bWVyLXRvLXByb3ZpZGVyIOKAlCBhbmQgXCJ3aGljaCBpbnN0YWxsZWQgcGx1Z2lucyBuZWVkIHRoaXMgb25lXCJcbiAgICogaXMgd2hhdCBsZXRzIGEgcHJvdmlkZXIncyBzZXR0aW5ncyB0YWIgdGVsbCB0aGUgdXNlciB3aHkgaXQgaXMgaW4gdGhlaXIgdmF1bHQgYXQgYWxsLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwZW5kZW5jeVBsdWdpbklkczogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4ncyBgbWFuaWZlc3QuaWRgLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbidzIGBtYW5pZmVzdC5uYW1lYCwgZm9yIGRpc3BsYXkuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4ncyBgbWFuaWZlc3QudmVyc2lvbmAuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5WZXJzaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHRyaWdnZXJQbHVnaW5MaWZlY3ljbGVFdmVudH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJpZ2dlclBsdWdpbkxpZmVjeWNsZUV2ZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2Ugd2hvc2Ugd29ya3NwYWNlIGNhcnJpZXMgdGhlIGJyb2FkY2FzdC5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgdG8gdHJpZ2dlci5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IFBsdWdpbkxpZmVjeWNsZUV2ZW50TmFtZTtcblxuICAvKipcbiAgICogVGhlIHBheWxvYWQgZGVzY3JpYmluZyB0aGUgcGx1Z2luLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF5bG9hZDogUGx1Z2luTGlmZWN5Y2xlRXZlbnRQYXlsb2FkO1xufVxuXG4vKipcbiAqIFRyaWdnZXJlZCBvbmNlIGEgcGx1Z2luIGhhcyBmaW5pc2hlZCBsb2FkaW5nIEFORCBwdWJsaXNoZWQgZXZlcnkgQVBJIGl0IGRlY2xhcmVzLCBzbyBhIGxpc3RlbmVyIG1heSBjYWxsXG4gKiB0aG9zZSBBUElzIGltbWVkaWF0ZWx5LlxuICpcbiAqIE5hbWVzcGFjZWQgYnkgdGhlIHBhY2thZ2UgbmFtZSByYXRoZXIgdGhhbiBieSBhbiBhYmJyZXZpYXRpb24gb2YgaXQ6IHRoZSBldmVudCBpcyBnbG9iYWwgdG8gdGhlIHZhdWx0XG4gKiBhbmQgYWltZWQgYXQgcGx1Z2luIGF1dGhvcnMgd2hvIGhhdmUgbmV2ZXIgaGVhcmQgb2YgdGhpcyBsaWJyYXJ5LCBzbyB0aGUgcHJlZml4IGhhcyB0byBpZGVudGlmeSBpdHNlbGYuXG4gKi9cbmV4cG9ydCBjb25zdCBQTFVHSU5fTE9BREVEX0VWRU5UX05BTUUgPSAnb2JzaWRpYW4tZGV2LXV0aWxzOnBsdWdpbi1sb2FkZWQnO1xuXG4vKipcbiAqIFRyaWdnZXJlZCBhcyBhIHBsdWdpbiB1bmxvYWRzIOKAlCB3aGV0aGVyIHRoZSB1c2VyIGRpc2FibGVkIGl0LCB1bmluc3RhbGxlZCBpdCwgb3IgT2JzaWRpYW4gaXMgc2h1dHRpbmdcbiAqIGRvd24uIEl0cyBBUElzIGFyZSByZXZva2VkIGJ5IHRoZSB0aW1lIGEgbGlzdGVuZXIgcnVucy5cbiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9VTkxPQURFRF9FVkVOVF9OQU1FID0gJ29ic2lkaWFuLWRldi11dGlsczpwbHVnaW4tdW5sb2FkZWQnO1xuXG5kZWNsYXJlIG1vZHVsZSAnb2JzaWRpYW4nIHtcbiAgaW50ZXJmYWNlIFdvcmtzcGFjZSB7XG4gICAgLyoqXG4gICAgICogU3Vic2NyaWJlcyB0byBhIHBsdWdpbiBmaW5pc2hpbmcgaXRzIGxvYWQsIG9yIHRvIG9uZSB1bmxvYWRpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmFtZSAtIFNob3VsZCBiZSB7QGxpbmsgUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FfSBvciB7QGxpbmsgUExVR0lOX1VOTE9BREVEX0VWRU5UX05BTUV9LlxuICAgICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayByZWNlaXZpbmcgdGhlIHBsdWdpbidzIHBheWxvYWQuXG4gICAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUgY29udGV4dCBwYXNzZWQgYXMgYHRoaXNgIHRvIHRoZSBgY2FsbGJhY2tgIGZ1bmN0aW9uLlxuICAgICAqIEByZXR1cm5zIFRoZSBldmVudCByZWZlcmVuY2UuXG4gICAgICovXG4gICAgLypcbiAgICAgKiBBbiBhdWdtZW50YXRpb24gb2YgYW4gRVhJU1RJTkcgb3ZlcmxvYWQgc2V0IGhhcyB0byBzdGF5IGEgbWV0aG9kIHNpZ25hdHVyZS4gQSBwcm9wZXJ0eSBtZW1iZXIgZG9lcyBub3QgbWVyZ2UgaW50b1xuICAgICAqIGBXb3Jrc3BhY2Uub25gJ3Mgb3ZlcmxvYWRzLCBhbmQgVHlwZVNjcmlwdCBzYXlzIHNvIG5vd2hlcmUgbmVhciBoZXJlOiB0aGUgZGVjbGFyYXRpb24gaXRzZWxmIGNvbXBpbGVzLCBhbmQgZXZlcnlcbiAgICAgKiBjYWxsIHNpdGUgbG9zZXMgdGhlIHNpZ25hdHVyZSBpbnN0ZWFkIOKAlCBgb24oUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FLCAuLi4pYCBmYWlscyB3aXRoIFwidGhlIGxhc3Qgb3ZlcmxvYWQgZ2F2ZSB0aGVcbiAgICAgKiBmb2xsb3dpbmcgZXJyb3JcIi4gVGhlIHJ1bGUgcmVwb3J0cyB0aGlzIG9uZSB3aXRob3V0IGEgZml4IGZvciB0aGUgc2FtZSByZWFzb24sIHNvIHRoZSBkaXNhYmxlIGJlbG93IGlzIHRoZSBhbnN3ZXJcbiAgICAgKiByYXRoZXIgdGhhbiBhIGRlZmVycmFsLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWV0aG9kLXNpZ25hdHVyZS1zdHlsZSAtLSBBIHByb3BlcnR5IG1lbWJlciBkb2VzIG5vdCBtZXJnZSBpbnRvIGFuIGV4aXN0aW5nIG92ZXJsb2FkIHNldC4gU2VlIGFib3ZlLlxuICAgIG9uKG5hbWU6IFBsdWdpbkxpZmVjeWNsZUV2ZW50TmFtZSwgY2FsbGJhY2s6IChwYXlsb2FkOiBQbHVnaW5MaWZlY3ljbGVFdmVudFBheWxvYWQpID0+IHVua25vd24sIGNvbnRleHQ/OiB1bmtub3duKTogRXZlbnRSZWY7XG4gIH1cbn1cblxuLyoqXG4gKiBUcmlnZ2VycyBvbmUgb2YgdGhlIHR3byBsaWZlY3ljbGUgZXZlbnRzIG9uIHRoZSBhcHAncyB3b3Jrc3BhY2UuXG4gKlxuICogQSB0aGluIHR5cGVkIHdyYXBwZXIgb3ZlciBgV29ya3NwYWNlLnRyaWdnZXJgLCB3aGljaCBhY2NlcHRzIGFueSBldmVudCBuYW1lIGFuZCBhbnkgYXJndW1lbnRzLCBzbyB0aGF0XG4gKiB0aGUgb25lIHBsYWNlIGEgcGF5bG9hZCBpcyBjb25zdHJ1Y3RlZCBpcyBjaGVja2VkIGFnYWluc3Qge0BsaW5rIFBsdWdpbkxpZmVjeWNsZUV2ZW50UGF5bG9hZH0uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgVHJpZ2dlclBsdWdpbkxpZmVjeWNsZUV2ZW50UGFyYW1zfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaWdnZXJQbHVnaW5MaWZlY3ljbGVFdmVudChwYXJhbXM6IFRyaWdnZXJQbHVnaW5MaWZlY3ljbGVFdmVudFBhcmFtcyk6IHZvaWQge1xuICBwYXJhbXMuYXBwLndvcmtzcGFjZS50cmlnZ2VyKHBhcmFtcy5uYW1lLCBwYXJhbXMucGF5bG9hZCk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBNkdPLE1BQU0sMkJBQTJCO0FBTWpDLE1BQU0sNkJBQTZCO0FBZ0NuQyxTQUFTLDRCQUE0QixRQUFpRDtBQUMzRixTQUFPLElBQUksVUFBVSxRQUFRLE9BQU8sTUFBTSxPQUFPLE9BQU87QUFDMUQ7IiwibmFtZXMiOltdfQ==
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW4vcGx1Z2luLWxpZmVjeWNsZS1ldmVudHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSBsaWZlY3ljbGUgYnJvYWRjYXN0IGV2ZXJ5IHtAbGluayBQbHVnaW5CYXNlfSBtYWtlczogYG9ic2lkaWFuLWxpYjpwbHVnaW4tbG9hZGVkYCB3aGVuIGl0IGhhc1xuICogZmluaXNoZWQgbG9hZGluZyBhbmQgYG9ic2lkaWFuLWxpYjpwbHVnaW4tdW5sb2FkZWRgIHdoZW4gaXQgZ29lcyBhd2F5LiBFYWNoIGlzIGFsc28gdHJpZ2dlcmVkIHVuZGVyIGl0c1xuICogbGVnYWN5IG5hbWUsIGBvYnNpZGlhbi1kZXYtdXRpbHM6cGx1Z2luLWxvYWRlZGAgLyBgb2JzaWRpYW4tZGV2LXV0aWxzOnBsdWdpbi11bmxvYWRlZGAsIGZvciBnb29kLlxuICpcbiAqIE9ic2lkaWFuIGdpdmVzIGEgcGx1Z2luIG5vIHdheSB0byBsZWFybiB0aGF0IEFOT1RIRVIgcGx1Z2luIHdhcyBlbmFibGVkIG9yIGRpc2FibGVkIOKAlCB0aGVyZSBpcyBubyBzdWNoXG4gKiBldmVudCBvbiBgYXBwLnBsdWdpbnNgLCBhbmQgYSBwbHVnaW4ncyBvd24gYEV2ZW50c2Agc291cmNlIGNhbm5vdCBoZWxwIGEgbGlzdGVuZXIgdGhhdCBkb2VzIG5vdCB5ZXQgaG9sZFxuICogdGhlIGluc3RhbmNlLiBTbyB0aGUgYnJvYWRjYXN0IGdvZXMgdGhyb3VnaCBgYXBwLndvcmtzcGFjZWAsIHdoaWNoIGlzIG9uZSBvYmplY3QgZXZlcnkgcGx1Z2luIGluIHRoZVxuICogdmF1bHQgY2FuIHJlYWNoLiBEZWxpYmVyYXRlbHkgTk9UIHRoZSBgZ2xvYmFsVGhpcy5fX29ic2lkaWFuRGV2VXRpbHNgIGJhZyB0aGUgcmVzdCBvZiB0aGUgbGlicmFyeSBzaGFyZXNcbiAqIGl0cyBzdGF0ZSB0aHJvdWdoOiBhIGxpc3RlbmVyIHRoZXJlIG5lZWRzIGl0cyBvd24gY29weSBvZiB0aGlzIGxpYnJhcnksIGFuZCB0aGVzZSBldmVudHMgYXJlIG1lYW50IHRvIGJlXG4gKiBjb25zdW1hYmxlIGJ5IGFueSBwbHVnaW4gYXQgYWxsLlxuICpcbiAqIFRoZSBuYW1lcyBhcmUgcGFzdCB0ZW5zZSBiZWNhdXNlIGEgYnJvYWRjYXN0IHN0YXRlcyBzb21ldGhpbmcgdGhhdCBoYXMgYWxyZWFkeSBoYXBwZW5lZC4gYGxvYWRlZGAgaW5cbiAqIHBhcnRpY3VsYXIgY2FycmllcyBhIGd1YXJhbnRlZTogaXQgaXMgdHJpZ2dlcmVkIG9ubHkgYWZ0ZXIgZXZlcnkgQVBJIHRoZSBwbHVnaW4gZGVjbGFyZXMgaGFzIGJlZW5cbiAqIHB1Ymxpc2hlZCwgc28gYSBsaXN0ZW5lciBtYXkgY2FsbCB0aGVtIGltbWVkaWF0ZWx5LlxuICpcbiAqIEJvdGggdGhlIGV2ZW50IG5hbWVzIGFuZCB7QGxpbmsgUGx1Z2luTGlmZWN5Y2xlRXZlbnRQYXlsb2FkfSBhcmUgYSBDUk9TUy1WRVJTSU9OIENPTlRSQUNULiBDb3BpZXMgb2ZcbiAqIHRoaXMgbGlicmFyeSBhdCBkaWZmZXJlbnQgdmVyc2lvbnMgcHVibGlzaCBhbmQgY29uc3VtZSB0aGVtIHNpZGUgYnkgc2lkZSBpbiBvbmUgdmF1bHQsIHNvIG5laXRoZXIgbWF5XG4gKiBjaGFuZ2UgaW5jb21wYXRpYmx5OiBwbGFpbiBkYXRhIG9ubHksIGFuZCBuZXcgcGF5bG9hZCBmaWVsZHMgb25seSBldmVyIGFkZGVkLlxuICpcbiAqIFRoYXQgY29udHJhY3QgaXMgYWxzbyBQVUJMSVNIRUQsIGFzIG9mIHRoZSBgUGx1Z2luIEFQSSBwcm90b2NvbGAgZ3VpZGU6IHRoaXJkLXBhcnR5IHBsdWdpbnMgdGhhdCB3aWxsXG4gKiBuZXZlciBpbnN0YWxsIHRoaXMgbGlicmFyeSBhcmUgdG9sZCB0byBoYXJkY29kZSB0aGVzZSBzdHJpbmdzIGFuZCB0aGlzIHBheWxvYWQgc2hhcGUuIFB1Ymxpc2hpbmcgaXRcbiAqIGFkZGVkIG5vIG5ldyBjb25zdHJhaW50IOKAlCB0aGUgY3Jvc3MtY29weSBvbmUgYWJvdmUgYWxyZWFkeSBmb3JiYWRlIGV2ZXJ5IGNoYW5nZSBhbiBvdXRzaWRlciBjb3VsZFxuICogbm90aWNlLlxuICpcbiAqIFRoZSByZW5hbWUgdG8gYG9ic2lkaWFuLWxpYjpgIGlzIGFkZGl0aXZlIGZvciB0aGF0IHJlYXNvbi4gQWxyZWFkeS1yZWxlYXNlZCBjb3BpZXMgZW1pdCBhbmQgaGVhciBvbmx5IHRoZVxuICogbGVnYWN5IG5hbWVzLCBzbyBhIGN1cnJlbnQgY29weSB0cmlnZ2VycyBib3RoLCBhbmQgcmVsYXlzIGFuIG9sZGVyIGNvcHkncyBsZWdhY3kgZXZlbnQgdG8gdGhlIGN1cnJlbnRcbiAqIG5hbWUgKHtAbGluayByZWdpc3RlclBsdWdpbkxpZmVjeWNsZUV2ZW50UmVsYXl9KS4gQSBsaXN0ZW5lciB0aGVyZWZvcmUgbmVlZHMgZXhhY3RseSBPTkUgb2YgdGhlIHR3byBuYW1lczpcbiAqIHRoZSBsZWdhY3kgb25lIGhlYXJzIGV2ZXJ5IGNvcHkgZXZlciByZWxlYXNlZCwgYW5kIHRoZSBjdXJyZW50IG9uZSBoZWFycyBldmVyeSBjb3B5IHdoZW5ldmVyIGF0IGxlYXN0IG9uZVxuICogY3VycmVudCBjb3B5IGlzIGxvYWRlZCB0byByZWxheS4gTGlzdGVuaW5nIG9uIGJvdGggaGVhcnMgZXZlcnkgY3VycmVudCBjb3B5IHR3aWNlLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBDb21wb25lbnRcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuLi9vYnNpZGlhbi1kZXYtdXRpbHMtc3RhdGUudHMnO1xuXG4vKipcbiAqIFRoZSBuYW1lIG9mIGVpdGhlciBsaWZlY3ljbGUgZXZlbnQuXG4gKi9cbmV4cG9ydCB0eXBlIFBsdWdpbkxpZmVjeWNsZUV2ZW50TmFtZSA9IHR5cGVvZiBQTFVHSU5fTE9BREVEX0VWRU5UX05BTUUgfCB0eXBlb2YgUExVR0lOX1VOTE9BREVEX0VWRU5UX05BTUU7XG5cbi8qKlxuICogVGhlIHBheWxvYWQgb2Yge0BsaW5rIFBMVUdJTl9MT0FERURfRVZFTlRfTkFNRX0gYW5kIHtAbGluayBQTFVHSU5fVU5MT0FERURfRVZFTlRfTkFNRX0uXG4gKlxuICogUGxhaW4gZGF0YSBieSBkZXNpZ24g4oCUIG5vIGNsYXNzIGluc3RhbmNlcyBhbmQgbm8gdHlwZXMgb3duZWQgYnkgdGhpcyBsaWJyYXJ5IOKAlCBiZWNhdXNlIGl0IGNyb3NzZXNcbiAqIGJldHdlZW4gaW5kZXBlbmRlbnRseSBidW5kbGVkIGNvcGllcyBvZiBpdCwgYW5kIGJldHdlZW4gcGx1Z2lucyB0aGF0IGRvIG5vdCB1c2UgaXQgYXQgYWxsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbkxpZmVjeWNsZUV2ZW50UGF5bG9hZCB7XG4gIC8qKlxuICAgKiBUaGUgY29udHJhY3QgdmVyc2lvbnMgdGhlIHBsdWdpbiBwdWJsaXNoZWQsIGVtcHR5IHdoZW4gaXQgcHVibGlzaGVzIG5vIEFQSS5cbiAgICpcbiAgICogQW4gYXJyYXkgcmF0aGVyIHRoYW4gYSBzaW5nbGUgdmVyc2lvbiBiZWNhdXNlIGEgcHJvdmlkZXIgbWF5IHB1Ymxpc2ggc2V2ZXJhbCBjb250cmFjdCB2ZXJzaW9ucyBzaWRlIGJ5XG4gICAqIHNpZGUsIHNvIGNvbnN1bWVycyBwaW5uZWQgdG8gYW4gb2xkZXIgcmFuZ2Uga2VlcCB3b3JraW5nIGFjcm9zcyBhIGJyZWFraW5nIGNoYW5nZS5cbiAgICpcbiAgICogVGhlIEFQSSBvYmplY3RzIHRoZW1zZWx2ZXMgYXJlIGRlbGliZXJhdGVseSBOT1QgaGVyZS4gQSBoYW5kbGUgZGVsaXZlcmVkIGJ5IGEgb25lLXNob3QgZXZlbnQgaXMgYVxuICAgKiBwcm9iZTogaXQgYW5zd2VycyBcIm5vd1wiIGFuZCBuZXZlciBzYXlzIHdoZW4gXCJub3dcIiBjaGFuZ2VkLCBhbmQgb25lIHRoYXQgb3V0bGl2ZXMgdGhlIHByb3ZpZGVyIGlzXG4gICAqIGV4YWN0bHkgdGhlIHN0YWxlIGhhbmRsZSB0aGUgcGx1Z2luLWFwaSByZWdpc3RyeSdzIHJldm9jYWJsZSBoYW5kbGVzIGV4aXN0IHRvIHByZXZlbnQuIFJlYWNoIHRoZSBBUElcbiAgICogdGhyb3VnaCBgd2F0Y2hQbHVnaW5BcGlgIGluc3RlYWQsIHdob3NlIHJlZmVyZW5jZSBzdGF5cyBjb3JyZWN0IGFjcm9zcyB1bmxvYWQgYW5kIHJlLWVuYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwaVZlcnNpb25zOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGlkcyBvZiB0aGUgcGx1Z2lucyB0aGlzIG9uZSBkZWNsYXJlcyBhcyBtYW5kYXRvcnkgZGVwZW5kZW5jaWVzLCBlbXB0eSB3aGVuIGl0IGRlY2xhcmVzIG5vbmUuXG4gICAqXG4gICAqIFByZXNlbnQgc28gdGhlIHJlbGF0aW9uc2hpcCBjYW4gYmUgcmVhZCBmcm9tIHRoZSBPVEhFUiBlbmQ6IGEgcHJvdmlkZXIgaGFzIG5vIHdheSB0byBhc2sgd2hvIGRlcGVuZHNcbiAgICogb24gaXQg4oCUIHRoZSByZWdpc3RyeSBvbmx5IGFuc3dlcnMgY29uc3VtZXItdG8tcHJvdmlkZXIg4oCUIGFuZCBcIndoaWNoIGluc3RhbGxlZCBwbHVnaW5zIG5lZWQgdGhpcyBvbmVcIlxuICAgKiBpcyB3aGF0IGxldHMgYSBwcm92aWRlcidzIHNldHRpbmdzIHRhYiB0ZWxsIHRoZSB1c2VyIHdoeSBpdCBpcyBpbiB0aGVpciB2YXVsdCBhdCBhbGwuXG4gICAqL1xuICByZWFkb25seSBkZXBlbmRlbmN5UGx1Z2luSWRzOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHBsdWdpbidzIGBtYW5pZmVzdC5pZGAuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luJ3MgYG1hbmlmZXN0Lm5hbWVgLCBmb3IgZGlzcGxheS5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbidzIGBtYW5pZmVzdC52ZXJzaW9uYC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpblZlcnNpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVnaXN0ZXJQbHVnaW5MaWZlY3ljbGVFdmVudFJlbGF5fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlclBsdWdpbkxpZmVjeWNsZUV2ZW50UmVsYXlQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZSB3aG9zZSB3b3Jrc3BhY2UgY2FycmllcyB0aGUgYnJvYWRjYXN0LlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdGhhdCBvd25zIHRoZSByZWxheTogaXQgcmVsYXlzIHdoaWxlIHRoZSBjb21wb25lbnQgaXMgbG9hZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50OiBDb21wb25lbnQ7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHRyaWdnZXJQbHVnaW5MaWZlY3ljbGVFdmVudH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJpZ2dlclBsdWdpbkxpZmVjeWNsZUV2ZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2Ugd2hvc2Ugd29ya3NwYWNlIGNhcnJpZXMgdGhlIGJyb2FkY2FzdC5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgdG8gdHJpZ2dlci5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IFBsdWdpbkxpZmVjeWNsZUV2ZW50TmFtZTtcblxuICAvKipcbiAgICogVGhlIHBheWxvYWQgZGVzY3JpYmluZyB0aGUgcGx1Z2luLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF5bG9hZDogUGx1Z2luTGlmZWN5Y2xlRXZlbnRQYXlsb2FkO1xufVxuXG50eXBlIEFubm91bmNlZFBheWxvYWRzID0gUmVjb3JkPFBsdWdpbkxpZmVjeWNsZUV2ZW50TmFtZSwgV2Vha1NldDxvYmplY3Q+PjtcblxuLyoqXG4gKiBUcmlnZ2VyZWQgb25jZSBhIHBsdWdpbiBoYXMgZmluaXNoZWQgbG9hZGluZyBBTkQgcHVibGlzaGVkIGV2ZXJ5IEFQSSBpdCBkZWNsYXJlcywgc28gYSBsaXN0ZW5lciBtYXkgY2FsbFxuICogdGhvc2UgQVBJcyBpbW1lZGlhdGVseS5cbiAqXG4gKiBOYW1lc3BhY2VkIGJ5IHRoZSBwYWNrYWdlIG5hbWUgcmF0aGVyIHRoYW4gYnkgYW4gYWJicmV2aWF0aW9uIG9mIGl0OiB0aGUgZXZlbnQgaXMgZ2xvYmFsIHRvIHRoZSB2YXVsdFxuICogYW5kIGFpbWVkIGF0IHBsdWdpbiBhdXRob3JzIHdobyBoYXZlIG5ldmVyIGhlYXJkIG9mIHRoaXMgbGlicmFyeSwgc28gdGhlIHByZWZpeCBoYXMgdG8gaWRlbnRpZnkgaXRzZWxmLlxuICovXG5leHBvcnQgY29uc3QgUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FID0gJ29ic2lkaWFuLWxpYjpwbHVnaW4tbG9hZGVkJztcblxuLyoqXG4gKiBUcmlnZ2VyZWQgYXMgYSBwbHVnaW4gdW5sb2FkcyDigJQgd2hldGhlciB0aGUgdXNlciBkaXNhYmxlZCBpdCwgdW5pbnN0YWxsZWQgaXQsIG9yIE9ic2lkaWFuIGlzIHNodXR0aW5nXG4gKiBkb3duLiBJdHMgQVBJcyBhcmUgcmV2b2tlZCBieSB0aGUgdGltZSBhIGxpc3RlbmVyIHJ1bnMuXG4gKi9cbmV4cG9ydCBjb25zdCBQTFVHSU5fVU5MT0FERURfRVZFTlRfTkFNRSA9ICdvYnNpZGlhbi1saWI6cGx1Z2luLXVubG9hZGVkJztcblxuLyoqXG4gKiBUaGUgbGVnYWN5IG5hbWUgb2Yge0BsaW5rIFBMVUdJTl9MT0FERURfRVZFTlRfTkFNRX0sIGZyb20gYmVmb3JlIHRoZSBsaWJyYXJ5IHdhcyByZW5hbWVkLiBJdCBpcyBzdGlsbFxuICogdHJpZ2dlcmVkLCBmb3IgZ29vZCwgYmVjYXVzZSBvbGRlciBjb3BpZXMgbGlzdGVuIG9ubHkgb24gaXQuXG4gKi9cbmV4cG9ydCBjb25zdCBMRUdBQ1lfUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FID0gJ29ic2lkaWFuLWRldi11dGlsczpwbHVnaW4tbG9hZGVkJztcblxuLyoqXG4gKiBUaGUgbGVnYWN5IG5hbWUgb2Yge0BsaW5rIFBMVUdJTl9VTkxPQURFRF9FVkVOVF9OQU1FfSwgZnJvbSBiZWZvcmUgdGhlIGxpYnJhcnkgd2FzIHJlbmFtZWQuIEl0IGlzIHN0aWxsXG4gKiB0cmlnZ2VyZWQsIGZvciBnb29kLCBiZWNhdXNlIG9sZGVyIGNvcGllcyBsaXN0ZW4gb25seSBvbiBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IExFR0FDWV9QTFVHSU5fVU5MT0FERURfRVZFTlRfTkFNRSA9ICdvYnNpZGlhbi1kZXYtdXRpbHM6cGx1Z2luLXVubG9hZGVkJztcblxuLyoqXG4gKiBUaGUgbGVnYWN5IG5hbWUgb2YgZWl0aGVyIGxpZmVjeWNsZSBldmVudC5cbiAqL1xuZXhwb3J0IHR5cGUgTGVnYWN5UGx1Z2luTGlmZWN5Y2xlRXZlbnROYW1lID0gdHlwZW9mIExFR0FDWV9QTFVHSU5fTE9BREVEX0VWRU5UX05BTUUgfCB0eXBlb2YgTEVHQUNZX1BMVUdJTl9VTkxPQURFRF9FVkVOVF9OQU1FO1xuXG5jb25zdCBQTFVHSU5fTElGRUNZQ0xFX0VWRU5UX05BTUVTOiByZWFkb25seSBQbHVnaW5MaWZlY3ljbGVFdmVudE5hbWVbXSA9IFtQTFVHSU5fTE9BREVEX0VWRU5UX05BTUUsIFBMVUdJTl9VTkxPQURFRF9FVkVOVF9OQU1FXTtcblxuY29uc3QgTEVHQUNZX1BMVUdJTl9MSUZFQ1lDTEVfRVZFTlRfTkFNRVM6IFJlYWRvbmx5PFJlY29yZDxQbHVnaW5MaWZlY3ljbGVFdmVudE5hbWUsIExlZ2FjeVBsdWdpbkxpZmVjeWNsZUV2ZW50TmFtZT4+ID0ge1xuICBbUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FXTogTEVHQUNZX1BMVUdJTl9MT0FERURfRVZFTlRfTkFNRSxcbiAgW1BMVUdJTl9VTkxPQURFRF9FVkVOVF9OQU1FXTogTEVHQUNZX1BMVUdJTl9VTkxPQURFRF9FVkVOVF9OQU1FXG59O1xuXG4vKipcbiAqIFRoZSBzaGFyZWQtc3RhdGUga2V5IG9mIHRoZSBwYXlsb2FkcyBhbHJlYWR5IGFubm91bmNlZCB1bmRlciB0aGUgY3VycmVudCBuYW1lcy4gU2hhcmVkIGJldHdlZW4gY29waWVzIG9mXG4gKiB0aGlzIGxpYnJhcnksIHNvIGl0IGlzIHZlcnNpb25lZDogYSBjaGFuZ2UgdG8gd2hhdCBpdCBob2xkcyB0YWtlcyBhIG5ldyBrZXkuXG4gKi9cbmNvbnN0IEFOTk9VTkNFRF9QQVlMT0FEU19TVEFURV9LRVkgPSAncGx1Z2luTGlmZWN5Y2xlQW5ub3VuY2VkUGF5bG9hZHNWMSc7XG5cbmRlY2xhcmUgbW9kdWxlICdvYnNpZGlhbicge1xuICBpbnRlcmZhY2UgV29ya3NwYWNlIHtcbiAgICAvKipcbiAgICAgKiBTdWJzY3JpYmVzIHRvIGEgcGx1Z2luIGZpbmlzaGluZyBpdHMgbG9hZCwgb3IgdG8gb25lIHVubG9hZGluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuYW1lIC0gU2hvdWxkIGJlIHtAbGluayBQTFVHSU5fTE9BREVEX0VWRU5UX05BTUV9IG9yIHtAbGluayBQTFVHSU5fVU5MT0FERURfRVZFTlRfTkFNRX0sIG9yIG9uZSBvZiB0aGVpclxuICAgICAqICAgbGVnYWN5IG5hbWVzLlxuICAgICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayByZWNlaXZpbmcgdGhlIHBsdWdpbidzIHBheWxvYWQuXG4gICAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUgY29udGV4dCBwYXNzZWQgYXMgYHRoaXNgIHRvIHRoZSBgY2FsbGJhY2tgIGZ1bmN0aW9uLlxuICAgICAqIEByZXR1cm5zIFRoZSBldmVudCByZWZlcmVuY2UuXG4gICAgICovXG4gICAgLypcbiAgICAgKiBBbiBhdWdtZW50YXRpb24gb2YgYW4gRVhJU1RJTkcgb3ZlcmxvYWQgc2V0IGhhcyB0byBzdGF5IGEgbWV0aG9kIHNpZ25hdHVyZS4gQSBwcm9wZXJ0eSBtZW1iZXIgZG9lcyBub3QgbWVyZ2UgaW50b1xuICAgICAqIGBXb3Jrc3BhY2Uub25gJ3Mgb3ZlcmxvYWRzLCBhbmQgVHlwZVNjcmlwdCBzYXlzIHNvIG5vd2hlcmUgbmVhciBoZXJlOiB0aGUgZGVjbGFyYXRpb24gaXRzZWxmIGNvbXBpbGVzLCBhbmQgZXZlcnlcbiAgICAgKiBjYWxsIHNpdGUgbG9zZXMgdGhlIHNpZ25hdHVyZSBpbnN0ZWFkIOKAlCBgb24oUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FLCAuLi4pYCBmYWlscyB3aXRoIFwidGhlIGxhc3Qgb3ZlcmxvYWQgZ2F2ZSB0aGVcbiAgICAgKiBmb2xsb3dpbmcgZXJyb3JcIi4gVGhlIHJ1bGUgcmVwb3J0cyB0aGlzIG9uZSB3aXRob3V0IGEgZml4IGZvciB0aGUgc2FtZSByZWFzb24sIHNvIHRoZSBkaXNhYmxlIGJlbG93IGlzIHRoZSBhbnN3ZXJcbiAgICAgKiByYXRoZXIgdGhhbiBhIGRlZmVycmFsLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWV0aG9kLXNpZ25hdHVyZS1zdHlsZSAtLSBBIHByb3BlcnR5IG1lbWJlciBkb2VzIG5vdCBtZXJnZSBpbnRvIGFuIGV4aXN0aW5nIG92ZXJsb2FkIHNldC4gU2VlIGFib3ZlLlxuICAgIG9uKFxuICAgICAgbmFtZTogTGVnYWN5UGx1Z2luTGlmZWN5Y2xlRXZlbnROYW1lIHwgUGx1Z2luTGlmZWN5Y2xlRXZlbnROYW1lLFxuICAgICAgY2FsbGJhY2s6IChwYXlsb2FkOiBQbHVnaW5MaWZlY3ljbGVFdmVudFBheWxvYWQpID0+IHVua25vd24sXG4gICAgICBjb250ZXh0PzogdW5rbm93blxuICAgICk6IEV2ZW50UmVmO1xuICB9XG59XG5cbi8qKlxuICogUmVsYXlzIGFuIG9sZGVyIGNvcHkncyBsaWZlY3ljbGUgZXZlbnRzIHRvIHRoZSBjdXJyZW50IG5hbWVzLCBmb3IgYXMgbG9uZyBhcyBgY29tcG9uZW50YCBpcyBsb2FkZWQuXG4gKlxuICogQW4gb2xkZXIgY29weSBvZiB0aGlzIGxpYnJhcnkgZW1pdHMgb25seSB0aGUgbGVnYWN5IG5hbWVzLCBzbyB3aXRob3V0IGEgcmVsYXkgYSBsaXN0ZW5lciBvblxuICoge0BsaW5rIFBMVUdJTl9MT0FERURfRVZFTlRfTkFNRX0gd291bGQgbmV2ZXIgaGVhciBhYm91dCBpdC4gVGhlIHJlbGF5IGxpc3RlbnMgb24gZWFjaCBsZWdhY3kgbmFtZSBhbmRcbiAqIHJlLXRyaWdnZXJzIHRoZSBjdXJyZW50IG9uZSwgdW5sZXNzIHRoZSBwYXlsb2FkIHdhcyBhbHJlYWR5IGFubm91bmNlZCB1bmRlciBpdC4gQSBjdXJyZW50IGNvcHkgYW5ub3VuY2VzXG4gKiB1bmRlciBib3RoIG5hbWVzIChzZWUge0BsaW5rIHRyaWdnZXJQbHVnaW5MaWZlY3ljbGVFdmVudH0pIGFuZCBtYXJrcyBpdHMgcGF5bG9hZCBmaXJzdCwgc28gaXRzIG93biBsZWdhY3lcbiAqIGVjaG8gaXMgc2tpcHBlZC4gRXZlcnkgcGx1Z2luIGJ1aWx0IG9uIHRoaXMgbGlicmFyeSByZWdpc3RlcnMgYSByZWxheSwgYW5kIHRoZXkgc2hhcmUgb25lIHNldCBvZiBtYXJrcyxcbiAqIHNvIHRoZSBmaXJzdCByZWxheSB0byBzZWUgYW4gb2xkZXIgY29weSdzIGV2ZW50IHJlLXRyaWdnZXJzIGl0IGFuZCB0aGUgcmVzdCBza2lwIGl0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIFJlZ2lzdGVyUGx1Z2luTGlmZWN5Y2xlRXZlbnRSZWxheVBhcmFtc30uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclBsdWdpbkxpZmVjeWNsZUV2ZW50UmVsYXkocGFyYW1zOiBSZWdpc3RlclBsdWdpbkxpZmVjeWNsZUV2ZW50UmVsYXlQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgeyBhcHAsIGNvbXBvbmVudCB9ID0gcGFyYW1zO1xuICBmb3IgKGNvbnN0IG5hbWUgb2YgUExVR0lOX0xJRkVDWUNMRV9FVkVOVF9OQU1FUykge1xuICAgIGNvbXBvbmVudC5yZWdpc3RlckV2ZW50KGFwcC53b3Jrc3BhY2Uub24oTEVHQUNZX1BMVUdJTl9MSUZFQ1lDTEVfRVZFTlRfTkFNRVNbbmFtZV0sIChwYXlsb2FkOiB1bmtub3duKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHBheWxvYWQgIT09ICdvYmplY3QnIHx8IHBheWxvYWQgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhbm5vdW5jZWRQYXlsb2FkcyA9IGdldEFubm91bmNlZFBheWxvYWRzKG5hbWUpO1xuICAgICAgaWYgKGFubm91bmNlZFBheWxvYWRzLmhhcyhwYXlsb2FkKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGFubm91bmNlZFBheWxvYWRzLmFkZChwYXlsb2FkKTtcbiAgICAgIGFwcC53b3Jrc3BhY2UudHJpZ2dlcihuYW1lLCBwYXlsb2FkKTtcbiAgICB9KSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUcmlnZ2VycyBvbmUgb2YgdGhlIHR3byBsaWZlY3ljbGUgZXZlbnRzIG9uIHRoZSBhcHAncyB3b3Jrc3BhY2UsIHVuZGVyIGl0cyBjdXJyZW50IG5hbWUgYW5kIHRoZW4gdW5kZXJcbiAqIGl0cyBsZWdhY3kgbmFtZS5cbiAqXG4gKiBCb3RoLCBzbyBhIGxpc3RlbmVyIHdyaXR0ZW4gYWdhaW5zdCBlaXRoZXIgbmFtZSBoZWFycyBldmVyeSBwbHVnaW4gYnVpbHQgb24gdGhpcyBsaWJyYXJ5OiBvbGRlciBjb3BpZXNcbiAqIGxpc3RlbiBvbmx5IG9uIHRoZSBsZWdhY3kgbmFtZS4gVGhlIGN1cnJlbnQgbmFtZSBnb2VzIGZpcnN0IGFuZCB0aGUgcGF5bG9hZCBpcyBtYXJrZWQgYmVmb3JlIGVpdGhlciwgc29cbiAqIHRoZSByZWxheXMgKHNlZSB7QGxpbmsgcmVnaXN0ZXJQbHVnaW5MaWZlY3ljbGVFdmVudFJlbGF5fSkgc2tpcCB0aGUgbGVnYWN5IGVjaG8gaW5zdGVhZCBvZiBhbm5vdW5jaW5nIHRoZVxuICogcGx1Z2luIGEgc2Vjb25kIHRpbWUuXG4gKlxuICogT3RoZXJ3aXNlIGEgdGhpbiB0eXBlZCB3cmFwcGVyIG92ZXIgYFdvcmtzcGFjZS50cmlnZ2VyYCwgd2hpY2ggYWNjZXB0cyBhbnkgZXZlbnQgbmFtZSBhbmQgYW55IGFyZ3VtZW50cyxcbiAqIHNvIHRoYXQgdGhlIG9uZSBwbGFjZSBhIHBheWxvYWQgaXMgY29uc3RydWN0ZWQgaXMgY2hlY2tlZCBhZ2FpbnN0IHtAbGluayBQbHVnaW5MaWZlY3ljbGVFdmVudFBheWxvYWR9LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIFRyaWdnZXJQbHVnaW5MaWZlY3ljbGVFdmVudFBhcmFtc30uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmlnZ2VyUGx1Z2luTGlmZWN5Y2xlRXZlbnQocGFyYW1zOiBUcmlnZ2VyUGx1Z2luTGlmZWN5Y2xlRXZlbnRQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgeyBhcHAsIG5hbWUsIHBheWxvYWQgfSA9IHBhcmFtcztcbiAgZ2V0QW5ub3VuY2VkUGF5bG9hZHMobmFtZSkuYWRkKHBheWxvYWQpO1xuICBhcHAud29ya3NwYWNlLnRyaWdnZXIobmFtZSwgcGF5bG9hZCk7XG4gIGFwcC53b3Jrc3BhY2UudHJpZ2dlcihMRUdBQ1lfUExVR0lOX0xJRkVDWUNMRV9FVkVOVF9OQU1FU1tuYW1lXSwgcGF5bG9hZCk7XG59XG5cbmZ1bmN0aW9uIGdldEFubm91bmNlZFBheWxvYWRzKG5hbWU6IFBsdWdpbkxpZmVjeWNsZUV2ZW50TmFtZSk6IFdlYWtTZXQ8b2JqZWN0PiB7XG4gIHJldHVybiBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGU8QW5ub3VuY2VkUGF5bG9hZHM+KEFOTk9VTkNFRF9QQVlMT0FEU19TVEFURV9LRVksIHtcbiAgICBbUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FXTogbmV3IFdlYWtTZXQoKSxcbiAgICBbUExVR0lOX1VOTE9BREVEX0VWRU5UX05BTUVdOiBuZXcgV2Vha1NldCgpXG4gIH0pLnZhbHVlW25hbWVdO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXVDQSxzQ0FBeUM7QUFnR2xDLE1BQU0sMkJBQTJCO0FBTWpDLE1BQU0sNkJBQTZCO0FBTW5DLE1BQU0sa0NBQWtDO0FBTXhDLE1BQU0sb0NBQW9DO0FBT2pELE1BQU0sK0JBQW9FLENBQUMsMEJBQTBCLDBCQUEwQjtBQUUvSCxNQUFNLHNDQUFrSDtBQUFBLEVBQ3RILENBQUMsd0JBQXdCLEdBQUc7QUFBQSxFQUM1QixDQUFDLDBCQUEwQixHQUFHO0FBQ2hDO0FBTUEsTUFBTSwrQkFBK0I7QUF5QzlCLFNBQVMsa0NBQWtDLFFBQXVEO0FBQ3ZHLFFBQU0sRUFBRSxLQUFLLFVBQVUsSUFBSTtBQUMzQixhQUFXLFFBQVEsOEJBQThCO0FBQy9DLGNBQVUsY0FBYyxJQUFJLFVBQVUsR0FBRyxvQ0FBb0MsSUFBSSxHQUFHLENBQUMsWUFBcUI7QUFDeEcsVUFBSSxPQUFPLFlBQVksWUFBWSxZQUFZLE1BQU07QUFDbkQ7QUFBQSxNQUNGO0FBRUEsWUFBTSxvQkFBb0IscUJBQXFCLElBQUk7QUFDbkQsVUFBSSxrQkFBa0IsSUFBSSxPQUFPLEdBQUc7QUFDbEM7QUFBQSxNQUNGO0FBRUEsd0JBQWtCLElBQUksT0FBTztBQUM3QixVQUFJLFVBQVUsUUFBUSxNQUFNLE9BQU87QUFBQSxJQUNyQyxDQUFDLENBQUM7QUFBQSxFQUNKO0FBQ0Y7QUFnQk8sU0FBUyw0QkFBNEIsUUFBaUQ7QUFDM0YsUUFBTSxFQUFFLEtBQUssTUFBTSxRQUFRLElBQUk7QUFDL0IsdUJBQXFCLElBQUksRUFBRSxJQUFJLE9BQU87QUFDdEMsTUFBSSxVQUFVLFFBQVEsTUFBTSxPQUFPO0FBQ25DLE1BQUksVUFBVSxRQUFRLG9DQUFvQyxJQUFJLEdBQUcsT0FBTztBQUMxRTtBQUVBLFNBQVMscUJBQXFCLE1BQWlEO0FBQzdFLGFBQU8sMERBQTRDLDhCQUE4QjtBQUFBLElBQy9FLENBQUMsd0JBQXdCLEdBQUcsb0JBQUksUUFBUTtBQUFBLElBQ3hDLENBQUMsMEJBQTBCLEdBQUcsb0JBQUksUUFBUTtBQUFBLEVBQzVDLENBQUMsRUFBRSxNQUFNLElBQUk7QUFDZjsiLCJuYW1lcyI6W119
|