footprintjs 9.46.1 → 9.47.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/AGENTS.md +4 -3
- package/CLAUDE.md +4 -4
- package/README.md +1 -1
- package/dist/advanced.js +95 -90
- package/dist/esm/advanced.d.ts +16 -10
- package/dist/esm/advanced.js +14 -9
- package/dist/esm/index.d.ts +4 -2
- package/dist/esm/index.js +5 -3
- package/dist/esm/lib/memory/EventLog.d.ts +1 -1
- package/dist/esm/lib/memory/EventLog.js +2 -2
- package/dist/esm/lib/memory/scrub.d.ts +3 -1
- package/dist/esm/lib/memory/scrub.js +4 -2
- package/dist/esm/lib/memory/verbs.d.ts +1 -1
- package/dist/esm/lib/memory/verbs.js +2 -2
- package/dist/esm/trace.d.ts +2 -0
- package/dist/esm/trace.js +3 -2
- package/dist/esm/write.d.ts +47 -0
- package/dist/esm/write.js +46 -0
- package/dist/index.js +5 -3
- package/dist/lib/memory/EventLog.js +2 -2
- package/dist/lib/memory/scrub.js +4 -2
- package/dist/lib/memory/verbs.js +2 -2
- package/dist/trace.js +6 -4
- package/dist/types/advanced.d.ts +16 -10
- package/dist/types/index.d.ts +4 -2
- package/dist/types/lib/memory/EventLog.d.ts +1 -1
- package/dist/types/lib/memory/scrub.d.ts +3 -1
- package/dist/types/lib/memory/verbs.d.ts +1 -1
- package/dist/types/trace.d.ts +2 -0
- package/dist/types/write.d.ts +47 -0
- package/dist/write.js +52 -0
- package/package.json +15 -1
package/dist/esm/index.js
CHANGED
|
@@ -4,11 +4,13 @@
|
|
|
4
4
|
* The flowchart pattern for backend code.
|
|
5
5
|
* Build → Run → Observe.
|
|
6
6
|
*
|
|
7
|
-
* **
|
|
7
|
+
* **The common import paths:**
|
|
8
8
|
* ```ts
|
|
9
9
|
* import { flowChart, decide, narrative } from 'footprintjs'; // main — start here
|
|
10
10
|
* import { metrics, debug, manifest } from 'footprintjs/recorders'; // recorder factories
|
|
11
|
-
* import {
|
|
11
|
+
* import { stateAt, causalChain } from 'footprintjs/trace'; // read a finished run
|
|
12
|
+
* import { RecordFrame, EventLog } from 'footprintjs/write'; // write a record yourself
|
|
13
|
+
* import { StageContext } from 'footprintjs/advanced'; // engine internals
|
|
12
14
|
* ```
|
|
13
15
|
*
|
|
14
16
|
* @module
|
|
@@ -86,4 +88,4 @@ export { disableDevMode, enableDevMode, isDevMode } from './lib/devMode.js';
|
|
|
86
88
|
// A run's record as JSON without the engine's recursion limit (9.26.0): the
|
|
87
89
|
// same bytes JSON.stringify emits, for a deep `next` chain it cannot encode.
|
|
88
90
|
export { stringifySnapshot } from './lib/runner/stringifySnapshot.js';
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFTSCw0QkFBNEI7QUFDNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBNkJ4Riw0QkFBNEI7QUFDNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBb0IzQyxtQ0FBbUM7QUFDbkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQWtCdkQsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELG9CQUFvQjtBQUNwQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFxQm5ELCtCQUErQjtBQUMvQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdEQsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVyRCxvQ0FBb0M7QUFDcEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFtQzVELHFFQUFxRTtBQUNyRSxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixrQkFBa0IsRUFDbEIsV0FBVyxHQUNaLE1BQU0seUJBQXlCLENBQUM7QUFtRGpDLCtCQUErQjtBQUMvQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUs5RCwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFN0QsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXRFLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFekUsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRWpFLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFcEUsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBbUJ0RSx1Q0FBdUM7QUFDdkMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFN0UsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSwrRUFBK0U7QUFFL0UsOEJBQThCO0FBQzlCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBMEI1RCw2QkFBNkI7QUFDN0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBaUVqRCxzQ0FBc0M7QUFDdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFM0Usc0NBQXNDO0FBQ3RDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQVNyRyxnQ0FBZ0M7QUFDaEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFFLCtFQUErRTtBQUMvRSxpREFBaUQ7QUFDakQsK0VBQStFO0FBRS9FOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFNUUsaUZBQWlGO0FBQ2pGLDRFQUE0RTtBQUM1RSxzREFBc0Q7QUFDdEQsNEVBQTRFO0FBQzVFLDZFQUE2RTtBQUM3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRm9vdFByaW50IOKAlCBQdWJsaWMgQVBJICh2MylcbiAqXG4gKiBUaGUgZmxvd2NoYXJ0IHBhdHRlcm4gZm9yIGJhY2tlbmQgY29kZS5cbiAqIEJ1aWxkIOKGkiBSdW4g4oaSIE9ic2VydmUuXG4gKlxuICogKipUaHJlZSBpbXBvcnQgcGF0aHM6KipcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBmbG93Q2hhcnQsIGRlY2lkZSwgbmFycmF0aXZlIH0gZnJvbSAnZm9vdHByaW50anMnOyAgICAgICAgICAgLy8gbWFpbiDigJQgc3RhcnQgaGVyZVxuICogaW1wb3J0IHsgbWV0cmljcywgZGVidWcsIG1hbmlmZXN0IH0gICAgIGZyb20gJ2Zvb3RwcmludGpzL3JlY29yZGVycyc7IC8vIHJlY29yZGVyIGZhY3Rvcmllc1xuICogaW1wb3J0IHsgU2hhcmVkTWVtb3J5LCBTdGFnZUNvbnRleHQgfSAgIGZyb20gJ2Zvb3RwcmludGpzL2FkdmFuY2VkJzsgIC8vIGludGVybmFsc1xuICogYGBgXG4gKlxuICogQG1vZHVsZVxuICovXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFF1aWNrIFN0YXJ0IOKAlCBFdmVyeXRoaW5nIHlvdSBuZWVkIGZvciA5MCUgb2YgdXNlIGNhc2VzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQgKi9cbmV4cG9ydCB0eXBlIHsgRmxvd0NoYXJ0LCBTdGFnZUZ1bmN0aW9uIGFzIFN0YWdlSGFuZGxlciwgU3RyZWFtSGFuZGxlcnMgfSBmcm9tICcuL2xpYi9idWlsZGVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHsgZmxvd0NoYXJ0LCBGbG93Q2hhcnRCdWlsZGVyLCBmbG93Q2hhcnRTZWxlY3RvciB9IGZyb20gJy4vbGliL2J1aWxkZXIvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBRdWljayBTdGFydFxuICpcbiAqIENvbmZpZyBmb3IgYC5hZGRQYXJhbGxlbEZvckVhY2goKWAg4oCUIG9uZSBicmFuY2ggcGVyIGl0ZW0sIGJyYW5jaCBjb3VudFxuICogZGVjaWRlZCBhdCBydW4gdGltZSBmcm9tIHRoZSBwYXlsb2FkLiBgbWF4QnJhbmNoZXNgIGFuZCBgaW50b2AgYXJlIHJlcXVpcmVkXG4gKiBvbiBwdXJwb3NlIChzZWUgZG9jcy9kZXNpZ24vZXhlY3V0aW9uLWNvbnRyb2wubWQpLlxuICovXG5leHBvcnQgdHlwZSB7IEJyYW5jaENoYXJ0LCBQYXJhbGxlbEZvckVhY2hDb25maWcsIFJldHJ5UG9saWN5IH0gZnJvbSAnLi9saWIvYnVpbGRlci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQg4oCUIGJ1aWxkLXRpbWUgb2JzZXJ2ZXIgKHR3aW4gb2YgRmxvd1JlY29yZGVyKSAqL1xuZXhwb3J0IHR5cGUge1xuICBTdHJ1Y3R1cmVEZWNpZGVyQ29tcGxldGVFdmVudCxcbiAgU3RydWN0dXJlRWRnZUFkZGVkRXZlbnQsXG4gIFN0cnVjdHVyZUVkZ2VLaW5kLFxuICBTdHJ1Y3R1cmVMb29wRWRnZUFkZGVkRXZlbnQsXG4gIFN0cnVjdHVyZVJlY29yZGVyLFxuICBTdHJ1Y3R1cmVTdGFnZUFkZGVkRXZlbnQsXG4gIFN0cnVjdHVyZVN0YWdlVGFnZ2VkRXZlbnQsXG4gIFN0cnVjdHVyZVN1YmZsb3dNb3VudGVkRXZlbnQsXG59IGZyb20gJy4vbGliL2J1aWxkZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgdHlwZSB7IFR5cGVkU3RhZ2VGdW5jdGlvbiB9IGZyb20gJy4vbGliL2J1aWxkZXIvdHlwZWRGbG93Q2hhcnQuanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgdHlwZSB7IFNjb3BlTWV0aG9kcywgVHlwZWRTY29wZSB9IGZyb20gJy4vbGliL3JlYWN0aXZlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHsgbmFycmF0aXZlIH0gZnJvbSAnLi9yZWNvcmRlcnMuanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEZWNpc2lvbiBCcmFuY2hpbmcg4oCUIGRlY2lkZSgpIC8gc2VsZWN0KCkgd2l0aCBldmlkZW5jZSBjYXB0dXJlXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgRGVjaXNpb24gQnJhbmNoaW5nICovXG5leHBvcnQgdHlwZSB7XG4gIERlY2lkZVJ1bGUsXG4gIERlY2lzaW9uRXZpZGVuY2UsXG4gIERlY2lzaW9uUmVzdWx0LFxuICBEZWZhdWx0QnJhbmNoLFxuICBGaWx0ZXJPcHMsXG4gIFJ1bGVFdmlkZW5jZSxcbiAgU2VsZWN0aW9uRXZpZGVuY2UsXG4gIFNlbGVjdGlvblJlc3VsdCxcbiAgV2hlbkNsYXVzZSxcbiAgV2hlcmVGaWx0ZXIsXG59IGZyb20gJy4vbGliL2RlY2lkZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgRGVjaXNpb24gQnJhbmNoaW5nICovXG5leHBvcnQgeyBkZWNpZGUsIHNlbGVjdCB9IGZyb20gJy4vbGliL2RlY2lkZS9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFJ1biDigJQgRXhlY3V0ZSBjaGFydHMgYW5kIGNvbGxlY3QgcmVzdWx0c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHR5cGUgeyBSdW5SZXN1bHQgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHR5cGUgeyBGbG93Q2hhcnRFeGVjdXRvck9wdGlvbnMgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKipcbiAqIFRoZSBmb3VyIG9ic2VydmFiaWxpdHkgZGlhbHMgYEZsb3dDaGFydEV4ZWN1dG9yT3B0aW9uc2AgaW5oZXJpdHMuXG4gKiBAY2F0ZWdvcnkgUnVuXG4gKi9cbmV4cG9ydCB0eXBlIHsgUnVuRGlhbHMgfSBmcm9tICcuL2xpYi9tZW1vcnkvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHsgRmxvd0NoYXJ0RXhlY3V0b3IgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHsgUnVuQ29udGV4dCB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUnVuICovXG5leHBvcnQgdHlwZSB7IENoYXJ0T3BlbkFQSU9wdGlvbnMsIE1DUFRvb2xEZXNjcmlwdGlvbiwgUnVubmFibGVGbG93Q2hhcnQgfSBmcm9tICcuL2xpYi9ydW5uZXIvUnVubmFibGVDaGFydC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE9ic2VydmUg4oCUIERhdGEgKHNjb3BlIHJlY29yZGVycywgZmlyZSBkdXJpbmcgc3RhZ2UgZXhlY3V0aW9uKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERhdGEgKi9cbmV4cG9ydCB0eXBlIHtcbiAgQ29tbWl0RXZlbnQsXG4gIEVycm9yRXZlbnQsXG4gIFJlYWRFdmVudCxcbiAgUmVkYWN0aW9uUG9saWN5LFxuICBSZWRhY3Rpb25SZXBvcnQsXG4gIFNjb3BlUmVjb3JkZXIsXG4gIFN0YWdlRXZlbnQsXG4gIFdyaXRlRXZlbnQsXG59IGZyb20gJy4vbGliL3Njb3BlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBEYXRhICovXG5leHBvcnQgeyBNZXRyaWNSZWNvcmRlciB9IGZyb20gJy4vbGliL3Njb3BlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBEYXRhICovXG5leHBvcnQgeyBEZWJ1Z1JlY29yZGVyIH0gZnJvbSAnLi9saWIvc2NvcGUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIE9wZXJhdGlvbiAqL1xuZXhwb3J0IHsgUmVjb3JkZXJPcGVyYXRpb24gfSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERlbGl2ZXJ5IHRpZXIgKFJGQy0wMDEgZGVmZXJyZWQgb2JzZXJ2ZXJzKVxuICpcbiAqIEV2ZXJ5IGBhdHRhY2gqUmVjb3JkZXJgIGNhbGwgYWNjZXB0cyBhbiBvcHRpb25zIGJhZzpcbiAqIGBleGVjdXRvci5hdHRhY2hTY29wZVJlY29yZGVyKHJlYywgeyBkZWxpdmVyeTogJ2RlZmVycmVkJyB9KWAgdGFrZXMgdGhlXG4gKiByZWNvcmRlciBPVVQgb2YgdGhlIGVuZ2luZSdzIGhvdCBwYXRoIOKAlCBldmVudHMgYXJlIGNhcHR1cmVkIGludG8gb25lXG4gKiBib3VuZGVkLCB0b3RhbGx5LW9yZGVyZWQgcXVldWUgYW5kIGRlbGl2ZXJlZCBhdCB0aGUgbmV4dCBtaWNyb3Rhc2tcbiAqIGNoZWNrcG9pbnQgKFwib25lIGJlYXQgYmVoaW5kXCIpLiBPbWl0IGBkZWxpdmVyeWAgZm9yIHRoZSBoaXN0b3JpY2FsXG4gKiBzeW5jaHJvbm91cyBjYWxsIChieXRlLWlkZW50aWNhbCB0byBwcmV2aW91cyByZWxlYXNlcykuIEFjY291bnRpbmdcbiAqIHN1cmZhY2VzIG9uIGBzbmFwc2hvdC5vYnNlcnZlclN0YXRzYDsgYGV4ZWN1dG9yLmRyYWluT2JzZXJ2ZXJzKClgIHNldHRsZXNcbiAqIGFzeW5jIGxpc3RlbmVycyBiZWZvcmUgc2h1dGRvd24uIFNlZSBgZG9jcy9ndWlkZXMvb2JzZXJ2ZXJzLWRlZmVycmVkLm1kYC5cbiAqL1xuZXhwb3J0IHR5cGUge1xuICBBdHRhY2hSZWNvcmRlck9wdGlvbnMsXG4gIE9ic2VydmVyRGVsaXZlcnksXG4gIE9ic2VydmVyRHJhaW5SZXN1bHQsXG4gIE9ic2VydmVyU3RhdHMsXG59IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERlbGl2ZXJ5IHRpZXIgKFJGQy0wMDEgZGVmZXJyZWQgb2JzZXJ2ZXJzKVxuICpcbiAqIGBDYXB0dXJlUG9saWN5YCDigJQgaG93IGEgZGVmZXJyZWQgZXZlbnQncyBwYXlsb2FkIGlzIG1hdGVyaWFsaXplZCBhdFxuICogY2FwdHVyZSB0aW1lIChgJ2Nsb25lJ2AgYnkgZGVmYXVsdCBmb3IgYXR0YWNoIG9wdGlvbnMgLyBgJ3N1bW1hcnknYCAvIGAncmVmJ2ApLiBgT3ZlcmZsb3dQb2xpY3lgXG4gKiDigJQgd2hhdCBhIHNhdHVyYXRlZCBxdWV1ZSBkb2VzIChgJ2Ryb3Atb2xkZXN0J2AgZGVmYXVsdCAvIGAnc2FtcGxlJ2AgL1xuICogYCdibG9jaydgKS4gYERpc3BhdGNoZXJTdGF0c2AgLyBgTGlzdGVuZXJTdGF0c2Ag4oCUIHRoZSBhY2NvdW50aW5nIHNoYXBlc1xuICogZW1iZWRkZWQgaW4gYE9ic2VydmVyU3RhdHNgLiBUeXBlcyBvbmx5IOKAlCB0aGUgb2JzZXJ2ZXItcXVldWUgbW9kdWxlXG4gKiBpdHNlbGYgaXMgaW50ZXJuYWw7IGNvbnN1bWVycyB1c2UgdGhlIGF0dGFjaCBvcHRpb25zLlxuICovXG5leHBvcnQgdHlwZSB7IENhcHR1cmVQb2xpY3ksIERpc3BhdGNoZXJTdGF0cywgTGlzdGVuZXJTdGF0cywgT3ZlcmZsb3dQb2xpY3kgfSBmcm9tICcuL2xpYi9vYnNlcnZlci1xdWV1ZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgQ29tYmluZWQgKGJvdGggZGF0YS1mbG93IGFuZCBjb250cm9sLWZsb3cpICovXG5leHBvcnQgdHlwZSB7IENvbWJpbmVkUmVjb3JkZXIgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIENvbWJpbmVkIChib3RoIGRhdGEtZmxvdyBhbmQgY29udHJvbC1mbG93KSAqL1xuZXhwb3J0IHtcbiAgaGFzRW1pdFJlY29yZGVyTWV0aG9kcyxcbiAgaGFzRmxvd1JlY29yZGVyTWV0aG9kcyxcbiAgaGFzUmVjb3JkZXJNZXRob2RzLFxuICBpc0Zsb3dFdmVudCxcbn0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBFbWl0ICh1c2VyLWF1dGhvcmVkIHN0cnVjdHVyZWQgZXZlbnRzKVxuICpcbiAqIFRoaXJkIG9ic2VydmVyIGNoYW5uZWwgKGFsb25nc2lkZSBgU2NvcGVSZWNvcmRlcmAgYW5kIGBGbG93UmVjb3JkZXJgKS4gQ29uc3VtZXJcbiAqIGNvZGUgY2FsbHMgYHNjb3BlLiRlbWl0KG5hbWUsIHBheWxvYWQpYCBmcm9tIGluc2lkZSBhIHN0YWdlOyBldmVyeSBhdHRhY2hlZFxuICogYEVtaXRSZWNvcmRlci5vbkVtaXQoZXZlbnQpYCBmaXJlcyBzeW5jaHJvbm91c2x5IHdpdGggc3RhZ2UtY29udGV4dFxuICogZW5yaWNobWVudC4gUGFzcy10aHJvdWdoIOKAlCBubyBidWZmZXJpbmcsIHplcm8gYWxsb2NhdGlvbiB3aGVuIG5vIHJlY29yZGVyXG4gKiBpcyBhdHRhY2hlZC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBFbWl0RXZlbnQsIEVtaXRSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gT2JzZXJ2ZSDigJQgRmxvdyAoRmxvd1JlY29yZGVyLCBmaXJlcyBhZnRlciBzdGFnZSBleGVjdXRpb24pXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHR5cGUge1xuICBGbG93QnJlYWtFdmVudCxcbiAgRmxvd0RlY2lzaW9uRXZlbnQsXG4gIEZsb3dFcnJvckV2ZW50LFxuICBGbG93Rm9ya0V2ZW50LFxuICBGbG93TG9vcEV2ZW50LFxuICBGbG93TmV4dEV2ZW50LFxuICBGbG93UmVjb3JkZXIsXG4gIEZsb3dSdW5FdmVudCxcbiAgRmxvd1J1bkZhaWxlZEV2ZW50LFxuICBGbG93U2VsZWN0ZWRFdmVudCxcbiAgRmxvd1N0YWdlRXZlbnQsXG4gIEZsb3dTdGFnZVJldHJ5RXZlbnQsXG4gIEZsb3dTdWJmbG93RXZlbnQsXG4gIEZsb3dTdWJmbG93UmVnaXN0ZXJlZEV2ZW50LFxuICBGbG93VGhyb3R0bGVkRXZlbnQsXG4gIFJlc3VtZUxpbmssXG4gIFRyYXZlcnNhbENvbnRleHQsXG59IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHR5cGUgeyBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5IH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvd1xuICpcbiAqIGBOYXJyYXRpdmVGb3JtYXR0ZXJgIOKAlCBwbHVnZ2FibGUgZm9ybWF0dGVyIHRoYXQgY29udmVydHMgZXZlbnQgY29udGV4dFxuICogb2JqZWN0cyBpbnRvIHRoZSB0ZXh0IGxpbmVzIG9mIHRoZSBuYXJyYXRpdmUuIFByZWZlciB0aGlzIG5hbWUgaW4gbmV3XG4gKiBjb2RlOyBgTmFycmF0aXZlUmVuZGVyZXJgIGlzIGEgZGVwcmVjYXRlZCBhbGlhcyB0aGF0IHdpbGwgYmUgcmVtb3ZlZCBpblxuICogdGhlIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAqL1xuZXhwb3J0IHR5cGUgeyBOYXJyYXRpdmVGb3JtYXR0ZXIsIE5hcnJhdGl2ZVJlbmRlcmVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB0eXBlIHsgTWFuaWZlc3RFbnRyeSB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgTWFuaWZlc3RGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IEFkYXB0aXZlTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBNaWxlc3RvbmVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IFByb2dyZXNzaXZlTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBSTEVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IFNlcGFyYXRlTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBTaWxlbnROYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IFdpbmRvd2VkTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2VsZi1EZXNjcmliaW5nIOKAlCAuY29udHJhY3QoKSwgdG9PcGVuQVBJKCksIHRvTUNQVG9vbCgpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgU2VsZi1EZXNjcmliaW5nICovXG5leHBvcnQgdHlwZSB7IEpzb25TY2hlbWEgfSBmcm9tICcuL2xpYi9jb250cmFjdC9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNuYXBzaG90ICYgQ29tcG9zaXRpb24g4oCUIFN1YmZsb3cgbmF2aWdhdGlvbiBhbmQgQ29tcG9zYWJsZVJ1bm5lclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFNuYXBzaG90ICYgQ29tcG9zaXRpb24gKi9cbmV4cG9ydCB0eXBlIHsgQ29tcG9zYWJsZVJ1bm5lciB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgU25hcHNob3QgJiBDb21wb3NpdGlvbiAqL1xuZXhwb3J0IHR5cGUgeyBSZWNvcmRlclNuYXBzaG90LCBSdW50aW1lU25hcHNob3QsIFN1YnRyZWVTbmFwc2hvdCB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgU25hcHNob3QgJiBDb21wb3NpdGlvbiAqL1xuZXhwb3J0IHsgZ2V0U3VidHJlZVNuYXBzaG90LCBsaXN0U3ViZmxvd1BhdGhzIH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2NvcGVSZWNvcmRlciBDb21wb3NpdGlvbiDigJQgQnVuZGxlIG11bHRpcGxlIHJlY29yZGVycyBpbnRvIGRvbWFpbiBwcmVzZXRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgU2NvcGVSZWNvcmRlciAqL1xuZXhwb3J0IHsgQ29tcG9zaXRlUmVjb3JkZXIgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFBhdXNlL1Jlc3VtZSDigJQgU2VyaWFsaXphYmxlIGNoZWNrcG9pbnRzIGZvciBsb25nLXJ1bm5pbmcgb3IgaHVtYW4taW4tdGhlLWxvb3AgZmxvd3Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBQYXVzZS9SZXN1bWUgKi9cbi8qKiBAY2F0ZWdvcnkgUGF1c2UvUmVzdW1lICovXG5leHBvcnQgdHlwZSB7XG4gIEZsb3djaGFydENoZWNrcG9pbnQsXG4gIFBhdXNhYmxlSGFuZGxlcixcbiAgUGF1c2VkRXhlY3V0aW9uLFxuICBQZW5kaW5nUGF1c2UsXG4gIFJlZGFjdGlvbk1hcmtzLFxufSBmcm9tICcuL2xpYi9wYXVzZS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IFBhdXNlL1Jlc3VtZVxuICpcbiAqIGBpbnRlcnJ1cHQoc2NvcGUsIHsgcmVhc29uLCBleHBlY3RzPyB9KWAg4oCUIHN0b3AgbWlkLXN0YWdlIHRvIGFzayBhIHF1ZXN0aW9uLFxuICogYW5kIGdldCB0aGUgYW5zd2VyIGJhY2sgYXQgdGhlIHNhbWUgY2FsbCBzaXRlIHdoZW4gdGhlIHJ1biByZXN1bWVzLiBSZXN1bWVcbiAqIHJlLWVudGVycyB0aGUgc3RhZ2UgZnJvbSBpdHMgVE9QIChzdGFnZXMgYXJlIGF0b21pYyksIHNvIGtlZXAgdGhlIGhhbGZcbiAqIGJlZm9yZSB0aGUgY2FsbCBpZGVtcG90ZW50LlxuICovXG5leHBvcnQgdHlwZSB7IEludGVycnVwdFBheWxvYWQgfSBmcm9tICcuL2xpYi9wYXVzZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUGF1c2UvUmVzdW1lICovXG5leHBvcnQgeyBpbnRlcnJ1cHQgfSBmcm9tICcuL2xpYi9wYXVzZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgU2NvcGVSZWNvcmRlciAqL1xuZXhwb3J0IHR5cGUgeyBDb21wb3NpdGVTbmFwc2hvdCB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ29uZmlndXJhdGlvbiDigJQgVHlwZXMgcGFzc2VkIHRvIEZsb3dDaGFydEV4ZWN1dG9yIGFuZCBydW4oKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb24gKi9cbmV4cG9ydCB0eXBlIHsgRXhlY3V0aW9uRW52LCBFeGVjdXRvclJlc3VsdCwgUGF1c2VkUmVzdWx0LCBSdW5PcHRpb25zIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBDb25maWd1cmF0aW9uICovXG5leHBvcnQgdHlwZSB7IFNjb3BlRmFjdG9yeSB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb25cbiAqXG4gKiBSZWFkLXRyYWNraW5nIHBvbGljeSBmb3IgYFN0YWdlU25hcHNob3Quc3RhZ2VSZWFkc2AgKCMxNCk6XG4gKiBgJ2Z1bGwnYCAoZGVmYXVsdCDigJQgcGVyLXJlYWQgdmFsdWUgY2xvbmUsIGhpc3RvcmljYWwgYmVoYXZpb3IpIC9cbiAqIGAnc3VtbWFyeSdgIChjaGVhcCBgUmVhZFN1bW1hcnlNYXJrZXJgIHBlciByZWFkKSAvIGAnb2ZmJ2AgKG5vIHRyYWNraW5nLFxuICogemVybyBwZXItcmVhZCBjbG9uZSkuIFBhc3MgYXMgYG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyByZWFkVHJhY2tpbmcgfSlgXG4gKiBvciBjYWxsIGBleGVjdXRvci5zZXRSZWFkVHJhY2tpbmcobW9kZSlgIGJlZm9yZSBgcnVuKClgLlxuICovXG5leHBvcnQgdHlwZSB7IFJlYWRTdW1tYXJ5TWFya2VyLCBSZWFkVHJhY2tpbmdNb2RlIH0gZnJvbSAnLi9saWIvbWVtb3J5L2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgQ29uZmlndXJhdGlvblxuICpcbiAqIFdyaXRlLXRyYWNraW5nIHBvbGljeSBmb3IgYFN0YWdlU25hcHNob3Quc3RhZ2VXcml0ZXNgICgjMTNjLUEpIOKAlCB0aGVcbiAqIHNpYmxpbmcgb2YgYFJlYWRUcmFja2luZ01vZGVgOyBib3RoIGFsaWFzIHRoZSBzaGFyZWQgYFJldGVudGlvblBvbGljeWBcbiAqIGZhbWlseSBmcm9tIGBsaWIvY2FwdHVyZWAuIGAnZnVsbCdgIChkZWZhdWx0IOKAlCBwZXItd3JpdGUgdmFsdWUgY2xvbmUsXG4gKiBoaXN0b3JpY2FsIGJlaGF2aW9yKSAvIGAnc3VtbWFyeSdgIChjaGVhcCBgV3JpdGVTdW1tYXJ5TWFya2VyYCBwZXIgd3JpdGUpXG4gKiAvIGAnb2ZmJ2AgKG5vIHRyYWNraW5nOyBgc3RhZ2VXcml0ZXNgIGFic2VudCBhbmQgdGhlIGBvbkNvbW1pdGAgbXV0YXRpb25zXG4gKiBwYXlsb2FkIGlzIGVtcHR5IOKAlCB3cml0ZXMgdGhlbXNlbHZlcyBzdGlsbCBjb21taXQsIGFuZCB0aGUgY29tbWl0IGxvZyBpc1xuICogdW5hZmZlY3RlZCkuIFBhc3MgYXMgYG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyB3cml0ZVRyYWNraW5nIH0pYCBvclxuICogY2FsbCBgZXhlY3V0b3Iuc2V0V3JpdGVUcmFja2luZyhtb2RlKWAgYmVmb3JlIGBydW4oKWAuXG4gKi9cbmV4cG9ydCB0eXBlIHsgUmV0ZW50aW9uUG9saWN5LCBXcml0ZVN1bW1hcnlNYXJrZXIsIFdyaXRlVHJhY2tpbmdNb2RlIH0gZnJvbSAnLi9saWIvbWVtb3J5L2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgQ29uZmlndXJhdGlvblxuICpcbiAqIENvbW1pdC12YWx1ZXMgZW5jb2RpbmcgZm9yIHRoZSBDT01NSVQgTE9HICgjMTNjLUIpIOKAlCB0aGUgdGhpcmQgZGlhbCBvZlxuICogdGhlIGZhbWlseSwgYW5kIHRoZSBvbmx5IExPU1NMRVNTIG9uZSAoaXQgY2hhbmdlcyB0aGUgbG9nJ3MgZW5jb2RpbmcsXG4gKiBuZXZlciBpdHMgaW5mb3JtYXRpb24pLiBgJ2Z1bGwnYCAoZGVmYXVsdCDigJQgZXZlcnkgc3Vydml2aW5nIGBzZXRgIHN0b3Jlc1xuICogdGhlIGZ1bGwgZmluYWwgdmFsdWUsIGJ5dGUtaWRlbnRpY2FsIHRvIGhpc3RvcnkpIC8gYCdkZWx0YSdgIChhcnJheVxuICogbmV0LWNoYW5nZXMgdGhhdCBhcmUgXCJiYXNlIHBsdXMgYSB0YWlsXCIgY29tbWl0IGFzIGFuIGBhcHBlbmRgIHZlcmJcbiAqIHN0b3Jpbmcgb25seSB0aGUgdGFpbDsgYGRlbGV0ZVZhbHVlKClgIGNvbW1pdHMgYXMgYSByZWFsIGBkZWxldGVgIHZlcmI7XG4gKiBvbmUgdHJhY2UgZW50cnkgcGVyIHN1cnZpdmluZyBwYXRoKS4gUmVwbGF5IHJlY29uc3RydWN0cyBldmVyeSBzdGVwJ3NcbiAqIGZ1bGwgc3RhdGUgZXhhY3RseS4gQ29uc3VtZXJzIHJlYWRpbmcgYGJ1bmRsZS5vdmVyd3JpdGVba2V5XWAgYXMgdGhlIGZ1bGxcbiAqIHZhbHVlIG11c3QgdXNlIGBjb21taXRWYWx1ZUF0YCBmcm9tIGBmb290cHJpbnRqcy90cmFjZWAuIFBhc3MgYXNcbiAqIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgY29tbWl0VmFsdWVzIH0pYCBvciBjYWxsXG4gKiBgZXhlY3V0b3Iuc2V0Q29tbWl0VmFsdWVzKG1vZGUpYCBiZWZvcmUgYHJ1bigpYDsgdGhlIGFjdGl2ZSBtb2RlIGlzIHRoZVxuICogc25hcHNob3QgZGlzY3JpbWluYW50IGBnZXRTbmFwc2hvdCgpLmNvbW1pdFZhbHVlc2AuXG4gKi9cbmV4cG9ydCB0eXBlIHsgQ29tbWl0VmFsdWVzTW9kZSB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENvbnRyYWN0ICYgVmFsaWRhdGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IENvbnRyYWN0ICYgVmFsaWRhdGlvbiAqL1xuZXhwb3J0IHR5cGUgeyBTY2hlbWFLaW5kLCBWYWxpZGF0aW9uSXNzdWUsIFZhbGlkYXRpb25SZXN1bHQgfSBmcm9tICcuL2xpYi9zY2hlbWEvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IENvbnRyYWN0ICYgVmFsaWRhdGlvbiAqL1xuZXhwb3J0IHsgZGV0ZWN0U2NoZW1hLCBpc1ZhbGlkYXRhYmxlLCBpc1pvZCB9IGZyb20gJy4vbGliL3NjaGVtYS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgQ29udHJhY3QgJiBWYWxpZGF0aW9uICovXG5leHBvcnQgeyBJbnB1dFZhbGlkYXRpb25FcnJvciwgdmFsaWRhdGVBZ2FpbnN0U2NoZW1hLCB2YWxpZGF0ZU9yVGhyb3cgfSBmcm9tICcuL2xpYi9zY2hlbWEvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFcnJvciBVdGlsaXRpZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBFcnJvciBVdGlsaXRpZXMgKi9cbmV4cG9ydCB0eXBlIHsgU3RydWN0dXJlZEVycm9ySW5mbyB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgRXJyb3IgVXRpbGl0aWVzICovXG5leHBvcnQgeyBleHRyYWN0RXJyb3JJbmZvLCBmb3JtYXRFcnJvckluZm8gfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEZXYgVG9vbHMg4oCUIE1vZGUgZmxhZ3MgYW5kIFpvZCBzY29wZSB1dGlsaXRpZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBAY2F0ZWdvcnkgRGV2IFRvb2xzXG4gKlxuICogR2xvYmFsIGRldi1tb2RlIGZsYWcuIENhbGwgYGVuYWJsZURldk1vZGUoKWAgYXQgYXBwbGljYXRpb24gc3RhcnR1cCB0b1xuICogdHVybiBvbiBkZXZlbG9wZXItb25seSBkaWFnbm9zdGljcyBhY3Jvc3MgdGhlIGxpYnJhcnkg4oCUIGNpcmN1bGFyLXJlZmVyZW5jZVxuICogZGV0ZWN0aW9uIGluIHNjb3BlIHdyaXRlcywgd2FybmluZ3Mgd2hlbiBhIHJlY29yZGVyIGhhcyBubyBvYnNlcnZlclxuICogbWV0aG9kcywgc3VzcGljaW91cy1wcmVkaWNhdGUgd2FybmluZ3MgaW4gZGVjaWRlL3NlbGVjdCwgc3RydWN0dXJhbFxuICogY2hlY2tzIGluIGBnZXRTdWJ0cmVlU25hcHNob3RgLCBhbmQgYW55IGZ1dHVyZSBkZXYtb25seSBkaWFnbm9zdGljLlxuICpcbiAqIFByb2R1Y3Rpb24gbGVhdmVzIGl0IE9GRiBieSBkZWZhdWx0ICh6ZXJvIG92ZXJoZWFkKS4gU2VlIHRoZSBKU0RvYyBvblxuICogYGVuYWJsZURldk1vZGVgIGZvciB0aGUgZnVsbCBsaXN0IGFuZCB1c2FnZSBleGFtcGxlLlxuICovXG5leHBvcnQgeyBkaXNhYmxlRGV2TW9kZSwgZW5hYmxlRGV2TW9kZSwgaXNEZXZNb2RlIH0gZnJvbSAnLi9saWIvZGV2TW9kZS5qcyc7XG5cbi8vIGBkZWZpbmVTY29wZUZyb21ab2RgIGFuZCB0aGUgb3RoZXIgem9kLWJhc2VkIHNjb3BlIGhlbHBlcnMgbW92ZWQgdG8gdGhlIG9wdC1pblxuLy8gYGZvb3RwcmludGpzL3pvZGAgZW50cnkg4oCUIGtlZXBpbmcgem9kIG91dCBvZiB0aGUgY29yZSBsb2FkIHBhdGggKGl0IGlzIGFuXG4vLyBvcHRpb25hbCBwZWVyKS4gSW1wb3J0IHRoZW0gZnJvbSAnZm9vdHByaW50anMvem9kJy5cbi8vIEEgcnVuJ3MgcmVjb3JkIGFzIEpTT04gd2l0aG91dCB0aGUgZW5naW5lJ3MgcmVjdXJzaW9uIGxpbWl0ICg5LjI2LjApOiB0aGVcbi8vIHNhbWUgYnl0ZXMgSlNPTi5zdHJpbmdpZnkgZW1pdHMsIGZvciBhIGRlZXAgYG5leHRgIGNoYWluIGl0IGNhbm5vdCBlbmNvZGUuXG5leHBvcnQgeyBzdHJpbmdpZnlTbmFwc2hvdCB9IGZyb20gJy4vbGliL3J1bm5lci9zdHJpbmdpZnlTbmFwc2hvdC5qcyc7XG4iXX0=
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFTSCw0QkFBNEI7QUFDNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBNkJ4Riw0QkFBNEI7QUFDNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBb0IzQyxtQ0FBbUM7QUFDbkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQWtCdkQsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELG9CQUFvQjtBQUNwQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFxQm5ELCtCQUErQjtBQUMvQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdEQsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVyRCxvQ0FBb0M7QUFDcEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFtQzVELHFFQUFxRTtBQUNyRSxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixrQkFBa0IsRUFDbEIsV0FBVyxHQUNaLE1BQU0seUJBQXlCLENBQUM7QUFtRGpDLCtCQUErQjtBQUMvQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUs5RCwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFN0QsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXRFLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFekUsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRWpFLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFcEUsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBbUJ0RSx1Q0FBdUM7QUFDdkMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFN0UsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSwrRUFBK0U7QUFFL0UsOEJBQThCO0FBQzlCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBMEI1RCw2QkFBNkI7QUFDN0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBaUVqRCxzQ0FBc0M7QUFDdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFM0Usc0NBQXNDO0FBQ3RDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQVNyRyxnQ0FBZ0M7QUFDaEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFFLCtFQUErRTtBQUMvRSxpREFBaUQ7QUFDakQsK0VBQStFO0FBRS9FOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFNUUsaUZBQWlGO0FBQ2pGLDRFQUE0RTtBQUM1RSxzREFBc0Q7QUFDdEQsNEVBQTRFO0FBQzVFLDZFQUE2RTtBQUM3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRm9vdFByaW50IOKAlCBQdWJsaWMgQVBJICh2MylcbiAqXG4gKiBUaGUgZmxvd2NoYXJ0IHBhdHRlcm4gZm9yIGJhY2tlbmQgY29kZS5cbiAqIEJ1aWxkIOKGkiBSdW4g4oaSIE9ic2VydmUuXG4gKlxuICogKipUaGUgY29tbW9uIGltcG9ydCBwYXRoczoqKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZsb3dDaGFydCwgZGVjaWRlLCBuYXJyYXRpdmUgfSBmcm9tICdmb290cHJpbnRqcyc7ICAgICAgICAgICAvLyBtYWluIOKAlCBzdGFydCBoZXJlXG4gKiBpbXBvcnQgeyBtZXRyaWNzLCBkZWJ1ZywgbWFuaWZlc3QgfSAgICAgZnJvbSAnZm9vdHByaW50anMvcmVjb3JkZXJzJzsgLy8gcmVjb3JkZXIgZmFjdG9yaWVzXG4gKiBpbXBvcnQgeyBzdGF0ZUF0LCBjYXVzYWxDaGFpbiB9ICAgICAgICAgZnJvbSAnZm9vdHByaW50anMvdHJhY2UnOyAgICAgLy8gcmVhZCBhIGZpbmlzaGVkIHJ1blxuICogaW1wb3J0IHsgUmVjb3JkRnJhbWUsIEV2ZW50TG9nIH0gICAgICAgIGZyb20gJ2Zvb3RwcmludGpzL3dyaXRlJzsgICAgIC8vIHdyaXRlIGEgcmVjb3JkIHlvdXJzZWxmXG4gKiBpbXBvcnQgeyBTdGFnZUNvbnRleHQgfSAgICAgICAgICAgICAgICAgZnJvbSAnZm9vdHByaW50anMvYWR2YW5jZWQnOyAgLy8gZW5naW5lIGludGVybmFsc1xuICogYGBgXG4gKlxuICogQG1vZHVsZVxuICovXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFF1aWNrIFN0YXJ0IOKAlCBFdmVyeXRoaW5nIHlvdSBuZWVkIGZvciA5MCUgb2YgdXNlIGNhc2VzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQgKi9cbmV4cG9ydCB0eXBlIHsgRmxvd0NoYXJ0LCBTdGFnZUZ1bmN0aW9uIGFzIFN0YWdlSGFuZGxlciwgU3RyZWFtSGFuZGxlcnMgfSBmcm9tICcuL2xpYi9idWlsZGVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHsgZmxvd0NoYXJ0LCBGbG93Q2hhcnRCdWlsZGVyLCBmbG93Q2hhcnRTZWxlY3RvciB9IGZyb20gJy4vbGliL2J1aWxkZXIvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBRdWljayBTdGFydFxuICpcbiAqIENvbmZpZyBmb3IgYC5hZGRQYXJhbGxlbEZvckVhY2goKWAg4oCUIG9uZSBicmFuY2ggcGVyIGl0ZW0sIGJyYW5jaCBjb3VudFxuICogZGVjaWRlZCBhdCBydW4gdGltZSBmcm9tIHRoZSBwYXlsb2FkLiBgbWF4QnJhbmNoZXNgIGFuZCBgaW50b2AgYXJlIHJlcXVpcmVkXG4gKiBvbiBwdXJwb3NlIChzZWUgZG9jcy9kZXNpZ24vZXhlY3V0aW9uLWNvbnRyb2wubWQpLlxuICovXG5leHBvcnQgdHlwZSB7IEJyYW5jaENoYXJ0LCBQYXJhbGxlbEZvckVhY2hDb25maWcsIFJldHJ5UG9saWN5IH0gZnJvbSAnLi9saWIvYnVpbGRlci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQg4oCUIGJ1aWxkLXRpbWUgb2JzZXJ2ZXIgKHR3aW4gb2YgRmxvd1JlY29yZGVyKSAqL1xuZXhwb3J0IHR5cGUge1xuICBTdHJ1Y3R1cmVEZWNpZGVyQ29tcGxldGVFdmVudCxcbiAgU3RydWN0dXJlRWRnZUFkZGVkRXZlbnQsXG4gIFN0cnVjdHVyZUVkZ2VLaW5kLFxuICBTdHJ1Y3R1cmVMb29wRWRnZUFkZGVkRXZlbnQsXG4gIFN0cnVjdHVyZVJlY29yZGVyLFxuICBTdHJ1Y3R1cmVTdGFnZUFkZGVkRXZlbnQsXG4gIFN0cnVjdHVyZVN0YWdlVGFnZ2VkRXZlbnQsXG4gIFN0cnVjdHVyZVN1YmZsb3dNb3VudGVkRXZlbnQsXG59IGZyb20gJy4vbGliL2J1aWxkZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgdHlwZSB7IFR5cGVkU3RhZ2VGdW5jdGlvbiB9IGZyb20gJy4vbGliL2J1aWxkZXIvdHlwZWRGbG93Q2hhcnQuanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgdHlwZSB7IFNjb3BlTWV0aG9kcywgVHlwZWRTY29wZSB9IGZyb20gJy4vbGliL3JlYWN0aXZlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHsgbmFycmF0aXZlIH0gZnJvbSAnLi9yZWNvcmRlcnMuanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEZWNpc2lvbiBCcmFuY2hpbmcg4oCUIGRlY2lkZSgpIC8gc2VsZWN0KCkgd2l0aCBldmlkZW5jZSBjYXB0dXJlXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgRGVjaXNpb24gQnJhbmNoaW5nICovXG5leHBvcnQgdHlwZSB7XG4gIERlY2lkZVJ1bGUsXG4gIERlY2lzaW9uRXZpZGVuY2UsXG4gIERlY2lzaW9uUmVzdWx0LFxuICBEZWZhdWx0QnJhbmNoLFxuICBGaWx0ZXJPcHMsXG4gIFJ1bGVFdmlkZW5jZSxcbiAgU2VsZWN0aW9uRXZpZGVuY2UsXG4gIFNlbGVjdGlvblJlc3VsdCxcbiAgV2hlbkNsYXVzZSxcbiAgV2hlcmVGaWx0ZXIsXG59IGZyb20gJy4vbGliL2RlY2lkZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgRGVjaXNpb24gQnJhbmNoaW5nICovXG5leHBvcnQgeyBkZWNpZGUsIHNlbGVjdCB9IGZyb20gJy4vbGliL2RlY2lkZS9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFJ1biDigJQgRXhlY3V0ZSBjaGFydHMgYW5kIGNvbGxlY3QgcmVzdWx0c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHR5cGUgeyBSdW5SZXN1bHQgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHR5cGUgeyBGbG93Q2hhcnRFeGVjdXRvck9wdGlvbnMgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKipcbiAqIFRoZSBmb3VyIG9ic2VydmFiaWxpdHkgZGlhbHMgYEZsb3dDaGFydEV4ZWN1dG9yT3B0aW9uc2AgaW5oZXJpdHMuXG4gKiBAY2F0ZWdvcnkgUnVuXG4gKi9cbmV4cG9ydCB0eXBlIHsgUnVuRGlhbHMgfSBmcm9tICcuL2xpYi9tZW1vcnkvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHsgRmxvd0NoYXJ0RXhlY3V0b3IgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHsgUnVuQ29udGV4dCB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUnVuICovXG5leHBvcnQgdHlwZSB7IENoYXJ0T3BlbkFQSU9wdGlvbnMsIE1DUFRvb2xEZXNjcmlwdGlvbiwgUnVubmFibGVGbG93Q2hhcnQgfSBmcm9tICcuL2xpYi9ydW5uZXIvUnVubmFibGVDaGFydC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE9ic2VydmUg4oCUIERhdGEgKHNjb3BlIHJlY29yZGVycywgZmlyZSBkdXJpbmcgc3RhZ2UgZXhlY3V0aW9uKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERhdGEgKi9cbmV4cG9ydCB0eXBlIHtcbiAgQ29tbWl0RXZlbnQsXG4gIEVycm9yRXZlbnQsXG4gIFJlYWRFdmVudCxcbiAgUmVkYWN0aW9uUG9saWN5LFxuICBSZWRhY3Rpb25SZXBvcnQsXG4gIFNjb3BlUmVjb3JkZXIsXG4gIFN0YWdlRXZlbnQsXG4gIFdyaXRlRXZlbnQsXG59IGZyb20gJy4vbGliL3Njb3BlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBEYXRhICovXG5leHBvcnQgeyBNZXRyaWNSZWNvcmRlciB9IGZyb20gJy4vbGliL3Njb3BlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBEYXRhICovXG5leHBvcnQgeyBEZWJ1Z1JlY29yZGVyIH0gZnJvbSAnLi9saWIvc2NvcGUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIE9wZXJhdGlvbiAqL1xuZXhwb3J0IHsgUmVjb3JkZXJPcGVyYXRpb24gfSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERlbGl2ZXJ5IHRpZXIgKFJGQy0wMDEgZGVmZXJyZWQgb2JzZXJ2ZXJzKVxuICpcbiAqIEV2ZXJ5IGBhdHRhY2gqUmVjb3JkZXJgIGNhbGwgYWNjZXB0cyBhbiBvcHRpb25zIGJhZzpcbiAqIGBleGVjdXRvci5hdHRhY2hTY29wZVJlY29yZGVyKHJlYywgeyBkZWxpdmVyeTogJ2RlZmVycmVkJyB9KWAgdGFrZXMgdGhlXG4gKiByZWNvcmRlciBPVVQgb2YgdGhlIGVuZ2luZSdzIGhvdCBwYXRoIOKAlCBldmVudHMgYXJlIGNhcHR1cmVkIGludG8gb25lXG4gKiBib3VuZGVkLCB0b3RhbGx5LW9yZGVyZWQgcXVldWUgYW5kIGRlbGl2ZXJlZCBhdCB0aGUgbmV4dCBtaWNyb3Rhc2tcbiAqIGNoZWNrcG9pbnQgKFwib25lIGJlYXQgYmVoaW5kXCIpLiBPbWl0IGBkZWxpdmVyeWAgZm9yIHRoZSBoaXN0b3JpY2FsXG4gKiBzeW5jaHJvbm91cyBjYWxsIChieXRlLWlkZW50aWNhbCB0byBwcmV2aW91cyByZWxlYXNlcykuIEFjY291bnRpbmdcbiAqIHN1cmZhY2VzIG9uIGBzbmFwc2hvdC5vYnNlcnZlclN0YXRzYDsgYGV4ZWN1dG9yLmRyYWluT2JzZXJ2ZXJzKClgIHNldHRsZXNcbiAqIGFzeW5jIGxpc3RlbmVycyBiZWZvcmUgc2h1dGRvd24uIFNlZSBgZG9jcy9ndWlkZXMvb2JzZXJ2ZXJzLWRlZmVycmVkLm1kYC5cbiAqL1xuZXhwb3J0IHR5cGUge1xuICBBdHRhY2hSZWNvcmRlck9wdGlvbnMsXG4gIE9ic2VydmVyRGVsaXZlcnksXG4gIE9ic2VydmVyRHJhaW5SZXN1bHQsXG4gIE9ic2VydmVyU3RhdHMsXG59IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERlbGl2ZXJ5IHRpZXIgKFJGQy0wMDEgZGVmZXJyZWQgb2JzZXJ2ZXJzKVxuICpcbiAqIGBDYXB0dXJlUG9saWN5YCDigJQgaG93IGEgZGVmZXJyZWQgZXZlbnQncyBwYXlsb2FkIGlzIG1hdGVyaWFsaXplZCBhdFxuICogY2FwdHVyZSB0aW1lIChgJ2Nsb25lJ2AgYnkgZGVmYXVsdCBmb3IgYXR0YWNoIG9wdGlvbnMgLyBgJ3N1bW1hcnknYCAvIGAncmVmJ2ApLiBgT3ZlcmZsb3dQb2xpY3lgXG4gKiDigJQgd2hhdCBhIHNhdHVyYXRlZCBxdWV1ZSBkb2VzIChgJ2Ryb3Atb2xkZXN0J2AgZGVmYXVsdCAvIGAnc2FtcGxlJ2AgL1xuICogYCdibG9jaydgKS4gYERpc3BhdGNoZXJTdGF0c2AgLyBgTGlzdGVuZXJTdGF0c2Ag4oCUIHRoZSBhY2NvdW50aW5nIHNoYXBlc1xuICogZW1iZWRkZWQgaW4gYE9ic2VydmVyU3RhdHNgLiBUeXBlcyBvbmx5IOKAlCB0aGUgb2JzZXJ2ZXItcXVldWUgbW9kdWxlXG4gKiBpdHNlbGYgaXMgaW50ZXJuYWw7IGNvbnN1bWVycyB1c2UgdGhlIGF0dGFjaCBvcHRpb25zLlxuICovXG5leHBvcnQgdHlwZSB7IENhcHR1cmVQb2xpY3ksIERpc3BhdGNoZXJTdGF0cywgTGlzdGVuZXJTdGF0cywgT3ZlcmZsb3dQb2xpY3kgfSBmcm9tICcuL2xpYi9vYnNlcnZlci1xdWV1ZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgQ29tYmluZWQgKGJvdGggZGF0YS1mbG93IGFuZCBjb250cm9sLWZsb3cpICovXG5leHBvcnQgdHlwZSB7IENvbWJpbmVkUmVjb3JkZXIgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIENvbWJpbmVkIChib3RoIGRhdGEtZmxvdyBhbmQgY29udHJvbC1mbG93KSAqL1xuZXhwb3J0IHtcbiAgaGFzRW1pdFJlY29yZGVyTWV0aG9kcyxcbiAgaGFzRmxvd1JlY29yZGVyTWV0aG9kcyxcbiAgaGFzUmVjb3JkZXJNZXRob2RzLFxuICBpc0Zsb3dFdmVudCxcbn0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBFbWl0ICh1c2VyLWF1dGhvcmVkIHN0cnVjdHVyZWQgZXZlbnRzKVxuICpcbiAqIFRoaXJkIG9ic2VydmVyIGNoYW5uZWwgKGFsb25nc2lkZSBgU2NvcGVSZWNvcmRlcmAgYW5kIGBGbG93UmVjb3JkZXJgKS4gQ29uc3VtZXJcbiAqIGNvZGUgY2FsbHMgYHNjb3BlLiRlbWl0KG5hbWUsIHBheWxvYWQpYCBmcm9tIGluc2lkZSBhIHN0YWdlOyBldmVyeSBhdHRhY2hlZFxuICogYEVtaXRSZWNvcmRlci5vbkVtaXQoZXZlbnQpYCBmaXJlcyBzeW5jaHJvbm91c2x5IHdpdGggc3RhZ2UtY29udGV4dFxuICogZW5yaWNobWVudC4gUGFzcy10aHJvdWdoIOKAlCBubyBidWZmZXJpbmcsIHplcm8gYWxsb2NhdGlvbiB3aGVuIG5vIHJlY29yZGVyXG4gKiBpcyBhdHRhY2hlZC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBFbWl0RXZlbnQsIEVtaXRSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gT2JzZXJ2ZSDigJQgRmxvdyAoRmxvd1JlY29yZGVyLCBmaXJlcyBhZnRlciBzdGFnZSBleGVjdXRpb24pXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHR5cGUge1xuICBGbG93QnJlYWtFdmVudCxcbiAgRmxvd0RlY2lzaW9uRXZlbnQsXG4gIEZsb3dFcnJvckV2ZW50LFxuICBGbG93Rm9ya0V2ZW50LFxuICBGbG93TG9vcEV2ZW50LFxuICBGbG93TmV4dEV2ZW50LFxuICBGbG93UmVjb3JkZXIsXG4gIEZsb3dSdW5FdmVudCxcbiAgRmxvd1J1bkZhaWxlZEV2ZW50LFxuICBGbG93U2VsZWN0ZWRFdmVudCxcbiAgRmxvd1N0YWdlRXZlbnQsXG4gIEZsb3dTdGFnZVJldHJ5RXZlbnQsXG4gIEZsb3dTdWJmbG93RXZlbnQsXG4gIEZsb3dTdWJmbG93UmVnaXN0ZXJlZEV2ZW50LFxuICBGbG93VGhyb3R0bGVkRXZlbnQsXG4gIFJlc3VtZUxpbmssXG4gIFRyYXZlcnNhbENvbnRleHQsXG59IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHR5cGUgeyBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5IH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvd1xuICpcbiAqIGBOYXJyYXRpdmVGb3JtYXR0ZXJgIOKAlCBwbHVnZ2FibGUgZm9ybWF0dGVyIHRoYXQgY29udmVydHMgZXZlbnQgY29udGV4dFxuICogb2JqZWN0cyBpbnRvIHRoZSB0ZXh0IGxpbmVzIG9mIHRoZSBuYXJyYXRpdmUuIFByZWZlciB0aGlzIG5hbWUgaW4gbmV3XG4gKiBjb2RlOyBgTmFycmF0aXZlUmVuZGVyZXJgIGlzIGEgZGVwcmVjYXRlZCBhbGlhcyB0aGF0IHdpbGwgYmUgcmVtb3ZlZCBpblxuICogdGhlIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAqL1xuZXhwb3J0IHR5cGUgeyBOYXJyYXRpdmVGb3JtYXR0ZXIsIE5hcnJhdGl2ZVJlbmRlcmVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB0eXBlIHsgTWFuaWZlc3RFbnRyeSB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgTWFuaWZlc3RGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IEFkYXB0aXZlTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBNaWxlc3RvbmVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IFByb2dyZXNzaXZlTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBSTEVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IFNlcGFyYXRlTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBTaWxlbnROYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IFdpbmRvd2VkTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2VsZi1EZXNjcmliaW5nIOKAlCAuY29udHJhY3QoKSwgdG9PcGVuQVBJKCksIHRvTUNQVG9vbCgpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgU2VsZi1EZXNjcmliaW5nICovXG5leHBvcnQgdHlwZSB7IEpzb25TY2hlbWEgfSBmcm9tICcuL2xpYi9jb250cmFjdC9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNuYXBzaG90ICYgQ29tcG9zaXRpb24g4oCUIFN1YmZsb3cgbmF2aWdhdGlvbiBhbmQgQ29tcG9zYWJsZVJ1bm5lclxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFNuYXBzaG90ICYgQ29tcG9zaXRpb24gKi9cbmV4cG9ydCB0eXBlIHsgQ29tcG9zYWJsZVJ1bm5lciB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgU25hcHNob3QgJiBDb21wb3NpdGlvbiAqL1xuZXhwb3J0IHR5cGUgeyBSZWNvcmRlclNuYXBzaG90LCBSdW50aW1lU25hcHNob3QsIFN1YnRyZWVTbmFwc2hvdCB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgU25hcHNob3QgJiBDb21wb3NpdGlvbiAqL1xuZXhwb3J0IHsgZ2V0U3VidHJlZVNuYXBzaG90LCBsaXN0U3ViZmxvd1BhdGhzIH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2NvcGVSZWNvcmRlciBDb21wb3NpdGlvbiDigJQgQnVuZGxlIG11bHRpcGxlIHJlY29yZGVycyBpbnRvIGRvbWFpbiBwcmVzZXRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgU2NvcGVSZWNvcmRlciAqL1xuZXhwb3J0IHsgQ29tcG9zaXRlUmVjb3JkZXIgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFBhdXNlL1Jlc3VtZSDigJQgU2VyaWFsaXphYmxlIGNoZWNrcG9pbnRzIGZvciBsb25nLXJ1bm5pbmcgb3IgaHVtYW4taW4tdGhlLWxvb3AgZmxvd3Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBQYXVzZS9SZXN1bWUgKi9cbi8qKiBAY2F0ZWdvcnkgUGF1c2UvUmVzdW1lICovXG5leHBvcnQgdHlwZSB7XG4gIEZsb3djaGFydENoZWNrcG9pbnQsXG4gIFBhdXNhYmxlSGFuZGxlcixcbiAgUGF1c2VkRXhlY3V0aW9uLFxuICBQZW5kaW5nUGF1c2UsXG4gIFJlZGFjdGlvbk1hcmtzLFxufSBmcm9tICcuL2xpYi9wYXVzZS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IFBhdXNlL1Jlc3VtZVxuICpcbiAqIGBpbnRlcnJ1cHQoc2NvcGUsIHsgcmVhc29uLCBleHBlY3RzPyB9KWAg4oCUIHN0b3AgbWlkLXN0YWdlIHRvIGFzayBhIHF1ZXN0aW9uLFxuICogYW5kIGdldCB0aGUgYW5zd2VyIGJhY2sgYXQgdGhlIHNhbWUgY2FsbCBzaXRlIHdoZW4gdGhlIHJ1biByZXN1bWVzLiBSZXN1bWVcbiAqIHJlLWVudGVycyB0aGUgc3RhZ2UgZnJvbSBpdHMgVE9QIChzdGFnZXMgYXJlIGF0b21pYyksIHNvIGtlZXAgdGhlIGhhbGZcbiAqIGJlZm9yZSB0aGUgY2FsbCBpZGVtcG90ZW50LlxuICovXG5leHBvcnQgdHlwZSB7IEludGVycnVwdFBheWxvYWQgfSBmcm9tICcuL2xpYi9wYXVzZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUGF1c2UvUmVzdW1lICovXG5leHBvcnQgeyBpbnRlcnJ1cHQgfSBmcm9tICcuL2xpYi9wYXVzZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgU2NvcGVSZWNvcmRlciAqL1xuZXhwb3J0IHR5cGUgeyBDb21wb3NpdGVTbmFwc2hvdCB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ29uZmlndXJhdGlvbiDigJQgVHlwZXMgcGFzc2VkIHRvIEZsb3dDaGFydEV4ZWN1dG9yIGFuZCBydW4oKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb24gKi9cbmV4cG9ydCB0eXBlIHsgRXhlY3V0aW9uRW52LCBFeGVjdXRvclJlc3VsdCwgUGF1c2VkUmVzdWx0LCBSdW5PcHRpb25zIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBDb25maWd1cmF0aW9uICovXG5leHBvcnQgdHlwZSB7IFNjb3BlRmFjdG9yeSB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb25cbiAqXG4gKiBSZWFkLXRyYWNraW5nIHBvbGljeSBmb3IgYFN0YWdlU25hcHNob3Quc3RhZ2VSZWFkc2AgKCMxNCk6XG4gKiBgJ2Z1bGwnYCAoZGVmYXVsdCDigJQgcGVyLXJlYWQgdmFsdWUgY2xvbmUsIGhpc3RvcmljYWwgYmVoYXZpb3IpIC9cbiAqIGAnc3VtbWFyeSdgIChjaGVhcCBgUmVhZFN1bW1hcnlNYXJrZXJgIHBlciByZWFkKSAvIGAnb2ZmJ2AgKG5vIHRyYWNraW5nLFxuICogemVybyBwZXItcmVhZCBjbG9uZSkuIFBhc3MgYXMgYG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyByZWFkVHJhY2tpbmcgfSlgXG4gKiBvciBjYWxsIGBleGVjdXRvci5zZXRSZWFkVHJhY2tpbmcobW9kZSlgIGJlZm9yZSBgcnVuKClgLlxuICovXG5leHBvcnQgdHlwZSB7IFJlYWRTdW1tYXJ5TWFya2VyLCBSZWFkVHJhY2tpbmdNb2RlIH0gZnJvbSAnLi9saWIvbWVtb3J5L2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgQ29uZmlndXJhdGlvblxuICpcbiAqIFdyaXRlLXRyYWNraW5nIHBvbGljeSBmb3IgYFN0YWdlU25hcHNob3Quc3RhZ2VXcml0ZXNgICgjMTNjLUEpIOKAlCB0aGVcbiAqIHNpYmxpbmcgb2YgYFJlYWRUcmFja2luZ01vZGVgOyBib3RoIGFsaWFzIHRoZSBzaGFyZWQgYFJldGVudGlvblBvbGljeWBcbiAqIGZhbWlseSBmcm9tIGBsaWIvY2FwdHVyZWAuIGAnZnVsbCdgIChkZWZhdWx0IOKAlCBwZXItd3JpdGUgdmFsdWUgY2xvbmUsXG4gKiBoaXN0b3JpY2FsIGJlaGF2aW9yKSAvIGAnc3VtbWFyeSdgIChjaGVhcCBgV3JpdGVTdW1tYXJ5TWFya2VyYCBwZXIgd3JpdGUpXG4gKiAvIGAnb2ZmJ2AgKG5vIHRyYWNraW5nOyBgc3RhZ2VXcml0ZXNgIGFic2VudCBhbmQgdGhlIGBvbkNvbW1pdGAgbXV0YXRpb25zXG4gKiBwYXlsb2FkIGlzIGVtcHR5IOKAlCB3cml0ZXMgdGhlbXNlbHZlcyBzdGlsbCBjb21taXQsIGFuZCB0aGUgY29tbWl0IGxvZyBpc1xuICogdW5hZmZlY3RlZCkuIFBhc3MgYXMgYG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyB3cml0ZVRyYWNraW5nIH0pYCBvclxuICogY2FsbCBgZXhlY3V0b3Iuc2V0V3JpdGVUcmFja2luZyhtb2RlKWAgYmVmb3JlIGBydW4oKWAuXG4gKi9cbmV4cG9ydCB0eXBlIHsgUmV0ZW50aW9uUG9saWN5LCBXcml0ZVN1bW1hcnlNYXJrZXIsIFdyaXRlVHJhY2tpbmdNb2RlIH0gZnJvbSAnLi9saWIvbWVtb3J5L2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgQ29uZmlndXJhdGlvblxuICpcbiAqIENvbW1pdC12YWx1ZXMgZW5jb2RpbmcgZm9yIHRoZSBDT01NSVQgTE9HICgjMTNjLUIpIOKAlCB0aGUgdGhpcmQgZGlhbCBvZlxuICogdGhlIGZhbWlseSwgYW5kIHRoZSBvbmx5IExPU1NMRVNTIG9uZSAoaXQgY2hhbmdlcyB0aGUgbG9nJ3MgZW5jb2RpbmcsXG4gKiBuZXZlciBpdHMgaW5mb3JtYXRpb24pLiBgJ2Z1bGwnYCAoZGVmYXVsdCDigJQgZXZlcnkgc3Vydml2aW5nIGBzZXRgIHN0b3Jlc1xuICogdGhlIGZ1bGwgZmluYWwgdmFsdWUsIGJ5dGUtaWRlbnRpY2FsIHRvIGhpc3RvcnkpIC8gYCdkZWx0YSdgIChhcnJheVxuICogbmV0LWNoYW5nZXMgdGhhdCBhcmUgXCJiYXNlIHBsdXMgYSB0YWlsXCIgY29tbWl0IGFzIGFuIGBhcHBlbmRgIHZlcmJcbiAqIHN0b3Jpbmcgb25seSB0aGUgdGFpbDsgYGRlbGV0ZVZhbHVlKClgIGNvbW1pdHMgYXMgYSByZWFsIGBkZWxldGVgIHZlcmI7XG4gKiBvbmUgdHJhY2UgZW50cnkgcGVyIHN1cnZpdmluZyBwYXRoKS4gUmVwbGF5IHJlY29uc3RydWN0cyBldmVyeSBzdGVwJ3NcbiAqIGZ1bGwgc3RhdGUgZXhhY3RseS4gQ29uc3VtZXJzIHJlYWRpbmcgYGJ1bmRsZS5vdmVyd3JpdGVba2V5XWAgYXMgdGhlIGZ1bGxcbiAqIHZhbHVlIG11c3QgdXNlIGBjb21taXRWYWx1ZUF0YCBmcm9tIGBmb290cHJpbnRqcy90cmFjZWAuIFBhc3MgYXNcbiAqIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgY29tbWl0VmFsdWVzIH0pYCBvciBjYWxsXG4gKiBgZXhlY3V0b3Iuc2V0Q29tbWl0VmFsdWVzKG1vZGUpYCBiZWZvcmUgYHJ1bigpYDsgdGhlIGFjdGl2ZSBtb2RlIGlzIHRoZVxuICogc25hcHNob3QgZGlzY3JpbWluYW50IGBnZXRTbmFwc2hvdCgpLmNvbW1pdFZhbHVlc2AuXG4gKi9cbmV4cG9ydCB0eXBlIHsgQ29tbWl0VmFsdWVzTW9kZSB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENvbnRyYWN0ICYgVmFsaWRhdGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IENvbnRyYWN0ICYgVmFsaWRhdGlvbiAqL1xuZXhwb3J0IHR5cGUgeyBTY2hlbWFLaW5kLCBWYWxpZGF0aW9uSXNzdWUsIFZhbGlkYXRpb25SZXN1bHQgfSBmcm9tICcuL2xpYi9zY2hlbWEvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IENvbnRyYWN0ICYgVmFsaWRhdGlvbiAqL1xuZXhwb3J0IHsgZGV0ZWN0U2NoZW1hLCBpc1ZhbGlkYXRhYmxlLCBpc1pvZCB9IGZyb20gJy4vbGliL3NjaGVtYS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgQ29udHJhY3QgJiBWYWxpZGF0aW9uICovXG5leHBvcnQgeyBJbnB1dFZhbGlkYXRpb25FcnJvciwgdmFsaWRhdGVBZ2FpbnN0U2NoZW1hLCB2YWxpZGF0ZU9yVGhyb3cgfSBmcm9tICcuL2xpYi9zY2hlbWEvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFcnJvciBVdGlsaXRpZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBFcnJvciBVdGlsaXRpZXMgKi9cbmV4cG9ydCB0eXBlIHsgU3RydWN0dXJlZEVycm9ySW5mbyB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgRXJyb3IgVXRpbGl0aWVzICovXG5leHBvcnQgeyBleHRyYWN0RXJyb3JJbmZvLCBmb3JtYXRFcnJvckluZm8gfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEZXYgVG9vbHMg4oCUIE1vZGUgZmxhZ3MgYW5kIFpvZCBzY29wZSB1dGlsaXRpZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBAY2F0ZWdvcnkgRGV2IFRvb2xzXG4gKlxuICogR2xvYmFsIGRldi1tb2RlIGZsYWcuIENhbGwgYGVuYWJsZURldk1vZGUoKWAgYXQgYXBwbGljYXRpb24gc3RhcnR1cCB0b1xuICogdHVybiBvbiBkZXZlbG9wZXItb25seSBkaWFnbm9zdGljcyBhY3Jvc3MgdGhlIGxpYnJhcnkg4oCUIGNpcmN1bGFyLXJlZmVyZW5jZVxuICogZGV0ZWN0aW9uIGluIHNjb3BlIHdyaXRlcywgd2FybmluZ3Mgd2hlbiBhIHJlY29yZGVyIGhhcyBubyBvYnNlcnZlclxuICogbWV0aG9kcywgc3VzcGljaW91cy1wcmVkaWNhdGUgd2FybmluZ3MgaW4gZGVjaWRlL3NlbGVjdCwgc3RydWN0dXJhbFxuICogY2hlY2tzIGluIGBnZXRTdWJ0cmVlU25hcHNob3RgLCBhbmQgYW55IGZ1dHVyZSBkZXYtb25seSBkaWFnbm9zdGljLlxuICpcbiAqIFByb2R1Y3Rpb24gbGVhdmVzIGl0IE9GRiBieSBkZWZhdWx0ICh6ZXJvIG92ZXJoZWFkKS4gU2VlIHRoZSBKU0RvYyBvblxuICogYGVuYWJsZURldk1vZGVgIGZvciB0aGUgZnVsbCBsaXN0IGFuZCB1c2FnZSBleGFtcGxlLlxuICovXG5leHBvcnQgeyBkaXNhYmxlRGV2TW9kZSwgZW5hYmxlRGV2TW9kZSwgaXNEZXZNb2RlIH0gZnJvbSAnLi9saWIvZGV2TW9kZS5qcyc7XG5cbi8vIGBkZWZpbmVTY29wZUZyb21ab2RgIGFuZCB0aGUgb3RoZXIgem9kLWJhc2VkIHNjb3BlIGhlbHBlcnMgbW92ZWQgdG8gdGhlIG9wdC1pblxuLy8gYGZvb3RwcmludGpzL3pvZGAgZW50cnkg4oCUIGtlZXBpbmcgem9kIG91dCBvZiB0aGUgY29yZSBsb2FkIHBhdGggKGl0IGlzIGFuXG4vLyBvcHRpb25hbCBwZWVyKS4gSW1wb3J0IHRoZW0gZnJvbSAnZm9vdHByaW50anMvem9kJy5cbi8vIEEgcnVuJ3MgcmVjb3JkIGFzIEpTT04gd2l0aG91dCB0aGUgZW5naW5lJ3MgcmVjdXJzaW9uIGxpbWl0ICg5LjI2LjApOiB0aGVcbi8vIHNhbWUgYnl0ZXMgSlNPTi5zdHJpbmdpZnkgZW1pdHMsIGZvciBhIGRlZXAgYG5leHRgIGNoYWluIGl0IGNhbm5vdCBlbmNvZGUuXG5leHBvcnQgeyBzdHJpbmdpZnlTbmFwc2hvdCB9IGZyb20gJy4vbGliL3J1bm5lci9zdHJpbmdpZnlTbmFwc2hvdC5qcyc7XG4iXX0=
|
|
@@ -74,7 +74,7 @@ export declare class EventLog {
|
|
|
74
74
|
/**
|
|
75
75
|
* Persists a commit bundle for a finished stage, and FREEZES it (see the module doc): the bundle
|
|
76
76
|
* is stamped with its position, then deep-frozen, then appended. The engine hands it a bundle
|
|
77
|
-
* built for the log alone; a caller of this class (`footprintjs/
|
|
77
|
+
* built for the log alone; a caller of this class (`footprintjs/write`) hands over a bundle it
|
|
78
78
|
* will no longer edit — its own object is the one frozen.
|
|
79
79
|
*/
|
|
80
80
|
record(bundle: CommitBundle): void;
|
|
@@ -89,7 +89,7 @@ export class EventLog {
|
|
|
89
89
|
/**
|
|
90
90
|
* Persists a commit bundle for a finished stage, and FREEZES it (see the module doc): the bundle
|
|
91
91
|
* is stamped with its position, then deep-frozen, then appended. The engine hands it a bundle
|
|
92
|
-
* built for the log alone; a caller of this class (`footprintjs/
|
|
92
|
+
* built for the log alone; a caller of this class (`footprintjs/write`) hands over a bundle it
|
|
93
93
|
* will no longer edit — its own object is the one frozen.
|
|
94
94
|
*/
|
|
95
95
|
record(bundle) {
|
|
@@ -145,4 +145,4 @@ export class EventLog {
|
|
|
145
145
|
this.sourceAddressRetired = true;
|
|
146
146
|
}
|
|
147
147
|
}
|
|
148
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnRMb2cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS9FdmVudExvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVqRCxNQUFNLE9BQU8sUUFBUTtJQUNuQiw2REFBNkQ7SUFDckQsSUFBSSxDQUFNO0lBQ2xCLHNDQUFzQztJQUM5QixLQUFLLEdBQW1CLEVBQUUsQ0FBQztJQUMzQixhQUFhLENBQWM7SUFDM0Isb0JBQW9CLEdBQUcsS0FBSyxDQUFDO0lBRXJDLFlBQVksYUFBa0I7UUFDNUIsdUVBQXVFO1FBQ3ZFLHNFQUFzRTtRQUN0RSxzRUFBc0U7UUFDdEUsK0NBQStDO1FBQy9DLElBQUksQ0FBQyxJQUFJLEdBQUcsYUFBYSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILGVBQWU7UUFDYixPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQW9CRztJQUNILFdBQVcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEQsbUJBQW1CLENBQUMsR0FBRyxFQUFFLE9BQXNCLEVBQUUsU0FBd0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwRixDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsTUFBb0I7UUFDekIsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUMvQixZQUFZLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSTtRQUNGLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzNCLENBQUM7SUFFRCx3RUFBd0U7SUFDeEUsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCx3RkFBd0Y7SUFDeEYsV0FBVyxDQUFDLFFBQWdCLEVBQUUsU0FBNEI7UUFDeEQsSUFBSSxJQUFJLENBQUMsb0JBQW9CO1lBQUUsT0FBTztRQUN0QyxJQUFJLENBQUMsYUFBYSxLQUFLLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFRCwrRkFBK0Y7SUFDL0YsZUFBZSxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDMUMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFFRCw4Q0FBOEM7SUFDOUMsS0FBSztRQUNILElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLHdFQUF3RTtRQUN4RSxzRUFBc0U7UUFDdEUsdUVBQXVFO1FBQ3ZFLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1FBQy9CLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7SUFDbkMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFdmVudExvZyDigJQgVGltZS10cmF2ZWwgc25hcHNob3Qgc3RvcmFnZSBmb3IgZmxvd2NoYXJ0IGV4ZWN1dGlvblxuICpcbiAqIExpa2UgZ2l0IGhpc3Rvcnk6IHN0b3JlcyBjb21taXQgYnVuZGxlcyAoZGlmZnMpLCBub3QgZnVsbCBzbmFwc2hvdHMuXG4gKlxuICogVEhFIFJFQ09SRCBJUyBJTU1VVEFCTEUgRlJPTSBgcmVjb3JkYCAoRjMsIHJ1bGluZyBSMykuIEV2ZXJ5IGJ1bmRsZSBpcyBkZWVwLWZyb3plbiBhcyBpdCBpc1xuICogcmVjb3JkZWQg4oCUIHRoZSBidW5kbGUsIGBvdmVyd3JpdGVgIGFuZCBgdXBkYXRlc2AgYXQgZXZlcnkgZGVwdGgsIHRoZSB0cmFjZSBhbmQgZWFjaCByb3csIHRoZVxuICogcm93J3MgYHJlYWRLZXlzYCwgYHJlZGFjdGVkUGF0aHNgLCBgdGFnc2AsIGB1bnRyYWNrZWRTb3VyY2VzYCDigJQgc28gYSBob2xkZXIgb2YgYSBzbmFwc2hvdCBjYW4gbm9cbiAqIGxvbmdlciByZXdyaXRlIHRoZSBoaXN0b3J5IGV2ZXJ5IGxhdGVyIGFuc3dlciBpcyBmb2xkZWQgZnJvbTogYW4gYXNzaWdubWVudCBpbnRvIGEgYnVuZGxlIHRocm93c1xuICogYSBgVHlwZUVycm9yYCBpbiBzdHJpY3QgY29kZS4gU2FmZSBiZWNhdXNlIG5vdGhpbmcgb3V0c2lkZSB0aGUgbG9nIGhvbGRzIGEgYnVuZGxlJ3MgY29udGFpbmVyczpcbiAqIHRoZSBsb2cncyBwYXlsb2FkIGlzIHRoZSBjb21taXQncyBvd24gY29weSAoYHJlY29yZENvbW1pdGAgaGFuZHMgaXQgdGhlIG91dHB1dCBvZlxuICogYHNjcnViUGF0Y2hgKSwgYW5kIGxpdmUgc3RhdGUsIHRoZSByZWRhY3RlZCBtaXJyb3IgYW5kIHdyaXRlIHJldGVudGlvbiBlYWNoIHRha2UgdGhlaXIgb3duIGNvcHlcbiAqIChgdmVyYnMudHMgwrcgZm9sZFJvd3NgIGRldGFjaGVzLCBgU3RhZ2VDb250ZXh0IMK3IHJldGFpbmVkRm9ybWAgY2xvbmVzKSDigJQgcGlubmVkIGJ5XG4gKiB0ZXN0L2xpYi9tZW1vcnkvcHJvcGVydHkvcmVjb3JkLXJlYWNoYWJpbGl0eS5wcm9wZXJ0eS50ZXN0LnRzLlxuICpcbiAqIFdoYXQgYE9iamVjdC5mcmVlemVgIGNhbm5vdCBzZWFsIOKAlCBhIERhdGUncyB0aW1lLCBhIE1hcCdzIG9yIFNldCdzIGVudHJpZXMsIGEgYnVmZmVyJ3MgYnl0ZXMsIGFcbiAqIFJlZ0V4cCwgYW4gRXJyb3IncyBzdGFjayDigJQgaXMgbmV2ZXIgaGFuZGVkIG91dCB0byBhIHJlYWRlciAoOS40NC4yKTogYHJlY29yZGAgcmVtZW1iZXJzIHRoYXQgYVxuICogYnVuZGxlIGhvbGRzIHN1Y2ggYSB2YWx1ZSAoYGNhcHR1cmUvZnJlZXplLnRzIMK3IGZyZWV6ZVJlY29yZGApLCBhbmQgYGxpc3QoKWAg4oCUIGxpa2UgdGhlIHB1YmxpY1xuICogc25hcHNob3QsIGBydW5uZXIvc25hcHNob3QudHMgwrcgc2VydmVkU25hcHNob3RgIOKAlCBzZXJ2ZXMgdGhhdCBidW5kbGUgYXMgYSBjb3B5IG9mIGl0cyBvcGVuIHBhdGhzXG4gKiAoYHNlcnZlUmVjb3JkYCwgbWFwcGVkIGF0IGl0cyBmaXJzdCBzZXJ2ZSk6IGZyZXNoIGZyb3plbiBjb250YWluZXJzIGRvd24gdG8gZWFjaCBzdWNoIHZhbHVlLCBhXG4gKiBmcmVzaCBjb3B5IG9mIGl0LCBldmVyeSBvdGhlciBwYXJ0IHRoZSBsb2cncyBvd24uIEEgcmVhZGVyIGVkaXRzIG9ubHkgaXRzIG93biBjb3B5OyBldmVyeSBsYXRlclxuICogc2VydmUgcmVhZHMgdGhlIHJlY29yZCBhcyByZWNvcmRlZC4gYHJlY29yZGVkKClgIGlzIHRoZSBlbmdpbmUncyBvd24sIHVuc2VydmVkIHJlYWQuIE5hbWVkIGhvbGVzOiBhbiBvYmplY3QgaHVuZyBvbiBhbiBhcnJheSBFWFBBTkRPIChhcnJheXMgYXJlIHdhbGtlZFxuICogYnkgaW5kZXgg4oCUIHRoZSBgJ2luZGljZXMnYCB3YWxrLCB3aGljaCBrZWVwcyB0aGUgZnJlZXplIGluc2lkZSBpdHMgYnVkZ2V0OyBhbiBleHBhbmRvIGlzIG91dCBvZlxuICogY29udHJhY3QgZm9yIHN0YXRlKSBhbmQgYSBgU2hhcmVkQXJyYXlCdWZmZXJgIChldmVyeSBjb3B5IHNoYXJlcyBpdHMgbWVtb3J5KS4gQSBmcm96ZW4gUmVnRXhwJ3NcbiAqIGBsYXN0SW5kZXhgIGlzIHJlYWQtb25seSwgc28gYSBgL2dgIG9yIGAveWAgcmVnZXggcmVhZCBmcm9tIGEgYnVuZGxlIHRocm93cyB3aGVuIGBleGVjYCBvclxuICogYHJlcGxhY2VgIGFkdmFuY2UgaXQuXG4gKi9cblxuaW1wb3J0IHsgZnJlZXplUmVjb3JkLCBzZXJ2ZVJlY29yZCB9IGZyb20gJy4uL2NhcHR1cmUvZnJlZXplLmpzJztcbmltcG9ydCB0eXBlIHsgRW1pdFNvdXJjZVBvc2l0aW9uLCBMb2dBZGRyZXNzIH0gZnJvbSAnLi9ldmVudFBvc2l0aW9uLmpzJztcbmltcG9ydCB0eXBlIHsgQ29tbWl0QnVuZGxlLCBNZW1vcnlQYXRjaCB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgYXBwbHlTbWFydE1lcmdlSW50byB9IGZyb20gJy4vdXRpbHMuanMnO1xuXG5leHBvcnQgY2xhc3MgRXZlbnRMb2cge1xuICAvKiogQmFzZSBzbmFwc2hvdCBCRUZPUkUgdGhlIGZpcnN0IHN0YWdlIG11dGF0ZXMgYW55dGhpbmcuICovXG4gIHByaXZhdGUgYmFzZTogYW55O1xuICAvKiogT3JkZXJlZCBsaXN0IG9mIGNvbW1pdCBidW5kbGVzLiAqL1xuICBwcml2YXRlIHN0ZXBzOiBDb21taXRCdW5kbGVbXSA9IFtdO1xuICBwcml2YXRlIHNvdXJjZUFkZHJlc3M/OiBMb2dBZGRyZXNzO1xuICBwcml2YXRlIHNvdXJjZUFkZHJlc3NSZXRpcmVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoaW5pdGlhbE1lbW9yeTogYW55KSB7XG4gICAgLy8gTm9ybWFsaXNlZCB0byBhbiBvYmplY3Q6IHRoZSBiYXNlIGlzIGEgU1RBVEUsIGFuZCBldmVyeSBmb2xkIG92ZXIgaXRcbiAgICAvLyAoYG1hdGVyaWFsaXNlYCwgYHN0YXRlQXRgKSBhcHBsaWVzIHBhdGggd3JpdGVzIHRvIGl0LiBgdW5kZWZpbmVkYCDigJRcbiAgICAvLyB3aGF0IGEgcnVuIHdpdGggbm8gYGluaXRpYWxDb250ZXh0YCB1c2VkIHRvIHN0b3JlIGhlcmUg4oCUIG1hZGUgZXZlcnlcbiAgICAvLyBvbmUgb2YgdGhvc2UgZm9sZHMgdGhyb3cgb24gdGhlIGZpcnN0IGBzZXRgLlxuICAgIHRoaXMuYmFzZSA9IGluaXRpYWxNZW1vcnkgPT09IHVuZGVmaW5lZCA/IHt9IDogc3RydWN0dXJlZENsb25lKGluaXRpYWxNZW1vcnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkIEJBU0Ug4oCUIHRoZSBzdGF0ZSBhcyBpdCBzdG9vZCBiZWZvcmUgdGhlIGZpcnN0IGNvbW1pdC5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgb3RoZXIgaGFsZiBvZiB0aGUgY29tbWl0IGxvZzogYnVuZGxlcyBhcmUgRElGRlMsIHNvIGEgbG9nXG4gICAqIGFsb25lIGNhbm5vdCByZWNvbnN0cnVjdCBzdGF0ZSB0aGF0IHdhcyBzZWVkZWQgYmVmb3JlIHRoZSBydW4gKGFuXG4gICAqIGV4ZWN1dG9yIGBpbml0aWFsQ29udGV4dGAsIGBkZWZhdWx0VmFsdWVzRm9yQ29udGV4dGAsIGEgcmVzdW1lJ3NcbiAgICogYGNoZWNrcG9pbnQuc2hhcmVkU3RhdGVgLCBhIHN1YmZsb3cncyBgaW5wdXRNYXBwZXJgIHNlZWQpLiBUcmF2ZWxsaW5nXG4gICAqIHdpdGggdGhlIGxvZyDigJQgYFJ1bnRpbWVTbmFwc2hvdC5pbml0aWFsU3RhdGVgIOKAlCBpcyB3aGF0IGxldHMgYW4gT0ZGTElORVxuICAgKiBjb25zdW1lciBmb2xkOyB3aXRob3V0IGl0IHRoZSBob25lc3QgYW5zd2VyIGlzIGEgcGFydGlhbCBvbmVcbiAgICogKGBzdGF0ZUF0YCdzIGBiYXNpczogJ2xvZy1vbmx5J2ApLlxuICAgKlxuICAgKiBSZXR1cm5zIGEgZnJlc2ggZGV0YWNoZWQgY2xvbmUgb24gZXZlcnkgY2FsbCDigJQgdGhlIGNhbGxlciBvd25zIGl0LlxuICAgKi9cbiAgZ2V0SW5pdGlhbFN0YXRlKCk6IGFueSB7XG4gICAgcmV0dXJuIHN0cnVjdHVyZWRDbG9uZSh0aGlzLmJhc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29uc3RydWN0cyB0aGUgZnVsbCBzdGF0ZSBhdCBhbnkgZ2l2ZW4gc3RlcC5cbiAgICogUmVwbGF5cyBjb21taXRzIGZyb20gdGhlIGJlZ2lubmluZyDigJQgTyhuKSBidXQgbG93IG1lbW9yeSBmb290cHJpbnQuXG4gICAqXG4gICAqIElOREVYIENPTlZFTlRJT04g4oCUIGBzdGVwSWR4YCBpcyBFWENMVVNJVkU6IGBtYXRlcmlhbGlzZSgzKWAgZm9sZHMgY29tbWl0c1xuICAgKiAwLCAxIGFuZCAyLiBgc3RhdGVBdChzb3VyY2UsIGNvbW1pdElkeClgIChmb290cHJpbnRqcy90cmFjZSkgZm9sZHMgdGhlXG4gICAqIHNhbWUgbG9nIGJ1dCBpdHMgYGNvbW1pdElkeGAgaXMgSU5DTFVTSVZFLCBiZWNhdXNlIGEgcmVhZGVyJ3MgY3Vyc29yIGFza3NcbiAgICogXCJ0aGUgc3RhdGUgQVQgdGhpcyBzdG9wXCIsIHdoaWNoIG11c3QgaW5jbHVkZSB0aGF0IHN0b3AncyBvd24gY29tbWl0LiBUd29cbiAgICogZm9sZHMgb3ZlciBvbmUgbG9nIHdpdGggb3Bwb3NpdGUgY29udmVudGlvbnM6IGNoZWNrIHdoaWNoIG9uZSB5b3UgaG9sZC5cbiAgICpcbiAgICogT25lIGNsb25lIG9mIHRoZSBiYXNlIHBlciBjYWxsLCB0aGVuIGV2ZXJ5IGJ1bmRsZSByZXBsYXllZCBJTlRPIHRoYXRcbiAgICogcHJpdmF0ZSBjb3B5IChgYXBwbHlTbWFydE1lcmdlSW50b2Ag4oCUIHRoZSBsaXZlIGNvbW1pdCdzIGNvcHktb24td3JpdGUgbGF3XG4gICAqIGJlbG93IHRoZSByb290LCA5LjI5LjAsIHNvIHRoZSBmb2xkIGFuZCB0aGUgbGl2ZSBzdGF0ZSBhZ3JlZSBhdCBldmVyeVxuICAgKiBwYXRoKS4gVGhlIHJlc3VsdCBpcyB0aGUgY2FsbGVyJ3M6IGl0IHNoYXJlcyBub3RoaW5nIHdpdGggdGhlIGJhc2Ugb3JcbiAgICogdGhlIGxvZy5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgU2luY2UgOS4zMy4wIOKAlCB1c2UgYHN0YXRlQXRgIGZyb20gYGZvb3RwcmludGpzL3RyYWNlYCwgd2hpY2ggZm9sZHMgdGhlIHNhbWUgbG9nXG4gICAqIGZyb20gdGhlIHNhbWUgYmFzZSAoYFJ1bnRpbWVTbmFwc2hvdC5pbml0aWFsU3RhdGVgKSBhbmQgc2F5cyBob3cgaXQgd2FzIGRlcml2ZWQgKGBiYXNpc2ApLlxuICAgKiBOb3RoaW5nIGluIHRoZSBsaWJyYXJ5IGNhbGxzIHRoaXM7IGl0IHN0YXlzIGZvciBvbmUgbWlub3IgYW5kIGlzIHRoZW4gcmVtb3ZlZC4gTWluZCB0aGVcbiAgICogaW5kZXg6IGBtYXRlcmlhbGlzZShuKWAgZm9sZHMgY29tbWl0cyBgMC4ubi0xYCwgYHN0YXRlQXQoc291cmNlLCBuIC0gMSlgIHRoZSBzYW1lIGNvbW1pdHMuXG4gICAqL1xuICBtYXRlcmlhbGlzZShzdGVwSWR4ID0gdGhpcy5zdGVwcy5sZW5ndGgpOiBhbnkge1xuICAgIGNvbnN0IG91dCA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLmJhc2UpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RlcElkeDsgaSsrKSB7XG4gICAgICBjb25zdCB7IG92ZXJ3cml0ZSwgdXBkYXRlcywgdHJhY2UgfSA9IHRoaXMuc3RlcHNbaV07XG4gICAgICBhcHBseVNtYXJ0TWVyZ2VJbnRvKG91dCwgdXBkYXRlcyBhcyBNZW1vcnlQYXRjaCwgb3ZlcndyaXRlIGFzIE1lbW9yeVBhdGNoLCB0cmFjZSk7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICAvKipcbiAgICogUGVyc2lzdHMgYSBjb21taXQgYnVuZGxlIGZvciBhIGZpbmlzaGVkIHN0YWdlLCBhbmQgRlJFRVpFUyBpdCAoc2VlIHRoZSBtb2R1bGUgZG9jKTogdGhlIGJ1bmRsZVxuICAgKiBpcyBzdGFtcGVkIHdpdGggaXRzIHBvc2l0aW9uLCB0aGVuIGRlZXAtZnJvemVuLCB0aGVuIGFwcGVuZGVkLiBUaGUgZW5naW5lIGhhbmRzIGl0IGEgYnVuZGxlXG4gICAqIGJ1aWx0IGZvciB0aGUgbG9nIGFsb25lOyBhIGNhbGxlciBvZiB0aGlzIGNsYXNzIChgZm9vdHByaW50anMvYWR2YW5jZWRgKSBoYW5kcyBvdmVyIGEgYnVuZGxlIGl0XG4gICAqIHdpbGwgbm8gbG9uZ2VyIGVkaXQg4oCUIGl0cyBvd24gb2JqZWN0IGlzIHRoZSBvbmUgZnJvemVuLlxuICAgKi9cbiAgcmVjb3JkKGJ1bmRsZTogQ29tbWl0QnVuZGxlKTogdm9pZCB7XG4gICAgYnVuZGxlLmlkeCA9IHRoaXMuc3RlcHMubGVuZ3RoO1xuICAgIGZyZWV6ZVJlY29yZChidW5kbGUsICdpbmRpY2VzJyk7XG4gICAgdGhpcy5zdGVwcy5wdXNoKGJ1bmRsZSk7XG4gIH1cblxuICAvKipcbiAgICogRXZlcnkgcmVjb3JkZWQgY29tbWl0IGJ1bmRsZSwgQVMgU0VSVkVEICg5LjQ0LjIpOiBhIG5ldyBhcnJheSBlYWNoIGNhbGw7IGEgYnVuZGxlIGZyZWV6aW5nIHNlYWxlZFxuICAgKiB3aG9sZSBpcyB0aGUgbG9nJ3Mgb3duIChmcm96ZW4pIG9iamVjdCwgb25lIGhvbGRpbmcgYSBEYXRlLCBNYXAsIGJ1ZmZlciDigKYgaXMgYSBjb3B5IG9mIGl0cyBvcGVuXG4gICAqIHBhdGhzIChgY2FwdHVyZS9mcmVlemUudHMgwrcgc2VydmVSZWNvcmRgKSDigJQgdGhlIHJlYWRlcidzIG93biwgc28gbm8gZWRpdCByZWFjaGVzIHRoZSBsb2cuXG4gICAqL1xuICBsaXN0KCk6IENvbW1pdEJ1bmRsZVtdIHtcbiAgICByZXR1cm4gdGhpcy5zdGVwcy5tYXAoc2VydmVSZWNvcmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbCBUaGUgYnVuZGxlcyBhcyB0aGUgbG9nIGhvbGRzIHRoZW0g4oCUIGVhY2ggZnJvemVuLCBOT1Qgc2VydmVkIOKAlCBpbiBhIG5ldyBhcnJheSwgc28gYSBob2xkZXInc1xuICAgKiBgc3BsaWNlYCByZWFjaGVzIG9ubHkgaXRzIG93bi4gRm9yIHRoZSBlbmdpbmUncyBvd24gc25hcHNob3QgKGBFeGVjdXRpb25SdW50aW1lIMK3IGdldFNuYXBzaG90YCwgd2hpY2hcbiAgICogYSBzdWJmbG93IG1vdW50IHRha2VzIG9uY2UgcGVyIG1vdW50KSwgc28gdGhlIHJ1biBzZXJ2ZXMgbm90aGluZzsgYSByZWFkZXIgaXMgc2VydmVkIGJ5IGBsaXN0KClgIGFuZFxuICAgKiBgZ2V0U25hcHNob3QoKS5jb21taXRMb2dgLiBBIGtub3duIG9wZW4gZG9vciAoQ0hBTkdFTE9HIDkuNDQuMik6IGEgaG9sZGVyIG9mIHRoZXNlIGJ1bmRsZXMgY2FuIHN0aWxsXG4gICAqIGVkaXQgYSBEYXRlLCBNYXAgb3IgYnVmZmVyIGluc2lkZSB0aGVtLlxuICAgKi9cbiAgcmVjb3JkZWQoKTogQ29tbWl0QnVuZGxlW10ge1xuICAgIHJldHVybiB0aGlzLnN0ZXBzLnNsaWNlKCk7XG4gIH1cblxuICAvKiogTnVtYmVyIG9mIHJlY29yZGVkIGNvbW1pdHMuICovXG4gIGdldCBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zdGVwcy5sZW5ndGg7XG4gIH1cblxuICAvKiogSW1tdXRhYmxlIGlkZW50aXR5IG9mIHRoaXMgbG9nLCBhYnNlbnQgdW50aWwgdGhlIGVuZ2luZSBiaW5kcyBpdC4gKi9cbiAgZ2V0IGFkZHJlc3MoKTogTG9nQWRkcmVzcyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlQWRkcmVzcztcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgQmluZCBvbmNlOyByZXN1bWluZyB0aGUgc2FtZSBsb2cgbXVzdCBub3QgcmVuYW1lIGl0cyBlYXJsaWVyIHBvc2l0aW9ucy4gKi9cbiAgYmluZEFkZHJlc3MobG9nUnVuSWQ6IHN0cmluZywgZHJpbGxQYXRoOiByZWFkb25seSBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNvdXJjZUFkZHJlc3NSZXRpcmVkKSByZXR1cm47XG4gICAgdGhpcy5zb3VyY2VBZGRyZXNzID8/PSBPYmplY3QuZnJlZXplKHsgbG9nUnVuSWQsIGRyaWxsUGF0aDogT2JqZWN0LmZyZWV6ZShbLi4uZHJpbGxQYXRoXSkgfSk7XG4gIH1cblxuICAvKiogTygxKSBzb3VyY2UtdGltZSBjYXB0dXJlLiBObyBjb3VudGVyLCBvYnNlcnZlciBib29ra2VlcGluZywgb3IgZnV0dXJlIGNvbW1pdCBwcmVkaWN0aW9uLiAqL1xuICBjYXB0dXJlUG9zaXRpb24ocnVuSWQ6IHN0cmluZyk6IEVtaXRTb3VyY2VQb3NpdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnNvdXJjZUFkZHJlc3MpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoeyBydW5JZCwgLi4udGhpcy5zb3VyY2VBZGRyZXNzLCBjb21taXR0ZWRUaHJvdWdoSWR4OiB0aGlzLnN0ZXBzLmxlbmd0aCAtIDEgfSk7XG4gIH1cblxuICAvKiogV2lwZXMgaGlzdG9yeSAodXNlZnVsIGZvciB0ZXN0IHJlc2V0cykuICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuc3RlcHMgPSBbXTtcbiAgICAvLyBBIHJlc2V0IHByZWZpeCBjYW5ub3QgcmV1c2Ugb2xkIGNvb3JkaW5hdGVzLCBldmVuIGlmIGFub3RoZXIgc3RhZ2Ugb2ZcbiAgICAvLyB0aGUgU0FNRSBsZWcgYmluZHMgaXQgYWdhaW4uIEtlZXAgY2xlYXIncyBkYXRhIGJlaGF2aW9yLCBidXQgcmV0aXJlXG4gICAgLy8gYWRkcmVzc2luZyBmb3IgdGhpcyBsb2c7IGtub3duIGNvb3JkaW5hdGVzIHJlcXVpcmUgYSBmcmVzaCBFdmVudExvZy5cbiAgICB0aGlzLnNvdXJjZUFkZHJlc3MgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zb3VyY2VBZGRyZXNzUmV0aXJlZCA9IHRydWU7XG4gIH1cbn1cbiJdfQ==
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnRMb2cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS9FdmVudExvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVqRCxNQUFNLE9BQU8sUUFBUTtJQUNuQiw2REFBNkQ7SUFDckQsSUFBSSxDQUFNO0lBQ2xCLHNDQUFzQztJQUM5QixLQUFLLEdBQW1CLEVBQUUsQ0FBQztJQUMzQixhQUFhLENBQWM7SUFDM0Isb0JBQW9CLEdBQUcsS0FBSyxDQUFDO0lBRXJDLFlBQVksYUFBa0I7UUFDNUIsdUVBQXVFO1FBQ3ZFLHNFQUFzRTtRQUN0RSxzRUFBc0U7UUFDdEUsK0NBQStDO1FBQy9DLElBQUksQ0FBQyxJQUFJLEdBQUcsYUFBYSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILGVBQWU7UUFDYixPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQW9CRztJQUNILFdBQVcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEQsbUJBQW1CLENBQUMsR0FBRyxFQUFFLE9BQXNCLEVBQUUsU0FBd0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwRixDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsTUFBb0I7UUFDekIsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUMvQixZQUFZLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSTtRQUNGLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzNCLENBQUM7SUFFRCx3RUFBd0U7SUFDeEUsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCx3RkFBd0Y7SUFDeEYsV0FBVyxDQUFDLFFBQWdCLEVBQUUsU0FBNEI7UUFDeEQsSUFBSSxJQUFJLENBQUMsb0JBQW9CO1lBQUUsT0FBTztRQUN0QyxJQUFJLENBQUMsYUFBYSxLQUFLLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFRCwrRkFBK0Y7SUFDL0YsZUFBZSxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDMUMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFFRCw4Q0FBOEM7SUFDOUMsS0FBSztRQUNILElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLHdFQUF3RTtRQUN4RSxzRUFBc0U7UUFDdEUsdUVBQXVFO1FBQ3ZFLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1FBQy9CLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7SUFDbkMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFdmVudExvZyDigJQgVGltZS10cmF2ZWwgc25hcHNob3Qgc3RvcmFnZSBmb3IgZmxvd2NoYXJ0IGV4ZWN1dGlvblxuICpcbiAqIExpa2UgZ2l0IGhpc3Rvcnk6IHN0b3JlcyBjb21taXQgYnVuZGxlcyAoZGlmZnMpLCBub3QgZnVsbCBzbmFwc2hvdHMuXG4gKlxuICogVEhFIFJFQ09SRCBJUyBJTU1VVEFCTEUgRlJPTSBgcmVjb3JkYCAoRjMsIHJ1bGluZyBSMykuIEV2ZXJ5IGJ1bmRsZSBpcyBkZWVwLWZyb3plbiBhcyBpdCBpc1xuICogcmVjb3JkZWQg4oCUIHRoZSBidW5kbGUsIGBvdmVyd3JpdGVgIGFuZCBgdXBkYXRlc2AgYXQgZXZlcnkgZGVwdGgsIHRoZSB0cmFjZSBhbmQgZWFjaCByb3csIHRoZVxuICogcm93J3MgYHJlYWRLZXlzYCwgYHJlZGFjdGVkUGF0aHNgLCBgdGFnc2AsIGB1bnRyYWNrZWRTb3VyY2VzYCDigJQgc28gYSBob2xkZXIgb2YgYSBzbmFwc2hvdCBjYW4gbm9cbiAqIGxvbmdlciByZXdyaXRlIHRoZSBoaXN0b3J5IGV2ZXJ5IGxhdGVyIGFuc3dlciBpcyBmb2xkZWQgZnJvbTogYW4gYXNzaWdubWVudCBpbnRvIGEgYnVuZGxlIHRocm93c1xuICogYSBgVHlwZUVycm9yYCBpbiBzdHJpY3QgY29kZS4gU2FmZSBiZWNhdXNlIG5vdGhpbmcgb3V0c2lkZSB0aGUgbG9nIGhvbGRzIGEgYnVuZGxlJ3MgY29udGFpbmVyczpcbiAqIHRoZSBsb2cncyBwYXlsb2FkIGlzIHRoZSBjb21taXQncyBvd24gY29weSAoYHJlY29yZENvbW1pdGAgaGFuZHMgaXQgdGhlIG91dHB1dCBvZlxuICogYHNjcnViUGF0Y2hgKSwgYW5kIGxpdmUgc3RhdGUsIHRoZSByZWRhY3RlZCBtaXJyb3IgYW5kIHdyaXRlIHJldGVudGlvbiBlYWNoIHRha2UgdGhlaXIgb3duIGNvcHlcbiAqIChgdmVyYnMudHMgwrcgZm9sZFJvd3NgIGRldGFjaGVzLCBgU3RhZ2VDb250ZXh0IMK3IHJldGFpbmVkRm9ybWAgY2xvbmVzKSDigJQgcGlubmVkIGJ5XG4gKiB0ZXN0L2xpYi9tZW1vcnkvcHJvcGVydHkvcmVjb3JkLXJlYWNoYWJpbGl0eS5wcm9wZXJ0eS50ZXN0LnRzLlxuICpcbiAqIFdoYXQgYE9iamVjdC5mcmVlemVgIGNhbm5vdCBzZWFsIOKAlCBhIERhdGUncyB0aW1lLCBhIE1hcCdzIG9yIFNldCdzIGVudHJpZXMsIGEgYnVmZmVyJ3MgYnl0ZXMsIGFcbiAqIFJlZ0V4cCwgYW4gRXJyb3IncyBzdGFjayDigJQgaXMgbmV2ZXIgaGFuZGVkIG91dCB0byBhIHJlYWRlciAoOS40NC4yKTogYHJlY29yZGAgcmVtZW1iZXJzIHRoYXQgYVxuICogYnVuZGxlIGhvbGRzIHN1Y2ggYSB2YWx1ZSAoYGNhcHR1cmUvZnJlZXplLnRzIMK3IGZyZWV6ZVJlY29yZGApLCBhbmQgYGxpc3QoKWAg4oCUIGxpa2UgdGhlIHB1YmxpY1xuICogc25hcHNob3QsIGBydW5uZXIvc25hcHNob3QudHMgwrcgc2VydmVkU25hcHNob3RgIOKAlCBzZXJ2ZXMgdGhhdCBidW5kbGUgYXMgYSBjb3B5IG9mIGl0cyBvcGVuIHBhdGhzXG4gKiAoYHNlcnZlUmVjb3JkYCwgbWFwcGVkIGF0IGl0cyBmaXJzdCBzZXJ2ZSk6IGZyZXNoIGZyb3plbiBjb250YWluZXJzIGRvd24gdG8gZWFjaCBzdWNoIHZhbHVlLCBhXG4gKiBmcmVzaCBjb3B5IG9mIGl0LCBldmVyeSBvdGhlciBwYXJ0IHRoZSBsb2cncyBvd24uIEEgcmVhZGVyIGVkaXRzIG9ubHkgaXRzIG93biBjb3B5OyBldmVyeSBsYXRlclxuICogc2VydmUgcmVhZHMgdGhlIHJlY29yZCBhcyByZWNvcmRlZC4gYHJlY29yZGVkKClgIGlzIHRoZSBlbmdpbmUncyBvd24sIHVuc2VydmVkIHJlYWQuIE5hbWVkIGhvbGVzOiBhbiBvYmplY3QgaHVuZyBvbiBhbiBhcnJheSBFWFBBTkRPIChhcnJheXMgYXJlIHdhbGtlZFxuICogYnkgaW5kZXgg4oCUIHRoZSBgJ2luZGljZXMnYCB3YWxrLCB3aGljaCBrZWVwcyB0aGUgZnJlZXplIGluc2lkZSBpdHMgYnVkZ2V0OyBhbiBleHBhbmRvIGlzIG91dCBvZlxuICogY29udHJhY3QgZm9yIHN0YXRlKSBhbmQgYSBgU2hhcmVkQXJyYXlCdWZmZXJgIChldmVyeSBjb3B5IHNoYXJlcyBpdHMgbWVtb3J5KS4gQSBmcm96ZW4gUmVnRXhwJ3NcbiAqIGBsYXN0SW5kZXhgIGlzIHJlYWQtb25seSwgc28gYSBgL2dgIG9yIGAveWAgcmVnZXggcmVhZCBmcm9tIGEgYnVuZGxlIHRocm93cyB3aGVuIGBleGVjYCBvclxuICogYHJlcGxhY2VgIGFkdmFuY2UgaXQuXG4gKi9cblxuaW1wb3J0IHsgZnJlZXplUmVjb3JkLCBzZXJ2ZVJlY29yZCB9IGZyb20gJy4uL2NhcHR1cmUvZnJlZXplLmpzJztcbmltcG9ydCB0eXBlIHsgRW1pdFNvdXJjZVBvc2l0aW9uLCBMb2dBZGRyZXNzIH0gZnJvbSAnLi9ldmVudFBvc2l0aW9uLmpzJztcbmltcG9ydCB0eXBlIHsgQ29tbWl0QnVuZGxlLCBNZW1vcnlQYXRjaCB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgYXBwbHlTbWFydE1lcmdlSW50byB9IGZyb20gJy4vdXRpbHMuanMnO1xuXG5leHBvcnQgY2xhc3MgRXZlbnRMb2cge1xuICAvKiogQmFzZSBzbmFwc2hvdCBCRUZPUkUgdGhlIGZpcnN0IHN0YWdlIG11dGF0ZXMgYW55dGhpbmcuICovXG4gIHByaXZhdGUgYmFzZTogYW55O1xuICAvKiogT3JkZXJlZCBsaXN0IG9mIGNvbW1pdCBidW5kbGVzLiAqL1xuICBwcml2YXRlIHN0ZXBzOiBDb21taXRCdW5kbGVbXSA9IFtdO1xuICBwcml2YXRlIHNvdXJjZUFkZHJlc3M/OiBMb2dBZGRyZXNzO1xuICBwcml2YXRlIHNvdXJjZUFkZHJlc3NSZXRpcmVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoaW5pdGlhbE1lbW9yeTogYW55KSB7XG4gICAgLy8gTm9ybWFsaXNlZCB0byBhbiBvYmplY3Q6IHRoZSBiYXNlIGlzIGEgU1RBVEUsIGFuZCBldmVyeSBmb2xkIG92ZXIgaXRcbiAgICAvLyAoYG1hdGVyaWFsaXNlYCwgYHN0YXRlQXRgKSBhcHBsaWVzIHBhdGggd3JpdGVzIHRvIGl0LiBgdW5kZWZpbmVkYCDigJRcbiAgICAvLyB3aGF0IGEgcnVuIHdpdGggbm8gYGluaXRpYWxDb250ZXh0YCB1c2VkIHRvIHN0b3JlIGhlcmUg4oCUIG1hZGUgZXZlcnlcbiAgICAvLyBvbmUgb2YgdGhvc2UgZm9sZHMgdGhyb3cgb24gdGhlIGZpcnN0IGBzZXRgLlxuICAgIHRoaXMuYmFzZSA9IGluaXRpYWxNZW1vcnkgPT09IHVuZGVmaW5lZCA/IHt9IDogc3RydWN0dXJlZENsb25lKGluaXRpYWxNZW1vcnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkIEJBU0Ug4oCUIHRoZSBzdGF0ZSBhcyBpdCBzdG9vZCBiZWZvcmUgdGhlIGZpcnN0IGNvbW1pdC5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgb3RoZXIgaGFsZiBvZiB0aGUgY29tbWl0IGxvZzogYnVuZGxlcyBhcmUgRElGRlMsIHNvIGEgbG9nXG4gICAqIGFsb25lIGNhbm5vdCByZWNvbnN0cnVjdCBzdGF0ZSB0aGF0IHdhcyBzZWVkZWQgYmVmb3JlIHRoZSBydW4gKGFuXG4gICAqIGV4ZWN1dG9yIGBpbml0aWFsQ29udGV4dGAsIGBkZWZhdWx0VmFsdWVzRm9yQ29udGV4dGAsIGEgcmVzdW1lJ3NcbiAgICogYGNoZWNrcG9pbnQuc2hhcmVkU3RhdGVgLCBhIHN1YmZsb3cncyBgaW5wdXRNYXBwZXJgIHNlZWQpLiBUcmF2ZWxsaW5nXG4gICAqIHdpdGggdGhlIGxvZyDigJQgYFJ1bnRpbWVTbmFwc2hvdC5pbml0aWFsU3RhdGVgIOKAlCBpcyB3aGF0IGxldHMgYW4gT0ZGTElORVxuICAgKiBjb25zdW1lciBmb2xkOyB3aXRob3V0IGl0IHRoZSBob25lc3QgYW5zd2VyIGlzIGEgcGFydGlhbCBvbmVcbiAgICogKGBzdGF0ZUF0YCdzIGBiYXNpczogJ2xvZy1vbmx5J2ApLlxuICAgKlxuICAgKiBSZXR1cm5zIGEgZnJlc2ggZGV0YWNoZWQgY2xvbmUgb24gZXZlcnkgY2FsbCDigJQgdGhlIGNhbGxlciBvd25zIGl0LlxuICAgKi9cbiAgZ2V0SW5pdGlhbFN0YXRlKCk6IGFueSB7XG4gICAgcmV0dXJuIHN0cnVjdHVyZWRDbG9uZSh0aGlzLmJhc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29uc3RydWN0cyB0aGUgZnVsbCBzdGF0ZSBhdCBhbnkgZ2l2ZW4gc3RlcC5cbiAgICogUmVwbGF5cyBjb21taXRzIGZyb20gdGhlIGJlZ2lubmluZyDigJQgTyhuKSBidXQgbG93IG1lbW9yeSBmb290cHJpbnQuXG4gICAqXG4gICAqIElOREVYIENPTlZFTlRJT04g4oCUIGBzdGVwSWR4YCBpcyBFWENMVVNJVkU6IGBtYXRlcmlhbGlzZSgzKWAgZm9sZHMgY29tbWl0c1xuICAgKiAwLCAxIGFuZCAyLiBgc3RhdGVBdChzb3VyY2UsIGNvbW1pdElkeClgIChmb290cHJpbnRqcy90cmFjZSkgZm9sZHMgdGhlXG4gICAqIHNhbWUgbG9nIGJ1dCBpdHMgYGNvbW1pdElkeGAgaXMgSU5DTFVTSVZFLCBiZWNhdXNlIGEgcmVhZGVyJ3MgY3Vyc29yIGFza3NcbiAgICogXCJ0aGUgc3RhdGUgQVQgdGhpcyBzdG9wXCIsIHdoaWNoIG11c3QgaW5jbHVkZSB0aGF0IHN0b3AncyBvd24gY29tbWl0LiBUd29cbiAgICogZm9sZHMgb3ZlciBvbmUgbG9nIHdpdGggb3Bwb3NpdGUgY29udmVudGlvbnM6IGNoZWNrIHdoaWNoIG9uZSB5b3UgaG9sZC5cbiAgICpcbiAgICogT25lIGNsb25lIG9mIHRoZSBiYXNlIHBlciBjYWxsLCB0aGVuIGV2ZXJ5IGJ1bmRsZSByZXBsYXllZCBJTlRPIHRoYXRcbiAgICogcHJpdmF0ZSBjb3B5IChgYXBwbHlTbWFydE1lcmdlSW50b2Ag4oCUIHRoZSBsaXZlIGNvbW1pdCdzIGNvcHktb24td3JpdGUgbGF3XG4gICAqIGJlbG93IHRoZSByb290LCA5LjI5LjAsIHNvIHRoZSBmb2xkIGFuZCB0aGUgbGl2ZSBzdGF0ZSBhZ3JlZSBhdCBldmVyeVxuICAgKiBwYXRoKS4gVGhlIHJlc3VsdCBpcyB0aGUgY2FsbGVyJ3M6IGl0IHNoYXJlcyBub3RoaW5nIHdpdGggdGhlIGJhc2Ugb3JcbiAgICogdGhlIGxvZy5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgU2luY2UgOS4zMy4wIOKAlCB1c2UgYHN0YXRlQXRgIGZyb20gYGZvb3RwcmludGpzL3RyYWNlYCwgd2hpY2ggZm9sZHMgdGhlIHNhbWUgbG9nXG4gICAqIGZyb20gdGhlIHNhbWUgYmFzZSAoYFJ1bnRpbWVTbmFwc2hvdC5pbml0aWFsU3RhdGVgKSBhbmQgc2F5cyBob3cgaXQgd2FzIGRlcml2ZWQgKGBiYXNpc2ApLlxuICAgKiBOb3RoaW5nIGluIHRoZSBsaWJyYXJ5IGNhbGxzIHRoaXM7IGl0IHN0YXlzIGZvciBvbmUgbWlub3IgYW5kIGlzIHRoZW4gcmVtb3ZlZC4gTWluZCB0aGVcbiAgICogaW5kZXg6IGBtYXRlcmlhbGlzZShuKWAgZm9sZHMgY29tbWl0cyBgMC4ubi0xYCwgYHN0YXRlQXQoc291cmNlLCBuIC0gMSlgIHRoZSBzYW1lIGNvbW1pdHMuXG4gICAqL1xuICBtYXRlcmlhbGlzZShzdGVwSWR4ID0gdGhpcy5zdGVwcy5sZW5ndGgpOiBhbnkge1xuICAgIGNvbnN0IG91dCA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLmJhc2UpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RlcElkeDsgaSsrKSB7XG4gICAgICBjb25zdCB7IG92ZXJ3cml0ZSwgdXBkYXRlcywgdHJhY2UgfSA9IHRoaXMuc3RlcHNbaV07XG4gICAgICBhcHBseVNtYXJ0TWVyZ2VJbnRvKG91dCwgdXBkYXRlcyBhcyBNZW1vcnlQYXRjaCwgb3ZlcndyaXRlIGFzIE1lbW9yeVBhdGNoLCB0cmFjZSk7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICAvKipcbiAgICogUGVyc2lzdHMgYSBjb21taXQgYnVuZGxlIGZvciBhIGZpbmlzaGVkIHN0YWdlLCBhbmQgRlJFRVpFUyBpdCAoc2VlIHRoZSBtb2R1bGUgZG9jKTogdGhlIGJ1bmRsZVxuICAgKiBpcyBzdGFtcGVkIHdpdGggaXRzIHBvc2l0aW9uLCB0aGVuIGRlZXAtZnJvemVuLCB0aGVuIGFwcGVuZGVkLiBUaGUgZW5naW5lIGhhbmRzIGl0IGEgYnVuZGxlXG4gICAqIGJ1aWx0IGZvciB0aGUgbG9nIGFsb25lOyBhIGNhbGxlciBvZiB0aGlzIGNsYXNzIChgZm9vdHByaW50anMvd3JpdGVgKSBoYW5kcyBvdmVyIGEgYnVuZGxlIGl0XG4gICAqIHdpbGwgbm8gbG9uZ2VyIGVkaXQg4oCUIGl0cyBvd24gb2JqZWN0IGlzIHRoZSBvbmUgZnJvemVuLlxuICAgKi9cbiAgcmVjb3JkKGJ1bmRsZTogQ29tbWl0QnVuZGxlKTogdm9pZCB7XG4gICAgYnVuZGxlLmlkeCA9IHRoaXMuc3RlcHMubGVuZ3RoO1xuICAgIGZyZWV6ZVJlY29yZChidW5kbGUsICdpbmRpY2VzJyk7XG4gICAgdGhpcy5zdGVwcy5wdXNoKGJ1bmRsZSk7XG4gIH1cblxuICAvKipcbiAgICogRXZlcnkgcmVjb3JkZWQgY29tbWl0IGJ1bmRsZSwgQVMgU0VSVkVEICg5LjQ0LjIpOiBhIG5ldyBhcnJheSBlYWNoIGNhbGw7IGEgYnVuZGxlIGZyZWV6aW5nIHNlYWxlZFxuICAgKiB3aG9sZSBpcyB0aGUgbG9nJ3Mgb3duIChmcm96ZW4pIG9iamVjdCwgb25lIGhvbGRpbmcgYSBEYXRlLCBNYXAsIGJ1ZmZlciDigKYgaXMgYSBjb3B5IG9mIGl0cyBvcGVuXG4gICAqIHBhdGhzIChgY2FwdHVyZS9mcmVlemUudHMgwrcgc2VydmVSZWNvcmRgKSDigJQgdGhlIHJlYWRlcidzIG93biwgc28gbm8gZWRpdCByZWFjaGVzIHRoZSBsb2cuXG4gICAqL1xuICBsaXN0KCk6IENvbW1pdEJ1bmRsZVtdIHtcbiAgICByZXR1cm4gdGhpcy5zdGVwcy5tYXAoc2VydmVSZWNvcmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbCBUaGUgYnVuZGxlcyBhcyB0aGUgbG9nIGhvbGRzIHRoZW0g4oCUIGVhY2ggZnJvemVuLCBOT1Qgc2VydmVkIOKAlCBpbiBhIG5ldyBhcnJheSwgc28gYSBob2xkZXInc1xuICAgKiBgc3BsaWNlYCByZWFjaGVzIG9ubHkgaXRzIG93bi4gRm9yIHRoZSBlbmdpbmUncyBvd24gc25hcHNob3QgKGBFeGVjdXRpb25SdW50aW1lIMK3IGdldFNuYXBzaG90YCwgd2hpY2hcbiAgICogYSBzdWJmbG93IG1vdW50IHRha2VzIG9uY2UgcGVyIG1vdW50KSwgc28gdGhlIHJ1biBzZXJ2ZXMgbm90aGluZzsgYSByZWFkZXIgaXMgc2VydmVkIGJ5IGBsaXN0KClgIGFuZFxuICAgKiBgZ2V0U25hcHNob3QoKS5jb21taXRMb2dgLiBBIGtub3duIG9wZW4gZG9vciAoQ0hBTkdFTE9HIDkuNDQuMik6IGEgaG9sZGVyIG9mIHRoZXNlIGJ1bmRsZXMgY2FuIHN0aWxsXG4gICAqIGVkaXQgYSBEYXRlLCBNYXAgb3IgYnVmZmVyIGluc2lkZSB0aGVtLlxuICAgKi9cbiAgcmVjb3JkZWQoKTogQ29tbWl0QnVuZGxlW10ge1xuICAgIHJldHVybiB0aGlzLnN0ZXBzLnNsaWNlKCk7XG4gIH1cblxuICAvKiogTnVtYmVyIG9mIHJlY29yZGVkIGNvbW1pdHMuICovXG4gIGdldCBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zdGVwcy5sZW5ndGg7XG4gIH1cblxuICAvKiogSW1tdXRhYmxlIGlkZW50aXR5IG9mIHRoaXMgbG9nLCBhYnNlbnQgdW50aWwgdGhlIGVuZ2luZSBiaW5kcyBpdC4gKi9cbiAgZ2V0IGFkZHJlc3MoKTogTG9nQWRkcmVzcyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlQWRkcmVzcztcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgQmluZCBvbmNlOyByZXN1bWluZyB0aGUgc2FtZSBsb2cgbXVzdCBub3QgcmVuYW1lIGl0cyBlYXJsaWVyIHBvc2l0aW9ucy4gKi9cbiAgYmluZEFkZHJlc3MobG9nUnVuSWQ6IHN0cmluZywgZHJpbGxQYXRoOiByZWFkb25seSBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNvdXJjZUFkZHJlc3NSZXRpcmVkKSByZXR1cm47XG4gICAgdGhpcy5zb3VyY2VBZGRyZXNzID8/PSBPYmplY3QuZnJlZXplKHsgbG9nUnVuSWQsIGRyaWxsUGF0aDogT2JqZWN0LmZyZWV6ZShbLi4uZHJpbGxQYXRoXSkgfSk7XG4gIH1cblxuICAvKiogTygxKSBzb3VyY2UtdGltZSBjYXB0dXJlLiBObyBjb3VudGVyLCBvYnNlcnZlciBib29ra2VlcGluZywgb3IgZnV0dXJlIGNvbW1pdCBwcmVkaWN0aW9uLiAqL1xuICBjYXB0dXJlUG9zaXRpb24ocnVuSWQ6IHN0cmluZyk6IEVtaXRTb3VyY2VQb3NpdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnNvdXJjZUFkZHJlc3MpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoeyBydW5JZCwgLi4udGhpcy5zb3VyY2VBZGRyZXNzLCBjb21taXR0ZWRUaHJvdWdoSWR4OiB0aGlzLnN0ZXBzLmxlbmd0aCAtIDEgfSk7XG4gIH1cblxuICAvKiogV2lwZXMgaGlzdG9yeSAodXNlZnVsIGZvciB0ZXN0IHJlc2V0cykuICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuc3RlcHMgPSBbXTtcbiAgICAvLyBBIHJlc2V0IHByZWZpeCBjYW5ub3QgcmV1c2Ugb2xkIGNvb3JkaW5hdGVzLCBldmVuIGlmIGFub3RoZXIgc3RhZ2Ugb2ZcbiAgICAvLyB0aGUgU0FNRSBsZWcgYmluZHMgaXQgYWdhaW4uIEtlZXAgY2xlYXIncyBkYXRhIGJlaGF2aW9yLCBidXQgcmV0aXJlXG4gICAgLy8gYWRkcmVzc2luZyBmb3IgdGhpcyBsb2c7IGtub3duIGNvb3JkaW5hdGVzIHJlcXVpcmUgYSBmcmVzaCBFdmVudExvZy5cbiAgICB0aGlzLnNvdXJjZUFkZHJlc3MgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zb3VyY2VBZGRyZXNzUmV0aXJlZCA9IHRydWU7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -46,6 +46,8 @@ export declare function scrubPatch(patch: MemoryPatch, redactedPaths: Iterable<s
|
|
|
46
46
|
* its contract unchanged since 4.x: a fresh deep copy of `patch` (`structuredClone`) with
|
|
47
47
|
* {@link LOG_PLACEHOLDER} at every listed path that holds a defined value. Shares nothing with `patch`
|
|
48
48
|
* and never edits it. (It lived in `memory/utils.ts` until 9.33.0 and in `memory/redaction.ts` until
|
|
49
|
-
* C4; the engine's own commit path uses the clone-free {@link scrubPatch}.)
|
|
49
|
+
* C4; the engine's own commit path uses the clone-free {@link scrubPatch}.) No caller inside the
|
|
50
|
+
* library: it stays on `footprintjs/advanced` for the consumers that import it until 10.0.0 (the trace
|
|
51
|
+
* extraction, E6), which takes it off every door.
|
|
50
52
|
*/
|
|
51
53
|
export declare function redactPatch(patch: MemoryPatch, redactedSet: Set<string>): MemoryPatch;
|
|
@@ -64,9 +64,11 @@ export function scrubPatch(patch, redactedPaths) {
|
|
|
64
64
|
* its contract unchanged since 4.x: a fresh deep copy of `patch` (`structuredClone`) with
|
|
65
65
|
* {@link LOG_PLACEHOLDER} at every listed path that holds a defined value. Shares nothing with `patch`
|
|
66
66
|
* and never edits it. (It lived in `memory/utils.ts` until 9.33.0 and in `memory/redaction.ts` until
|
|
67
|
-
* C4; the engine's own commit path uses the clone-free {@link scrubPatch}.)
|
|
67
|
+
* C4; the engine's own commit path uses the clone-free {@link scrubPatch}.) No caller inside the
|
|
68
|
+
* library: it stays on `footprintjs/advanced` for the consumers that import it until 10.0.0 (the trace
|
|
69
|
+
* extraction, E6), which takes it off every door.
|
|
68
70
|
*/
|
|
69
71
|
export function redactPatch(patch, redactedSet) {
|
|
70
72
|
return scrubPatch(structuredClone(patch), redactedSet);
|
|
71
73
|
}
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NydWIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS9zY3J1Yi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0RixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUdwRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBa0IsRUFBRSxhQUErQjtJQUM1RSxJQUFJLEdBQTRCLENBQUM7SUFDakMsSUFBSSxLQUFrQyxDQUFDO0lBQ3ZDLEtBQUssTUFBTSxJQUFJLElBQUksYUFBYSxFQUFFLENBQUM7UUFDakMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixNQUFNLE9BQU8sR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDO1FBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssU0FBUztZQUFFLFNBQVM7UUFDbEYsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdEIsS0FBSyxHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7WUFDOUIsR0FBRyxHQUFHLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFnQixDQUFDO1FBQ2pELENBQUM7UUFDRCxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFNLENBQUMsQ0FBQztRQUM1QixTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsT0FBTyxHQUFHLElBQUksS0FBSyxDQUFDO0FBQ3RCLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsS0FBa0IsRUFBRSxXQUF3QjtJQUN0RSxPQUFPLFVBQVUsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDekQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogc2NydWIudHMg4oCUIHRoZSBjb21taXQgbG9nJ3Mgc2NydWI6IHRoZSBwbGFjZWhvbGRlciBhdCBldmVyeSByZWRhY3RlZCBwYXRoIG9mIGEgcGF0Y2ggKEM0LCBMMikuXG4gKlxuICogVGhlIFJFQ09SRCdzIGhhbGYgb2YgYSByZWRhY3Rpb24uIEEgcmVkYWN0ZWQgcGF0aCBpcyBEQVRBIGJ5IHRoZSB0aW1lIGl0IHJlYWNoZXMgaGVyZSDigJQgdGhlXG4gKiB0cmFuc2FjdGlvbiBidWZmZXIncyBgcmVkYWN0ZWRQYXRoc2AsIHJlZ2lzdGVyZWQgYnkgYFJlY29yZEZyYW1lIMK3IHdyaXRlYCBmcm9tIHRoZSBzY3J1YiBpdCB3YXNcbiAqIGhhbmRlZCDigJQgYW5kIHRoaXMgZmlsZSBvbmx5IHdyaXRlcyBgTE9HX1BMQUNFSE9MREVSYCAoYHBsYWNlaG9sZGVycy50c2ApIHdoZXJlIHN1Y2ggYSBwYXRoIGhvbGRzXG4gKiBhIHZhbHVlLiBJdCBuZXZlciBkZWNpZGVzIFdIQVQgaXMgc2VjcmV0OiB0aGF0IGlzIHRoZSBlbmdpbmUncyB2ZXJkaWN0IChgcmVkYWN0aW9uLnRzYCwgTDQg4oCUXG4gKiBgUmVkYWN0aW9uUnVsZWAgYW5kIHRoZSB3cml0ZSBkZWNpc2lvbiksIHdoaWNoIGFsc28gb3ducyB0aGUgT1RIRVIgcGxhY2Vob2xkZXIsIHRoZSBzY29wZSBjaGFubmVsJ3NcbiAqIGBTQ09QRV9QTEFDRUhPTERFUmAuIEJlZm9yZSBDNCBib3RoIGhhbHZlcyBsaXZlZCBpbiBgcmVkYWN0aW9uLnRzYCwgc28gdGhlIHJlY29yZCBpbXBvcnRlZCB0aGVcbiAqIGVuZ2luZSdzIHBvbGljeSBtb2R1bGUgdG8gd3JpdGUgYSBzdHJpbmcuXG4gKlxuICogVEhFIExBVzpcbiAqICAgMS4gQSBwYXRoIGlzIHNjcnViYmVkIG9ubHkgd2hlcmUgaXQgaG9sZHMgYSBERUZJTkVEIHZhbHVlIOKAlCBzY3J1YmJpbmcgbmV2ZXIgaW52ZW50cyBhIGZpZWxkLlxuICogICAyLiBQYXRocyBhcmUgc2NydWJiZWQgaW4gdGhlIHNldCdzIG9yZGVyLCBhZ2FpbnN0IHRoZSB0cmVlIGFzIHNjcnViYmVkIHNvIGZhcjogYSBwYXRoIHVuZGVyIG9uZVxuICogICAgICBhbHJlYWR5IHNjcnViYmVkIGZpbmRzIGEgc3RyaW5nLCBub3QgYSBjb250YWluZXIsIGFuZCBpcyBsZWZ0IGFsb25lLlxuICogICAzLiBUaGUgaW5wdXQgcGF0Y2ggaXMgbmV2ZXIgZWRpdGVkLiBgc2NydWJQYXRjaGAgY29waWVzIG9ubHkgdGhlIHNwaW5lIG9mIGVhY2ggc2NydWJiZWQgcGF0aFxuICogICAgICAoYW5kIG5vdGhpbmcgYXQgYWxsIHdoZW4gbm90aGluZyBpcyBzY3J1YmJlZCk7IGByZWRhY3RQYXRjaGAgaGFuZHMgYmFjayBhIGZyZXNoIGRlZXAgY29weS5cbiAqL1xuXG5pbXBvcnQgeyBuYXRpdmVHZXQsIG5hdGl2ZUhhcywgbmF0aXZlU2V0LCBvd25lZFJvb3RPZiwgb3duU3BpbmUgfSBmcm9tICcuL3BhdGhPcHMuanMnO1xuaW1wb3J0IHsgREVMSU0gfSBmcm9tICcuL3BhdGhzLmpzJztcbmltcG9ydCB7IExPR19QTEFDRUhPTERFUiB9IGZyb20gJy4vcGxhY2Vob2xkZXJzLmpzJztcbmltcG9ydCB0eXBlIHsgTWVtb3J5UGF0Y2ggfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyoqXG4gKiBUaGUgY29tbWl0IGxvZydzIHNjcnViOiBgcGF0Y2hgIHdpdGgge0BsaW5rIExPR19QTEFDRUhPTERFUn0gYXQgZXZlcnkgcGF0aCBpbiBgcmVkYWN0ZWRQYXRoc2AgdGhhdFxuICogaG9sZHMgYSBkZWZpbmVkIHZhbHVlIOKAlCB0aGUgY29weSBgcmVjb3JkQ29tbWl0YCByZWNvcmRzIGFuZCBmZWVkcyB0aGUgcmVkYWN0ZWQgbWlycm9yLlxuICpcbiAqIENMT05FLUZSRUUgKDkuMzMuMCkuIFRoZSBwYXRjaCBpcyB0aGUgdHJhbnNhY3Rpb24gYnVmZmVyJ3MgY29tbWl0LXRpbWUgcGF5bG9hZCwgYWxyZWFkeSB0aGUgcmVjb3JkJ3NcbiAqIG93biBjb3B5IChgVHJhbnNhY3Rpb25CdWZmZXIgwrcgY29tbWl0YCBjbG9uZXMgZWFjaCBzdXJ2aXZpbmcgcGF0aCBvbmNlOyB0aGUgYnVmZmVyIGlzIGRyb3BwZWQgYXRcbiAqIGNvbW1pdCksIHNvIHRoZSBzY3J1YiBjb3BpZXMgb25seSB3aGF0IGl0IG11c3Qgbm90IGVkaXQgaW4gcGxhY2U6XG4gKiAgIC0gbm8gcGF0aCB0byBzY3J1YiAobm8gcG9saWN5LCBubyBwZXItY2FsbCBtYXJrIOKAlCB0aGUgY29tbW9uIGNhc2UpIOKGkiBgcGF0Y2hgIElUU0VMRiwgbm8gY29weSBhdCBhbGw7XG4gKiAgIC0gb3RoZXJ3aXNlIOKGkiBhIG5ldyByb290IGFuZCBhIHNoYWxsb3cgY29weSBvZiBlYWNoIGNvbnRhaW5lciBvbiBhIHNjcnViYmVkIHBhdGggKGBwYXRoT3BzIMK3XG4gKiAgICAgb3duU3BpbmVgKSwgZXZlcnkgb3RoZXIgc3VidHJlZSBzaGFyZWQgd2l0aCBgcGF0Y2hgLiBgcGF0Y2hgIGlzIG5ldmVyIGVkaXRlZC5cbiAqIFRoZSBlbmdpbmUgY2FsbGVkIHRoZSBwdWJsaWMge0BsaW5rIHJlZGFjdFBhdGNofSAoYSB3aG9sZSBgc3RydWN0dXJlZENsb25lYCkgdHdpY2UgcGVyIGNvbW1pdCBiZWZvcmVcbiAqIDkuMzMuMC4gVGhlIGJ5dGVzIGFyZSB0aGUgc2FtZTogYSBzY3J1YmJlZCBwYXRoIGhvbGRzIHRoZSBwbGFjZWhvbGRlciwgZXZlcnkgb3RoZXIgcGF0aCB0aGUgdmFsdWUgdGhlXG4gKiBidWZmZXIgY2xvbmVkIChwaW5uZWQgYnkgdGhlIDkuMTguMSAvIDkuMTkuMSByZWRhY3Rpb24gYnl0ZSB0ZXN0cykuXG4gKlxuICogUGF0aHMgYXJlIHNjcnViYmVkIGluIHRoZSBzZXQncyBvcmRlciwgYWdhaW5zdCB0aGUgdHJlZSBhcyBzY3J1YmJlZCBzbyBmYXI6IGEgcGF0aCB1bmRlciBvbmUgYWxyZWFkeVxuICogc2NydWJiZWQgZmluZHMgYSBzdHJpbmcsIG5vdCBhIGNvbnRhaW5lciwgYW5kIGlzIGxlZnQgYWxvbmUgKGFzIGJlZm9yZSkuXG4gKlxuICogSU5URVJOQUwg4oCUIHRoZSByZXN1bHQgc2hhcmVzIHN0cnVjdHVyZSB3aXRoIGBwYXRjaGAuIEEgY2FsbGVyIG91dHNpZGUgdGhlIGNvbW1pdCBwYXRoIHdhbnRzXG4gKiB7QGxpbmsgcmVkYWN0UGF0Y2h9LlxuICpcbiAqIEBwYXJhbSByZWRhY3RlZFBhdGhzIERFTElNLWpvaW5lZCBwYXRocyAoYFRyYW5zYWN0aW9uQnVmZmVyYCdzIGByZWRhY3RlZFBhdGhzYDsgYSBidW5kbGUnc1xuICogICBgcmVkYWN0ZWRQYXRoc2AgYXJyYXkgd29ya3MgdG9vKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcnViUGF0Y2gocGF0Y2g6IE1lbW9yeVBhdGNoLCByZWRhY3RlZFBhdGhzOiBJdGVyYWJsZTxzdHJpbmc+KTogTWVtb3J5UGF0Y2gge1xuICBsZXQgb3V0OiBNZW1vcnlQYXRjaCB8IHVuZGVmaW5lZDtcbiAgbGV0IG93bmVkOiBXZWFrU2V0PG9iamVjdD4gfCB1bmRlZmluZWQ7XG4gIGZvciAoY29uc3QgZmxhdCBvZiByZWRhY3RlZFBhdGhzKSB7XG4gICAgY29uc3Qgc2VncyA9IGZsYXQuc3BsaXQoREVMSU0pO1xuICAgIGNvbnN0IGN1cnJlbnQgPSBvdXQgPz8gcGF0Y2g7XG4gICAgaWYgKCFuYXRpdmVIYXMoY3VycmVudCwgc2VncykgfHwgbmF0aXZlR2V0KGN1cnJlbnQsIHNlZ3MpID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuICAgIGlmIChvdXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgb3duZWQgPSBuZXcgV2Vha1NldDxvYmplY3Q+KCk7XG4gICAgICBvdXQgPSBvd25lZFJvb3RPZihwYXRjaCwgb3duZWQpIGFzIE1lbW9yeVBhdGNoO1xuICAgIH1cbiAgICBvd25TcGluZShvdXQsIHNlZ3MsIG93bmVkISk7XG4gICAgbmF0aXZlU2V0KG91dCwgc2VncywgTE9HX1BMQUNFSE9MREVSKTtcbiAgfVxuICByZXR1cm4gb3V0ID8/IHBhdGNoO1xufVxuXG4vKipcbiAqIFJlZGFjdHMgc2Vuc2l0aXZlIHZhbHVlcyBpbiBhIHBhdGNoIGZvciBsb2dnaW5nL2RlYnVnZ2luZyDigJQgdGhlIFBVQkxJQyBzY3J1YiAoYGZvb3RwcmludGpzL2FkdmFuY2VkYCksXG4gKiBpdHMgY29udHJhY3QgdW5jaGFuZ2VkIHNpbmNlIDQueDogYSBmcmVzaCBkZWVwIGNvcHkgb2YgYHBhdGNoYCAoYHN0cnVjdHVyZWRDbG9uZWApIHdpdGhcbiAqIHtAbGluayBMT0dfUExBQ0VIT0xERVJ9IGF0IGV2ZXJ5IGxpc3RlZCBwYXRoIHRoYXQgaG9sZHMgYSBkZWZpbmVkIHZhbHVlLiBTaGFyZXMgbm90aGluZyB3aXRoIGBwYXRjaGBcbiAqIGFuZCBuZXZlciBlZGl0cyBpdC4gKEl0IGxpdmVkIGluIGBtZW1vcnkvdXRpbHMudHNgIHVudGlsIDkuMzMuMCBhbmQgaW4gYG1lbW9yeS9yZWRhY3Rpb24udHNgIHVudGlsXG4gKiBDNDsgdGhlIGVuZ2luZSdzIG93biBjb21taXQgcGF0aCB1c2VzIHRoZSBjbG9uZS1mcmVlIHtAbGluayBzY3J1YlBhdGNofS4pIE5vIGNhbGxlciBpbnNpZGUgdGhlXG4gKiBsaWJyYXJ5OiBpdCBzdGF5cyBvbiBgZm9vdHByaW50anMvYWR2YW5jZWRgIGZvciB0aGUgY29uc3VtZXJzIHRoYXQgaW1wb3J0IGl0IHVudGlsIDEwLjAuMCAodGhlIHRyYWNlXG4gKiBleHRyYWN0aW9uLCBFNiksIHdoaWNoIHRha2VzIGl0IG9mZiBldmVyeSBkb29yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVkYWN0UGF0Y2gocGF0Y2g6IE1lbW9yeVBhdGNoLCByZWRhY3RlZFNldDogU2V0PHN0cmluZz4pOiBNZW1vcnlQYXRjaCB7XG4gIHJldHVybiBzY3J1YlBhdGNoKHN0cnVjdHVyZWRDbG9uZShwYXRjaCksIHJlZGFjdGVkU2V0KTtcbn1cbiJdfQ==
|
|
@@ -204,7 +204,7 @@ export declare function foldRows(out: any, updates: MemoryPatch, overwrite: Memo
|
|
|
204
204
|
* value the replay writes is its own (`set` / `append` clone the recorded
|
|
205
205
|
* value; the `merge` arm reads a detached copy of `updates`), so the result
|
|
206
206
|
* shares no container with `base`, `updates` or `overwrite`. This is the
|
|
207
|
-
* public (`footprintjs/advanced`) contract, unchanged by copy-on-write
|
|
207
|
+
* public (`footprintjs/trace`; also `/advanced` until 10.0.0) contract, unchanged by copy-on-write
|
|
208
208
|
* (9.29.0) — byte-identical to 9.28.0 for every caller. The engine's own
|
|
209
209
|
* commit does NOT come here: `SharedMemory.applyPatch` builds the next
|
|
210
210
|
* generation with `nextGeneration`, which copies only the written
|
|
@@ -288,7 +288,7 @@ export function foldRows(out, updates, overwrite, rows, discipline) {
|
|
|
288
288
|
* value the replay writes is its own (`set` / `append` clone the recorded
|
|
289
289
|
* value; the `merge` arm reads a detached copy of `updates`), so the result
|
|
290
290
|
* shares no container with `base`, `updates` or `overwrite`. This is the
|
|
291
|
-
* public (`footprintjs/advanced`) contract, unchanged by copy-on-write
|
|
291
|
+
* public (`footprintjs/trace`; also `/advanced` until 10.0.0) contract, unchanged by copy-on-write
|
|
292
292
|
* (9.29.0) — byte-identical to 9.28.0 for every caller. The engine's own
|
|
293
293
|
* commit does NOT come here: `SharedMemory.applyPatch` builds the next
|
|
294
294
|
* generation with `nextGeneration`, which copies only the written
|
|
@@ -424,4 +424,4 @@ export function foldKey(touches, segs, options = {}) {
|
|
|
424
424
|
generations.keep(kept, keptBefore, nativeGet(state, segs));
|
|
425
425
|
return nativeGet(state, segs);
|
|
426
426
|
}
|
|
427
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyYnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS92ZXJicy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFJSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM5RixPQUFPLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLFlBQVksQ0FBQztBQVFqRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxNQUFNLEdBQXNFO0lBQ2hGLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRTtJQUNqQyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7SUFDcEMsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO0lBQ3BDLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRTtDQUNyQyxDQUFDO0FBRUYsNERBQTREO0FBQzVELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBb0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBVyxDQUFDLENBQUM7QUFFbkYseUZBQXlGO0FBQ3pGLE1BQU0sVUFBVSxNQUFNLENBQUMsS0FBYztJQUNuQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzFGLENBQUM7QUFF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UUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hELGlFQUFpRTtRQUNqRSxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzdHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakIsU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxPQUFPO1lBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFDRCxJQUFJLElBQUksS0FBSyxDQUFDLENBQUM7UUFBRSxXQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzdFLE9BQU8sU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB2ZXJicy50cyDigJQgVEhFIFZFUkIgTEFXIChMMSk6IHRoZSBvbmUgcGxhY2UgYSBjb21taXQgcm93IGJlY29tZXMgYSB2YWx1ZS5cbiAqXG4gKiBBIHJvdyBvZiBhIGNvbW1pdCBidW5kbGUncyBgdHJhY2VgIGNhcnJpZXMgb25lIG9mIGZvdXIgdmVyYnMg4oCUXG4gKiBgc2V0IHwgbWVyZ2UgfCBhcHBlbmQgfCBkZWxldGVgIOKAlCBhbmQgT05FIHN0ZXAgdHVybnMgaXQgaW50byBhIHZhbHVlOlxuICoge0BsaW5rIGFwcGx5VmVyYn0uIFN0YXRlIGlzIGEgbGVmdCBmb2xkIG9mIHRoYXQgc3RlcCAodGhlIGV2ZW50LXNvdXJjaW5nXG4gKiByZWR1Y2VyKToge0BsaW5rIGZvbGRSb3dzfSBmb2xkcyBvbmUgYnVuZGxlJ3Mgcm93cyBpbnRvIGEgc3RhdGUsIGFuZFxuICoge0BsaW5rIGZvbGRLZXl9IGZvbGRzIE9ORSBLRVkgYWNyb3NzIGEgbG9nIOKAlCBldmVyeSByb3cgdW5kZXIgdGhlIGtleSdzXG4gKiB0b3AtbGV2ZWwga2V5LCByZWFkIGF0IHRoZSBrZXkgKHRoZSB2YWx1ZSBydWxlLCBga2V5UGF0aHMudHNgKS4gRXZlcnkgcmVhZGVyXG4gKiBvZiB0aGUgbG9nIHJ1bnMgb25lIG9mIHRoZSB0d28g4oCUXG4gKlxuICogICAtIHRoZSBsaXZlIGNvbW1pdCBhbmQgdGhlIHJlZGFjdGVkIG1pcnJvciAoYG5leHRHZW5lcmF0aW9uYCksXG4gKiAgIC0gdGhlIHB1YmxpYyByZXBsYXkgKGBhcHBseVNtYXJ0TWVyZ2VgKSwgdGhlIHJlYWQtc2lkZSBmb2xkc1xuICogICAgIChgYXBwbHlTbWFydE1lcmdlSW50b2Ag4oCUIGBFdmVudExvZy5tYXRlcmlhbGlzZWAsIGBzdGF0ZUF0YCkgYW5kIHRoZVxuICogICAgIGFkbWl0dGVkIHJlY29yZCdzIGNvbXBhcmlzb24gKGBkcnlGb2xkYCk6IGFsbCB7QGxpbmsgZm9sZFJvd3N9LFxuICogICAtIGBjb21taXRWYWx1ZUF0YCwgYW5kIGBhcnJheVByb3ZlbmFuY2VgIGFzIGFuIE9CU0VSVkVSIG9mIHRoZSBzYW1lIGZvbGQ6XG4gKiAgICAge0BsaW5rIGZvbGRLZXl9LlxuICpcbiAqIFRocmVlIHF1ZXN0aW9ucyB0aGF0IHVzZWQgdG8gYmUgYW5zd2VyZWQgb25jZSBwZXIgcmVhZGVyIGFyZSBhbnN3ZXJlZCBoZXJlXG4gKiBvbmNlOiB3aGF0IGEgdmVyYiBkb2VzIHRvIHRoZSB2YWx1ZSBiZWZvcmUgaXQgKHtAbGluayBhcHBseVZlcmJ9KSwgaG93IHRoZVxuICogcmVzdWx0IGlzIHBsYWNlZCAoe0BsaW5rIHBsYWNlVmVyYn0pLCBhbmQgaG93IHRoZSBsb2cncyBvd24gdmFsdWVzIGFyZVxuICogdHJlYXRlZCBvbiB0aGUgd2F5IGluICh0aGUgY2xvbmUgZGlzY2lwbGluZSDigJQgYSBQQVJBTUVURVIgb2YgdGhlIGZvbGQsIHNlZVxuICoge0BsaW5rIERpc2NpcGxpbmV9IGFuZCB7QGxpbmsgUmVjb3JkZWRQYXlsb2FkfSkuIEEgbmV3IHZlcmIgaXMgb25lIG5ldyBhcm0gb2ZcbiAqIGBhcHBseVZlcmJgIGFuZCBvbmUgcm93IG9mIHRoZSB0cmFpdHMgdGFibGU7IHRoZSBjb21waWxlciByZWZ1c2VzIGVpdGhlclxuICogbWlzc2luZyAoe0BsaW5rIGlzVG90YWx9LCB7QGxpbmsgcmVjb3Jkc1RhaWx9LCB7QGxpbmsgVkVSQlN9KS5cbiAqXG4gKiBBbiBVTktOT1dOIHZlcmIgaXMgcmVmdXNlZCB3aXRoIHtAbGluayBVbmtub3duVmVyYkVycm9yfSwgbmV2ZXIgZm9sZGVkIGFzIGFcbiAqIGBtZXJnZWAgKHRoZSBvbGQgc2lsZW50IGRlZmF1bHQpLiBFbmdpbmUtd3JpdHRlbiBsb2dzIGNhcnJ5IHRoZSBmb3VyLCBzb1xuICogZXZlcnkgZW5naW5lIHJ1biBmb2xkcyBieXRlLWZvci1ieXRlIGFzIGJlZm9yZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbW1pdElkeCB9IGZyb20gJy4uL2lkcy9ydW50aW1lU3RhZ2VJZC5qcyc7XG5pbXBvcnQgdHlwZSB7IFBhdGhSZWxhdGlvbiB9IGZyb20gJy4va2V5UGF0aHMuanMnO1xuaW1wb3J0IHsgZGVlcFNtYXJ0TWVyZ2UgfSBmcm9tICcuL21lcmdlLmpzJztcbmltcG9ydCB7IG5hdGl2ZURlbGV0ZSwgbmF0aXZlR2V0LCBuYXRpdmVTZXQsIG93biwgb3duZWRSb290T2YsIG93blNwaW5lIH0gZnJvbSAnLi9wYXRoT3BzLmpzJztcbmltcG9ydCB7IERFTElNLCBwYXRoU2VnbWVudHMgfSBmcm9tICcuL3BhdGhzLmpzJztcbmltcG9ydCB0eXBlIHsgQ29tbWl0QnVuZGxlLCBNZW1vcnlQYXRjaCwgVHJhY2VFbnRyeSB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vLyDilIDilIDilIAgVGhlIHZvY2FidWxhcnkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBBIGNvbW1pdCByb3cncyB2ZXJiIOKAlCBgVHJhY2VFbnRyeVsndmVyYiddYCwgdGhlIHVuaW9uIHRoZSB0eXBlcyBmaWxlIGRlY2xhcmVzLiAqL1xuZXhwb3J0IHR5cGUgVmVyYiA9IFRyYWNlRW50cnlbJ3ZlcmInXTtcblxuLyoqXG4gKiBUaGUgdm9jYWJ1bGFyeTogZWFjaCB2ZXJiIHdpdGggdGhlIHR3byB0cmFpdHMgcmVhZGVycyBicmFuY2ggb24sIGluIHRoZVxuICogb3JkZXIgdGhlIGNvbnRyYWN0IG5hbWVzIHRoZW0uIEEgYFJlY29yZGAgb3ZlciB0aGUgdW5pb24g4oCUIHRoZSBjb21waWxlclxuICogcmVmdXNlcyBhIHRhYmxlIHRoYXQgbWlzc2VzIChvciBpbnZlbnRzKSBhIHZlcmIsIHNvIGEgdmVyYiBjYW5ub3QgYmUgYWRkZWRcbiAqIHdpdGhvdXQgc2F5aW5nIHdoYXQgaXQgaXMuXG4gKlxuICogICBgdG90YWxgIOKAlCB0aGUgcm93IGRlY2lkZXMgdGhlIHZhbHVlIEFMT05FOyBpdCByZWFkcyBub3RoaW5nIGZyb20gd2hhdCBjYW1lXG4gKiAgICAgYmVmb3JlIGl0ICh7QGxpbmsgaXNUb3RhbH0pLlxuICogICBgdGFpbGAgIOKAlCB0aGUgcm93IHJlY29yZHMgT05MWSB3aGF0IGl0IGFkZHMsIG5vdCB0aGUgd2hvbGUgdmFsdWVcbiAqICAgICAoe0BsaW5rIHJlY29yZHNUYWlsfSkuXG4gKi9cbmNvbnN0IFRSQUlUUzogUmVjb3JkPFZlcmIsIHsgcmVhZG9ubHkgdG90YWw6IGJvb2xlYW47IHJlYWRvbmx5IHRhaWw6IGJvb2xlYW4gfT4gPSB7XG4gIHNldDogeyB0b3RhbDogdHJ1ZSwgdGFpbDogZmFsc2UgfSxcbiAgbWVyZ2U6IHsgdG90YWw6IGZhbHNlLCB0YWlsOiBmYWxzZSB9LFxuICBhcHBlbmQ6IHsgdG90YWw6IGZhbHNlLCB0YWlsOiB0cnVlIH0sXG4gIGRlbGV0ZTogeyB0b3RhbDogdHJ1ZSwgdGFpbDogZmFsc2UgfSxcbn07XG5cbi8qKiBUaGUgZm91ciB2ZXJicywgaW4gdGhlIG9yZGVyIHRoZSBjb250cmFjdCBuYW1lcyB0aGVtLiAqL1xuZXhwb3J0IGNvbnN0IFZFUkJTOiByZWFkb25seSBWZXJiW10gPSBPYmplY3QuZnJlZXplKE9iamVjdC5rZXlzKFRSQUlUUykgYXMgVmVyYltdKTtcblxuLyoqIElzIGB2YWx1ZWAgb25lIG9mIHRoZSBmb3VyPyBUaGUgcXVlc3Rpb24gZXZlcnkgcmVhZGVyIG9mIGEgZm9yZWlnbiBsb2cgYXNrcyBmaXJzdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZlcmIodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBWZXJiIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFRSQUlUUywgdmFsdWUpO1xufVxuXG4vKipcbiAqIERvZXMgdGhlIHZlcmIgZGVjaWRlIHRoZSB2YWx1ZSBBTE9ORSDigJQgcmVhZCBub3RoaW5nIGZyb20gd2hhdCBjYW1lIGJlZm9yZVxuICogaXQ/IGBzZXRgIGFuZCBgZGVsZXRlYC4gQSByZWFkZXIgdGhhdCBvbmx5IG5lZWRzIHRoZSBmaW5hbCB2YWx1ZSBtYXkgc3RhcnRcbiAqIGF0IHRoZSBsYXN0IHN1Y2ggcm93ICh7QGxpbmsgZm9sZEtleX0gYGFuY2hvcmVkYCk7IG9uZSB0aGF0IHRyYWNrcyBob3cgdGhlXG4gKiB2YWx1ZSBncmV3IChwcm92ZW5hbmNlKSBzdGFydHMgYXQgdGhlIGZpcnN0LiBQaW5uZWQgYWdhaW5zdFxuICoge0BsaW5rIGFwcGx5VmVyYn0gaXRzZWxmLCBzbyBhIG5ldyB2ZXJiIGNhbm5vdCBtaXNyZXBvcnQgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RvdGFsKHZlcmI6IFZlcmIpOiBib29sZWFuIHtcbiAgcmV0dXJuIFRSQUlUU1t2ZXJiXS50b3RhbDtcbn1cblxuLyoqXG4gKiBEb2VzIHRoZSByb3cgcmVjb3JkIE9OTFkgd2hhdCBpdCBhZGRzIOKAlCBhIHRhaWwg4oCUIHJhdGhlciB0aGFuIHRoZSB3aG9sZVxuICogdmFsdWU/IGBhcHBlbmRgLiBXaGF0IHRoZSByb3cgYWRkZWQgaXMgdGhlbiBrbm93biBleGFjdGx5OiBhIHJlYWRlciB0aGF0XG4gKiB0cmFja3Mgd2hlcmUgYXJyYXkgZWxlbWVudHMgY2FtZSBmcm9tIGF0dHJpYnV0ZXMgdGhlbSB0byB0aGlzIHJvdyB3aXRob3V0XG4gKiBjb21wYXJpbmcgYXJyYXlzLCB3aGVyZSBldmVyeSBvdGhlciB2ZXJiIGhhcyB0byBiZSBpbmZlcnJlZCBmcm9tLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVjb3Jkc1RhaWwodmVyYjogVmVyYik6IGJvb2xlYW4ge1xuICByZXR1cm4gVFJBSVRTW3ZlcmJdLnRhaWw7XG59XG5cbi8qKiBXaGVyZSBpbiBhIGxvZyBhIHJlZnVzZWQgcm93IHNpdHMuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvd1NpdGUge1xuICAvKiogVGhlIHJvdydzIGBwYXRoYCwgREVMSU0tam9pbmVkIGFzIHRoZSB0cmFjZSByZWNvcmRzIGl0LiAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG4gIC8qKiBUaGUgcm93J3MgcG9zaXRpb24gaW4gaXRzIGJ1bmRsZSdzIGB0cmFjZWAuICovXG4gIHJlYWRvbmx5IHJvdzogbnVtYmVyO1xuICAvKiogVGhlIGJ1bmRsZSdzIHBvc2l0aW9uIGluIHRoZSBjb21taXQgbG9nLCB3aGVuIHRoZSByZWFkZXIga25vd3MgaXQuICovXG4gIHJlYWRvbmx5IGNvbW1pdD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaHJvd24gYnkgdGhlIHJlYWRlcnMgb2YgYSBjb21taXQgbG9nIOKAlCB7QGxpbmsgZm9sZFJvd3N9IChiZWhpbmRcbiAqIGBhcHBseVNtYXJ0TWVyZ2VgKSwgYGNvbW1pdFZhbHVlQXRgLCBgYXJyYXlQcm92ZW5hbmNlYCDigJQgd2hlbiBhIHJvdyBjYXJyaWVzIGFcbiAqIHZlcmIgb3V0c2lkZSB7QGxpbmsgVkVSQlN9OiBhIGZvcmVpZ24gb3IgY29ycnVwdGVkIGxvZyBmYWlscyBsb3VkbHkgaW5zdGVhZFxuICogb2YgYmVpbmcgcmVwbGF5ZWQgYXMgYSBgbWVyZ2VgLiBgdmVyYmAsIGBwYXRoYCwgYHJvd2AgYW5kIGBjb21taXRgIG5hbWUgdGhlXG4gKiByb3cgKGBwYXRoYCAvIGByb3dgIC8gYGNvbW1pdGAgYXJlIGFic2VudCB3aGVuIHRoZSBjYWxsZXIgaGFuZGVkIG92ZXIgYVxuICogYmFyZSB2ZXJiKTsgYHBhdGhgIGlzIHRoZSB0cmFjZSdzIG93biBERUxJTS1qb2luZWQgZm9ybSDigJQgdGFrZSBpdCBhcGFydCB3aXRoXG4gKiBgcGF0aFNlZ21lbnRzYC4gVGhlIG1lc3NhZ2UgcXVvdGVzIGB2ZXJiYCBhbmQgYHBhdGhgLCBzbyBhIGhvc3RpbGUgbG9nIGNhbm5vdFxuICogcmVzaGFwZSBpdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFVua25vd25WZXJiRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IHZlcmI6IHVua25vd247XG4gIHJlYWRvbmx5IHBhdGg/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJvdz86IG51bWJlcjtcbiAgcmVhZG9ubHkgY29tbWl0PzogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHZlcmI6IHVua25vd24sIHNpdGU/OiBSb3dTaXRlKSB7XG4gICAgY29uc3QgbmFtZWQgPVxuICAgICAgdHlwZW9mIHZlcmIgPT09ICdzdHJpbmcnID8gSlNPTi5zdHJpbmdpZnkodmVyYikgOiB2ZXJiID09PSB1bmRlZmluZWQgPyAndW5kZWZpbmVkJyA6IGBvZiB0eXBlICR7dHlwZW9mIHZlcmJ9YDtcbiAgICAvLyBUaGUgdmVyYiBhbmQgdGhlIHBhdGggY29tZSBmcm9tIGEgbG9nIG5vYm9keSB2ZXR0ZWQ6IHF1b3RlZCAoSlNPTiksIHNvIGFcbiAgICAvLyBjb250cm9sIGNoYXJhY3RlciBpbiBlaXRoZXIgY2Fubm90IHJlc2hhcGUgdGhlIG1lc3NhZ2UuXG4gICAgY29uc3Qgd2hlcmUgPVxuICAgICAgc2l0ZSA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gJydcbiAgICAgICAgOiBgIG9uIHRyYWNlIHJvdyAke3NpdGUucm93fSAocGF0aCAke0pTT04uc3RyaW5naWZ5KHBhdGhTZWdtZW50cyhzaXRlLnBhdGgpLmpvaW4oJyDigLogJykpfSR7XG4gICAgICAgICAgICBzaXRlLmNvbW1pdCA9PT0gdW5kZWZpbmVkID8gJycgOiBgLCBjb21taXQgJHtzaXRlLmNvbW1pdH1gXG4gICAgICAgICAgfSlgO1xuICAgIGNvbnN0IG9uZSA9IFZFUkJTLmpvaW4oJyB8ICcpO1xuICAgIHN1cGVyKGB1bmtub3duIHZlcmIgJHtuYW1lZH0ke3doZXJlfTogYSBjb21taXQgcm93IGlzIG9uZSBvZiAke29uZX0g4oCUIHRoZSBsb2cgaXMgcmVmdXNlZCwgbm90IHJlcGxheWVkIGFzIGEgbWVyZ2VgKTtcbiAgICB0aGlzLm5hbWUgPSAnVW5rbm93blZlcmJFcnJvcic7XG4gICAgdGhpcy52ZXJiID0gdmVyYjtcbiAgICBpZiAoc2l0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnBhdGggPSBzaXRlLnBhdGg7XG4gICAgICB0aGlzLnJvdyA9IHNpdGUucm93O1xuICAgICAgaWYgKHNpdGUuY29tbWl0ICE9PSB1bmRlZmluZWQpIHRoaXMuY29tbWl0ID0gc2l0ZS5jb21taXQ7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlZnVzZVZlcmIodmVyYjogbmV2ZXIpOiBuZXZlciB7XG4gIHRocm93IG5ldyBVbmtub3duVmVyYkVycm9yKHZlcmIpO1xufVxuXG4vLyDilIDilIDilIAgVGhlIHN0ZXAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogV2hhdCBhIGBkZWxldGVgIHJvdyBsZWF2ZXMgYmVoaW5kOiB0aGUgS0VZIElTIEdPTkUg4oCUIHdoaWNoIGlzIG5vdCB0aGUgdmFsdWVcbiAqIGB1bmRlZmluZWRgIChhIHJvb3QgcmVwbGF5IHJlbW92ZXMgdGhlIGtleTsgYSBwZXItcGF0aCBmb2xkIHJlYWRzIGl0IGFzXG4gKiBgdW5kZWZpbmVkYCkuIHtAbGluayBhcHBseVZlcmJ9IHJldHVybnMgaXQsIHtAbGluayBwbGFjZVZlcmJ9IGFjdHMgb24gaXQuXG4gKi9cbmV4cG9ydCBjb25zdCBBQlNFTlQ6IHVuaXF1ZSBzeW1ib2wgPSBTeW1ib2woJ2Zvb3RwcmludGpzLnZlcmJzLmFic2VudCcpO1xuXG4vKipcbiAqIE9uZSBidW5kbGUncyByZWNvcmRlZCBwYXlsb2FkLCByZWFkIGJ5IHBhdGggdW5kZXIgYSBjbG9uZSBkaXNjaXBsaW5lIOKAlCB0aGVcbiAqIHZhbHVlcyB7QGxpbmsgYXBwbHlWZXJifSByZWFkcyBvdXQgb2YgdGhlIGxvZy5cbiAqXG4gKiBgZGV0YWNoYCDigJQgYHRydWVgIGZvciBldmVyeSBmb2xkIHRoYXQga2VlcHMgaXRzIHJlc3VsdDogYSBgc2V0YCB2YWx1ZSBvciBhblxuICogYGFwcGVuZGAgdGFpbCBpcyBhIGNsb25lIG9mIHdoYXQgdGhlIGxvZyBob2xkcyBhbmQgdGhlIG1lcmdlIGRlbHRhIGNvbWVzIGZyb21cbiAqIE9ORSBkZXRhY2hlZCBjb3B5IG9mIGB1cGRhdGVzYCwgc28gdGhlIHJlc3VsdCBuZXZlciBhbGlhc2VzIHRoZSBsb2cuIGBmYWxzZWBcbiAqIG9ubHkgZm9yIHRoZSBjb21wYXJpc29uIGZvbGQgKHtAbGluayBkcnlGb2xkfSksIHdoaWNoIHBsYWNlcyByZWNvcmRlZCB2YWx1ZXNcbiAqIGFzIHJlY29yZGVkIGFuZCBkcm9wcyBpdHMgcmVzdWx0LlxuICpcbiAqIFRoZSBkZWx0YSBpcyBkZXRhY2hlZCBPTkNFIHBlciBidW5kbGUsIGxhemlseSDigJQgYSBidW5kbGUgd2l0aCBubyBgbWVyZ2VgIHJvd1xuICogcGF5cyBub3RoaW5nLiBgZGVlcFNtYXJ0TWVyZ2VgIGRlZHVwcyBhbiBhcnJheSB1bmlvbiBCWSBSRUZFUkVOQ0UgYW5kIHR3b1xuICogYG1lcmdlYCByb3dzIG9mIG9uZSBidW5kbGUgcmVwbGF5IHRoZSBzYW1lIGFjY3VtdWxhdGVkIGRlbHRhLCBzbyB0aGUgcm93c1xuICogbXVzdCBrZWVwIHNlZWluZyB0aGUgc2FtZSBvYmplY3RzOyBhIGNsb25lIHBlciByb3cgZHVwbGljYXRlZCB0aGVpciBlbGVtZW50c1xuICogKHRoZSBkaWZmZXJlbnRpYWwgY2F1Z2h0IGl0IGluIHRoZSByZXBsYXk7IGBjb21taXRWYWx1ZUF0YCBjYXJyaWVkIHRoZSBidWdcbiAqIHVudGlsIGl0IGZvbGRlZCB0aHJvdWdoIGhlcmUpLiBgb25seWAgbmFycm93cyB0aGUgY29weSB0byBPTkUgcGF0aCDigJQgYVxuICogcGVyLXBhdGggZm9sZCByZWFkcyBub3RoaW5nIGVsc2UsIGFuZCBtdXN0IG5vdCBwYXkgZm9yIHRoZSByZXN0IG9mIHRoZVxuICogYnVuZGxlLlxuICovXG5leHBvcnQgY2xhc3MgUmVjb3JkZWRQYXlsb2FkIHtcbiAgcHJpdmF0ZSBkZWx0YXM6IE1lbW9yeVBhdGNoIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdXBkYXRlczogTWVtb3J5UGF0Y2gsXG4gICAgcHJpdmF0ZSByZWFkb25seSBvdmVyd3JpdGU6IE1lbW9yeVBhdGNoLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGV0YWNoOiBib29sZWFuLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb25seT86IHN0cmluZ1tdLFxuICApIHt9XG5cbiAgLyoqIFdoYXQgYSBgc2V0YCBwbGFjZXMgYW5kIGFuIGBhcHBlbmRgIGFkZHM6IGBvdmVyd3JpdGVbcGF0aF1gLCBjbG9uZWQgd2hlbiBkZXRhY2hpbmcuICovXG4gIHZhbHVlKHNlZ3M6IHN0cmluZ1tdKTogdW5rbm93biB7XG4gICAgY29uc3QgcmVjb3JkZWQgPSBuYXRpdmVHZXQodGhpcy5vdmVyd3JpdGUsIHNlZ3MpO1xuICAgIHJldHVybiB0aGlzLmRldGFjaCA/IHN0cnVjdHVyZWRDbG9uZShyZWNvcmRlZCkgOiByZWNvcmRlZDtcbiAgfVxuXG4gIC8qKiBUaGUgYWNjdW11bGF0ZWQgbWVyZ2UgZGVsdGEgYXQgYHBhdGhgOiBgdXBkYXRlc1twYXRoXWAsIGZyb20gdGhlIGJ1bmRsZSdzIG9uZSBjb3B5LiAqL1xuICBkZWx0YShzZWdzOiBzdHJpbmdbXSk6IHVua25vd24ge1xuICAgIGlmICh0aGlzLmRlbHRhcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBzb3VyY2UgPSB0aGlzLm9ubHkgPT09IHVuZGVmaW5lZCA/IHRoaXMudXBkYXRlcyA6IGF0UGF0aCh0aGlzLnVwZGF0ZXMsIHRoaXMub25seSk7XG4gICAgICB0aGlzLmRlbHRhcyA9IHRoaXMuZGV0YWNoID8gc3RydWN0dXJlZENsb25lKHNvdXJjZSkgOiBzb3VyY2U7XG4gICAgfVxuICAgIHJldHVybiBuYXRpdmVHZXQodGhpcy5kZWx0YXMsIHNlZ3MpO1xuICB9XG59XG5cbi8qKiBgdHJlZWAgcmVkdWNlZCB0byBPTkUgcGF0aDogdGhhdCBzdWItdHJlZSwgYnkgcmVmZXJlbmNlLCB1bmRlciBmcmVzaCBjb250YWluZXJzLiAqL1xuZnVuY3Rpb24gYXRQYXRoKHRyZWU6IE1lbW9yeVBhdGNoLCBzZWdzOiBzdHJpbmdbXSk6IE1lbW9yeVBhdGNoIHtcbiAgY29uc3QgbGVhZiA9IG5hdGl2ZUdldCh0cmVlLCBzZWdzKTtcbiAgcmV0dXJuIGxlYWYgPT09IHVuZGVmaW5lZCA/IHt9IDogbmF0aXZlU2V0KHt9LCBzZWdzLCBsZWFmKTtcbn1cblxuLyoqXG4gKiBPTkUgcm93LCBPTkUgc3RlcDogdGhlIHZhbHVlIGF0IHRoZSByb3cncyBwYXRoIEFGVEVSIHRoZSByb3csIGdpdmVuIHRoZVxuICogdmFsdWUgQkVGT1JFIGl0IGFuZCB0aGUgYnVuZGxlJ3MgcmVjb3JkZWQgcGF5bG9hZC4gVEhFIHZlcmIgbGF3IOKAlCBubyBvdGhlclxuICogZnVuY3Rpb24gaW4gdGhlIGxpYnJhcnkgaGFzIGFuIGFybSBwZXIgdmVyYi5cbiAqXG4gKiAgIC0gYCdzZXQnYCAgICDigJQgdGhlIHJlY29yZGVkIHZhbHVlIChgb3ZlcndyaXRlW3BhdGhdYCwgdGhlIGZ1bGwgZmluYWwgdmFsdWUpLlxuICogICAtIGAnbWVyZ2UnYCAg4oCUIGBkZWVwU21hcnRNZXJnZWAgb2YgdGhlIGFjY3VtdWxhdGVkIGB1cGRhdGVzW3BhdGhdYCBkZWx0YSBvbnRvXG4gKiAgICAgdGhlIHZhbHVlIGJlZm9yZS5cbiAqICAgLSBgJ2FwcGVuZCdgIOKAlCAoZGVsdGEgbW9kZSkgYG92ZXJ3cml0ZVtwYXRoXWAgaG9sZHMgT05MWSB0aGUgdGFpbDogY29uY2F0ZW5hdGVcbiAqICAgICBpdCBvbnRvIHRoZSB2YWx1ZSBiZWZvcmUuIFdoZW4gZWl0aGVyIGlzIG5vdCBhbiBhcnJheSAoYW4gb3V0LW9mLW9yZGVyXG4gKiAgICAgcmVwbGF5IGJhc2UsIG9yIGEgUkVEQUNURUQgdGFpbCDigJQgYHNjcnViUGF0Y2hgIHJlcGxhY2VzIG1hdGNoZWQgcGF5bG9hZHNcbiAqICAgICB3aXRoIHRoZSBgJ1JFREFDVEVEJ2Agc3RyaW5nKSB0aGUgdGFpbCBCRUNPTUVTIHRoZSB2YWx1ZSDigJQgdGhlIHNhbWVcbiAqICAgICB0ZXJtaW5hbCB2YWx1ZSBhIHJlZGFjdGVkIG9yIGNvcnJ1cHQgYHNldGAgcHJvZHVjZXMuXG4gKiAgIC0gYCdkZWxldGUnYCDigJQge0BsaW5rIEFCU0VOVH06IHRoZSBrZXkgaXMgcmVtb3ZlZC4gVGhlIHBhdGggc3RheXMgZW51bWVyYXRlZFxuICogICAgIGluIGBvdmVyd3JpdGVgICh2YWx1ZSBgdW5kZWZpbmVkYCkgZm9yIGtleS1zZXQgY29uc3VtZXJzOyB0aGUgc3RlcCBpZ25vcmVzXG4gKiAgICAgdGhhdCB2YWx1ZS5cbiAqXG4gKiBQdXJlOiBpdCByZWFkcyB0aGUgcGF5bG9hZCBhbmQgbmV2ZXIgd3JpdGVzLiBgdmVyYmAgbXVzdCBiZSBhIHtAbGluayBWZXJifVxuICogKHRoZSBmb2xkcyBjaGVjayB3aXRoIHtAbGluayBpc1ZlcmJ9IGZpcnN0IGFuZCBuYW1lIHRoZSByb3cpOyBhbnl0aGluZyBlbHNlXG4gKiB0aGF0IHJlYWNoZXMgaXQgaXMgcmVmdXNlZCB3aXRoIHtAbGluayBVbmtub3duVmVyYkVycm9yfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5VmVyYih2ZXJiOiBWZXJiLCBiZWZvcmU6IHVua25vd24sIGF0OiBSZWNvcmRlZFBheWxvYWQsIHNlZ3M6IHN0cmluZ1tdKTogdW5rbm93biB7XG4gIGlmICh2ZXJiID09PSAnc2V0JykgcmV0dXJuIGF0LnZhbHVlKHNlZ3MpO1xuICBpZiAodmVyYiA9PT0gJ2FwcGVuZCcpIHtcbiAgICBjb25zdCB0YWlsID0gYXQudmFsdWUoc2Vncyk7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYmVmb3JlKSAmJiBBcnJheS5pc0FycmF5KHRhaWwpID8gWy4uLmJlZm9yZSwgLi4udGFpbF0gOiB0YWlsO1xuICB9XG4gIGlmICh2ZXJiID09PSAnZGVsZXRlJykgcmV0dXJuIEFCU0VOVDtcbiAgaWYgKHZlcmIgPT09ICdtZXJnZScpIHJldHVybiBkZWVwU21hcnRNZXJnZShiZWZvcmUsIGF0LmRlbHRhKHNlZ3MpKTtcbiAgcmV0dXJuIHJlZnVzZVZlcmIodmVyYik7IC8vIGB2ZXJiYCBpcyBgbmV2ZXJgIGhlcmUg4oCUIGEgZmlmdGggdmVyYiBpbiB0aGUgdW5pb24gc3RvcHMgY29tcGlsaW5nXG59XG5cbi8qKiBQdXQgYSBzdGVwJ3MgdmFsdWUgYXQgaXRzIHBhdGggaW4gYG91dGAg4oCUIG9yIHJlbW92ZSB0aGUga2V5LCBmb3Ige0BsaW5rIEFCU0VOVH0uICovXG5leHBvcnQgZnVuY3Rpb24gcGxhY2VWZXJiKG91dDogYW55LCBzZWdzOiBzdHJpbmdbXSwgbmV4dDogdW5rbm93bik6IHZvaWQge1xuICBpZiAobmV4dCA9PT0gQUJTRU5UKSBuYXRpdmVEZWxldGUob3V0LCBzZWdzKTtcbiAgZWxzZSBuYXRpdmVTZXQob3V0LCBzZWdzLCBuZXh0KTtcbn1cblxuLyoqXG4gKiBJcyByb3cgYGlgIGEgYHNldGAgdGhhdCB0aGUgTkVYVCByb3cgc2V0cyBhZ2FpbiDigJQgc2FtZSBwYXRoLCBzYW1lIHZlcmIg4oCUIHNvXG4gKiB0aGF0IGFwcGx5aW5nIGl0IGlzIHdvcmsgdGhlIG5leHQgcm93IHJlZG9lcz9cbiAqXG4gKiBUaGUgb25lIHNraXAgZXZlcnkgcmVwbGF5IGl0ZXJhdG9yIHNoYXJlcyAoOS4yMi4xKS4gQSBgc2V0YCByb3cgd3JpdGVzIGFcbiAqIGNsb25lIG9mIHRoZSByZWNvcmRlZCB2YWx1ZSBhdCBpdHMgcGF0aDsgdGhlIG5leHQgcm93LCBhIGBzZXRgIG9mIHRoZSBzYW1lXG4gKiBwYXRoLCB3cml0ZXMgYSBjbG9uZSBvZiB0aGUgU0FNRSByZWNvcmRlZCB2YWx1ZSBvdmVyIGl0ICh0aGUgYnVuZGxlJ3MgcGF0Y2hcbiAqIHRyZWUgaXMgZml4ZWQpLCBhbmQgbm90aGluZyBydW5zIGluIGJldHdlZW4g4oCUIHNvIHRoZSBmaXJzdCB3cml0ZSBpc1xuICogdW5vYnNlcnZhYmxlLCBjb250YWluZXIgY3JlYXRpb24gYW5kIGtleSBvcmRlciBpbmNsdWRlZC4gT25seSBDT05TRUNVVElWRVxuICogcm93cyBxdWFsaWZ5OiBhIHJvdyBpbiBiZXR3ZWVuIChhbiBhbmNlc3RvciBgbWVyZ2VgLCBhIHNpYmxpbmcgYHNldGAgdGhhdFxuICogY3JlYXRlcyBhIGNvbnRhaW5lcikgY2FuIHNlZSB0aGUgaW50ZXJtZWRpYXRlIHZhbHVlLCBhbmQgYSBgbWVyZ2VgLFxuICogYGFwcGVuZGAgb3IgYGRlbGV0ZWAgbmV4dCByb3cgZGVwZW5kcyBvbiB3aGF0IGlzIHRoZXJlLiBSb3dzIGFyZSBuZXZlclxuICogZHJvcHBlZCBmcm9tIHRoZSBsb2cg4oCUIHRoZSA5LjIyLjAgZWxlbWVudC13cml0ZSBmdW5uZWwgcmVjb3JkcyBOXG4gKiB3aG9sZS1hcnJheSBgc2V0YCByb3dzIG9uIG9uZSBwYXRoLCBhbmQgdGhpcyBpcyB3aGF0IG1ha2VzIHJlcGxheWluZyB0aGVtXG4gKiBPKE4pIGluc3RlYWQgb2YgTyhOIMOXIHJvd3MpLlxuICpcbiAqIEFza2VkIGJ5IHtAbGluayBmb2xkUm93c30g4oCUIGxpdmUgc3RhdGUgYW5kIHRoZSByZWRhY3RlZCBtaXJyb3IgdGhyb3VnaFxuICoge0BsaW5rIG5leHRHZW5lcmF0aW9ufSwgYEV2ZW50TG9nLm1hdGVyaWFsaXNlYCBhbmQgYHN0YXRlQXRgIHRocm91Z2hcbiAqIHtAbGluayBhcHBseVNtYXJ0TWVyZ2VJbnRvfSwgdGhlIHB1YmxpYyB7QGxpbmsgYXBwbHlTbWFydE1lcmdlfSwgYW5kIHRoZVxuICogYWRtaXR0ZWQgcmVjb3JkJ3Mge0BsaW5rIGRyeUZvbGR9LiB7QGxpbmsgZm9sZEtleX0gbmVlZHMgbm8gc2tpcDogaXRcbiAqIGFuY2hvcnMgYXQgdGhlIHRvcC1sZXZlbCBrZXkncyBMQVNUIGBzZXRgL2BkZWxldGVgLCBvciAocHJvdmVuYW5jZSkgYVxuICogcmVwZWF0ZWQgYHNldGAgb2YgdGhlIG9uZSByZWNvcmRlZCB2YWx1ZSBjaGFuZ2VzIG5vIGJpcnRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJzZWRlZEJ5TmV4dFNldChyb3dzOiByZWFkb25seSB7IHBhdGg6IHN0cmluZzsgdmVyYjogc3RyaW5nIH1bXSwgaTogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGNvbnN0IHJvdyA9IHJvd3NbaV07XG4gIGlmIChyb3cudmVyYiAhPT0gJ3NldCcpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgbmV4dCA9IHJvd3NbaSArIDFdO1xuICByZXR1cm4gbmV4dCAhPT0gdW5kZWZpbmVkICYmIG5leHQudmVyYiA9PT0gJ3NldCcgJiYgbmV4dC5wYXRoID09PSByb3cucGF0aDtcbn1cblxuLy8g4pSA4pSA4pSAIFRoZSBmb2xkIG92ZXIgb25lIGJ1bmRsZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBIb3cge0BsaW5rIGZvbGRSb3dzfSB0cmVhdHMgdGhlIHN0YXRlIGl0IGVkaXRzIGFuZCB0aGUgdmFsdWVzIGl0IHJlYWRzIG91dCBvZlxuICogdGhlIGxvZyDigJQgdGhlIGNsb25lIGRpc2NpcGxpbmUsIGEgcGFyYW1ldGVyIG9mIHRoZSBPTkUgbG9vcDpcbiAqXG4gKiAgIC0gYCdwcml2YXRlJ2Ag4oCUIGBvdXRgIGlzIGEgcHJpdmF0ZSBkZWVwIGNsb25lLCBlZGl0ZWQgaW4gcGxhY2U7IGV2ZXJ5XG4gKiAgICAgcmVjb3JkZWQgdmFsdWUgaXMgY2xvbmVkIGluLiBUaGUgcHVibGljIHtAbGluayBhcHBseVNtYXJ0TWVyZ2V9LlxuICogICAtIGAncGF0aENvcHknYCDigJQgY29weS1vbi13cml0ZSAoOS4yOS4wKTogYmVmb3JlIGEgcm93IHRoYXQgd3JpdGVzIFRIUk9VR0ggYVxuICogICAgIGNvbnRhaW5lciAoYSBuZXN0ZWQgcGF0aCksIHRoZSBjb250YWluZXJzIG9uIGl0cyBwYXRoIHRoYXQgdGhpcyBmb2xkIGRpZFxuICogICAgIG5vdCBjcmVhdGUgYXJlIGNvcGllZCwgc28gbm8gcm93IGVkaXRzIGEgY29udGFpbmVyIGFub3RoZXIgZ2VuZXJhdGlvblxuICogICAgIChvciB0aGUgbG9nKSBob2xkczsgZWFjaCB2YWx1ZSBhIHJvdyBjcmVhdGVzIGlzIG1hcmtlZCBvd25lZCwgc28gbGF0ZXJcbiAqICAgICByb3dzIG9mIHRoZSBidW5kbGUgd3JpdGUgaW50byBpdCBpbiBwbGFjZS4gRXZlcnkgcmVjb3JkZWQgdmFsdWUgaXMgY2xvbmVkXG4gKiAgICAgaW4uIFRoZSBsaXZlIGNvbW1pdCAoe0BsaW5rIG5leHRHZW5lcmF0aW9ufSkgYW5kIHRoZSByZWFkLXNpZGUgZm9sZHNcbiAqICAgICAoe0BsaW5rIGFwcGx5U21hcnRNZXJnZUludG99KS5cbiAqICAgLSBgJ2J5UmVmZXJlbmNlJ2Ag4oCUIGAncGF0aENvcHknYCwgYnV0IHJlY29yZGVkIHZhbHVlcyBhcmUgcGxhY2VkIEFTXG4gKiAgICAgUkVDT1JERUQgKG5vIGNsb25lKSBhbmQgbmV2ZXIgbWFya2VkIG93bmVkIOKAlCBhIGxhdGVyIHJvdyB0aGF0IHdyaXRlc1xuICogICAgIHRocm91Z2ggb25lIGNvcGllcyBpdCBmaXJzdCwgc28gdGhlIHBheWxvYWQgaXMgbmV2ZXIgZWRpdGVkLiBGb3JcbiAqICAgICBDT01QQVJJU09OIG9ubHkgKHtAbGluayBkcnlGb2xkfSk6IHRoZSByZXN1bHQgYWxpYXNlcyB0aGUgbG9nLlxuICovXG5leHBvcnQgdHlwZSBEaXNjaXBsaW5lID0gJ3ByaXZhdGUnIHwgJ3BhdGhDb3B5JyB8ICdieVJlZmVyZW5jZSc7XG5cbi8qKiBEb2VzIGFueSByb3cgd3JpdGUgVEhST1VHSCBhIGNvbnRhaW5lciAoYSBkZWxpbWl0ZWQsIG5lc3RlZCBwYXRoKT8gKi9cbmZ1bmN0aW9uIGhhc05lc3RlZFJvdyhyb3dzOiByZWFkb25seSBUcmFjZUVudHJ5W10pOiBib29sZWFuIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSBpZiAocm93c1tpXS5wYXRoLmluZGV4T2YoREVMSU0pICE9PSAtMSkgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBGb2xkIG9uZSBidW5kbGUncyByb3dzIGludG8gYG91dGAsIGluIHBsYWNlOiBmb3IgZWFjaCByb3cgKGEgYHNldGAgdGhlIG5leHRcbiAqIHJvdyBzZXRzIGFnYWluIGlzIHNraXBwZWQg4oCUIHtAbGluayBzdXBlcnNlZGVkQnlOZXh0U2V0fSkgdGFrZSB0aGUgc3RlcFxuICogKHtAbGluayBhcHBseVZlcmJ9KSBhbmQgcHV0IGl0cyB2YWx1ZSB3aGVyZSBpdCBiZWxvbmdzICh7QGxpbmsgcGxhY2VWZXJifSkuXG4gKiBgb3V0YCBpcyB0aGUgY2FsbGVyJ3Mg4oCUIHNlZSB7QGxpbmsgRGlzY2lwbGluZX0gZm9yIHdoYXQgaXQgbXVzdCBiZS5cbiAqXG4gKiBBIHJvdyB3aG9zZSB2ZXJiIGlzIG5vdCBvbmUgb2Yge0BsaW5rIFZFUkJTfSBzdG9wcyB0aGUgZm9sZCB3aXRoXG4gKiB7QGxpbmsgVW5rbm93blZlcmJFcnJvcn0gbmFtaW5nIHRoZSByb3c7IHRoZSByb3dzIGJlZm9yZSBpdCBoYXZlIGJlZW5cbiAqIGFwcGxpZWQsIHRvIGEgc3RhdGUgdGhlIGNhbGxlciBkaXNjYXJkcyAoZXZlcnkgaW4tdHJlZSBjYWxsZXIgZG9lcykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb2xkUm93cyhcbiAgb3V0OiBhbnksXG4gIHVwZGF0ZXM6IE1lbW9yeVBhdGNoLFxuICBvdmVyd3JpdGU6IE1lbW9yeVBhdGNoLFxuICByb3dzOiByZWFkb25seSBUcmFjZUVudHJ5W10sXG4gIGRpc2NpcGxpbmU6IERpc2NpcGxpbmUsXG4pOiBhbnkge1xuICBjb25zdCBkZXRhY2ggPSBkaXNjaXBsaW5lICE9PSAnYnlSZWZlcmVuY2UnO1xuICBjb25zdCBvd25lZCA9IGRpc2NpcGxpbmUgIT09ICdwcml2YXRlJyAmJiBoYXNOZXN0ZWRSb3cocm93cykgPyBuZXcgV2Vha1NldDxvYmplY3Q+KCkgOiB1bmRlZmluZWQ7XG4gIG93bihvdXQsIG93bmVkKTtcbiAgY29uc3QgYXQgPSBuZXcgUmVjb3JkZWRQYXlsb2FkKHVwZGF0ZXMsIG92ZXJ3cml0ZSwgZGV0YWNoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN1cGVyc2VkZWRCeU5leHRTZXQocm93cywgaSkpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHsgcGF0aCwgdmVyYiB9ID0gcm93c1tpXTtcbiAgICBpZiAoIWlzVmVyYih2ZXJiKSkgdGhyb3cgbmV3IFVua25vd25WZXJiRXJyb3IodmVyYiwgeyBwYXRoLCByb3c6IGkgfSk7XG4gICAgY29uc3Qgc2VncyA9IHBhdGguc3BsaXQoREVMSU0pO1xuICAgIGlmIChvd25lZCAhPT0gdW5kZWZpbmVkICYmIHNlZ3MubGVuZ3RoID4gMSkgb3duU3BpbmUob3V0LCBzZWdzLCBvd25lZCk7XG4gICAgLy8gQSB0b3RhbCB2ZXJiIHJlYWRzIG5vdGhpbmcgZnJvbSB3aGF0IGNhbWUgYmVmb3JlIGl0IChpc1RvdGFsKSDigJQgc28gdGhlXG4gICAgLy8gZm9sZCBkb2VzIG5vdCBsb29rLlxuICAgIGNvbnN0IG5leHQgPSBhcHBseVZlcmIodmVyYiwgaXNUb3RhbCh2ZXJiKSA/IHVuZGVmaW5lZCA6IG5hdGl2ZUdldChvdXQsIHNlZ3MpLCBhdCwgc2Vncyk7XG4gICAgLy8gQSB2YWx1ZSB0aGlzIGZvbGQgQ1JFQVRFRCBpcyBpdHMgb3duIHRvIGVkaXQgaW4gcGxhY2U7IGEgcmVjb3JkZWQgdmFsdWVcbiAgICAvLyBwbGFjZWQgYnkgcmVmZXJlbmNlIGlzIHRoZSBsb2cncy5cbiAgICBpZiAoZGV0YWNoIHx8IHZlcmIgPT09ICdtZXJnZScpIG93bihuZXh0LCBvd25lZCk7XG4gICAgcGxhY2VWZXJiKG91dCwgc2VncywgbmV4dCk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqXG4gKiBBcHBsaWVzIGEgY29tbWl0IGJ1bmRsZSB0byBhIGJhc2Ugc3RhdGUgYnkgcmVwbGF5aW5nIG9wZXJhdGlvbnMgaW4gb3JkZXIuXG4gKiBHdWFyYW50ZWVzIFwibGFzdCB3cml0ZXIgd2luc1wiIHNlbWFudGljcy5cbiAqXG4gKiBSZXR1cm5zIGEgRlVMTFkgREVUQUNIRUQgcmVzdWx0OiB0aGUgYmFzZSBpcyBkZWVwLWNsb25lZCBmaXJzdCBhbmQgZXZlcnlcbiAqIHZhbHVlIHRoZSByZXBsYXkgd3JpdGVzIGlzIGl0cyBvd24gKGBzZXRgIC8gYGFwcGVuZGAgY2xvbmUgdGhlIHJlY29yZGVkXG4gKiB2YWx1ZTsgdGhlIGBtZXJnZWAgYXJtIHJlYWRzIGEgZGV0YWNoZWQgY29weSBvZiBgdXBkYXRlc2ApLCBzbyB0aGUgcmVzdWx0XG4gKiBzaGFyZXMgbm8gY29udGFpbmVyIHdpdGggYGJhc2VgLCBgdXBkYXRlc2Agb3IgYG92ZXJ3cml0ZWAuIFRoaXMgaXMgdGhlXG4gKiBwdWJsaWMgKGBmb290cHJpbnRqcy9hZHZhbmNlZGApIGNvbnRyYWN0LCB1bmNoYW5nZWQgYnkgY29weS1vbi13cml0ZVxuICogKDkuMjkuMCkg4oCUIGJ5dGUtaWRlbnRpY2FsIHRvIDkuMjguMCBmb3IgZXZlcnkgY2FsbGVyLiBUaGUgZW5naW5lJ3Mgb3duXG4gKiBjb21taXQgZG9lcyBOT1QgY29tZSBoZXJlOiBgU2hhcmVkTWVtb3J5LmFwcGx5UGF0Y2hgIGJ1aWxkcyB0aGUgbmV4dFxuICogZ2VuZXJhdGlvbiB3aXRoIGBuZXh0R2VuZXJhdGlvbmAsIHdoaWNoIGNvcGllcyBvbmx5IHRoZSB3cml0dGVuXG4gKiBwYXRocy4gQm90aCBydW4gdGhlIE9ORSBmb2xkLCB7QGxpbmsgZm9sZFJvd3N9OyB0aGUgdmVyYnMgYXJlXG4gKiB7QGxpbmsgYXBwbHlWZXJifSdzLlxuICpcbiAqIFZlcmIgYXJtcyDigJQgc2VlIHtAbGluayBhcHBseVZlcmJ9LiBBIHJvdyB3aXRoIGFueSBvdGhlciB2ZXJiIHRocm93c1xuICoge0BsaW5rIFVua25vd25WZXJiRXJyb3J9LlxuICpcbiAqIFdvcmssIG5vdCBieXRlcyAoOS4yMi4xKTogYSBgc2V0YCByb3cgdGhlIE5FWFQgcm93IHJlLXNldHMgaXMgc2tpcHBlZFxuICogKHtAbGluayBzdXBlcnNlZGVkQnlOZXh0U2V0fSkg4oCUIHRoZSByb3dzIHN0YXkgaW4gdGhlIGxvZywgb25seSB0aGUgY2xvbmVcbiAqIGVhY2ggd291bGQgaGF2ZSBwYWlkIGlzIG5vdC4gRXZlcnkgY29uc3VtZXIgaW5oZXJpdHMgdGhlIHNraXAgZnJvbVxuICogYGZvbGRSb3dzYDsgdGhlcmUgaXMgbm8gc2Vjb25kIHJlcGxheSBsb29wIHRvIGtlZXAgaW4gc3RlcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5U21hcnRNZXJnZShiYXNlOiBhbnksIHVwZGF0ZXM6IE1lbW9yeVBhdGNoLCBvdmVyd3JpdGU6IE1lbW9yeVBhdGNoLCB0cmFjZTogVHJhY2VFbnRyeVtdKTogYW55IHtcbiAgcmV0dXJuIGZvbGRSb3dzKHN0cnVjdHVyZWRDbG9uZShiYXNlKSwgdXBkYXRlcywgb3ZlcndyaXRlLCB0cmFjZSwgJ3ByaXZhdGUnKTtcbn1cblxuLyoqXG4gKiBUaGUgZW5naW5lJ3MgY29tbWl0IChjb3B5LW9uLXdyaXRlLCA5LjI5LjAg4oCUIGRvY3MvZGVzaWduLzIwMjYtMTAtY29weS1vbi1cbiAqIHdyaXRlLWNvbW1pdC5tZCk6IHRoZSBORVhUIGNvbW1pdHRlZCBnZW5lcmF0aW9uLiBBIGNvcHkgb2YgYGJhc2VgJ3MgUk9PVFxuICogcGx1cyBhIGNvcHkgb2YgZXZlcnkgY29udGFpbmVyIG9uIGVhY2ggd3JpdHRlbiBwYXRoOyBldmVyeSBvdGhlciBzdWJ0cmVlXG4gKiBpcyBTSEFSRUQgd2l0aCBgYmFzZWAsIHdoaWNoIGlzIG5ldmVyIGVkaXRlZCDigJQgY29tbWl0dGVkIHN0YXRlIGlzXG4gKiBpbW11dGFibGUtYWZ0ZXItc3dhcCwgc28gc2hhcmluZyBpcyBzYWZlLCBhbmQgYSBjb21taXQgY29zdHMgTyh3aGF0IGl0XG4gKiB3cm90ZSksIG5vdCBPKHN0YXRlKS4gYFNoYXJlZE1lbW9yeS5hcHBseVBhdGNoYCAobGl2ZSBzdGF0ZSBhbmQgdGhlXG4gKiByZWRhY3RlZCBtaXJyb3IpIGlzIGl0cyBjYWxsZXIuIEludGVybmFsOiB0aGUgcHVibGljIHJlcGxheSBpc1xuICoge0BsaW5rIGFwcGx5U21hcnRNZXJnZX0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuZXh0R2VuZXJhdGlvbihiYXNlOiBhbnksIHVwZGF0ZXM6IE1lbW9yeVBhdGNoLCBvdmVyd3JpdGU6IE1lbW9yeVBhdGNoLCB0cmFjZTogVHJhY2VFbnRyeVtdKTogYW55IHtcbiAgcmV0dXJuIGZvbGRSb3dzKG93bmVkUm9vdE9mKGJhc2UpLCB1cGRhdGVzLCBvdmVyd3JpdGUsIHRyYWNlLCAncGF0aENvcHknKTtcbn1cblxuLyoqXG4gKiBUaGUgc2FtZSByZXBsYXksIElOVE8gYHRhcmdldGAg4oCUIG5vIGNsb25lIG9mIGl0cyBvd24uIEZvciBhIGNhbGxlciB0aGF0XG4gKiBhbHJlYWR5IGhvbGRzIGEgcHJpdmF0ZSB3b3JraW5nIGNvcHkgKHRoZSByZWFkLXNpZGUgZm9sZHM6IGBzdGF0ZUF0YCBpblxuICogYHRpbWUtdHJhdmVsL3N0YXRlQXQudHNgIGFuZCBgRXZlbnRMb2cubWF0ZXJpYWxpc2VgIGNsb25lIHRoZWlyIGJhc2UgT05DRVxuICogYW5kIHRoZW4gYXBwbHkgZXZlcnkgYnVuZGxlIGhlcmUpLCBzbyBhIGZvbGQgb3ZlciBOIGJ1bmRsZXMgY29zdHMgTiByb3dcbiAqIGFwcGxpY2F0aW9ucywgbm90IE4gY2xvbmVzIG9mIHRoZSB3aG9sZSBzdGF0ZS4gTmV2ZXIgaGFuZCBpdCBjb21taXR0ZWRcbiAqIHN0YXRlOiBpdCBtdXRhdGVzIHRoZSBST09UIGluIHBsYWNlLiBCZWxvdyB0aGUgcm9vdCBpdCBmb2xsb3dzIHRoZSBsaXZlXG4gKiBjb21taXQncyBsYXcgKHtAbGluayBuZXh0R2VuZXJhdGlvbn0pIOKAlCBhIGNvbnRhaW5lciB0aGlzIGNhbGwgZGlkIG5vdFxuICogY3JlYXRlIGlzIGNvcGllZCBiZWZvcmUgYSB3cml0ZSBwYXNzZXMgdGhyb3VnaCBpdCDigJQgc28gYSBmb2xkIGFuZCB0aGUgbGl2ZVxuICogc3RhdGUgZ2l2ZSB0aGUgc2FtZSB2YWx1ZSBhdCBldmVyeSBwYXRoLCBhbGlhc2VkIHN1YnRyZWVzIGluY2x1ZGVkLlxuICogVGhlIHZhbHVlcyBpdCB3cml0ZXMgYXJlIGl0cyBvd24sIHNvIGB0YXJnZXRgIG5ldmVyIGFsaWFzZXMgdGhlIGxvZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5U21hcnRNZXJnZUludG8oXG4gIHRhcmdldDogYW55LFxuICB1cGRhdGVzOiBNZW1vcnlQYXRjaCxcbiAgb3ZlcndyaXRlOiBNZW1vcnlQYXRjaCxcbiAgdHJhY2U6IFRyYWNlRW50cnlbXSxcbik6IGFueSB7XG4gIHJldHVybiBmb2xkUm93cyh0YXJnZXQsIHVwZGF0ZXMsIG92ZXJ3cml0ZSwgdHJhY2UsICdwYXRoQ29weScpO1xufVxuXG4vKipcbiAqIFRoZSBmb2xkLCBmb3IgQ09NUEFSSVNPTiBvbmx5ICg5LjMwLjAg4oCUIHRoZSBhZG1pdHRlZCByZWNvcmQpOiBgYmFzZWAgd2l0aFxuICogdGhlIGJ1bmRsZSByZXBsYXllZCBieSB0aGUgb25lIHZlcmIgbGF3LCBjb3B5LW9uLXdyaXRlIGJlbG93IHRoZSByb290LFxuICogZXZlcnkgcmVjb3JkZWQgdmFsdWUgcGxhY2VkIEJZIFJFRkVSRU5DRSDigJQgbm8gY2xvbmUsIHNvIGl0IGNvc3RzIHdoYXQgdGhlXG4gKiBidW5kbGUgd3JvdGUgYW5kIG5vdGhpbmcgbW9yZS4gSXQgYWxpYXNlcyB0aGUgcGF5bG9hZCBhbmQgZXZlcnkgc3VidHJlZSBvZlxuICogYGJhc2VgIHRoZSBidW5kbGUgZGlkIG5vdCB3cml0ZSwgYW5kIGVkaXRzIG5laXRoZXIuIE5ldmVyIGhhbmQgaXQgb3V0LFxuICogc3RvcmUgaXQgb3Igd3JpdGUgdGhyb3VnaCBpdDogYFRyYW5zYWN0aW9uQnVmZmVyYCBidWlsZHMgb25lIHRvIGFzayB3aGV0aGVyXG4gKiBhIGJ1bmRsZSBmb2xkcyBiYWNrIHRvIHdoYXQgdGhlIHN0YWdlIHJlYWQsIHRoZW4gZHJvcHMgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcnlGb2xkKGJhc2U6IGFueSwgdXBkYXRlczogTWVtb3J5UGF0Y2gsIG92ZXJ3cml0ZTogTWVtb3J5UGF0Y2gsIHRyYWNlOiBUcmFjZUVudHJ5W10pOiBhbnkge1xuICByZXR1cm4gZm9sZFJvd3Mob3duZWRSb290T2YoYmFzZSksIHVwZGF0ZXMsIG92ZXJ3cml0ZSwgdHJhY2UsICdieVJlZmVyZW5jZScpO1xufVxuXG4vLyDilIDilIDilIAgVGhlIGZvbGQgb3ZlciBvbmUga2V5IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIE9uZSByb3cgb2YgdGhlIGxvZyB1bmRlciB0aGUgZm9sZGVkIGtleSdzIFRPUC1MRVZFTCBrZXkg4oCUIHdoYXQge0BsaW5rIGZvbGRLZXl9XG4gKiBhcHBsaWVzLCBpbiBjb21taXQgb3JkZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG91Y2gge1xuICByZWFkb25seSB2ZXJiOiBWZXJiO1xuICByZWFkb25seSBidW5kbGU6IENvbW1pdEJ1bmRsZTtcbiAgLyoqIFRoZSBidW5kbGUncyBwb3NpdGlvbiBpbiB0aGUgY29tbWl0IGxvZy4gKi9cbiAgcmVhZG9ubHkgY29tbWl0SWR4OiBDb21taXRJZHg7XG4gIC8qKiBUaGUgcm93J3Mgb3duIHBhdGggKERFTElNLWpvaW5lZCBgVHJhY2VFbnRyeS5wYXRoYCkuICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbiAgLyoqXG4gICAqIEhvdyB0aGUgcm93IHNpdHMgYWdhaW5zdCB0aGUgZm9sZGVkIGtleSAoYGtleVBhdGhzIMK3IHJlbGF0aW9uYCkuIEFCU0VOVCBmb3IgYVxuICAgKiByb3cgb24gYW5vdGhlciBwYXRoIHVuZGVyIHRoZSBzYW1lIHRvcC1sZXZlbCBrZXk6IHN1Y2ggYSByb3cgaXMgQVBQTElFRCAoYW5cbiAgICogYXJyYXkgdW5pb24gb24gYSBjb250YWluZXIgYWJvdmUgdGhlIGtleSBkZWR1cHMgdGhlIHdob2xlIGFycmF5LCBzbyBhIHNpYmxpbmdcbiAgICogY2hhbmdlcyB3aGVyZSBpdCBsZWF2ZXMgdGhlIGtleSkgYnV0IG5ldmVyIG9ic2VydmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVsYXRpb24/OiBQYXRoUmVsYXRpb247XG59XG5cbi8qKiBXaGF0IGEgcmVhZGVyIGFza3Mgb2Yge0BsaW5rIGZvbGRLZXl9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBLZXlGb2xkIHtcbiAgLyoqXG4gICAqIFN0YXJ0IGF0IHRoZSBMQVNUIHJvdyB0aGF0IHNldHMgb3IgZGVsZXRlcyB0aGUgd2hvbGUgVE9QLUxFVkVMIGtleSAoe0BsaW5rXG4gICAqIGlzVG90YWx9LCBvbiB0aGUgcm9vdCBwYXRoIGl0c2VsZikg4oCUIHJvd3MgYmVmb3JlIGl0IGNhbm5vdCBjaGFuZ2UgYW55dGhpbmdcbiAgICogdW5kZXIgdGhhdCBrZXksIHNvIGEgcmVhZGVyIHRoYXQgd2FudHMgb25seSB0aGUgdmFsdWUgc2tpcHMgdGhlbS4gQSBgc2V0YCBvZlxuICAgKiBhIHBhdGggYmVsb3cgdGhlIHJvb3QgaXMgTk9UIGFuIGFuY2hvcjogYW4gZWFybGllciBzaWJsaW5nIGNhbiBzdGlsbCBtb3ZlXG4gICAqIHRoZSBrZXkgdGhyb3VnaCBhIGxhdGVyIHVuaW9uLiBPZmYgYnkgZGVmYXVsdDogYSByZWFkZXIgdGhhdCB0cmFja3MgaG93IHRoZVxuICAgKiB2YWx1ZSBHUkVXIG11c3Qgc2VlIGV2ZXJ5IHJvdy5cbiAgICovXG4gIHJlYWRvbmx5IGFuY2hvcmVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENhbGxlZCBhZnRlciBlYWNoIGFwcGxpZWQgcm93IHRoYXQgaGFzIGEge0BsaW5rIFRvdWNoLnJlbGF0aW9ufSDigJQgb24sIGluc2lkZVxuICAgKiBvciBhcm91bmQgdGhlIGtleSAoZXZlcnkgcm93LCB3aXRoIGBldmVyeVJvd2ApIOKAlCB3aXRoIHRoZSB2YWx1ZSBBVCBUSEUgS0VZIGJlZm9yZSBpdCBhbmQgYWZ0ZXIgaXRcbiAgICogKGB1bmRlZmluZWRgIGZvciBhbiBhYnNlbnQga2V5KS4gVGhlIHNlYW0gYSBwcm92ZW5hbmNlIHRyYWNrIGFuZCB0aGUgd3JpdGVyXG4gICAqIHJ1bGUgaGFuZyBvbjogdGhleSB3YXRjaCB0aGUgZm9sZCwgdGhleSBuZXZlciBoYXZlIGEgdmVyYiBzd2l0Y2ggb2YgdGhlaXJcbiAgICogb3duLiBGb3IgYSByb3cgSU5TSURFIHRoZSBrZXksIGFuIGFycmF5IGBiZWZvcmVgIGlzIGEgc2hhbGxvdyBzbmFwc2hvdDogdGhhdFxuICAgKiByb3cgZWRpdHMgdGhlIGZvbGQncyBvd24gY29weSBpbiBwbGFjZS5cbiAgICovXG4gIHJlYWRvbmx5IG9ic2VydmU/OiAodG91Y2g6IFRvdWNoLCBiZWZvcmU6IHVua25vd24sIGFmdGVyOiB1bmtub3duKSA9PiB2b2lkO1xuICAvKipcbiAgICogT2JzZXJ2ZSBFVkVSWSBhcHBsaWVkIHJvdywgbm90IG9ubHkgdGhlIGtleSdzIG93bi4gVGhlIHdyaXRlciBydWxlIG5lZWRzIGl0OiBpdCBjb21wYXJlcyB0aGUgdmFsdWUgYXQgdGhlXG4gICAqIGtleSBhY3Jvc3MgYSBXSE9MRSBjb21taXQsIGFuZCBhIHNpYmxpbmcgdW5kZXIgdGhlIHNhbWUgdG9wLWxldmVsIGtleSBjYW4gbW92ZSB0aGF0IHZhbHVlIOKAlCBhIHdyaXRlXG4gICAqIHRocm91Z2ggYSBjb250YWluZXIgdGhhdCBob2xkcyBhIHByaW1pdGl2ZSByZXBsYWNlcyB0aGUgY29udGFpbmVyIChgbmF0aXZlU2V0YCksIGFuZCB3aXRoIGl0IHRoZSBrZXkuXG4gICAqL1xuICByZWFkb25seSBldmVyeVJvdz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBLZWVwIEdFTkVSQVRJT05TIGF0IGNob3NlbiBjb21taXRzOiBgYXRgIGlzIGFza2VkIGJlZm9yZSBhIGNvbW1pdCdzIGZpcnN0IHJvdyAod2l0aCB0aGUgZm9sZCdzIHN0YXRlIGFzXG4gICAqIGl0IHN0YW5kcyk7IGZvciBhIGNvbW1pdCBpdCBhY2NlcHRzLCBga2VlcGAgaXMgaGFuZGVkIHRoZSB2YWx1ZSBhdCB0aGUga2V5IGJlZm9yZSB0aGUgY29tbWl0IGFuZCBhZnRlclxuICAgKiBpdCDigJQgY29weS1vbi13cml0ZSBhcm91bmQgdGhhdCBjb21taXQgKHRoZSBmb2xkIGRyb3BzIG93bmVyc2hpcCBvZiBldmVyeSBjb250YWluZXIgYmVmb3JlIGFuZCBhZnRlciBpdCksXG4gICAqIHNvIG5vIGxhdGVyIHJvdyBlZGl0cyBlaXRoZXIgdmFsdWUuIFRoZSB3cml0ZXIgcnVsZSdzIG1lbW9pc2VkIHJvb3QgZm9sZCAoYGNvbW1pdExvZ1V0aWxzIMK3IExvZ01vZGVsYClcbiAgICoga2VlcHMgdGhlIGNvbW1pdHMgYSBrZXkncyB2ZXJkaWN0IG5lZWRzLCBvbmNlIHBlciB0b3AtbGV2ZWwga2V5LlxuICAgKi9cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSB0aGUgdG9wLWxldmVsIGtleSBob2xkcyBCRUZPUkUgdGhlIGZpcnN0IHJvdyDigJQgZGVmYXVsdDogYWJzZW50LiBOZXZlciBlZGl0ZWQ6IHRoZSBmb2xkIGNvcGllc1xuICAgKiBpdCBiZWZvcmUgd3JpdGluZyB0aHJvdWdoIGl0LiBgY29tbWl0VmFsdWVBdGAgb24gYSBtZW1vaXNlZCBsb2cgc3RhcnRzIGZyb20gYSBrZXB0IGdlbmVyYXRpb24uXG4gICAqL1xuICByZWFkb25seSBzdGFydD86IHVua25vd247XG4gIHJlYWRvbmx5IGdlbmVyYXRpb25zPzoge1xuICAgIGF0KGNvbW1pdElkeDogbnVtYmVyLCBzdGF0ZTogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KTogYm9vbGVhbjtcbiAgICBrZWVwKGNvbW1pdElkeDogbnVtYmVyLCBiZWZvcmU6IHVua25vd24sIGFmdGVyOiB1bmtub3duKTogdm9pZDtcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGUgdmFsdWUgb2YgT05FIGtleSBhZnRlciBgdG91Y2hlc2Ag4oCUIEVWRVJZIHJvdyB1bmRlciBpdHMgdG9wLWxldmVsIGtleSwgaW5cbiAqIGNvbW1pdCBvcmRlciwgZWFjaCBhbHJlYWR5IGNoZWNrZWQgd2l0aCB7QGxpbmsgaXNWZXJifSDigJQgZm9sZGVkIGZyb20gYW4gYWJzZW50XG4gKiBrZXksIHJlYWQgYXQgdGhlIGtleSAoYHNlZ3NgLCBpdHMgREVMSU0gc2VnbWVudHMpOiB0aGUgdmFsdWUgcnVsZSBvZlxuICogYGtleVBhdGhzLnRzYCwgdGhlIGZvbGQgYHN0YXRlQXRgIGRvZXMgcmVzdHJpY3RlZCB0byBvbmUgdG9wLWxldmVsIGtleS4gVG9wLWxldmVsXG4gKiBrZXlzIG5ldmVyIGludGVyYWN0IHVuZGVyIHRoZSBzdGVwLCBzbyB0aGUgcmVzdHJpY3Rpb24gaXMgZXhhY3QuXG4gKlxuICogVGhlIHNhbWUgc3RlcCAoe0BsaW5rIGFwcGx5VmVyYn0pIGFuZCB0aGUgc2FtZSBkaXNjaXBsaW5lIGFzIHtAbGluayBmb2xkUm93c30nc1xuICogYCdwYXRoQ29weSdgOiBgc2V0YCAvIGBhcHBlbmRgIHZhbHVlcyBhcmUgY2xvbmVzLCB0aGUgbWVyZ2UgZGVsdGEgaXMgZGV0YWNoZWRcbiAqIG9uY2UgcGVyIEJVTkRMRSAobmFycm93ZWQgdG8gdGhlIHRvcC1sZXZlbCBrZXkpLCBzbyB0d28gYG1lcmdlYCByb3dzIG9mIG9uZVxuICogYnVuZGxlIHNlZSB0aGUgc2FtZSBvYmplY3RzLCBhbmQgYSByb3cgdGhhdCB3cml0ZXMgdGhyb3VnaCBhIGNvbnRhaW5lciB0aGlzXG4gKiBmb2xkIGRpZCBub3QgY3JlYXRlIGNvcGllcyBpdCBmaXJzdC4gUmV0dXJucyBgdW5kZWZpbmVkYCBmb3IgYW4gYWJzZW50IGtleS5cbiAqIE8odGhlIHJvd3MgdW5kZXIgdGhlIGtleSdzIHRvcC1sZXZlbCBrZXkpLCBub3QgTyh0aGUgbG9nKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvbGRLZXkodG91Y2hlczogcmVhZG9ubHkgVG91Y2hbXSwgc2Vnczogc3RyaW5nW10sIG9wdGlvbnM6IEtleUZvbGQgPSB7fSk6IHVua25vd24ge1xuICBjb25zdCByb290ID0gc2Vnc1swXTtcbiAgbGV0IGZyb20gPSAwO1xuICBpZiAob3B0aW9ucy5hbmNob3JlZCA9PT0gdHJ1ZSkge1xuICAgIGZvciAobGV0IGkgPSB0b3VjaGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAoaXNUb3RhbCh0b3VjaGVzW2ldLnZlcmIpICYmIHRvdWNoZXNbaV0ucGF0aCA9PT0gcm9vdCkge1xuICAgICAgICBmcm9tID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IHN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBpZiAob3B0aW9ucy5zdGFydCAhPT0gdW5kZWZpbmVkKSBzdGF0ZVtyb290XSA9IG9wdGlvbnMuc3RhcnQ7XG4gIGxldCBvd25lZCA9IG5ldyBXZWFrU2V0PG9iamVjdD4oKTtcbiAgb3duZWQuYWRkKHN0YXRlKTtcbiAgY29uc3Qgb2JzZXJ2ZSA9IG9wdGlvbnMub2JzZXJ2ZTtcbiAgY29uc3QgZ2VuZXJhdGlvbnMgPSBvcHRpb25zLmdlbmVyYXRpb25zO1xuICBsZXQga2VwdCA9IC0xO1xuICBsZXQga2VwdEJlZm9yZTogdW5rbm93bjtcbiAgLyoqIERyb3Agb3duZXJzaGlwIG9mIGV2ZXJ5IGNvbnRhaW5lcjogdGhlIG5leHQgd3JpdGUgdGhyb3VnaCBvbmUgY29waWVzIGl0LCBzbyBhIGtlcHQgdmFsdWUgc3RheXMgYXMgaXQgaXMuICovXG4gIGNvbnN0IHJlbGVhc2UgPSAoKSA9PiB7XG4gICAgb3duZWQgPSBuZXcgV2Vha1NldDxvYmplY3Q+KCk7XG4gICAgb3duZWQuYWRkKHN0YXRlKTtcbiAgfTtcbiAgbGV0IGF0OiBSZWNvcmRlZFBheWxvYWQgfCB1bmRlZmluZWQ7XG4gIGxldCBhdENvbW1pdCA9IC0xO1xuICBmb3IgKGxldCBpID0gZnJvbTsgaSA8IHRvdWNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB0b3VjaCA9IHRvdWNoZXNbaV07XG4gICAgaWYgKGF0ID09PSB1bmRlZmluZWQgfHwgdG91Y2guY29tbWl0SWR4ICE9PSBhdENvbW1pdCkge1xuICAgICAgaWYgKGtlcHQgIT09IC0xKSB7XG4gICAgICAgIGdlbmVyYXRpb25zIS5rZWVwKGtlcHQsIGtlcHRCZWZvcmUsIG5hdGl2ZUdldChzdGF0ZSwgc2VncykpO1xuICAgICAgICBrZXB0ID0gLTE7XG4gICAgICAgIHJlbGVhc2UoKTtcbiAgICAgIH1cbiAgICAgIGlmIChnZW5lcmF0aW9ucyAhPT0gdW5kZWZpbmVkICYmIGdlbmVyYXRpb25zLmF0KHRvdWNoLmNvbW1pdElkeCwgc3RhdGUpKSB7XG4gICAgICAgIHJlbGVhc2UoKTtcbiAgICAgICAga2VwdCA9IHRvdWNoLmNvbW1pdElkeDtcbiAgICAgICAga2VwdEJlZm9yZSA9IG5hdGl2ZUdldChzdGF0ZSwgc2Vncyk7XG4gICAgICB9XG4gICAgICBhdCA9IG5ldyBSZWNvcmRlZFBheWxvYWQodG91Y2guYnVuZGxlLnVwZGF0ZXMsIHRvdWNoLmJ1bmRsZS5vdmVyd3JpdGUsIHRydWUsIFtyb290XSk7XG4gICAgICBhdENvbW1pdCA9IHRvdWNoLmNvbW1pdElkeDtcbiAgICB9XG4gICAgY29uc3Qgcm93U2VncyA9IHRvdWNoLnBhdGggPT09IHJvb3QgPyBbcm9vdF0gOiB0b3VjaC5wYXRoLnNwbGl0KERFTElNKTtcbiAgICBjb25zdCB3YXRjaGVkID0gb2JzZXJ2ZSAhPT0gdW5kZWZpbmVkICYmICh0b3VjaC5yZWxhdGlvbiAhPT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMuZXZlcnlSb3cgPT09IHRydWUpO1xuICAgIGxldCBiZWZvcmU6IHVua25vd247XG4gICAgaWYgKHdhdGNoZWQpIHtcbiAgICAgIGJlZm9yZSA9IG5hdGl2ZUdldChzdGF0ZSwgc2Vncyk7XG4gICAgICBpZiAodG91Y2gucmVsYXRpb24gPT09ICdpbnNpZGUnICYmIEFycmF5LmlzQXJyYXkoYmVmb3JlKSkgYmVmb3JlID0gYmVmb3JlLnNsaWNlKCk7XG4gICAgfVxuICAgIGlmIChyb3dTZWdzLmxlbmd0aCA+IDEpIG93blNwaW5lKHN0YXRlLCByb3dTZWdzLCBvd25lZCk7XG4gICAgLy8gQSB0b3RhbCB2ZXJiIHJlYWRzIG5vdGhpbmcgZnJvbSB3aGF0IGNhbWUgYmVmb3JlIGl0IChpc1RvdGFsKS5cbiAgICBjb25zdCBuZXh0ID0gYXBwbHlWZXJiKHRvdWNoLnZlcmIsIGlzVG90YWwodG91Y2gudmVyYikgPyB1bmRlZmluZWQgOiBuYXRpdmVHZXQoc3RhdGUsIHJvd1NlZ3MpLCBhdCwgcm93U2Vncyk7XG4gICAgb3duKG5leHQsIG93bmVkKTtcbiAgICBwbGFjZVZlcmIoc3RhdGUsIHJvd1NlZ3MsIG5leHQpO1xuICAgIGlmICh3YXRjaGVkKSBvYnNlcnZlKHRvdWNoLCBiZWZvcmUsIG5hdGl2ZUdldChzdGF0ZSwgc2VncykpO1xuICB9XG4gIGlmIChrZXB0ICE9PSAtMSkgZ2VuZXJhdGlvbnMhLmtlZXAoa2VwdCwga2VwdEJlZm9yZSwgbmF0aXZlR2V0KHN0YXRlLCBzZWdzKSk7XG4gIHJldHVybiBuYXRpdmVHZXQoc3RhdGUsIHNlZ3MpO1xufVxuIl19
|
|
427
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyYnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS92ZXJicy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFJSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM5RixPQUFPLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLFlBQVksQ0FBQztBQVFqRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxNQUFNLEdBQXNFO0lBQ2hGLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRTtJQUNqQyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7SUFDcEMsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO0lBQ3BDLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRTtDQUNyQyxDQUFDO0FBRUYsNERBQTREO0FBQzVELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBb0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBVyxDQUFDLENBQUM7QUFFbkYseUZBQXlGO0FBQ3pGLE1BQU0sVUFBVSxNQUFNLENBQUMsS0FBYztJQUNuQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzFGLENBQUM7QUFF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UUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hELGlFQUFpRTtRQUNqRSxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzdHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakIsU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxPQUFPO1lBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFDRCxJQUFJLElBQUksS0FBSyxDQUFDLENBQUM7UUFBRSxXQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzdFLE9BQU8sU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB2ZXJicy50cyDigJQgVEhFIFZFUkIgTEFXIChMMSk6IHRoZSBvbmUgcGxhY2UgYSBjb21taXQgcm93IGJlY29tZXMgYSB2YWx1ZS5cbiAqXG4gKiBBIHJvdyBvZiBhIGNvbW1pdCBidW5kbGUncyBgdHJhY2VgIGNhcnJpZXMgb25lIG9mIGZvdXIgdmVyYnMg4oCUXG4gKiBgc2V0IHwgbWVyZ2UgfCBhcHBlbmQgfCBkZWxldGVgIOKAlCBhbmQgT05FIHN0ZXAgdHVybnMgaXQgaW50byBhIHZhbHVlOlxuICoge0BsaW5rIGFwcGx5VmVyYn0uIFN0YXRlIGlzIGEgbGVmdCBmb2xkIG9mIHRoYXQgc3RlcCAodGhlIGV2ZW50LXNvdXJjaW5nXG4gKiByZWR1Y2VyKToge0BsaW5rIGZvbGRSb3dzfSBmb2xkcyBvbmUgYnVuZGxlJ3Mgcm93cyBpbnRvIGEgc3RhdGUsIGFuZFxuICoge0BsaW5rIGZvbGRLZXl9IGZvbGRzIE9ORSBLRVkgYWNyb3NzIGEgbG9nIOKAlCBldmVyeSByb3cgdW5kZXIgdGhlIGtleSdzXG4gKiB0b3AtbGV2ZWwga2V5LCByZWFkIGF0IHRoZSBrZXkgKHRoZSB2YWx1ZSBydWxlLCBga2V5UGF0aHMudHNgKS4gRXZlcnkgcmVhZGVyXG4gKiBvZiB0aGUgbG9nIHJ1bnMgb25lIG9mIHRoZSB0d28g4oCUXG4gKlxuICogICAtIHRoZSBsaXZlIGNvbW1pdCBhbmQgdGhlIHJlZGFjdGVkIG1pcnJvciAoYG5leHRHZW5lcmF0aW9uYCksXG4gKiAgIC0gdGhlIHB1YmxpYyByZXBsYXkgKGBhcHBseVNtYXJ0TWVyZ2VgKSwgdGhlIHJlYWQtc2lkZSBmb2xkc1xuICogICAgIChgYXBwbHlTbWFydE1lcmdlSW50b2Ag4oCUIGBFdmVudExvZy5tYXRlcmlhbGlzZWAsIGBzdGF0ZUF0YCkgYW5kIHRoZVxuICogICAgIGFkbWl0dGVkIHJlY29yZCdzIGNvbXBhcmlzb24gKGBkcnlGb2xkYCk6IGFsbCB7QGxpbmsgZm9sZFJvd3N9LFxuICogICAtIGBjb21taXRWYWx1ZUF0YCwgYW5kIGBhcnJheVByb3ZlbmFuY2VgIGFzIGFuIE9CU0VSVkVSIG9mIHRoZSBzYW1lIGZvbGQ6XG4gKiAgICAge0BsaW5rIGZvbGRLZXl9LlxuICpcbiAqIFRocmVlIHF1ZXN0aW9ucyB0aGF0IHVzZWQgdG8gYmUgYW5zd2VyZWQgb25jZSBwZXIgcmVhZGVyIGFyZSBhbnN3ZXJlZCBoZXJlXG4gKiBvbmNlOiB3aGF0IGEgdmVyYiBkb2VzIHRvIHRoZSB2YWx1ZSBiZWZvcmUgaXQgKHtAbGluayBhcHBseVZlcmJ9KSwgaG93IHRoZVxuICogcmVzdWx0IGlzIHBsYWNlZCAoe0BsaW5rIHBsYWNlVmVyYn0pLCBhbmQgaG93IHRoZSBsb2cncyBvd24gdmFsdWVzIGFyZVxuICogdHJlYXRlZCBvbiB0aGUgd2F5IGluICh0aGUgY2xvbmUgZGlzY2lwbGluZSDigJQgYSBQQVJBTUVURVIgb2YgdGhlIGZvbGQsIHNlZVxuICoge0BsaW5rIERpc2NpcGxpbmV9IGFuZCB7QGxpbmsgUmVjb3JkZWRQYXlsb2FkfSkuIEEgbmV3IHZlcmIgaXMgb25lIG5ldyBhcm0gb2ZcbiAqIGBhcHBseVZlcmJgIGFuZCBvbmUgcm93IG9mIHRoZSB0cmFpdHMgdGFibGU7IHRoZSBjb21waWxlciByZWZ1c2VzIGVpdGhlclxuICogbWlzc2luZyAoe0BsaW5rIGlzVG90YWx9LCB7QGxpbmsgcmVjb3Jkc1RhaWx9LCB7QGxpbmsgVkVSQlN9KS5cbiAqXG4gKiBBbiBVTktOT1dOIHZlcmIgaXMgcmVmdXNlZCB3aXRoIHtAbGluayBVbmtub3duVmVyYkVycm9yfSwgbmV2ZXIgZm9sZGVkIGFzIGFcbiAqIGBtZXJnZWAgKHRoZSBvbGQgc2lsZW50IGRlZmF1bHQpLiBFbmdpbmUtd3JpdHRlbiBsb2dzIGNhcnJ5IHRoZSBmb3VyLCBzb1xuICogZXZlcnkgZW5naW5lIHJ1biBmb2xkcyBieXRlLWZvci1ieXRlIGFzIGJlZm9yZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbW1pdElkeCB9IGZyb20gJy4uL2lkcy9ydW50aW1lU3RhZ2VJZC5qcyc7XG5pbXBvcnQgdHlwZSB7IFBhdGhSZWxhdGlvbiB9IGZyb20gJy4va2V5UGF0aHMuanMnO1xuaW1wb3J0IHsgZGVlcFNtYXJ0TWVyZ2UgfSBmcm9tICcuL21lcmdlLmpzJztcbmltcG9ydCB7IG5hdGl2ZURlbGV0ZSwgbmF0aXZlR2V0LCBuYXRpdmVTZXQsIG93biwgb3duZWRSb290T2YsIG93blNwaW5lIH0gZnJvbSAnLi9wYXRoT3BzLmpzJztcbmltcG9ydCB7IERFTElNLCBwYXRoU2VnbWVudHMgfSBmcm9tICcuL3BhdGhzLmpzJztcbmltcG9ydCB0eXBlIHsgQ29tbWl0QnVuZGxlLCBNZW1vcnlQYXRjaCwgVHJhY2VFbnRyeSB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vLyDilIDilIDilIAgVGhlIHZvY2FidWxhcnkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBBIGNvbW1pdCByb3cncyB2ZXJiIOKAlCBgVHJhY2VFbnRyeVsndmVyYiddYCwgdGhlIHVuaW9uIHRoZSB0eXBlcyBmaWxlIGRlY2xhcmVzLiAqL1xuZXhwb3J0IHR5cGUgVmVyYiA9IFRyYWNlRW50cnlbJ3ZlcmInXTtcblxuLyoqXG4gKiBUaGUgdm9jYWJ1bGFyeTogZWFjaCB2ZXJiIHdpdGggdGhlIHR3byB0cmFpdHMgcmVhZGVycyBicmFuY2ggb24sIGluIHRoZVxuICogb3JkZXIgdGhlIGNvbnRyYWN0IG5hbWVzIHRoZW0uIEEgYFJlY29yZGAgb3ZlciB0aGUgdW5pb24g4oCUIHRoZSBjb21waWxlclxuICogcmVmdXNlcyBhIHRhYmxlIHRoYXQgbWlzc2VzIChvciBpbnZlbnRzKSBhIHZlcmIsIHNvIGEgdmVyYiBjYW5ub3QgYmUgYWRkZWRcbiAqIHdpdGhvdXQgc2F5aW5nIHdoYXQgaXQgaXMuXG4gKlxuICogICBgdG90YWxgIOKAlCB0aGUgcm93IGRlY2lkZXMgdGhlIHZhbHVlIEFMT05FOyBpdCByZWFkcyBub3RoaW5nIGZyb20gd2hhdCBjYW1lXG4gKiAgICAgYmVmb3JlIGl0ICh7QGxpbmsgaXNUb3RhbH0pLlxuICogICBgdGFpbGAgIOKAlCB0aGUgcm93IHJlY29yZHMgT05MWSB3aGF0IGl0IGFkZHMsIG5vdCB0aGUgd2hvbGUgdmFsdWVcbiAqICAgICAoe0BsaW5rIHJlY29yZHNUYWlsfSkuXG4gKi9cbmNvbnN0IFRSQUlUUzogUmVjb3JkPFZlcmIsIHsgcmVhZG9ubHkgdG90YWw6IGJvb2xlYW47IHJlYWRvbmx5IHRhaWw6IGJvb2xlYW4gfT4gPSB7XG4gIHNldDogeyB0b3RhbDogdHJ1ZSwgdGFpbDogZmFsc2UgfSxcbiAgbWVyZ2U6IHsgdG90YWw6IGZhbHNlLCB0YWlsOiBmYWxzZSB9LFxuICBhcHBlbmQ6IHsgdG90YWw6IGZhbHNlLCB0YWlsOiB0cnVlIH0sXG4gIGRlbGV0ZTogeyB0b3RhbDogdHJ1ZSwgdGFpbDogZmFsc2UgfSxcbn07XG5cbi8qKiBUaGUgZm91ciB2ZXJicywgaW4gdGhlIG9yZGVyIHRoZSBjb250cmFjdCBuYW1lcyB0aGVtLiAqL1xuZXhwb3J0IGNvbnN0IFZFUkJTOiByZWFkb25seSBWZXJiW10gPSBPYmplY3QuZnJlZXplKE9iamVjdC5rZXlzKFRSQUlUUykgYXMgVmVyYltdKTtcblxuLyoqIElzIGB2YWx1ZWAgb25lIG9mIHRoZSBmb3VyPyBUaGUgcXVlc3Rpb24gZXZlcnkgcmVhZGVyIG9mIGEgZm9yZWlnbiBsb2cgYXNrcyBmaXJzdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZlcmIodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBWZXJiIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFRSQUlUUywgdmFsdWUpO1xufVxuXG4vKipcbiAqIERvZXMgdGhlIHZlcmIgZGVjaWRlIHRoZSB2YWx1ZSBBTE9ORSDigJQgcmVhZCBub3RoaW5nIGZyb20gd2hhdCBjYW1lIGJlZm9yZVxuICogaXQ/IGBzZXRgIGFuZCBgZGVsZXRlYC4gQSByZWFkZXIgdGhhdCBvbmx5IG5lZWRzIHRoZSBmaW5hbCB2YWx1ZSBtYXkgc3RhcnRcbiAqIGF0IHRoZSBsYXN0IHN1Y2ggcm93ICh7QGxpbmsgZm9sZEtleX0gYGFuY2hvcmVkYCk7IG9uZSB0aGF0IHRyYWNrcyBob3cgdGhlXG4gKiB2YWx1ZSBncmV3IChwcm92ZW5hbmNlKSBzdGFydHMgYXQgdGhlIGZpcnN0LiBQaW5uZWQgYWdhaW5zdFxuICoge0BsaW5rIGFwcGx5VmVyYn0gaXRzZWxmLCBzbyBhIG5ldyB2ZXJiIGNhbm5vdCBtaXNyZXBvcnQgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RvdGFsKHZlcmI6IFZlcmIpOiBib29sZWFuIHtcbiAgcmV0dXJuIFRSQUlUU1t2ZXJiXS50b3RhbDtcbn1cblxuLyoqXG4gKiBEb2VzIHRoZSByb3cgcmVjb3JkIE9OTFkgd2hhdCBpdCBhZGRzIOKAlCBhIHRhaWwg4oCUIHJhdGhlciB0aGFuIHRoZSB3aG9sZVxuICogdmFsdWU/IGBhcHBlbmRgLiBXaGF0IHRoZSByb3cgYWRkZWQgaXMgdGhlbiBrbm93biBleGFjdGx5OiBhIHJlYWRlciB0aGF0XG4gKiB0cmFja3Mgd2hlcmUgYXJyYXkgZWxlbWVudHMgY2FtZSBmcm9tIGF0dHJpYnV0ZXMgdGhlbSB0byB0aGlzIHJvdyB3aXRob3V0XG4gKiBjb21wYXJpbmcgYXJyYXlzLCB3aGVyZSBldmVyeSBvdGhlciB2ZXJiIGhhcyB0byBiZSBpbmZlcnJlZCBmcm9tLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVjb3Jkc1RhaWwodmVyYjogVmVyYik6IGJvb2xlYW4ge1xuICByZXR1cm4gVFJBSVRTW3ZlcmJdLnRhaWw7XG59XG5cbi8qKiBXaGVyZSBpbiBhIGxvZyBhIHJlZnVzZWQgcm93IHNpdHMuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvd1NpdGUge1xuICAvKiogVGhlIHJvdydzIGBwYXRoYCwgREVMSU0tam9pbmVkIGFzIHRoZSB0cmFjZSByZWNvcmRzIGl0LiAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG4gIC8qKiBUaGUgcm93J3MgcG9zaXRpb24gaW4gaXRzIGJ1bmRsZSdzIGB0cmFjZWAuICovXG4gIHJlYWRvbmx5IHJvdzogbnVtYmVyO1xuICAvKiogVGhlIGJ1bmRsZSdzIHBvc2l0aW9uIGluIHRoZSBjb21taXQgbG9nLCB3aGVuIHRoZSByZWFkZXIga25vd3MgaXQuICovXG4gIHJlYWRvbmx5IGNvbW1pdD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaHJvd24gYnkgdGhlIHJlYWRlcnMgb2YgYSBjb21taXQgbG9nIOKAlCB7QGxpbmsgZm9sZFJvd3N9IChiZWhpbmRcbiAqIGBhcHBseVNtYXJ0TWVyZ2VgKSwgYGNvbW1pdFZhbHVlQXRgLCBgYXJyYXlQcm92ZW5hbmNlYCDigJQgd2hlbiBhIHJvdyBjYXJyaWVzIGFcbiAqIHZlcmIgb3V0c2lkZSB7QGxpbmsgVkVSQlN9OiBhIGZvcmVpZ24gb3IgY29ycnVwdGVkIGxvZyBmYWlscyBsb3VkbHkgaW5zdGVhZFxuICogb2YgYmVpbmcgcmVwbGF5ZWQgYXMgYSBgbWVyZ2VgLiBgdmVyYmAsIGBwYXRoYCwgYHJvd2AgYW5kIGBjb21taXRgIG5hbWUgdGhlXG4gKiByb3cgKGBwYXRoYCAvIGByb3dgIC8gYGNvbW1pdGAgYXJlIGFic2VudCB3aGVuIHRoZSBjYWxsZXIgaGFuZGVkIG92ZXIgYVxuICogYmFyZSB2ZXJiKTsgYHBhdGhgIGlzIHRoZSB0cmFjZSdzIG93biBERUxJTS1qb2luZWQgZm9ybSDigJQgdGFrZSBpdCBhcGFydCB3aXRoXG4gKiBgcGF0aFNlZ21lbnRzYC4gVGhlIG1lc3NhZ2UgcXVvdGVzIGB2ZXJiYCBhbmQgYHBhdGhgLCBzbyBhIGhvc3RpbGUgbG9nIGNhbm5vdFxuICogcmVzaGFwZSBpdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFVua25vd25WZXJiRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IHZlcmI6IHVua25vd247XG4gIHJlYWRvbmx5IHBhdGg/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJvdz86IG51bWJlcjtcbiAgcmVhZG9ubHkgY29tbWl0PzogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHZlcmI6IHVua25vd24sIHNpdGU/OiBSb3dTaXRlKSB7XG4gICAgY29uc3QgbmFtZWQgPVxuICAgICAgdHlwZW9mIHZlcmIgPT09ICdzdHJpbmcnID8gSlNPTi5zdHJpbmdpZnkodmVyYikgOiB2ZXJiID09PSB1bmRlZmluZWQgPyAndW5kZWZpbmVkJyA6IGBvZiB0eXBlICR7dHlwZW9mIHZlcmJ9YDtcbiAgICAvLyBUaGUgdmVyYiBhbmQgdGhlIHBhdGggY29tZSBmcm9tIGEgbG9nIG5vYm9keSB2ZXR0ZWQ6IHF1b3RlZCAoSlNPTiksIHNvIGFcbiAgICAvLyBjb250cm9sIGNoYXJhY3RlciBpbiBlaXRoZXIgY2Fubm90IHJlc2hhcGUgdGhlIG1lc3NhZ2UuXG4gICAgY29uc3Qgd2hlcmUgPVxuICAgICAgc2l0ZSA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gJydcbiAgICAgICAgOiBgIG9uIHRyYWNlIHJvdyAke3NpdGUucm93fSAocGF0aCAke0pTT04uc3RyaW5naWZ5KHBhdGhTZWdtZW50cyhzaXRlLnBhdGgpLmpvaW4oJyDigLogJykpfSR7XG4gICAgICAgICAgICBzaXRlLmNvbW1pdCA9PT0gdW5kZWZpbmVkID8gJycgOiBgLCBjb21taXQgJHtzaXRlLmNvbW1pdH1gXG4gICAgICAgICAgfSlgO1xuICAgIGNvbnN0IG9uZSA9IFZFUkJTLmpvaW4oJyB8ICcpO1xuICAgIHN1cGVyKGB1bmtub3duIHZlcmIgJHtuYW1lZH0ke3doZXJlfTogYSBjb21taXQgcm93IGlzIG9uZSBvZiAke29uZX0g4oCUIHRoZSBsb2cgaXMgcmVmdXNlZCwgbm90IHJlcGxheWVkIGFzIGEgbWVyZ2VgKTtcbiAgICB0aGlzLm5hbWUgPSAnVW5rbm93blZlcmJFcnJvcic7XG4gICAgdGhpcy52ZXJiID0gdmVyYjtcbiAgICBpZiAoc2l0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnBhdGggPSBzaXRlLnBhdGg7XG4gICAgICB0aGlzLnJvdyA9IHNpdGUucm93O1xuICAgICAgaWYgKHNpdGUuY29tbWl0ICE9PSB1bmRlZmluZWQpIHRoaXMuY29tbWl0ID0gc2l0ZS5jb21taXQ7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlZnVzZVZlcmIodmVyYjogbmV2ZXIpOiBuZXZlciB7XG4gIHRocm93IG5ldyBVbmtub3duVmVyYkVycm9yKHZlcmIpO1xufVxuXG4vLyDilIDilIDilIAgVGhlIHN0ZXAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogV2hhdCBhIGBkZWxldGVgIHJvdyBsZWF2ZXMgYmVoaW5kOiB0aGUgS0VZIElTIEdPTkUg4oCUIHdoaWNoIGlzIG5vdCB0aGUgdmFsdWVcbiAqIGB1bmRlZmluZWRgIChhIHJvb3QgcmVwbGF5IHJlbW92ZXMgdGhlIGtleTsgYSBwZXItcGF0aCBmb2xkIHJlYWRzIGl0IGFzXG4gKiBgdW5kZWZpbmVkYCkuIHtAbGluayBhcHBseVZlcmJ9IHJldHVybnMgaXQsIHtAbGluayBwbGFjZVZlcmJ9IGFjdHMgb24gaXQuXG4gKi9cbmV4cG9ydCBjb25zdCBBQlNFTlQ6IHVuaXF1ZSBzeW1ib2wgPSBTeW1ib2woJ2Zvb3RwcmludGpzLnZlcmJzLmFic2VudCcpO1xuXG4vKipcbiAqIE9uZSBidW5kbGUncyByZWNvcmRlZCBwYXlsb2FkLCByZWFkIGJ5IHBhdGggdW5kZXIgYSBjbG9uZSBkaXNjaXBsaW5lIOKAlCB0aGVcbiAqIHZhbHVlcyB7QGxpbmsgYXBwbHlWZXJifSByZWFkcyBvdXQgb2YgdGhlIGxvZy5cbiAqXG4gKiBgZGV0YWNoYCDigJQgYHRydWVgIGZvciBldmVyeSBmb2xkIHRoYXQga2VlcHMgaXRzIHJlc3VsdDogYSBgc2V0YCB2YWx1ZSBvciBhblxuICogYGFwcGVuZGAgdGFpbCBpcyBhIGNsb25lIG9mIHdoYXQgdGhlIGxvZyBob2xkcyBhbmQgdGhlIG1lcmdlIGRlbHRhIGNvbWVzIGZyb21cbiAqIE9ORSBkZXRhY2hlZCBjb3B5IG9mIGB1cGRhdGVzYCwgc28gdGhlIHJlc3VsdCBuZXZlciBhbGlhc2VzIHRoZSBsb2cuIGBmYWxzZWBcbiAqIG9ubHkgZm9yIHRoZSBjb21wYXJpc29uIGZvbGQgKHtAbGluayBkcnlGb2xkfSksIHdoaWNoIHBsYWNlcyByZWNvcmRlZCB2YWx1ZXNcbiAqIGFzIHJlY29yZGVkIGFuZCBkcm9wcyBpdHMgcmVzdWx0LlxuICpcbiAqIFRoZSBkZWx0YSBpcyBkZXRhY2hlZCBPTkNFIHBlciBidW5kbGUsIGxhemlseSDigJQgYSBidW5kbGUgd2l0aCBubyBgbWVyZ2VgIHJvd1xuICogcGF5cyBub3RoaW5nLiBgZGVlcFNtYXJ0TWVyZ2VgIGRlZHVwcyBhbiBhcnJheSB1bmlvbiBCWSBSRUZFUkVOQ0UgYW5kIHR3b1xuICogYG1lcmdlYCByb3dzIG9mIG9uZSBidW5kbGUgcmVwbGF5IHRoZSBzYW1lIGFjY3VtdWxhdGVkIGRlbHRhLCBzbyB0aGUgcm93c1xuICogbXVzdCBrZWVwIHNlZWluZyB0aGUgc2FtZSBvYmplY3RzOyBhIGNsb25lIHBlciByb3cgZHVwbGljYXRlZCB0aGVpciBlbGVtZW50c1xuICogKHRoZSBkaWZmZXJlbnRpYWwgY2F1Z2h0IGl0IGluIHRoZSByZXBsYXk7IGBjb21taXRWYWx1ZUF0YCBjYXJyaWVkIHRoZSBidWdcbiAqIHVudGlsIGl0IGZvbGRlZCB0aHJvdWdoIGhlcmUpLiBgb25seWAgbmFycm93cyB0aGUgY29weSB0byBPTkUgcGF0aCDigJQgYVxuICogcGVyLXBhdGggZm9sZCByZWFkcyBub3RoaW5nIGVsc2UsIGFuZCBtdXN0IG5vdCBwYXkgZm9yIHRoZSByZXN0IG9mIHRoZVxuICogYnVuZGxlLlxuICovXG5leHBvcnQgY2xhc3MgUmVjb3JkZWRQYXlsb2FkIHtcbiAgcHJpdmF0ZSBkZWx0YXM6IE1lbW9yeVBhdGNoIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdXBkYXRlczogTWVtb3J5UGF0Y2gsXG4gICAgcHJpdmF0ZSByZWFkb25seSBvdmVyd3JpdGU6IE1lbW9yeVBhdGNoLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGV0YWNoOiBib29sZWFuLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb25seT86IHN0cmluZ1tdLFxuICApIHt9XG5cbiAgLyoqIFdoYXQgYSBgc2V0YCBwbGFjZXMgYW5kIGFuIGBhcHBlbmRgIGFkZHM6IGBvdmVyd3JpdGVbcGF0aF1gLCBjbG9uZWQgd2hlbiBkZXRhY2hpbmcuICovXG4gIHZhbHVlKHNlZ3M6IHN0cmluZ1tdKTogdW5rbm93biB7XG4gICAgY29uc3QgcmVjb3JkZWQgPSBuYXRpdmVHZXQodGhpcy5vdmVyd3JpdGUsIHNlZ3MpO1xuICAgIHJldHVybiB0aGlzLmRldGFjaCA/IHN0cnVjdHVyZWRDbG9uZShyZWNvcmRlZCkgOiByZWNvcmRlZDtcbiAgfVxuXG4gIC8qKiBUaGUgYWNjdW11bGF0ZWQgbWVyZ2UgZGVsdGEgYXQgYHBhdGhgOiBgdXBkYXRlc1twYXRoXWAsIGZyb20gdGhlIGJ1bmRsZSdzIG9uZSBjb3B5LiAqL1xuICBkZWx0YShzZWdzOiBzdHJpbmdbXSk6IHVua25vd24ge1xuICAgIGlmICh0aGlzLmRlbHRhcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBzb3VyY2UgPSB0aGlzLm9ubHkgPT09IHVuZGVmaW5lZCA/IHRoaXMudXBkYXRlcyA6IGF0UGF0aCh0aGlzLnVwZGF0ZXMsIHRoaXMub25seSk7XG4gICAgICB0aGlzLmRlbHRhcyA9IHRoaXMuZGV0YWNoID8gc3RydWN0dXJlZENsb25lKHNvdXJjZSkgOiBzb3VyY2U7XG4gICAgfVxuICAgIHJldHVybiBuYXRpdmVHZXQodGhpcy5kZWx0YXMsIHNlZ3MpO1xuICB9XG59XG5cbi8qKiBgdHJlZWAgcmVkdWNlZCB0byBPTkUgcGF0aDogdGhhdCBzdWItdHJlZSwgYnkgcmVmZXJlbmNlLCB1bmRlciBmcmVzaCBjb250YWluZXJzLiAqL1xuZnVuY3Rpb24gYXRQYXRoKHRyZWU6IE1lbW9yeVBhdGNoLCBzZWdzOiBzdHJpbmdbXSk6IE1lbW9yeVBhdGNoIHtcbiAgY29uc3QgbGVhZiA9IG5hdGl2ZUdldCh0cmVlLCBzZWdzKTtcbiAgcmV0dXJuIGxlYWYgPT09IHVuZGVmaW5lZCA/IHt9IDogbmF0aXZlU2V0KHt9LCBzZWdzLCBsZWFmKTtcbn1cblxuLyoqXG4gKiBPTkUgcm93LCBPTkUgc3RlcDogdGhlIHZhbHVlIGF0IHRoZSByb3cncyBwYXRoIEFGVEVSIHRoZSByb3csIGdpdmVuIHRoZVxuICogdmFsdWUgQkVGT1JFIGl0IGFuZCB0aGUgYnVuZGxlJ3MgcmVjb3JkZWQgcGF5bG9hZC4gVEhFIHZlcmIgbGF3IOKAlCBubyBvdGhlclxuICogZnVuY3Rpb24gaW4gdGhlIGxpYnJhcnkgaGFzIGFuIGFybSBwZXIgdmVyYi5cbiAqXG4gKiAgIC0gYCdzZXQnYCAgICDigJQgdGhlIHJlY29yZGVkIHZhbHVlIChgb3ZlcndyaXRlW3BhdGhdYCwgdGhlIGZ1bGwgZmluYWwgdmFsdWUpLlxuICogICAtIGAnbWVyZ2UnYCAg4oCUIGBkZWVwU21hcnRNZXJnZWAgb2YgdGhlIGFjY3VtdWxhdGVkIGB1cGRhdGVzW3BhdGhdYCBkZWx0YSBvbnRvXG4gKiAgICAgdGhlIHZhbHVlIGJlZm9yZS5cbiAqICAgLSBgJ2FwcGVuZCdgIOKAlCAoZGVsdGEgbW9kZSkgYG92ZXJ3cml0ZVtwYXRoXWAgaG9sZHMgT05MWSB0aGUgdGFpbDogY29uY2F0ZW5hdGVcbiAqICAgICBpdCBvbnRvIHRoZSB2YWx1ZSBiZWZvcmUuIFdoZW4gZWl0aGVyIGlzIG5vdCBhbiBhcnJheSAoYW4gb3V0LW9mLW9yZGVyXG4gKiAgICAgcmVwbGF5IGJhc2UsIG9yIGEgUkVEQUNURUQgdGFpbCDigJQgYHNjcnViUGF0Y2hgIHJlcGxhY2VzIG1hdGNoZWQgcGF5bG9hZHNcbiAqICAgICB3aXRoIHRoZSBgJ1JFREFDVEVEJ2Agc3RyaW5nKSB0aGUgdGFpbCBCRUNPTUVTIHRoZSB2YWx1ZSDigJQgdGhlIHNhbWVcbiAqICAgICB0ZXJtaW5hbCB2YWx1ZSBhIHJlZGFjdGVkIG9yIGNvcnJ1cHQgYHNldGAgcHJvZHVjZXMuXG4gKiAgIC0gYCdkZWxldGUnYCDigJQge0BsaW5rIEFCU0VOVH06IHRoZSBrZXkgaXMgcmVtb3ZlZC4gVGhlIHBhdGggc3RheXMgZW51bWVyYXRlZFxuICogICAgIGluIGBvdmVyd3JpdGVgICh2YWx1ZSBgdW5kZWZpbmVkYCkgZm9yIGtleS1zZXQgY29uc3VtZXJzOyB0aGUgc3RlcCBpZ25vcmVzXG4gKiAgICAgdGhhdCB2YWx1ZS5cbiAqXG4gKiBQdXJlOiBpdCByZWFkcyB0aGUgcGF5bG9hZCBhbmQgbmV2ZXIgd3JpdGVzLiBgdmVyYmAgbXVzdCBiZSBhIHtAbGluayBWZXJifVxuICogKHRoZSBmb2xkcyBjaGVjayB3aXRoIHtAbGluayBpc1ZlcmJ9IGZpcnN0IGFuZCBuYW1lIHRoZSByb3cpOyBhbnl0aGluZyBlbHNlXG4gKiB0aGF0IHJlYWNoZXMgaXQgaXMgcmVmdXNlZCB3aXRoIHtAbGluayBVbmtub3duVmVyYkVycm9yfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5VmVyYih2ZXJiOiBWZXJiLCBiZWZvcmU6IHVua25vd24sIGF0OiBSZWNvcmRlZFBheWxvYWQsIHNlZ3M6IHN0cmluZ1tdKTogdW5rbm93biB7XG4gIGlmICh2ZXJiID09PSAnc2V0JykgcmV0dXJuIGF0LnZhbHVlKHNlZ3MpO1xuICBpZiAodmVyYiA9PT0gJ2FwcGVuZCcpIHtcbiAgICBjb25zdCB0YWlsID0gYXQudmFsdWUoc2Vncyk7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYmVmb3JlKSAmJiBBcnJheS5pc0FycmF5KHRhaWwpID8gWy4uLmJlZm9yZSwgLi4udGFpbF0gOiB0YWlsO1xuICB9XG4gIGlmICh2ZXJiID09PSAnZGVsZXRlJykgcmV0dXJuIEFCU0VOVDtcbiAgaWYgKHZlcmIgPT09ICdtZXJnZScpIHJldHVybiBkZWVwU21hcnRNZXJnZShiZWZvcmUsIGF0LmRlbHRhKHNlZ3MpKTtcbiAgcmV0dXJuIHJlZnVzZVZlcmIodmVyYik7IC8vIGB2ZXJiYCBpcyBgbmV2ZXJgIGhlcmUg4oCUIGEgZmlmdGggdmVyYiBpbiB0aGUgdW5pb24gc3RvcHMgY29tcGlsaW5nXG59XG5cbi8qKiBQdXQgYSBzdGVwJ3MgdmFsdWUgYXQgaXRzIHBhdGggaW4gYG91dGAg4oCUIG9yIHJlbW92ZSB0aGUga2V5LCBmb3Ige0BsaW5rIEFCU0VOVH0uICovXG5leHBvcnQgZnVuY3Rpb24gcGxhY2VWZXJiKG91dDogYW55LCBzZWdzOiBzdHJpbmdbXSwgbmV4dDogdW5rbm93bik6IHZvaWQge1xuICBpZiAobmV4dCA9PT0gQUJTRU5UKSBuYXRpdmVEZWxldGUob3V0LCBzZWdzKTtcbiAgZWxzZSBuYXRpdmVTZXQob3V0LCBzZWdzLCBuZXh0KTtcbn1cblxuLyoqXG4gKiBJcyByb3cgYGlgIGEgYHNldGAgdGhhdCB0aGUgTkVYVCByb3cgc2V0cyBhZ2FpbiDigJQgc2FtZSBwYXRoLCBzYW1lIHZlcmIg4oCUIHNvXG4gKiB0aGF0IGFwcGx5aW5nIGl0IGlzIHdvcmsgdGhlIG5leHQgcm93IHJlZG9lcz9cbiAqXG4gKiBUaGUgb25lIHNraXAgZXZlcnkgcmVwbGF5IGl0ZXJhdG9yIHNoYXJlcyAoOS4yMi4xKS4gQSBgc2V0YCByb3cgd3JpdGVzIGFcbiAqIGNsb25lIG9mIHRoZSByZWNvcmRlZCB2YWx1ZSBhdCBpdHMgcGF0aDsgdGhlIG5leHQgcm93LCBhIGBzZXRgIG9mIHRoZSBzYW1lXG4gKiBwYXRoLCB3cml0ZXMgYSBjbG9uZSBvZiB0aGUgU0FNRSByZWNvcmRlZCB2YWx1ZSBvdmVyIGl0ICh0aGUgYnVuZGxlJ3MgcGF0Y2hcbiAqIHRyZWUgaXMgZml4ZWQpLCBhbmQgbm90aGluZyBydW5zIGluIGJldHdlZW4g4oCUIHNvIHRoZSBmaXJzdCB3cml0ZSBpc1xuICogdW5vYnNlcnZhYmxlLCBjb250YWluZXIgY3JlYXRpb24gYW5kIGtleSBvcmRlciBpbmNsdWRlZC4gT25seSBDT05TRUNVVElWRVxuICogcm93cyBxdWFsaWZ5OiBhIHJvdyBpbiBiZXR3ZWVuIChhbiBhbmNlc3RvciBgbWVyZ2VgLCBhIHNpYmxpbmcgYHNldGAgdGhhdFxuICogY3JlYXRlcyBhIGNvbnRhaW5lcikgY2FuIHNlZSB0aGUgaW50ZXJtZWRpYXRlIHZhbHVlLCBhbmQgYSBgbWVyZ2VgLFxuICogYGFwcGVuZGAgb3IgYGRlbGV0ZWAgbmV4dCByb3cgZGVwZW5kcyBvbiB3aGF0IGlzIHRoZXJlLiBSb3dzIGFyZSBuZXZlclxuICogZHJvcHBlZCBmcm9tIHRoZSBsb2cg4oCUIHRoZSA5LjIyLjAgZWxlbWVudC13cml0ZSBmdW5uZWwgcmVjb3JkcyBOXG4gKiB3aG9sZS1hcnJheSBgc2V0YCByb3dzIG9uIG9uZSBwYXRoLCBhbmQgdGhpcyBpcyB3aGF0IG1ha2VzIHJlcGxheWluZyB0aGVtXG4gKiBPKE4pIGluc3RlYWQgb2YgTyhOIMOXIHJvd3MpLlxuICpcbiAqIEFza2VkIGJ5IHtAbGluayBmb2xkUm93c30g4oCUIGxpdmUgc3RhdGUgYW5kIHRoZSByZWRhY3RlZCBtaXJyb3IgdGhyb3VnaFxuICoge0BsaW5rIG5leHRHZW5lcmF0aW9ufSwgYEV2ZW50TG9nLm1hdGVyaWFsaXNlYCBhbmQgYHN0YXRlQXRgIHRocm91Z2hcbiAqIHtAbGluayBhcHBseVNtYXJ0TWVyZ2VJbnRvfSwgdGhlIHB1YmxpYyB7QGxpbmsgYXBwbHlTbWFydE1lcmdlfSwgYW5kIHRoZVxuICogYWRtaXR0ZWQgcmVjb3JkJ3Mge0BsaW5rIGRyeUZvbGR9LiB7QGxpbmsgZm9sZEtleX0gbmVlZHMgbm8gc2tpcDogaXRcbiAqIGFuY2hvcnMgYXQgdGhlIHRvcC1sZXZlbCBrZXkncyBMQVNUIGBzZXRgL2BkZWxldGVgLCBvciAocHJvdmVuYW5jZSkgYVxuICogcmVwZWF0ZWQgYHNldGAgb2YgdGhlIG9uZSByZWNvcmRlZCB2YWx1ZSBjaGFuZ2VzIG5vIGJpcnRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJzZWRlZEJ5TmV4dFNldChyb3dzOiByZWFkb25seSB7IHBhdGg6IHN0cmluZzsgdmVyYjogc3RyaW5nIH1bXSwgaTogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGNvbnN0IHJvdyA9IHJvd3NbaV07XG4gIGlmIChyb3cudmVyYiAhPT0gJ3NldCcpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgbmV4dCA9IHJvd3NbaSArIDFdO1xuICByZXR1cm4gbmV4dCAhPT0gdW5kZWZpbmVkICYmIG5leHQudmVyYiA9PT0gJ3NldCcgJiYgbmV4dC5wYXRoID09PSByb3cucGF0aDtcbn1cblxuLy8g4pSA4pSA4pSAIFRoZSBmb2xkIG92ZXIgb25lIGJ1bmRsZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBIb3cge0BsaW5rIGZvbGRSb3dzfSB0cmVhdHMgdGhlIHN0YXRlIGl0IGVkaXRzIGFuZCB0aGUgdmFsdWVzIGl0IHJlYWRzIG91dCBvZlxuICogdGhlIGxvZyDigJQgdGhlIGNsb25lIGRpc2NpcGxpbmUsIGEgcGFyYW1ldGVyIG9mIHRoZSBPTkUgbG9vcDpcbiAqXG4gKiAgIC0gYCdwcml2YXRlJ2Ag4oCUIGBvdXRgIGlzIGEgcHJpdmF0ZSBkZWVwIGNsb25lLCBlZGl0ZWQgaW4gcGxhY2U7IGV2ZXJ5XG4gKiAgICAgcmVjb3JkZWQgdmFsdWUgaXMgY2xvbmVkIGluLiBUaGUgcHVibGljIHtAbGluayBhcHBseVNtYXJ0TWVyZ2V9LlxuICogICAtIGAncGF0aENvcHknYCDigJQgY29weS1vbi13cml0ZSAoOS4yOS4wKTogYmVmb3JlIGEgcm93IHRoYXQgd3JpdGVzIFRIUk9VR0ggYVxuICogICAgIGNvbnRhaW5lciAoYSBuZXN0ZWQgcGF0aCksIHRoZSBjb250YWluZXJzIG9uIGl0cyBwYXRoIHRoYXQgdGhpcyBmb2xkIGRpZFxuICogICAgIG5vdCBjcmVhdGUgYXJlIGNvcGllZCwgc28gbm8gcm93IGVkaXRzIGEgY29udGFpbmVyIGFub3RoZXIgZ2VuZXJhdGlvblxuICogICAgIChvciB0aGUgbG9nKSBob2xkczsgZWFjaCB2YWx1ZSBhIHJvdyBjcmVhdGVzIGlzIG1hcmtlZCBvd25lZCwgc28gbGF0ZXJcbiAqICAgICByb3dzIG9mIHRoZSBidW5kbGUgd3JpdGUgaW50byBpdCBpbiBwbGFjZS4gRXZlcnkgcmVjb3JkZWQgdmFsdWUgaXMgY2xvbmVkXG4gKiAgICAgaW4uIFRoZSBsaXZlIGNvbW1pdCAoe0BsaW5rIG5leHRHZW5lcmF0aW9ufSkgYW5kIHRoZSByZWFkLXNpZGUgZm9sZHNcbiAqICAgICAoe0BsaW5rIGFwcGx5U21hcnRNZXJnZUludG99KS5cbiAqICAgLSBgJ2J5UmVmZXJlbmNlJ2Ag4oCUIGAncGF0aENvcHknYCwgYnV0IHJlY29yZGVkIHZhbHVlcyBhcmUgcGxhY2VkIEFTXG4gKiAgICAgUkVDT1JERUQgKG5vIGNsb25lKSBhbmQgbmV2ZXIgbWFya2VkIG93bmVkIOKAlCBhIGxhdGVyIHJvdyB0aGF0IHdyaXRlc1xuICogICAgIHRocm91Z2ggb25lIGNvcGllcyBpdCBmaXJzdCwgc28gdGhlIHBheWxvYWQgaXMgbmV2ZXIgZWRpdGVkLiBGb3JcbiAqICAgICBDT01QQVJJU09OIG9ubHkgKHtAbGluayBkcnlGb2xkfSk6IHRoZSByZXN1bHQgYWxpYXNlcyB0aGUgbG9nLlxuICovXG5leHBvcnQgdHlwZSBEaXNjaXBsaW5lID0gJ3ByaXZhdGUnIHwgJ3BhdGhDb3B5JyB8ICdieVJlZmVyZW5jZSc7XG5cbi8qKiBEb2VzIGFueSByb3cgd3JpdGUgVEhST1VHSCBhIGNvbnRhaW5lciAoYSBkZWxpbWl0ZWQsIG5lc3RlZCBwYXRoKT8gKi9cbmZ1bmN0aW9uIGhhc05lc3RlZFJvdyhyb3dzOiByZWFkb25seSBUcmFjZUVudHJ5W10pOiBib29sZWFuIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSBpZiAocm93c1tpXS5wYXRoLmluZGV4T2YoREVMSU0pICE9PSAtMSkgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBGb2xkIG9uZSBidW5kbGUncyByb3dzIGludG8gYG91dGAsIGluIHBsYWNlOiBmb3IgZWFjaCByb3cgKGEgYHNldGAgdGhlIG5leHRcbiAqIHJvdyBzZXRzIGFnYWluIGlzIHNraXBwZWQg4oCUIHtAbGluayBzdXBlcnNlZGVkQnlOZXh0U2V0fSkgdGFrZSB0aGUgc3RlcFxuICogKHtAbGluayBhcHBseVZlcmJ9KSBhbmQgcHV0IGl0cyB2YWx1ZSB3aGVyZSBpdCBiZWxvbmdzICh7QGxpbmsgcGxhY2VWZXJifSkuXG4gKiBgb3V0YCBpcyB0aGUgY2FsbGVyJ3Mg4oCUIHNlZSB7QGxpbmsgRGlzY2lwbGluZX0gZm9yIHdoYXQgaXQgbXVzdCBiZS5cbiAqXG4gKiBBIHJvdyB3aG9zZSB2ZXJiIGlzIG5vdCBvbmUgb2Yge0BsaW5rIFZFUkJTfSBzdG9wcyB0aGUgZm9sZCB3aXRoXG4gKiB7QGxpbmsgVW5rbm93blZlcmJFcnJvcn0gbmFtaW5nIHRoZSByb3c7IHRoZSByb3dzIGJlZm9yZSBpdCBoYXZlIGJlZW5cbiAqIGFwcGxpZWQsIHRvIGEgc3RhdGUgdGhlIGNhbGxlciBkaXNjYXJkcyAoZXZlcnkgaW4tdHJlZSBjYWxsZXIgZG9lcykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb2xkUm93cyhcbiAgb3V0OiBhbnksXG4gIHVwZGF0ZXM6IE1lbW9yeVBhdGNoLFxuICBvdmVyd3JpdGU6IE1lbW9yeVBhdGNoLFxuICByb3dzOiByZWFkb25seSBUcmFjZUVudHJ5W10sXG4gIGRpc2NpcGxpbmU6IERpc2NpcGxpbmUsXG4pOiBhbnkge1xuICBjb25zdCBkZXRhY2ggPSBkaXNjaXBsaW5lICE9PSAnYnlSZWZlcmVuY2UnO1xuICBjb25zdCBvd25lZCA9IGRpc2NpcGxpbmUgIT09ICdwcml2YXRlJyAmJiBoYXNOZXN0ZWRSb3cocm93cykgPyBuZXcgV2Vha1NldDxvYmplY3Q+KCkgOiB1bmRlZmluZWQ7XG4gIG93bihvdXQsIG93bmVkKTtcbiAgY29uc3QgYXQgPSBuZXcgUmVjb3JkZWRQYXlsb2FkKHVwZGF0ZXMsIG92ZXJ3cml0ZSwgZGV0YWNoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN1cGVyc2VkZWRCeU5leHRTZXQocm93cywgaSkpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHsgcGF0aCwgdmVyYiB9ID0gcm93c1tpXTtcbiAgICBpZiAoIWlzVmVyYih2ZXJiKSkgdGhyb3cgbmV3IFVua25vd25WZXJiRXJyb3IodmVyYiwgeyBwYXRoLCByb3c6IGkgfSk7XG4gICAgY29uc3Qgc2VncyA9IHBhdGguc3BsaXQoREVMSU0pO1xuICAgIGlmIChvd25lZCAhPT0gdW5kZWZpbmVkICYmIHNlZ3MubGVuZ3RoID4gMSkgb3duU3BpbmUob3V0LCBzZWdzLCBvd25lZCk7XG4gICAgLy8gQSB0b3RhbCB2ZXJiIHJlYWRzIG5vdGhpbmcgZnJvbSB3aGF0IGNhbWUgYmVmb3JlIGl0IChpc1RvdGFsKSDigJQgc28gdGhlXG4gICAgLy8gZm9sZCBkb2VzIG5vdCBsb29rLlxuICAgIGNvbnN0IG5leHQgPSBhcHBseVZlcmIodmVyYiwgaXNUb3RhbCh2ZXJiKSA/IHVuZGVmaW5lZCA6IG5hdGl2ZUdldChvdXQsIHNlZ3MpLCBhdCwgc2Vncyk7XG4gICAgLy8gQSB2YWx1ZSB0aGlzIGZvbGQgQ1JFQVRFRCBpcyBpdHMgb3duIHRvIGVkaXQgaW4gcGxhY2U7IGEgcmVjb3JkZWQgdmFsdWVcbiAgICAvLyBwbGFjZWQgYnkgcmVmZXJlbmNlIGlzIHRoZSBsb2cncy5cbiAgICBpZiAoZGV0YWNoIHx8IHZlcmIgPT09ICdtZXJnZScpIG93bihuZXh0LCBvd25lZCk7XG4gICAgcGxhY2VWZXJiKG91dCwgc2VncywgbmV4dCk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqXG4gKiBBcHBsaWVzIGEgY29tbWl0IGJ1bmRsZSB0byBhIGJhc2Ugc3RhdGUgYnkgcmVwbGF5aW5nIG9wZXJhdGlvbnMgaW4gb3JkZXIuXG4gKiBHdWFyYW50ZWVzIFwibGFzdCB3cml0ZXIgd2luc1wiIHNlbWFudGljcy5cbiAqXG4gKiBSZXR1cm5zIGEgRlVMTFkgREVUQUNIRUQgcmVzdWx0OiB0aGUgYmFzZSBpcyBkZWVwLWNsb25lZCBmaXJzdCBhbmQgZXZlcnlcbiAqIHZhbHVlIHRoZSByZXBsYXkgd3JpdGVzIGlzIGl0cyBvd24gKGBzZXRgIC8gYGFwcGVuZGAgY2xvbmUgdGhlIHJlY29yZGVkXG4gKiB2YWx1ZTsgdGhlIGBtZXJnZWAgYXJtIHJlYWRzIGEgZGV0YWNoZWQgY29weSBvZiBgdXBkYXRlc2ApLCBzbyB0aGUgcmVzdWx0XG4gKiBzaGFyZXMgbm8gY29udGFpbmVyIHdpdGggYGJhc2VgLCBgdXBkYXRlc2Agb3IgYG92ZXJ3cml0ZWAuIFRoaXMgaXMgdGhlXG4gKiBwdWJsaWMgKGBmb290cHJpbnRqcy90cmFjZWA7IGFsc28gYC9hZHZhbmNlZGAgdW50aWwgMTAuMC4wKSBjb250cmFjdCwgdW5jaGFuZ2VkIGJ5IGNvcHktb24td3JpdGVcbiAqICg5LjI5LjApIOKAlCBieXRlLWlkZW50aWNhbCB0byA5LjI4LjAgZm9yIGV2ZXJ5IGNhbGxlci4gVGhlIGVuZ2luZSdzIG93blxuICogY29tbWl0IGRvZXMgTk9UIGNvbWUgaGVyZTogYFNoYXJlZE1lbW9yeS5hcHBseVBhdGNoYCBidWlsZHMgdGhlIG5leHRcbiAqIGdlbmVyYXRpb24gd2l0aCBgbmV4dEdlbmVyYXRpb25gLCB3aGljaCBjb3BpZXMgb25seSB0aGUgd3JpdHRlblxuICogcGF0aHMuIEJvdGggcnVuIHRoZSBPTkUgZm9sZCwge0BsaW5rIGZvbGRSb3dzfTsgdGhlIHZlcmJzIGFyZVxuICoge0BsaW5rIGFwcGx5VmVyYn0ncy5cbiAqXG4gKiBWZXJiIGFybXMg4oCUIHNlZSB7QGxpbmsgYXBwbHlWZXJifS4gQSByb3cgd2l0aCBhbnkgb3RoZXIgdmVyYiB0aHJvd3NcbiAqIHtAbGluayBVbmtub3duVmVyYkVycm9yfS5cbiAqXG4gKiBXb3JrLCBub3QgYnl0ZXMgKDkuMjIuMSk6IGEgYHNldGAgcm93IHRoZSBORVhUIHJvdyByZS1zZXRzIGlzIHNraXBwZWRcbiAqICh7QGxpbmsgc3VwZXJzZWRlZEJ5TmV4dFNldH0pIOKAlCB0aGUgcm93cyBzdGF5IGluIHRoZSBsb2csIG9ubHkgdGhlIGNsb25lXG4gKiBlYWNoIHdvdWxkIGhhdmUgcGFpZCBpcyBub3QuIEV2ZXJ5IGNvbnN1bWVyIGluaGVyaXRzIHRoZSBza2lwIGZyb21cbiAqIGBmb2xkUm93c2A7IHRoZXJlIGlzIG5vIHNlY29uZCByZXBsYXkgbG9vcCB0byBrZWVwIGluIHN0ZXAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVNtYXJ0TWVyZ2UoYmFzZTogYW55LCB1cGRhdGVzOiBNZW1vcnlQYXRjaCwgb3ZlcndyaXRlOiBNZW1vcnlQYXRjaCwgdHJhY2U6IFRyYWNlRW50cnlbXSk6IGFueSB7XG4gIHJldHVybiBmb2xkUm93cyhzdHJ1Y3R1cmVkQ2xvbmUoYmFzZSksIHVwZGF0ZXMsIG92ZXJ3cml0ZSwgdHJhY2UsICdwcml2YXRlJyk7XG59XG5cbi8qKlxuICogVGhlIGVuZ2luZSdzIGNvbW1pdCAoY29weS1vbi13cml0ZSwgOS4yOS4wIOKAlCBkb2NzL2Rlc2lnbi8yMDI2LTEwLWNvcHktb24tXG4gKiB3cml0ZS1jb21taXQubWQpOiB0aGUgTkVYVCBjb21taXR0ZWQgZ2VuZXJhdGlvbi4gQSBjb3B5IG9mIGBiYXNlYCdzIFJPT1RcbiAqIHBsdXMgYSBjb3B5IG9mIGV2ZXJ5IGNvbnRhaW5lciBvbiBlYWNoIHdyaXR0ZW4gcGF0aDsgZXZlcnkgb3RoZXIgc3VidHJlZVxuICogaXMgU0hBUkVEIHdpdGggYGJhc2VgLCB3aGljaCBpcyBuZXZlciBlZGl0ZWQg4oCUIGNvbW1pdHRlZCBzdGF0ZSBpc1xuICogaW1tdXRhYmxlLWFmdGVyLXN3YXAsIHNvIHNoYXJpbmcgaXMgc2FmZSwgYW5kIGEgY29tbWl0IGNvc3RzIE8od2hhdCBpdFxuICogd3JvdGUpLCBub3QgTyhzdGF0ZSkuIGBTaGFyZWRNZW1vcnkuYXBwbHlQYXRjaGAgKGxpdmUgc3RhdGUgYW5kIHRoZVxuICogcmVkYWN0ZWQgbWlycm9yKSBpcyBpdHMgY2FsbGVyLiBJbnRlcm5hbDogdGhlIHB1YmxpYyByZXBsYXkgaXNcbiAqIHtAbGluayBhcHBseVNtYXJ0TWVyZ2V9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV4dEdlbmVyYXRpb24oYmFzZTogYW55LCB1cGRhdGVzOiBNZW1vcnlQYXRjaCwgb3ZlcndyaXRlOiBNZW1vcnlQYXRjaCwgdHJhY2U6IFRyYWNlRW50cnlbXSk6IGFueSB7XG4gIHJldHVybiBmb2xkUm93cyhvd25lZFJvb3RPZihiYXNlKSwgdXBkYXRlcywgb3ZlcndyaXRlLCB0cmFjZSwgJ3BhdGhDb3B5Jyk7XG59XG5cbi8qKlxuICogVGhlIHNhbWUgcmVwbGF5LCBJTlRPIGB0YXJnZXRgIOKAlCBubyBjbG9uZSBvZiBpdHMgb3duLiBGb3IgYSBjYWxsZXIgdGhhdFxuICogYWxyZWFkeSBob2xkcyBhIHByaXZhdGUgd29ya2luZyBjb3B5ICh0aGUgcmVhZC1zaWRlIGZvbGRzOiBgc3RhdGVBdGAgaW5cbiAqIGB0aW1lLXRyYXZlbC9zdGF0ZUF0LnRzYCBhbmQgYEV2ZW50TG9nLm1hdGVyaWFsaXNlYCBjbG9uZSB0aGVpciBiYXNlIE9OQ0VcbiAqIGFuZCB0aGVuIGFwcGx5IGV2ZXJ5IGJ1bmRsZSBoZXJlKSwgc28gYSBmb2xkIG92ZXIgTiBidW5kbGVzIGNvc3RzIE4gcm93XG4gKiBhcHBsaWNhdGlvbnMsIG5vdCBOIGNsb25lcyBvZiB0aGUgd2hvbGUgc3RhdGUuIE5ldmVyIGhhbmQgaXQgY29tbWl0dGVkXG4gKiBzdGF0ZTogaXQgbXV0YXRlcyB0aGUgUk9PVCBpbiBwbGFjZS4gQmVsb3cgdGhlIHJvb3QgaXQgZm9sbG93cyB0aGUgbGl2ZVxuICogY29tbWl0J3MgbGF3ICh7QGxpbmsgbmV4dEdlbmVyYXRpb259KSDigJQgYSBjb250YWluZXIgdGhpcyBjYWxsIGRpZCBub3RcbiAqIGNyZWF0ZSBpcyBjb3BpZWQgYmVmb3JlIGEgd3JpdGUgcGFzc2VzIHRocm91Z2ggaXQg4oCUIHNvIGEgZm9sZCBhbmQgdGhlIGxpdmVcbiAqIHN0YXRlIGdpdmUgdGhlIHNhbWUgdmFsdWUgYXQgZXZlcnkgcGF0aCwgYWxpYXNlZCBzdWJ0cmVlcyBpbmNsdWRlZC5cbiAqIFRoZSB2YWx1ZXMgaXQgd3JpdGVzIGFyZSBpdHMgb3duLCBzbyBgdGFyZ2V0YCBuZXZlciBhbGlhc2VzIHRoZSBsb2cuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVNtYXJ0TWVyZ2VJbnRvKFxuICB0YXJnZXQ6IGFueSxcbiAgdXBkYXRlczogTWVtb3J5UGF0Y2gsXG4gIG92ZXJ3cml0ZTogTWVtb3J5UGF0Y2gsXG4gIHRyYWNlOiBUcmFjZUVudHJ5W10sXG4pOiBhbnkge1xuICByZXR1cm4gZm9sZFJvd3ModGFyZ2V0LCB1cGRhdGVzLCBvdmVyd3JpdGUsIHRyYWNlLCAncGF0aENvcHknKTtcbn1cblxuLyoqXG4gKiBUaGUgZm9sZCwgZm9yIENPTVBBUklTT04gb25seSAoOS4zMC4wIOKAlCB0aGUgYWRtaXR0ZWQgcmVjb3JkKTogYGJhc2VgIHdpdGhcbiAqIHRoZSBidW5kbGUgcmVwbGF5ZWQgYnkgdGhlIG9uZSB2ZXJiIGxhdywgY29weS1vbi13cml0ZSBiZWxvdyB0aGUgcm9vdCxcbiAqIGV2ZXJ5IHJlY29yZGVkIHZhbHVlIHBsYWNlZCBCWSBSRUZFUkVOQ0Ug4oCUIG5vIGNsb25lLCBzbyBpdCBjb3N0cyB3aGF0IHRoZVxuICogYnVuZGxlIHdyb3RlIGFuZCBub3RoaW5nIG1vcmUuIEl0IGFsaWFzZXMgdGhlIHBheWxvYWQgYW5kIGV2ZXJ5IHN1YnRyZWUgb2ZcbiAqIGBiYXNlYCB0aGUgYnVuZGxlIGRpZCBub3Qgd3JpdGUsIGFuZCBlZGl0cyBuZWl0aGVyLiBOZXZlciBoYW5kIGl0IG91dCxcbiAqIHN0b3JlIGl0IG9yIHdyaXRlIHRocm91Z2ggaXQ6IGBUcmFuc2FjdGlvbkJ1ZmZlcmAgYnVpbGRzIG9uZSB0byBhc2sgd2hldGhlclxuICogYSBidW5kbGUgZm9sZHMgYmFjayB0byB3aGF0IHRoZSBzdGFnZSByZWFkLCB0aGVuIGRyb3BzIGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZHJ5Rm9sZChiYXNlOiBhbnksIHVwZGF0ZXM6IE1lbW9yeVBhdGNoLCBvdmVyd3JpdGU6IE1lbW9yeVBhdGNoLCB0cmFjZTogVHJhY2VFbnRyeVtdKTogYW55IHtcbiAgcmV0dXJuIGZvbGRSb3dzKG93bmVkUm9vdE9mKGJhc2UpLCB1cGRhdGVzLCBvdmVyd3JpdGUsIHRyYWNlLCAnYnlSZWZlcmVuY2UnKTtcbn1cblxuLy8g4pSA4pSA4pSAIFRoZSBmb2xkIG92ZXIgb25lIGtleSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBPbmUgcm93IG9mIHRoZSBsb2cgdW5kZXIgdGhlIGZvbGRlZCBrZXkncyBUT1AtTEVWRUwga2V5IOKAlCB3aGF0IHtAbGluayBmb2xkS2V5fVxuICogYXBwbGllcywgaW4gY29tbWl0IG9yZGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvdWNoIHtcbiAgcmVhZG9ubHkgdmVyYjogVmVyYjtcbiAgcmVhZG9ubHkgYnVuZGxlOiBDb21taXRCdW5kbGU7XG4gIC8qKiBUaGUgYnVuZGxlJ3MgcG9zaXRpb24gaW4gdGhlIGNvbW1pdCBsb2cuICovXG4gIHJlYWRvbmx5IGNvbW1pdElkeDogQ29tbWl0SWR4O1xuICAvKiogVGhlIHJvdydzIG93biBwYXRoIChERUxJTS1qb2luZWQgYFRyYWNlRW50cnkucGF0aGApLiAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBIb3cgdGhlIHJvdyBzaXRzIGFnYWluc3QgdGhlIGZvbGRlZCBrZXkgKGBrZXlQYXRocyDCtyByZWxhdGlvbmApLiBBQlNFTlQgZm9yIGFcbiAgICogcm93IG9uIGFub3RoZXIgcGF0aCB1bmRlciB0aGUgc2FtZSB0b3AtbGV2ZWwga2V5OiBzdWNoIGEgcm93IGlzIEFQUExJRUQgKGFuXG4gICAqIGFycmF5IHVuaW9uIG9uIGEgY29udGFpbmVyIGFib3ZlIHRoZSBrZXkgZGVkdXBzIHRoZSB3aG9sZSBhcnJheSwgc28gYSBzaWJsaW5nXG4gICAqIGNoYW5nZXMgd2hlcmUgaXQgbGVhdmVzIHRoZSBrZXkpIGJ1dCBuZXZlciBvYnNlcnZlZC5cbiAgICovXG4gIHJlYWRvbmx5IHJlbGF0aW9uPzogUGF0aFJlbGF0aW9uO1xufVxuXG4vKiogV2hhdCBhIHJlYWRlciBhc2tzIG9mIHtAbGluayBmb2xkS2V5fS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2V5Rm9sZCB7XG4gIC8qKlxuICAgKiBTdGFydCBhdCB0aGUgTEFTVCByb3cgdGhhdCBzZXRzIG9yIGRlbGV0ZXMgdGhlIHdob2xlIFRPUC1MRVZFTCBrZXkgKHtAbGlua1xuICAgKiBpc1RvdGFsfSwgb24gdGhlIHJvb3QgcGF0aCBpdHNlbGYpIOKAlCByb3dzIGJlZm9yZSBpdCBjYW5ub3QgY2hhbmdlIGFueXRoaW5nXG4gICAqIHVuZGVyIHRoYXQga2V5LCBzbyBhIHJlYWRlciB0aGF0IHdhbnRzIG9ubHkgdGhlIHZhbHVlIHNraXBzIHRoZW0uIEEgYHNldGAgb2ZcbiAgICogYSBwYXRoIGJlbG93IHRoZSByb290IGlzIE5PVCBhbiBhbmNob3I6IGFuIGVhcmxpZXIgc2libGluZyBjYW4gc3RpbGwgbW92ZVxuICAgKiB0aGUga2V5IHRocm91Z2ggYSBsYXRlciB1bmlvbi4gT2ZmIGJ5IGRlZmF1bHQ6IGEgcmVhZGVyIHRoYXQgdHJhY2tzIGhvdyB0aGVcbiAgICogdmFsdWUgR1JFVyBtdXN0IHNlZSBldmVyeSByb3cuXG4gICAqL1xuICByZWFkb25seSBhbmNob3JlZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDYWxsZWQgYWZ0ZXIgZWFjaCBhcHBsaWVkIHJvdyB0aGF0IGhhcyBhIHtAbGluayBUb3VjaC5yZWxhdGlvbn0g4oCUIG9uLCBpbnNpZGVcbiAgICogb3IgYXJvdW5kIHRoZSBrZXkgKGV2ZXJ5IHJvdywgd2l0aCBgZXZlcnlSb3dgKSDigJQgd2l0aCB0aGUgdmFsdWUgQVQgVEhFIEtFWSBiZWZvcmUgaXQgYW5kIGFmdGVyIGl0XG4gICAqIChgdW5kZWZpbmVkYCBmb3IgYW4gYWJzZW50IGtleSkuIFRoZSBzZWFtIGEgcHJvdmVuYW5jZSB0cmFjayBhbmQgdGhlIHdyaXRlclxuICAgKiBydWxlIGhhbmcgb246IHRoZXkgd2F0Y2ggdGhlIGZvbGQsIHRoZXkgbmV2ZXIgaGF2ZSBhIHZlcmIgc3dpdGNoIG9mIHRoZWlyXG4gICAqIG93bi4gRm9yIGEgcm93IElOU0lERSB0aGUga2V5LCBhbiBhcnJheSBgYmVmb3JlYCBpcyBhIHNoYWxsb3cgc25hcHNob3Q6IHRoYXRcbiAgICogcm93IGVkaXRzIHRoZSBmb2xkJ3Mgb3duIGNvcHkgaW4gcGxhY2UuXG4gICAqL1xuICByZWFkb25seSBvYnNlcnZlPzogKHRvdWNoOiBUb3VjaCwgYmVmb3JlOiB1bmtub3duLCBhZnRlcjogdW5rbm93bikgPT4gdm9pZDtcbiAgLyoqXG4gICAqIE9ic2VydmUgRVZFUlkgYXBwbGllZCByb3csIG5vdCBvbmx5IHRoZSBrZXkncyBvd24uIFRoZSB3cml0ZXIgcnVsZSBuZWVkcyBpdDogaXQgY29tcGFyZXMgdGhlIHZhbHVlIGF0IHRoZVxuICAgKiBrZXkgYWNyb3NzIGEgV0hPTEUgY29tbWl0LCBhbmQgYSBzaWJsaW5nIHVuZGVyIHRoZSBzYW1lIHRvcC1sZXZlbCBrZXkgY2FuIG1vdmUgdGhhdCB2YWx1ZSDigJQgYSB3cml0ZVxuICAgKiB0aHJvdWdoIGEgY29udGFpbmVyIHRoYXQgaG9sZHMgYSBwcmltaXRpdmUgcmVwbGFjZXMgdGhlIGNvbnRhaW5lciAoYG5hdGl2ZVNldGApLCBhbmQgd2l0aCBpdCB0aGUga2V5LlxuICAgKi9cbiAgcmVhZG9ubHkgZXZlcnlSb3c/OiBib29sZWFuO1xuICAvKipcbiAgICogS2VlcCBHRU5FUkFUSU9OUyBhdCBjaG9zZW4gY29tbWl0czogYGF0YCBpcyBhc2tlZCBiZWZvcmUgYSBjb21taXQncyBmaXJzdCByb3cgKHdpdGggdGhlIGZvbGQncyBzdGF0ZSBhc1xuICAgKiBpdCBzdGFuZHMpOyBmb3IgYSBjb21taXQgaXQgYWNjZXB0cywgYGtlZXBgIGlzIGhhbmRlZCB0aGUgdmFsdWUgYXQgdGhlIGtleSBiZWZvcmUgdGhlIGNvbW1pdCBhbmQgYWZ0ZXJcbiAgICogaXQg4oCUIGNvcHktb24td3JpdGUgYXJvdW5kIHRoYXQgY29tbWl0ICh0aGUgZm9sZCBkcm9wcyBvd25lcnNoaXAgb2YgZXZlcnkgY29udGFpbmVyIGJlZm9yZSBhbmQgYWZ0ZXIgaXQpLFxuICAgKiBzbyBubyBsYXRlciByb3cgZWRpdHMgZWl0aGVyIHZhbHVlLiBUaGUgd3JpdGVyIHJ1bGUncyBtZW1vaXNlZCByb290IGZvbGQgKGBjb21taXRMb2dVdGlscyDCtyBMb2dNb2RlbGApXG4gICAqIGtlZXBzIHRoZSBjb21taXRzIGEga2V5J3MgdmVyZGljdCBuZWVkcywgb25jZSBwZXIgdG9wLWxldmVsIGtleS5cbiAgICovXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgdGhlIHRvcC1sZXZlbCBrZXkgaG9sZHMgQkVGT1JFIHRoZSBmaXJzdCByb3cg4oCUIGRlZmF1bHQ6IGFic2VudC4gTmV2ZXIgZWRpdGVkOiB0aGUgZm9sZCBjb3BpZXNcbiAgICogaXQgYmVmb3JlIHdyaXRpbmcgdGhyb3VnaCBpdC4gYGNvbW1pdFZhbHVlQXRgIG9uIGEgbWVtb2lzZWQgbG9nIHN0YXJ0cyBmcm9tIGEga2VwdCBnZW5lcmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhcnQ/OiB1bmtub3duO1xuICByZWFkb25seSBnZW5lcmF0aW9ucz86IHtcbiAgICBhdChjb21taXRJZHg6IG51bWJlciwgc3RhdGU6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pik6IGJvb2xlYW47XG4gICAga2VlcChjb21taXRJZHg6IG51bWJlciwgYmVmb3JlOiB1bmtub3duLCBhZnRlcjogdW5rbm93bik6IHZvaWQ7XG4gIH07XG59XG5cbi8qKlxuICogVGhlIHZhbHVlIG9mIE9ORSBrZXkgYWZ0ZXIgYHRvdWNoZXNgIOKAlCBFVkVSWSByb3cgdW5kZXIgaXRzIHRvcC1sZXZlbCBrZXksIGluXG4gKiBjb21taXQgb3JkZXIsIGVhY2ggYWxyZWFkeSBjaGVja2VkIHdpdGgge0BsaW5rIGlzVmVyYn0g4oCUIGZvbGRlZCBmcm9tIGFuIGFic2VudFxuICoga2V5LCByZWFkIGF0IHRoZSBrZXkgKGBzZWdzYCwgaXRzIERFTElNIHNlZ21lbnRzKTogdGhlIHZhbHVlIHJ1bGUgb2ZcbiAqIGBrZXlQYXRocy50c2AsIHRoZSBmb2xkIGBzdGF0ZUF0YCBkb2VzIHJlc3RyaWN0ZWQgdG8gb25lIHRvcC1sZXZlbCBrZXkuIFRvcC1sZXZlbFxuICoga2V5cyBuZXZlciBpbnRlcmFjdCB1bmRlciB0aGUgc3RlcCwgc28gdGhlIHJlc3RyaWN0aW9uIGlzIGV4YWN0LlxuICpcbiAqIFRoZSBzYW1lIHN0ZXAgKHtAbGluayBhcHBseVZlcmJ9KSBhbmQgdGhlIHNhbWUgZGlzY2lwbGluZSBhcyB7QGxpbmsgZm9sZFJvd3N9J3NcbiAqIGAncGF0aENvcHknYDogYHNldGAgLyBgYXBwZW5kYCB2YWx1ZXMgYXJlIGNsb25lcywgdGhlIG1lcmdlIGRlbHRhIGlzIGRldGFjaGVkXG4gKiBvbmNlIHBlciBCVU5ETEUgKG5hcnJvd2VkIHRvIHRoZSB0b3AtbGV2ZWwga2V5KSwgc28gdHdvIGBtZXJnZWAgcm93cyBvZiBvbmVcbiAqIGJ1bmRsZSBzZWUgdGhlIHNhbWUgb2JqZWN0cywgYW5kIGEgcm93IHRoYXQgd3JpdGVzIHRocm91Z2ggYSBjb250YWluZXIgdGhpc1xuICogZm9sZCBkaWQgbm90IGNyZWF0ZSBjb3BpZXMgaXQgZmlyc3QuIFJldHVybnMgYHVuZGVmaW5lZGAgZm9yIGFuIGFic2VudCBrZXkuXG4gKiBPKHRoZSByb3dzIHVuZGVyIHRoZSBrZXkncyB0b3AtbGV2ZWwga2V5KSwgbm90IE8odGhlIGxvZykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb2xkS2V5KHRvdWNoZXM6IHJlYWRvbmx5IFRvdWNoW10sIHNlZ3M6IHN0cmluZ1tdLCBvcHRpb25zOiBLZXlGb2xkID0ge30pOiB1bmtub3duIHtcbiAgY29uc3Qgcm9vdCA9IHNlZ3NbMF07XG4gIGxldCBmcm9tID0gMDtcbiAgaWYgKG9wdGlvbnMuYW5jaG9yZWQgPT09IHRydWUpIHtcbiAgICBmb3IgKGxldCBpID0gdG91Y2hlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKGlzVG90YWwodG91Y2hlc1tpXS52ZXJiKSAmJiB0b3VjaGVzW2ldLnBhdGggPT09IHJvb3QpIHtcbiAgICAgICAgZnJvbSA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCBzdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgaWYgKG9wdGlvbnMuc3RhcnQgIT09IHVuZGVmaW5lZCkgc3RhdGVbcm9vdF0gPSBvcHRpb25zLnN0YXJ0O1xuICBsZXQgb3duZWQgPSBuZXcgV2Vha1NldDxvYmplY3Q+KCk7XG4gIG93bmVkLmFkZChzdGF0ZSk7XG4gIGNvbnN0IG9ic2VydmUgPSBvcHRpb25zLm9ic2VydmU7XG4gIGNvbnN0IGdlbmVyYXRpb25zID0gb3B0aW9ucy5nZW5lcmF0aW9ucztcbiAgbGV0IGtlcHQgPSAtMTtcbiAgbGV0IGtlcHRCZWZvcmU6IHVua25vd247XG4gIC8qKiBEcm9wIG93bmVyc2hpcCBvZiBldmVyeSBjb250YWluZXI6IHRoZSBuZXh0IHdyaXRlIHRocm91Z2ggb25lIGNvcGllcyBpdCwgc28gYSBrZXB0IHZhbHVlIHN0YXlzIGFzIGl0IGlzLiAqL1xuICBjb25zdCByZWxlYXNlID0gKCkgPT4ge1xuICAgIG93bmVkID0gbmV3IFdlYWtTZXQ8b2JqZWN0PigpO1xuICAgIG93bmVkLmFkZChzdGF0ZSk7XG4gIH07XG4gIGxldCBhdDogUmVjb3JkZWRQYXlsb2FkIHwgdW5kZWZpbmVkO1xuICBsZXQgYXRDb21taXQgPSAtMTtcbiAgZm9yIChsZXQgaSA9IGZyb207IGkgPCB0b3VjaGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgdG91Y2ggPSB0b3VjaGVzW2ldO1xuICAgIGlmIChhdCA9PT0gdW5kZWZpbmVkIHx8IHRvdWNoLmNvbW1pdElkeCAhPT0gYXRDb21taXQpIHtcbiAgICAgIGlmIChrZXB0ICE9PSAtMSkge1xuICAgICAgICBnZW5lcmF0aW9ucyEua2VlcChrZXB0LCBrZXB0QmVmb3JlLCBuYXRpdmVHZXQoc3RhdGUsIHNlZ3MpKTtcbiAgICAgICAga2VwdCA9IC0xO1xuICAgICAgICByZWxlYXNlKCk7XG4gICAgICB9XG4gICAgICBpZiAoZ2VuZXJhdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBnZW5lcmF0aW9ucy5hdCh0b3VjaC5jb21taXRJZHgsIHN0YXRlKSkge1xuICAgICAgICByZWxlYXNlKCk7XG4gICAgICAgIGtlcHQgPSB0b3VjaC5jb21taXRJZHg7XG4gICAgICAgIGtlcHRCZWZvcmUgPSBuYXRpdmVHZXQoc3RhdGUsIHNlZ3MpO1xuICAgICAgfVxuICAgICAgYXQgPSBuZXcgUmVjb3JkZWRQYXlsb2FkKHRvdWNoLmJ1bmRsZS51cGRhdGVzLCB0b3VjaC5idW5kbGUub3ZlcndyaXRlLCB0cnVlLCBbcm9vdF0pO1xuICAgICAgYXRDb21taXQgPSB0b3VjaC5jb21taXRJZHg7XG4gICAgfVxuICAgIGNvbnN0IHJvd1NlZ3MgPSB0b3VjaC5wYXRoID09PSByb290ID8gW3Jvb3RdIDogdG91Y2gucGF0aC5zcGxpdChERUxJTSk7XG4gICAgY29uc3Qgd2F0Y2hlZCA9IG9ic2VydmUgIT09IHVuZGVmaW5lZCAmJiAodG91Y2gucmVsYXRpb24gIT09IHVuZGVmaW5lZCB8fCBvcHRpb25zLmV2ZXJ5Um93ID09PSB0cnVlKTtcbiAgICBsZXQgYmVmb3JlOiB1bmtub3duO1xuICAgIGlmICh3YXRjaGVkKSB7XG4gICAgICBiZWZvcmUgPSBuYXRpdmVHZXQoc3RhdGUsIHNlZ3MpO1xuICAgICAgaWYgKHRvdWNoLnJlbGF0aW9uID09PSAnaW5zaWRlJyAmJiBBcnJheS5pc0FycmF5KGJlZm9yZSkpIGJlZm9yZSA9IGJlZm9yZS5zbGljZSgpO1xuICAgIH1cbiAgICBpZiAocm93U2Vncy5sZW5ndGggPiAxKSBvd25TcGluZShzdGF0ZSwgcm93U2Vncywgb3duZWQpO1xuICAgIC8vIEEgdG90YWwgdmVyYiByZWFkcyBub3RoaW5nIGZyb20gd2hhdCBjYW1lIGJlZm9yZSBpdCAoaXNUb3RhbCkuXG4gICAgY29uc3QgbmV4dCA9IGFwcGx5VmVyYih0b3VjaC52ZXJiLCBpc1RvdGFsKHRvdWNoLnZlcmIpID8gdW5kZWZpbmVkIDogbmF0aXZlR2V0KHN0YXRlLCByb3dTZWdzKSwgYXQsIHJvd1NlZ3MpO1xuICAgIG93bihuZXh0LCBvd25lZCk7XG4gICAgcGxhY2VWZXJiKHN0YXRlLCByb3dTZWdzLCBuZXh0KTtcbiAgICBpZiAod2F0Y2hlZCkgb2JzZXJ2ZSh0b3VjaCwgYmVmb3JlLCBuYXRpdmVHZXQoc3RhdGUsIHNlZ3MpKTtcbiAgfVxuICBpZiAoa2VwdCAhPT0gLTEpIGdlbmVyYXRpb25zIS5rZWVwKGtlcHQsIGtlcHRCZWZvcmUsIG5hdGl2ZUdldChzdGF0ZSwgc2VncykpO1xuICByZXR1cm4gbmF0aXZlR2V0KHN0YXRlLCBzZWdzKTtcbn1cbiJdfQ==
|
package/dist/esm/trace.d.ts
CHANGED
|
@@ -36,6 +36,8 @@ export type { WalkerItem, WalkerOptions } from './lib/engine/walkSubflowSpec.js'
|
|
|
36
36
|
export { walkSubflowSpec } from './lib/engine/walkSubflowSpec.js';
|
|
37
37
|
export { pathSegments } from './lib/memory/utils.js';
|
|
38
38
|
export { UnknownVerbError } from './lib/memory/index.js';
|
|
39
|
+
export type { CommitBundle, MemoryPatch, TraceEntry } from './lib/memory/types.js';
|
|
40
|
+
export { applySmartMerge } from './lib/memory/verbs.js';
|
|
39
41
|
export type { ValueBasis, ValueBasisOptions, ValueWithBasis, WriterBasis, WriterWithBasis, } from './lib/memory/commitLogUtils.js';
|
|
40
42
|
export { buildCommitIndex, commitIndexOf, commitValueAt, commitValueAtWithBasis, findCommit, findCommits, findLastWriter, findLastWriterWithBasis, inferLegacyPhases, recordsPhases, } from './lib/memory/commitLogUtils.js';
|
|
41
43
|
export type { CommitPhase } from './lib/memory/types.js';
|