@angular/core 18.1.0-next.4 → 18.1.0-rc.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/esm2022/primitives/event-dispatch/index.mjs +3 -2
- package/esm2022/primitives/event-dispatch/src/action_resolver.mjs +3 -3
- package/esm2022/primitives/event-dispatch/src/attribute.mjs +16 -52
- package/esm2022/primitives/event-dispatch/src/cache.mjs +17 -6
- package/esm2022/primitives/event-dispatch/src/char.mjs +1 -16
- package/esm2022/primitives/event-dispatch/src/event.mjs +2 -3
- package/esm2022/primitives/event-dispatch/src/eventcontract.mjs +5 -66
- package/esm2022/primitives/event-dispatch/src/property.mjs +17 -22
- package/esm2022/primitives/signals/index.mjs +3 -3
- package/esm2022/primitives/signals/src/signal.mjs +4 -1
- package/esm2022/src/change_detection/scheduling/zoneless_scheduling_impl.mjs +2 -2
- package/esm2022/src/core_private_export.mjs +3 -1
- package/esm2022/src/event_delegation_utils.mjs +40 -23
- package/esm2022/src/event_dispatch/event_delegation.mjs +38 -0
- package/esm2022/src/hydration/annotate.mjs +3 -3
- package/esm2022/src/hydration/event_replay.mjs +5 -5
- package/esm2022/src/render3/component_ref.mjs +1 -1
- package/esm2022/src/version.mjs +1 -1
- package/esm2022/testing/src/logger.mjs +3 -3
- package/fesm2022/core.mjs +75 -30
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/primitives/event-dispatch.mjs +53 -242
- package/fesm2022/primitives/event-dispatch.mjs.map +1 -1
- package/fesm2022/primitives/signals.mjs +5 -2
- package/fesm2022/primitives/signals.mjs.map +1 -1
- package/fesm2022/rxjs-interop.mjs +1 -1
- package/fesm2022/testing.mjs +1 -1
- package/index.d.ts +31 -2
- package/package.json +1 -1
- package/primitives/event-dispatch/index.d.ts +22 -102
- package/primitives/signals/index.d.ts +10 -1
- package/rxjs-interop/index.d.ts +1 -1
- package/schematics/migrations/after-render-phase/bundle.js +12 -12
- package/schematics/migrations/http-providers/bundle.js +15 -15
- package/schematics/migrations/invalid-two-way-bindings/bundle.js +184 -167
- package/schematics/migrations/invalid-two-way-bindings/bundle.js.map +2 -2
- package/schematics/ng-generate/control-flow-migration/bundle.js +192 -175
- package/schematics/ng-generate/control-flow-migration/bundle.js.map +2 -2
- package/schematics/ng-generate/standalone-migration/bundle.js +552 -471
- package/schematics/ng-generate/standalone-migration/bundle.js.map +4 -4
- package/testing/index.d.ts +1 -1
- package/esm2022/primitives/event-dispatch/src/dom.mjs +0 -48
|
@@ -11,5 +11,6 @@ export { EventContract } from './src/eventcontract';
|
|
|
11
11
|
export { bootstrapEarlyEventContract } from './src/register_events';
|
|
12
12
|
export { EventInfoWrapper } from './src/event_info';
|
|
13
13
|
export { isSupportedEvent, isCaptureEvent } from './src/event_type';
|
|
14
|
-
export
|
|
15
|
-
|
|
14
|
+
export { Attribute } from './src/attribute';
|
|
15
|
+
export { registerEventType, unregisterEventType } from './src/cache';
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3ByaW1pdGl2ZXMvZXZlbnQtZGlzcGF0Y2gvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLGVBQWUsRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RixPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV0RSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHbEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFDLGdCQUFnQixFQUFFLGNBQWMsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUMsTUFBTSxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuZXhwb3J0IHtFdmVudERpc3BhdGNoZXIsIEV2ZW50UGhhc2UsIHJlZ2lzdGVyRGlzcGF0Y2hlcn0gZnJvbSAnLi9zcmMvZXZlbnRfZGlzcGF0Y2hlcic7XG5leHBvcnQge0V2ZW50Q29udHJhY3RDb250YWluZXJ9IGZyb20gJy4vc3JjL2V2ZW50X2NvbnRyYWN0X2NvbnRhaW5lcic7XG5leHBvcnQgdHlwZSB7RWFybHlKc2FjdGlvbkRhdGFDb250YWluZXJ9IGZyb20gJy4vc3JjL2Vhcmx5ZXZlbnRjb250cmFjdCc7XG5leHBvcnQge0V2ZW50Q29udHJhY3R9IGZyb20gJy4vc3JjL2V2ZW50Y29udHJhY3QnO1xuZXhwb3J0IHtib290c3RyYXBFYXJseUV2ZW50Q29udHJhY3R9IGZyb20gJy4vc3JjL3JlZ2lzdGVyX2V2ZW50cyc7XG5cbmV4cG9ydCB0eXBlIHtFdmVudENvbnRyYWN0VHJhY2tlcn0gZnJvbSAnLi9zcmMvcmVnaXN0ZXJfZXZlbnRzJztcbmV4cG9ydCB7RXZlbnRJbmZvV3JhcHBlcn0gZnJvbSAnLi9zcmMvZXZlbnRfaW5mbyc7XG5leHBvcnQge2lzU3VwcG9ydGVkRXZlbnQsIGlzQ2FwdHVyZUV2ZW50fSBmcm9tICcuL3NyYy9ldmVudF90eXBlJztcbmV4cG9ydCB7QXR0cmlidXRlfSBmcm9tICcuL3NyYy9hdHRyaWJ1dGUnO1xuZXhwb3J0IHtyZWdpc3RlckV2ZW50VHlwZSwgdW5yZWdpc3RlckV2ZW50VHlwZX0gZnJvbSAnLi9zcmMvY2FjaGUnO1xuIl19
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import { Attribute } from './attribute';
|
|
9
9
|
import { Char } from './char';
|
|
10
10
|
import { EventType } from './event_type';
|
|
11
|
-
import {
|
|
11
|
+
import { Property } from './property';
|
|
12
12
|
import * as cache from './cache';
|
|
13
13
|
import * as eventInfoLib from './event_info';
|
|
14
14
|
import * as eventLib from './event';
|
|
@@ -161,7 +161,7 @@ export class ActionResolver {
|
|
|
161
161
|
* shadow root if needed.
|
|
162
162
|
*/
|
|
163
163
|
getParentNode(element) {
|
|
164
|
-
const owner = element[OWNER];
|
|
164
|
+
const owner = element[Property.OWNER];
|
|
165
165
|
if (owner) {
|
|
166
166
|
return owner;
|
|
167
167
|
}
|
|
@@ -238,4 +238,4 @@ export class ActionResolver {
|
|
|
238
238
|
this.populateClickOnlyAction = populateClickOnlyAction;
|
|
239
239
|
}
|
|
240
240
|
}
|
|
241
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uX3Jlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9wcmltaXRpdmVzL2V2ZW50LWRpc3BhdGNoL3NyYy9hY3Rpb25fcmVzb2x2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFlBQVksQ0FBQztBQUVqQyxPQUFPLEtBQUssS0FBSyxNQUFNLFNBQVMsQ0FBQztBQUNqQyxPQUFPLEtBQUssWUFBWSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEtBQUssUUFBUSxNQUFNLFNBQVMsQ0FBQztBQUVwQzs7O0dBR0c7QUFDSCxNQUFNLGdCQUFnQixHQUE0QixFQUFFLENBQUM7QUFFckQ7O0dBRUc7QUFDSCxNQUFNLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztBQUVuQyx3REFBd0Q7QUFDeEQsTUFBTSxrQkFBa0IsR0FBVyxTQUFTLENBQUMsS0FBSyxDQUFDO0FBRW5ELG1DQUFtQztBQUNuQyxNQUFNLE9BQU8sY0FBYztJQWN6QixZQUFZLEVBQ1YsMEJBQTBCLEdBQUcsS0FBSyxNQUdoQyxFQUFFO1FBakJFLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUdsQyxnQ0FBMkIsR0FBaUQsU0FBUyxDQUFDO1FBRXRGLCtCQUEwQixHQUFpRCxTQUFTLENBQUM7UUFFckYsNEJBQXVCLEdBSW5CLFNBQVMsQ0FBQztRQU9wQixJQUFJLENBQUMsMEJBQTBCLEdBQUcsMEJBQTBCLENBQUM7SUFDL0QsQ0FBQztJQUVELGdCQUFnQixDQUFDLFNBQWlDO1FBQ2hELG1FQUFtRTtRQUNuRSxt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LEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQzt3QkFDM0UsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO3dCQUNqRSxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO29CQUMzQixDQUFDO29CQUNELEtBQUssQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ2hELENBQUM7Z0JBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDdEMsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsbUJBQW1CLENBQ2pCLDJCQUF5RSxFQUN6RSwwQkFBdUUsRUFDdkUsdUJBQWlFO1FBRWpFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLDJCQUEyQixHQUFHLDJCQUEyQixDQUFDO1FBQy9ELElBQUksQ0FBQywwQkFBMEIsR0FBRywwQkFBMEIsQ0FBQztRQUM3RCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7SUFDekQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7QXR0cmlidXRlfSBmcm9tICcuL2F0dHJpYnV0ZSc7XG5pbXBvcnQge0NoYXJ9IGZyb20gJy4vY2hhcic7XG5pbXBvcnQge0V2ZW50VHlwZX0gZnJvbSAnLi9ldmVudF90eXBlJztcbmltcG9ydCB7T1dORVJ9IGZyb20gJy4vcHJvcGVydHknO1xuaW1wb3J0ICogYXMgYTExeUNsaWNrIGZyb20gJy4vYTExeV9jbGljayc7XG5pbXBvcnQgKiBhcyBjYWNoZSBmcm9tICcuL2NhY2hlJztcbmltcG9ydCAqIGFzIGV2ZW50SW5mb0xpYiBmcm9tICcuL2V2ZW50X2luZm8nO1xuaW1wb3J0ICogYXMgZXZlbnRMaWIgZnJvbSAnLi9ldmVudCc7XG5cbi8qKlxuICogU2luY2UgbWFwcyBmcm9tIGV2ZW50IHRvIGFjdGlvbiBhcmUgaW1tdXRhYmxlIHdlIGNhbiB1c2UgYSBzaW5nbGUgbWFwXG4gKiB0byByZXByZXNlbnQgdGhlIGVtcHR5IG1hcC5cbiAqL1xuY29uc3QgRU1QVFlfQUNUSU9OX01BUDoge1trZXk6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcblxuLyoqXG4gKiBUaGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGVzIGEgc2VtaWNvbG9uLlxuICovXG5jb25zdCBSRUdFWFBfU0VNSUNPTE9OID0gL1xccyo7XFxzKi87XG5cbi8qKiBJZiBubyBldmVudCB0eXBlIGlzIGRlZmluZWQsIGRlZmF1bHRzIHRvIGBjbGlja2AuICovXG5jb25zdCBERUZBVUxUX0VWRU5UX1RZUEU6IHN0cmluZyA9IEV2ZW50VHlwZS5DTElDSztcblxuLyoqIFJlc29sdmVzIGFjdGlvbnMgZm9yIEV2ZW50cy4gKi9cbmV4cG9ydCBjbGFzcyBBY3Rpb25SZXNvbHZlciB7XG4gIHByaXZhdGUgYTExeUNsaWNrU3VwcG9ydDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIHJlYWRvbmx5IHN5bnRoZXRpY01vdXNlRXZlbnRTdXBwb3J0OiBib29sZWFuO1xuXG4gIHByaXZhdGUgdXBkYXRlRXZlbnRJbmZvRm9yQTExeUNsaWNrPzogKGV2ZW50SW5mbzogZXZlbnRJbmZvTGliLkV2ZW50SW5mbykgPT4gdm9pZCA9IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIHByZXZlbnREZWZhdWx0Rm9yQTExeUNsaWNrPzogKGV2ZW50SW5mbzogZXZlbnRJbmZvTGliLkV2ZW50SW5mbykgPT4gdm9pZCA9IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIHBvcHVsYXRlQ2xpY2tPbmx5QWN0aW9uPzogKFxuICAgIGFjdGlvbkVsZW1lbnQ6IEVsZW1lbnQsXG4gICAgZXZlbnRJbmZvOiBldmVudEluZm9MaWIuRXZlbnRJbmZvLFxuICAgIGFjdGlvbk1hcDoge1trZXk6IHN0cmluZ106IHN0cmluZ30sXG4gICkgPT4gdm9pZCA9IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgc3ludGhldGljTW91c2VFdmVudFN1cHBvcnQgPSBmYWxzZSxcbiAgfToge1xuICAgIHN5bnRoZXRpY01vdXNlRXZlbnRTdXBwb3J0PzogYm9vbGVhbjtcbiAgfSA9IHt9KSB7XG4gICAgdGhpcy5zeW50aGV0aWNNb3VzZUV2ZW50U3VwcG9ydCA9IHN5bnRoZXRpY01vdXNlRXZlbnRTdXBwb3J0O1xuICB9XG5cbiAgcmVzb2x2ZUV2ZW50VHlwZShldmVudEluZm86IGV2ZW50SW5mb0xpYi5FdmVudEluZm8pIHtcbiAgICAvLyBXZSBkaXN0aW5ndWlzaCBtb2RpZmllZCBhbmQgcGxhaW4gY2xpY2tzIGluIG9yZGVyIHRvIHN1cHBvcnQgdGhlXG4gICAgLy8gZGVmYXVsdCBicm93c2VyIGJlaGF2aW9yIG9mIG1vZGlmaWVkIGNsaWNrcyBvbiBsaW5rczsgdXN1YWxseSB0b1xuICAgIC8vIG9wZW4gdGhlIFVSTCBvZiB0aGUgbGluayBpbiBuZXcgdGFiIG9yIG5ldyB3aW5kb3cgb24gY3RybC9jbWRcbiAgICAvLyBjbGljay4gQSBET00gJ2NsaWNrJyBldmVudCBpcyBtYXBwZWQgdG8gdGhlIGpzYWN0aW9uICdjbGljaydcbiAgICAvLyBldmVudCBpZmYgdGhlcmUgaXMgbm8gbW9kaWZpZXIgcHJlc2VudCBvbiB0aGUgZXZlbnQuIElmIHRoZXJlIGlzXG4gICAgLy8gYSBtb2RpZmllciwgaXQncyBtYXBwZWQgdG8gJ2NsaWNrbW9kJyBpbnN0ZWFkLlxuICAgIC8vXG4gICAgLy8gSXQncyBhbGxvd2VkIHRvIG9taXQgdGhlIGV2ZW50IGluIHRoZSBqc2FjdGlvbiBhdHRyaWJ1dGUuIEluIHRoYXRcbiAgICAvLyBjYXNlLCAnY2xpY2snIGlzIGFzc3VtZWQuIFRodXMgdGhlIGZvbGxvd2luZyB0d28gYXJlIGVxdWl2YWxlbnQ6XG4gICAgLy9cbiAgICAvLyAgIDxhIGhyZWY9XCJzb21ldXJsXCIganNhY3Rpb249XCJnbmEuZnVcIj5cbiAgICAvLyAgIDxhIGhyZWY9XCJzb21ldXJsXCIganNhY3Rpb249XCJjbGljazpnbmEuZnVcIj5cbiAgICAvL1xuICAgIC8vIEZvciB1bm1vZGlmaWVkIGNsaWNrcywgRXZlbnRDb250cmFjdCBpbnZva2VzIHRoZSBqc2FjdGlvblxuICAgIC8vICdnbmEuZnUnLiBGb3IgbW9kaWZpZWQgY2xpY2tzLCBFdmVudENvbnRyYWN0IHdvbid0IGZpbmQgYVxuICAgIC8vIHN1aXRhYmxlIGFjdGlvbiBhbmQgbGVhdmUgdGhlIGV2ZW50IHRvIGJlIGhhbmRsZWQgYnkgdGhlXG4gICAgLy8gYnJvd3Nlci5cbiAgICAvL1xuICAgIC8vIEluIG9yZGVyIHRvIGFsc28gaW52b2tlIGEganNhY3Rpb24gaGFuZGxlciBmb3IgYSBtb2RpZmllciBjbGljayxcbiAgICAvLyAnY2xpY2ttb2QnIG5lZWRzIHRvIGJlIHVzZWQ6XG4gICAgLy9cbiAgICAvLyAgIDxhIGhyZWY9XCJzb21ldXJsXCIganNhY3Rpb249XCJjbGlja21vZDpnbmEuZnVcIj5cbiAgICAvL1xuICAgIC8vIEV2ZW50Q29udHJhY3QgaW52b2tlcyB0aGUganNhY3Rpb24gJ2duYS5mdScgZm9yIG1vZGlmaWVkXG4gICAgLy8gY2xpY2tzLiBVbm1vZGlmaWVkIGNsaWNrcyBhcmUgbGVmdCB0byB0aGUgYnJvd3Nlci5cbiAgICAvL1xuICAgIC8vIEluIG9yZGVyIHRvIHNldCB1cCB0aGUgZXZlbnQgY29udHJhY3QgdG8gaGFuZGxlIGJvdGggY2xpY2tvbmx5IGFuZFxuICAgIC8vIGNsaWNrbW9kLCBvbmx5IGFkZEV2ZW50KEV2ZW50VHlwZS5DTElDSykgaXMgbmVjZXNzYXJ5LlxuICAgIC8vXG4gICAgLy8gSW4gb3JkZXIgdG8gc2V0IHVwIHRoZSBldmVudCBjb250cmFjdCB0byBoYW5kbGUgY2xpY2ssXG4gICAgLy8gYWRkRXZlbnQoKSBpcyBuZWNlc3NhcnkgZm9yIENMSUNLLCBLRVlET1dOLCBhbmQgS0VZUFJFU1MgZXZlbnQgdHlwZXMuICBJZlxuICAgIC8vIGExMXkgY2xpY2sgc3VwcG9ydCBpcyBlbmFibGVkLCBhZGRFdmVudCgpIHdpbGwgc2V0IHVwIHRoZSBhcHByb3ByaWF0ZSBrZXlcbiAgICAvLyBldmVudCBoYW5kbGVyIGF1dG9tYXRpY2FsbHkuXG4gICAgaWYgKFxuICAgICAgZXZlbnRJbmZvTGliLmdldEV2ZW50VHlwZShldmVudEluZm8pID09PSBFdmVudFR5cGUuQ0xJQ0sgJiZcbiAgICAgIGV2ZW50TGliLmlzTW9kaWZpZWRDbGlja0V2ZW50KGV2ZW50SW5mb0xpYi5nZXRFdmVudChldmVudEluZm8pKVxuICAgICkge1xuICAgICAgZXZlbnRJbmZvTGliLnNldEV2ZW50VHlwZShldmVudEluZm8sIEV2ZW50VHlwZS5DTElDS01PRCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmExMXlDbGlja1N1cHBvcnQpIHtcbiAgICAgIHRoaXMudXBkYXRlRXZlbnRJbmZvRm9yQTExeUNsaWNrIShldmVudEluZm8pO1xuICAgIH1cbiAgfVxuXG4gIHJlc29sdmVBY3Rpb24oZXZlbnRJbmZvOiBldmVudEluZm9MaWIuRXZlbnRJbmZvKSB7XG4gICAgaWYgKGV2ZW50SW5mb0xpYi5nZXRSZXNvbHZlZChldmVudEluZm8pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucG9wdWxhdGVBY3Rpb24oZXZlbnRJbmZvLCBldmVudEluZm9MaWIuZ2V0VGFyZ2V0RWxlbWVudChldmVudEluZm8pKTtcbiAgICBldmVudEluZm9MaWIuc2V0UmVzb2x2ZWQoZXZlbnRJbmZvLCB0cnVlKTtcbiAgfVxuXG4gIHJlc29sdmVQYXJlbnRBY3Rpb24oZXZlbnRJbmZvOiBldmVudEluZm9MaWIuRXZlbnRJbmZvKSB7XG4gICAgY29uc3QgYWN0aW9uID0gZXZlbnRJbmZvTGliLmdldEFjdGlvbihldmVudEluZm8pO1xuICAgIGNvbnN0IGFjdGlvbkVsZW1lbnQgPSBhY3Rpb24gJiYgZXZlbnRJbmZvTGliLmdldEFjdGlvbkVsZW1lbnQoYWN0aW9uKTtcbiAgICBldmVudEluZm9MaWIudW5zZXRBY3Rpb24oZXZlbnRJbmZvKTtcbiAgICBjb25zdCBwYXJlbnROb2RlID0gYWN0aW9uRWxlbWVudCAmJiB0aGlzLmdldFBhcmVudE5vZGUoYWN0aW9uRWxlbWVudCk7XG4gICAgaWYgKCFwYXJlbnROb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucG9wdWxhdGVBY3Rpb24oZXZlbnRJbmZvLCBwYXJlbnROb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyBmb3IgYSBqc2FjdGlvbiB0aGF0IHRoZSBET00gZXZlbnQgbWFwcyB0byBhbmQgY3JlYXRlcyBhblxuICAgKiBvYmplY3QgY29udGFpbmluZyBldmVudCBpbmZvcm1hdGlvbiB1c2VkIGZvciBkaXNwYXRjaGluZyBieVxuICAgKiBqc2FjdGlvbi5EaXNwYXRjaGVyLiBUaGlzIG1ldGhvZCBwb3B1bGF0ZXMgdGhlIGBhY3Rpb25gIGFuZCBgYWN0aW9uRWxlbWVudGBcbiAgICogZmllbGRzIG9mIHRoZSBFdmVudEluZm8gb2JqZWN0IHBhc3NlZCBpbiBieSBmaW5kaW5nIHRoZSBmaXJzdFxuICAgKiBqc2FjdGlvbiBhdHRyaWJ1dGUgYWJvdmUgdGhlIHRhcmdldCBOb2RlIG9mIHRoZSBldmVudCwgYW5kIGJlbG93XG4gICAqIHRoZSBjb250YWluZXIgTm9kZSwgdGhhdCBzcGVjaWZpZXMgYSBqc2FjdGlvbiBmb3IgdGhlIGV2ZW50XG4gICAqIHR5cGUuIElmIG5vIHN1Y2gganNhY3Rpb24gaXMgZm91bmQsIHRoZW4gYWN0aW9uIGlzIHVuZGVmaW5lZC5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50SW5mbyBgRXZlbnRJbmZvYCB0byBzZXQgYGFjdGlvbmAgYW5kIGBhY3Rpb25FbGVtZW50YCBpZiBhblxuICAgKiAgICBhY3Rpb24gaXMgZm91bmQgb24gYW55IGBFbGVtZW50YCBpbiB0aGUgcGF0aCBvZiB0aGUgYEV2ZW50YC5cbiAgICovXG4gIHByaXZhdGUgcG9wdWxhdGVBY3Rpb24oZXZlbnRJbmZvOiBldmVudEluZm9MaWIuRXZlbnRJbmZvLCBjdXJyZW50VGFyZ2V0OiBFbGVtZW50KSB7XG4gICAgbGV0IGFjdGlvbkVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsID0gY3VycmVudFRhcmdldDtcbiAgICB3aGlsZSAoYWN0aW9uRWxlbWVudCAmJiBhY3Rpb25FbGVtZW50ICE9PSBldmVudEluZm9MaWIuZ2V0Q29udGFpbmVyKGV2ZW50SW5mbykpIHtcbiAgICAgIGlmIChhY3Rpb25FbGVtZW50Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICB0aGlzLnBvcHVsYXRlQWN0aW9uT25FbGVtZW50KGFjdGlvbkVsZW1lbnQsIGV2ZW50SW5mbyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudEluZm9MaWIuZ2V0QWN0aW9uKGV2ZW50SW5mbykpIHtcbiAgICAgICAgLy8gQW4gZXZlbnQgaXMgaGFuZGxlZCBieSBhdCBtb3N0IG9uZSBqc2FjdGlvbi4gVGh1cyB3ZSBzdG9wIGF0IHRoZVxuICAgICAgICAvLyBmaXJzdCBtYXRjaGluZyBqc2FjdGlvbiBzcGVjaWZpZWQgaW4gYSBqc2FjdGlvbiBhdHRyaWJ1dGUgdXAgdGhlXG4gICAgICAgIC8vIGFuY2VzdG9yIGNoYWluIG9mIHRoZSBldmVudCB0YXJnZXQgbm9kZS5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBhY3Rpb25FbGVtZW50ID0gdGhpcy5nZXRQYXJlbnROb2RlKGFjdGlvbkVsZW1lbnQpO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdGlvbiA9IGV2ZW50SW5mb0xpYi5nZXRBY3Rpb24oZXZlbnRJbmZvKTtcbiAgICBpZiAoIWFjdGlvbikge1xuICAgICAgLy8gTm8gYWN0aW9uIGZvdW5kLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmExMXlDbGlja1N1cHBvcnQpIHtcbiAgICAgIHRoaXMucHJldmVudERlZmF1bHRGb3JBMTF5Q2xpY2shKGV2ZW50SW5mbyk7XG4gICAgfVxuXG4gICAgLy8gV2UgYXR0ZW1wdCB0byBoYW5kbGUgdGhlIG1vdXNlZW50ZXIvbW91c2VsZWF2ZSBldmVudHMgaGVyZSBieVxuICAgIC8vIGRldGVjdGluZyB3aGV0aGVyIHRoZSBtb3VzZW92ZXIvbW91c2VvdXQgZXZlbnRzIGNvcnJlc3BvbmQgdG9cbiAgICAvLyBlbnRlcmluZy9sZWF2aW5nIGFuIGVsZW1lbnQuXG4gICAgaWYgKHRoaXMuc3ludGhldGljTW91c2VFdmVudFN1cHBvcnQpIHtcbiAgICAgIGlmIChcbiAgICAgICAgZXZlbnRJbmZvTGliLmdldEV2ZW50VHlwZShldmVudEluZm8pID09PSBFdmVudFR5cGUuTU9VU0VFTlRFUiB8fFxuICAgICAgICBldmVudEluZm9MaWIuZ2V0RXZlbnRUeXBlKGV2ZW50SW5mbykgPT09IEV2ZW50VHlwZS5NT1VTRUxFQVZFIHx8XG4gICAgICAgIGV2ZW50SW5mb0xpYi5nZXRFdmVudFR5cGUoZXZlbnRJbmZvKSA9PT0gRXZlbnRUeXBlLlBPSU5URVJFTlRFUiB8fFxuICAgICAgICBldmVudEluZm9MaWIuZ2V0RXZlbnRUeXBlKGV2ZW50SW5mbykgPT09IEV2ZW50VHlwZS5QT0lOVEVSTEVBVkVcbiAgICAgICkge1xuICAgICAgICAvLyBXZSBhdHRlbXB0IHRvIGhhbmRsZSB0aGUgbW91c2VlbnRlci9tb3VzZWxlYXZlIGV2ZW50cyBoZXJlIGJ5XG4gICAgICAgIC8vIGRldGVjdGluZyB3aGV0aGVyIHRoZSBtb3VzZW92ZXIvbW91c2VvdXQgZXZlbnRzIGNvcnJlc3BvbmQgdG9cbiAgICAgICAgLy8gZW50ZXJpbmcvbGVhdmluZyBhbiBlbGVtZW50LlxuICAgICAgICBpZiAoXG4gICAgICAgICAgZXZlbnRMaWIuaXNNb3VzZVNwZWNpYWxFdmVudChcbiAgICAgICAgICAgIGV2ZW50SW5mb0xpYi5nZXRFdmVudChldmVudEluZm8pLFxuICAgICAgICAgICAgZXZlbnRJbmZvTGliLmdldEV2ZW50VHlwZShldmVudEluZm8pLFxuICAgICAgICAgICAgZXZlbnRJbmZvTGliLmdldEFjdGlvbkVsZW1lbnQoYWN0aW9uKSxcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIElmIGJvdGggbW91c2VvdmVyL21vdXNlb3V0IGFuZCBtb3VzZWVudGVyL21vdXNlbGVhdmUgZXZlbnRzIGFyZVxuICAgICAgICAgIC8vIGVuYWJsZWQsIHR3byBzZXBhcmF0ZSBoYW5kbGVycyBmb3IgbW91c2VvdmVyL21vdXNlb3V0IGFyZVxuICAgICAgICAgIC8vIHJlZ2lzdGVyZWQuIEJvdGggaGFuZGxlcnMgd2lsbCBzZWUgdGhlIHNhbWUgZXZlbnQgaW5zdGFuY2VcbiAgICAgICAgICAvLyBzbyB3ZSBjcmVhdGUgYSBjb3B5IHRvIGF2b2lkIGludGVyZmVyaW5nIHdpdGggdGhlIGRpc3BhdGNoaW5nIG9mXG4gICAgICAgICAgLy8gdGhlIG1vdXNlb3Zlci9tb3VzZW91dCBldmVudC5cbiAgICAgICAgICBjb25zdCBjb3BpZWRFdmVudCA9IGV2ZW50TGliLmNyZWF0ZU1vdXNlU3BlY2lhbEV2ZW50KFxuICAgICAgICAgICAgZXZlbnRJbmZvTGliLmdldEV2ZW50KGV2ZW50SW5mbyksXG4gICAgICAgICAgICBldmVudEluZm9MaWIuZ2V0QWN0aW9uRWxlbWVudChhY3Rpb24pLFxuICAgICAgICAgICk7XG4gICAgICAgICAgZXZlbnRJbmZvTGliLnNldEV2ZW50KGV2ZW50SW5mbywgY29waWVkRXZlbnQpO1xuICAgICAgICAgIC8vIFNpbmNlIHRoZSBtb3VzZWVudGVyL21vdXNlbGVhdmUgZXZlbnRzIGRvIG5vdCBidWJibGUsIHRoZSB0YXJnZXRcbiAgICAgICAgICAvLyBvZiB0aGUgZXZlbnQgaXMgdGVjaG5pY2FsbHkgdGhlIGBhY3Rpb25FbGVtZW50YCAodGhlIG5vZGUgd2l0aCB0aGVcbiAgICAgICAgICAvLyBganNhY3Rpb25gIGF0dHJpYnV0ZSlcbiAgICAgICAgICBldmVudEluZm9MaWIuc2V0VGFyZ2V0RWxlbWVudChldmVudEluZm8sIGV2ZW50SW5mb0xpYi5nZXRBY3Rpb25FbGVtZW50KGFjdGlvbikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV2ZW50SW5mb0xpYi51bnNldEFjdGlvbihldmVudEluZm8pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdhbGsgdG8gdGhlIHBhcmVudCBub2RlLCB1bmxlc3MgdGhlIG5vZGUgaGFzIGEgZGlmZmVyZW50IG93bmVyIGluXG4gICAqIHdoaWNoIGNhc2Ugd2Ugd2FsayB0byB0aGUgb3duZXIuIEF0dGVtcHQgdG8gd2FsayB0byBob3N0IG9mIGFcbiAgICogc2hhZG93IHJvb3QgaWYgbmVlZGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRQYXJlbnROb2RlKGVsZW1lbnQ6IEVsZW1lbnQpOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgY29uc3Qgb3duZXIgPSBlbGVtZW50W09XTkVSXTtcbiAgICBpZiAob3duZXIpIHtcbiAgICAgIHJldHVybiBvd25lciBhcyBFbGVtZW50O1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnROb2RlID0gZWxlbWVudC5wYXJlbnROb2RlO1xuICAgIGlmIChwYXJlbnROb2RlPy5ub2RlTmFtZSA9PT0gJyNkb2N1bWVudC1mcmFnbWVudCcpIHtcbiAgICAgIHJldHVybiAocGFyZW50Tm9kZSBhcyBTaGFkb3dSb290IHwgbnVsbCk/Lmhvc3QgPz8gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmVudE5vZGUgYXMgRWxlbWVudCB8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQWNjZXNzZXMgdGhlIGpzYWN0aW9uIG1hcCBvbiBhIG5vZGUgYW5kIHJldHJpZXZlcyB0aGUgbmFtZSBvZiB0aGVcbiAgICogYWN0aW9uIHRoZSBnaXZlbiBldmVudCBpcyBtYXBwZWQgdG8sIGlmIGFueS4gSXQgcGFyc2VzIHRoZVxuICAgKiBhdHRyaWJ1dGUgdmFsdWUgYW5kIHN0b3JlcyBpdCBpbiBhIHByb3BlcnR5IG9uIHRoZSBub2RlIGZvclxuICAgKiBzdWJzZXF1ZW50IHJldHJpZXZhbCB3aXRob3V0IHJlLXBhcnNpbmcgYW5kIHJlLWFjY2Vzc2luZyB0aGVcbiAgICogYXR0cmlidXRlLlxuICAgKlxuICAgKiBAcGFyYW0gYWN0aW9uRWxlbWVudCBUaGUgRE9NIG5vZGUgdG8gcmV0cmlldmUgdGhlIGpzYWN0aW9uIG1hcCBmcm9tLlxuICAgKiBAcGFyYW0gZXZlbnRJbmZvIGBFdmVudEluZm9gIHRvIHNldCBgYWN0aW9uYCBhbmQgYGFjdGlvbkVsZW1lbnRgIGlmIGFuXG4gICAqICAgIGFjdGlvbiBpcyBmb3VuZCBvbiB0aGUgYGFjdGlvbkVsZW1lbnRgLlxuICAgKi9cbiAgcHJpdmF0ZSBwb3B1bGF0ZUFjdGlvbk9uRWxlbWVudChhY3Rpb25FbGVtZW50OiBFbGVtZW50LCBldmVudEluZm86IGV2ZW50SW5mb0xpYi5FdmVudEluZm8pIHtcbiAgICBjb25zdCBhY3Rpb25NYXAgPSB0aGlzLnBhcnNlQWN0aW9ucyhhY3Rpb25FbGVtZW50KTtcblxuICAgIGNvbnN0IGFjdGlvbk5hbWUgPSBhY3Rpb25NYXBbZXZlbnRJbmZvTGliLmdldEV2ZW50VHlwZShldmVudEluZm8pXTtcbiAgICBpZiAoYWN0aW9uTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBldmVudEluZm9MaWIuc2V0QWN0aW9uKGV2ZW50SW5mbywgYWN0aW9uTmFtZSwgYWN0aW9uRWxlbWVudCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYTExeUNsaWNrU3VwcG9ydCkge1xuICAgICAgdGhpcy5wb3B1bGF0ZUNsaWNrT25seUFjdGlvbiEoYWN0aW9uRWxlbWVudCwgZXZlbnRJbmZvLCBhY3Rpb25NYXApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYW5kIGNhY2hlcyBhbiBlbGVtZW50J3MganNhY3Rpb24gZWxlbWVudCBpbnRvIGEgbWFwLlxuICAgKlxuICAgKiBUaGlzIGlzIHByaW1hcmlseSBmb3IgaW50ZXJuYWwgdXNlLlxuICAgKlxuICAgKiBAcGFyYW0gYWN0aW9uRWxlbWVudCBUaGUgRE9NIG5vZGUgdG8gcmV0cmlldmUgdGhlIGpzYWN0aW9uIG1hcCBmcm9tLlxuICAgKiBAcmV0dXJuIE1hcCBmcm9tIGV2ZW50IHRvIHF1YWxpZmllZCBuYW1lIG9mIHRoZSBqc2FjdGlvbiBib3VuZCB0byBpdC5cbiAgICovXG4gIHByaXZhdGUgcGFyc2VBY3Rpb25zKGFjdGlvbkVsZW1lbnQ6IEVsZW1lbnQpOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSB7XG4gICAgbGV0IGFjdGlvbk1hcDoge1trZXk6IHN0cmluZ106IHN0cmluZ30gfCB1bmRlZmluZWQgPSBjYWNoZS5nZXQoYWN0aW9uRWxlbWVudCk7XG4gICAgaWYgKCFhY3Rpb25NYXApIHtcbiAgICAgIGNvbnN0IGpzYWN0aW9uQXR0cmlidXRlID0gYWN0aW9uRWxlbWVudC5nZXRBdHRyaWJ1dGUoQXR0cmlidXRlLkpTQUNUSU9OKTtcbiAgICAgIGlmICghanNhY3Rpb25BdHRyaWJ1dGUpIHtcbiAgICAgICAgYWN0aW9uTWFwID0gRU1QVFlfQUNUSU9OX01BUDtcbiAgICAgICAgY2FjaGUuc2V0KGFjdGlvbkVsZW1lbnQsIGFjdGlvbk1hcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3Rpb25NYXAgPSBjYWNoZS5nZXRQYXJzZWQoanNhY3Rpb25BdHRyaWJ1dGUpO1xuICAgICAgICBpZiAoIWFjdGlvbk1hcCkge1xuICAgICAgICAgIGFjdGlvbk1hcCA9IHt9O1xuICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IGpzYWN0aW9uQXR0cmlidXRlLnNwbGl0KFJFR0VYUF9TRU1JQ09MT04pO1xuICAgICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHZhbHVlcy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1tpZHhdO1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbG9uID0gdmFsdWUuaW5kZXhPZihDaGFyLkVWRU5UX0FDVElPTl9TRVBBUkFUT1IpO1xuICAgICAgICAgICAgY29uc3QgaGFzQ29sb24gPSBjb2xvbiAhPT0gLTE7XG4gICAgICAgICAgICBjb25zdCB0eXBlID0gaGFzQ29sb24gPyB2YWx1ZS5zdWJzdHIoMCwgY29sb24pLnRyaW0oKSA6IERFRkFVTFRfRVZFTlRfVFlQRTtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IGhhc0NvbG9uID8gdmFsdWUuc3Vic3RyKGNvbG9uICsgMSkudHJpbSgpIDogdmFsdWU7XG4gICAgICAgICAgICBhY3Rpb25NYXBbdHlwZV0gPSBhY3Rpb247XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhY2hlLnNldFBhcnNlZChqc2FjdGlvbkF0dHJpYnV0ZSwgYWN0aW9uTWFwKTtcbiAgICAgICAgfVxuICAgICAgICBjYWNoZS5zZXQoYWN0aW9uRWxlbWVudCwgYWN0aW9uTWFwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFjdGlvbk1hcDtcbiAgfVxuXG4gIGFkZEExMXlDbGlja1N1cHBvcnQoXG4gICAgdXBkYXRlRXZlbnRJbmZvRm9yQTExeUNsaWNrOiB0eXBlb2YgYTExeUNsaWNrLnVwZGF0ZUV2ZW50SW5mb0ZvckExMXlDbGljayxcbiAgICBwcmV2ZW50RGVmYXVsdEZvckExMXlDbGljazogdHlwZW9mIGExMXlDbGljay5wcmV2ZW50RGVmYXVsdEZvckExMXlDbGljayxcbiAgICBwb3B1bGF0ZUNsaWNrT25seUFjdGlvbjogdHlwZW9mIGExMXlDbGljay5wb3B1bGF0ZUNsaWNrT25seUFjdGlvbixcbiAgKSB7XG4gICAgdGhpcy5hMTF5Q2xpY2tTdXBwb3J0ID0gdHJ1ZTtcbiAgICB0aGlzLnVwZGF0ZUV2ZW50SW5mb0ZvckExMXlDbGljayA9IHVwZGF0ZUV2ZW50SW5mb0ZvckExMXlDbGljaztcbiAgICB0aGlzLnByZXZlbnREZWZhdWx0Rm9yQTExeUNsaWNrID0gcHJldmVudERlZmF1bHRGb3JBMTF5Q2xpY2s7XG4gICAgdGhpcy5wb3B1bGF0ZUNsaWNrT25seUFjdGlvbiA9IHBvcHVsYXRlQ2xpY2tPbmx5QWN0aW9uO1xuICB9XG59XG4iXX0=
|
|
241
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uX3Jlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9wcmltaXRpdmVzL2V2ZW50LWRpc3BhdGNoL3NyYy9hY3Rpb25fcmVzb2x2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUVwQyxPQUFPLEtBQUssS0FBSyxNQUFNLFNBQVMsQ0FBQztBQUNqQyxPQUFPLEtBQUssWUFBWSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEtBQUssUUFBUSxNQUFNLFNBQVMsQ0FBQztBQUVwQzs7O0dBR0c7QUFDSCxNQUFNLGdCQUFnQixHQUE0QixFQUFFLENBQUM7QUFFckQ7O0dBRUc7QUFDSCxNQUFNLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztBQUVuQyx3REFBd0Q7QUFDeEQsTUFBTSxrQkFBa0IsR0FBVyxTQUFTLENBQUMsS0FBSyxDQUFDO0FBRW5ELG1DQUFtQztBQUNuQyxNQUFNLE9BQU8sY0FBYztJQWN6QixZQUFZLEVBQ1YsMEJBQTBCLEdBQUcsS0FBSyxNQUdoQyxFQUFFO1FBakJFLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUdsQyxnQ0FBMkIsR0FBaUQsU0FBUyxDQUFDO1FBRXRGLCtCQUEwQixHQUFpRCxTQUFTLENBQUM7UUFFckYsNEJBQXVCLEdBSW5CLFNBQVMsQ0FBQztRQU9wQixJQUFJLENBQUMsMEJBQTBCLEdBQUcsMEJBQTBCLENBQUM7SUFDL0QsQ0FBQztJQUVELGdCQUFnQixDQUFDLFNBQWlDO1FBQ2hELG1FQUFtRTtRQUNuRSxt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LENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUM7d0JBQzNFLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQzt3QkFDakUsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztvQkFDM0IsQ0FBQztvQkFDRCxLQUFLLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUNoRCxDQUFDO2dCQUNELEtBQUssQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3RDLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELG1CQUFtQixDQUNqQiwyQkFBeUUsRUFDekUsMEJBQXVFLEVBQ3ZFLHVCQUFpRTtRQUVqRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQywyQkFBMkIsR0FBRywyQkFBMkIsQ0FBQztRQUMvRCxJQUFJLENBQUMsMEJBQTBCLEdBQUcsMEJBQTBCLENBQUM7UUFDN0QsSUFBSSxDQUFDLHVCQUF1QixHQUFHLHVCQUF1QixDQUFDO0lBQ3pELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0F0dHJpYnV0ZX0gZnJvbSAnLi9hdHRyaWJ1dGUnO1xuaW1wb3J0IHtDaGFyfSBmcm9tICcuL2NoYXInO1xuaW1wb3J0IHtFdmVudFR5cGV9IGZyb20gJy4vZXZlbnRfdHlwZSc7XG5pbXBvcnQge1Byb3BlcnR5fSBmcm9tICcuL3Byb3BlcnR5JztcbmltcG9ydCAqIGFzIGExMXlDbGljayBmcm9tICcuL2ExMXlfY2xpY2snO1xuaW1wb3J0ICogYXMgY2FjaGUgZnJvbSAnLi9jYWNoZSc7XG5pbXBvcnQgKiBhcyBldmVudEluZm9MaWIgZnJvbSAnLi9ldmVudF9pbmZvJztcbmltcG9ydCAqIGFzIGV2ZW50TGliIGZyb20gJy4vZXZlbnQnO1xuXG4vKipcbiAqIFNpbmNlIG1hcHMgZnJvbSBldmVudCB0byBhY3Rpb24gYXJlIGltbXV0YWJsZSB3ZSBjYW4gdXNlIGEgc2luZ2xlIG1hcFxuICogdG8gcmVwcmVzZW50IHRoZSBlbXB0eSBtYXAuXG4gKi9cbmNvbnN0IEVNUFRZX0FDVElPTl9NQVA6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0ge307XG5cbi8qKlxuICogVGhpcyByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hlcyBhIHNlbWljb2xvbi5cbiAqL1xuY29uc3QgUkVHRVhQX1NFTUlDT0xPTiA9IC9cXHMqO1xccyovO1xuXG4vKiogSWYgbm8gZXZlbnQgdHlwZSBpcyBkZWZpbmVkLCBkZWZhdWx0cyB0byBgY2xpY2tgLiAqL1xuY29uc3QgREVGQVVMVF9FVkVOVF9UWVBFOiBzdHJpbmcgPSBFdmVudFR5cGUuQ0xJQ0s7XG5cbi8qKiBSZXNvbHZlcyBhY3Rpb25zIGZvciBFdmVudHMuICovXG5leHBvcnQgY2xhc3MgQWN0aW9uUmVzb2x2ZXIge1xuICBwcml2YXRlIGExMXlDbGlja1N1cHBvcnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBzeW50aGV0aWNNb3VzZUV2ZW50U3VwcG9ydDogYm9vbGVhbjtcblxuICBwcml2YXRlIHVwZGF0ZUV2ZW50SW5mb0ZvckExMXlDbGljaz86IChldmVudEluZm86IGV2ZW50SW5mb0xpYi5FdmVudEluZm8pID0+IHZvaWQgPSB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBwcmV2ZW50RGVmYXVsdEZvckExMXlDbGljaz86IChldmVudEluZm86IGV2ZW50SW5mb0xpYi5FdmVudEluZm8pID0+IHZvaWQgPSB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBwb3B1bGF0ZUNsaWNrT25seUFjdGlvbj86IChcbiAgICBhY3Rpb25FbGVtZW50OiBFbGVtZW50LFxuICAgIGV2ZW50SW5mbzogZXZlbnRJbmZvTGliLkV2ZW50SW5mbyxcbiAgICBhY3Rpb25NYXA6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9LFxuICApID0+IHZvaWQgPSB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIHN5bnRoZXRpY01vdXNlRXZlbnRTdXBwb3J0ID0gZmFsc2UsXG4gIH06IHtcbiAgICBzeW50aGV0aWNNb3VzZUV2ZW50U3VwcG9ydD86IGJvb2xlYW47XG4gIH0gPSB7fSkge1xuICAgIHRoaXMuc3ludGhldGljTW91c2VFdmVudFN1cHBvcnQgPSBzeW50aGV0aWNNb3VzZUV2ZW50U3VwcG9ydDtcbiAgfVxuXG4gIHJlc29sdmVFdmVudFR5cGUoZXZlbnRJbmZvOiBldmVudEluZm9MaWIuRXZlbnRJbmZvKSB7XG4gICAgLy8gV2UgZGlzdGluZ3Vpc2ggbW9kaWZpZWQgYW5kIHBsYWluIGNsaWNrcyBpbiBvcmRlciB0byBzdXBwb3J0IHRoZVxuICAgIC8vIGRlZmF1bHQgYnJvd3NlciBiZWhhdmlvciBvZiBtb2RpZmllZCBjbGlja3Mgb24gbGlua3M7IHVzdWFsbHkgdG9cbiAgICAvLyBvcGVuIHRoZSBVUkwgb2YgdGhlIGxpbmsgaW4gbmV3IHRhYiBvciBuZXcgd2luZG93IG9uIGN0cmwvY21kXG4gICAgLy8gY2xpY2suIEEgRE9NICdjbGljaycgZXZlbnQgaXMgbWFwcGVkIHRvIHRoZSBqc2FjdGlvbiAnY2xpY2snXG4gICAgLy8gZXZlbnQgaWZmIHRoZXJlIGlzIG5vIG1vZGlmaWVyIHByZXNlbnQgb24gdGhlIGV2ZW50LiBJZiB0aGVyZSBpc1xuICAgIC8vIGEgbW9kaWZpZXIsIGl0J3MgbWFwcGVkIHRvICdjbGlja21vZCcgaW5zdGVhZC5cbiAgICAvL1xuICAgIC8vIEl0J3MgYWxsb3dlZCB0byBvbWl0IHRoZSBldmVudCBpbiB0aGUganNhY3Rpb24gYXR0cmlidXRlLiBJbiB0aGF0XG4gICAgLy8gY2FzZSwgJ2NsaWNrJyBpcyBhc3N1bWVkLiBUaHVzIHRoZSBmb2xsb3dpbmcgdHdvIGFyZSBlcXVpdmFsZW50OlxuICAgIC8vXG4gICAgLy8gICA8YSBocmVmPVwic29tZXVybFwiIGpzYWN0aW9uPVwiZ25hLmZ1XCI+XG4gICAgLy8gICA8YSBocmVmPVwic29tZXVybFwiIGpzYWN0aW9uPVwiY2xpY2s6Z25hLmZ1XCI+XG4gICAgLy9cbiAgICAvLyBGb3IgdW5tb2RpZmllZCBjbGlja3MsIEV2ZW50Q29udHJhY3QgaW52b2tlcyB0aGUganNhY3Rpb25cbiAgICAvLyAnZ25hLmZ1Jy4gRm9yIG1vZGlmaWVkIGNsaWNrcywgRXZlbnRDb250cmFjdCB3b24ndCBmaW5kIGFcbiAgICAvLyBzdWl0YWJsZSBhY3Rpb24gYW5kIGxlYXZlIHRoZSBldmVudCB0byBiZSBoYW5kbGVkIGJ5IHRoZVxuICAgIC8vIGJyb3dzZXIuXG4gICAgLy9cbiAgICAvLyBJbiBvcmRlciB0byBhbHNvIGludm9rZSBhIGpzYWN0aW9uIGhhbmRsZXIgZm9yIGEgbW9kaWZpZXIgY2xpY2ssXG4gICAgLy8gJ2NsaWNrbW9kJyBuZWVkcyB0byBiZSB1c2VkOlxuICAgIC8vXG4gICAgLy8gICA8YSBocmVmPVwic29tZXVybFwiIGpzYWN0aW9uPVwiY2xpY2ttb2Q6Z25hLmZ1XCI+XG4gICAgLy9cbiAgICAvLyBFdmVudENvbnRyYWN0IGludm9rZXMgdGhlIGpzYWN0aW9uICdnbmEuZnUnIGZvciBtb2RpZmllZFxuICAgIC8vIGNsaWNrcy4gVW5tb2RpZmllZCBjbGlja3MgYXJlIGxlZnQgdG8gdGhlIGJyb3dzZXIuXG4gICAgLy9cbiAgICAvLyBJbiBvcmRlciB0byBzZXQgdXAgdGhlIGV2ZW50IGNvbnRyYWN0IHRvIGhhbmRsZSBib3RoIGNsaWNrb25seSBhbmRcbiAgICAvLyBjbGlja21vZCwgb25seSBhZGRFdmVudChFdmVudFR5cGUuQ0xJQ0spIGlzIG5lY2Vzc2FyeS5cbiAgICAvL1xuICAgIC8vIEluIG9yZGVyIHRvIHNldCB1cCB0aGUgZXZlbnQgY29udHJhY3QgdG8gaGFuZGxlIGNsaWNrLFxuICAgIC8vIGFkZEV2ZW50KCkgaXMgbmVjZXNzYXJ5IGZvciBDTElDSywgS0VZRE9XTiwgYW5kIEtFWVBSRVNTIGV2ZW50IHR5cGVzLiAgSWZcbiAgICAvLyBhMTF5IGNsaWNrIHN1cHBvcnQgaXMgZW5hYmxlZCwgYWRkRXZlbnQoKSB3aWxsIHNldCB1cCB0aGUgYXBwcm9wcmlhdGUga2V5XG4gICAgLy8gZXZlbnQgaGFuZGxlciBhdXRvbWF0aWNhbGx5LlxuICAgIGlmIChcbiAgICAgIGV2ZW50SW5mb0xpYi5nZXRFdmVudFR5cGUoZXZlbnRJbmZvKSA9PT0gRXZlbnRUeXBlLkNMSUNLICYmXG4gICAgICBldmVudExpYi5pc01vZGlmaWVkQ2xpY2tFdmVudChldmVudEluZm9MaWIuZ2V0RXZlbnQoZXZlbnRJbmZvKSlcbiAgICApIHtcbiAgICAgIGV2ZW50SW5mb0xpYi5zZXRFdmVudFR5cGUoZXZlbnRJbmZvLCBFdmVudFR5cGUuQ0xJQ0tNT0QpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5hMTF5Q2xpY2tTdXBwb3J0KSB7XG4gICAgICB0aGlzLnVwZGF0ZUV2ZW50SW5mb0ZvckExMXlDbGljayEoZXZlbnRJbmZvKTtcbiAgICB9XG4gIH1cblxuICByZXNvbHZlQWN0aW9uKGV2ZW50SW5mbzogZXZlbnRJbmZvTGliLkV2ZW50SW5mbykge1xuICAgIGlmIChldmVudEluZm9MaWIuZ2V0UmVzb2x2ZWQoZXZlbnRJbmZvKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBvcHVsYXRlQWN0aW9uKGV2ZW50SW5mbywgZXZlbnRJbmZvTGliLmdldFRhcmdldEVsZW1lbnQoZXZlbnRJbmZvKSk7XG4gICAgZXZlbnRJbmZvTGliLnNldFJlc29sdmVkKGV2ZW50SW5mbywgdHJ1ZSk7XG4gIH1cblxuICByZXNvbHZlUGFyZW50QWN0aW9uKGV2ZW50SW5mbzogZXZlbnRJbmZvTGliLkV2ZW50SW5mbykge1xuICAgIGNvbnN0IGFjdGlvbiA9IGV2ZW50SW5mb0xpYi5nZXRBY3Rpb24oZXZlbnRJbmZvKTtcbiAgICBjb25zdCBhY3Rpb25FbGVtZW50ID0gYWN0aW9uICYmIGV2ZW50SW5mb0xpYi5nZXRBY3Rpb25FbGVtZW50KGFjdGlvbik7XG4gICAgZXZlbnRJbmZvTGliLnVuc2V0QWN0aW9uKGV2ZW50SW5mbyk7XG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IGFjdGlvbkVsZW1lbnQgJiYgdGhpcy5nZXRQYXJlbnROb2RlKGFjdGlvbkVsZW1lbnQpO1xuICAgIGlmICghcGFyZW50Tm9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBvcHVsYXRlQWN0aW9uKGV2ZW50SW5mbywgcGFyZW50Tm9kZSk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgZm9yIGEganNhY3Rpb24gdGhhdCB0aGUgRE9NIGV2ZW50IG1hcHMgdG8gYW5kIGNyZWF0ZXMgYW5cbiAgICogb2JqZWN0IGNvbnRhaW5pbmcgZXZlbnQgaW5mb3JtYXRpb24gdXNlZCBmb3IgZGlzcGF0Y2hpbmcgYnlcbiAgICoganNhY3Rpb24uRGlzcGF0Y2hlci4gVGhpcyBtZXRob2QgcG9wdWxhdGVzIHRoZSBgYWN0aW9uYCBhbmQgYGFjdGlvbkVsZW1lbnRgXG4gICAqIGZpZWxkcyBvZiB0aGUgRXZlbnRJbmZvIG9iamVjdCBwYXNzZWQgaW4gYnkgZmluZGluZyB0aGUgZmlyc3RcbiAgICoganNhY3Rpb24gYXR0cmlidXRlIGFib3ZlIHRoZSB0YXJnZXQgTm9kZSBvZiB0aGUgZXZlbnQsIGFuZCBiZWxvd1xuICAgKiB0aGUgY29udGFpbmVyIE5vZGUsIHRoYXQgc3BlY2lmaWVzIGEganNhY3Rpb24gZm9yIHRoZSBldmVudFxuICAgKiB0eXBlLiBJZiBubyBzdWNoIGpzYWN0aW9uIGlzIGZvdW5kLCB0aGVuIGFjdGlvbiBpcyB1bmRlZmluZWQuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudEluZm8gYEV2ZW50SW5mb2AgdG8gc2V0IGBhY3Rpb25gIGFuZCBgYWN0aW9uRWxlbWVudGAgaWYgYW5cbiAgICogICAgYWN0aW9uIGlzIGZvdW5kIG9uIGFueSBgRWxlbWVudGAgaW4gdGhlIHBhdGggb2YgdGhlIGBFdmVudGAuXG4gICAqL1xuICBwcml2YXRlIHBvcHVsYXRlQWN0aW9uKGV2ZW50SW5mbzogZXZlbnRJbmZvTGliLkV2ZW50SW5mbywgY3VycmVudFRhcmdldDogRWxlbWVudCkge1xuICAgIGxldCBhY3Rpb25FbGVtZW50OiBFbGVtZW50IHwgbnVsbCA9IGN1cnJlbnRUYXJnZXQ7XG4gICAgd2hpbGUgKGFjdGlvbkVsZW1lbnQgJiYgYWN0aW9uRWxlbWVudCAhPT0gZXZlbnRJbmZvTGliLmdldENvbnRhaW5lcihldmVudEluZm8pKSB7XG4gICAgICBpZiAoYWN0aW9uRWxlbWVudC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUFjdGlvbk9uRWxlbWVudChhY3Rpb25FbGVtZW50LCBldmVudEluZm8pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnRJbmZvTGliLmdldEFjdGlvbihldmVudEluZm8pKSB7XG4gICAgICAgIC8vIEFuIGV2ZW50IGlzIGhhbmRsZWQgYnkgYXQgbW9zdCBvbmUganNhY3Rpb24uIFRodXMgd2Ugc3RvcCBhdCB0aGVcbiAgICAgICAgLy8gZmlyc3QgbWF0Y2hpbmcganNhY3Rpb24gc3BlY2lmaWVkIGluIGEganNhY3Rpb24gYXR0cmlidXRlIHVwIHRoZVxuICAgICAgICAvLyBhbmNlc3RvciBjaGFpbiBvZiB0aGUgZXZlbnQgdGFyZ2V0IG5vZGUuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgYWN0aW9uRWxlbWVudCA9IHRoaXMuZ2V0UGFyZW50Tm9kZShhY3Rpb25FbGVtZW50KTtcbiAgICB9XG5cbiAgICBjb25zdCBhY3Rpb24gPSBldmVudEluZm9MaWIuZ2V0QWN0aW9uKGV2ZW50SW5mbyk7XG4gICAgaWYgKCFhY3Rpb24pIHtcbiAgICAgIC8vIE5vIGFjdGlvbiBmb3VuZC5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hMTF5Q2xpY2tTdXBwb3J0KSB7XG4gICAgICB0aGlzLnByZXZlbnREZWZhdWx0Rm9yQTExeUNsaWNrIShldmVudEluZm8pO1xuICAgIH1cblxuICAgIC8vIFdlIGF0dGVtcHQgdG8gaGFuZGxlIHRoZSBtb3VzZWVudGVyL21vdXNlbGVhdmUgZXZlbnRzIGhlcmUgYnlcbiAgICAvLyBkZXRlY3Rpbmcgd2hldGhlciB0aGUgbW91c2VvdmVyL21vdXNlb3V0IGV2ZW50cyBjb3JyZXNwb25kIHRvXG4gICAgLy8gZW50ZXJpbmcvbGVhdmluZyBhbiBlbGVtZW50LlxuICAgIGlmICh0aGlzLnN5bnRoZXRpY01vdXNlRXZlbnRTdXBwb3J0KSB7XG4gICAgICBpZiAoXG4gICAgICAgIGV2ZW50SW5mb0xpYi5nZXRFdmVudFR5cGUoZXZlbnRJbmZvKSA9PT0gRXZlbnRUeXBlLk1PVVNFRU5URVIgfHxcbiAgICAgICAgZXZlbnRJbmZvTGliLmdldEV2ZW50VHlwZShldmVudEluZm8pID09PSBFdmVudFR5cGUuTU9VU0VMRUFWRSB8fFxuICAgICAgICBldmVudEluZm9MaWIuZ2V0RXZlbnRUeXBlKGV2ZW50SW5mbykgPT09IEV2ZW50VHlwZS5QT0lOVEVSRU5URVIgfHxcbiAgICAgICAgZXZlbnRJbmZvTGliLmdldEV2ZW50VHlwZShldmVudEluZm8pID09PSBFdmVudFR5cGUuUE9JTlRFUkxFQVZFXG4gICAgICApIHtcbiAgICAgICAgLy8gV2UgYXR0ZW1wdCB0byBoYW5kbGUgdGhlIG1vdXNlZW50ZXIvbW91c2VsZWF2ZSBldmVudHMgaGVyZSBieVxuICAgICAgICAvLyBkZXRlY3Rpbmcgd2hldGhlciB0aGUgbW91c2VvdmVyL21vdXNlb3V0IGV2ZW50cyBjb3JyZXNwb25kIHRvXG4gICAgICAgIC8vIGVudGVyaW5nL2xlYXZpbmcgYW4gZWxlbWVudC5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGV2ZW50TGliLmlzTW91c2VTcGVjaWFsRXZlbnQoXG4gICAgICAgICAgICBldmVudEluZm9MaWIuZ2V0RXZlbnQoZXZlbnRJbmZvKSxcbiAgICAgICAgICAgIGV2ZW50SW5mb0xpYi5nZXRFdmVudFR5cGUoZXZlbnRJbmZvKSxcbiAgICAgICAgICAgIGV2ZW50SW5mb0xpYi5nZXRBY3Rpb25FbGVtZW50KGFjdGlvbiksXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBJZiBib3RoIG1vdXNlb3Zlci9tb3VzZW91dCBhbmQgbW91c2VlbnRlci9tb3VzZWxlYXZlIGV2ZW50cyBhcmVcbiAgICAgICAgICAvLyBlbmFibGVkLCB0d28gc2VwYXJhdGUgaGFuZGxlcnMgZm9yIG1vdXNlb3Zlci9tb3VzZW91dCBhcmVcbiAgICAgICAgICAvLyByZWdpc3RlcmVkLiBCb3RoIGhhbmRsZXJzIHdpbGwgc2VlIHRoZSBzYW1lIGV2ZW50IGluc3RhbmNlXG4gICAgICAgICAgLy8gc28gd2UgY3JlYXRlIGEgY29weSB0byBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIHRoZSBkaXNwYXRjaGluZyBvZlxuICAgICAgICAgIC8vIHRoZSBtb3VzZW92ZXIvbW91c2VvdXQgZXZlbnQuXG4gICAgICAgICAgY29uc3QgY29waWVkRXZlbnQgPSBldmVudExpYi5jcmVhdGVNb3VzZVNwZWNpYWxFdmVudChcbiAgICAgICAgICAgIGV2ZW50SW5mb0xpYi5nZXRFdmVudChldmVudEluZm8pLFxuICAgICAgICAgICAgZXZlbnRJbmZvTGliLmdldEFjdGlvbkVsZW1lbnQoYWN0aW9uKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGV2ZW50SW5mb0xpYi5zZXRFdmVudChldmVudEluZm8sIGNvcGllZEV2ZW50KTtcbiAgICAgICAgICAvLyBTaW5jZSB0aGUgbW91c2VlbnRlci9tb3VzZWxlYXZlIGV2ZW50cyBkbyBub3QgYnViYmxlLCB0aGUgdGFyZ2V0XG4gICAgICAgICAgLy8gb2YgdGhlIGV2ZW50IGlzIHRlY2huaWNhbGx5IHRoZSBgYWN0aW9uRWxlbWVudGAgKHRoZSBub2RlIHdpdGggdGhlXG4gICAgICAgICAgLy8gYGpzYWN0aW9uYCBhdHRyaWJ1dGUpXG4gICAgICAgICAgZXZlbnRJbmZvTGliLnNldFRhcmdldEVsZW1lbnQoZXZlbnRJbmZvLCBldmVudEluZm9MaWIuZ2V0QWN0aW9uRWxlbWVudChhY3Rpb24pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBldmVudEluZm9MaWIudW5zZXRBY3Rpb24oZXZlbnRJbmZvKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXYWxrIHRvIHRoZSBwYXJlbnQgbm9kZSwgdW5sZXNzIHRoZSBub2RlIGhhcyBhIGRpZmZlcmVudCBvd25lciBpblxuICAgKiB3aGljaCBjYXNlIHdlIHdhbGsgdG8gdGhlIG93bmVyLiBBdHRlbXB0IHRvIHdhbGsgdG8gaG9zdCBvZiBhXG4gICAqIHNoYWRvdyByb290IGlmIG5lZWRlZC5cbiAgICovXG4gIHByaXZhdGUgZ2V0UGFyZW50Tm9kZShlbGVtZW50OiBFbGVtZW50KTogRWxlbWVudCB8IG51bGwge1xuICAgIGNvbnN0IG93bmVyID0gZWxlbWVudFtQcm9wZXJ0eS5PV05FUl07XG4gICAgaWYgKG93bmVyKSB7XG4gICAgICByZXR1cm4gb3duZXIgYXMgRWxlbWVudDtcbiAgICB9XG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICBpZiAocGFyZW50Tm9kZT8ubm9kZU5hbWUgPT09ICcjZG9jdW1lbnQtZnJhZ21lbnQnKSB7XG4gICAgICByZXR1cm4gKHBhcmVudE5vZGUgYXMgU2hhZG93Um9vdCB8IG51bGwpPy5ob3N0ID8/IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBwYXJlbnROb2RlIGFzIEVsZW1lbnQgfCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjY2Vzc2VzIHRoZSBqc2FjdGlvbiBtYXAgb24gYSBub2RlIGFuZCByZXRyaWV2ZXMgdGhlIG5hbWUgb2YgdGhlXG4gICAqIGFjdGlvbiB0aGUgZ2l2ZW4gZXZlbnQgaXMgbWFwcGVkIHRvLCBpZiBhbnkuIEl0IHBhcnNlcyB0aGVcbiAgICogYXR0cmlidXRlIHZhbHVlIGFuZCBzdG9yZXMgaXQgaW4gYSBwcm9wZXJ0eSBvbiB0aGUgbm9kZSBmb3JcbiAgICogc3Vic2VxdWVudCByZXRyaWV2YWwgd2l0aG91dCByZS1wYXJzaW5nIGFuZCByZS1hY2Nlc3NpbmcgdGhlXG4gICAqIGF0dHJpYnV0ZS5cbiAgICpcbiAgICogQHBhcmFtIGFjdGlvbkVsZW1lbnQgVGhlIERPTSBub2RlIHRvIHJldHJpZXZlIHRoZSBqc2FjdGlvbiBtYXAgZnJvbS5cbiAgICogQHBhcmFtIGV2ZW50SW5mbyBgRXZlbnRJbmZvYCB0byBzZXQgYGFjdGlvbmAgYW5kIGBhY3Rpb25FbGVtZW50YCBpZiBhblxuICAgKiAgICBhY3Rpb24gaXMgZm91bmQgb24gdGhlIGBhY3Rpb25FbGVtZW50YC5cbiAgICovXG4gIHByaXZhdGUgcG9wdWxhdGVBY3Rpb25PbkVsZW1lbnQoYWN0aW9uRWxlbWVudDogRWxlbWVudCwgZXZlbnRJbmZvOiBldmVudEluZm9MaWIuRXZlbnRJbmZvKSB7XG4gICAgY29uc3QgYWN0aW9uTWFwID0gdGhpcy5wYXJzZUFjdGlvbnMoYWN0aW9uRWxlbWVudCk7XG5cbiAgICBjb25zdCBhY3Rpb25OYW1lID0gYWN0aW9uTWFwW2V2ZW50SW5mb0xpYi5nZXRFdmVudFR5cGUoZXZlbnRJbmZvKV07XG4gICAgaWYgKGFjdGlvbk5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZXZlbnRJbmZvTGliLnNldEFjdGlvbihldmVudEluZm8sIGFjdGlvbk5hbWUsIGFjdGlvbkVsZW1lbnQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmExMXlDbGlja1N1cHBvcnQpIHtcbiAgICAgIHRoaXMucG9wdWxhdGVDbGlja09ubHlBY3Rpb24hKGFjdGlvbkVsZW1lbnQsIGV2ZW50SW5mbywgYWN0aW9uTWFwKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIGFuZCBjYWNoZXMgYW4gZWxlbWVudCdzIGpzYWN0aW9uIGVsZW1lbnQgaW50byBhIG1hcC5cbiAgICpcbiAgICogVGhpcyBpcyBwcmltYXJpbHkgZm9yIGludGVybmFsIHVzZS5cbiAgICpcbiAgICogQHBhcmFtIGFjdGlvbkVsZW1lbnQgVGhlIERPTSBub2RlIHRvIHJldHJpZXZlIHRoZSBqc2FjdGlvbiBtYXAgZnJvbS5cbiAgICogQHJldHVybiBNYXAgZnJvbSBldmVudCB0byBxdWFsaWZpZWQgbmFtZSBvZiB0aGUganNhY3Rpb24gYm91bmQgdG8gaXQuXG4gICAqL1xuICBwcml2YXRlIHBhcnNlQWN0aW9ucyhhY3Rpb25FbGVtZW50OiBFbGVtZW50KToge1trZXk6IHN0cmluZ106IHN0cmluZ30ge1xuICAgIGxldCBhY3Rpb25NYXA6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9IHwgdW5kZWZpbmVkID0gY2FjaGUuZ2V0KGFjdGlvbkVsZW1lbnQpO1xuICAgIGlmICghYWN0aW9uTWFwKSB7XG4gICAgICBjb25zdCBqc2FjdGlvbkF0dHJpYnV0ZSA9IGFjdGlvbkVsZW1lbnQuZ2V0QXR0cmlidXRlKEF0dHJpYnV0ZS5KU0FDVElPTik7XG4gICAgICBpZiAoIWpzYWN0aW9uQXR0cmlidXRlKSB7XG4gICAgICAgIGFjdGlvbk1hcCA9IEVNUFRZX0FDVElPTl9NQVA7XG4gICAgICAgIGNhY2hlLnNldChhY3Rpb25FbGVtZW50LCBhY3Rpb25NYXApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0aW9uTWFwID0gY2FjaGUuZ2V0UGFyc2VkKGpzYWN0aW9uQXR0cmlidXRlKTtcbiAgICAgICAgaWYgKCFhY3Rpb25NYXApIHtcbiAgICAgICAgICBhY3Rpb25NYXAgPSB7fTtcbiAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBqc2FjdGlvbkF0dHJpYnV0ZS5zcGxpdChSRUdFWFBfU0VNSUNPTE9OKTtcbiAgICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCB2YWx1ZXMubGVuZ3RoOyBpZHgrKykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNbaWR4XTtcbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjb2xvbiA9IHZhbHVlLmluZGV4T2YoQ2hhci5FVkVOVF9BQ1RJT05fU0VQQVJBVE9SKTtcbiAgICAgICAgICAgIGNvbnN0IGhhc0NvbG9uID0gY29sb24gIT09IC0xO1xuICAgICAgICAgICAgY29uc3QgdHlwZSA9IGhhc0NvbG9uID8gdmFsdWUuc3Vic3RyKDAsIGNvbG9uKS50cmltKCkgOiBERUZBVUxUX0VWRU5UX1RZUEU7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb24gPSBoYXNDb2xvbiA/IHZhbHVlLnN1YnN0cihjb2xvbiArIDEpLnRyaW0oKSA6IHZhbHVlO1xuICAgICAgICAgICAgYWN0aW9uTWFwW3R5cGVdID0gYWN0aW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYWNoZS5zZXRQYXJzZWQoanNhY3Rpb25BdHRyaWJ1dGUsIGFjdGlvbk1hcCk7XG4gICAgICAgIH1cbiAgICAgICAgY2FjaGUuc2V0KGFjdGlvbkVsZW1lbnQsIGFjdGlvbk1hcCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhY3Rpb25NYXA7XG4gIH1cblxuICBhZGRBMTF5Q2xpY2tTdXBwb3J0KFxuICAgIHVwZGF0ZUV2ZW50SW5mb0ZvckExMXlDbGljazogdHlwZW9mIGExMXlDbGljay51cGRhdGVFdmVudEluZm9Gb3JBMTF5Q2xpY2ssXG4gICAgcHJldmVudERlZmF1bHRGb3JBMTF5Q2xpY2s6IHR5cGVvZiBhMTF5Q2xpY2sucHJldmVudERlZmF1bHRGb3JBMTF5Q2xpY2ssXG4gICAgcG9wdWxhdGVDbGlja09ubHlBY3Rpb246IHR5cGVvZiBhMTF5Q2xpY2sucG9wdWxhdGVDbGlja09ubHlBY3Rpb24sXG4gICkge1xuICAgIHRoaXMuYTExeUNsaWNrU3VwcG9ydCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGVFdmVudEluZm9Gb3JBMTF5Q2xpY2sgPSB1cGRhdGVFdmVudEluZm9Gb3JBMTF5Q2xpY2s7XG4gICAgdGhpcy5wcmV2ZW50RGVmYXVsdEZvckExMXlDbGljayA9IHByZXZlbnREZWZhdWx0Rm9yQTExeUNsaWNrO1xuICAgIHRoaXMucG9wdWxhdGVDbGlja09ubHlBY3Rpb24gPSBwb3B1bGF0ZUNsaWNrT25seUFjdGlvbjtcbiAgfVxufVxuIl19
|
|
@@ -5,55 +5,19 @@
|
|
|
5
5
|
* Use of this source code is governed by an MIT-style license that can be
|
|
6
6
|
* found in the LICENSE file at https://angular.io/license
|
|
7
7
|
*/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
* attribute, the element is identified for the purpose of
|
|
25
|
-
* impression logging and click tracking by the dot separated path
|
|
26
|
-
* of all oi attributes in the chain of ancestors of the element.
|
|
27
|
-
*
|
|
28
|
-
* Used by ActionFlow.
|
|
29
|
-
*/
|
|
30
|
-
export const OI = 'oi';
|
|
31
|
-
/**
|
|
32
|
-
* The ved attribute is an encoded ClickTrackingCGI proto to track
|
|
33
|
-
* visual elements.
|
|
34
|
-
*
|
|
35
|
-
* Used by ActionFlow.
|
|
36
|
-
*/
|
|
37
|
-
export const VED = 'ved';
|
|
38
|
-
/**
|
|
39
|
-
* The vet attribute is the visual element type used to identify tracked
|
|
40
|
-
* visual elements.
|
|
41
|
-
*/
|
|
42
|
-
export const VET = 'vet';
|
|
43
|
-
/**
|
|
44
|
-
* Support for iteration on reprocessing.
|
|
45
|
-
*
|
|
46
|
-
* Used by ActionFlow.
|
|
47
|
-
*/
|
|
48
|
-
export const JSINSTANCE = 'jsinstance';
|
|
49
|
-
/**
|
|
50
|
-
* All click jsactions that happen on the element that carries this
|
|
51
|
-
* attribute or its descendants are automatically logged.
|
|
52
|
-
* Impressions of jsactions on these elements are tracked too, if
|
|
53
|
-
* requested by the impression() method of ActionFlow.
|
|
54
|
-
*
|
|
55
|
-
* Used by ActionFlow.
|
|
56
|
-
*/
|
|
57
|
-
export const JSTRACK = 'jstrack';
|
|
58
|
-
export const Attribute = { JSACTION, OI, VED, VET, JSINSTANCE, JSTRACK };
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9wcmltaXRpdmVzL2V2ZW50LWRpc3BhdGNoL3NyYy9hdHRyaWJ1dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUg7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDO0FBRW5DOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQztBQUV2Qjs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFFekI7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQztBQUV6Qjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQztBQUV2Qzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQztBQUVqQyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsRUFBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8qKlxuICogVGhlIGpzYWN0aW9uIGF0dHJpYnV0ZSBkZWZpbmVzIGEgbWFwcGluZyBvZiBhIERPTSBldmVudCB0byBhXG4gKiBnZW5lcmljIGV2ZW50IChha2EganNhY3Rpb24pLCB0byB3aGljaCB0aGUgYWN0dWFsIGV2ZW50IGhhbmRsZXJzXG4gKiB0aGF0IGltcGxlbWVudCB0aGUgYmVoYXZpb3Igb2YgdGhlIGFwcGxpY2F0aW9uIGFyZSBib3VuZC4gVGhlXG4gKiB2YWx1ZSBpcyBhIHNlbWljb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiBjb2xvbiBzZXBhcmF0ZWQgcGFpcnMgb2ZcbiAqIGFuIG9wdGlvbmFsIERPTSBldmVudCBuYW1lIGFuZCBhIGpzYWN0aW9uIG5hbWUuIElmIHRoZSBvcHRpb25hbFxuICogRE9NIGV2ZW50IG5hbWUgaXMgb21pdHRlZCwgJ2NsaWNrJyBpcyBhc3N1bWVkLiBUaGUganNhY3Rpb24gbmFtZXNcbiAqIGFyZSBkb3Qgc2VwYXJhdGVkIHBhaXJzIG9mIGEgbmFtZXNwYWNlIGFuZCBhIHNpbXBsZSBqc2FjdGlvblxuICogbmFtZS5cbiAqXG4gKiBTZWUgZ3JhbW1hciBpbiBSRUFETUUubWQgZm9yIGV4cGVjdGVkIHN5bnRheCBpbiB0aGUgYXR0cmlidXRlIHZhbHVlLlxuICovXG5leHBvcnQgY29uc3QgSlNBQ1RJT04gPSAnanNhY3Rpb24nO1xuXG4vKipcbiAqIFRoZSBvaSBhdHRyaWJ1dGUgaXMgYSBsb2cgaW1wcmVzc2lvbiB0YWcgZm9yIGltcHJlc3Npb24gbG9nZ2luZ1xuICogYW5kIGFjdGlvbiB0cmFja2luZy4gRm9yIGFuIGVsZW1lbnQgdGhhdCBjYXJyaWVzIGEganNhY3Rpb25cbiAqIGF0dHJpYnV0ZSwgdGhlIGVsZW1lbnQgaXMgaWRlbnRpZmllZCBmb3IgdGhlIHB1cnBvc2Ugb2ZcbiAqIGltcHJlc3Npb24gbG9nZ2luZyBhbmQgY2xpY2sgdHJhY2tpbmcgYnkgdGhlIGRvdCBzZXBhcmF0ZWQgcGF0aFxuICogb2YgYWxsIG9pIGF0dHJpYnV0ZXMgaW4gdGhlIGNoYWluIG9mIGFuY2VzdG9ycyBvZiB0aGUgZWxlbWVudC5cbiAqXG4gKiBVc2VkIGJ5IEFjdGlvbkZsb3cuXG4gKi9cbmV4cG9ydCBjb25zdCBPSSA9ICdvaSc7XG5cbi8qKlxuICogVGhlIHZlZCBhdHRyaWJ1dGUgaXMgYW4gZW5jb2RlZCBDbGlja1RyYWNraW5nQ0dJIHByb3RvIHRvIHRyYWNrXG4gKiB2aXN1YWwgZWxlbWVudHMuXG4gKlxuICogVXNlZCBieSBBY3Rpb25GbG93LlxuICovXG5leHBvcnQgY29uc3QgVkVEID0gJ3ZlZCc7XG5cbi8qKlxuICogVGhlIHZldCBhdHRyaWJ1dGUgaXMgdGhlIHZpc3VhbCBlbGVtZW50IHR5cGUgdXNlZCB0byBpZGVudGlmeSB0cmFja2VkXG4gKiB2aXN1YWwgZWxlbWVudHMuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVQgPSAndmV0JztcblxuLyoqXG4gKiBTdXBwb3J0IGZvciBpdGVyYXRpb24gb24gcmVwcm9jZXNzaW5nLlxuICpcbiAqIFVzZWQgYnkgQWN0aW9uRmxvdy5cbiAqL1xuZXhwb3J0IGNvbnN0IEpTSU5TVEFOQ0UgPSAnanNpbnN0YW5jZSc7XG5cbi8qKlxuICogQWxsIGNsaWNrIGpzYWN0aW9ucyB0aGF0IGhhcHBlbiBvbiB0aGUgZWxlbWVudCB0aGF0IGNhcnJpZXMgdGhpc1xuICogYXR0cmlidXRlIG9yIGl0cyBkZXNjZW5kYW50cyBhcmUgYXV0b21hdGljYWxseSBsb2dnZWQuXG4gKiBJbXByZXNzaW9ucyBvZiBqc2FjdGlvbnMgb24gdGhlc2UgZWxlbWVudHMgYXJlIHRyYWNrZWQgdG9vLCBpZlxuICogcmVxdWVzdGVkIGJ5IHRoZSBpbXByZXNzaW9uKCkgbWV0aG9kIG9mIEFjdGlvbkZsb3cuXG4gKlxuICogVXNlZCBieSBBY3Rpb25GbG93LlxuICovXG5leHBvcnQgY29uc3QgSlNUUkFDSyA9ICdqc3RyYWNrJztcblxuZXhwb3J0IGNvbnN0IEF0dHJpYnV0ZSA9IHtKU0FDVElPTiwgT0ksIFZFRCwgVkVULCBKU0lOU1RBTkNFLCBKU1RSQUNLfTtcbiJdfQ==
|
|
8
|
+
export const Attribute = {
|
|
9
|
+
/**
|
|
10
|
+
* The jsaction attribute defines a mapping of a DOM event to a
|
|
11
|
+
* generic event (aka jsaction), to which the actual event handlers
|
|
12
|
+
* that implement the behavior of the application are bound. The
|
|
13
|
+
* value is a semicolon separated list of colon separated pairs of
|
|
14
|
+
* an optional DOM event name and a jsaction name. If the optional
|
|
15
|
+
* DOM event name is omitted, 'click' is assumed. The jsaction names
|
|
16
|
+
* are dot separated pairs of a namespace and a simple jsaction
|
|
17
|
+
* name.
|
|
18
|
+
*
|
|
19
|
+
* See grammar in README.md for expected syntax in the attribute value.
|
|
20
|
+
*/
|
|
21
|
+
JSACTION: 'jsaction',
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9wcmltaXRpdmVzL2V2ZW50LWRpc3BhdGNoL3NyYy9hdHRyaWJ1dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHO0lBQ3ZCOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsUUFBUSxFQUFFLFVBQW1CO0NBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuZXhwb3J0IGNvbnN0IEF0dHJpYnV0ZSA9IHtcbiAgLyoqXG4gICAqIFRoZSBqc2FjdGlvbiBhdHRyaWJ1dGUgZGVmaW5lcyBhIG1hcHBpbmcgb2YgYSBET00gZXZlbnQgdG8gYVxuICAgKiBnZW5lcmljIGV2ZW50IChha2EganNhY3Rpb24pLCB0byB3aGljaCB0aGUgYWN0dWFsIGV2ZW50IGhhbmRsZXJzXG4gICAqIHRoYXQgaW1wbGVtZW50IHRoZSBiZWhhdmlvciBvZiB0aGUgYXBwbGljYXRpb24gYXJlIGJvdW5kLiBUaGVcbiAgICogdmFsdWUgaXMgYSBzZW1pY29sb24gc2VwYXJhdGVkIGxpc3Qgb2YgY29sb24gc2VwYXJhdGVkIHBhaXJzIG9mXG4gICAqIGFuIG9wdGlvbmFsIERPTSBldmVudCBuYW1lIGFuZCBhIGpzYWN0aW9uIG5hbWUuIElmIHRoZSBvcHRpb25hbFxuICAgKiBET00gZXZlbnQgbmFtZSBpcyBvbWl0dGVkLCAnY2xpY2snIGlzIGFzc3VtZWQuIFRoZSBqc2FjdGlvbiBuYW1lc1xuICAgKiBhcmUgZG90IHNlcGFyYXRlZCBwYWlycyBvZiBhIG5hbWVzcGFjZSBhbmQgYSBzaW1wbGUganNhY3Rpb25cbiAgICogbmFtZS5cbiAgICpcbiAgICogU2VlIGdyYW1tYXIgaW4gUkVBRE1FLm1kIGZvciBleHBlY3RlZCBzeW50YXggaW4gdGhlIGF0dHJpYnV0ZSB2YWx1ZS5cbiAgICovXG4gIEpTQUNUSU9OOiAnanNhY3Rpb24nIGFzIGNvbnN0LFxufTtcbiJdfQ==
|
|
@@ -5,11 +5,22 @@
|
|
|
5
5
|
* Use of this source code is governed by an MIT-style license that can be
|
|
6
6
|
* found in the LICENSE file at https://angular.io/license
|
|
7
7
|
*/
|
|
8
|
-
import {
|
|
8
|
+
import { Property } from './property';
|
|
9
9
|
/**
|
|
10
10
|
* Map from jsaction annotation to a parsed map from event name to action name.
|
|
11
11
|
*/
|
|
12
12
|
const parseCache = {};
|
|
13
|
+
export function registerEventType(element, eventType, action) {
|
|
14
|
+
const cache = get(element) || {};
|
|
15
|
+
cache[eventType] = action;
|
|
16
|
+
set(element, cache);
|
|
17
|
+
}
|
|
18
|
+
export function unregisterEventType(element, eventType) {
|
|
19
|
+
const cache = get(element);
|
|
20
|
+
if (cache) {
|
|
21
|
+
cache[eventType] = undefined;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
13
24
|
/**
|
|
14
25
|
* Reads the jsaction parser cache from the given DOM Element.
|
|
15
26
|
*
|
|
@@ -18,7 +29,7 @@ const parseCache = {};
|
|
|
18
29
|
*/
|
|
19
30
|
export function get(element) {
|
|
20
31
|
// @ts-ignore
|
|
21
|
-
return element[JSACTION];
|
|
32
|
+
return element[Property.JSACTION];
|
|
22
33
|
}
|
|
23
34
|
/**
|
|
24
35
|
* Writes the jsaction parser cache to the given DOM Element.
|
|
@@ -29,7 +40,7 @@ export function get(element) {
|
|
|
29
40
|
*/
|
|
30
41
|
export function set(element, actionMap) {
|
|
31
42
|
// @ts-ignore
|
|
32
|
-
element[JSACTION] = actionMap;
|
|
43
|
+
element[Property.JSACTION] = actionMap;
|
|
33
44
|
}
|
|
34
45
|
/**
|
|
35
46
|
* Looks up the parsed action map from the source jsaction attribute value.
|
|
@@ -55,8 +66,8 @@ export function setParsed(text, parsed) {
|
|
|
55
66
|
* @param element .
|
|
56
67
|
*/
|
|
57
68
|
export function clear(element) {
|
|
58
|
-
if (JSACTION in element) {
|
|
59
|
-
delete element[JSACTION];
|
|
69
|
+
if (Property.JSACTION in element) {
|
|
70
|
+
delete element[Property.JSACTION];
|
|
60
71
|
}
|
|
61
72
|
}
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3ByaW1pdGl2ZXMvZXZlbnQtZGlzcGF0Y2gvc3JjL2NhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFcEM7O0dBRUc7QUFDSCxNQUFNLFVBQVUsR0FBNkMsRUFBRSxDQUFDO0FBRWhFLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxPQUFnQixFQUFFLFNBQWlCLEVBQUUsTUFBYztJQUNuRixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2pDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDMUIsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN0QixDQUFDO0FBRUQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLE9BQWdCLEVBQUUsU0FBaUI7SUFDckUsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNCLElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsU0FBOEIsQ0FBQztJQUNwRCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLEdBQUcsQ0FBQyxPQUFnQjtJQUNsQyxhQUFhO0lBQ2IsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsR0FBRyxDQUFDLE9BQWdCLEVBQUUsU0FBa0M7SUFDdEUsYUFBYTtJQUNiLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsSUFBWTtJQUNwQyxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLElBQVksRUFBRSxNQUErQjtJQUNyRSxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLEtBQUssQ0FBQyxPQUFnQjtJQUNwQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLElBQUksT0FBTyxFQUFFLENBQUM7UUFDakMsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7UHJvcGVydHl9IGZyb20gJy4vcHJvcGVydHknO1xuXG4vKipcbiAqIE1hcCBmcm9tIGpzYWN0aW9uIGFubm90YXRpb24gdG8gYSBwYXJzZWQgbWFwIGZyb20gZXZlbnQgbmFtZSB0byBhY3Rpb24gbmFtZS5cbiAqL1xuY29uc3QgcGFyc2VDYWNoZToge1trZXk6IHN0cmluZ106IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9fSA9IHt9O1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJFdmVudFR5cGUoZWxlbWVudDogRWxlbWVudCwgZXZlbnRUeXBlOiBzdHJpbmcsIGFjdGlvbjogc3RyaW5nKSB7XG4gIGNvbnN0IGNhY2hlID0gZ2V0KGVsZW1lbnQpIHx8IHt9O1xuICBjYWNoZVtldmVudFR5cGVdID0gYWN0aW9uO1xuICBzZXQoZWxlbWVudCwgY2FjaGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5yZWdpc3RlckV2ZW50VHlwZShlbGVtZW50OiBFbGVtZW50LCBldmVudFR5cGU6IHN0cmluZykge1xuICBjb25zdCBjYWNoZSA9IGdldChlbGVtZW50KTtcbiAgaWYgKGNhY2hlKSB7XG4gICAgY2FjaGVbZXZlbnRUeXBlXSA9IHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIHN0cmluZztcbiAgfVxufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBqc2FjdGlvbiBwYXJzZXIgY2FjaGUgZnJvbSB0aGUgZ2l2ZW4gRE9NIEVsZW1lbnQuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgLlxuICogQHJldHVybiBNYXAgZnJvbSBldmVudCB0byBxdWFsaWZpZWQgbmFtZSBvZiB0aGUganNhY3Rpb24gYm91bmQgdG8gaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXQoZWxlbWVudDogRWxlbWVudCk6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9IHtcbiAgLy8gQHRzLWlnbm9yZVxuICByZXR1cm4gZWxlbWVudFtQcm9wZXJ0eS5KU0FDVElPTl07XG59XG5cbi8qKlxuICogV3JpdGVzIHRoZSBqc2FjdGlvbiBwYXJzZXIgY2FjaGUgdG8gdGhlIGdpdmVuIERPTSBFbGVtZW50LlxuICpcbiAqIEBwYXJhbSBlbGVtZW50IC5cbiAqIEBwYXJhbSBhY3Rpb25NYXAgTWFwIGZyb20gZXZlbnQgdG8gcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGpzYWN0aW9uIGJvdW5kIHRvXG4gKiAgICAgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXQoZWxlbWVudDogRWxlbWVudCwgYWN0aW9uTWFwOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkge1xuICAvLyBAdHMtaWdub3JlXG4gIGVsZW1lbnRbUHJvcGVydHkuSlNBQ1RJT05dID0gYWN0aW9uTWFwO1xufVxuXG4vKipcbiAqIExvb2tzIHVwIHRoZSBwYXJzZWQgYWN0aW9uIG1hcCBmcm9tIHRoZSBzb3VyY2UganNhY3Rpb24gYXR0cmlidXRlIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB0ZXh0IFVucGFyc2VkIGpzYWN0aW9uIGF0dHJpYnV0ZSB2YWx1ZS5cbiAqIEByZXR1cm4gUGFyc2VkIGpzYWN0aW9uIGF0dHJpYnV0ZSB2YWx1ZSwgaWYgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBjYWNoZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcnNlZCh0ZXh0OiBzdHJpbmcpOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBwYXJzZUNhY2hlW3RleHRdO1xufVxuXG4vKipcbiAqIEluc2VydHMgdGhlIHBhcnNlIHJlc3VsdCBmb3IgdGhlIGdpdmVuIHNvdXJjZSBqc2FjdGlvbiB2YWx1ZSBpbnRvIHRoZSBjYWNoZS5cbiAqXG4gKiBAcGFyYW0gdGV4dCBVbnBhcnNlZCBqc2FjdGlvbiBhdHRyaWJ1dGUgdmFsdWUuXG4gKiBAcGFyYW0gcGFyc2VkIEF0dHJpYnV0ZSB2YWx1ZSBwYXJzZWQgaW50byB0aGUgYWN0aW9uIG1hcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFBhcnNlZCh0ZXh0OiBzdHJpbmcsIHBhcnNlZDoge1trZXk6IHN0cmluZ106IHN0cmluZ30pIHtcbiAgcGFyc2VDYWNoZVt0ZXh0XSA9IHBhcnNlZDtcbn1cblxuLyoqXG4gKiBDbGVhcnMgdGhlIGpzYWN0aW9uIHBhcnNlciBjYWNoZSBmcm9tIHRoZSBnaXZlbiBET00gRWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhcihlbGVtZW50OiBFbGVtZW50KSB7XG4gIGlmIChQcm9wZXJ0eS5KU0FDVElPTiBpbiBlbGVtZW50KSB7XG4gICAgZGVsZXRlIGVsZW1lbnRbUHJvcGVydHkuSlNBQ1RJT05dO1xuICB9XG59XG4iXX0=
|
|
@@ -16,20 +16,5 @@ export const Char = {
|
|
|
16
16
|
* attribute value.
|
|
17
17
|
*/
|
|
18
18
|
EVENT_ACTION_SEPARATOR: ':',
|
|
19
|
-
/**
|
|
20
|
-
* The separator between the logged oi attribute values in the &oi=
|
|
21
|
-
* URL parameter value.
|
|
22
|
-
*/
|
|
23
|
-
OI_SEPARATOR: '.',
|
|
24
|
-
/**
|
|
25
|
-
* The separator between the key and the value pairs in the &cad=
|
|
26
|
-
* URL parameter value.
|
|
27
|
-
*/
|
|
28
|
-
CAD_KEY_VALUE_SEPARATOR: ':',
|
|
29
|
-
/**
|
|
30
|
-
* The separator between the key-value pairs in the &cad= URL
|
|
31
|
-
* parameter value.
|
|
32
|
-
*/
|
|
33
|
-
CAD_SEPARATOR: ',',
|
|
34
19
|
};
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvcHJpbWl0aXZlcy9ldmVudC1kaXNwYXRjaC9zcmMvY2hhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUc7SUFDbEI7OztPQUdHO0lBQ0gsMEJBQTBCLEVBQUUsR0FBWTtJQUV4Qzs7O09BR0c7SUFDSCxzQkFBc0IsRUFBRSxHQUFZO0NBQ3JDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuZXhwb3J0IGNvbnN0IENoYXIgPSB7XG4gIC8qKlxuICAgKiBUaGUgc2VwYXJhdG9yIGJldHdlZW4gdGhlIG5hbWVzcGFjZSBhbmQgdGhlIGFjdGlvbiBuYW1lIGluIHRoZVxuICAgKiBqc2FjdGlvbiBhdHRyaWJ1dGUgdmFsdWUuXG4gICAqL1xuICBOQU1FU1BBQ0VfQUNUSU9OX1NFUEFSQVRPUjogJy4nIGFzIGNvbnN0LFxuXG4gIC8qKlxuICAgKiBUaGUgc2VwYXJhdG9yIGJldHdlZW4gdGhlIGV2ZW50IG5hbWUgYW5kIGFjdGlvbiBpbiB0aGUganNhY3Rpb25cbiAgICogYXR0cmlidXRlIHZhbHVlLlxuICAgKi9cbiAgRVZFTlRfQUNUSU9OX1NFUEFSQVRPUjogJzonIGFzIGNvbnN0LFxufTtcbiJdfQ==
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
* Use of this source code is governed by an MIT-style license that can be
|
|
6
6
|
* found in the LICENSE file at https://angular.io/license
|
|
7
7
|
*/
|
|
8
|
-
import * as dom from './dom';
|
|
9
8
|
import { isCaptureEvent, EventType } from './event_type';
|
|
10
9
|
import { KeyCode } from './key_code';
|
|
11
10
|
/**
|
|
@@ -361,7 +360,7 @@ export function isMouseSpecialEvent(e, type, element) {
|
|
|
361
360
|
(e.type === EventType.MOUSEOUT && type === EventType.MOUSELEAVE) ||
|
|
362
361
|
(e.type === EventType.POINTEROVER && type === EventType.POINTERENTER) ||
|
|
363
362
|
(e.type === EventType.POINTEROUT && type === EventType.POINTERLEAVE)) &&
|
|
364
|
-
(!related || (related !== element && !
|
|
363
|
+
(!related || (related !== element && !element.contains(related))));
|
|
365
364
|
}
|
|
366
365
|
/**
|
|
367
366
|
* Creates a new EventLike object for a mouseenter/mouseleave event that's
|
|
@@ -631,4 +630,4 @@ export const testing = {
|
|
|
631
630
|
isMac = value;
|
|
632
631
|
},
|
|
633
632
|
};
|
|
634
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3ByaW1pdGl2ZXMvZXZlbnQtZGlzcGF0Y2gvc3JjL2V2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sS0FBSyxHQUFHLE1BQU0sT0FBTyxDQUFDO0FBRTdCLE9BQU8sRUFBQyxjQUFjLEVBQUUsU0FBUyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3ZELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFbkM7O0dBRUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsU0FBaUI7SUFDbkQseUVBQXlFO0lBQ3pFLDJFQUEyRTtJQUMzRSx5RUFBeUU7SUFDekUscUVBQXFFO0lBQ3JFLHVEQUF1RDtJQUN2RCxJQUFJLFNBQVMsS0FBSyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdkMsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDO0lBQzdCLENBQUM7U0FBTSxJQUFJLFNBQVMsS0FBSyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDOUMsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDO0lBQzVCLENBQUM7U0FBTSxJQUFJLFNBQVMsS0FBSyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDaEQsT0FBTyxTQUFTLENBQUMsV0FBVyxDQUFDO0lBQy9CLENBQUM7U0FBTSxJQUFJLFNBQVMsS0FBSyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDaEQsT0FBTyxTQUFTLENBQUMsVUFBVSxDQUFDO0lBQzlCLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLE9BQWdCLEVBQ2hCLFNBQWlCLEVBQ2pCLE9BQStCO0lBRS9CLG9EQUFvRDtJQUNwRCxTQUFTO0lBQ1QsRUFB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QUNiLE1BQU0sRUFBRSxJQUFJO0lBQ1osTUFBTSxFQUFFLElBQUk7SUFDWixVQUFVLEVBQUUsSUFBSTtJQUNoQixRQUFRLEVBQUUsSUFBSTtJQUNkLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFFBQVEsRUFBRSxJQUFJO0lBQ2QsVUFBVSxFQUFFLElBQUk7Q0FDakIsQ0FBQztBQUVGLDRCQUE0QjtBQUM1QixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUc7SUFDckIsUUFBUSxDQUFDLEtBQWM7UUFDckIsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNoQixDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyBkb20gZnJvbSAnLi9kb20nO1xuaW1wb3J0IHtFdmVudEhhbmRsZXJJbmZvfSBmcm9tICcuL2V2ZW50X2hhbmRsZXInO1xuaW1wb3J0IHtpc0NhcHR1cmVFdmVudCwgRXZlbnRUeXBlfSBmcm9tICcuL2V2ZW50X3R5cGUnO1xuaW1wb3J0IHtLZXlDb2RlfSBmcm9tICcuL2tleV9jb2RlJztcblxuLyoqXG4gKiBHZXRzIGEgYnJvd3NlciBldmVudCB0eXBlLCBpZiBpdCB3b3VsZCBkaWZmZXIgZnJvbSB0aGUgSlNBY3Rpb24gZXZlbnQgdHlwZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJyb3dzZXJFdmVudFR5cGUoZXZlbnRUeXBlOiBzdHJpbmcpIHtcbiAgLy8gTW91c2VlbnRlciBhbmQgbW91c2VsZWF2ZSBldmVudHMgYXJlIG5vdCBoYW5kbGVkIGRpcmVjdGx5IGJlY2F1c2UgdGhleVxuICAvLyBhcmUgbm90IGF2YWlsYWJsZSBldmVyeXdoZXJlLiBJbiBicm93c2VycyB3aGVyZSB0aGV5IGFyZSBhdmFpbGFibGUsIHRoZXlcbiAgLy8gZG9uJ3QgYnViYmxlIGFuZCBhcmVuJ3QgdmlzaWJsZSBhdCB0aGUgY29udGFpbmVyIGJvdW5kYXJ5LiBJbnN0ZWFkLCB3ZVxuICAvLyBzeW50aGVzaXplIHRoZSBtb3VzZWVudGVyIGFuZCBtb3VzZWxlYXZlIGV2ZW50cyBmcm9tIG1vdXNlb3ZlciBhbmRcbiAgLy8gbW91c2VvdXQgZXZlbnRzLCByZXNwZWN0aXZlbHkuIENmLiBldmVudGNvbnRyYWN0LmpzLlxuICBpZiAoZXZlbnRUeXBlID09PSBFdmVudFR5cGUuTU9VU0VFTlRFUikge1xuICAgIHJldHVybiBFdmVudFR5cGUuTU9VU0VPVkVSO1xuICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLk1PVVNFTEVBVkUpIHtcbiAgICByZXR1cm4gRXZlbnRUeXBlLk1PVVNFT1VUO1xuICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLlBPSU5URVJFTlRFUikge1xuICAgIHJldHVybiBFdmVudFR5cGUuUE9JTlRFUk9WRVI7XG4gIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSBFdmVudFR5cGUuUE9JTlRFUkxFQVZFKSB7XG4gICAgcmV0dXJuIEV2ZW50VHlwZS5QT0lOVEVST1VUO1xuICB9XG4gIHJldHVybiBldmVudFR5cGU7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIHRoZSBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIHdpdGggdGhlIGdpdmVuIERPTSBlbGVtZW50IGZvclxuICogdGhlIGdpdmVuIGV2ZW50IHR5cGUuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgVGhlIGVsZW1lbnQuXG4gKiBAcGFyYW0gZXZlbnRUeXBlIFRoZSBldmVudCB0eXBlLlxuICogQHBhcmFtIGhhbmRsZXIgVGhlIGhhbmRsZXIgZnVuY3Rpb24gdG8gaW5zdGFsbC5cbiAqIEByZXR1cm4gSW5mb3JtYXRpb24gbmVlZGVkIHRvIHVuaW5zdGFsbCB0aGUgZXZlbnQgaGFuZGxlciBldmVudHVhbGx5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcihcbiAgZWxlbWVudDogRWxlbWVudCxcbiAgZXZlbnRUeXBlOiBzdHJpbmcsXG4gIGhhbmRsZXI6IChldmVudDogRXZlbnQpID0+IHZvaWQsXG4pOiBFdmVudEhhbmRsZXJJbmZvIHtcbiAgLy8gQWxsIGV2ZW50IGhhbmRsZXJzIGFyZSByZWdpc3RlcmVkIGluIHRoZSBidWJibGluZ1xuICAvLyBwaGFzZS5cbiAgLy9cbiAgLy8gQWxsIGJyb3dzZXJzIHN1cHBvcnQgZm9jdXMgYW5kIGJsdXIsIGJ1dCB0aGVzZSBldmVudHMgb25seSBhcmUgcHJvcGFnYXRlZFxuICAvLyBpbiB0aGUgY2FwdHVyZSBwaGFzZS4gVmVyeSBsZWdhY3kgYnJvd3NlcnMgZG8gbm90IHN1cHBvcnQgZm9jdXNpbiBvclxuICAvLyBmb2N1c291dC5cbiAgLy9cbiAgLy8gSXQgd291bGQgYmUgYSBiYWQgaWRlYSB0byByZWdpc3RlciBhbGwgZXZlbnQgaGFuZGxlcnMgaW4gdGhlXG4gIC8vIGNhcHR1cmUgcGhhc2UgYmVjYXVzZSB0aGVuIHJlZ3VsYXIgb25jbGljayBoYW5kbGVycyB3b3VsZCBub3QgYmVcbiAgLy8gZXhlY3V0ZWQgYXQgYWxsIG9uIGV2ZW50cyB0aGF0IHRyaWdnZXIgYSBqc2FjdGlvbi4gVGhhdCdzIG5vdFxuICAvLyBlbnRpcmVseSB3aGF0IHdlIHdhbnQsIGF0IGxlYXN0IGZvciBub3cuXG4gIC8vXG4gIC8vIEVycm9yIGFuZCBsb2FkIGV2ZW50cyAoaS5lLiBvbiBpbWFnZXMpIGRvIG5vdCBidWJibGUgc28gdGhleSBhcmUgYWxzb1xuICAvLyBoYW5kbGVkIGluIHRoZSBjYXB0dXJlIHBoYXNlLlxuICBsZXQgY2FwdHVyZSA9IGZhbHNlO1xuXG4gIGlmIChpc0NhcHR1cmVFdmVudChldmVudFR5cGUpKSB7XG4gICAgY2FwdHVyZSA9IHRydWU7XG4gIH1cbiAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgY2FwdHVyZSk7XG5cbiAgcmV0dXJuIHtldmVudFR5cGUsIGhhbmRsZXIsIGNhcHR1cmV9O1xufVxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBnaXZlbiBldmVudCBmcm9tIHRoZSBlbGVtZW50LlxuICogdGhlIGdpdmVuIGV2ZW50IHR5cGUuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgVGhlIGVsZW1lbnQuXG4gKiBAcGFyYW0gaW5mbyBUaGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGRlcmVnaXN0ZXIgdGhlIGhhbmRsZXIsIGFzIHJldHVybmVkIGJ5XG4gKiAgICAgYWRkRXZlbnRMaXN0ZW5lcigpLCBhYm92ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIoZWxlbWVudDogRWxlbWVudCwgaW5mbzogRXZlbnRIYW5kbGVySW5mbykge1xuICBpZiAoZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGluZm8uZXZlbnRUeXBlLCBpbmZvLmhhbmRsZXIgYXMgRXZlbnRMaXN0ZW5lciwgaW5mby5jYXB0dXJlKTtcbiAgICAvLyBgZGV0YWNoRXZlbnRgIGlzIGFuIG9sZCBET00gQVBJLlxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgfSBlbHNlIGlmICgoZWxlbWVudCBhcyBhbnkpLmRldGFjaEV2ZW50KSB7XG4gICAgLy8gYGRldGFjaEV2ZW50YCBpcyBhbiBvbGQgRE9NIEFQSS5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgKGVsZW1lbnQgYXMgYW55KS5kZXRhY2hFdmVudChgb24ke2luZm8uZXZlbnRUeXBlfWAsIGluZm8uaGFuZGxlcik7XG4gIH1cbn1cblxuLyoqXG4gKiBDYW5jZWxzIHByb3BhZ2F0aW9uIG9mIGFuIGV2ZW50LlxuICogQHBhcmFtIGUgVGhlIGV2ZW50IHRvIGNhbmNlbCBwcm9wYWdhdGlvbiBmb3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdG9wUHJvcGFnYXRpb24oZTogRXZlbnQpIHtcbiAgZS5zdG9wUHJvcGFnYXRpb24gPyBlLnN0b3BQcm9wYWdhdGlvbigpIDogKGUuY2FuY2VsQnViYmxlID0gdHJ1ZSk7XG59XG5cbi8qKlxuICogUHJldmVudHMgdGhlIGRlZmF1bHQgYWN0aW9uIG9mIGFuIGV2ZW50LlxuICogQHBhcmFtIGUgVGhlIGV2ZW50IHRvIHByZXZlbnQgdGhlIGRlZmF1bHQgYWN0aW9uIGZvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KGU6IEV2ZW50KSB7XG4gIGUucHJldmVudERlZmF1bHQgPyBlLnByZXZlbnREZWZhdWx0KCkgOiAoZS5yZXR1cm5WYWx1ZSA9IGZhbHNlKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSB0YXJnZXQgRWxlbWVudCBvZiB0aGUgZXZlbnQuIEluIEZpcmVmb3gsIGEgdGV4dCBub2RlIG1heSBhcHBlYXIgYXNcbiAqIHRoZSB0YXJnZXQgb2YgdGhlIGV2ZW50LCBpbiB3aGljaCBjYXNlIHdlIHJldHVybiB0aGUgcGFyZW50IGVsZW1lbnQgb2YgdGhlXG4gKiB0ZXh0IG5vZGUuXG4gKiBAcGFyYW0gZSBUaGUgZXZlbnQgdG8gZ2V0IHRoZSB0YXJnZXQgb2YuXG4gKiBAcmV0dXJuIFRoZSB0YXJnZXQgZWxlbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhcmdldChlOiBFdmVudCk6IEVsZW1lbnQge1xuICBsZXQgZWwgPSBlLnRhcmdldCBhcyBFbGVtZW50O1xuXG4gIC8vIEluIEZpcmVmb3gsIHRoZSBldmVudCBtYXkgaGF2ZSBhIHRleHQgbm9kZSBhcyBpdHMgdGFyZ2V0LiBXZSBhbHdheXNcbiAgLy8gd2FudCB0aGUgcGFyZW50IEVsZW1lbnQgdGhlIHRleHQgbm9kZSBiZWxvbmdzIHRvLCBob3dldmVyLlxuICBpZiAoIWVsLmdldEF0dHJpYnV0ZSAmJiBlbC5wYXJlbnROb2RlKSB7XG4gICAgZWwgPSBlbC5wYXJlbnROb2RlIGFzIEVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gZWw7XG59XG5cbi8qKlxuICogV2hldGhlciB3ZSBhcmUgb24gYSBNYWMuIE5vdCBwdWxsaW5nIGluIHVzZXJhZ2VudCBqdXN0IGZvciB0aGlzLlxuICovXG5sZXQgaXNNYWM6IGJvb2xlYW4gPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAvTWFjaW50b3NoLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuXG4vKipcbiAqIERldGVybWluZXMgYW5kIHJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gZXZlbnQgKHdoaWNoIGlzIGFzc3VtZWQgdG8gYmUgYVxuICogY2xpY2sgZXZlbnQpIGlzIGEgbWlkZGxlIGNsaWNrLlxuICogTk9URTogVGhlcmUgaXMgbm90IGEgY29uc2lzdGVudCB3YXkgdG8gaWRlbnRpZnkgbWlkZGxlIGNsaWNrXG4gKiBodHRwOi8vd3d3LnVuaXhwYXBhLmNvbS9qcy9tb3VzZS5odG1sXG4gKi9cbmZ1bmN0aW9uIGlzTWlkZGxlQ2xpY2soZTogRXZlbnQpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICAvLyBgd2hpY2hgIGlzIGFuIG9sZCBET00gQVBJLlxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICAoZSBhcyBhbnkpLndoaWNoID09PSAyIHx8XG4gICAgLy8gYHdoaWNoYCBpcyBhbiBvbGQgRE9NIEFQSS5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgKChlIGFzIGFueSkud2hpY2ggPT0gbnVsbCAmJlxuICAgICAgLy8gYGJ1dHRvbmAgaXMgYW4gb2xkIERPTSBBUEkuXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgICAoZSBhcyBhbnkpLmJ1dHRvbiA9PT0gNCkgLy8gbWlkZGxlIGNsaWNrIGZvciBJRVxuICApO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgYW5kIHJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gZXZlbnQgKHdoaWNoIGlzIGFzc3VtZWRcbiAqIHRvIGJlIGEgY2xpY2sgZXZlbnQpIGlzIG1vZGlmaWVkLiBBIG1pZGRsZSBjbGljayBpcyBjb25zaWRlcmVkIGEgbW9kaWZpZWRcbiAqIGNsaWNrIHRvIHJldGFpbiB0aGUgZGVmYXVsdCBicm93c2VyIGFjdGlvbiwgd2hpY2ggb3BlbnMgYSBsaW5rIGluIGEgbmV3IHRhYi5cbiAqIEBwYXJhbSBlIFRoZSBldmVudC5cbiAqIEByZXR1cm4gV2hldGhlciB0aGUgZ2l2ZW4gZXZlbnQgaXMgbW9kaWZpZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc01vZGlmaWVkQ2xpY2tFdmVudChlOiBFdmVudCk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIC8vIGBtZXRhS2V5YCBpcyBhbiBvbGQgRE9NIEFQSS5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgKGlzTWFjICYmIChlIGFzIGFueSkubWV0YUtleSkgfHxcbiAgICAvLyBgY3RybEtleWAgaXMgYW4gb2xkIERPTSBBUEkuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgICghaXNNYWMgJiYgKGUgYXMgYW55KS5jdHJsS2V5KSB8fFxuICAgIGlzTWlkZGxlQ2xpY2soZSkgfHxcbiAgICAvLyBgc2hpZnRLZXlgIGlzIGFuIG9sZCBET00gQVBJLlxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICAoZSBhcyBhbnkpLnNoaWZ0S2V5XG4gICk7XG59XG5cbi8qKiBXaGV0aGVyIHdlIGFyZSBvbiBXZWJLaXQgKGUuZy4sIENocm9tZSkuICovXG5leHBvcnQgY29uc3QgaXNXZWJLaXQ6IGJvb2xlYW4gPVxuICB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJlxuICAhL09wZXJhLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpICYmXG4gIC9XZWJLaXQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG5cbi8qKiBXaGV0aGVyIHdlIGFyZSBvbiBJRS4gKi9cbmV4cG9ydCBjb25zdCBpc0llOiBib29sZWFuID1cbiAgdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgKC9NU0lFLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpIHx8IC9UcmlkZW50Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKTtcblxuLyoqIFdoZXRoZXIgd2UgYXJlIG9uIEdlY2tvIChlLmcuLCBGaXJlZm94KS4gKi9cbmV4cG9ydCBjb25zdCBpc0dlY2tvOiBib29sZWFuID1cbiAgdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgIS9PcGVyYXxXZWJLaXQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiZcbiAgL0dlY2tvLy50ZXN0KG5hdmlnYXRvci5wcm9kdWN0KTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGFuZCByZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIGVsZW1lbnQgaXMgYSB2YWxpZCB0YXJnZXQgZm9yXG4gKiBrZXlwcmVzcy9rZXlkb3duIERPTSBldmVudHMgdGhhdCBhY3QgbGlrZSByZWd1bGFyIERPTSBjbGlja3MuXG4gKiBAcGFyYW0gZWwgVGhlIGVsZW1lbnQuXG4gKiBAcmV0dXJuIFdoZXRoZXIgdGhlIGdpdmVuIGVsZW1lbnQgaXMgYSB2YWxpZCBhY3Rpb24ga2V5IHRhcmdldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRBY3Rpb25LZXlUYXJnZXQoZWw6IEVsZW1lbnQpOiBib29sZWFuIHtcbiAgaWYgKCEoJ2dldEF0dHJpYnV0ZScgaW4gZWwpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpc1RleHRDb250cm9sKGVsKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoaXNOYXRpdmVseUFjdGl2YXRhYmxlKGVsKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBgaXNDb250ZW50RWRpdGFibGVgIGlzIGFuIG9sZCBET00gQVBJLlxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gIGlmICgoZWwgYXMgYW55KS5pc0NvbnRlbnRFZGl0YWJsZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgYW4gZXZlbnQgaGFzIGEgbW9kaWZpZXIga2V5IGFjdGl2YXRlZC5cbiAqIEBwYXJhbSBlIFRoZSBldmVudC5cbiAqIEByZXR1cm4gVHJ1ZSwgaWYgYSBtb2RpZmllciBrZXkgaXMgYWN0aXZhdGVkLlxuICovXG5mdW5jdGlvbiBoYXNNb2RpZmllcktleShlOiBFdmVudCk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIC8vIGBjdHJsS2V5YCBpcyBhbiBvbGQgRE9NIEFQSS5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgKGUgYXMgYW55KS5jdHJsS2V5IHx8XG4gICAgLy8gYHNoaWZ0S2V5YCBpcyBhbiBvbGQgRE9NIEFQSS5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgKGUgYXMgYW55KS5zaGlmdEtleSB8fFxuICAgIC8vIGBhbHRLZXlgIGlzIGFuIG9sZCBET00gQVBJLlxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICAoZSBhcyBhbnkpLmFsdEtleSB8fFxuICAgIC8vIGBtZXRhS2V5YCBpcyBhbiBvbGQgRE9NIEFQSS5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgKGUgYXMgYW55KS5tZXRhS2V5XG4gICk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBhbmQgcmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBldmVudCBoYXMgYSB0YXJnZXQgdGhhdCBhbHJlYWR5XG4gKiBoYXMgZXZlbnQgaGFuZGxlcnMgYXR0YWNoZWQgYmVjYXVzZSBpdCBpcyBhIG5hdGl2ZSBIVE1MIGNvbnRyb2wuIFVzZWQgdG9cbiAqIGRldGVybWluZSBpZiBwcmV2ZW50RGVmYXVsdCBzaG91bGQgYmUgY2FsbGVkIHdoZW4gaXNBY3Rpb25LZXlFdmVudCBpcyB0cnVlLlxuICogQHBhcmFtIGUgVGhlIGV2ZW50LlxuICogQHJldHVybiBJZiBwcmV2ZW50RGVmYXVsdCBzaG91bGQgYmUgY2FsbGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkQ2FsbFByZXZlbnREZWZhdWx0T25OYXRpdmVIdG1sQ29udHJvbChlOiBFdmVudCk6IGJvb2xlYW4ge1xuICBjb25zdCBlbCA9IGdldFRhcmdldChlKTtcbiAgY29uc3QgdGFnTmFtZSA9IGVsLnRhZ05hbWUudG9VcHBlckNhc2UoKTtcbiAgY29uc3Qgcm9sZSA9IChlbC5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSB8fCAnJykudG9VcHBlckNhc2UoKTtcblxuICBpZiAodGFnTmFtZSA9PT0gJ0JVVFRPTicgfHwgcm9sZSA9PT0gJ0JVVFRPTicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoIWlzTmF0aXZlSFRNTENvbnRyb2woZWwpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0YWdOYW1lID09PSAnQScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIEZpeCBmb3IgcGh5c2ljYWwgZC1wYWRzIG9uIGZlYXR1cmUgcGhvbmUgcGxhdGZvcm1zOyB0aGUgbmF0aXZlIGV2ZW50XG4gICAqIChpZS4gaXNUcnVzdGVkOiB0cnVlKSBuZWVkcyB0byBmaXJlIHRvIHNob3cgdGhlIE9QVElPTiBsaXN0LiBTZWVcbiAgICogYi8xMzUyODg0NjkgZm9yIG1vcmUgaW5mby5cbiAgICovXG4gIGlmICh0YWdOYW1lID09PSAnU0VMRUNUJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAocHJvY2Vzc1NwYWNlKGVsKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoaXNUZXh0Q29udHJvbChlbCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBhbmQgcmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBldmVudCBhY3RzIGxpa2UgYSByZWd1bGFyIERPTSBjbGljayxcbiAqIGFuZCBzaG91bGQgYmUgaGFuZGxlZCBpbnN0ZWFkIG9mIHRoZSBjbGljay4gIElmIHRoaXMgcmV0dXJucyB0cnVlLCB0aGUgY2FsbGVyXG4gKiB3aWxsIGNhbGwgcHJldmVudERlZmF1bHQoKSB0byBwcmV2ZW50IGEgcG9zc2libGUgZHVwbGljYXRlIGV2ZW50LlxuICogVGhpcyBpcyByZXByZXNlbnRlZCBieSBhIGtleXByZXNzIChrZXlkb3duIG9uIEdlY2tvIGJyb3dzZXJzKSBvbiBFbnRlciBvclxuICogU3BhY2Uga2V5LlxuICogQHBhcmFtIGUgVGhlIGV2ZW50LlxuICogQHJldHVybiBUcnVlLCBpZiB0aGUgZXZlbnQgZW11bGF0ZXMgYSBET00gY2xpY2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FjdGlvbktleUV2ZW50KGU6IEV2ZW50KTogYm9vbGVhbiB7XG4gIGxldCBrZXkgPVxuICAgIC8vIGB3aGljaGAgaXMgYW4gb2xkIERPTSBBUEkuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgIChlIGFzIGFueSkud2hpY2ggfHxcbiAgICAvLyBga2V5Q29kZWAgaXMgYW4gb2xkIERPTSBBUEkuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgIChlIGFzIGFueSkua2V5Q29kZTtcbiAgaWYgKCFrZXkgJiYgKGUgYXMgS2V5Ym9hcmRFdmVudCkua2V5KSB7XG4gICAga2V5ID0gQUNUSU9OX0tFWV9UT19LRVlDT0RFWyhlIGFzIEtleWJvYXJkRXZlbnQpLmtleV07XG4gIH1cbiAgaWYgKGlzV2ViS2l0ICYmIGtleSA9PT0gS2V5Q29kZS5NQUNfRU5URVIpIHtcbiAgICBrZXkgPSBLZXlDb2RlLkVOVEVSO1xuICB9XG4gIGlmIChrZXkgIT09IEtleUNvZGUuRU5URVIgJiYga2V5ICE9PSBLZXlDb2RlLlNQQUNFKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGVsID0gZ2V0VGFyZ2V0KGUpO1xuICBpZiAoZS50eXBlICE9PSBFdmVudFR5cGUuS0VZRE9XTiB8fCAhaXNWYWxpZEFjdGlvbktleVRhcmdldChlbCkgfHwgaGFzTW9kaWZpZXJLZXkoZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBGb3IgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiPiwgd2UgbXVzdCBvbmx5IGhhbmRsZSB0aGUgYnJvd3NlcidzIG5hdGl2ZSBjbGlja1xuICAvLyBldmVudCwgc28gdGhhdCB0aGUgYnJvd3NlciBjYW4gdG9nZ2xlIHRoZSBjaGVja2JveC5cbiAgaWYgKHByb2Nlc3NTcGFjZShlbCkgJiYga2V5ID09PSBLZXlDb2RlLlNQQUNFKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gSWYgdGhpcyBlbGVtZW50IGlzIG5vbi1mb2N1c2FibGUsIGlnbm9yZSBzdHJheSBrZXlzdHJva2VzIChiLzE4MzM3MjA5KVxuICAvLyBTc2NyZWVuIHJlYWRlcnMgY2FuIG1vdmUgd2l0aG91dCB0YWIgZm9jdXMsIHNvIGFueSB0YWJJbmRleCBpcyBmb2N1c2FibGUuXG4gIC8vIFNlZSBCLzIxODA5NjA0XG4gIGlmICghaXNGb2N1c2FibGUoZWwpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgdHlwZSA9IChcbiAgICBlbC5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSB8fFxuICAgIChlbCBhcyBIVE1MSW5wdXRFbGVtZW50KS50eXBlIHx8XG4gICAgZWwudGFnTmFtZVxuICApLnRvVXBwZXJDYXNlKCk7XG4gIGNvbnN0IGlzU3BlY2lmaWNUcmlnZ2VyS2V5ID0gSURFTlRJRklFUl9UT19LRVlfVFJJR0dFUl9NQVBQSU5HW3R5cGVdICUga2V5ID09PSAwO1xuICBjb25zdCBpc0RlZmF1bHRUcmlnZ2VyS2V5ID0gISh0eXBlIGluIElERU5USUZJRVJfVE9fS0VZX1RSSUdHRVJfTUFQUElORykgJiYga2V5ID09PSBLZXlDb2RlLkVOVEVSO1xuICBjb25zdCBoYXNUeXBlID0gZWwudGFnTmFtZS50b1VwcGVyQ2FzZSgpICE9PSAnSU5QVVQnIHx8ICEhKGVsIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnR5cGU7XG4gIHJldHVybiAoaXNTcGVjaWZpY1RyaWdnZXJLZXkgfHwgaXNEZWZhdWx0VHJpZ2dlcktleSkgJiYgaGFzVHlwZTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIERPTSBlbGVtZW50IGNhbiByZWNlaXZlIGtleWJvYXJkIGZvY3VzLlxuICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGdvb2cuZG9tLmlzRm9jdXNhYmxlLCBidXQgc2ltcGxpZmllZCBzaW5jZSB3ZSBzaG91bGRuJ3RcbiAqIGNhcmUgYWJvdXQgdmlzaWJpbGl0eSBpZiB3ZSdyZSBhbHJlYWR5IGhhbmRsaW5nIGEga2V5Ym9hcmQgZXZlbnQuXG4gKi9cbmZ1bmN0aW9uIGlzRm9jdXNhYmxlKGVsOiBFbGVtZW50KTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgKGVsLnRhZ05hbWUgaW4gTkFUSVZFTFlfRk9DVVNBQkxFX0VMRU1FTlRTIHx8IGhhc1NwZWNpZmllZFRhYkluZGV4KGVsKSkgJiZcbiAgICAhKGVsIGFzIEhUTUxJbnB1dEVsZW1lbnQpLmRpc2FibGVkXG4gICk7XG59XG5cbi8qKlxuICogQHBhcmFtIGVsZW1lbnQgRWxlbWVudCB0byBjaGVjay5cbiAqIEByZXR1cm4gV2hldGhlciB0aGUgZWxlbWVudCBoYXMgYSBzcGVjaWZpZWQgdGFiIGluZGV4LlxuICovXG5mdW5jdGlvbiBoYXNTcGVjaWZpZWRUYWJJbmRleChlbGVtZW50OiBFbGVtZW50KTogYm9vbGVhbiB7XG4gIC8vIElFIHJldHVybnMgMCBmb3IgYW4gdW5zZXQgdGFiSW5kZXgsIHNvIHdlIG11c3QgdXNlIGdldEF0dHJpYnV0ZU5vZGUoKSxcbiAgLy8gd2hpY2ggcmV0dXJucyBhbiBvYmplY3Qgd2l0aCBhICdzcGVjaWZpZWQnIHByb3BlcnR5IGlmIHRhYkluZGV4IGlzXG4gIC8vIHNwZWNpZmllZC4gIFRoaXMgd29ya3Mgb24gb3RoZXIgYnJvd3NlcnMsIHRvby5cbiAgY29uc3QgYXR0ck5vZGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZU5vZGUoJ3RhYmluZGV4Jyk7IC8vIE11c3QgYmUgbG93ZXJjYXNlIVxuICByZXR1cm4gYXR0ck5vZGUgIT0gbnVsbCAmJiBhdHRyTm9kZS5zcGVjaWZpZWQ7XG59XG5cbi8qKiBFbGVtZW50IHRhZ25hbWVzIHRoYXQgYXJlIGZvY3VzYWJsZSBieSBkZWZhdWx0LiAqL1xuY29uc3QgTkFUSVZFTFlfRk9DVVNBQkxFX0VMRU1FTlRTOiB7W2tleTogc3RyaW5nXTogbnVtYmVyfSA9IHtcbiAgJ0EnOiAxLFxuICAnSU5QVVQnOiAxLFxuICAnVEVYVEFSRUEnOiAxLFxuICAnU0VMRUNUJzogMSxcbiAgJ0JVVFRPTic6IDEsXG59O1xuXG4vKiogQHJldHVybiBUcnVlLCBpZiB0aGUgU3BhY2Uga2V5IHdhcyBwcmVzc2VkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3BhY2VLZXlFdmVudChlOiBFdmVudCk6IGJvb2xlYW4ge1xuICBjb25zdCBrZXkgPVxuICAgIC8vIGB3aGljaGAgaXMgYW4gb2xkIERPTSBBUEkuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgIChlIGFzIGFueSkud2hpY2ggfHxcbiAgICAvLyBga2V5Q29kZWAgaXMgYW4gb2xkIERPTSBBUEkuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgIChlIGFzIGFueSkua2V5Q29kZTtcbiAgY29uc3QgZWwgPSBnZXRUYXJnZXQoZSk7XG4gIGNvbnN0IGVsZW1lbnROYW1lID0gKChlbCBhcyBIVE1MSW5wdXRFbGVtZW50KS50eXBlIHx8IGVsLnRhZ05hbWUpLnRvVXBwZXJDYXNlKCk7XG4gIHJldHVybiBrZXkgPT09IEtleUNvZGUuU1BBQ0UgJiYgZWxlbWVudE5hbWUgIT09ICdDSEVDS0JPWCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBldmVudCBjb3JyZXNwb25kcyB0byBhIG5vbi1idWJibGluZyBtb3VzZVxuICogZXZlbnQgdHlwZSAobW91c2VlbnRlciwgbW91c2VsZWF2ZSwgcG9pbnRlcmVudGVyLCBhbmQgcG9pbnRlcmxlYXZlKS5cbiAqXG4gKiBEdXJpbmcgbW91c2VvdmVyIChtb3VzZWVudGVyKSBhbmQgcG9pbnRlcm92ZXIgKHBvaW50ZXJlbnRlciksIHRoZVxuICogcmVsYXRlZFRhcmdldCBpcyB0aGUgZWxlbWVudCBiZWluZyBlbnRlcmVkIGZyb20uIER1cmluZyBtb3VzZW91dCAobW91c2VsZWF2ZSlcbiAqIGFuZCBwb2ludGVyb3V0IChwb2ludGVybGVhdmUpLCB0aGUgcmVsYXRlZFRhcmdldCBpcyB0aGUgZWxlbWVudCBiZWluZyBleGl0ZWRcbiAqIHRvLlxuICpcbiAqIEluIGJvdGggY2FzZXMsIGlmIHJlbGF0ZWRUYXJnZXQgaXMgb3V0c2lkZSB0YXJnZXQsIHRoZW4gdGhlIGNvcnJlc3BvbmRpbmdcbiAqIHNwZWNpYWwgZXZlbnQgaGFzIG9jY3VycmVkLCBvdGhlcndpc2UgaXQgaGFzbid0LlxuICpcbiAqIEBwYXJhbSBlIFRoZSBtb3VzZW92ZXIvbW91c2VvdXQgZXZlbnQuXG4gKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiB0aGUgbW91c2Ugc3BlY2lhbCBldmVudC5cbiAqIEBwYXJhbSBlbGVtZW50IFRoZSBlbGVtZW50IG9uIHdoaWNoIHRoZSBqc2FjdGlvbiBmb3IgdGhlXG4gKiAgICAgbW91c2VlbnRlci9tb3VzZWxlYXZlIGV2ZW50IGlzIGRlZmluZWQuXG4gKiBAcmV0dXJuIFRydWUgaWYgdGhlIGV2ZW50IGlzIGEgbW91c2VlbnRlci9tb3VzZWxlYXZlIGV2ZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNNb3VzZVNwZWNpYWxFdmVudChlOiBFdmVudCwgdHlwZTogc3RyaW5nLCBlbGVtZW50OiBFbGVtZW50KTogYm9vbGVhbiB7XG4gIC8vIGByZWxhdGVkVGFyZ2V0YCBpcyBhbiBvbGQgRE9NIEFQSS5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICBjb25zdCByZWxhdGVkID0gKGUgYXMgYW55KS5yZWxhdGVkVGFyZ2V0IGFzIE5vZGU7XG5cbiAgcmV0dXJuIChcbiAgICAoKGUudHlwZSA9PT0gRXZlbnRUeXBlLk1PVVNFT1ZFUiAmJiB0eXBlID09PSBFdmVudFR5cGUuTU9VU0VFTlRFUikgfHxcbiAgICAgIChlLnR5cGUgPT09IEV2ZW50VHlwZS5NT1VTRU9VVCAmJiB0eXBlID09PSBFdmVudFR5cGUuTU9VU0VMRUFWRSkgfHxcbiAgICAgIChlLnR5cGUgPT09IEV2ZW50VHlwZS5QT0lOVEVST1ZFUiAmJiB0eXBlID09PSBFdmVudFR5cGUuUE9JTlRFUkVOVEVSKSB8fFxuICAgICAgKGUudHlwZSA9PT0gRXZlbnRUeXBlLlBPSU5URVJPVVQgJiYgdHlwZSA9PT0gRXZlbnRUeXBlLlBPSU5URVJMRUFWRSkpICYmXG4gICAgKCFyZWxhdGVkIHx8IChyZWxhdGVkICE9PSBlbGVtZW50ICYmICFkb20uY29udGFpbnMoZWxlbWVudCwgcmVsYXRlZCkpKVxuICApO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgRXZlbnRMaWtlIG9iamVjdCBmb3IgYSBtb3VzZWVudGVyL21vdXNlbGVhdmUgZXZlbnQgdGhhdCdzXG4gKiBkZXJpdmVkIGZyb20gdGhlIG9yaWdpbmFsIGNvcnJlc3BvbmRpbmcgbW91c2VvdmVyL21vdXNlb3V0IGV2ZW50LlxuICogQHBhcmFtIGUgVGhlIGV2ZW50LlxuICogQHBhcmFtIHRhcmdldCBUaGUgZWxlbWVudCBvbiB3aGljaCB0aGUganNhY3Rpb24gZm9yIHRoZSBtb3VzZWVudGVyL21vdXNlbGVhdmVcbiAqICAgICBldmVudCBpcyBkZWZpbmVkLlxuICogQHJldHVybiBBIG1vZGlmaWVkIGV2ZW50LWxpa2Ugb2JqZWN0IGNvcGllZCBmcm9tIHRoZSBldmVudCBvYmplY3QgcGFzc2VkIGludG9cbiAqICAgICB0aGlzIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW91c2VTcGVjaWFsRXZlbnQoZTogRXZlbnQsIHRhcmdldDogRWxlbWVudCk6IEV2ZW50IHtcbiAgLy8gV2UgaGF2ZSB0byBjcmVhdGUgYSBjb3B5IG9mIHRoZSBldmVudCBvYmplY3QgYmVjYXVzZSB3ZSBuZWVkIHRvIG11dGF0ZVxuICAvLyBpdHMgZmllbGRzLiBXZSBkbyB0aGlzIGZvciB0aGUgc3BlY2lhbCBtb3VzZSBldmVudHMgYmVjYXVzZSB0aGUgZXZlbnRcbiAgLy8gdGFyZ2V0IG5lZWRzIHRvIGJlIHJldGFyZ2V0ZWQgdG8gdGhlIGFjdGlvbiBlbGVtZW50IHJhdGhlciB0aGFuIHRoZSByZWFsXG4gIC8vIGVsZW1lbnQgKHNpbmNlIHdlIGFyZSBzaW11bGF0aW5nIHRoZSBzcGVjaWFsIG1vdXNlIGV2ZW50cyB3aXRoIG1vdXNlb3Zlci9cbiAgLy8gbW91c2VvdXQpLlxuICAvL1xuICAvLyBTaW5jZSB3ZSdyZSBtYWtpbmcgYSBjb3B5IGFueXdheXMsIHdlIG1pZ2h0IGFzIHdlbGwgYXR0ZW1wdCB0byBjb252ZXJ0XG4gIC8vIHRoaXMgZXZlbnQgaW50byBhIHBzZXVkby1yZWFsIG1vdXNlZW50ZXIvbW91c2VsZWF2ZSBldmVudCBieSBhZGp1c3RpbmdcbiAgLy8gaXRzIHR5cGUuXG4gIC8vXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgY29uc3QgY29weTogey1yZWFkb25seSBbUCBpbiBrZXlvZiBFdmVudF0/OiBFdmVudFtQXX0gPSB7fTtcbiAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBlKSB7XG4gICAgaWYgKHByb3BlcnR5ID09PSAnc3JjRWxlbWVudCcgfHwgcHJvcGVydHkgPT09ICd0YXJnZXQnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gcHJvcGVydHkgYXMga2V5b2YgRXZlbnQ7XG4gICAgLy8gTWFraW5nIGEgY29weSByZXF1aXJlcyBpdGVyYXRpbmcgdGhyb3VnaCBhbGwgcHJvcGVydGllcyBvZiBgRXZlbnRgLlxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1kaWN0LWFjY2Vzcy1vbi1zdHJ1Y3QtdHlwZVxuICAgIGNvbnN0IHZhbHVlID0gZVtrZXldO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICAvLyBWYWx1ZSBzaG91bGQgYmUgdGhlIGV4cGVjdGVkIHR5cGUsIGJ1dCB0aGUgdmFsdWUgb2YgYGtleWAgaXMgbm90IGtub3duXG4gICAgLy8gc3RhdGljYWxseS5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgY29weVtrZXldID0gdmFsdWUgYXMgYW55O1xuICB9XG4gIGlmIChlLnR5cGUgPT09IEV2ZW50VHlwZS5NT1VTRU9WRVIpIHtcbiAgICBjb3B5Wyd0eXBlJ10gPSBFdmVudFR5cGUuTU9VU0VFTlRFUjtcbiAgfSBlbHNlIGlmIChlLnR5cGUgPT09IEV2ZW50VHlwZS5NT1VTRU9VVCkge1xuICAgIGNvcHlbJ3R5cGUnXSA9IEV2ZW50VHlwZS5NT1VTRUxFQVZFO1xuICB9IGVsc2UgaWYgKGUudHlwZSA9PT0gRXZlbnRUeXBlLlBPSU5URVJPVkVSKSB7XG4gICAgY29weVsndHlwZSddID0gRXZlbnRUeXBlLlBPSU5URVJFTlRFUjtcbiAgfSBlbHNlIHtcbiAgICBjb3B5Wyd0eXBlJ10gPSBFdmVudFR5cGUuUE9JTlRFUkxFQVZFO1xuICB9XG4gIGNvcHlbJ3RhcmdldCddID0gY29weVsnc3JjRWxlbWVudCddID0gdGFyZ2V0O1xuICBjb3B5WydidWJibGVzJ10gPSBmYWxzZTtcbiAgcmV0dXJuIGNvcHkgYXMgRXZlbnQ7XG59XG5cbi8qKlxuICogUmV0dXJucyB0b3VjaCBkYXRhIGV4dHJhY3RlZCBmcm9tIHRoZSB0b3VjaCBldmVudDogY2xpZW50WCwgY2xpZW50WSwgc2NyZWVuWFxuICogYW5kIHNjcmVlblkuIElmIHRoZSBldmVudCBoYXMgbm8gdG91Y2ggaW5mb3JtYXRpb24gYXQgYWxsLCB0aGUgcmV0dXJuZWRcbiAqIHZhbHVlIGlzIG51bGwuXG4gKlxuICogVGhlIGZpZWxkcyBvZiB0aGlzIE9iamVjdCBhcmUgdW5xdW90ZWQuXG4gKlxuICogQHBhcmFtIGV2ZW50IEEgdG91Y2ggZXZlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUb3VjaERhdGEoXG4gIGV2ZW50OiBUb3VjaEV2ZW50LFxuKToge2NsaWVudFg6IG51bWJlcjsgY2xpZW50WTogbnVtYmVyOyBzY3JlZW5YOiBudW1iZXI7IHNjcmVlblk6IG51bWJlcn0gfCBudWxsIHtcbiAgY29uc3QgdG91Y2ggPVxuICAgIChldmVudC5jaGFuZ2VkVG91Y2hlcyAmJiBldmVudC5jaGFuZ2VkVG91Y2hlc1swXSkgfHwgKGV2ZW50LnRvdWNoZXMgJiYgZXZlbnQudG91Y2hlc1swXSk7XG4gIGlmICghdG91Y2gpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4ge1xuICAgIGNsaWVudFg6IHRvdWNoLmNsaWVudFgsXG4gICAgY2xpZW50WTogdG91Y2guY2xpZW50WSxcbiAgICBzY3JlZW5YOiB0b3VjaC5zY3JlZW5YLFxuICAgIHNjcmVlblk6IHRvdWNoLnNjcmVlblksXG4gIH07XG59XG5cbmRlY2xhcmUgaW50ZXJmYWNlIFN5bnRoZXRpY01vdXNlRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gIC8vIFJlZGVjbGFyZWQgZnJvbSBFdmVudCB0byBpbmRpY2F0ZSB0aGF0IGl0IGlzIG5vdCByZWFkb25seS5cbiAgZGVmYXVsdFByZXZlbnRlZDogYm9vbGVhbjtcbiAgb3JpZ2luYWxFdmVudFR5cGU6IHN0cmluZztcbiAgX3Byb3BhZ2F0aW9uU3RvcHBlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBFdmVudExpa2Ugb2JqZWN0IGZvciBhIFwiY2xpY2tcIiBldmVudCB0aGF0J3MgZGVyaXZlZCBmcm9tIHRoZVxuICogb3JpZ2luYWwgY29ycmVzcG9uZGluZyBcInRvdWNoZW5kXCIgZXZlbnQgZm9yIGEgZmFzdC1jbGljayBpbXBsZW1lbnRhdGlvbi5cbiAqXG4gKiBJdCB0YWtlcyBhIHRvdWNoIGV2ZW50LCBhZGRzIGNvbW1vbiBmaWVsZHMgZm91bmQgaW4gYSBjbGljayBldmVudCBhbmRcbiAqIGNoYW5nZXMgdGhlIHR5cGUgdG8gJ2NsaWNrJywgc28gdGhhdCB0aGUgcmVzdWx0aW5nIGV2ZW50IGxvb2tzIG1vcmUgbGlrZVxuICogYSByZWFsIGNsaWNrIGV2ZW50LlxuICpcbiAqIEBwYXJhbSBldmVudCBBIHRvdWNoIGV2ZW50LlxuICogQHJldHVybiBBIG1vZGlmaWVkIGV2ZW50LWxpa2Ugb2JqZWN0IGNvcGllZCBmcm9tIHRoZSBldmVudCBvYmplY3QgcGFzc2VkIGludG9cbiAqICAgICB0aGlzIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVjcmVhdGVUb3VjaEV2ZW50QXNDbGljayhldmVudDogVG91Y2hFdmVudCk6IE1vdXNlRXZlbnQge1xuICBjb25zdCBjbGljazogey1yZWFkb25seSBbUCBpbiBrZXlvZiBNb3VzZUV2ZW50XT86IE1vdXNlRXZlbnRbUF19ICYgUGFydGlhbDxTeW50aGV0aWNNb3VzZUV2ZW50PiA9XG4gICAge307XG4gIGNsaWNrWydvcmlnaW5hbEV2ZW50VHlwZSddID0gZXZlbnQudHlwZTtcbiAgY2xpY2tbJ3R5cGUnXSA9IEV2ZW50VHlwZS5DTElDSztcbiAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBldmVudCkge1xuICAgIGlmIChwcm9wZXJ0eSA9PT0gJ3R5cGUnIHx8IHByb3BlcnR5ID09PSAnc3JjRWxlbWVudCcpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSBwcm9wZXJ0eSBhcyBrZXlvZiBUb3VjaEV2ZW50O1xuICAgIC8vIE1ha2luZyBhIGNvcHkgcmVxdWlyZXMgaXRlcmF0aW5nIHRocm91Z2ggYWxsIHByb3BlcnRpZXMgb2YgYFRvdWNoRXZlbnRgLlxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1kaWN0LWFjY2Vzcy1vbi1zdHJ1Y3QtdHlwZVxuICAgIGNvbnN0IHZhbHVlID0gZXZlbnRba2V5XTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgLy8gVmFsdWUgc2hvdWxkIGJlIHRoZSBleHBlY3RlZCB0eXBlLCBidXQgdGhlIHZhbHVlIG9mIGBrZXlgIGlzIG5vdCBrbm93blxuICAgIC8vIHN0YXRpY2FsbHkuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgIGNsaWNrW2tleSBhcyBrZXlvZiBNb3VzZUV2ZW50XSA9IHZhbHVlIGFzIGFueTtcbiAgfVxuXG4gIC8vIEVuc3VyZSB0aGF0IHRoZSBldmVudCBoYXMgdGhlIG1vc3QgcmVjZW50IHRpbWVzdGFtcC4gVGhpcyB0aW1lc3RhbXBcbiAgLy8gbWF5IGJlIHVzZWQgaW4gdGhlIGZ1dHVyZSB0byB2YWxpZGF0ZSBvciBjYW5jZWwgc3Vic2VxdWVudCBjbGljayBldmVudHMuXG4gIGNsaWNrWyd0aW1lU3RhbXAnXSA9IERhdGUubm93KCk7XG5cbiAgLy8gRW11bGF0ZSBwcmV2ZW50RGVmYXVsdCBhbmQgc3RvcFByb3BhZ2F0aW9uIGJlaGF2aW9yXG4gIGNsaWNrWydkZWZhdWx0UHJldmVudGVkJ10gPSBmYWxzZTtcbiAgY2xpY2tbJ3ByZXZlbnREZWZhdWx0J10gPSBzeW50aGV0aWNQcmV2ZW50RGVmYXVsdDtcbiAgY2xpY2tbJ19wcm9wYWdhdGlvblN0b3BwZWQnXSA9IGZhbHNlO1xuICBjbGlja1snc3RvcFByb3BhZ2F0aW9uJ10gPSBzeW50aGV0aWNTdG9wUHJvcGFnYXRpb247XG5cbiAgLy8gRW11bGF0ZSBjbGljayBjb29yZGluYXRlcyB1c2luZyB0b3VjaCBpbmZvXG4gIGNvbnN0IHRvdWNoID0gZ2V0VG91Y2hEYXRhKGV2ZW50KTtcbiAgaWYgKHRvdWNoKSB7XG4gICAgY2xpY2tbJ2NsaWVudFgnXSA9IHRvdWNoLmNsaWVudFg7XG4gICAgY2xpY2tbJ2NsaWVudFknXSA9IHRvdWNoLmNsaWVudFk7XG4gICAgY2xpY2tbJ3NjcmVlblgnXSA9IHRvdWNoLnNjcmVlblg7XG4gICAgY2xpY2tbJ3NjcmVlblknXSA9IHRvdWNoLnNjcmVlblk7XG4gIH1cbiAgcmV0dXJuIGNsaWNrIGFzIE1vdXNlRXZlbnQ7XG59XG5cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgXCJwcmV2ZW50RGVmYXVsdFwiIGZvciBhIHN5bnRoZXNpemVkIGV2ZW50LiBTaW1wbHlcbiAqIHNldHMgXCJkZWZhdWx0UHJldmVudGVkXCIgcHJvcGVydHkgdG8gdHJ1ZS5cbiAqL1xuZnVuY3Rpb24gc3ludGhldGljUHJldmVudERlZmF1bHQodGhpczogRXZlbnQpIHtcbiAgKHRoaXMgYXMgU3ludGhldGljTW91c2VFdmVudCkuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XG59XG5cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgXCJzdG9wUHJvcGFnYXRpb25cIiBmb3IgYSBzeW50aGVzaXplZCBldmVudC4gSXQgc2ltcGx5XG4gKiBzZXRzIGEgc3ludGhldGljIG5vbi1zdGFuZGFyZCBcIl9wcm9wYWdhdGlvblN0b3BwZWRcIiBwcm9wZXJ0eSB0byB0cnVlLlxuICovXG5mdW5jdGlvbiBzeW50aGV0aWNTdG9wUHJvcGFnYXRpb24odGhpczogRXZlbnQpIHtcbiAgKHRoaXMgYXMgU3ludGhldGljTW91c2VFdmVudCkuX3Byb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWU7XG59XG5cbi8qKlxuICogTWFwcGluZyBvZiBLZXlib2FyZEV2ZW50LmtleSB2YWx1ZXMgdG9cbiAqIEtleUNvZGUgdmFsdWVzLlxuICovXG5jb25zdCBBQ1RJT05fS0VZX1RPX0tFWUNPREU6IHtba2V5OiBzdHJpbmddOiBudW1iZXJ9ID0ge1xuICAnRW50ZXInOiBLZXlDb2RlLkVOVEVSLFxuICAnICc6IEtleUNvZGUuU1BBQ0UsXG59O1xuXG4vKipcbiAqIE1hcHBpbmcgb2YgSFRNTCBlbGVtZW50IGlkZW50aWZpZXJzIChBUklBIHJvbGUsIHR5cGUsIG9yIHRhZ05hbWUpIHRvIHRoZVxuICoga2V5cyAoZW50ZXIgYW5kL29yIHNwYWNlKSB0aGF0IHNob3VsZCBhY3RpdmF0ZSB0aGVtLiBBIHZhbHVlIG9mIHplcm8gbWVhbnNcbiAqIHRoYXQgYm90aCBzaG91bGQgYWN0aXZhdGUgdGhlbS5cbiAqL1xuZXhwb3J0IGNvbnN0IElERU5USUZJRVJfVE9fS0VZX1RSSUdHRVJfTUFQUElORzoge1trZXk6IHN0cmluZ106IG51bWJlcn0gPSB7XG4gICdBJzogS2V5Q29kZS5FTlRFUixcbiAgJ0JVVFRPTic6IDAsXG4gICdDSEVDS0JPWCc6IEtleUNvZGUuU1BBQ0UsXG4gICdDT01CT0JPWCc6IEtleUNvZGUuRU5URVIsXG4gICdGSUxFJzogMCxcbiAgJ0dSSURDRUxMJzogS2V5Q29kZS5FTlRFUixcbiAgJ0xJTksnOiBLZXlDb2RlLkVOVEVSLFxuICAnTElTVEJPWCc6IEtleUNvZGUuRU5URVIsXG4gICdNRU5VJzogMCxcbiAgJ01FTlVCQVInOiAwLFxuICAnTUVOVUlURU0nOiAwLFxuICAnTUVOVUlURU1DSEVDS0JPWCc6IDAsXG4gICdNRU5VSVRFTVJBRElPJzogMCxcbiAgJ09QVElPTic6IDAsXG4gICdSQURJTyc6IEtleUNvZGUuU1BBQ0UsXG4gICdSQURJT0dST1VQJzogS2V5Q29kZS5TUEFDRSxcbiAgJ1JFU0VUJzogMCxcbiAgJ1NVQk1JVCc6IDAsXG4gICdTV0lUQ0gnOiBLZXlDb2RlLlNQQUNFLFxuICAnVEFCJzogMCxcbiAgJ1RSRUUnOiBLZXlDb2RlLkVOVEVSLFxuICAnVFJFRUlURU0nOiBLZXlDb2RlLkVOVEVSLFxufTtcblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRvIHByb2Nlc3Mgc3BhY2UgYmFzZWQgb24gdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnQ7XG4gKiBjaGVja3MgdG8gbWFrZSBzdXJlIHRoYXQgdHlwZSBpcyBub3QgbnVsbC5cbiAqIEBwYXJhbSBlbGVtZW50IFRoZSBlbGVtZW50LlxuICogQHJldHVybiBXaGV0aGVyIG9yIG5vdCB0byBwcm9jZXNzIHNwYWNlIGJhc2VkIG9uIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NTcGFjZShlbGVtZW50OiBFbGVtZW50KTogYm9vbGVhbiB7XG4gIGNvbnN0IHR5cGUgPSAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSB8fCBlbGVtZW50LnRhZ05hbWUpLnRvVXBwZXJDYXNlKCk7XG4gIHJldHVybiB0eXBlIGluIFBST0NFU1NfU1BBQ0U7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBhIHRleHQgY29udHJvbC5cbiAqIEBwYXJhbSBlbCBUaGUgZWxlbWVudC5cbiAqIEByZXR1cm4gV2hldGhlciBvciBub3QgdGhlIGdpdmVuIGVsZW1lbnQgaXMgYSB0ZXh0IGNvbnRyb2wuXG4gKi9cbmZ1bmN0aW9uIGlzVGV4dENvbnRyb2woZWw6IEVsZW1lbnQpOiBib29sZWFuIHtcbiAgY29uc3QgdHlwZSA9IChlbC5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSB8fCBlbC50YWdOYW1lKS50b1VwcGVyQ2FzZSgpO1xuICByZXR1cm4gdHlwZSBpbiBURVhUX0NPTlRST0xTO1xufVxuXG4vKipcbiAqIFJldHVybnMgaWYgdGhlIGdpdmVuIGVsZW1lbnQgaXMgYSBuYXRpdmUgSFRNTCBjb250cm9sLlxuICogQHBhcmFtIGVsIFRoZSBlbGVtZW50LlxuICogQHJldHVybiBJZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBhIG5hdGl2ZSBIVE1MIGNvbnRyb2wuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05hdGl2ZUhUTUxDb250cm9sKGVsOiBFbGVtZW50KTogYm9vbGVhbiB7XG4gIHJldHVybiBlbC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgaW4gTkFUSVZFX0hUTUxfQ09OVFJPTFM7XG59XG5cbi8qKlxuICogUmV0dXJucyBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBuYXRpdmVseSBhY3RpdmF0YWJsZS4gQnJvd3NlcnMgZW1pdCBjbGlja1xuICogZXZlbnRzIGZvciBuYXRpdmVseSBhY3RpdmF0YWJsZSBlbGVtZW50cywgZXZlbiB3aGVuIGFjdGl2YXRlZCB2aWEga2V5Ym9hcmQuXG4gKiBGb3IgdGhlc2UgZWxlbWVudHMsIHdlIGRvbid0IG5lZWQgdG8gcmFpc2UgYTExeSBjbGljayBldmVudHMuXG4gKiBAcGFyYW0gZWwgVGhlIGVsZW1lbnQuXG4gKiBAcmV0dXJuIElmIHRoZSBnaXZlbiBlbGVtZW50IGlzIGEgbmF0aXZlIEhUTUwgY29udHJvbC5cbiAqL1xuZnVuY3Rpb24gaXNOYXRpdmVseUFjdGl2YXRhYmxlKGVsOiBFbGVtZW50KTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgZWwudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnQlVUVE9OJyB8fFxuICAgICghIShlbCBhcyBIVE1MSW5wdXRFbGVtZW50KS50eXBlICYmIChlbCBhcyBIVE1MSW5wdXRFbGVtZW50KS50eXBlLnRvVXBwZXJDYXNlKCkgPT09ICdGSUxFJylcbiAgKTtcbn1cblxuLyoqXG4gKiBIVE1MIDxpbnB1dD4gdHlwZXMgKG5vdCBBUklBIHJvbGVzKSB3aGljaCB3aWxsIGF1dG8tdHJpZ2dlciBhIGNsaWNrIGV2ZW50IGZvclxuICogdGhlIFNwYWNlIGtleSwgd2l0aCBzaWRlLWVmZmVjdHMuIFdlIHdpbGwgbm90IGNhbGwgcHJldmVudERlZmF1bHQgaWYgc3BhY2UgaXNcbiAqIHByZXNzZWQsIG5vciB3aWxsIHdlIHJhaXNlIGExMXkgY2xpY2sgZXZlbnRzLiAgRm9yIGFsbCBvdGhlciBlbGVtZW50cywgd2UgY2FuXG4gKiBzdXBwcmVzcyB0aGUgZGVmYXVsdCBldmVudCAod2hpY2ggaGFzIG5vIGRlc2lyZWQgc2lkZS1lZmZlY3RzKSBhbmQgaGFuZGxlIHRoZVxuICoga2V5ZG93biBvdXJzZWx2ZXMuXG4gKi9cbmNvbnN0IFBST0NFU1NfU1BBQ0U6IHtba2V5OiBzdHJpbmddOiBib29sZWFufSA9IHtcbiAgJ0NIRUNLQk9YJzogdHJ1ZSxcbiAgJ0ZJTEUnOiB0cnVlLFxuICAnT1BUSU9OJzogdHJ1ZSxcbiAgJ1JBRElPJzogdHJ1ZSxcbn07XG5cbi8qKiBUYWdOYW1lcyBhbmQgSW5wdXQgdHlwZXMgZm9yIHdoaWNoIHRvIG5vdCBwcm9jZXNzIGVudGVyL3NwYWNlIGFzIGNsaWNrLiAqL1xuY29uc3QgVEVYVF9DT05UUk9MUzoge1trZXk6IHN0cmluZ106IGJvb2xlYW59ID0ge1xuICAnQ09MT1InOiB0cnVlLFxuICAnREFURSc6IHRydWUsXG4gICdEQVRFVElNRSc6IHRydWUsXG4gICdEQVRFVElNRS1MT0NBTCc6IHRydWUsXG4gICdFTUFJTCc6IHRydWUsXG4gICdNT05USCc6IHRydWUsXG4gICdOVU1CRVInOiB0cnVlLFxuICAnUEFTU1dPUkQnOiB0cnVlLFxuICAnUkFOR0UnOiB0cnVlLFxuICAnU0VBUkNIJzogdHJ1ZSxcbiAgJ1RFTCc6IHRydWUsXG4gICdURVhUJzogdHJ1ZSxcbiAgJ1RFWFRBUkVBJzogdHJ1ZSxcbiAgJ1RJTUUnOiB0cnVlLFxuICAnVVJMJzogdHJ1ZSxcbiAgJ1dFRUsnOiB0cnVlLFxufTtcblxuLyoqIFRhZ05hbWVzIHRoYXQgYXJlIG5hdGl2ZSBIVE1MIGNvbnRyb2xzLiAqL1xuY29uc3QgTkFUSVZFX0hUTUxfQ09OVFJPTFM6IHtba2V5OiBzdHJpbmddOiBib29sZWFufSA9IHtcbiAgJ0EnOiB0cnVlLFxuICAnQVJFQSc6IHRydWUsXG4gICdCVVRUT04nOiB0cnVlLFxuICAnRElBTE9HJzogdHJ1ZSxcbiAgJ0lNRyc6IHRydWUsXG4gICdJTlBVVCc6IHRydWUsXG4gICdMSU5LJzogdHJ1ZSxcbiAgJ01FTlUnOiB0cnVlLFxuICAnT1BUR1JPVVAnOiB0cnVlLFxuICAnT1BUSU9OJzogdHJ1ZSxcbiAgJ1BST0dSRVNTJzogdHJ1ZSxcbiAgJ1NFTEVDVCc6IHRydWUsXG4gICdURVhUQVJFQSc6IHRydWUsXG59O1xuXG4vKiogRXhwb3J0ZWQgZm9yIHRlc3RpbmcuICovXG5leHBvcnQgY29uc3QgdGVzdGluZyA9IHtcbiAgc2V0SXNNYWModmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpc01hYyA9IHZhbHVlO1xuICB9LFxufTtcbiJdfQ==
|
|
633
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3ByaW1pdGl2ZXMvZXZlbnQtZGlzcGF0Y2gvc3JjL2V2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUdILE9BQU8sRUFBQyxjQUFjLEVBQUUsU0FBUyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3ZELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFbkM7O0dBRUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsU0FBaUI7SUFDbkQseUVBQXlFO0lBQ3pFLDJFQUEyRTtJQUMzRSx5RUFBeUU7SUFDekUscUVBQXFFO0lBQ3JFLHVEQUF1RDtJQUN2RCxJQUFJLFNBQVMsS0FBSyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdkMsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDO0lBQzdCLENBQUM7U0FBTSxJQUFJLFNBQVMsS0FBSyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDOUMsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDO0lBQzVCLENBQUM7U0FBTSxJQUFJLFNBQVMsS0FBSyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDaEQsT0FBTyxTQUFTLENBQUMsV0FBVyxDQUFDO0lBQy9CLENBQUM7U0FBTSxJQUFJLFNBQVMsS0FBSyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDaEQsT0FBTyxTQUFTLENBQUMsVUFBVSxDQUFDO0lBQzlCLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLE9BQWdCLEVBQ2hCLFNBQWlCLEVBQ2pCLE9BQStCO0lBRS9CLG9EQUFvRDtJQUNwRCxTQUFTO0lBQ1QsRUFBRTtJQUNGLDRFQUE0RTtJQUM1RSx1RUFBdUU7SUFDdkUsWUFB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QVUsRUFBRSxJQUFJO0lBQ2hCLFFBQVEsRUFBRSxJQUFJO0lBQ2QsVUFBVSxFQUFFLElBQUk7SUFDaEIsUUFBUSxFQUFFLElBQUk7SUFDZCxVQUFVLEVBQUUsSUFBSTtDQUNqQixDQUFDO0FBRUYsNEJBQTRCO0FBQzVCLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRztJQUNyQixRQUFRLENBQUMsS0FBYztRQUNyQixLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLENBQUM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7RXZlbnRIYW5kbGVySW5mb30gZnJvbSAnLi9ldmVudF9oYW5kbGVyJztcbmltcG9ydCB7aXNDYXB0dXJlRXZlbnQsIEV2ZW50VHlwZX0gZnJvbSAnLi9ldmVudF90eXBlJztcbmltcG9ydCB7S2V5Q29kZX0gZnJvbSAnLi9rZXlfY29kZSc7XG5cbi8qKlxuICogR2V0cyBhIGJyb3dzZXIgZXZlbnQgdHlwZSwgaWYgaXQgd291bGQgZGlmZmVyIGZyb20gdGhlIEpTQWN0aW9uIGV2ZW50IHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCcm93c2VyRXZlbnRUeXBlKGV2ZW50VHlwZTogc3RyaW5nKSB7XG4gIC8vIE1vdXNlZW50ZXIgYW5kIG1vdXNlbGVhdmUgZXZlbnRzIGFyZSBub3QgaGFuZGxlZCBkaXJlY3RseSBiZWNhdXNlIHRoZXlcbiAgLy8gYXJlIG5vdCBhdmFpbGFibGUgZXZlcnl3aGVyZS4gSW4gYnJvd3NlcnMgd2hlcmUgdGhleSBhcmUgYXZhaWxhYmxlLCB0aGV5XG4gIC8vIGRvbid0IGJ1YmJsZSBhbmQgYXJlbid0IHZpc2libGUgYXQgdGhlIGNvbnRhaW5lciBib3VuZGFyeS4gSW5zdGVhZCwgd2VcbiAgLy8gc3ludGhlc2l6ZSB0aGUgbW91c2VlbnRlciBhbmQgbW91c2VsZWF2ZSBldmVudHMgZnJvbSBtb3VzZW92ZXIgYW5kXG4gIC8vIG1vdXNlb3V0IGV2ZW50cywgcmVzcGVjdGl2ZWx5LiBDZi4gZXZlbnRjb250cmFjdC5qcy5cbiAgaWYgKGV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLk1PVVNFRU5URVIpIHtcbiAgICByZXR1cm4gRXZlbnRUeXBlLk1PVVNFT1ZFUjtcbiAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09IEV2ZW50VHlwZS5NT1VTRUxFQVZFKSB7XG4gICAgcmV0dXJuIEV2ZW50VHlwZS5NT1VTRU9VVDtcbiAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09IEV2ZW50VHlwZS5QT0lOVEVSRU5URVIpIHtcbiAgICByZXR1cm4gRXZlbnRUeXBlLlBPSU5URVJPVkVSO1xuICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLlBPSU5URVJMRUFWRSkge1xuICAgIHJldHVybiBFdmVudFR5cGUuUE9JTlRFUk9VVDtcbiAgfVxuICByZXR1cm4gZXZlbnRUeXBlO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgZXZlbnQgaGFuZGxlciBmdW5jdGlvbiB3aXRoIHRoZSBnaXZlbiBET00gZWxlbWVudCBmb3JcbiAqIHRoZSBnaXZlbiBldmVudCB0eXBlLlxuICpcbiAqIEBwYXJhbSBlbGVtZW50IFRoZSBlbGVtZW50LlxuICogQHBhcmFtIGV2ZW50VHlwZSBUaGUgZXZlbnQgdHlwZS5cbiAqIEBwYXJhbSBoYW5kbGVyIFRoZSBoYW5kbGVyIGZ1bmN0aW9uIHRvIGluc3RhbGwuXG4gKiBAcmV0dXJuIEluZm9ybWF0aW9uIG5lZWRlZCB0byB1bmluc3RhbGwgdGhlIGV2ZW50IGhhbmRsZXIgZXZlbnR1YWxseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIoXG4gIGVsZW1lbnQ6IEVsZW1lbnQsXG4gIGV2ZW50VHlwZTogc3RyaW5nLFxuICBoYW5kbGVyOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkLFxuKTogRXZlbnRIYW5kbGVySW5mbyB7XG4gIC8vIEFsbCBldmVudCBoYW5kbGVycyBhcmUgcmVnaXN0ZXJlZCBpbiB0aGUgYnViYmxpbmdcbiAgLy8gcGhhc2UuXG4gIC8vXG4gIC8vIEFsbCBicm93c2VycyBzdXBwb3J0IGZvY3VzIGFuZCBibHVyLCBidXQgdGhlc2UgZXZlbnRzIG9ubHkgYXJlIHByb3BhZ2F0ZWRcbiAgLy8gaW4gdGhlIGNhcHR1cmUgcGhhc2UuIFZlcnkgbGVnYWN5IGJyb3dzZXJzIGRvIG5vdCBzdXBwb3J0IGZvY3VzaW4gb3JcbiAgLy8gZm9jdXNvdXQuXG4gIC8vXG4gIC8vIEl0IHdvdWxkIGJlIGEgYmFkIGlkZWEgdG8gcmVnaXN0ZXIgYWxsIGV2ZW50IGhhbmRsZXJzIGluIHRoZVxuICAvLyBjYXB0dXJlIHBoYXNlIGJlY2F1c2UgdGhlbiByZWd1bGFyIG9uY2xpY2sgaGFuZGxlcnMgd291bGQgbm90IGJlXG4gIC8vIGV4ZWN1dGVkIGF0IGFsbCBvbiBldmVudHMgdGhhdCB0cmlnZ2VyIGEganNhY3Rpb24uIFRoYXQncyBub3RcbiAgLy8gZW50aXJlbHkgd2hhdCB3ZSB3YW50LCBhdCBsZWFzdCBmb3Igbm93LlxuICAvL1xuICAvLyBFcnJvciBhbmQgbG9hZCBldmVudHMgKGkuZS4gb24gaW1hZ2VzKSBkbyBub3QgYnViYmxlIHNvIHRoZXkgYXJlIGFsc29cbiAgLy8gaGFuZGxlZCBpbiB0aGUgY2FwdHVyZSBwaGFzZS5cbiAgbGV0IGNhcHR1cmUgPSBmYWxzZTtcblxuICBpZiAoaXNDYXB0dXJlRXZlbnQoZXZlbnRUeXBlKSkge1xuICAgIGNhcHR1cmUgPSB0cnVlO1xuICB9XG4gIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGNhcHR1cmUpO1xuXG4gIHJldHVybiB7ZXZlbnRUeXBlLCBoYW5kbGVyLCBjYXB0dXJlfTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBldmVudCBoYW5kbGVyIGZvciB0aGUgZ2l2ZW4gZXZlbnQgZnJvbSB0aGUgZWxlbWVudC5cbiAqIHRoZSBnaXZlbiBldmVudCB0eXBlLlxuICpcbiAqIEBwYXJhbSBlbGVtZW50IFRoZSBlbGVtZW50LlxuICogQHBhcmFtIGluZm8gVGhlIGluZm9ybWF0aW9uIG5lZWRlZCB0byBkZXJlZ2lzdGVyIHRoZSBoYW5kbGVyLCBhcyByZXR1cm5lZCBieVxuICogICAgIGFkZEV2ZW50TGlzdGVuZXIoKSwgYWJvdmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKGVsZW1lbnQ6IEVsZW1lbnQsIGluZm86IEV2ZW50SGFuZGxlckluZm8pIHtcbiAgaWYgKGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihpbmZvLmV2ZW50VHlwZSwgaW5mby5oYW5kbGVyIGFzIEV2ZW50TGlzdGVuZXIsIGluZm8uY2FwdHVyZSk7XG4gICAgLy8gYGRldGFjaEV2ZW50YCBpcyBhbiBvbGQgRE9NIEFQSS5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gIH0gZWxzZSBpZiAoKGVsZW1lbnQgYXMgYW55KS5kZXRhY2hFdmVudCkge1xuICAgIC8vIGBkZXRhY2hFdmVudGAgaXMgYW4gb2xkIERPTSBBUEkuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgIChlbGVtZW50IGFzIGFueSkuZGV0YWNoRXZlbnQoYG9uJHtpbmZvLmV2ZW50VHlwZX1gLCBpbmZvLmhhbmRsZXIpO1xuICB9XG59XG5cbi8qKlxuICogQ2FuY2VscyBwcm9wYWdhdGlvbiBvZiBhbiBldmVudC5cbiAqIEBwYXJhbSBlIFRoZSBldmVudCB0byBjYW5jZWwgcHJvcGFnYXRpb24gZm9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RvcFByb3BhZ2F0aW9uKGU6IEV2ZW50KSB7XG4gIGUuc3RvcFByb3BhZ2F0aW9uID8gZS5zdG9wUHJvcGFnYXRpb24oKSA6IChlLmNhbmNlbEJ1YmJsZSA9IHRydWUpO1xufVxuXG4vKipcbiAqIFByZXZlbnRzIHRoZSBkZWZhdWx0IGFjdGlvbiBvZiBhbiBldmVudC5cbiAqIEBwYXJhbSBlIFRoZSBldmVudCB0byBwcmV2ZW50IHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdChlOiBFdmVudCkge1xuICBlLnByZXZlbnREZWZhdWx0ID8gZS5wcmV2ZW50RGVmYXVsdCgpIDogKGUucmV0dXJuVmFsdWUgPSBmYWxzZSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgdGFyZ2V0IEVsZW1lbnQgb2YgdGhlIGV2ZW50LiBJbiBGaXJlZm94LCBhIHRleHQgbm9kZSBtYXkgYXBwZWFyIGFzXG4gKiB0aGUgdGFyZ2V0IG9mIHRoZSBldmVudCwgaW4gd2hpY2ggY2FzZSB3ZSByZXR1cm4gdGhlIHBhcmVudCBlbGVtZW50IG9mIHRoZVxuICogdGV4dCBub2RlLlxuICogQHBhcmFtIGUgVGhlIGV2ZW50IHRvIGdldCB0aGUgdGFyZ2V0IG9mLlxuICogQHJldHVybiBUaGUgdGFyZ2V0IGVsZW1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYXJnZXQoZTogRXZlbnQpOiBFbGVtZW50IHtcbiAgbGV0IGVsID0gZS50YXJnZXQgYXMgRWxlbWVudDtcblxuICAvLyBJbiBGaXJlZm94LCB0aGUgZXZlbnQgbWF5IGhhdmUgYSB0ZXh0IG5vZGUgYXMgaXRzIHRhcmdldC4gV2UgYWx3YXlzXG4gIC8vIHdhbnQgdGhlIHBhcmVudCBFbGVtZW50IHRoZSB0ZXh0IG5vZGUgYmVsb25ncyB0bywgaG93ZXZlci5cbiAgaWYgKCFlbC5nZXRBdHRyaWJ1dGUgJiYgZWwucGFyZW50Tm9kZSkge1xuICAgIGVsID0gZWwucGFyZW50Tm9kZSBhcyBFbGVtZW50O1xuICB9XG5cbiAgcmV0dXJuIGVsO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgd2UgYXJlIG9uIGEgTWFjLiBOb3QgcHVsbGluZyBpbiB1c2VyYWdlbnQganVzdCBmb3IgdGhpcy5cbiAqL1xubGV0IGlzTWFjOiBib29sZWFuID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgL01hY2ludG9zaC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGFuZCByZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIGV2ZW50ICh3aGljaCBpcyBhc3N1bWVkIHRvIGJlIGFcbiAqIGNsaWNrIGV2ZW50KSBpcyBhIG1pZGRsZSBjbGljay5cbiAqIE5PVEU6IFRoZXJlIGlzIG5vdCBhIGNvbnNpc3RlbnQgd2F5IHRvIGlkZW50aWZ5IG1pZGRsZSBjbGlja1xuICogaHR0cDovL3d3dy51bml4cGFwYS5jb20vanMvbW91c2UuaHRtbFxuICovXG5mdW5jdGlvbiBpc01pZGRsZUNsaWNrKGU6IEV2ZW50KTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgLy8gYHdoaWNoYCBpcyBhbiBvbGQgRE9NIEFQSS5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgKGUgYXMgYW55KS53aGljaCA9PT0gMiB8fFxuICAgIC8vIGB3aGljaGAgaXMgYW4gb2xkIERPTSBBUEkuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgICgoZSBhcyBhbnkpLndoaWNoID09IG51bGwgJiZcbiAgICAgIC8vIGBidXR0b25gIGlzIGFuIG9sZCBET00gQVBJLlxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgICAgKGUgYXMgYW55KS5idXR0b24gPT09IDQpIC8vIG1pZGRsZSBjbGljayBmb3IgSUVcbiAgKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGFuZCByZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIGV2ZW50ICh3aGljaCBpcyBhc3N1bWVkXG4gKiB0byBiZSBhIGNsaWNrIGV2ZW50KSBpcyBtb2RpZmllZC4gQSBtaWRkbGUgY2xpY2sgaXMgY29uc2lkZXJlZCBhIG1vZGlmaWVkXG4gKiBjbGljayB0byByZXRhaW4gdGhlIGRlZmF1bHQgYnJvd3NlciBhY3Rpb24sIHdoaWNoIG9wZW5zIGEgbGluayBpbiBhIG5ldyB0YWIuXG4gKiBAcGFyYW0gZSBUaGUgZXZlbnQuXG4gKiBAcmV0dXJuIFdoZXRoZXIgdGhlIGdpdmVuIGV2ZW50IGlzIG1vZGlmaWVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNNb2RpZmllZENsaWNrRXZlbnQoZTogRXZlbnQpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICAvLyBgbWV0YUtleWAgaXMgYW4gb2xkIERPTSBBUEkuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgIChpc01hYyAmJiAoZSBhcyBhbnkpLm1ldGFLZXkpIHx8XG4gICAgLy8gYGN0cmxLZXlgIGlzIGFuIG9sZCBET00gQVBJLlxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICAoIWlzTWFjICYmIChlIGFzIGFueSkuY3RybEtleSkgfHxcbiAgICBpc01pZGRsZUNsaWNrKGUpIHx8XG4gICAgLy8gYHNoaWZ0S2V5YCBpcyBhbiBvbGQgRE9NIEFQSS5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgKGUgYXMgYW55KS5zaGlmdEtleVxuICApO1xufVxuXG4vKiogV2hldGhlciB3ZSBhcmUgb24gV2ViS2l0IChlLmcuLCBDaHJvbWUpLiAqL1xuZXhwb3J0IGNvbnN0IGlzV2ViS2l0OiBib29sZWFuID1cbiAgdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgIS9PcGVyYS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSAmJlxuICAvV2ViS2l0Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuXG4vKiogV2hldGhlciB3ZSBhcmUgb24gSUUuICovXG5leHBvcnQgY29uc3QgaXNJZTogYm9vbGVhbiA9XG4gIHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmXG4gICgvTVNJRS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSB8fCAvVHJpZGVudC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSk7XG5cbi8qKiBXaGV0aGVyIHdlIGFyZSBvbiBHZWNrbyAoZS5nLiwgRmlyZWZveCkuICovXG5leHBvcnQgY29uc3QgaXNHZWNrbzogYm9vbGVhbiA9XG4gIHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmXG4gICEvT3BlcmF8V2ViS2l0Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpICYmXG4gIC9HZWNrby8udGVzdChuYXZpZ2F0b3IucHJvZHVjdCk7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBhbmQgcmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBlbGVtZW50IGlzIGEgdmFsaWQgdGFyZ2V0IGZvclxuICoga2V5cHJlc3Mva2V5ZG93biBET00gZXZlbnRzIHRoYXQgYWN0IGxpa2UgcmVndWxhciBET00gY2xpY2tzLlxuICogQHBhcmFtIGVsIFRoZSBlbGVtZW50LlxuICogQHJldHVybiBXaGV0aGVyIHRoZSBnaXZlbiBlbGVtZW50IGlzIGEgdmFsaWQgYWN0aW9uIGtleSB0YXJnZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkQWN0aW9uS2V5VGFyZ2V0KGVsOiBFbGVtZW50KTogYm9vbGVhbiB7XG4gIGlmICghKCdnZXRBdHRyaWJ1dGUnIGluIGVsKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoaXNUZXh0Q29udHJvbChlbCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGlzTmF0aXZlbHlBY3RpdmF0YWJsZShlbCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gYGlzQ29udGVudEVkaXRhYmxlYCBpcyBhbiBvbGQgRE9NIEFQSS5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICBpZiAoKGVsIGFzIGFueSkuaXNDb250ZW50RWRpdGFibGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGFuIGV2ZW50IGhhcyBhIG1vZGlmaWVyIGtleSBhY3RpdmF0ZWQuXG4gKiBAcGFyYW0gZSBUaGUgZXZlbnQuXG4gKiBAcmV0dXJuIFRydWUsIGlmIGEgbW9kaWZpZXIga2V5IGlzIGFjdGl2YXRlZC5cbiAqL1xuZnVuY3Rpb24gaGFzTW9kaWZpZXJLZXkoZTogRXZlbnQpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICAvLyBgY3RybEtleWAgaXMgYW4gb2xkIERPTSBBUEkuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgIChlIGFzIGFueSkuY3RybEtleSB8fFxuICAgIC8vIGBzaGlmdEtleWAgaXMgYW4gb2xkIERPTSBBUEkuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgIChlIGFzIGFueSkuc2hpZnRLZXkgfHxcbiAgICAvLyBgYWx0S2V5YCBpcyBhbiBvbGQgRE9NIEFQSS5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgKGUgYXMgYW55KS5hbHRLZXkgfHxcbiAgICAvLyBgbWV0YUtleWAgaXMgYW4gb2xkIERPTSBBUEkuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgIChlIGFzIGFueSkubWV0YUtleVxuICApO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgYW5kIHJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gZXZlbnQgaGFzIGEgdGFyZ2V0IHRoYXQgYWxyZWFkeVxuICogaGFzIGV2ZW50IGhhbmRsZXJzIGF0dGFjaGVkIGJlY2F1c2UgaXQgaXMgYSBuYXRpdmUgSFRNTCBjb250cm9sLiBVc2VkIHRvXG4gKiBkZXRlcm1pbmUgaWYgcHJldmVudERlZmF1bHQgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIGlzQWN0aW9uS2V5RXZlbnQgaXMgdHJ1ZS5cbiAqIEBwYXJhbSBlIFRoZSBldmVudC5cbiAqIEByZXR1cm4gSWYgcHJldmVudERlZmF1bHQgc2hvdWxkIGJlIGNhbGxlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZENhbGxQcmV2ZW50RGVmYXVsdE9uTmF0aXZlSHRtbENvbnRyb2woZTogRXZlbnQpOiBib29sZWFuIHtcbiAgY29uc3QgZWwgPSBnZXRUYXJnZXQoZSk7XG4gIGNvbnN0IHRhZ05hbWUgPSBlbC50YWdOYW1lLnRvVXBwZXJDYXNlKCk7XG4gIGNvbnN0IHJvbGUgPSAoZWwuZ2V0QXR0cmlidXRlKCdyb2xlJykgfHwgJycpLnRvVXBwZXJDYXNlKCk7XG5cbiAgaWYgKHRhZ05hbWUgPT09ICdCVVRUT04nIHx8IHJvbGUgPT09ICdCVVRUT04nKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKCFpc05hdGl2ZUhUTUxDb250cm9sKGVsKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodGFnTmFtZSA9PT0gJ0EnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBGaXggZm9yIHBoeXNpY2FsIGQtcGFkcyBvbiBmZWF0dXJlIHBob25lIHBsYXRmb3JtczsgdGhlIG5hdGl2ZSBldmVudFxuICAgKiAoaWUuIGlzVHJ1c3RlZDogdHJ1ZSkgbmVlZHMgdG8gZmlyZSB0byBzaG93IHRoZSBPUFRJT04gbGlzdC4gU2VlXG4gICAqIGIvMTM1Mjg4NDY5IGZvciBtb3JlIGluZm8uXG4gICAqL1xuICBpZiAodGFnTmFtZSA9PT0gJ1NFTEVDVCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHByb2Nlc3NTcGFjZShlbCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGlzVGV4dENvbnRyb2woZWwpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgYW5kIHJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gZXZlbnQgYWN0cyBsaWtlIGEgcmVndWxhciBET00gY2xpY2ssXG4gKiBhbmQgc2hvdWxkIGJlIGhhbmRsZWQgaW5zdGVhZCBvZiB0aGUgY2xpY2suICBJZiB0aGlzIHJldHVybnMgdHJ1ZSwgdGhlIGNhbGxlclxuICogd2lsbCBjYWxsIHByZXZlbnREZWZhdWx0KCkgdG8gcHJldmVudCBhIHBvc3NpYmxlIGR1cGxpY2F0ZSBldmVudC5cbiAqIFRoaXMgaXMgcmVwcmVzZW50ZWQgYnkgYSBrZXlwcmVzcyAoa2V5ZG93biBvbiBHZWNrbyBicm93c2Vycykgb24gRW50ZXIgb3JcbiAqIFNwYWNlIGtleS5cbiAqIEBwYXJhbSBlIFRoZSBldmVudC5cbiAqIEByZXR1cm4gVHJ1ZSwgaWYgdGhlIGV2ZW50IGVtdWxhdGVzIGEgRE9NIGNsaWNrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBY3Rpb25LZXlFdmVudChlOiBFdmVudCk6IGJvb2xlYW4ge1xuICBsZXQga2V5ID1cbiAgICAvLyBgd2hpY2hgIGlzIGFuIG9sZCBET00gQVBJLlxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICAoZSBhcyBhbnkpLndoaWNoIHx8XG4gICAgLy8gYGtleUNvZGVgIGlzIGFuIG9sZCBET00gQVBJLlxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICAoZSBhcyBhbnkpLmtleUNvZGU7XG4gIGlmICgha2V5ICYmIChlIGFzIEtleWJvYXJkRXZlbnQpLmtleSkge1xuICAgIGtleSA9IEFDVElPTl9LRVlfVE9fS0VZQ09ERVsoZSBhcyBLZXlib2FyZEV2ZW50KS5rZXldO1xuICB9XG4gIGlmIChpc1dlYktpdCAmJiBrZXkgPT09IEtleUNvZGUuTUFDX0VOVEVSKSB7XG4gICAga2V5ID0gS2V5Q29kZS5FTlRFUjtcbiAgfVxuICBpZiAoa2V5ICE9PSBLZXlDb2RlLkVOVEVSICYmIGtleSAhPT0gS2V5Q29kZS5TUEFDRSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBlbCA9IGdldFRhcmdldChlKTtcbiAgaWYgKGUudHlwZSAhPT0gRXZlbnRUeXBlLktFWURPV04gfHwgIWlzVmFsaWRBY3Rpb25LZXlUYXJnZXQoZWwpIHx8IGhhc01vZGlmaWVyS2V5KGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRm9yIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIj4sIHdlIG11c3Qgb25seSBoYW5kbGUgdGhlIGJyb3dzZXIncyBuYXRpdmUgY2xpY2tcbiAgLy8gZXZlbnQsIHNvIHRoYXQgdGhlIGJyb3dzZXIgY2FuIHRvZ2dsZSB0aGUgY2hlY2tib3guXG4gIGlmIChwcm9jZXNzU3BhY2UoZWwpICYmIGtleSA9PT0gS2V5Q29kZS5TUEFDRSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIElmIHRoaXMgZWxlbWVudCBpcyBub24tZm9jdXNhYmxlLCBpZ25vcmUgc3RyYXkga2V5c3Ryb2tlcyAoYi8xODMzNzIwOSlcbiAgLy8gU3NjcmVlbiByZWFkZXJzIGNhbiBtb3ZlIHdpdGhvdXQgdGFiIGZvY3VzLCBzbyBhbnkgdGFiSW5kZXggaXMgZm9jdXNhYmxlLlxuICAvLyBTZWUgQi8yMTgwOTYwNFxuICBpZiAoIWlzRm9jdXNhYmxlKGVsKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHR5cGUgPSAoXG4gICAgZWwuZ2V0QXR0cmlidXRlKCdyb2xlJykgfHxcbiAgICAoZWwgYXMgSFRNTElucHV0RWxlbWVudCkudHlwZSB8fFxuICAgIGVsLnRhZ05hbWVcbiAgKS50b1VwcGVyQ2FzZSgpO1xuICBjb25zdCBpc1NwZWNpZmljVHJpZ2dlcktleSA9IElERU5USUZJRVJfVE9fS0VZX1RSSUdHRVJfTUFQUElOR1t0eXBlXSAlIGtleSA9PT0gMDtcbiAgY29uc3QgaXNEZWZhdWx0VHJpZ2dlcktleSA9ICEodHlwZSBpbiBJREVOVElGSUVSX1RPX0tFWV9UUklHR0VSX01BUFBJTkcpICYmIGtleSA9PT0gS2V5Q29kZS5FTlRFUjtcbiAgY29uc3QgaGFzVHlwZSA9IGVsLnRhZ05hbWUudG9VcHBlckNhc2UoKSAhPT0gJ0lOUFVUJyB8fCAhIShlbCBhcyBIVE1MSW5wdXRFbGVtZW50KS50eXBlO1xuICByZXR1cm4gKGlzU3BlY2lmaWNUcmlnZ2VyS2V5IHx8IGlzRGVmYXVsdFRyaWdnZXJLZXkpICYmIGhhc1R5cGU7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBET00gZWxlbWVudCBjYW4gcmVjZWl2ZSBrZXlib2FyZCBmb2N1cy5cbiAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBnb29nLmRvbS5pc0ZvY3VzYWJsZSwgYnV0IHNpbXBsaWZpZWQgc2luY2Ugd2Ugc2hvdWxkbid0XG4gKiBjYXJlIGFib3V0IHZpc2liaWxpdHkgaWYgd2UncmUgYWxyZWFkeSBoYW5kbGluZyBhIGtleWJvYXJkIGV2ZW50LlxuICovXG5mdW5jdGlvbiBpc0ZvY3VzYWJsZShlbDogRWxlbWVudCk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIChlbC50YWdOYW1lIGluIE5BVElWRUxZX0ZPQ1VTQUJMRV9FTEVNRU5UUyB8fCBoYXNTcGVjaWZpZWRUYWJJbmRleChlbCkpICYmXG4gICAgIShlbCBhcyBIVE1MSW5wdXRFbGVtZW50KS5kaXNhYmxlZFxuICApO1xufVxuXG4vKipcbiAqIEBwYXJhbSBlbGVtZW50IEVsZW1lbnQgdG8gY2hlY2suXG4gKiBAcmV0dXJuIFdoZXRoZXIgdGhlIGVsZW1lbnQgaGFzIGEgc3BlY2lmaWVkIHRhYiBpbmRleC5cbiAqL1xuZnVuY3Rpb24gaGFzU3BlY2lmaWVkVGFiSW5kZXgoZWxlbWVudDogRWxlbWVudCk6IGJvb2xlYW4ge1xuICAvLyBJRSByZXR1cm5zIDAgZm9yIGFuIHVuc2V0IHRhYkluZGV4LCBzbyB3ZSBtdXN0IHVzZSBnZXRBdHRyaWJ1dGVOb2RlKCksXG4gIC8vIHdoaWNoIHJldHVybnMgYW4gb2JqZWN0IHdpdGggYSAnc3BlY2lmaWVkJyBwcm9wZXJ0eSBpZiB0YWJJbmRleCBpc1xuICAvLyBzcGVjaWZpZWQuICBUaGlzIHdvcmtzIG9uIG90aGVyIGJyb3dzZXJzLCB0b28uXG4gIGNvbnN0IGF0dHJOb2RlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlKCd0YWJpbmRleCcpOyAvLyBNdXN0IGJlIGxvd2VyY2FzZSFcbiAgcmV0dXJuIGF0dHJOb2RlICE9IG51bGwgJiYgYXR0ck5vZGUuc3BlY2lmaWVkO1xufVxuXG4vKiogRWxlbWVudCB0YWduYW1lcyB0aGF0IGFyZSBmb2N1c2FibGUgYnkgZGVmYXVsdC4gKi9cbmNvbnN0IE5BVElWRUxZX0ZPQ1VTQUJMRV9FTEVNRU5UUzoge1trZXk6IHN0cmluZ106IG51bWJlcn0gPSB7XG4gICdBJzogMSxcbiAgJ0lOUFVUJzogMSxcbiAgJ1RFWFRBUkVBJzogMSxcbiAgJ1NFTEVDVCc6IDEsXG4gICdCVVRUT04nOiAxLFxufTtcblxuLyoqIEByZXR1cm4gVHJ1ZSwgaWYgdGhlIFNwYWNlIGtleSB3YXMgcHJlc3NlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NwYWNlS2V5RXZlbnQoZTogRXZlbnQpOiBib29sZWFuIHtcbiAgY29uc3Qga2V5ID1cbiAgICAvLyBgd2hpY2hgIGlzIGFuIG9sZCBET00gQVBJLlxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICAoZSBhcyBhbnkpLndoaWNoIHx8XG4gICAgLy8gYGtleUNvZGVgIGlzIGFuIG9sZCBET00gQVBJLlxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICAoZSBhcyBhbnkpLmtleUNvZGU7XG4gIGNvbnN0IGVsID0gZ2V0VGFyZ2V0KGUpO1xuICBjb25zdCBlbGVtZW50TmFtZSA9ICgoZWwgYXMgSFRNTElucHV0RWxlbWVudCkudHlwZSB8fCBlbC50YWdOYW1lKS50b1VwcGVyQ2FzZSgpO1xuICByZXR1cm4ga2V5ID09PSBLZXlDb2RlLlNQQUNFICYmIGVsZW1lbnROYW1lICE9PSAnQ0hFQ0tCT1gnO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgZXZlbnQgY29ycmVzcG9uZHMgdG8gYSBub24tYnViYmxpbmcgbW91c2VcbiAqIGV2ZW50IHR5cGUgKG1vdXNlZW50ZXIsIG1vdXNlbGVhdmUsIHBvaW50ZXJlbnRlciwgYW5kIHBvaW50ZXJsZWF2ZSkuXG4gKlxuICogRHVyaW5nIG1vdXNlb3ZlciAobW91c2VlbnRlcikgYW5kIHBvaW50ZXJvdmVyIChwb2ludGVyZW50ZXIpLCB0aGVcbiAqIHJlbGF0ZWRUYXJnZXQgaXMgdGhlIGVsZW1lbnQgYmVpbmcgZW50ZXJlZCBmcm9tLiBEdXJpbmcgbW91c2VvdXQgKG1vdXNlbGVhdmUpXG4gKiBhbmQgcG9pbnRlcm91dCAocG9pbnRlcmxlYXZlKSwgdGhlIHJlbGF0ZWRUYXJnZXQgaXMgdGhlIGVsZW1lbnQgYmVpbmcgZXhpdGVkXG4gKiB0by5cbiAqXG4gKiBJbiBib3RoIGNhc2VzLCBpZiByZWxhdGVkVGFyZ2V0IGlzIG91dHNpZGUgdGFyZ2V0LCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nXG4gKiBzcGVjaWFsIGV2ZW50IGhhcyBvY2N1cnJlZCwgb3RoZXJ3aXNlIGl0IGhhc24ndC5cbiAqXG4gKiBAcGFyYW0gZSBUaGUgbW91c2VvdmVyL21vdXNlb3V0IGV2ZW50LlxuICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgdGhlIG1vdXNlIHNwZWNpYWwgZXZlbnQuXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgZWxlbWVudCBvbiB3aGljaCB0aGUganNhY3Rpb24gZm9yIHRoZVxuICogICAgIG1vdXNlZW50ZXIvbW91c2VsZWF2ZSBldmVudCBpcyBkZWZpbmVkLlxuICogQHJldHVybiBUcnVlIGlmIHRoZSBldmVudCBpcyBhIG1vdXNlZW50ZXIvbW91c2VsZWF2ZSBldmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTW91c2VTcGVjaWFsRXZlbnQoZTogRXZlbnQsIHR5cGU6IHN0cmluZywgZWxlbWVudDogRWxlbWVudCk6IGJvb2xlYW4ge1xuICAvLyBgcmVsYXRlZFRhcmdldGAgaXMgYW4gb2xkIERPTSBBUEkuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgY29uc3QgcmVsYXRlZCA9IChlIGFzIGFueSkucmVsYXRlZFRhcmdldCBhcyBOb2RlO1xuXG4gIHJldHVybiAoXG4gICAgKChlLnR5cGUgPT09IEV2ZW50VHlwZS5NT1VTRU9WRVIgJiYgdHlwZSA9PT0gRXZlbnRUeXBlLk1PVVNFRU5URVIpIHx8XG4gICAgICAoZS50eXBlID09PSBFdmVudFR5cGUuTU9VU0VPVVQgJiYgdHlwZSA9PT0gRXZlbnRUeXBlLk1PVVNFTEVBVkUpIHx8XG4gICAgICAoZS50eXBlID09PSBFdmVudFR5cGUuUE9JTlRFUk9WRVIgJiYgdHlwZSA9PT0gRXZlbnRUeXBlLlBPSU5URVJFTlRFUikgfHxcbiAgICAgIChlLnR5cGUgPT09IEV2ZW50VHlwZS5QT0lOVEVST1VUICYmIHR5cGUgPT09IEV2ZW50VHlwZS5QT0lOVEVSTEVBVkUpKSAmJlxuICAgICghcmVsYXRlZCB8fCAocmVsYXRlZCAhPT0gZWxlbWVudCAmJiAhZWxlbWVudC5jb250YWlucyhyZWxhdGVkKSkpXG4gICk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBFdmVudExpa2Ugb2JqZWN0IGZvciBhIG1vdXNlZW50ZXIvbW91c2VsZWF2ZSBldmVudCB0aGF0J3NcbiAqIGRlcml2ZWQgZnJvbSB0aGUgb3JpZ2luYWwgY29ycmVzcG9uZGluZyBtb3VzZW92ZXIvbW91c2VvdXQgZXZlbnQuXG4gKiBAcGFyYW0gZSBUaGUgZXZlbnQuXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSBlbGVtZW50IG9uIHdoaWNoIHRoZSBqc2FjdGlvbiBmb3IgdGhlIG1vdXNlZW50ZXIvbW91c2VsZWF2ZVxuICogICAgIGV2ZW50IGlzIGRlZmluZWQuXG4gKiBAcmV0dXJuIEEgbW9kaWZpZWQgZXZlbnQtbGlrZSBvYmplY3QgY29waWVkIGZyb20gdGhlIGV2ZW50IG9iamVjdCBwYXNzZWQgaW50b1xuICogICAgIHRoaXMgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb3VzZVNwZWNpYWxFdmVudChlOiBFdmVudCwgdGFyZ2V0OiBFbGVtZW50KTogRXZlbnQge1xuICAvLyBXZSBoYXZlIHRvIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIGV2ZW50IG9iamVjdCBiZWNhdXNlIHdlIG5lZWQgdG8gbXV0YXRlXG4gIC8vIGl0cyBmaWVsZHMuIFdlIGRvIHRoaXMgZm9yIHRoZSBzcGVjaWFsIG1vdXNlIGV2ZW50cyBiZWNhdXNlIHRoZSBldmVudFxuICAvLyB0YXJnZXQgbmVlZHMgdG8gYmUgcmV0YXJnZXRlZCB0byB0aGUgYWN0aW9uIGVsZW1lbnQgcmF0aGVyIHRoYW4gdGhlIHJlYWxcbiAgLy8gZWxlbWVudCAoc2luY2Ugd2UgYXJlIHNpbXVsYXRpbmcgdGhlIHNwZWNpYWwgbW91c2UgZXZlbnRzIHdpdGggbW91c2VvdmVyL1xuICAvLyBtb3VzZW91dCkuXG4gIC8vXG4gIC8vIFNpbmNlIHdlJ3JlIG1ha2luZyBhIGNvcHkgYW55d2F5cywgd2UgbWlnaHQgYXMgd2VsbCBhdHRlbXB0IHRvIGNvbnZlcnRcbiAgLy8gdGhpcyBldmVudCBpbnRvIGEgcHNldWRvLXJlYWwgbW91c2VlbnRlci9tb3VzZWxlYXZlIGV2ZW50IGJ5IGFkanVzdGluZ1xuICAvLyBpdHMgdHlwZS5cbiAgLy9cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICBjb25zdCBjb3B5OiB7LXJlYWRvbmx5IFtQIGluIGtleW9mIEV2ZW50XT86IEV2ZW50W1BdfSA9IHt9O1xuICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGUpIHtcbiAgICBpZiAocHJvcGVydHkgPT09ICdzcmNFbGVtZW50JyB8fCBwcm9wZXJ0eSA9PT0gJ3RhcmdldCcpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSBwcm9wZXJ0eSBhcyBrZXlvZiBFdmVudDtcbiAgICAvLyBNYWtpbmcgYSBjb3B5IHJlcXVpcmVzIGl0ZXJhdGluZyB0aHJvdWdoIGFsbCBwcm9wZXJ0aWVzIG9mIGBFdmVudGAuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWRpY3QtYWNjZXNzLW9uLXN0cnVjdC10eXBlXG4gICAgY29uc3QgdmFsdWUgPSBlW2tleV07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIC8vIFZhbHVlIHNob3VsZCBiZSB0aGUgZXhwZWN0ZWQgdHlwZSwgYnV0IHRoZSB2YWx1ZSBvZiBga2V5YCBpcyBub3Qga25vd25cbiAgICAvLyBzdGF0aWNhbGx5LlxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICBjb3B5W2tleV0gPSB2YWx1ZSBhcyBhbnk7XG4gIH1cbiAgaWYgKGUudHlwZSA9PT0gRXZlbnRUeXBlLk1PVVNFT1ZFUikge1xuICAgIGNvcHlbJ3R5cGUnXSA9IEV2ZW50VHlwZS5NT1VTRUVOVEVSO1xuICB9IGVsc2UgaWYgKGUudHlwZSA9PT0gRXZlbnRUeXBlLk1PVVNFT1VUKSB7XG4gICAgY29weVsndHlwZSddID0gRXZlbnRUeXBlLk1PVVNFTEVBVkU7XG4gIH0gZWxzZSBpZiAoZS50eXBlID09PSBFdmVudFR5cGUuUE9JTlRFUk9WRVIpIHtcbiAgICBjb3B5Wyd0eXBlJ10gPSBFdmVudFR5cGUuUE9JTlRFUkVOVEVSO1xuICB9IGVsc2Uge1xuICAgIGNvcHlbJ3R5cGUnXSA9IEV2ZW50VHlwZS5QT0lOVEVSTEVBVkU7XG4gIH1cbiAgY29weVsndGFyZ2V0J10gPSBjb3B5WydzcmNFbGVtZW50J10gPSB0YXJnZXQ7XG4gIGNvcHlbJ2J1YmJsZXMnXSA9IGZhbHNlO1xuICByZXR1cm4gY29weSBhcyBFdmVudDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRvdWNoIGRhdGEgZXh0cmFjdGVkIGZyb20gdGhlIHRvdWNoIGV2ZW50OiBjbGllbnRYLCBjbGllbnRZLCBzY3JlZW5YXG4gKiBhbmQgc2NyZWVuWS4gSWYgdGhlIGV2ZW50IGhhcyBubyB0b3VjaCBpbmZvcm1hdGlvbiBhdCBhbGwsIHRoZSByZXR1cm5lZFxuICogdmFsdWUgaXMgbnVsbC5cbiAqXG4gKiBUaGUgZmllbGRzIG9mIHRoaXMgT2JqZWN0IGFyZSB1bnF1b3RlZC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQgQSB0b3VjaCBldmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRvdWNoRGF0YShcbiAgZXZlbnQ6IFRvdWNoRXZlbnQsXG4pOiB7Y2xpZW50WDogbnVtYmVyOyBjbGllbnRZOiBudW1iZXI7IHNjcmVlblg6IG51bWJlcjsgc2NyZWVuWTogbnVtYmVyfSB8IG51bGwge1xuICBjb25zdCB0b3VjaCA9XG4gICAgKGV2ZW50LmNoYW5nZWRUb3VjaGVzICYmIGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdKSB8fCAoZXZlbnQudG91Y2hlcyAmJiBldmVudC50b3VjaGVzWzBdKTtcbiAgaWYgKCF0b3VjaCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiB7XG4gICAgY2xpZW50WDogdG91Y2guY2xpZW50WCxcbiAgICBjbGllbnRZOiB0b3VjaC5jbGllbnRZLFxuICAgIHNjcmVlblg6IHRvdWNoLnNjcmVlblgsXG4gICAgc2NyZWVuWTogdG91Y2guc2NyZWVuWSxcbiAgfTtcbn1cblxuZGVjbGFyZSBpbnRlcmZhY2UgU3ludGhldGljTW91c2VFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgLy8gUmVkZWNsYXJlZCBmcm9tIEV2ZW50IHRvIGluZGljYXRlIHRoYXQgaXQgaXMgbm90IHJlYWRvbmx5LlxuICBkZWZhdWx0UHJldmVudGVkOiBib29sZWFuO1xuICBvcmlnaW5hbEV2ZW50VHlwZTogc3RyaW5nO1xuICBfcHJvcGFnYXRpb25TdG9wcGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IEV2ZW50TGlrZSBvYmplY3QgZm9yIGEgXCJjbGlja1wiIGV2ZW50IHRoYXQncyBkZXJpdmVkIGZyb20gdGhlXG4gKiBvcmlnaW5hbCBjb3JyZXNwb25kaW5nIFwidG91Y2hlbmRcIiBldmVudCBmb3IgYSBmYXN0LWNsaWNrIGltcGxlbWVudGF0aW9uLlxuICpcbiAqIEl0IHRha2VzIGEgdG91Y2ggZXZlbnQsIGFkZHMgY29tbW9uIGZpZWxkcyBmb3VuZCBpbiBhIGNsaWNrIGV2ZW50IGFuZFxuICogY2hhbmdlcyB0aGUgdHlwZSB0byAnY2xpY2snLCBzbyB0aGF0IHRoZSByZXN1bHRpbmcgZXZlbnQgbG9va3MgbW9yZSBsaWtlXG4gKiBhIHJlYWwgY2xpY2sgZXZlbnQuXG4gKlxuICogQHBhcmFtIGV2ZW50IEEgdG91Y2ggZXZlbnQuXG4gKiBAcmV0dXJuIEEgbW9kaWZpZWQgZXZlbnQtbGlrZSBvYmplY3QgY29waWVkIGZyb20gdGhlIGV2ZW50IG9iamVjdCBwYXNzZWQgaW50b1xuICogICAgIHRoaXMgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWNyZWF0ZVRvdWNoRXZlbnRBc0NsaWNrKGV2ZW50OiBUb3VjaEV2ZW50KTogTW91c2VFdmVudCB7XG4gIGNvbnN0IGNsaWNrOiB7LXJlYWRvbmx5IFtQIGluIGtleW9mIE1vdXNlRXZlbnRdPzogTW91c2VFdmVudFtQXX0gJiBQYXJ0aWFsPFN5bnRoZXRpY01vdXNlRXZlbnQ+ID1cbiAgICB7fTtcbiAgY2xpY2tbJ29yaWdpbmFsRXZlbnRUeXBlJ10gPSBldmVudC50eXBlO1xuICBjbGlja1sndHlwZSddID0gRXZlbnRUeXBlLkNMSUNLO1xuICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGV2ZW50KSB7XG4gICAgaWYgKHByb3BlcnR5ID09PSAndHlwZScgfHwgcHJvcGVydHkgPT09ICdzcmNFbGVtZW50Jykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGtleSA9IHByb3BlcnR5IGFzIGtleW9mIFRvdWNoRXZlbnQ7XG4gICAgLy8gTWFraW5nIGEgY29weSByZXF1aXJlcyBpdGVyYXRpbmcgdGhyb3VnaCBhbGwgcHJvcGVydGllcyBvZiBgVG91Y2hFdmVudGAuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWRpY3QtYWNjZXNzLW9uLXN0cnVjdC10eXBlXG4gICAgY29uc3QgdmFsdWUgPSBldmVudFtrZXldO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICAvLyBWYWx1ZSBzaG91bGQgYmUgdGhlIGV4cGVjdGVkIHR5cGUsIGJ1dCB0aGUgdmFsdWUgb2YgYGtleWAgaXMgbm90IGtub3duXG4gICAgLy8gc3RhdGljYWxseS5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgY2xpY2tba2V5IGFzIGtleW9mIE1vdXNlRXZlbnRdID0gdmFsdWUgYXMgYW55O1xuICB9XG5cbiAgLy8gRW5zdXJlIHRoYXQgdGhlIGV2ZW50IGhhcyB0aGUgbW9zdCByZWNlbnQgdGltZXN0YW1wLiBUaGlzIHRpbWVzdGFtcFxuICAvLyBtYXkgYmUgdXNlZCBpbiB0aGUgZnV0dXJlIHRvIHZhbGlkYXRlIG9yIGNhbmNlbCBzdWJzZXF1ZW50IGNsaWNrIGV2ZW50cy5cbiAgY2xpY2tbJ3RpbWVTdGFtcCddID0gRGF0ZS5ub3coKTtcblxuICAvLyBFbXVsYXRlIHByZXZlbnREZWZhdWx0IGFuZCBzdG9wUHJvcGFnYXRpb24gYmVoYXZpb3JcbiAgY2xpY2tbJ2RlZmF1bHRQcmV2ZW50ZWQnXSA9IGZhbHNlO1xuICBjbGlja1sncHJldmVudERlZmF1bHQnXSA9IHN5bnRoZXRpY1ByZXZlbnREZWZhdWx0O1xuICBjbGlja1snX3Byb3BhZ2F0aW9uU3RvcHBlZCddID0gZmFsc2U7XG4gIGNsaWNrWydzdG9wUHJvcGFnYXRpb24nXSA9IHN5bnRoZXRpY1N0b3BQcm9wYWdhdGlvbjtcblxuICAvLyBFbXVsYXRlIGNsaWNrIGNvb3JkaW5hdGVzIHVzaW5nIHRvdWNoIGluZm9cbiAgY29uc3QgdG91Y2ggPSBnZXRUb3VjaERhdGEoZXZlbnQpO1xuICBpZiAodG91Y2gpIHtcbiAgICBjbGlja1snY2xpZW50WCddID0gdG91Y2guY2xpZW50WDtcbiAgICBjbGlja1snY2xpZW50WSddID0gdG91Y2guY2xpZW50WTtcbiAgICBjbGlja1snc2NyZWVuWCddID0gdG91Y2guc2NyZWVuWDtcbiAgICBjbGlja1snc2NyZWVuWSddID0gdG91Y2guc2NyZWVuWTtcbiAgfVxuICByZXR1cm4gY2xpY2sgYXMgTW91c2VFdmVudDtcbn1cblxuLyoqXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBcInByZXZlbnREZWZhdWx0XCIgZm9yIGEgc3ludGhlc2l6ZWQgZXZlbnQuIFNpbXBseVxuICogc2V0cyBcImRlZmF1bHRQcmV2ZW50ZWRcIiBwcm9wZXJ0eSB0byB0cnVlLlxuICovXG5mdW5jdGlvbiBzeW50aGV0aWNQcmV2ZW50RGVmYXVsdCh0aGlzOiBFdmVudCkge1xuICAodGhpcyBhcyBTeW50aGV0aWNNb3VzZUV2ZW50KS5kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBcInN0b3BQcm9wYWdhdGlvblwiIGZvciBhIHN5bnRoZXNpemVkIGV2ZW50LiBJdCBzaW1wbHlcbiAqIHNldHMgYSBzeW50aGV0aWMgbm9uLXN0YW5kYXJkIFwiX3Byb3BhZ2F0aW9uU3RvcHBlZFwiIHByb3BlcnR5IHRvIHRydWUuXG4gKi9cbmZ1bmN0aW9uIHN5bnRoZXRpY1N0b3BQcm9wYWdhdGlvbih0aGlzOiBFdmVudCkge1xuICAodGhpcyBhcyBTeW50aGV0aWNNb3VzZUV2ZW50KS5fcHJvcGFnYXRpb25TdG9wcGVkID0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBNYXBwaW5nIG9mIEtleWJvYXJkRXZlbnQua2V5IHZhbHVlcyB0b1xuICogS2V5Q29kZSB2YWx1ZXMuXG4gKi9cbmNvbnN0IEFDVElPTl9LRVlfVE9fS0VZQ09ERToge1trZXk6IHN0cmluZ106IG51bWJlcn0gPSB7XG4gICdFbnRlcic6IEtleUNvZGUuRU5URVIsXG4gICcgJzogS2V5Q29kZS5TUEFDRSxcbn07XG5cbi8qKlxuICogTWFwcGluZyBvZiBIVE1MIGVsZW1lbnQgaWRlbnRpZmllcnMgKEFSSUEgcm9sZSwgdHlwZSwgb3IgdGFnTmFtZSkgdG8gdGhlXG4gKiBrZXlzIChlbnRlciBhbmQvb3Igc3BhY2UpIHRoYXQgc2hvdWxkIGFjdGl2YXRlIHRoZW0uIEEgdmFsdWUgb2YgemVybyBtZWFuc1xuICogdGhhdCBib3RoIHNob3VsZCBhY3RpdmF0ZSB0aGVtLlxuICovXG5leHBvcnQgY29uc3QgSURFTlRJRklFUl9UT19LRVlfVFJJR0dFUl9NQVBQSU5HOiB7W2tleTogc3RyaW5nXTogbnVtYmVyfSA9IHtcbiAgJ0EnOiBLZXlDb2RlLkVOVEVSLFxuICAnQlVUVE9OJzogMCxcbiAgJ0NIRUNLQk9YJzogS2V5Q29kZS5TUEFDRSxcbiAgJ0NPTUJPQk9YJzogS2V5Q29kZS5FTlRFUixcbiAgJ0ZJTEUnOiAwLFxuICAnR1JJRENFTEwnOiBLZXlDb2RlLkVOVEVSLFxuICAnTElOSyc6IEtleUNvZGUuRU5URVIsXG4gICdMSVNUQk9YJzogS2V5Q29kZS5FTlRFUixcbiAgJ01FTlUnOiAwLFxuICAnTUVOVUJBUic6IDAsXG4gICdNRU5VSVRFTSc6IDAsXG4gICdNRU5VSVRFTUNIRUNLQk9YJzogMCxcbiAgJ01FTlVJVEVNUkFESU8nOiAwLFxuICAnT1BUSU9OJzogMCxcbiAgJ1JBRElPJzogS2V5Q29kZS5TUEFDRSxcbiAgJ1JBRElPR1JPVVAnOiBLZXlDb2RlLlNQQUNFLFxuICAnUkVTRVQnOiAwLFxuICAnU1VCTUlUJzogMCxcbiAgJ1NXSVRDSCc6IEtleUNvZGUuU1BBQ0UsXG4gICdUQUInOiAwLFxuICAnVFJFRSc6IEtleUNvZGUuRU5URVIsXG4gICdUUkVFSVRFTSc6IEtleUNvZGUuRU5URVIsXG59O1xuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdG8gcHJvY2VzcyBzcGFjZSBiYXNlZCBvbiB0aGUgdHlwZSBvZiB0aGUgZWxlbWVudDtcbiAqIGNoZWNrcyB0byBtYWtlIHN1cmUgdGhhdCB0eXBlIGlzIG5vdCBudWxsLlxuICogQHBhcmFtIGVsZW1lbnQgVGhlIGVsZW1lbnQuXG4gKiBAcmV0dXJuIFdoZXRoZXIgb3Igbm90IHRvIHByb2Nlc3Mgc3BhY2UgYmFzZWQgb24gdHlwZS5cbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc1NwYWNlKGVsZW1lbnQ6IEVsZW1lbnQpOiBib29sZWFuIHtcbiAgY29uc3QgdHlwZSA9IChlbGVtZW50LmdldEF0dHJpYnV0ZSgndHlwZScpIHx8IGVsZW1lbnQudGFnTmFtZSkudG9VcHBlckNhc2UoKTtcbiAgcmV0dXJuIHR5cGUgaW4gUFJPQ0VTU19TUEFDRTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiBlbGVtZW50IGlzIGEgdGV4dCBjb250cm9sLlxuICogQHBhcmFtIGVsIFRoZSBlbGVtZW50LlxuICogQHJldHVybiBXaGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBhIHRleHQgY29udHJvbC5cbiAqL1xuZnVuY3Rpb24gaXNUZXh0Q29udHJvbChlbDogRWxlbWVudCk6IGJvb2xlYW4ge1xuICBjb25zdCB0eXBlID0gKGVsLmdldEF0dHJpYnV0ZSgndHlwZScpIHx8IGVsLnRhZ05hbWUpLnRvVXBwZXJDYXNlKCk7XG4gIHJldHVybiB0eXBlIGluIFRFWFRfQ09OVFJPTFM7XG59XG5cbi8qKlxuICogUmV0dXJucyBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBhIG5hdGl2ZSBIVE1MIGNvbnRyb2wuXG4gKiBAcGFyYW0gZWwgVGhlIGVsZW1lbnQuXG4gKiBAcmV0dXJuIElmIHRoZSBnaXZlbiBlbGVtZW50IGlzIGEgbmF0aXZlIEhUTUwgY29udHJvbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTmF0aXZlSFRNTENvbnRyb2woZWw6IEVsZW1lbnQpOiBib29sZWFuIHtcbiAgcmV0dXJuIGVsLnRhZ05hbWUudG9VcHBlckNhc2UoKSBpbiBOQVRJVkVfSFRNTF9DT05UUk9MUztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGlmIHRoZSBnaXZlbiBlbGVtZW50IGlzIG5hdGl2ZWx5IGFjdGl2YXRhYmxlLiBCcm93c2VycyBlbWl0IGNsaWNrXG4gKiBldmVudHMgZm9yIG5hdGl2ZWx5IGFjdGl2YXRhYmxlIGVsZW1lbnRzLCBldmVuIHdoZW4gYWN0aXZhdGVkIHZpYSBrZXlib2FyZC5cbiAqIEZvciB0aGVzZSBlbGVtZW50cywgd2UgZG9uJ3QgbmVlZCB0byByYWlzZSBhMTF5IGNsaWNrIGV2ZW50cy5cbiAqIEBwYXJhbSBlbCBUaGUgZWxlbWVudC5cbiAqIEByZXR1cm4gSWYgdGhlIGdpdmVuIGVsZW1lbnQgaXMgYSBuYXRpdmUgSFRNTCBjb250cm9sLlxuICovXG5mdW5jdGlvbiBpc05hdGl2ZWx5QWN0aXZhdGFibGUoZWw6IEVsZW1lbnQpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBlbC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdCVVRUT04nIHx8XG4gICAgKCEhKGVsIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnR5cGUgJiYgKGVsIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnR5cGUudG9VcHBlckNhc2UoKSA9PT0gJ0ZJTEUnKVxuICApO1xufVxuXG4vKipcbiAqIEhUTUwgPGlucHV0PiB0eXBlcyAobm90IEFSSUEgcm9sZXMpIHdoaWNoIHdpbGwgYXV0by10cmlnZ2VyIGEgY2xpY2sgZXZlbnQgZm9yXG4gKiB0aGUgU3BhY2Uga2V5LCB3aXRoIHNpZGUtZWZmZWN0cy4gV2Ugd2lsbCBub3QgY2FsbCBwcmV2ZW50RGVmYXVsdCBpZiBzcGFjZSBpc1xuICogcHJlc3NlZCwgbm9yIHdpbGwgd2UgcmFpc2UgYTExeSBjbGljayBldmVudHMuICBGb3IgYWxsIG90aGVyIGVsZW1lbnRzLCB3ZSBjYW5cbiAqIHN1cHByZXNzIHRoZSBkZWZhdWx0IGV2ZW50ICh3aGljaCBoYXMgbm8gZGVzaXJlZCBzaWRlLWVmZmVjdHMpIGFuZCBoYW5kbGUgdGhlXG4gKiBrZXlkb3duIG91cnNlbHZlcy5cbiAqL1xuY29uc3QgUFJPQ0VTU19TUEFDRToge1trZXk6IHN0cmluZ106IGJvb2xlYW59ID0ge1xuICAnQ0hFQ0tCT1gnOiB0cnVlLFxuICAnRklMRSc6IHRydWUsXG4gICdPUFRJT04nOiB0cnVlLFxuICAnUkFESU8nOiB0cnVlLFxufTtcblxuLyoqIFRhZ05hbWVzIGFuZCBJbnB1dCB0eXBlcyBmb3Igd2hpY2ggdG8gbm90IHByb2Nlc3MgZW50ZXIvc3BhY2UgYXMgY2xpY2suICovXG5jb25zdCBURVhUX0NPTlRST0xTOiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0gPSB7XG4gICdDT0xPUic6IHRydWUsXG4gICdEQVRFJzogdHJ1ZSxcbiAgJ0RBVEVUSU1FJzogdHJ1ZSxcbiAgJ0RBVEVUSU1FLUxPQ0FMJzogdHJ1ZSxcbiAgJ0VNQUlMJzogdHJ1ZSxcbiAgJ01PTlRIJzogdHJ1ZSxcbiAgJ05VTUJFUic6IHRydWUsXG4gICdQQVNTV09SRCc6IHRydWUsXG4gICdSQU5HRSc6IHRydWUsXG4gICdTRUFSQ0gnOiB0cnVlLFxuICAnVEVMJzogdHJ1ZSxcbiAgJ1RFWFQnOiB0cnVlLFxuICAnVEVYVEFSRUEnOiB0cnVlLFxuICAnVElNRSc6IHRydWUsXG4gICdVUkwnOiB0cnVlLFxuICAnV0VFSyc6IHRydWUsXG59O1xuXG4vKiogVGFnTmFtZXMgdGhhdCBhcmUgbmF0aXZlIEhUTUwgY29udHJvbHMuICovXG5jb25zdCBOQVRJVkVfSFRNTF9DT05UUk9MUzoge1trZXk6IHN0cmluZ106IGJvb2xlYW59ID0ge1xuICAnQSc6IHRydWUsXG4gICdBUkVBJzogdHJ1ZSxcbiAgJ0JVVFRPTic6IHRydWUsXG4gICdESUFMT0cnOiB0cnVlLFxuICAnSU1HJzogdHJ1ZSxcbiAgJ0lOUFVUJzogdHJ1ZSxcbiAgJ0xJTksnOiB0cnVlLFxuICAnTUVOVSc6IHRydWUsXG4gICdPUFRHUk9VUCc6IHRydWUsXG4gICdPUFRJT04nOiB0cnVlLFxuICAnUFJPR1JFU1MnOiB0cnVlLFxuICAnU0VMRUNUJzogdHJ1ZSxcbiAgJ1RFWFRBUkVBJzogdHJ1ZSxcbn07XG5cbi8qKiBFeHBvcnRlZCBmb3IgdGVzdGluZy4gKi9cbmV4cG9ydCBjb25zdCB0ZXN0aW5nID0ge1xuICBzZXRJc01hYyh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlzTWFjID0gdmFsdWU7XG4gIH0sXG59O1xuIl19
|