@datagrok-libraries/statistics 1.5.0 → 1.6.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/package.json CHANGED
@@ -4,8 +4,12 @@
4
4
  "access": "public"
5
5
  },
6
6
  "friendlyName": "statistics",
7
- "version": "1.5.0",
7
+ "version": "1.6.0",
8
8
  "description": "Statistics utilities",
9
+ "author": {
10
+ "name": "Dmytro Kovalyov",
11
+ "email": "dkovalyov@datagrok.ai"
12
+ },
9
13
  "dependencies": {
10
14
  "@datagrok-libraries/utils": "^4.3.0",
11
15
  "cash-dom": "^8.0.0",
@@ -16,10 +20,10 @@
16
20
  "@types/seedrandom": "^3.0.8"
17
21
  },
18
22
  "devDependencies": {
19
- "@typescript-eslint/eslint-plugin": "latest",
20
- "@typescript-eslint/parser": "latest",
21
- "eslint": "latest",
22
- "eslint-config-google": "latest",
23
+ "@typescript-eslint/eslint-plugin": "^8.8.1",
24
+ "@typescript-eslint/parser": "^8.8.1",
25
+ "eslint": "^8.57.1",
26
+ "eslint-config-google": "^0.14.0",
23
27
  "ts-loader": "^9.2.6",
24
28
  "typescript": "^4.2.3"
25
29
  },
@@ -36,4 +40,4 @@
36
40
  "lint-fix": "eslint src --ext .ts --fix",
37
41
  "build-all": "npm --prefix ./../../js-api run build && npm --prefix ./../../libraries/utils run build && npm run build"
38
42
  }
39
- }
43
+ }
@@ -1,4 +1,4 @@
1
- export declare type BoxPlotStatistics = {
1
+ export type BoxPlotStatistics = {
2
2
  q1: number;
3
3
  q2: number;
4
4
  q3: number;
@@ -1 +1 @@
1
- {"version":3,"file":"box-plot-statistics.d.ts","sourceRoot":"","sources":["box-plot-statistics.ts"],"names":[],"mappings":"AACA,oBAAY,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAGF,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAiC9E"}
1
+ {"version":3,"file":"box-plot-statistics.d.ts","sourceRoot":"","sources":["box-plot-statistics.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAGF,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAiC9E"}
@@ -1,4 +1,4 @@
1
- export declare type Confidence = {
1
+ export type Confidence = {
2
2
  central: number;
3
3
  top: number;
4
4
  bottom: number;
@@ -1 +1 @@
1
- {"version":3,"file":"confidence-intervals.d.ts","sourceRoot":"","sources":["confidence-intervals.ts"],"names":[],"mappings":"AAGA,oBAAY,UAAU,GAAG;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,eAAe,GAAE,MAAa,EAAE,UAAU,GAAE,OAAc,GACnG,UAAU,CA8BX"}
1
+ {"version":3,"file":"confidence-intervals.d.ts","sourceRoot":"","sources":["confidence-intervals.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,eAAe,GAAE,MAAa,EAAE,UAAU,GAAE,OAAc,GACnG,UAAU,CA8BX"}
@@ -4,7 +4,7 @@ export declare const FitErrorModel: {
4
4
  PROPORTIONAL: string;
5
5
  COMBINED: string;
6
6
  };
7
- export declare type FitParamBounds = {
7
+ export type FitParamBounds = {
8
8
  min?: number;
9
9
  max?: number;
10
10
  };
@@ -16,15 +16,15 @@ export interface IFitFunctionDescription {
16
16
  getInitialParameters: string;
17
17
  parameterNames: string[];
18
18
  }
19
- export declare type FitCurve = {
19
+ export type FitCurve = {
20
20
  fittedCurve: (x: number) => number;
21
21
  parameters: Float32Array;
22
22
  };
23
- export declare type FitConfidenceIntervals = {
23
+ export type FitConfidenceIntervals = {
24
24
  confidenceTop: (x: number) => number;
25
25
  confidenceBottom: (x: number) => number;
26
26
  };
27
- export declare type FitStatistics = {
27
+ export type FitStatistics = {
28
28
  rSquared?: number;
29
29
  auc?: number;
30
30
  interceptX?: number;
@@ -33,15 +33,15 @@ export declare type FitStatistics = {
33
33
  top?: number;
34
34
  bottom?: number;
35
35
  };
36
- export declare type FitInvertedFunctions = {
36
+ export type FitInvertedFunctions = {
37
37
  inverted: (y: number) => number;
38
38
  invertedTop: (y: number) => number;
39
39
  invertedBottom: (y: number) => number;
40
40
  };
41
- export declare type FitMarkerType = 'asterisk' | 'circle' | 'cross border' | 'diamond' | 'square' | 'star' | 'triangle bottom' | 'triangle left' | 'triangle right' | 'triangle top';
42
- export declare type FitOutlierMarkerType = 'asterisk' | 'circle' | 'cross border' | 'diamond' | 'outlier' | 'square' | 'star' | 'triangle bottom' | 'triangle left' | 'triangle right' | 'triangle top';
43
- export declare type FitLineStyle = 'solid' | 'dotted' | 'dashed' | 'dashdotted';
44
- export declare type FitErrorModelType = 'constant' | 'proportional' | 'combined';
41
+ export type FitMarkerType = 'asterisk' | 'circle' | 'cross border' | 'diamond' | 'square' | 'star' | 'triangle bottom' | 'triangle left' | 'triangle right' | 'triangle top';
42
+ export type FitOutlierMarkerType = 'asterisk' | 'circle' | 'cross border' | 'diamond' | 'outlier' | 'square' | 'star' | 'triangle bottom' | 'triangle left' | 'triangle right' | 'triangle top';
43
+ export type FitLineStyle = 'solid' | 'dotted' | 'dashed' | 'dashdotted';
44
+ export type FitErrorModelType = 'constant' | 'proportional' | 'combined';
45
45
  /** A point in the fit series. Only x and y are required. Can override some fields defined in IFitSeriesOptions. */
46
46
  export interface IFitPoint {
47
47
  x: number;
@@ -96,6 +96,7 @@ export declare class FitChartData implements IFitChartData {
96
96
  }
97
97
  /** Series options can be either applied globally on a column level, or partially overridden in particular series */
98
98
  export interface IFitSeriesOptions {
99
+ [key: string]: any;
99
100
  name?: string;
100
101
  fitFunction?: string | IFitFunctionDescription;
101
102
  parameters?: number[];
@@ -1 +1 @@
1
- {"version":3,"file":"fit-curve.d.ts","sourceRoot":"","sources":["fit-curve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fit-curve.d.ts","sourceRoot":"","sources":["fit-curve.ts"],"names":[],"mappings":"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"}
@@ -171,12 +171,12 @@ export const fitFunctions = {
171
171
  /** Properties that describe {@link FitStatistics}. Useful for editing, initialization, transformations, etc. */
172
172
  export const statisticsProperties = [
173
173
  DG.Property.js('rSquared', DG.TYPE.FLOAT, { userEditable: false }),
174
- DG.Property.js('auc', DG.TYPE.FLOAT, { userEditable: false }),
174
+ DG.Property.js('auc', DG.TYPE.FLOAT, { userEditable: false, friendlyName: 'AUC' }),
175
175
  DG.Property.js('interceptY', DG.TYPE.FLOAT, { userEditable: false }),
176
176
  DG.Property.js('interceptX', DG.TYPE.FLOAT, { userEditable: false }),
177
177
  DG.Property.js('slope', DG.TYPE.FLOAT, { userEditable: false }),
178
- DG.Property.js('top', DG.TYPE.FLOAT, { userEditable: false }),
179
- DG.Property.js('bottom', DG.TYPE.FLOAT, { userEditable: false }),
178
+ DG.Property.js('top', DG.TYPE.FLOAT, { userEditable: false, friendlyName: 'Max Y' }),
179
+ DG.Property.js('bottom', DG.TYPE.FLOAT, { userEditable: false, friendlyName: 'Min Y' }),
180
180
  ];
181
181
  /** Properties that describe {@link IFitChartOptions}. Useful for editing, initialization, transformations, etc. */
182
182
  export const fitChartDataProperties = [
@@ -516,9 +516,9 @@ function getSigmasForCombinedErrorModel(sigmaA, sigmaB, residuesSquares, pred) {
516
516
  const sigmaACombined = sigmaA * proportion;
517
517
  const sigmaBCombined = sigmaA * (1 - proportion);
518
518
  const sigmaSqICombined = [];
519
- for (let i = 0; i < residuesSquares.length; i++) {
520
- sigmaSqICombined[i] = Math.pow(sigmaACombined + sigmaBCombined * pred[i], 2);
521
- likelihoodCombinedLocal += residuesSquares[i] / sigmaSqICombined[i] + Math.log(2 * Math.PI * sigmaSqICombined[i]);
519
+ for (let j = 0; j < residuesSquares.length; j++) {
520
+ sigmaSqICombined[j] = Math.pow(sigmaACombined + sigmaBCombined * pred[j], 2);
521
+ likelihoodCombinedLocal += residuesSquares[j] / sigmaSqICombined[j] + Math.log(2 * Math.PI * sigmaSqICombined[j]);
522
522
  }
523
523
  if (likelihoodCombinedLocal < likelihoodCombined) {
524
524
  likelihoodCombined = likelihoodCombinedLocal;
@@ -529,4 +529,4 @@ function getSigmasForCombinedErrorModel(sigmaA, sigmaB, residuesSquares, pred) {
529
529
  sigmaA = sigmaA * finalProportion;
530
530
  return { sigmaA, sigmaB };
531
531
  }
532
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml0LWN1cnZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZml0LWN1cnZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRCQUE0QjtBQUM1QixvQ0FBb0M7QUFDcEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxzQkFBc0I7QUFDdEIsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDNUUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFJL0UsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHO0lBQzNCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLFlBQVksRUFBRSxjQUFjO0lBQzVCLFFBQVEsRUFBRSxVQUFVO0NBQ3JCLENBQUM7QUEwQ0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBb0JFO0FBRUYsTUFBTSxTQUFTLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQXFFM0IsNERBQTREO0FBQzVELE1BQU0sT0FBTyxZQUFZO0lBQXpCO1FBQ0UsaUJBQVksR0FBcUIsRUFBRSxDQUFDO1FBQ3BDLGtCQUFhLEdBQXNCLEVBQUUsQ0FBQyxDQUFFLDZEQUE2RDtRQUNyRyxXQUFNLEdBQWlCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0NBQUE7QUF5QkQsK0VBQStFO0FBRS9FLDRFQUE0RTtBQUM1RSxrQ0FBa0M7QUFDbEMsTUFBTSxPQUFnQixXQUFXO0NBS2hDO0FBRUQsZ0RBQWdEO0FBQ2hELE1BQU0sT0FBTyxjQUFlLFNBQVEsV0FBVztJQUM3QyxJQUFJLElBQUk7UUFDTixPQUFPLG1CQUFtQixDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsQ0FBQyxDQUFDLE1BQW9CLEVBQUUsQ0FBUztRQUMvQixPQUFPLE1B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OUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDO0lBQ3ZELEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUN2RCxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUM7SUFDdkQsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDO0lBQ3ZELEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUN6RCxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBQyxXQUFXLEVBQ3RELHVGQUF1RixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUMzRyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBQyxXQUFXLEVBQ3RELHVGQUF1RixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUMzRyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBQyxXQUFXLEVBQUUsMENBQTBDLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQ3BILEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFDLFdBQVcsRUFBRSwwQ0FBMEMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFDcEgsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUMsV0FBVyxFQUFFLHNEQUFzRCxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUN2SSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBQyxXQUFXLEVBQUUsbURBQW1ELEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQ3BJLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUMsV0FBVyxFQUFFLHVEQUF1RCxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUMsQ0FBQztJQUM1SSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFDLFdBQVcsRUFBRSxnREFBZ0Q7UUFDbEgsT0FBTyxFQUFFLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBRSxhQUFhO1FBQzlFLFlBQVk7UUFDWixZQUFZLEVBQUUsWUFBWSxFQUFDLENBQUM7Q0FDL0IsQ0FBQztBQUVGLG9IQUFvSDtBQUNwSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBa0I7SUFDaEQsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUMxQyxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBQyxDQUFDO0lBQ3JGLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFDekMsRUFBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBQyxDQUFDO0lBQzlELEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFDM0MsRUFBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBQyxDQUFDO0lBQzlELEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFDM0MsRUFBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBQyxDQUFDO0lBQzlELEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFVBQVU7UUFDekYsT0FBTyxFQUFFLENBQUMsVUFBVSxFQUFFLGNBQWMsRUFBRSxVQUFVLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFDdEUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFDdkYsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMs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RSxDQUFDLENBQUMsQ0FBQztZQUM3RSx1QkFBdUIsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ25IO1FBQ0QsSUFBSSx1QkFBdUIsR0FBRyxrQkFBa0IsRUFBRTtZQUNoRCxrQkFBa0IsR0FBRyx1QkFBdUIsQ0FBQztZQUM3QyxlQUFlLEdBQUcsVUFBVSxDQUFDO1NBQzlCO0tBQ0Y7SUFDRCxNQUFNLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sR0FBRyxNQUFNLEdBQUcsZUFBZSxDQUFDO0lBRWxDLE9BQU8sRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFDLENBQUM7QUFDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW11bHRpLXNwYWNlcyAqL1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbi8vQHRzLWlnbm9yZTogbm8gdHlwZXNcbmltcG9ydCAqIGFzIGpTdGF0IGZyb20gJ2pzdGF0JztcbmltcG9ydCB7cGVyZm9ybU5lbGRlck1lYWRPcHRpbWl6YXRpb259IGZyb20gJy4vZml0dGluZy1hbGdvcml0aG0vb3B0aW1pemVyJztcbmltcG9ydCB7TkVMREVSX01FQURfREVGQVVMVFN9IGZyb20gJy4vZml0dGluZy1hbGdvcml0aG0vb3B0aW1pemVyLW5lbGRlci1tZWFkJztcbmltcG9ydCB7RXh0cmVtdW0sIE9wdGltaXphdGlvblJlc3VsdH0gZnJvbSAnLi9maXR0aW5nLWFsZ29yaXRobS9vcHRpbWl6ZXItbWlzYyc7XG5cblxuZXhwb3J0IGNvbnN0IEZpdEVycm9yTW9kZWwgPSB7XG4gIENPTlNUQU5UOiAnY29uc3RhbnQnLFxuICBQUk9QT1JUSU9OQUw6ICdwcm9wb3J0aW9uYWwnLFxuICBDT01CSU5FRDogJ2NvbWJpbmVkJyxcbn07XG5cbmV4cG9ydCB0eXBlIEZpdFBhcmFtQm91bmRzID0ge1xuICBtaW4/OiBudW1iZXI7XG4gIG1heD86IG51bWJlcjtcbn07XG5cbi8qKiBGaXQgZnVuY3Rpb24gZGVzY3JpcHRpb24uIEFwcGxpZXMgdG8gY3VzdG9tIHVzZXIgZml0IGZ1bmN0aW9ucy5cbiAqIFJlcXVpcmVzIEpTIGFycm93IGZ1bmN0aW9ucyBmb3IgdGhlIGZpdCBmdW5jdGlvbnMgYW5kIGluaXRpYWwgcGFyYW1ldGVycy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZpdEZ1bmN0aW9uRGVzY3JpcHRpb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGZ1bmN0aW9uOiBzdHJpbmc7XG4gIGdldEluaXRpYWxQYXJhbWV0ZXJzOiBzdHJpbmc7XG4gIHBhcmFtZXRlck5hbWVzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IHR5cGUgRml0Q3VydmUgPSB7XG4gIGZpdHRlZEN1cnZlOiAoeDogbnVtYmVyKSA9PiBudW1iZXI7XG4gIHBhcmFtZXRlcnM6IEZsb2F0MzJBcnJheTtcbn07XG5cbmV4cG9ydCB0eXBlIEZpdENvbmZpZGVuY2VJbnRlcnZhbHMgPSB7XG4gIGNvbmZpZGVuY2VUb3A6ICh4OiBudW1iZXIpID0+IG51bWJlcjtcbiAgY29uZmlkZW5jZUJvdHRvbTogKHg6IG51bWJlcikgPT4gbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgRml0U3RhdGlzdGljcyA9IHtcbiAgclNxdWFyZWQ/OiBudW1iZXIsXG4gIGF1Yz86IG51bWJlcixcbiAgaW50ZXJjZXB0WD86IG51bWJlciwgLy8gcGFyYW1ldGVyc1syXVxuICBpbnRlcmNlcHRZPzogbnVtYmVyLCAvLyBmaXR0ZWRDdXJ2ZVtwYXJhbWV0ZXJzWzJdXVxuICBzbG9wZT86IG51bWJlciwgLy8gcGFyYW1ldGVyc1sxXVxuICB0b3A/OiBudW1iZXIsIC8vIHBhcmFtZXRlcnNbMF1cbiAgYm90dG9tPzogbnVtYmVyLCAvLyBwYXJhbWV0ZXJzWzNdXG59O1xuXG5leHBvcnQgdHlwZSBGaXRJbnZlcnRlZEZ1bmN0aW9ucyA9IHtcbiAgaW52ZXJ0ZWQ6ICh5OiBudW1iZXIpID0+IG51bWJlcixcbiAgaW52ZXJ0ZWRUb3A6ICh5OiBudW1iZXIpID0+IG51bWJlcixcbiAgaW52ZXJ0ZWRCb3R0b206ICh5OiBudW1iZXIpID0+IG51bWJlcixcbn07XG5cbi8qKlxuICogIERhdGFncm9rIGN1cnZlIGZpdHRpbmdcbiAqXG4gKiAtIEZpdHRpbmc6IGNvbXB1dGluZyBwYXJhbWV0ZXJzIG9mIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gdG8gYmVzdCBmaXQgdGhlIGRhdGFcbiAqICAgLSBVc2VzIEJGR1Mgb3B0aW1pemF0aW9uIGFsZ29yaXRobSAobXVsdGktdGhyZWFkaW5nIGZvciBwZXJmb3JtYW5jZSkuXG4gKiAgICAgRm9yIGRvc2UtcmVzcG9uc2UgY3VydmVzLCB3ZSBhcmUgdHlwaWNhbGx5IGZpdHRpbmcgdGhlIHNpZ21vaWQgZnVuY3Rpb25cbiAqICAgLSBBYmlsaXR5IHRvIGR5bmFtaWNhbGx5IHJlZ2lzdGVyIGN1c3RvbSBmaXR0aW5nIGZ1bmN0aW9uc1xuICogICAgIC0gQXV0b21hdGljIGZpdCBmdW5jdGlvbiBkZXRlcm1pbmF0aW9uXG4gKiAgICAgLSBDYWNoaW5nIG9mIGN1c3RvbSBmaXR0aW5nIGZ1bmN0aW9uc1xuICogICAtIEFiaWxpdHkgdG8gZ2V0IGZpdHRpbmcgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIChyLXNxdWFyZWQsIGNsYXNzaWZpY2F0aW9uLCBldGMpXG4gKiAtIERlZXAgaW50ZWdyYXRpb24gd2l0aCB0aGUgRGF0YWdyb2sgZ3JpZFxuICogICAtIEVpdGhlciBmaXR0aW5nIG9uIHRoZSBmbHksIG9yIHVzaW5nIHRoZSBzdXBwbGllZCBmdW5jdGlvbiArIHBhcmFtZXRlcnNcbiAqICAgLSBNdWx0aXBsZSBzZXJpZXMgaW4gb25lIGNlbGxcbiAqICAgLSBDYW5kbGVzdGlja3MsIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLCBhbmQgZHJvcGxpbmVzIGRyYXdpbmdcbiAqICAgLSBBYmlsaXR5IHRvIGRlZmluZSBjaGFydCwgbWFya2VyLCBvciBmaXR0aW5nIG9wdGlvbnMgKHN1Y2ggYXMgZml0IGZ1bmN0aW9uIG9yIG1hcmtlciBjb2xvcilcbiAqICAgICBvbiB0aGUgY29sdW1uIGxldmVsLCB3aXRoIHRoZSBhYmlsaXR5IHRvIG92ZXJyaWRlIGl0IG9uIGEgZ3JpZCBjZWxsIG9yIHBvaW50IGxldmVsXG4gKiAgIC0gQ2xpY2tpbmcgYSBwb2ludCBpbiBhIGNoYXJ0IHdpdGhpbiBhIGdyaWQgbWFrZXMgaXQgYW4gb3V0bGllciAtPiBjdXJ2ZSBpcyByZS1maXR0ZWQgb24gdGhlIGZseVxuICogICAtIEFiaWxpdHkgdG8gc3BlY2lmeSBhIGNoYXJ0IGFzIFwicmVmZXJlbmNlXCIgc28gdGhhdCBpdCBpcyBzaG93biBvbiBldmVyeSBvdGhlciBjaGFydCBmb3IgY29tcGFyaXNvblxuICogLSBBYmlsaXR5IHRvIG92ZXJsYXkgY3VydmVzIGZyb20gbXVsdGlwbGUgZ3JpZCBjZWxscyAoc3BlY2lhbCB2aWV3ZXIpXG4gKiAtIFdvcmsgd2l0aCBzZXJpZXMgc3RvcmVkIGluIG11bHRpcGxlIGZvcm1hdHMgKGJpbmFyeSBmb3IgcGVyZm9ybWFuY2UsIGpzb24gZm9yIGZsZXhpYmlsaXR5LCBldGMpXG4qL1xuXG5jb25zdCBEUk9QTElORVMgPSBbJ0lDNTAnXTtcblxuZXhwb3J0IHR5cGUgRml0TWFya2VyVHlwZSA9ICdhc3RlcmlzaycgfCAnY2lyY2xlJyB8ICdjcm9zcyBib3JkZXInIHwgJ2RpYW1vbmQnIHwgJ3NxdWFyZScgfCAnc3RhcicgfCAndHJpYW5nbGUgYm90dG9tJyB8XG4gICd0cmlhbmdsZSBsZWZ0JyB8ICd0cmlhbmdsZSByaWdodCcgfCAndHJpYW5nbGUgdG9wJztcblxuZXhwb3J0IHR5cGUgRml0T3V0bGllck1hcmtlclR5cGUgPSAnYXN0ZXJpc2snIHwgJ2NpcmNsZScgfCAnY3Jvc3MgYm9yZGVyJyB8ICdkaWFtb25kJyB8ICdvdXRsaWVyJyB8ICdzcXVhcmUnIHwgJ3N0YXInIHxcbiAgJ3RyaWFuZ2xlIGJvdHRvbScgfCAndHJpYW5nbGUgbGVmdCcgfCAndHJpYW5nbGUgcmlnaHQnIHwgJ3RyaWFuZ2xlIHRvcCc7XG5cbmV4cG9ydCB0eXBlIEZpdExpbmVTdHlsZSA9ICdzb2xpZCcgfCAnZG90dGVkJyB8ICdkYXNoZWQnIHwgJ2Rhc2hkb3R0ZWQnO1xuXG5leHBvcnQgdHlwZSBGaXRFcnJvck1vZGVsVHlwZSA9ICdjb25zdGFudCcgfCAncHJvcG9ydGlvbmFsJyB8ICdjb21iaW5lZCc7XG5cbi8qKiBBIHBvaW50IGluIHRoZSBmaXQgc2VyaWVzLiBPbmx5IHggYW5kIHkgYXJlIHJlcXVpcmVkLiBDYW4gb3ZlcnJpZGUgc29tZSBmaWVsZHMgZGVmaW5lZCBpbiBJRml0U2VyaWVzT3B0aW9ucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZpdFBvaW50IHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIG91dGxpZXI/OiBib29sZWFuOyAgICAgICAvLyBpZiB0cnVlLCByZW5kZXJzIGFzICd4JyBhbmQgZ2V0cyBpZ25vcmVkIGZvciBjdXJ2ZSBmaXR0aW5nXG4gIGNvbG9yPzogc3RyaW5nOyAgICAgICAgICAvLyBvdmVycmlkZXMgdGhlIG1hcmtlciBjb2xvciBkZWZpbmVkIGluIElGaXRTZXJpZXNPcHRpb25zXG4gIG91dGxpZXJDb2xvcj86IHN0cmluZzsgICAvLyBvdmVycmlkZXMgdGhlIG91dGxpZXIgY29sb3IgZGVmaW5lZCBpbiBJRml0U2VyaWVzT3B0aW9uc1xuICBtYXJrZXI/OiBGaXRNYXJrZXJUeXBlOyAgLy8gb3ZlcnJpZGVzIHRoZSBtYXJrZXIgdHlwZSBkZWZpbmVkIGluIElGaXRTZXJpZXNPcHRpb25zXG4gIG91dGxpZXJNYXJrZXI/OiBGaXRPdXRsaWVyTWFya2VyVHlwZTsgLy8gb3ZlcnJpZGVzIHRoZSBvdXRsaWVyIG1hcmtlciB0eXBlIGRlZmluZWQgaW4gSUZpdFNlcmllc09wdGlvbnNcbiAgc2l6ZT86IG51bWJlcjsgICAgICAgICAgIC8vIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBtYXJrZXIgc2l6ZVxuICBzdGRldj86IG51bWJlcjsgICAgICAgICAgLy8gd2hlbiBkZWZpbmVkLCByZW5kZXJzIGFuIGVycm9yIGJhciBjYW5kbGVzdGlja1xuICAvLyBtaW5ZPzogbnVtYmVyOyAgICAgICAgICAgLy8gd2hlbiBkZWZpbmVkLCB0aGUgbWFya2VyIHJlbmRlcnMgYXMgYSBjYW5kbGVzdGljayB3aXRoIHdoaXNrZXJzIFttaW5ZLCBtYXhZXVxuICAvLyBtYXhZPzogbnVtYmVyOyAgICAgICAgICAgLy8gd2hlbiBkZWZpbmVkLCB0aGUgbWFya2VyIHJlbmRlcnMgYXMgYSBjYW5kbGVzdGljayB3aXRoIHdoaXNrZXJzIFttaW5ZLCBtYXhZXVxufVxuXG4vKiogQSBzZXJpZXMgY29uc2lzdHMgb2YgcG9pbnRzLCBoYXMgYSBuYW1lLCBhbmQgb3B0aW9ucy5cbiAqIElmIGRlZmluZWQsIHNlcmllc09wdGlvbnMgYXJlIG1lcmdlZCB3aXRoIHtAbGluayBJRml0Q2hhcnREYXRhLnNlcmllc09wdGlvbnN9ICovXG5leHBvcnQgaW50ZXJmYWNlIElGaXRTZXJpZXMgZXh0ZW5kcyBJRml0U2VyaWVzT3B0aW9ucyB7XG4gIHBvaW50czogSUZpdFBvaW50W107XG59XG5cbi8qKiBDaGFydCBsYWJlbHMgb3B0aW9ucy4gQ29udHJvbHMgdGhlIGNoYXJ0IGxhYmVscy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZpdENoYXJ0TGFiZWxPcHRpb25zIHtcbiAgdmlzaWJsZTogYm9vbGVhbjsgICAgICAgICAvLyBpZiB0cnVlLCByZW5kZXJzIHRoZSBsYWJlbCBvbiB0aGUgcGxvdFxuICBjb2xvcjogc3RyaW5nOyAgICAgICAgICAgIC8vIGRlZmluZXMgdGhlIGxhYmVsIGNvbG9yXG4gIG5hbWU6IHN0cmluZzsgICAgICAgICAgICAgLy8gZGVmaW5lcyB0aGUgbGFiZWwgbmFtZVxufVxuXG4vKiogQ2hhcnQgb3B0aW9ucy4gRm9yIGZpdHRlZCBjdXJ2ZXMsIHRoaXMgb2JqZWN0IGlzIHN0b3JlZCBpbiB0aGUgZ3JpZCBjb2x1bW4gdGFncyBhbmQgaXMgdXNlZCBieSB0aGUgcmVuZGVyZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIElGaXRDaGFydE9wdGlvbnMge1xuICBtaW5YPzogbnVtYmVyO1xuICBtaW5ZPzogbnVtYmVyO1xuICBtYXhYPzogbnVtYmVyO1xuICBtYXhZPzogbnVtYmVyO1xuXG4gIHRpdGxlPzogc3RyaW5nOyAgICAgICAgICAgIC8vIGRlZmluZXMgdGhlIHBsb3QgdGl0bGUuIElmIHRoZSBwbG90IHNpemUgaXMgZW5vdWdoLCB3aWxsIHJlbmRlciBpdC5cbiAgeEF4aXNOYW1lPzogc3RyaW5nOyAgICAgICAgLy8gZGVmaW5lcyB0aGUgeCBheGlzIG5hbWUuIElmIHRoZSBwbG90IHNpemUgaXMgZW5vdWdoLCB3aWxsIHJlbmRlciBpdC5cbiAgeUF4aXNOYW1lPzogc3RyaW5nOyAgICAgICAgLy8gZGVmaW5lcyB0aGUgWSBheGlzIG5hbWUuIElmIHRoZSBwbG90IHNpemUgaXMgZW5vdWdoLCB3aWxsIHJlbmRlciBpdC5cblxuICBsb2dYPzogYm9vbGVhbjsgICAgICAgICAgICAvLyBkZWZpbmVzIHdoZXRoZXIgdGhlIHggZGF0YSBzaG91bGQgYmUgbG9nYXJpdGhtaWMgb3Igbm90XG4gIGxvZ1k/OiBib29sZWFuOyAgICAgICAgICAgIC8vIGRlZmluZXMgd2hldGhlciB0aGUgeSBkYXRhIHNob3VsZCBiZSBsb2dhcml0aG1pYyBvciBub3RcblxuICBhbGxvd1haZXJvZXM/OiBib29sZWFuOyAgICAvLyBkZWZpbmVzIHdoZXRoZXIgeCB6ZXJvZXMgYWxsb3dlZCBmb3IgbG9nYXJpdGhtaWMgZGF0YSBvciBub3RcbiAgbWVyZ2VTZXJpZXM/OiBib29sZWFuOyAgICAgLy8gZGVmaW5lcyB3aGV0aGVyIHRvIG1lcmdlIHNlcmllcyBvciBub3RcblxuICBzaG93Q29sdW1uTGFiZWw/OiBib29sZWFuOyAvLyBkZWZpbmVzIHdoZXRoZXIgdG8gc2hvdyB0aGUgY29sdW1uIGxhYmVsIGluIHRoZSBsZWdlbmQgb3Igbm90XG4gIHNob3dTdGF0aXN0aWNzPzogc3RyaW5nW107IC8vIGRlZmluZXMgdGhlIHN0YXRpc3RpY3MgdGhhdCB3b3VsZCBiZSBzaG93biBvbiB0aGUgcGxvdFxuICBsYWJlbE9wdGlvbnM/OiBJRml0Q2hhcnRMYWJlbE9wdGlvbnNbXTsgLy8gY29udHJvbHMgdGhlIHBsb3QgbGFiZWxzXG59XG5cbi8qKiBEYXRhIGZvciB0aGUgZml0IGNoYXJ0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRml0Q2hhcnREYXRhIHtcbiAgY2hhcnRPcHRpb25zPzogSUZpdENoYXJ0T3B0aW9ucztcbiAgc2VyaWVzT3B0aW9ucz86IElGaXRTZXJpZXNPcHRpb25zOyAgLy8gRGVmYXVsdCBzZXJpZXMgb3B0aW9ucy4gSW5kaXZpZHVhbCBzZXJpZXMgY2FuIG92ZXJyaWRlIGl0LlxuICBzZXJpZXM/OiBJRml0U2VyaWVzW107XG59XG5cbi8qKiBDbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIElGaXRDaGFydERhdGF9IGludGVyZmFjZSAqL1xuZXhwb3J0IGNsYXNzIEZpdENoYXJ0RGF0YSBpbXBsZW1lbnRzIElGaXRDaGFydERhdGEge1xuICBjaGFydE9wdGlvbnM6IElGaXRDaGFydE9wdGlvbnMgPSB7fTtcbiAgc2VyaWVzT3B0aW9uczogSUZpdFNlcmllc09wdGlvbnMgPSB7fTsgIC8vIERlZmF1bHQgc2VyaWVzIG9wdGlvbnMuIEluZGl2aWR1YWwgc2VyaWVzIGNhbiBvdmVycmlkZSBpdC5cbiAgc2VyaWVzOiBJRml0U2VyaWVzW10gPSBbXTtcbn1cblxuLyoqIFNlcmllcyBvcHRpb25zIGNhbiBiZSBlaXRoZXIgYXBwbGllZCBnbG9iYWxseSBvbiBhIGNvbHVtbiBsZXZlbCwgb3IgcGFydGlhbGx5IG92ZXJyaWRkZW4gaW4gcGFydGljdWxhciBzZXJpZXMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZpdFNlcmllc09wdGlvbnMge1xuICBuYW1lPzogc3RyaW5nOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRyb2xzIHRoZSBzZXJpZXMgbmFtZVxuICBmaXRGdW5jdGlvbj86IHN0cmluZyB8IElGaXRGdW5jdGlvbkRlc2NyaXB0aW9uOyAvLyBjb250cm9scyB0aGUgc2VyaWVzIGZpdCBmdW5jdGlvblxuICBwYXJhbWV0ZXJzPzogbnVtYmVyW107ICAgICAgICAgICAgICAgIC8vIGNvbnRyb2xzIHRoZSBzZXJpZXMgcGFyYW1ldGVycywgYXV0by1maXR0aW5nIHdoZW4gbm90IGRlZmluZWRcbiAgcGFyYW1ldGVyQm91bmRzPzogRml0UGFyYW1Cb3VuZHNbXTsgICAvLyBkZWZpbmVzIHRoZSBhY2NlcHRhYmxlIHJhbmdlIG9mIGVhY2ggcGFyYW1ldGVyLCB3aGljaCBpcyB0YWtlbiBpbnRvIGFjY291bnQgZHVyaW5nIHRoZSBmaXR0aW5nLiBTZWUgYWxzbyBgcGFyYW1ldGVyc2AuXG4gIG1hcmtlclR5cGU/OiBGaXRNYXJrZXJUeXBlOyAgICAgICAgICAgLy8gZGVmaW5lcyB0aGUgc2VyaWVzIG1hcmtlciB0eXBlXG4gIG91dGxpZXJNYXJrZXJUeXBlPzogRml0T3V0bGllck1hcmtlclR5cGU7ICAvLyBkZWZpbmVzIHRoZSBzZXJpZXMgb3V0bGllciBtYXJrZXIgdHlwZVxuICBsaW5lU3R5bGU/OiBGaXRMaW5lU3R5bGU7ICAgICAgICAgICAgIC8vIGRlZmluZXMgdGhlIHNlcmllcyBsaW5lIHN0eWxlXG4gIHBvaW50Q29sb3I/OiBzdHJpbmc7ICAgICAgICAgICAgICAgICAgLy8gb3ZlcnJpZGVzIHRoZSBzdGFuZGFyZGl6ZWQgc2VyaWVzIHBvaW50IGNvbG9yXG4gIGZpdExpbmVDb2xvcj86IHN0cmluZzsgICAgICAgICAgICAgICAgLy8gb3ZlcnJpZGVzIHRoZSBzdGFuZGFyZGl6ZWQgc2VyaWVzIGZpdCBsaW5lIGNvbG9yXG4gIGNvbmZpZGVuY2VJbnRlcnZhbENvbG9yPzogc3RyaW5nOyAgICAgLy8gb3ZlcnJpZGVzIHRoZSBzdGFuZGFyZGl6ZWQgc2VyaWVzIGNvbmZpZGVuY2UgaW50ZXJ2YWwgY29sb3JcbiAgb3V0bGllckNvbG9yPzogc3RyaW5nOyAgICAgICAgICAgICAgICAvLyBvdmVycmlkZXMgdGhlIHN0YW5kYXJkaXplZCBzZXJpZXMgb3V0bGllciBjb2xvclxuICBjb25uZWN0RG90cz86IGJvb2xlYW47ICAgICAgICAgICAgICAgIC8vIGRlZmluZXMgd2hldGhlciB0byBjb25uZWN0IHRoZSBwb2ludHMgd2l0aCBsaW5lcyBvciBub3QuIElmIHRydWUgYW5kIHNob3dGaXRMaW5lIGlzIGZhbHNlIC0gZml0dGluZyBpcyBkaXNhYmxlZCAtIG90aGVyd2lzZSwgaXQgd2lsbCBiZSByZW5kZXJlZCBhY2NvcmRpbmdseSB0byB0aGUgcGFyYW1ldGVyIHZhbHVlLlxuICBzaG93Rml0TGluZT86IGJvb2xlYW47ICAgICAgICAgICAgICAgIC8vIGRlZmluZXMgd2hldGhlciB0byBzaG93IHRoZSBmaXQgbGluZSBvciBub3RcbiAgc2hvd1BvaW50cz86IHN0cmluZzsgICAgICAgICAgICAgICAgICAvLyBkZWZpbmVzIHRoZSBkYXRhIGRpc3BsYXkgbW9kZVxuICBzaG93Q3VydmVDb25maWRlbmNlSW50ZXJ2YWw/OiBib29sZWFuOyAgICAvLyBkZWZpbmVzIHdoZXRoZXIgdG8gc2hvdyB0aGUgY29uZmlkZW5jZSBpbnRlcnZhbHMgb3Igbm90XG4gIGVycm9yTW9kZWw/OiBGaXRFcnJvck1vZGVsVHlwZTsgICAgICAgLy8gZGVmaW5lcyB0aGUgc2VyaWVzIGVycm9yIG1vZGVsXG4gIGNsaWNrVG9Ub2dnbGU/OiBib29sZWFuOyAgICAvLyBpZiB0cnVlLCBjbGlja2luZyBvbiB0aGUgcG9pbnQgdG9nZ2xlcyBpdHMgb3V0bGllciBzdGF0dXMgYW5kIGNhdXNlcyBjdXJ2ZSByZWZpdHRpbmdcbiAgbGFiZWxzPzoge1trZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW59OyAvLyBjb250cm9sbGVkIGJ5IElGaXRDaGFydERhdGEgbGFiZWxPcHRpb25zLCBzaG93cyBsYWJlbHNcbiAgZHJvcGxpbmVzPzogc3RyaW5nW107ICAgICAgICAgICAgICAgICAvLyBkZWZpbmVzIHRoZSBkcm9wbGluZXMgdGhhdCB3b3VsZCBiZSBzaG93biBvbiB0aGUgcGxvdCAoSUM1MClcbiAgY29sdW1uTmFtZT86IHN0cmluZzsgICAgICAgICAgICAgICAgICAvLyBkZWZpbmVzIHRoZSBjb2x1bW4gbmFtZSB3aGVyZSB0aGUgc2VyaWVzIGlzIHN0b3JlZFxufVxuLy8gVE9ETzogc2hvdyBsYWJlbHMgaW4gcHJvcGVydHkgcGFuZWwgaWYgcHJlc2VudCwgY29sb3IgYnkgZGVmYXVsdCBmcm9tIHNlcmllc1xuXG4vLyBUT0RPPzogYWRkIG1ldGhvZCB0byByZXR1cm4gcGFyYW1ldGVycyAtIGdldCBwYXJhbWV0ZXJzIGZyb20gZml0IGZ1bmN0aW9uXG4vKiogQ2xhc3MgZm9yIHRoZSBmaXQgZnVuY3Rpb25zICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRml0RnVuY3Rpb24ge1xuICBhYnN0cmFjdCBnZXQgbmFtZSgpOiBzdHJpbmc7XG4gIGFic3RyYWN0IGdldCBwYXJhbWV0ZXJOYW1lcygpOiBzdHJpbmdbXTtcbiAgYWJzdHJhY3QgeShwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKTogbnVtYmVyO1xuICBhYnN0cmFjdCBnZXRJbml0aWFsUGFyYW1ldGVycyh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pOiBGbG9hdDMyQXJyYXk7XG59XG5cbi8qKiBDbGFzcyB0aGF0IGltcGxlbWVudHMgdGhlIGxpbmVhciBmdW5jdGlvbiAqL1xuZXhwb3J0IGNsYXNzIExpbmVhckZ1bmN0aW9uIGV4dGVuZHMgRml0RnVuY3Rpb24ge1xuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBGSVRfRlVOQ1RJT05fTElORUFSO1xuICB9XG5cbiAgZ2V0IHBhcmFtZXRlck5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWydTbG9wZScsICdJbnRlcmNlcHQnXTtcbiAgfVxuXG4gIHkocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGxpbmVhcihwYXJhbXMsIHgpO1xuICB9XG5cbiAgZ2V0SW5pdGlhbFBhcmFtZXRlcnMoeDogbnVtYmVyW10sIHk6IG51bWJlcltdKTogRmxvYXQzMkFycmF5IHtcbiAgICBsZXQgbWluSW5kZXggPSAwO1xuICAgIGxldCBtYXhJbmRleCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoeFtpXSA8IHhbbWluSW5kZXhdKVxuICAgICAgICBtaW5JbmRleCA9IGk7XG4gICAgICBpZiAoeFtpXSA+IHhbbWF4SW5kZXhdKVxuICAgICAgICBtYXhJbmRleCA9IGk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVsdGFYID0geFttYXhJbmRleF0gLSB4W21pbkluZGV4XTtcbiAgICBjb25zdCBkZWx0YVkgPSB5W21heEluZGV4XSAtIHlbbWluSW5kZXhdO1xuICAgIGNvbnN0IEEgPSBkZWx0YVkgLyBkZWx0YVg7XG4gICAgY29uc3QgQiA9IHlbbWF4SW5kZXhdIC0gQSAqIHhbbWF4SW5kZXhdO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBGbG9hdDMyQXJyYXkoMik7XG4gICAgcGFyYW1zLnNldChbQSwgQl0pO1xuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cbn1cblxuLyoqIENsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgc2lnbW9pZCBmdW5jdGlvbiAqL1xuZXhwb3J0IGNsYXNzIFNpZ21vaWRGdW5jdGlvbiBleHRlbmRzIEZpdEZ1bmN0aW9uIHtcbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRklUX0ZVTkNUSU9OX1NJR01PSUQ7XG4gIH1cblxuICBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ1RvcCcsICdCb3R0b20nLCAnU2xvcGUnLCAnSUM1MCddO1xuICB9XG5cbiAgeShwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gc2lnbW9pZChwYXJhbXMsIHgpO1xuICB9XG5cbiAgZ2V0SW5pdGlhbFBhcmFtZXRlcnMoeDogbnVtYmVyW10sIHk6IG51bWJlcltdKTogRmxvYXQzMkFycmF5IHtcbiAgICBjb25zdCBkYXRhQm91bmRzID0gREcuUmVjdC5mcm9tWFlBcnJheXMoeCwgeSk7XG4gICAgY29uc3QgbWVkWSA9IChkYXRhQm91bmRzLmJvdHRvbSAtIGRhdGFCb3VuZHMudG9wKSAvIDIgKyBkYXRhQm91bmRzLnRvcDtcbiAgICBsZXQgbWF4WUludGVydmFsID0gZGF0YUJvdW5kcy5ib3R0b20gLSBkYXRhQm91bmRzLnRvcDtcbiAgICBsZXQgbmVhcmVzdFhJbmRleCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjdXJyZW50SW50ZXJ2YWwgPSBNYXRoLmFicyh5W2ldIC0gbWVkWSk7XG4gICAgICBpZiAoY3VycmVudEludGVydmFsIDwgbWF4WUludGVydmFsKSB7XG4gICAgICAgIG1heFlJbnRlcnZhbCA9IGN1cnJlbnRJbnRlcnZhbDtcbiAgICAgICAgbmVhcmVzdFhJbmRleCA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHhBdE1lZFkgPSB4W25lYXJlc3RYSW5kZXhdO1xuICAgIGNvbnN0IHNsb3BlID0geVswXSA+IHlbeS5sZW5ndGggLSAxXSA/IDEgOiAtMTtcblxuICAgIC8vIHBhcmFtcyBhcmU6IFttYXgsIHRhbiwgSUM1MCwgbWluXVxuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBGbG9hdDMyQXJyYXkoNCk7XG4gICAgcGFyYW1zLnNldChbZGF0YUJvdW5kcy5ib3R0b20sIHNsb3BlLCB4QXRNZWRZLCBkYXRhQm91bmRzLnRvcF0pO1xuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cbn1cblxuLyoqIENsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgbGluZWFyIGxvZ2FyaXRobWljIGZ1bmN0aW9uICovXG5leHBvcnQgY2xhc3MgTG9nTGluZWFyRnVuY3Rpb24gZXh0ZW5kcyBGaXRGdW5jdGlvbiB7XG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEZJVF9GVU5DVElPTl9MT0dfTElORUFSO1xuICB9XG5cbiAgZ2V0IHBhcmFtZXRlck5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWydTbG9wZScsICdJbnRlcmNlcHQnXTtcbiAgfVxuXG4gIHkocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGxvZ0xpbmVhcihwYXJhbXMsIHgpO1xuICB9XG5cbiAgZ2V0SW5pdGlhbFBhcmFtZXRlcnMoeDogbnVtYmVyW10sIHk6IG51bWJlcltdKTogRmxvYXQzMkFycmF5IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgRmxvYXQzMkFycmF5KDIpO1xuICAgIHBhcmFtcy5zZXQoWy01LCAxMDBdKTtcbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG59XG5cbi8qKiBDbGFzcyB0aGF0IGltcGxlbWVudHMgdGhlIGV4cG9uZW50aWFsIGZ1bmN0aW9uICovXG5leHBvcnQgY2xhc3MgRXhwb25lbnRpYWxGdW5jdGlvbiBleHRlbmRzIEZpdEZ1bmN0aW9uIHtcbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRklUX0ZVTkNUSU9OX0VYUE9ORU5USUFMO1xuICB9XG5cbiAgZ2V0IHBhcmFtZXRlck5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWydNYW50aXNzYScsICdQb3dlciddO1xuICB9XG5cbiAgeShwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gZXhwb25lbnRpYWwocGFyYW1zLCB4KTtcbiAgfVxuXG4gIGdldEluaXRpYWxQYXJhbWV0ZXJzKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSk6IEZsb2F0MzJBcnJheSB7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IEZsb2F0MzJBcnJheSgyKTtcbiAgICBwYXJhbXMuc2V0KFsxMDAsIC0yXSk7XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxufVxuXG4vKiogQ2xhc3MgdGhhdCBpbXBsZW1lbnRzIHVzZXIgSlMgZnVuY3Rpb25zICovXG5leHBvcnQgY2xhc3MgSnNGdW5jdGlvbiBleHRlbmRzIEZpdEZ1bmN0aW9uIHtcbiAgcHJpdmF0ZSBfbmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF9wYXJhbWV0ZXJOYW1lczogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCB5RnVuYzogKHBhcmFtczogRmxvYXQzMkFycmF5LCB4OiBudW1iZXIpID0+IG51bWJlcixcbiAgICBnZXRJbml0UGFyYW1zRnVuYzogKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSkgPT4gRmxvYXQzMkFycmF5LCBwYXJhbWV0ZXJOYW1lczogc3RyaW5nW10pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gICAgdGhpcy5fcGFyYW1ldGVyTmFtZXMgPSBwYXJhbWV0ZXJOYW1lcztcblxuICAgIHRoaXMueSA9IHlGdW5jO1xuICAgIHRoaXMuZ2V0SW5pdGlhbFBhcmFtZXRlcnMgPSBnZXRJbml0UGFyYW1zRnVuYztcbiAgfVxuXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gIH1cblxuICBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9wYXJhbWV0ZXJOYW1lcztcbiAgfVxuXG4gIHkocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIGdldEluaXRpYWxQYXJhbWV0ZXJzKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSk6IEZsb2F0MzJBcnJheSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxufVxuXG4vLyBPYmplY3Qgd2l0aCBmaXQgZnVuY3Rpb25zXG5leHBvcnQgY29uc3QgZml0RnVuY3Rpb25zOiB7W2luZGV4OiBzdHJpbmddOiBGaXRGdW5jdGlvbn0gPSB7XG4gICdsaW5lYXInOiBuZXcgTGluZWFyRnVuY3Rpb24oKSxcbiAgJ3NpZ21vaWQnOiBuZXcgU2lnbW9pZEZ1bmN0aW9uKCksXG4gICdsb2ctbGluZWFyJzogbmV3IExvZ0xpbmVhckZ1bmN0aW9uKCksXG4gICdleHBvbmVudGlhbCc6IG5ldyBFeHBvbmVudGlhbEZ1bmN0aW9uKCksXG59O1xuXG4vKiogUHJvcGVydGllcyB0aGF0IGRlc2NyaWJlIHtAbGluayBGaXRTdGF0aXN0aWNzfS4gVXNlZnVsIGZvciBlZGl0aW5nLCBpbml0aWFsaXphdGlvbiwgdHJhbnNmb3JtYXRpb25zLCBldGMuICovXG5leHBvcnQgY29uc3Qgc3RhdGlzdGljc1Byb3BlcnRpZXM6IERHLlByb3BlcnR5W10gPSBbXG4gIERHLlByb3BlcnR5LmpzKCdyU3F1YXJlZCcsIERHLlRZUEUuRkxPQVQsIHt1c2VyRWRpdGFibGU6IGZhbHNlfSksXG4gIERHLlByb3BlcnR5LmpzKCdhdWMnLCBERy5UWVBFLkZMT0FULCB7dXNlckVkaXRhYmxlOiBmYWxzZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnaW50ZXJjZXB0WScsIERHLlRZUEUuRkxPQVQsIHt1c2VyRWRpdGFibGU6IGZhbHNlfSksXG4gIERHLlByb3BlcnR5LmpzKCdpbnRlcmNlcHRYJywgREcuVFlQRS5GTE9BVCwge3VzZXJFZGl0YWJsZTogZmFsc2V9KSxcbiAgREcuUHJvcGVydHkuanMoJ3Nsb3BlJywgREcuVFlQRS5GTE9BVCwge3VzZXJFZGl0YWJsZTogZmFsc2V9KSxcbiAgREcuUHJvcGVydHkuanMoJ3RvcCcsIERHLlRZUEUuRkxPQVQsIHt1c2VyRWRpdGFibGU6IGZhbHNlfSksXG4gIERHLlByb3BlcnR5LmpzKCdib3R0b20nLCBERy5UWVBFLkZMT0FULCB7dXNlckVkaXRhYmxlOiBmYWxzZX0pLFxuXTtcblxuLyoqIFByb3BlcnRpZXMgdGhhdCBkZXNjcmliZSB7QGxpbmsgSUZpdENoYXJ0T3B0aW9uc30uIFVzZWZ1bCBmb3IgZWRpdGluZywgaW5pdGlhbGl6YXRpb24sIHRyYW5zZm9ybWF0aW9ucywgZXRjLiAqL1xuZXhwb3J0IGNvbnN0IGZpdENoYXJ0RGF0YVByb3BlcnRpZXM6IERHLlByb3BlcnR5W10gPSBbXG4gIC8vIFN0eWxlIGFuZCB6b29tXG4gIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSB0b29sdGlwc1xuICBERy5Qcm9wZXJ0eS5qcygnbWluWCcsIERHLlRZUEUuRkxPQVQsIHtudWxsYWJsZTogdHJ1ZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnbWluWScsIERHLlRZUEUuRkxPQVQsIHtudWxsYWJsZTogdHJ1ZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnbWF4WCcsIERHLlRZUEUuRkxPQVQsIHtudWxsYWJsZTogdHJ1ZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnbWF4WScsIERHLlRZUEUuRkxPQVQsIHtudWxsYWJsZTogdHJ1ZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygndGl0bGUnLCBERy5UWVBFLlNUUklORywge251bGxhYmxlOiB0cnVlfSksXG4gIERHLlByb3BlcnR5LmpzKCd4QXhpc05hbWUnLCBERy5UWVBFLlNUUklORywge2Rlc2NyaXB0aW9uOlxuICAgICdMYWJlbCB0byBzaG93IG9uIHRoZSBYIGF4aXMuIElmIG5vdCBzcGVjaWZpZWQsIGNvcnJlc3BvbmRpbmcgZGF0YSBjb2x1bW4gbmFtZSBpcyB1c2VkJywgbnVsbGFibGU6IHRydWV9KSxcbiAgREcuUHJvcGVydHkuanMoJ3lBeGlzTmFtZScsIERHLlRZUEUuU1RSSU5HLCB7ZGVzY3JpcHRpb246XG4gICAgJ0xhYmVsIHRvIHNob3cgb24gdGhlIFkgYXhpcy4gSWYgbm90IHNwZWNpZmllZCwgY29ycmVzcG9uZGluZyBkYXRhIGNvbHVtbiBuYW1lIGlzIHVzZWQnLCBudWxsYWJsZTogdHJ1ZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnbG9nWCcsIERHLlRZUEUuQk9PTCwge2Rlc2NyaXB0aW9uOiAnV2hldGhlciB0aGUgWCBheGlzIHNob3VsZCBiZSBsb2dhcml0aG1pYycsIGRlZmF1bHRWYWx1ZTogZmFsc2V9KSxcbiAgREcuUHJvcGVydHkuanMoJ2xvZ1knLCBERy5UWVBFLkJPT0wsIHtkZXNjcmlwdGlvbjogJ1doZXRoZXIgdGhlIFkgYXhpcyBzaG91bGQgYmUgbG9nYXJpdGhtaWMnLCBkZWZhdWx0VmFsdWU6IGZhbHNlfSksXG4gIERHLlByb3BlcnR5LmpzKCdhbGxvd1haZXJvZXMnLCBERy5UWVBFLkJPT0wsIHtkZXNjcmlwdGlvbjogJ1doZXRoZXIgeCB6ZXJvZXMgYWxsb3dlZCBmb3IgbG9nYXJpdGhtaWMgZGF0YSBvciBub3QnLCBkZWZhdWx0VmFsdWU6IHRydWV9KSxcbiAgREcuUHJvcGVydHkuanMoJ21lcmdlU2VyaWVzJywgREcuVFlQRS5CT09MLCB7ZGVzY3JpcHRpb246ICdNZXJnZXMgYWxsIHNlcmllcyB3aXRoaW4gb25lIGNlbGwgaW50byBvbmUgc2VyaWVzJywgZGVmYXVsdFZhbHVlOiBmYWxzZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnc2hvd0NvbHVtbkxhYmVsJywgREcuVFlQRS5CT09MLCB7ZGVzY3JpcHRpb246ICdXaGV0aGVyIHRvIHNob3cgdGhlIGNvbHVtbiBsYWJlbCBpbiB0aGUgbGVnZW5kIG9yIG5vdCcsIGRlZmF1bHRWYWx1ZTogZmFsc2V9KSxcbiAgREcuUHJvcGVydHkuanMoJ3Nob3dTdGF0aXN0aWNzJywgREcuVFlQRS5TVFJJTkdfTElTVCwge2Rlc2NyaXB0aW9uOiAnV2hldGhlciBzcGVjaWZpYyBzdGF0aXN0aWNzIHNob3VsZCBiZSByZW5kZXJlZCcsXG4gICAgY2hvaWNlczogc3RhdGlzdGljc1Byb3BlcnRpZXMubWFwKChmcnApID0+IGZycC5uYW1lKSwgaW5wdXRUeXBlOiAnTXVsdGlDaG9pY2UnLFxuICAgIC8vQHRzLWlnbm9yZVxuICAgIGZyaWVuZGx5TmFtZTogJ1N0YXRpc3RpY3MnfSksXG5dO1xuXG4vKiogUHJvcGVydGllcyB0aGF0IGRlc2NyaWJlIHtAbGluayBJRml0U2VyaWVzT3B0aW9uc30uIFVzZWZ1bCBmb3IgZWRpdGluZywgaW5pdGlhbGl6YXRpb24sIHRyYW5zZm9ybWF0aW9ucywgZXRjLiAqL1xuZXhwb3J0IGNvbnN0IGZpdFNlcmllc1Byb3BlcnRpZXM6IERHLlByb3BlcnR5W10gPSBbXG4gIERHLlByb3BlcnR5LmpzKCdmaXRGdW5jdGlvbicsIERHLlRZUEUuU1RSSU5HLFxuICAgIHtjYXRlZ29yeTogJ0ZpdHRpbmcnLCBjaG9pY2VzOiBPYmplY3Qua2V5cyhmaXRGdW5jdGlvbnMpLCBkZWZhdWx0VmFsdWU6ICdzaWdtb2lkJ30pLFxuICBERy5Qcm9wZXJ0eS5qcygncG9pbnRDb2xvcicsIERHLlRZUEUuU1RSSU5HLFxuICAgIHtjYXRlZ29yeTogJ1JlbmRlcmluZycsIG51bGxhYmxlOiB0cnVlLCBpbnB1dFR5cGU6ICdDb2xvcid9KSxcbiAgREcuUHJvcGVydHkuanMoJ2ZpdExpbmVDb2xvcicsIERHLlRZUEUuU1RSSU5HLFxuICAgIHtjYXRlZ29yeTogJ1JlbmRlcmluZycsIG51bGxhYmxlOiB0cnVlLCBpbnB1dFR5cGU6ICdDb2xvcid9KSxcbiAgREcuUHJvcGVydHkuanMoJ291dGxpZXJDb2xvcicsIERHLlRZUEUuU1RSSU5HLFxuICAgIHtjYXRlZ29yeTogJ1JlbmRlcmluZycsIG51bGxhYmxlOiB0cnVlLCBpbnB1dFR5cGU6ICdDb2xvcid9KSxcbiAgREcuUHJvcGVydHkuanMoJ2Vycm9yTW9kZWwnLCBERy5UWVBFLlNUUklORywge2NhdGVnb3J5OiAnRml0dGluZycsIGRlZmF1bHRWYWx1ZTogJ2NvbnN0YW50JyxcbiAgICBjaG9pY2VzOiBbJ2NvbnN0YW50JywgJ3Byb3BvcnRpb25hbCcsICdjb21iaW5lZCddLCBudWxsYWJsZTogZmFsc2V9KSxcbiAgREcuUHJvcGVydHkuanMoJ2Nvbm5lY3REb3RzJywgREcuVFlQRS5CT09MLCB7Y2F0ZWdvcnk6ICdGaXR0aW5nJywgZGVmYXVsdFZhbHVlOiBmYWxzZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnY2xpY2tUb1RvZ2dsZScsIERHLlRZUEUuQk9PTCwge2NhdGVnb3J5OiAnRml0dGluZycsIGRlc2NyaXB0aW9uOlxuICAgICdDbGljayBvbiBhIHBvaW50IHRvIG1hcmsgaXQgYXMgb3V0bGllciBhbmQgcmVmaXQnLCBudWxsYWJsZTogdHJ1ZSwgZGVmYXVsdFZhbHVlOiBmYWxzZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnc2hvd0ZpdExpbmUnLCBERy5UWVBFLkJPT0wsIHtjYXRlZ29yeTogJ0ZpdHRpbmcnLCBkZWZhdWx0VmFsdWU6IHRydWV9KSxcbiAgREcuUHJvcGVydHkuanMoJ3Nob3dQb2ludHMnLCBERy5UWVBFLlNUUklORywgLy8gcmV3cml0ZSBkZXNjcmlwdGlvblxuICAgIHtjYXRlZ29yeTogJ0ZpdHRpbmcnLCBkZXNjcmlwdGlvbjogJ1doZXRoZXIgcG9pbnRzL2NhbmRsZXN0aWNrcy9ub25lIHNob3VsZCBiZSByZW5kZXJlZCcsXG4gICAgICBkZWZhdWx0VmFsdWU6ICdwb2ludHMnLCBjaG9pY2VzOiBbJ3BvaW50cycsICdjYW5kbGVzdGlja3MnLCAnYm90aCddfSksXG4gIERHLlByb3BlcnR5LmpzKCdzaG93Q3VydmVDb25maWRlbmNlSW50ZXJ2YWwnLCBERy5UWVBFLkJPT0wsXG4gICAge2NhdGVnb3J5OiAnRml0dGluZycsIGRlc2NyaXB0aW9uOiAnV2hldGhlciBjb25maWRlbmNlIGludGVydmFscyBzaG91bGQgYmUgcmVuZGVyZWQnLCBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgLy9AdHMtaWdub3JlXG4gICAgICBmcmllbmRseU5hbWU6ICdDb25maWRlbmNlIEludGVydmFsJ30pLFxuICBERy5Qcm9wZXJ0eS5qcygnbWFya2VyVHlwZScsIERHLlRZUEUuU1RSSU5HLCB7Y2F0ZWdvcnk6ICdSZW5kZXJpbmcnLCBkZWZhdWx0VmFsdWU6ICdjaXJjbGUnLFxuICAgIGNob2ljZXM6IFsnYXN0ZXJpc2snLCAnY2lyY2xlJywgJ2Nyb3NzIGJvcmRlcicsICdkaWFtb25kJywgJ3NxdWFyZScsICdzdGFyJyxcbiAgICAgICd0cmlhbmdsZSBib3R0b20nLCAndHJpYW5nbGUgbGVmdCcsICd0cmlhbmdsZSByaWdodCcsICd0cmlhbmdsZSB0b3AnXSwgbnVsbGFibGU6IGZhbHNlLFxuICAgIC8vQHRzLWlnbm9yZVxuICAgIGZyaWVuZGx5TmFtZTogJ01hcmtlcid9KSxcbiAgREcuUHJvcGVydHkuanMoJ291dGxpZXJNYXJrZXJUeXBlJywgREcuVFlQRS5TVFJJTkcsIHtjYXRlZ29yeTogJ1JlbmRlcmluZycsIGRlZmF1bHRWYWx1ZTogJ291dGxpZXInLFxuICAgIGNob2ljZXM6IFsnYXN0ZXJpc2snLCAnY2lyY2xlJywgJ2Nyb3NzIGJvcmRlcicsICdkaWFtb25kJywgJ291dGxpZXInLCAnc3F1YXJlJywgJ3N0YXInLFxuICAgICAgJ3RyaWFuZ2xlIGJvdHRvbScsICd0cmlhbmdsZSBsZWZ0JywgJ3RyaWFuZ2xlIHJpZ2h0JywgJ3RyaWFuZ2xlIHRvcCddLCBudWxsYWJsZTogZmFsc2UsXG4gICAgLy9AdHMtaWdub3JlXG4gICAgZnJpZW5kbHlOYW1lOiAnT3V0bGllciBNYXJrZXInfSksXG4gIERHLlByb3BlcnR5LmpzKCdsaW5lU3R5bGUnLCBERy5UWVBFLlNUUklORywge2NhdGVnb3J5OiAnUmVuZGVyaW5nJywgZGVmYXVsdFZhbHVlOiAnc29saWQnLFxuICAgIGNob2ljZXM6IFsnc29saWQnLCAnZG90dGVkJywgJ2Rhc2hlZCcsICdkYXNoZG90dGVkJ10sIG51bGxhYmxlOiBmYWxzZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnZHJvcGxpbmVzJywgREcuVFlQRS5TVFJJTkdfTElTVCwge2Rlc2NyaXB0aW9uOiAnV2hldGhlciBzcGVjaWZpYyBkcm9wbGluZXMgc2hvdWxkIGJlIHJlbmRlcmVkJyxcbiAgICBjaG9pY2VzOiBEUk9QTElORVMsIGlucHV0VHlwZTogJ011bHRpQ2hvaWNlJ30pLFxuICBERy5Qcm9wZXJ0eS5qcygnY29sdW1uTmFtZScsIERHLlRZUEUuU1RSSU5HLCB7ZGVzY3JpcHRpb246ICdDb2x1bW4gbmFtZSB3aGVyZSB0aGUgc2VyaWVzIGlzIHN0b3JlZCcsIGRlZmF1bHRWYWx1ZTogJyd9KSxcbl07XG5cbmV4cG9ydCBjb25zdCBGSVRfRlVOQ1RJT05fU0lHTU9JRCA9ICdzaWdtb2lkJztcbmV4cG9ydCBjb25zdCBGSVRfRlVOQ1RJT05fTElORUFSID0gJ2xpbmVhcic7XG5leHBvcnQgY29uc3QgRklUX0ZVTkNUSU9OX0xPR19MSU5FQVIgPSAnbG9nLWxpbmVhcic7XG5leHBvcnQgY29uc3QgRklUX0ZVTkNUSU9OX0VYUE9ORU5USUFMID0gJ2V4cG9uZW50aWFsJztcblxuZXhwb3J0IGNvbnN0IEZJVF9TVEFUU19SU1FVQVJFRCA9ICdyU3F1YXJlZCc7XG5leHBvcnQgY29uc3QgRklUX1NUQVRTX0FVQyA9ICdhdWMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3JDcmVhdGVGaXRGdW5jdGlvbihzZXJpZXNGaXRGdW5jOiBzdHJpbmcgfCBJRml0RnVuY3Rpb25EZXNjcmlwdGlvbik6IEZpdEZ1bmN0aW9uIHtcbiAgaWYgKHR5cGVvZiBzZXJpZXNGaXRGdW5jID09PSAnc3RyaW5nJylcbiAgICByZXR1cm4gZml0RnVuY3Rpb25zW3Nlcmllc0ZpdEZ1bmNdO1xuICBlbHNlIGlmICghZml0RnVuY3Rpb25zW3Nlcmllc0ZpdEZ1bmMubmFtZV0pIHtcbiAgICBjb25zdCBuYW1lID0gc2VyaWVzRml0RnVuYy5uYW1lO1xuICAgIGNvbnN0IHBhcmFtTmFtZXMgPSBzZXJpZXNGaXRGdW5jLnBhcmFtZXRlck5hbWVzO1xuICAgIGNvbnN0IGZpdEZ1bmN0aW9uUGFydHMgPSBzZXJpZXNGaXRGdW5jLmZ1bmN0aW9uLnNwbGl0KCc9PicpLm1hcCgoZWxlbSkgPT4gZWxlbS50cmltKCkpO1xuICAgIGNvbnN0IGdldEluaXRQYXJhbXNQYXJ0cyA9IHNlcmllc0ZpdEZ1bmMuZ2V0SW5pdGlhbFBhcmFtZXRlcnMuc3BsaXQoJz0+JykubWFwKChlbGVtKSA9PiBlbGVtLnRyaW0oKSk7XG4gICAgY29uc3QgZml0RnVuY3Rpb24gPSBuZXcgRnVuY3Rpb24oZml0RnVuY3Rpb25QYXJ0c1swXS5zbGljZSgxLCBmaXRGdW5jdGlvblBhcnRzWzBdLmxlbmd0aCAtIDEpLFxuICAgICAgYCR7Zml0RnVuY3Rpb25QYXJ0c1sxXS5pbmNsdWRlcygnOycpID8gJycgOiAncmV0dXJuICd9JHtmaXRGdW5jdGlvblBhcnRzWzFdfWApO1xuICAgIGNvbnN0IGdldEluaXRQYXJhbXNGdW5jID0gbmV3IEZ1bmN0aW9uKGdldEluaXRQYXJhbXNQYXJ0c1swXS5zbGljZSgxLCBnZXRJbml0UGFyYW1zUGFydHNbMF0ubGVuZ3RoIC0gMSksXG4gICAgICBgcmV0dXJuICR7Z2V0SW5pdFBhcmFtc1BhcnRzWzFdfWApO1xuICAgIGNvbnN0IGZpdEZ1bmMgPSBuZXcgSnNGdW5jdGlvbihuYW1lLCAoZml0RnVuY3Rpb24gYXMgKHBhcmFtczogRmxvYXQzMkFycmF5LCB4OiBudW1iZXIpID0+IG51bWJlciksXG4gICAgICAoZ2V0SW5pdFBhcmFtc0Z1bmMgYXMgKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSkgPT4gRmxvYXQzMkFycmF5KSwgcGFyYW1OYW1lcyk7XG4gICAgZml0RnVuY3Rpb25zW25hbWVdID0gZml0RnVuYztcbiAgfVxuXG4gIHJldHVybiBmaXRGdW5jdGlvbnNbc2VyaWVzRml0RnVuYy5uYW1lXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpdERhdGEoZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0sIGZpdEZ1bmN0aW9uOiBGaXRGdW5jdGlvbiwgZXJyb3JNb2RlbDogRml0RXJyb3JNb2RlbFR5cGUsXG4gIHBhcmFtZXRlckJvdW5kcz86IEZpdFBhcmFtQm91bmRzW10pOiBGaXRDdXJ2ZSB7XG4gIGNvbnN0IGN1cnZlRnVuY3Rpb24gPSBmaXRGdW5jdGlvbi55O1xuICBsZXQgcGFyYW1WYWx1ZXMgPSBmaXRGdW5jdGlvbi5nZXRJbml0aWFsUGFyYW1ldGVycyhkYXRhLngsIGRhdGEueSk7XG5cbiAgY29uc3Qgb2YgPSBvYmplY3RpdmVGYWN0b3J5KGN1cnZlRnVuY3Rpb24sIGRhdGEsIGVycm9yTW9kZWwpO1xuICBjb25zdCBib3R0b21QYXJhbUJvdW5kcyA9IG5ldyBGbG9hdDMyQXJyYXkoZml0RnVuY3Rpb24ucGFyYW1ldGVyTmFtZXMubGVuZ3RoKTtcbiAgY29uc3QgdG9wUGFyYW1Cb3VuZHMgPSBuZXcgRmxvYXQzMkFycmF5KGZpdEZ1bmN0aW9uLnBhcmFtZXRlck5hbWVzLmxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZml0RnVuY3Rpb24ucGFyYW1ldGVyTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICBib3R0b21QYXJhbUJvdW5kc1tpXSA9IHBhcmFtVmFsdWVzW2ldID09PSAwID8gLTEgOiBwYXJhbVZhbHVlc1tpXSAtIE1hdGguYWJzKHBhcmFtVmFsdWVzW2ldICogMC41KTtcbiAgICB0b3BQYXJhbUJvdW5kc1tpXSA9IHBhcmFtVmFsdWVzW2ldID09PSAwID8gMSA6IHBhcmFtVmFsdWVzW2ldICsgTWF0aC5hYnMocGFyYW1WYWx1ZXNbaV0gKiAwLjUpO1xuICB9XG4gIGNvbnN0IHBhcmFtZXRlckJvdW5kc0JpdHNldDogREcuQml0U2V0ID0gREcuQml0U2V0LmNyZWF0ZShmaXRGdW5jdGlvbi5wYXJhbWV0ZXJOYW1lcy5sZW5ndGggKiAyKTtcbiAgaWYgKHBhcmFtZXRlckJvdW5kcyAmJiBwYXJhbWV0ZXJCb3VuZHMubGVuZ3RoICE9PSAwKVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1ldGVyQm91bmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocGFyYW1ldGVyQm91bmRzW2ldLm1pbiAhPT0gdW5kZWZpbmVkICYmIHBhcmFtZXRlckJvdW5kc1tpXS5taW4gIT09IG51bGwpIHtcbiAgICAgICAgYm90dG9tUGFyYW1Cb3VuZHNbaV0gPSBwYXJhbWV0ZXJCb3VuZHNbaV0ubWluITtcbiAgICAgICAgcGFyYW1ldGVyQm91bmRzQml0c2V0LnNldChpICogMiwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1ldGVyQm91bmRzW2ldLm1heCAhPT0gdW5kZWZpbmVkICYmIHBhcmFtZXRlckJvdW5kc1tpXS5tYXggIT09IG51bGwpIHtcbiAgICAgICAgdG9wUGFyYW1Cb3VuZHNbaV0gPSBwYXJhbWV0ZXJCb3VuZHNbaV0ubWF4ITtcbiAgICAgICAgcGFyYW1ldGVyQm91bmRzQml0c2V0LnNldChpICogMiArIDEsIHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICBjb25zdCBnZXRDb25zaXN0ZW5jeSA9IChleHRyZW11bTogRXh0cmVtdW0pID0+IHtcbiAgICBjb25zdCByZXNpZHVhbHMgPSBvZihleHRyZW11bS5wb2ludCkucmVzaWR1YWxzO1xuICAgIGxldCBxMXE0ID0gMDtcbiAgICBsZXQgcTJxMyA9IDA7XG4gICAgLy8gVE9ETzogcmV3cml0ZSBxdWFydGlsZXMgdG8gYSBiZXR0ZXIgY29uZGl0aW9uXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNpZHVhbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyZXNpZHVhbHMubGVuZ3RoIC8gNCA+IGkpXG4gICAgICAgIHExcTQgKz0gTWF0aC5wb3cocmVzaWR1YWxzW2ldLCAyKTtcbiAgICAgIGVsc2UgaWYgKDMgKiByZXNpZHVhbHMubGVuZ3RoIC8gNCA+IGkpXG4gICAgICAgIHEycTMgKz0gTWF0aC5wb3cocmVzaWR1YWxzW2ldLCAyKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcTFxNCArPSBNYXRoLnBvdyhyZXNpZHVhbHNbaV0sIDIpO1xuICAgIH1cbiAgICByZXR1cm4gcTFxNCAvIHEycTM7XG4gIH07XG5cbiAgbGV0IGl0ZXIgPSAtMTtcbiAgbGV0IGNvbnRpbnVlT3B0aW1pemF0aW9uID0gMDtcbiAgbGV0IHN0YXRpc3RpY3M6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBsZXQgb3B0aW1pemF0aW9uOiBPcHRpbWl6YXRpb25SZXN1bHQ7XG4gIGxldCBtaW5JZHggPSAwO1xuICBkbyB7XG4gICAgb3B0aW1pemF0aW9uID0gcGVyZm9ybU5lbGRlck1lYWRPcHRpbWl6YXRpb24ob2YsIGJvdHRvbVBhcmFtQm91bmRzLCB0b3BQYXJhbUJvdW5kcywge1xuICAgICAgdG9sZXJhbmNlOiBORUxERVJfTUVBRF9ERUZBVUxUUy5UT0xFUkFOQ0UsXG4gICAgICBtYXhJdGVyOiBORUxERVJfTUVBRF9ERUZBVUxUUy5NQVhfSVRFUixcbiAgICAgIG5vblplcm9QYXJhbTogTkVMREVSX01FQURfREVGQVVMVFMuTk9OX1pFUk9fUEFSQU0sXG4gICAgICBpbml0aWFsU2NhbGU6IE5FTERFUl9NRUFEX0RFRkFVTFRTLklOSVRJQUxfU0NBTEUsXG4gICAgICBzY2FsZVJlZmxlY3Rpb246IE5FTERFUl9NRUFEX0RFRkFVTFRTLlNDQUxFX1JFRkxFQ1RJT04sXG4gICAgICBzY2FsZUV4cGFuc2lvbjogTkVMREVSX01FQURfREVGQVVMVFMuU0NBTEVfRVhQQU5TSU9OLFxuICAgICAgc2NhbGVDb250cmFjdGlvbjogTkVMREVSX01FQURfREVGQVVMVFMuU0NBTEVfQ09OVFJBQ1RJT04sXG4gICAgfSwgMTAsIHBhcmFtVmFsdWVzKTtcblxuICAgIG1pbklkeCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBvcHRpbWl6YXRpb24uZXh0cmVtdW1zLmxlbmd0aDsgaSsrKVxuICAgICAgaWYgKG9wdGltaXphdGlvbi5leHRyZW11bXNbaV0uY29zdCA8IG9wdGltaXphdGlvbi5leHRyZW11bXNbbWluSWR4XS5jb3N0KVxuICAgICAgICBtaW5JZHggPSBpO1xuXG4gICAgY29uc3QgbmV3U3RhdGlzdGljcyA9IGdldENvbnNpc3RlbmN5KG9wdGltaXphdGlvbi5leHRyZW11bXNbbWluSWR4XSk7XG4gICAgaWYgKHN0YXRpc3RpY3MgPT09IG51bGwpXG4gICAgICBzdGF0aXN0aWNzID0gbmV3U3RhdGlzdGljcztcbiAgICBlbHNlIGlmIChuZXdTdGF0aXN0aWNzIDwgc3RhdGlzdGljcykge1xuICAgICAgc3RhdGlzdGljcyA9IG5ld1N0YXRpc3RpY3M7XG4gICAgICBjb250aW51ZU9wdGltaXphdGlvbiA9IDA7XG4gICAgfVxuICAgIGVsc2VcbiAgICAgIGNvbnRpbnVlT3B0aW1pemF0aW9uKys7XG5cbiAgICBpZiAoaXRlciA9PT0gLTEpIHtcbiAgICAgIGlmIChzdGF0aXN0aWNzIDw9IDIpXG4gICAgICAgIGJyZWFrO1xuICAgICAgaXRlcisrO1xuICAgIH1cblxuICAgIGlmIChpdGVyID4gNDApXG4gICAgICBicmVhaztcbiAgICBpZiAoY29udGludWVPcHRpbWl6YXRpb24gPT09IDMpXG4gICAgICBicmVhaztcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZml0RnVuY3Rpb24ucGFyYW1ldGVyTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghcGFyYW1ldGVyQm91bmRzQml0c2V0LmdldChpICogMikpXG4gICAgICAgIGJvdHRvbVBhcmFtQm91bmRzW2ldID0gcGFyYW1WYWx1ZXNbaV0gLSBNYXRoLmFicyhvcHRpbWl6YXRpb24uZXh0cmVtdW1zW21pbklkeF0ucG9pbnRbaV0gKiAoY29udGludWVPcHRpbWl6YXRpb24gKyAxLjUpKTtcbiAgICAgIGlmICghcGFyYW1ldGVyQm91bmRzQml0c2V0LmdldChpICogMiArIDEpKVxuICAgICAgICB0b3BQYXJhbUJvdW5kc1tpXSA9IHBhcmFtVmFsdWVzW2ldICsgTWF0aC5hYnMob3B0aW1pemF0aW9uLmV4dHJlbXVtc1ttaW5JZHhdLnBvaW50W2ldICogKGNvbnRpbnVlT3B0aW1pemF0aW9uICsgMS41KSk7XG4gICAgfVxuICB9IHdoaWxlICh0cnVlKTtcblxuICBwYXJhbVZhbHVlcyA9IG9wdGltaXphdGlvbi5leHRyZW11bXNbbWluSWR4XS5wb2ludDtcbiAgY29uc3QgZml0dGVkQ3VydmUgPSBnZXRGaXR0ZWRDdXJ2ZShjdXJ2ZUZ1bmN0aW9uLCBwYXJhbVZhbHVlcyk7XG5cbiAgcmV0dXJuIHtcbiAgICBmaXR0ZWRDdXJ2ZTogZml0dGVkQ3VydmUsXG4gICAgcGFyYW1ldGVyczogcGFyYW1WYWx1ZXMsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaXR0ZWRDdXJ2ZShjdXJ2ZUZ1bmN0aW9uOiAocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcikgPT4gbnVtYmVyLCBwYXJhbVZhbHVlczogRmxvYXQzMkFycmF5KTpcbiAoeDogbnVtYmVyKSA9PiBudW1iZXIge1xuICByZXR1cm4gKHg6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiBjdXJ2ZUZ1bmN0aW9uKHBhcmFtVmFsdWVzLCB4KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnZlQ29uZmlkZW5jZUludGVydmFscyhkYXRhOiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSwgcGFyYW1WYWx1ZXM6IEZsb2F0MzJBcnJheSxcbiAgY3VydmVGdW5jdGlvbjogKHBhcmFtczogRmxvYXQzMkFycmF5LCB4OiBudW1iZXIpID0+IG51bWJlciwgY29uZmlkZW5jZUxldmVsOiBudW1iZXIgPSAwLjA1LCBlcnJvck1vZGVsOiBGaXRFcnJvck1vZGVsVHlwZSk6XG4gIEZpdENvbmZpZGVuY2VJbnRlcnZhbHMge1xuICBjb25zdCBlcnJvciA9IGdldFNpZ21hKGN1cnZlRnVuY3Rpb24sIGRhdGEsIGVycm9yTW9kZWwsIHBhcmFtVmFsdWVzKTtcbiAgY29uc3QgcXVhbnRpbGUgPSBqU3RhdC5ub3JtYWwuaW52KDEgLSBjb25maWRlbmNlTGV2ZWwvMiwgMCwgMSk7XG5cbiAgY29uc3QgdG9wID0gKHg6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gY3VydmVGdW5jdGlvbihwYXJhbVZhbHVlcywgeCk7XG4gICAgcmV0dXJuIHZhbHVlICsgcXVhbnRpbGUgKiAoZXJyb3Iuc2lnbWFBICsgTWF0aC5hYnModmFsdWUpICogZXJyb3Iuc2lnbWFCKTtcbiAgfTtcblxuICBjb25zdCBib3R0b20gPSAoeDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBjdXJ2ZUZ1bmN0aW9uKHBhcmFtVmFsdWVzLCB4KTtcbiAgICByZXR1cm4gdmFsdWUgLSBxdWFudGlsZSAqIChlcnJvci5zaWdtYUEgKyBNYXRoLmFicyh2YWx1ZSkgKiBlcnJvci5zaWdtYUIpO1xuICB9O1xuXG4gIHJldHVybiB7Y29uZmlkZW5jZVRvcDogdG9wLCBjb25maWRlbmNlQm90dG9tOiBib3R0b219O1xufVxuXG4vLyBUT0RPOiBmb3IgbGluZWFyIC0gc2xvcGUgLSBBLCBpbnRlcmNlcHRZIC0gQlxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXRpc3RpY3MoZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0sIHBhcmFtVmFsdWVzOiBGbG9hdDMyQXJyYXksXG4gIGN1cnZlRnVuY3Rpb246IChwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKSA9PiBudW1iZXIsIHN0YXRpc3RpY3M6IGJvb2xlYW4gPSB0cnVlKTogRml0U3RhdGlzdGljcyB7XG4gIGNvbnN0IGZpdHRlZEN1cnZlID0gZ2V0Rml0dGVkQ3VydmUoY3VydmVGdW5jdGlvbiwgcGFyYW1WYWx1ZXMpO1xuXG4gIHJldHVybiB7XG4gICAgclNxdWFyZWQ6IHN0YXRpc3RpY3MgPyBnZXREZXRDb2VmZihmaXR0ZWRDdXJ2ZSwgZGF0YSkgOiB1bmRlZmluZWQsXG4gICAgYXVjOiBzdGF0aXN0aWNzID8gZ2V0QXVjKGZpdHRlZEN1cnZlLCBkYXRhKSA6IHVuZGVmaW5lZCxcbiAgICBpbnRlcmNlcHRYOiBwYXJhbVZhbHVlc1syXSxcbiAgICBpbnRlcmNlcHRZOiBmaXR0ZWRDdXJ2ZShwYXJhbVZhbHVlc1syXSksXG4gICAgc2xvcGU6IHBhcmFtVmFsdWVzWzFdLFxuICAgIHRvcDogcGFyYW1WYWx1ZXNbMF0sXG4gICAgYm90dG9tOiBwYXJhbVZhbHVlc1szXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEludmVydGVkRnVuY3Rpb25zKGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119LCBwYXJhbVZhbHVlczogbnVtYmVyW10sXG4gIGNvbmZpZGVuY2VMZXZlbDogbnVtYmVyID0gMC4wNSwgc3RhdGlzdGljczogYm9vbGVhbiA9IHRydWUpOiBGaXRJbnZlcnRlZEZ1bmN0aW9ucyB8IG51bGwge1xuICBjb25zdCBzdHVkZW50USA9IGpTdGF0LnN0dWRlbnR0LmludigxIC0gY29uZmlkZW5jZUxldmVsIC8gMiwgZGF0YS54Lmxlbmd0aCAtIHBhcmFtVmFsdWVzLmxlbmd0aCk7XG5cbiAgbGV0IGludjogKHk6IG51bWJlcikgPT4gbnVtYmVyID0gKHk6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiAwO1xuICB9O1xuICBsZXQgaW52VG9wOiAoeTogbnVtYmVyKSA9PiBudW1iZXIgPSAoeTogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIDA7XG4gIH07XG4gIGxldCBpbnZCb3R0b206ICh5OiBudW1iZXIpID0+IG51bWJlciA9ICh5OiBudW1iZXIpID0+IHtcbiAgICByZXR1cm4gMDtcbiAgfTtcblxuICBpZiAoc3RhdGlzdGljcykge1xuICAgIGludiA9ICh5OiBudW1iZXIpID0+IHtcbiAgICAgIC8vc2hvdWxkIGNoZWNrIGlmIG1vcmUgdGhhbiBib3R0b20gYW5kIGxlc3MgdGhhbiB0b3BcbiAgICAgIHJldHVybiBwYXJhbVZhbHVlc1syXSAvIE1hdGgucG93KChwYXJhbVZhbHVlc1swXSAtIHkpIC8gKHkgLSBwYXJhbVZhbHVlc1szXSksIDEgLyBwYXJhbVZhbHVlc1sxXSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGVycm9yID0gZ2V0SW52RXJyb3IoaW52LCBkYXRhKTtcblxuICAgIGludlRvcCA9ICh5OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gaW52KHkpO1xuICAgICAgcmV0dXJuIHZhbHVlICsgc3R1ZGVudFEgKiBlcnJvciAvIE1hdGguc3FydChkYXRhLnkubGVuZ3RoKTtcbiAgICB9O1xuXG4gICAgaW52Qm90dG9tID0gKHk6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBpbnYoeSk7XG4gICAgICByZXR1cm4gdmFsdWUgLSBzdHVkZW50USAqIGVycm9yIC8gTWF0aC5zcXJ0KGRhdGEueS5sZW5ndGgpO1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgaW52ZXJ0ZWQ6IGludixcbiAgICAgIGludmVydGVkVG9wOiBpbnZUb3AsXG4gICAgICBpbnZlcnRlZEJvdHRvbTogaW52Qm90dG9tLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ21vaWQocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IEEgPSBwYXJhbXNbMF07XG4gIGNvbnN0IEIgPSBwYXJhbXNbMV07XG4gIGNvbnN0IEMgPSBwYXJhbXNbMl07XG4gIGNvbnN0IEQgPSBwYXJhbXNbM107XG4gIHJldHVybiAoRCArIChBIC0gRCkgLyAoMSArIE1hdGgucG93KDEwLCAoeCAtIEMpICogQikpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmVhcihwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgQSA9IHBhcmFtc1swXTtcbiAgY29uc3QgQiA9IHBhcmFtc1sxXTtcbiAgcmV0dXJuIEEgKiB4ICsgQjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZ0xpbmVhcihwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgQSA9IHBhcmFtc1swXTtcbiAgY29uc3QgQiA9IHBhcmFtc1sxXTtcbiAgcmV0dXJuIEEgKiBNYXRoLmxvZyh4ICsgMSkgKyBCO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwb25lbnRpYWwocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IEEgPSBwYXJhbXNbMF07XG4gIGNvbnN0IEIgPSBwYXJhbXNbMV07XG4gIHJldHVybiBBICogTWF0aC5leHAoeCAqIEIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXVjKGZpdHRlZEN1cnZlOiAoeDogbnVtYmVyKSA9PiBudW1iZXIsIGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119KTogbnVtYmVyIHtcbiAgbGV0IGF1YyA9IDA7XG4gIGNvbnN0IG1pbiA9IE1hdGgubWluKC4uLmRhdGEueCk7XG4gIGNvbnN0IG1heCA9IE1hdGgubWF4KC4uLmRhdGEueCk7XG4gIGNvbnN0IGludGVncmF0aW9uU3RlcCA9IChtYXggLSBtaW4pIC8gMTAwMDtcbiAgZm9yIChsZXQgeCA9IG1pbjsgeCA8IG1heDsgeCs9IGludGVncmF0aW9uU3RlcClcbiAgICBhdWMgKz0gaW50ZWdyYXRpb25TdGVwICogZml0dGVkQ3VydmUoeCk7XG5cbiAgcmV0dXJuIGF1Yztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERldENvZWZmKGZpdHRlZEN1cnZlOiAoeDogbnVtYmVyKSA9PiBudW1iZXIsIGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119KTogbnVtYmVyIHtcbiAgbGV0IHNzUmVzID0gMDtcbiAgbGV0IHNzVG90ID0gMDtcbiAgY29uc3QgeU1lYW4gPSBqU3RhdC5tZWFuKGRhdGEueSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS54Lmxlbmd0aDsgaSsrKSB7XG4gICAgc3NSZXMgKz0gTWF0aC5wb3coZGF0YS55W2ldIC0gZml0dGVkQ3VydmUoZGF0YS54W2ldKSwgMik7XG4gICAgc3NUb3QgKz0gTWF0aC5wb3coZGF0YS55W2ldIC0geU1lYW4sIDIpO1xuICB9XG5cbiAgcmV0dXJuIDEgLSBzc1JlcyAvIHNzVG90O1xufVxuXG5mdW5jdGlvbiBnZXRJbnZFcnJvcih0YXJnZXRGdW5jOiAoeTogbnVtYmVyKSA9PiBudW1iZXIsIGRhdGE6IHt5OiBudW1iZXJbXSwgeDogbnVtYmVyW119KTogbnVtYmVyIHtcbiAgbGV0IHNpZ21hID0gMDtcbiAgbGV0IHNpZ21hU3EgPSAwO1xuICBjb25zdCByZXNpZHVlc1NxdWFyZXMgPSBuZXcgRmxvYXQzMkFycmF5KGRhdGEueS5sZW5ndGgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEueS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG9icyA9IGRhdGEueFtpXTtcbiAgICBjb25zdCBwcmVkID0gdGFyZ2V0RnVuYyhkYXRhLnlbaV0pO1xuICAgIHJlc2lkdWVzU3F1YXJlc1tpXSA9IE1hdGgucG93KG9icyAtIHByZWQsIDIpO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNpZHVlc1NxdWFyZXMubGVuZ3RoOyBpKyspXG4gICAgc2lnbWFTcSArPSByZXNpZHVlc1NxdWFyZXNbaV07XG5cbiAgc2lnbWFTcSAvPSByZXNpZHVlc1NxdWFyZXMubGVuZ3RoO1xuICBzaWdtYSA9IE1hdGguc3FydChzaWdtYVNxKTtcblxuICByZXR1cm4gc2lnbWE7XG59XG5cbmZ1bmN0aW9uIG9iamVjdGl2ZUZhY3RvcnkodGFyZ2V0RnVuYzogKHBhcmFtczogRmxvYXQzMkFycmF5LCB4OiBudW1iZXIpID0+IG51bWJlcixcbiAgZGF0YToge3k6IG51bWJlcltdLCB4OiBudW1iZXJbXX0sIGVycm9yTW9kZWw6IEZpdEVycm9yTW9kZWxUeXBlKTpcbiAgICAocGFyYW1zOiBGbG9hdDMyQXJyYXkpID0+IHtsaWtlbGlob29kOiBudW1iZXIsIHJlc2lkdWFsczogbnVtYmVyW119IHtcbiAgcmV0dXJuIChwYXJhbXM6IEZsb2F0MzJBcnJheSkgPT4ge1xuICAgIGxldCBsaWtlbGlob29kID0gMDtcbiAgICBsZXQgc2lnbWFBID0gMDtcbiAgICBsZXQgc2lnbWFCID0gMDtcblxuICAgIGNvbnN0IG9icyA9IGRhdGEueTtcbiAgICBjb25zdCBwcmVkID0gZGF0YS54Lm1hcCgoeCkgPT4gdGFyZ2V0RnVuYyhwYXJhbXMsIHgpKTtcbiAgICBjb25zdCByZXNpZHVhbHMgPSBvYnMubWFwKChvYnMsIGkpID0+IG9icyAtIHByZWRbaV0pO1xuICAgIGNvbnN0IHJlc2lkdWVzU3F1YXJlcyA9IHJlc2lkdWFscy5tYXAoKHJlcykgPT4gTWF0aC5wb3cocmVzLCAyKSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKFtGaXRFcnJvck1vZGVsLkNPTlNUQU5ULCBGaXRFcnJvck1vZGVsLkNPTUJJTkVEXS5pbmNsdWRlcyhlcnJvck1vZGVsKSlcbiAgICAgICAgc2lnbWFBICs9IHJlc2lkdWVzU3F1YXJlc1tpXTtcbiAgICAgIGVsc2UgaWYgKGVycm9yTW9kZWwgPT09IEZpdEVycm9yTW9kZWwuUFJPUE9SVElPTkFMKVxuICAgICAgICBzaWdtYUIgKz0gcmVzaWR1ZXNTcXVhcmVzW2ldIC8gKHByZWRbaV0gKiBwcmVkW2ldKTtcbiAgICB9XG4gICAgc2lnbWFBID0gTWF0aC5zcXJ0KHNpZ21hQSAvIHJlc2lkdWVzU3F1YXJlcy5sZW5ndGgpO1xuICAgIHNpZ21hQiA9IE1hdGguc3FydChzaWdtYUIgLyByZXNpZHVlc1NxdWFyZXMubGVuZ3RoKTtcblxuICAgIGlmIChlcnJvck1vZGVsID09PSBGaXRFcnJvck1vZGVsLkNPTUJJTkVEKVxuICAgICAgKHtzaWdtYUEsIHNpZ21hQn0gPSBnZXRTaWdtYXNGb3JDb21iaW5lZEVycm9yTW9kZWwoc2lnbWFBLCBzaWdtYUIsIHJlc2lkdWVzU3F1YXJlcywgcHJlZCkpO1xuXG4gICAgY29uc3Qgc2lnbWFTcUk6IG51bWJlcltdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNpZHVlc1NxdWFyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHNpZ21hU3FJW2ldID0gTWF0aC5wb3coc2lnbWFBICsgc2lnbWFCICogcHJlZFtpXSwgMik7XG4gICAgICBsaWtlbGlob29kICs9IHJlc2lkdWVzU3F1YXJlc1tpXSAvIHNpZ21hU3FJW2ldICsgTWF0aC5sb2coMiAqIE1hdGguUEkgKiBzaWdtYVNxSVtpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtsaWtlbGlob29kLCByZXNpZHVhbHN9O1xuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRTaWdtYSh0YXJnZXRGdW5jOiAocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcikgPT4gbnVtYmVyLFxuICBkYXRhOiB7eTogbnVtYmVyW10sIHg6IG51bWJlcltdfSwgZXJyb3JNb2RlbDogRml0RXJyb3JNb2RlbFR5cGUsIHBhcmFtczogRmxvYXQzMkFycmF5KToge3NpZ21hQTogbnVtYmVyLCBzaWdtYUI6IG51bWJlcn0ge1xuICBsZXQgc2lnbWFBID0gMDtcbiAgbGV0IHNpZ21hQiA9IDA7XG5cbiAgY29uc3Qgb2JzID0gZGF0YS55O1xuICBjb25zdCBwcmVkID0gZGF0YS54Lm1hcCgoeCkgPT4gdGFyZ2V0RnVuYyhwYXJhbXMsIHgpKTtcbiAgY29uc3QgcmVzaWR1YWxzID0gb2JzLm1hcCgob2JzLCBpKSA9PiBvYnMgLSBwcmVkW2ldKTtcbiAgY29uc3QgcmVzaWR1ZXNTcXVhcmVzID0gcmVzaWR1YWxzLm1hcCgocmVzKSA9PiBNYXRoLnBvdyhyZXMsIDIpKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChbRml0RXJyb3JNb2RlbC5DT05TVEFOVCwgRml0RXJyb3JNb2RlbC5DT01CSU5FRF0uaW5jbHVkZXMoZXJyb3JNb2RlbCkpXG4gICAgICBzaWdtYUEgKz0gcmVzaWR1ZXNTcXVhcmVzW2ldO1xuICAgIGVsc2UgaWYgKGVycm9yTW9kZWwgPT09IEZpdEVycm9yTW9kZWwuUFJPUE9SVElPTkFMKVxuICAgICAgc2lnbWFCICs9IE1hdGgucG93KHJlc2lkdWFsc1tpXSAvIE1hdGguYWJzKHByZWRbaV0pLCAyKTtcbiAgfVxuICBzaWdtYUEgPSBNYXRoLnNxcnQoc2lnbWFBIC8gcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aCk7XG4gIHNpZ21hQiA9IE1hdGguc3FydChzaWdtYUIgLyByZXNpZHVlc1NxdWFyZXMubGVuZ3RoKTtcblxuICBpZiAoZXJyb3JNb2RlbCA9PT0gRml0RXJyb3JNb2RlbC5DT01CSU5FRClcbiAgICAoe3NpZ21hQSwgc2lnbWFCfSA9IGdldFNpZ21hc0ZvckNvbWJpbmVkRXJyb3JNb2RlbChzaWdtYUEsIHNpZ21hQiwgcmVzaWR1ZXNTcXVhcmVzLCBwcmVkKSk7XG5cbiAgcmV0dXJuIHtzaWdtYUEsIHNpZ21hQn07XG59XG5cbmZ1bmN0aW9uIGdldFNpZ21hc0ZvckNvbWJpbmVkRXJyb3JNb2RlbChzaWdtYUE6IG51bWJlciwgc2lnbWFCOiBudW1iZXIsIHJlc2lkdWVzU3F1YXJlczogbnVtYmVyW10sIHByZWQ6IG51bWJlcltdKTpcbiAge3NpZ21hQTogbnVtYmVyLCBzaWdtYUI6IG51bWJlcn0ge1xuICBsZXQgbGlrZWxpaG9vZENvbWJpbmVkID0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgbGV0IGZpbmFsUHJvcG9ydGlvbiA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDw9IDEwOyBpKyspIHtcbiAgICBsZXQgbGlrZWxpaG9vZENvbWJpbmVkTG9jYWwgPSAwO1xuICAgIGNvbnN0IHByb3BvcnRpb24gPSBpIC8gMTA7XG4gICAgY29uc3Qgc2lnbWFBQ29tYmluZWQgPSBzaWdtYUEgKiBwcm9wb3J0aW9uO1xuICAgIGNvbnN0IHNpZ21hQkNvbWJpbmVkID0gc2lnbWFBICogKDEgLSBwcm9wb3J0aW9uKTtcbiAgICBjb25zdCBzaWdtYVNxSUNvbWJpbmVkOiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzaWdtYVNxSUNvbWJpbmVkW2ldID0gTWF0aC5wb3coc2lnbWFBQ29tYmluZWQgKyBzaWdtYUJDb21iaW5lZCAqIHByZWRbaV0sIDIpO1xuICAgICAgbGlrZWxpaG9vZENvbWJpbmVkTG9jYWwgKz0gcmVzaWR1ZXNTcXVhcmVzW2ldIC8gc2lnbWFTcUlDb21iaW5lZFtpXSArIE1hdGgubG9nKDIgKiBNYXRoLlBJICogc2lnbWFTcUlDb21iaW5lZFtpXSk7XG4gICAgfVxuICAgIGlmIChsaWtlbGlob29kQ29tYmluZWRMb2NhbCA8IGxpa2VsaWhvb2RDb21iaW5lZCkge1xuICAgICAgbGlrZWxpaG9vZENvbWJpbmVkID0gbGlrZWxpaG9vZENvbWJpbmVkTG9jYWw7XG4gICAgICBmaW5hbFByb3BvcnRpb24gPSBwcm9wb3J0aW9uO1xuICAgIH1cbiAgfVxuICBzaWdtYUIgPSBzaWdtYUEgKiAoMSAtIGZpbmFsUHJvcG9ydGlvbik7XG4gIHNpZ21hQSA9IHNpZ21hQSAqIGZpbmFsUHJvcG9ydGlvbjtcblxuICByZXR1cm4ge3NpZ21hQSwgc2lnbWFCfTtcbn1cbiJdfQ==
532
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml0LWN1cnZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZml0LWN1cnZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRCQUE0QjtBQUM1QixvQ0FBb0M7QUFDcEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxzQkFBc0I7QUFDdEIsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDNUUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFJL0UsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHO0lBQzNCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLFlBQVksRUFBRSxjQUFjO0lBQzVCLFFBQVEsRUFBRSxVQUFVO0NBQ3JCLENBQUM7QUEwQ0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBb0JFO0FBRUYsTUFBTSxTQUFTLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQXFFM0IsNERBQTREO0FBQzVELE1BQU0sT0FBTyxZQUFZO0lBQXpCO1FBQ0UsaUJBQVksR0FBcUIsRUFBRSxDQUFDO1FBQ3BDLGtCQUFhLEdBQXNCLEVBQUUsQ0FBQyxDQUFFLDZEQUE2RDtRQUNyRyxXQUFNLEdBQWlCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0NBQUE7QUEwQkQsK0VBQStFO0FBRS9FLDRFQUE0RTtBQUM1RSxrQ0FBa0M7QUFDbEMsTUFBTSxPQUFnQixXQUFXO0NBS2hDO0FBRUQsZ0RBQWdEO0FBQ2hELE1BQU0sT0FBTyxjQUFlLFNBQVEsV0FBVztJQUM3QyxJQUFJLElBQUk7UUFDTixPQUFPLG1CQUFtQixDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsQ0FBQyxDQUFDLE1BQW9CLEVBQUUsQ0FBUztRQUMvQixPQUFPLE1B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QUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUMxQyxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBQyxDQUFDO0lBQ3JGLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFDekMsRUFBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBQyxDQUFDO0lBQzlELEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFDM0MsRUFBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBQyxDQUFDO0lBQzlELEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFDM0MsRUFBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBQyxDQUFDO0lBQzlELEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFVBQVU7UUFDekYsT0FBTyxFQUFFLENBQUMsVUFBVSxFQUFFLGNBQWMsRUFBRSxVQUFVLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFDdEUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxZ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SSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEdBQUcsY0FBYyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM3RSx1QkFBdUIsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ25IO1FBQ0QsSUFBSSx1QkFBdUIsR0FBRyxrQkFBa0IsRUFBRTtZQUNoRCxrQkFBa0IsR0FBRyx1QkFBdUIsQ0FBQztZQUM3QyxlQUFlLEdBQUcsVUFBVSxDQUFDO1NBQzlCO0tBQ0Y7SUFDRCxNQUFNLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sR0FBRyxNQUFNLEdBQUcsZUFBZSxDQUFDO0lBRWxDLE9BQU8sRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFDLENBQUM7QUFDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW11bHRpLXNwYWNlcyAqL1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbi8vQHRzLWlnbm9yZTogbm8gdHlwZXNcbmltcG9ydCAqIGFzIGpTdGF0IGZyb20gJ2pzdGF0JztcbmltcG9ydCB7cGVyZm9ybU5lbGRlck1lYWRPcHRpbWl6YXRpb259IGZyb20gJy4vZml0dGluZy1hbGdvcml0aG0vb3B0aW1pemVyJztcbmltcG9ydCB7TkVMREVSX01FQURfREVGQVVMVFN9IGZyb20gJy4vZml0dGluZy1hbGdvcml0aG0vb3B0aW1pemVyLW5lbGRlci1tZWFkJztcbmltcG9ydCB7RXh0cmVtdW0sIE9wdGltaXphdGlvblJlc3VsdH0gZnJvbSAnLi9maXR0aW5nLWFsZ29yaXRobS9vcHRpbWl6ZXItbWlzYyc7XG5cblxuZXhwb3J0IGNvbnN0IEZpdEVycm9yTW9kZWwgPSB7XG4gIENPTlNUQU5UOiAnY29uc3RhbnQnLFxuICBQUk9QT1JUSU9OQUw6ICdwcm9wb3J0aW9uYWwnLFxuICBDT01CSU5FRDogJ2NvbWJpbmVkJyxcbn07XG5cbmV4cG9ydCB0eXBlIEZpdFBhcmFtQm91bmRzID0ge1xuICBtaW4/OiBudW1iZXI7XG4gIG1heD86IG51bWJlcjtcbn07XG5cbi8qKiBGaXQgZnVuY3Rpb24gZGVzY3JpcHRpb24uIEFwcGxpZXMgdG8gY3VzdG9tIHVzZXIgZml0IGZ1bmN0aW9ucy5cbiAqIFJlcXVpcmVzIEpTIGFycm93IGZ1bmN0aW9ucyBmb3IgdGhlIGZpdCBmdW5jdGlvbnMgYW5kIGluaXRpYWwgcGFyYW1ldGVycy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZpdEZ1bmN0aW9uRGVzY3JpcHRpb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGZ1bmN0aW9uOiBzdHJpbmc7XG4gIGdldEluaXRpYWxQYXJhbWV0ZXJzOiBzdHJpbmc7XG4gIHBhcmFtZXRlck5hbWVzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IHR5cGUgRml0Q3VydmUgPSB7XG4gIGZpdHRlZEN1cnZlOiAoeDogbnVtYmVyKSA9PiBudW1iZXI7XG4gIHBhcmFtZXRlcnM6IEZsb2F0MzJBcnJheTtcbn07XG5cbmV4cG9ydCB0eXBlIEZpdENvbmZpZGVuY2VJbnRlcnZhbHMgPSB7XG4gIGNvbmZpZGVuY2VUb3A6ICh4OiBudW1iZXIpID0+IG51bWJlcjtcbiAgY29uZmlkZW5jZUJvdHRvbTogKHg6IG51bWJlcikgPT4gbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgRml0U3RhdGlzdGljcyA9IHtcbiAgclNxdWFyZWQ/OiBudW1iZXIsXG4gIGF1Yz86IG51bWJlcixcbiAgaW50ZXJjZXB0WD86IG51bWJlciwgLy8gcGFyYW1ldGVyc1syXVxuICBpbnRlcmNlcHRZPzogbnVtYmVyLCAvLyBmaXR0ZWRDdXJ2ZVtwYXJhbWV0ZXJzWzJdXVxuICBzbG9wZT86IG51bWJlciwgLy8gcGFyYW1ldGVyc1sxXVxuICB0b3A/OiBudW1iZXIsIC8vIHBhcmFtZXRlcnNbMF1cbiAgYm90dG9tPzogbnVtYmVyLCAvLyBwYXJhbWV0ZXJzWzNdXG59O1xuXG5leHBvcnQgdHlwZSBGaXRJbnZlcnRlZEZ1bmN0aW9ucyA9IHtcbiAgaW52ZXJ0ZWQ6ICh5OiBudW1iZXIpID0+IG51bWJlcixcbiAgaW52ZXJ0ZWRUb3A6ICh5OiBudW1iZXIpID0+IG51bWJlcixcbiAgaW52ZXJ0ZWRCb3R0b206ICh5OiBudW1iZXIpID0+IG51bWJlcixcbn07XG5cbi8qKlxuICogIERhdGFncm9rIGN1cnZlIGZpdHRpbmdcbiAqXG4gKiAtIEZpdHRpbmc6IGNvbXB1dGluZyBwYXJhbWV0ZXJzIG9mIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gdG8gYmVzdCBmaXQgdGhlIGRhdGFcbiAqICAgLSBVc2VzIEJGR1Mgb3B0aW1pemF0aW9uIGFsZ29yaXRobSAobXVsdGktdGhyZWFkaW5nIGZvciBwZXJmb3JtYW5jZSkuXG4gKiAgICAgRm9yIGRvc2UtcmVzcG9uc2UgY3VydmVzLCB3ZSBhcmUgdHlwaWNhbGx5IGZpdHRpbmcgdGhlIHNpZ21vaWQgZnVuY3Rpb25cbiAqICAgLSBBYmlsaXR5IHRvIGR5bmFtaWNhbGx5IHJlZ2lzdGVyIGN1c3RvbSBmaXR0aW5nIGZ1bmN0aW9uc1xuICogICAgIC0gQXV0b21hdGljIGZpdCBmdW5jdGlvbiBkZXRlcm1pbmF0aW9uXG4gKiAgICAgLSBDYWNoaW5nIG9mIGN1c3RvbSBmaXR0aW5nIGZ1bmN0aW9uc1xuICogICAtIEFiaWxpdHkgdG8gZ2V0IGZpdHRpbmcgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIChyLXNxdWFyZWQsIGNsYXNzaWZpY2F0aW9uLCBldGMpXG4gKiAtIERlZXAgaW50ZWdyYXRpb24gd2l0aCB0aGUgRGF0YWdyb2sgZ3JpZFxuICogICAtIEVpdGhlciBmaXR0aW5nIG9uIHRoZSBmbHksIG9yIHVzaW5nIHRoZSBzdXBwbGllZCBmdW5jdGlvbiArIHBhcmFtZXRlcnNcbiAqICAgLSBNdWx0aXBsZSBzZXJpZXMgaW4gb25lIGNlbGxcbiAqICAgLSBDYW5kbGVzdGlja3MsIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLCBhbmQgZHJvcGxpbmVzIGRyYXdpbmdcbiAqICAgLSBBYmlsaXR5IHRvIGRlZmluZSBjaGFydCwgbWFya2VyLCBvciBmaXR0aW5nIG9wdGlvbnMgKHN1Y2ggYXMgZml0IGZ1bmN0aW9uIG9yIG1hcmtlciBjb2xvcilcbiAqICAgICBvbiB0aGUgY29sdW1uIGxldmVsLCB3aXRoIHRoZSBhYmlsaXR5IHRvIG92ZXJyaWRlIGl0IG9uIGEgZ3JpZCBjZWxsIG9yIHBvaW50IGxldmVsXG4gKiAgIC0gQ2xpY2tpbmcgYSBwb2ludCBpbiBhIGNoYXJ0IHdpdGhpbiBhIGdyaWQgbWFrZXMgaXQgYW4gb3V0bGllciAtPiBjdXJ2ZSBpcyByZS1maXR0ZWQgb24gdGhlIGZseVxuICogICAtIEFiaWxpdHkgdG8gc3BlY2lmeSBhIGNoYXJ0IGFzIFwicmVmZXJlbmNlXCIgc28gdGhhdCBpdCBpcyBzaG93biBvbiBldmVyeSBvdGhlciBjaGFydCBmb3IgY29tcGFyaXNvblxuICogLSBBYmlsaXR5IHRvIG92ZXJsYXkgY3VydmVzIGZyb20gbXVsdGlwbGUgZ3JpZCBjZWxscyAoc3BlY2lhbCB2aWV3ZXIpXG4gKiAtIFdvcmsgd2l0aCBzZXJpZXMgc3RvcmVkIGluIG11bHRpcGxlIGZvcm1hdHMgKGJpbmFyeSBmb3IgcGVyZm9ybWFuY2UsIGpzb24gZm9yIGZsZXhpYmlsaXR5LCBldGMpXG4qL1xuXG5jb25zdCBEUk9QTElORVMgPSBbJ0lDNTAnXTtcblxuZXhwb3J0IHR5cGUgRml0TWFya2VyVHlwZSA9ICdhc3RlcmlzaycgfCAnY2lyY2xlJyB8ICdjcm9zcyBib3JkZXInIHwgJ2RpYW1vbmQnIHwgJ3NxdWFyZScgfCAnc3RhcicgfCAndHJpYW5nbGUgYm90dG9tJyB8XG4gICd0cmlhbmdsZSBsZWZ0JyB8ICd0cmlhbmdsZSByaWdodCcgfCAndHJpYW5nbGUgdG9wJztcblxuZXhwb3J0IHR5cGUgRml0T3V0bGllck1hcmtlclR5cGUgPSAnYXN0ZXJpc2snIHwgJ2NpcmNsZScgfCAnY3Jvc3MgYm9yZGVyJyB8ICdkaWFtb25kJyB8ICdvdXRsaWVyJyB8ICdzcXVhcmUnIHwgJ3N0YXInIHxcbiAgJ3RyaWFuZ2xlIGJvdHRvbScgfCAndHJpYW5nbGUgbGVmdCcgfCAndHJpYW5nbGUgcmlnaHQnIHwgJ3RyaWFuZ2xlIHRvcCc7XG5cbmV4cG9ydCB0eXBlIEZpdExpbmVTdHlsZSA9ICdzb2xpZCcgfCAnZG90dGVkJyB8ICdkYXNoZWQnIHwgJ2Rhc2hkb3R0ZWQnO1xuXG5leHBvcnQgdHlwZSBGaXRFcnJvck1vZGVsVHlwZSA9ICdjb25zdGFudCcgfCAncHJvcG9ydGlvbmFsJyB8ICdjb21iaW5lZCc7XG5cbi8qKiBBIHBvaW50IGluIHRoZSBmaXQgc2VyaWVzLiBPbmx5IHggYW5kIHkgYXJlIHJlcXVpcmVkLiBDYW4gb3ZlcnJpZGUgc29tZSBmaWVsZHMgZGVmaW5lZCBpbiBJRml0U2VyaWVzT3B0aW9ucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZpdFBvaW50IHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIG91dGxpZXI/OiBib29sZWFuOyAgICAgICAvLyBpZiB0cnVlLCByZW5kZXJzIGFzICd4JyBhbmQgZ2V0cyBpZ25vcmVkIGZvciBjdXJ2ZSBmaXR0aW5nXG4gIGNvbG9yPzogc3RyaW5nOyAgICAgICAgICAvLyBvdmVycmlkZXMgdGhlIG1hcmtlciBjb2xvciBkZWZpbmVkIGluIElGaXRTZXJpZXNPcHRpb25zXG4gIG91dGxpZXJDb2xvcj86IHN0cmluZzsgICAvLyBvdmVycmlkZXMgdGhlIG91dGxpZXIgY29sb3IgZGVmaW5lZCBpbiBJRml0U2VyaWVzT3B0aW9uc1xuICBtYXJrZXI/OiBGaXRNYXJrZXJUeXBlOyAgLy8gb3ZlcnJpZGVzIHRoZSBtYXJrZXIgdHlwZSBkZWZpbmVkIGluIElGaXRTZXJpZXNPcHRpb25zXG4gIG91dGxpZXJNYXJrZXI/OiBGaXRPdXRsaWVyTWFya2VyVHlwZTsgLy8gb3ZlcnJpZGVzIHRoZSBvdXRsaWVyIG1hcmtlciB0eXBlIGRlZmluZWQgaW4gSUZpdFNlcmllc09wdGlvbnNcbiAgc2l6ZT86IG51bWJlcjsgICAgICAgICAgIC8vIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBtYXJrZXIgc2l6ZVxuICBzdGRldj86IG51bWJlcjsgICAgICAgICAgLy8gd2hlbiBkZWZpbmVkLCByZW5kZXJzIGFuIGVycm9yIGJhciBjYW5kbGVzdGlja1xuICAvLyBtaW5ZPzogbnVtYmVyOyAgICAgICAgICAgLy8gd2hlbiBkZWZpbmVkLCB0aGUgbWFya2VyIHJlbmRlcnMgYXMgYSBjYW5kbGVzdGljayB3aXRoIHdoaXNrZXJzIFttaW5ZLCBtYXhZXVxuICAvLyBtYXhZPzogbnVtYmVyOyAgICAgICAgICAgLy8gd2hlbiBkZWZpbmVkLCB0aGUgbWFya2VyIHJlbmRlcnMgYXMgYSBjYW5kbGVzdGljayB3aXRoIHdoaXNrZXJzIFttaW5ZLCBtYXhZXVxufVxuXG4vKiogQSBzZXJpZXMgY29uc2lzdHMgb2YgcG9pbnRzLCBoYXMgYSBuYW1lLCBhbmQgb3B0aW9ucy5cbiAqIElmIGRlZmluZWQsIHNlcmllc09wdGlvbnMgYXJlIG1lcmdlZCB3aXRoIHtAbGluayBJRml0Q2hhcnREYXRhLnNlcmllc09wdGlvbnN9ICovXG5leHBvcnQgaW50ZXJmYWNlIElGaXRTZXJpZXMgZXh0ZW5kcyBJRml0U2VyaWVzT3B0aW9ucyB7XG4gIHBvaW50czogSUZpdFBvaW50W107XG59XG5cbi8qKiBDaGFydCBsYWJlbHMgb3B0aW9ucy4gQ29udHJvbHMgdGhlIGNoYXJ0IGxhYmVscy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZpdENoYXJ0TGFiZWxPcHRpb25zIHtcbiAgdmlzaWJsZTogYm9vbGVhbjsgICAgICAgICAvLyBpZiB0cnVlLCByZW5kZXJzIHRoZSBsYWJlbCBvbiB0aGUgcGxvdFxuICBjb2xvcjogc3RyaW5nOyAgICAgICAgICAgIC8vIGRlZmluZXMgdGhlIGxhYmVsIGNvbG9yXG4gIG5hbWU6IHN0cmluZzsgICAgICAgICAgICAgLy8gZGVmaW5lcyB0aGUgbGFiZWwgbmFtZVxufVxuXG4vKiogQ2hhcnQgb3B0aW9ucy4gRm9yIGZpdHRlZCBjdXJ2ZXMsIHRoaXMgb2JqZWN0IGlzIHN0b3JlZCBpbiB0aGUgZ3JpZCBjb2x1bW4gdGFncyBhbmQgaXMgdXNlZCBieSB0aGUgcmVuZGVyZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIElGaXRDaGFydE9wdGlvbnMge1xuICBtaW5YPzogbnVtYmVyO1xuICBtaW5ZPzogbnVtYmVyO1xuICBtYXhYPzogbnVtYmVyO1xuICBtYXhZPzogbnVtYmVyO1xuXG4gIHRpdGxlPzogc3RyaW5nOyAgICAgICAgICAgIC8vIGRlZmluZXMgdGhlIHBsb3QgdGl0bGUuIElmIHRoZSBwbG90IHNpemUgaXMgZW5vdWdoLCB3aWxsIHJlbmRlciBpdC5cbiAgeEF4aXNOYW1lPzogc3RyaW5nOyAgICAgICAgLy8gZGVmaW5lcyB0aGUgeCBheGlzIG5hbWUuIElmIHRoZSBwbG90IHNpemUgaXMgZW5vdWdoLCB3aWxsIHJlbmRlciBpdC5cbiAgeUF4aXNOYW1lPzogc3RyaW5nOyAgICAgICAgLy8gZGVmaW5lcyB0aGUgWSBheGlzIG5hbWUuIElmIHRoZSBwbG90IHNpemUgaXMgZW5vdWdoLCB3aWxsIHJlbmRlciBpdC5cblxuICBsb2dYPzogYm9vbGVhbjsgICAgICAgICAgICAvLyBkZWZpbmVzIHdoZXRoZXIgdGhlIHggZGF0YSBzaG91bGQgYmUgbG9nYXJpdGhtaWMgb3Igbm90XG4gIGxvZ1k/OiBib29sZWFuOyAgICAgICAgICAgIC8vIGRlZmluZXMgd2hldGhlciB0aGUgeSBkYXRhIHNob3VsZCBiZSBsb2dhcml0aG1pYyBvciBub3RcblxuICBhbGxvd1haZXJvZXM/OiBib29sZWFuOyAgICAvLyBkZWZpbmVzIHdoZXRoZXIgeCB6ZXJvZXMgYWxsb3dlZCBmb3IgbG9nYXJpdGhtaWMgZGF0YSBvciBub3RcbiAgbWVyZ2VTZXJpZXM/OiBib29sZWFuOyAgICAgLy8gZGVmaW5lcyB3aGV0aGVyIHRvIG1lcmdlIHNlcmllcyBvciBub3RcblxuICBzaG93Q29sdW1uTGFiZWw/OiBib29sZWFuOyAvLyBkZWZpbmVzIHdoZXRoZXIgdG8gc2hvdyB0aGUgY29sdW1uIGxhYmVsIGluIHRoZSBsZWdlbmQgb3Igbm90XG4gIHNob3dTdGF0aXN0aWNzPzogc3RyaW5nW107IC8vIGRlZmluZXMgdGhlIHN0YXRpc3RpY3MgdGhhdCB3b3VsZCBiZSBzaG93biBvbiB0aGUgcGxvdFxuICBsYWJlbE9wdGlvbnM/OiBJRml0Q2hhcnRMYWJlbE9wdGlvbnNbXTsgLy8gY29udHJvbHMgdGhlIHBsb3QgbGFiZWxzXG59XG5cbi8qKiBEYXRhIGZvciB0aGUgZml0IGNoYXJ0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRml0Q2hhcnREYXRhIHtcbiAgY2hhcnRPcHRpb25zPzogSUZpdENoYXJ0T3B0aW9ucztcbiAgc2VyaWVzT3B0aW9ucz86IElGaXRTZXJpZXNPcHRpb25zOyAgLy8gRGVmYXVsdCBzZXJpZXMgb3B0aW9ucy4gSW5kaXZpZHVhbCBzZXJpZXMgY2FuIG92ZXJyaWRlIGl0LlxuICBzZXJpZXM/OiBJRml0U2VyaWVzW107XG59XG5cbi8qKiBDbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIElGaXRDaGFydERhdGF9IGludGVyZmFjZSAqL1xuZXhwb3J0IGNsYXNzIEZpdENoYXJ0RGF0YSBpbXBsZW1lbnRzIElGaXRDaGFydERhdGEge1xuICBjaGFydE9wdGlvbnM6IElGaXRDaGFydE9wdGlvbnMgPSB7fTtcbiAgc2VyaWVzT3B0aW9uczogSUZpdFNlcmllc09wdGlvbnMgPSB7fTsgIC8vIERlZmF1bHQgc2VyaWVzIG9wdGlvbnMuIEluZGl2aWR1YWwgc2VyaWVzIGNhbiBvdmVycmlkZSBpdC5cbiAgc2VyaWVzOiBJRml0U2VyaWVzW10gPSBbXTtcbn1cblxuLyoqIFNlcmllcyBvcHRpb25zIGNhbiBiZSBlaXRoZXIgYXBwbGllZCBnbG9iYWxseSBvbiBhIGNvbHVtbiBsZXZlbCwgb3IgcGFydGlhbGx5IG92ZXJyaWRkZW4gaW4gcGFydGljdWxhciBzZXJpZXMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZpdFNlcmllc09wdGlvbnMge1xuICBba2V5OiBzdHJpbmddOiBhbnk7ICAgICAgICAgICAgICAgICAgIC8vIGFsbG93cyBnZXR0aW5nIGRhdGEgYnkga2V5XG4gIG5hbWU/OiBzdHJpbmc7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udHJvbHMgdGhlIHNlcmllcyBuYW1lXG4gIGZpdEZ1bmN0aW9uPzogc3RyaW5nIHwgSUZpdEZ1bmN0aW9uRGVzY3JpcHRpb247IC8vIGNvbnRyb2xzIHRoZSBzZXJpZXMgZml0IGZ1bmN0aW9uXG4gIHBhcmFtZXRlcnM/OiBudW1iZXJbXTsgICAgICAgICAgICAgICAgLy8gY29udHJvbHMgdGhlIHNlcmllcyBwYXJhbWV0ZXJzLCBhdXRvLWZpdHRpbmcgd2hlbiBub3QgZGVmaW5lZFxuICBwYXJhbWV0ZXJCb3VuZHM/OiBGaXRQYXJhbUJvdW5kc1tdOyAgIC8vIGRlZmluZXMgdGhlIGFjY2VwdGFibGUgcmFuZ2Ugb2YgZWFjaCBwYXJhbWV0ZXIsIHdoaWNoIGlzIHRha2VuIGludG8gYWNjb3VudCBkdXJpbmcgdGhlIGZpdHRpbmcuIFNlZSBhbHNvIGBwYXJhbWV0ZXJzYC5cbiAgbWFya2VyVHlwZT86IEZpdE1hcmtlclR5cGU7ICAgICAgICAgICAvLyBkZWZpbmVzIHRoZSBzZXJpZXMgbWFya2VyIHR5cGVcbiAgb3V0bGllck1hcmtlclR5cGU/OiBGaXRPdXRsaWVyTWFya2VyVHlwZTsgIC8vIGRlZmluZXMgdGhlIHNlcmllcyBvdXRsaWVyIG1hcmtlciB0eXBlXG4gIGxpbmVTdHlsZT86IEZpdExpbmVTdHlsZTsgICAgICAgICAgICAgLy8gZGVmaW5lcyB0aGUgc2VyaWVzIGxpbmUgc3R5bGVcbiAgcG9pbnRDb2xvcj86IHN0cmluZzsgICAgICAgICAgICAgICAgICAvLyBvdmVycmlkZXMgdGhlIHN0YW5kYXJkaXplZCBzZXJpZXMgcG9pbnQgY29sb3JcbiAgZml0TGluZUNvbG9yPzogc3RyaW5nOyAgICAgICAgICAgICAgICAvLyBvdmVycmlkZXMgdGhlIHN0YW5kYXJkaXplZCBzZXJpZXMgZml0IGxpbmUgY29sb3JcbiAgY29uZmlkZW5jZUludGVydmFsQ29sb3I/OiBzdHJpbmc7ICAgICAvLyBvdmVycmlkZXMgdGhlIHN0YW5kYXJkaXplZCBzZXJpZXMgY29uZmlkZW5jZSBpbnRlcnZhbCBjb2xvclxuICBvdXRsaWVyQ29sb3I/OiBzdHJpbmc7ICAgICAgICAgICAgICAgIC8vIG92ZXJyaWRlcyB0aGUgc3RhbmRhcmRpemVkIHNlcmllcyBvdXRsaWVyIGNvbG9yXG4gIGNvbm5lY3REb3RzPzogYm9vbGVhbjsgICAgICAgICAgICAgICAgLy8gZGVmaW5lcyB3aGV0aGVyIHRvIGNvbm5lY3QgdGhlIHBvaW50cyB3aXRoIGxpbmVzIG9yIG5vdC4gSWYgdHJ1ZSBhbmQgc2hvd0ZpdExpbmUgaXMgZmFsc2UgLSBmaXR0aW5nIGlzIGRpc2FibGVkIC0gb3RoZXJ3aXNlLCBpdCB3aWxsIGJlIHJlbmRlcmVkIGFjY29yZGluZ2x5IHRvIHRoZSBwYXJhbWV0ZXIgdmFsdWUuXG4gIHNob3dGaXRMaW5lPzogYm9vbGVhbjsgICAgICAgICAgICAgICAgLy8gZGVmaW5lcyB3aGV0aGVyIHRvIHNob3cgdGhlIGZpdCBsaW5lIG9yIG5vdFxuICBzaG93UG9pbnRzPzogc3RyaW5nOyAgICAgICAgICAgICAgICAgIC8vIGRlZmluZXMgdGhlIGRhdGEgZGlzcGxheSBtb2RlXG4gIHNob3dDdXJ2ZUNvbmZpZGVuY2VJbnRlcnZhbD86IGJvb2xlYW47ICAgIC8vIGRlZmluZXMgd2hldGhlciB0byBzaG93IHRoZSBjb25maWRlbmNlIGludGVydmFscyBvciBub3RcbiAgZXJyb3JNb2RlbD86IEZpdEVycm9yTW9kZWxUeXBlOyAgICAgICAvLyBkZWZpbmVzIHRoZSBzZXJpZXMgZXJyb3IgbW9kZWxcbiAgY2xpY2tUb1RvZ2dsZT86IGJvb2xlYW47ICAgIC8vIGlmIHRydWUsIGNsaWNraW5nIG9uIHRoZSBwb2ludCB0b2dnbGVzIGl0cyBvdXRsaWVyIHN0YXR1cyBhbmQgY2F1c2VzIGN1cnZlIHJlZml0dGluZ1xuICBsYWJlbHM/OiB7W2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbn07IC8vIGNvbnRyb2xsZWQgYnkgSUZpdENoYXJ0RGF0YSBsYWJlbE9wdGlvbnMsIHNob3dzIGxhYmVsc1xuICBkcm9wbGluZXM/OiBzdHJpbmdbXTsgICAgICAgICAgICAgICAgIC8vIGRlZmluZXMgdGhlIGRyb3BsaW5lcyB0aGF0IHdvdWxkIGJlIHNob3duIG9uIHRoZSBwbG90IChJQzUwKVxuICBjb2x1bW5OYW1lPzogc3RyaW5nOyAgICAgICAgICAgICAgICAgIC8vIGRlZmluZXMgdGhlIGNvbHVtbiBuYW1lIHdoZXJlIHRoZSBzZXJpZXMgaXMgc3RvcmVkXG59XG4vLyBUT0RPOiBzaG93IGxhYmVscyBpbiBwcm9wZXJ0eSBwYW5lbCBpZiBwcmVzZW50LCBjb2xvciBieSBkZWZhdWx0IGZyb20gc2VyaWVzXG5cbi8vIFRPRE8/OiBhZGQgbWV0aG9kIHRvIHJldHVybiBwYXJhbWV0ZXJzIC0gZ2V0IHBhcmFtZXRlcnMgZnJvbSBmaXQgZnVuY3Rpb25cbi8qKiBDbGFzcyBmb3IgdGhlIGZpdCBmdW5jdGlvbnMgKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBGaXRGdW5jdGlvbiB7XG4gIGFic3RyYWN0IGdldCBuYW1lKCk6IHN0cmluZztcbiAgYWJzdHJhY3QgZ2V0IHBhcmFtZXRlck5hbWVzKCk6IHN0cmluZ1tdO1xuICBhYnN0cmFjdCB5KHBhcmFtczogRmxvYXQzMkFycmF5LCB4OiBudW1iZXIpOiBudW1iZXI7XG4gIGFic3RyYWN0IGdldEluaXRpYWxQYXJhbWV0ZXJzKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSk6IEZsb2F0MzJBcnJheTtcbn1cblxuLyoqIENsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgbGluZWFyIGZ1bmN0aW9uICovXG5leHBvcnQgY2xhc3MgTGluZWFyRnVuY3Rpb24gZXh0ZW5kcyBGaXRGdW5jdGlvbiB7XG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEZJVF9GVU5DVElPTl9MSU5FQVI7XG4gIH1cblxuICBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ1Nsb3BlJywgJ0ludGVyY2VwdCddO1xuICB9XG5cbiAgeShwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbGluZWFyKHBhcmFtcywgeCk7XG4gIH1cblxuICBnZXRJbml0aWFsUGFyYW1ldGVycyh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pOiBGbG9hdDMyQXJyYXkge1xuICAgIGxldCBtaW5JbmRleCA9IDA7XG4gICAgbGV0IG1heEluZGV4ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh4W2ldIDwgeFttaW5JbmRleF0pXG4gICAgICAgIG1pbkluZGV4ID0gaTtcbiAgICAgIGlmICh4W2ldID4geFttYXhJbmRleF0pXG4gICAgICAgIG1heEluZGV4ID0gaTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWx0YVggPSB4W21heEluZGV4XSAtIHhbbWluSW5kZXhdO1xuICAgIGNvbnN0IGRlbHRhWSA9IHlbbWF4SW5kZXhdIC0geVttaW5JbmRleF07XG4gICAgY29uc3QgQSA9IGRlbHRhWSAvIGRlbHRhWDtcbiAgICBjb25zdCBCID0geVttYXhJbmRleF0gLSBBICogeFttYXhJbmRleF07XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IEZsb2F0MzJBcnJheSgyKTtcbiAgICBwYXJhbXMuc2V0KFtBLCBCXSk7XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxufVxuXG4vKiogQ2xhc3MgdGhhdCBpbXBsZW1lbnRzIHRoZSBzaWdtb2lkIGZ1bmN0aW9uICovXG5leHBvcnQgY2xhc3MgU2lnbW9pZEZ1bmN0aW9uIGV4dGVuZHMgRml0RnVuY3Rpb24ge1xuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBGSVRfRlVOQ1RJT05fU0lHTU9JRDtcbiAgfVxuXG4gIGdldCBwYXJhbWV0ZXJOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnVG9wJywgJ0JvdHRvbScsICdTbG9wZScsICdJQzUwJ107XG4gIH1cblxuICB5KHBhcmFtczogRmxvYXQzMkFycmF5LCB4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBzaWdtb2lkKHBhcmFtcywgeCk7XG4gIH1cblxuICBnZXRJbml0aWFsUGFyYW1ldGVycyh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pOiBGbG9hdDMyQXJyYXkge1xuICAgIGNvbnN0IGRhdGFCb3VuZHMgPSBERy5SZWN0LmZyb21YWUFycmF5cyh4LCB5KTtcbiAgICBjb25zdCBtZWRZID0gKGRhdGFCb3VuZHMuYm90dG9tIC0gZGF0YUJvdW5kcy50b3ApIC8gMiArIGRhdGFCb3VuZHMudG9wO1xuICAgIGxldCBtYXhZSW50ZXJ2YWwgPSBkYXRhQm91bmRzLmJvdHRvbSAtIGRhdGFCb3VuZHMudG9wO1xuICAgIGxldCBuZWFyZXN0WEluZGV4ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRJbnRlcnZhbCA9IE1hdGguYWJzKHlbaV0gLSBtZWRZKTtcbiAgICAgIGlmIChjdXJyZW50SW50ZXJ2YWwgPCBtYXhZSW50ZXJ2YWwpIHtcbiAgICAgICAgbWF4WUludGVydmFsID0gY3VycmVudEludGVydmFsO1xuICAgICAgICBuZWFyZXN0WEluZGV4ID0gaTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgeEF0TWVkWSA9IHhbbmVhcmVzdFhJbmRleF07XG4gICAgY29uc3Qgc2xvcGUgPSB5WzBdID4geVt5Lmxlbmd0aCAtIDFdID8gMSA6IC0xO1xuXG4gICAgLy8gcGFyYW1zIGFyZTogW21heCwgdGFuLCBJQzUwLCBtaW5dXG4gICAgY29uc3QgcGFyYW1zID0gbmV3IEZsb2F0MzJBcnJheSg0KTtcbiAgICBwYXJhbXMuc2V0KFtkYXRhQm91bmRzLmJvdHRvbSwgc2xvcGUsIHhBdE1lZFksIGRhdGFCb3VuZHMudG9wXSk7XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxufVxuXG4vKiogQ2xhc3MgdGhhdCBpbXBsZW1lbnRzIHRoZSBsaW5lYXIgbG9nYXJpdGhtaWMgZnVuY3Rpb24gKi9cbmV4cG9ydCBjbGFzcyBMb2dMaW5lYXJGdW5jdGlvbiBleHRlbmRzIEZpdEZ1bmN0aW9uIHtcbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRklUX0ZVTkNUSU9OX0xPR19MSU5FQVI7XG4gIH1cblxuICBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ1Nsb3BlJywgJ0ludGVyY2VwdCddO1xuICB9XG5cbiAgeShwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbG9nTGluZWFyKHBhcmFtcywgeCk7XG4gIH1cblxuICBnZXRJbml0aWFsUGFyYW1ldGVycyh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pOiBGbG9hdDMyQXJyYXkge1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBGbG9hdDMyQXJyYXkoMik7XG4gICAgcGFyYW1zLnNldChbLTUsIDEwMF0pO1xuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cbn1cblxuLyoqIENsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgZXhwb25lbnRpYWwgZnVuY3Rpb24gKi9cbmV4cG9ydCBjbGFzcyBFeHBvbmVudGlhbEZ1bmN0aW9uIGV4dGVuZHMgRml0RnVuY3Rpb24ge1xuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBGSVRfRlVOQ1RJT05fRVhQT05FTlRJQUw7XG4gIH1cblxuICBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ01hbnRpc3NhJywgJ1Bvd2VyJ107XG4gIH1cblxuICB5KHBhcmFtczogRmxvYXQzMkFycmF5LCB4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBleHBvbmVudGlhbChwYXJhbXMsIHgpO1xuICB9XG5cbiAgZ2V0SW5pdGlhbFBhcmFtZXRlcnMoeDogbnVtYmVyW10sIHk6IG51bWJlcltdKTogRmxvYXQzMkFycmF5IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgRmxvYXQzMkFycmF5KDIpO1xuICAgIHBhcmFtcy5zZXQoWzEwMCwgLTJdKTtcbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG59XG5cbi8qKiBDbGFzcyB0aGF0IGltcGxlbWVudHMgdXNlciBKUyBmdW5jdGlvbnMgKi9cbmV4cG9ydCBjbGFzcyBKc0Z1bmN0aW9uIGV4dGVuZHMgRml0RnVuY3Rpb24ge1xuICBwcml2YXRlIF9uYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX3BhcmFtZXRlck5hbWVzOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHlGdW5jOiAocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcikgPT4gbnVtYmVyLFxuICAgIGdldEluaXRQYXJhbXNGdW5jOiAoeDogbnVtYmVyW10sIHk6IG51bWJlcltdKSA9PiBGbG9hdDMyQXJyYXksIHBhcmFtZXRlck5hbWVzOiBzdHJpbmdbXSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgICB0aGlzLl9wYXJhbWV0ZXJOYW1lcyA9IHBhcmFtZXRlck5hbWVzO1xuXG4gICAgdGhpcy55ID0geUZ1bmM7XG4gICAgdGhpcy5nZXRJbml0aWFsUGFyYW1ldGVycyA9IGdldEluaXRQYXJhbXNGdW5jO1xuICB9XG5cbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgfVxuXG4gIGdldCBwYXJhbWV0ZXJOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmFtZXRlck5hbWVzO1xuICB9XG5cbiAgeShwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgZ2V0SW5pdGlhbFBhcmFtZXRlcnMoeDogbnVtYmVyW10sIHk6IG51bWJlcltdKTogRmxvYXQzMkFycmF5IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG59XG5cbi8vIE9iamVjdCB3aXRoIGZpdCBmdW5jdGlvbnNcbmV4cG9ydCBjb25zdCBmaXRGdW5jdGlvbnM6IHtbaW5kZXg6IHN0cmluZ106IEZpdEZ1bmN0aW9ufSA9IHtcbiAgJ2xpbmVhcic6IG5ldyBMaW5lYXJGdW5jdGlvbigpLFxuICAnc2lnbW9pZCc6IG5ldyBTaWdtb2lkRnVuY3Rpb24oKSxcbiAgJ2xvZy1saW5lYXInOiBuZXcgTG9nTGluZWFyRnVuY3Rpb24oKSxcbiAgJ2V4cG9uZW50aWFsJzogbmV3IEV4cG9uZW50aWFsRnVuY3Rpb24oKSxcbn07XG5cbi8qKiBQcm9wZXJ0aWVzIHRoYXQgZGVzY3JpYmUge0BsaW5rIEZpdFN0YXRpc3RpY3N9LiBVc2VmdWwgZm9yIGVkaXRpbmcsIGluaXRpYWxpemF0aW9uLCB0cmFuc2Zvcm1hdGlvbnMsIGV0Yy4gKi9cbmV4cG9ydCBjb25zdCBzdGF0aXN0aWNzUHJvcGVydGllczogREcuUHJvcGVydHlbXSA9IFtcbiAgREcuUHJvcGVydHkuanMoJ3JTcXVhcmVkJywgREcuVFlQRS5GTE9BVCwge3VzZXJFZGl0YWJsZTogZmFsc2V9KSxcbiAgREcuUHJvcGVydHkuanMoJ2F1YycsIERHLlRZUEUuRkxPQVQsIHt1c2VyRWRpdGFibGU6IGZhbHNlLCBmcmllbmRseU5hbWU6ICdBVUMnfSksXG4gIERHLlByb3BlcnR5LmpzKCdpbnRlcmNlcHRZJywgREcuVFlQRS5GTE9BVCwge3VzZXJFZGl0YWJsZTogZmFsc2V9KSxcbiAgREcuUHJvcGVydHkuanMoJ2ludGVyY2VwdFgnLCBERy5UWVBFLkZMT0FULCB7dXNlckVkaXRhYmxlOiBmYWxzZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnc2xvcGUnLCBERy5UWVBFLkZMT0FULCB7dXNlckVkaXRhYmxlOiBmYWxzZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygndG9wJywgREcuVFlQRS5GTE9BVCwge3VzZXJFZGl0YWJsZTogZmFsc2UsIGZyaWVuZGx5TmFtZTogJ01heCBZJ30pLFxuICBERy5Qcm9wZXJ0eS5qcygnYm90dG9tJywgREcuVFlQRS5GTE9BVCwge3VzZXJFZGl0YWJsZTogZmFsc2UsIGZyaWVuZGx5TmFtZTogJ01pbiBZJ30pLFxuXTtcblxuLyoqIFByb3BlcnRpZXMgdGhhdCBkZXNjcmliZSB7QGxpbmsgSUZpdENoYXJ0T3B0aW9uc30uIFVzZWZ1bCBmb3IgZWRpdGluZywgaW5pdGlhbGl6YXRpb24sIHRyYW5zZm9ybWF0aW9ucywgZXRjLiAqL1xuZXhwb3J0IGNvbnN0IGZpdENoYXJ0RGF0YVByb3BlcnRpZXM6IERHLlByb3BlcnR5W10gPSBbXG4gIC8vIFN0eWxlIGFuZCB6b29tXG4gIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSB0b29sdGlwc1xuICBERy5Qcm9wZXJ0eS5qcygnbWluWCcsIERHLlRZUEUuRkxPQVQsIHtudWxsYWJsZTogdHJ1ZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnbWluWScsIERHLlRZUEUuRkxPQVQsIHtudWxsYWJsZTogdHJ1ZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnbWF4WCcsIERHLlRZUEUuRkxPQVQsIHtudWxsYWJsZTogdHJ1ZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnbWF4WScsIERHLlRZUEUuRkxPQVQsIHtudWxsYWJsZTogdHJ1ZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygndGl0bGUnLCBERy5UWVBFLlNUUklORywge251bGxhYmxlOiB0cnVlfSksXG4gIERHLlByb3BlcnR5LmpzKCd4QXhpc05hbWUnLCBERy5UWVBFLlNUUklORywge2Rlc2NyaXB0aW9uOlxuICAgICdMYWJlbCB0byBzaG93IG9uIHRoZSBYIGF4aXMuIElmIG5vdCBzcGVjaWZpZWQsIGNvcnJlc3BvbmRpbmcgZGF0YSBjb2x1bW4gbmFtZSBpcyB1c2VkJywgbnVsbGFibGU6IHRydWV9KSxcbiAgREcuUHJvcGVydHkuanMoJ3lBeGlzTmFtZScsIERHLlRZUEUuU1RSSU5HLCB7ZGVzY3JpcHRpb246XG4gICAgJ0xhYmVsIHRvIHNob3cgb24gdGhlIFkgYXhpcy4gSWYgbm90IHNwZWNpZmllZCwgY29ycmVzcG9uZGluZyBkYXRhIGNvbHVtbiBuYW1lIGlzIHVzZWQnLCBudWxsYWJsZTogdHJ1ZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnbG9nWCcsIERHLlRZUEUuQk9PTCwge2Rlc2NyaXB0aW9uOiAnV2hldGhlciB0aGUgWCBheGlzIHNob3VsZCBiZSBsb2dhcml0aG1pYycsIGRlZmF1bHRWYWx1ZTogZmFsc2V9KSxcbiAgREcuUHJvcGVydHkuanMoJ2xvZ1knLCBERy5UWVBFLkJPT0wsIHtkZXNjcmlwdGlvbjogJ1doZXRoZXIgdGhlIFkgYXhpcyBzaG91bGQgYmUgbG9nYXJpdGhtaWMnLCBkZWZhdWx0VmFsdWU6IGZhbHNlfSksXG4gIERHLlByb3BlcnR5LmpzKCdhbGxvd1haZXJvZXMnLCBERy5UWVBFLkJPT0wsIHtkZXNjcmlwdGlvbjogJ1doZXRoZXIgeCB6ZXJvZXMgYWxsb3dlZCBmb3IgbG9nYXJpdGhtaWMgZGF0YSBvciBub3QnLCBkZWZhdWx0VmFsdWU6IHRydWV9KSxcbiAgREcuUHJvcGVydHkuanMoJ21lcmdlU2VyaWVzJywgREcuVFlQRS5CT09MLCB7ZGVzY3JpcHRpb246ICdNZXJnZXMgYWxsIHNlcmllcyB3aXRoaW4gb25lIGNlbGwgaW50byBvbmUgc2VyaWVzJywgZGVmYXVsdFZhbHVlOiBmYWxzZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnc2hvd0NvbHVtbkxhYmVsJywgREcuVFlQRS5CT09MLCB7ZGVzY3JpcHRpb246ICdXaGV0aGVyIHRvIHNob3cgdGhlIGNvbHVtbiBsYWJlbCBpbiB0aGUgbGVnZW5kIG9yIG5vdCcsIGRlZmF1bHRWYWx1ZTogZmFsc2V9KSxcbiAgREcuUHJvcGVydHkuanMoJ3Nob3dTdGF0aXN0aWNzJywgREcuVFlQRS5TVFJJTkdfTElTVCwge2Rlc2NyaXB0aW9uOiAnV2hldGhlciBzcGVjaWZpYyBzdGF0aXN0aWNzIHNob3VsZCBiZSByZW5kZXJlZCcsXG4gICAgY2hvaWNlczogc3RhdGlzdGljc1Byb3BlcnRpZXMubWFwKChmcnApID0+IGZycC5uYW1lKSwgaW5wdXRUeXBlOiAnTXVsdGlDaG9pY2UnLFxuICAgIC8vQHRzLWlnbm9yZVxuICAgIGZyaWVuZGx5TmFtZTogJ1N0YXRpc3RpY3MnfSksXG5dO1xuXG4vKiogUHJvcGVydGllcyB0aGF0IGRlc2NyaWJlIHtAbGluayBJRml0U2VyaWVzT3B0aW9uc30uIFVzZWZ1bCBmb3IgZWRpdGluZywgaW5pdGlhbGl6YXRpb24sIHRyYW5zZm9ybWF0aW9ucywgZXRjLiAqL1xuZXhwb3J0IGNvbnN0IGZpdFNlcmllc1Byb3BlcnRpZXM6IERHLlByb3BlcnR5W10gPSBbXG4gIERHLlByb3BlcnR5LmpzKCdmaXRGdW5jdGlvbicsIERHLlRZUEUuU1RSSU5HLFxuICAgIHtjYXRlZ29yeTogJ0ZpdHRpbmcnLCBjaG9pY2VzOiBPYmplY3Qua2V5cyhmaXRGdW5jdGlvbnMpLCBkZWZhdWx0VmFsdWU6ICdzaWdtb2lkJ30pLFxuICBERy5Qcm9wZXJ0eS5qcygncG9pbnRDb2xvcicsIERHLlRZUEUuU1RSSU5HLFxuICAgIHtjYXRlZ29yeTogJ1JlbmRlcmluZycsIG51bGxhYmxlOiB0cnVlLCBpbnB1dFR5cGU6ICdDb2xvcid9KSxcbiAgREcuUHJvcGVydHkuanMoJ2ZpdExpbmVDb2xvcicsIERHLlRZUEUuU1RSSU5HLFxuICAgIHtjYXRlZ29yeTogJ1JlbmRlcmluZycsIG51bGxhYmxlOiB0cnVlLCBpbnB1dFR5cGU6ICdDb2xvcid9KSxcbiAgREcuUHJvcGVydHkuanMoJ291dGxpZXJDb2xvcicsIERHLlRZUEUuU1RSSU5HLFxuICAgIHtjYXRlZ29yeTogJ1JlbmRlcmluZycsIG51bGxhYmxlOiB0cnVlLCBpbnB1dFR5cGU6ICdDb2xvcid9KSxcbiAgREcuUHJvcGVydHkuanMoJ2Vycm9yTW9kZWwnLCBERy5UWVBFLlNUUklORywge2NhdGVnb3J5OiAnRml0dGluZycsIGRlZmF1bHRWYWx1ZTogJ2NvbnN0YW50JyxcbiAgICBjaG9pY2VzOiBbJ2NvbnN0YW50JywgJ3Byb3BvcnRpb25hbCcsICdjb21iaW5lZCddLCBudWxsYWJsZTogZmFsc2V9KSxcbiAgREcuUHJvcGVydHkuanMoJ2Nvbm5lY3REb3RzJywgREcuVFlQRS5CT09MLCB7Y2F0ZWdvcnk6ICdGaXR0aW5nJywgZGVmYXVsdFZhbHVlOiBmYWxzZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnY2xpY2tUb1RvZ2dsZScsIERHLlRZUEUuQk9PTCwge2NhdGVnb3J5OiAnRml0dGluZycsIGRlc2NyaXB0aW9uOlxuICAgICdDbGljayBvbiBhIHBvaW50IHRvIG1hcmsgaXQgYXMgb3V0bGllciBhbmQgcmVmaXQnLCBudWxsYWJsZTogdHJ1ZSwgZGVmYXVsdFZhbHVlOiBmYWxzZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnc2hvd0ZpdExpbmUnLCBERy5UWVBFLkJPT0wsIHtjYXRlZ29yeTogJ0ZpdHRpbmcnLCBkZWZhdWx0VmFsdWU6IHRydWV9KSxcbiAgREcuUHJvcGVydHkuanMoJ3Nob3dQb2ludHMnLCBERy5UWVBFLlNUUklORywgLy8gcmV3cml0ZSBkZXNjcmlwdGlvblxuICAgIHtjYXRlZ29yeTogJ0ZpdHRpbmcnLCBkZXNjcmlwdGlvbjogJ1doZXRoZXIgcG9pbnRzL2NhbmRsZXN0aWNrcy9ub25lIHNob3VsZCBiZSByZW5kZXJlZCcsXG4gICAgICBkZWZhdWx0VmFsdWU6ICdwb2ludHMnLCBjaG9pY2VzOiBbJ3BvaW50cycsICdjYW5kbGVzdGlja3MnLCAnYm90aCddfSksXG4gIERHLlByb3BlcnR5LmpzKCdzaG93Q3VydmVDb25maWRlbmNlSW50ZXJ2YWwnLCBERy5UWVBFLkJPT0wsXG4gICAge2NhdGVnb3J5OiAnRml0dGluZycsIGRlc2NyaXB0aW9uOiAnV2hldGhlciBjb25maWRlbmNlIGludGVydmFscyBzaG91bGQgYmUgcmVuZGVyZWQnLCBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgLy9AdHMtaWdub3JlXG4gICAgICBmcmllbmRseU5hbWU6ICdDb25maWRlbmNlIEludGVydmFsJ30pLFxuICBERy5Qcm9wZXJ0eS5qcygnbWFya2VyVHlwZScsIERHLlRZUEUuU1RSSU5HLCB7Y2F0ZWdvcnk6ICdSZW5kZXJpbmcnLCBkZWZhdWx0VmFsdWU6ICdjaXJjbGUnLFxuICAgIGNob2ljZXM6IFsnYXN0ZXJpc2snLCAnY2lyY2xlJywgJ2Nyb3NzIGJvcmRlcicsICdkaWFtb25kJywgJ3NxdWFyZScsICdzdGFyJyxcbiAgICAgICd0cmlhbmdsZSBib3R0b20nLCAndHJpYW5nbGUgbGVmdCcsICd0cmlhbmdsZSByaWdodCcsICd0cmlhbmdsZSB0b3AnXSwgbnVsbGFibGU6IGZhbHNlLFxuICAgIC8vQHRzLWlnbm9yZVxuICAgIGZyaWVuZGx5TmFtZTogJ01hcmtlcid9KSxcbiAgREcuUHJvcGVydHkuanMoJ291dGxpZXJNYXJrZXJUeXBlJywgREcuVFlQRS5TVFJJTkcsIHtjYXRlZ29yeTogJ1JlbmRlcmluZycsIGRlZmF1bHRWYWx1ZTogJ291dGxpZXInLFxuICAgIGNob2ljZXM6IFsnYXN0ZXJpc2snLCAnY2lyY2xlJywgJ2Nyb3NzIGJvcmRlcicsICdkaWFtb25kJywgJ291dGxpZXInLCAnc3F1YXJlJywgJ3N0YXInLFxuICAgICAgJ3RyaWFuZ2xlIGJvdHRvbScsICd0cmlhbmdsZSBsZWZ0JywgJ3RyaWFuZ2xlIHJpZ2h0JywgJ3RyaWFuZ2xlIHRvcCddLCBudWxsYWJsZTogZmFsc2UsXG4gICAgLy9AdHMtaWdub3JlXG4gICAgZnJpZW5kbHlOYW1lOiAnT3V0bGllciBNYXJrZXInfSksXG4gIERHLlByb3BlcnR5LmpzKCdsaW5lU3R5bGUnLCBERy5UWVBFLlNUUklORywge2NhdGVnb3J5OiAnUmVuZGVyaW5nJywgZGVmYXVsdFZhbHVlOiAnc29saWQnLFxuICAgIGNob2ljZXM6IFsnc29saWQnLCAnZG90dGVkJywgJ2Rhc2hlZCcsICdkYXNoZG90dGVkJ10sIG51bGxhYmxlOiBmYWxzZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnZHJvcGxpbmVzJywgREcuVFlQRS5TVFJJTkdfTElTVCwge2Rlc2NyaXB0aW9uOiAnV2hldGhlciBzcGVjaWZpYyBkcm9wbGluZXMgc2hvdWxkIGJlIHJlbmRlcmVkJyxcbiAgICBjaG9pY2VzOiBEUk9QTElORVMsIGlucHV0VHlwZTogJ011bHRpQ2hvaWNlJ30pLFxuICBERy5Qcm9wZXJ0eS5qcygnY29sdW1uTmFtZScsIERHLlRZUEUuU1RSSU5HLCB7ZGVzY3JpcHRpb246ICdDb2x1bW4gbmFtZSB3aGVyZSB0aGUgc2VyaWVzIGlzIHN0b3JlZCcsIGRlZmF1bHRWYWx1ZTogJyd9KSxcbl07XG5cbmV4cG9ydCBjb25zdCBGSVRfRlVOQ1RJT05fU0lHTU9JRCA9ICdzaWdtb2lkJztcbmV4cG9ydCBjb25zdCBGSVRfRlVOQ1RJT05fTElORUFSID0gJ2xpbmVhcic7XG5leHBvcnQgY29uc3QgRklUX0ZVTkNUSU9OX0xPR19MSU5FQVIgPSAnbG9nLWxpbmVhcic7XG5leHBvcnQgY29uc3QgRklUX0ZVTkNUSU9OX0VYUE9ORU5USUFMID0gJ2V4cG9uZW50aWFsJztcblxuZXhwb3J0IGNvbnN0IEZJVF9TVEFUU19SU1FVQVJFRCA9ICdyU3F1YXJlZCc7XG5leHBvcnQgY29uc3QgRklUX1NUQVRTX0FVQyA9ICdhdWMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3JDcmVhdGVGaXRGdW5jdGlvbihzZXJpZXNGaXRGdW5jOiBzdHJpbmcgfCBJRml0RnVuY3Rpb25EZXNjcmlwdGlvbik6IEZpdEZ1bmN0aW9uIHtcbiAgaWYgKHR5cGVvZiBzZXJpZXNGaXRGdW5jID09PSAnc3RyaW5nJylcbiAgICByZXR1cm4gZml0RnVuY3Rpb25zW3Nlcmllc0ZpdEZ1bmNdO1xuICBlbHNlIGlmICghZml0RnVuY3Rpb25zW3Nlcmllc0ZpdEZ1bmMubmFtZV0pIHtcbiAgICBjb25zdCBuYW1lID0gc2VyaWVzRml0RnVuYy5uYW1lO1xuICAgIGNvbnN0IHBhcmFtTmFtZXMgPSBzZXJpZXNGaXRGdW5jLnBhcmFtZXRlck5hbWVzO1xuICAgIGNvbnN0IGZpdEZ1bmN0aW9uUGFydHMgPSBzZXJpZXNGaXRGdW5jLmZ1bmN0aW9uLnNwbGl0KCc9PicpLm1hcCgoZWxlbSkgPT4gZWxlbS50cmltKCkpO1xuICAgIGNvbnN0IGdldEluaXRQYXJhbXNQYXJ0cyA9IHNlcmllc0ZpdEZ1bmMuZ2V0SW5pdGlhbFBhcmFtZXRlcnMuc3BsaXQoJz0+JykubWFwKChlbGVtKSA9PiBlbGVtLnRyaW0oKSk7XG4gICAgY29uc3QgZml0RnVuY3Rpb24gPSBuZXcgRnVuY3Rpb24oZml0RnVuY3Rpb25QYXJ0c1swXS5zbGljZSgxLCBmaXRGdW5jdGlvblBhcnRzWzBdLmxlbmd0aCAtIDEpLFxuICAgICAgYCR7Zml0RnVuY3Rpb25QYXJ0c1sxXS5pbmNsdWRlcygnOycpID8gJycgOiAncmV0dXJuICd9JHtmaXRGdW5jdGlvblBhcnRzWzFdfWApO1xuICAgIGNvbnN0IGdldEluaXRQYXJhbXNGdW5jID0gbmV3IEZ1bmN0aW9uKGdldEluaXRQYXJhbXNQYXJ0c1swXS5zbGljZSgxLCBnZXRJbml0UGFyYW1zUGFydHNbMF0ubGVuZ3RoIC0gMSksXG4gICAgICBgcmV0dXJuICR7Z2V0SW5pdFBhcmFtc1BhcnRzWzFdfWApO1xuICAgIGNvbnN0IGZpdEZ1bmMgPSBuZXcgSnNGdW5jdGlvbihuYW1lLCAoZml0RnVuY3Rpb24gYXMgKHBhcmFtczogRmxvYXQzMkFycmF5LCB4OiBudW1iZXIpID0+IG51bWJlciksXG4gICAgICAoZ2V0SW5pdFBhcmFtc0Z1bmMgYXMgKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSkgPT4gRmxvYXQzMkFycmF5KSwgcGFyYW1OYW1lcyk7XG4gICAgZml0RnVuY3Rpb25zW25hbWVdID0gZml0RnVuYztcbiAgfVxuXG4gIHJldHVybiBmaXRGdW5jdGlvbnNbc2VyaWVzRml0RnVuYy5uYW1lXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpdERhdGEoZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0sIGZpdEZ1bmN0aW9uOiBGaXRGdW5jdGlvbiwgZXJyb3JNb2RlbDogRml0RXJyb3JNb2RlbFR5cGUsXG4gIHBhcmFtZXRlckJvdW5kcz86IEZpdFBhcmFtQm91bmRzW10pOiBGaXRDdXJ2ZSB7XG4gIGNvbnN0IGN1cnZlRnVuY3Rpb24gPSBmaXRGdW5jdGlvbi55O1xuICBsZXQgcGFyYW1WYWx1ZXMgPSBmaXRGdW5jdGlvbi5nZXRJbml0aWFsUGFyYW1ldGVycyhkYXRhLngsIGRhdGEueSk7XG5cbiAgY29uc3Qgb2YgPSBvYmplY3RpdmVGYWN0b3J5KGN1cnZlRnVuY3Rpb24sIGRhdGEsIGVycm9yTW9kZWwpO1xuICBjb25zdCBib3R0b21QYXJhbUJvdW5kcyA9IG5ldyBGbG9hdDMyQXJyYXkoZml0RnVuY3Rpb24ucGFyYW1ldGVyTmFtZXMubGVuZ3RoKTtcbiAgY29uc3QgdG9wUGFyYW1Cb3VuZHMgPSBuZXcgRmxvYXQzMkFycmF5KGZpdEZ1bmN0aW9uLnBhcmFtZXRlck5hbWVzLmxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZml0RnVuY3Rpb24ucGFyYW1ldGVyTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICBib3R0b21QYXJhbUJvdW5kc1tpXSA9IHBhcmFtVmFsdWVzW2ldID09PSAwID8gLTEgOiBwYXJhbVZhbHVlc1tpXSAtIE1hdGguYWJzKHBhcmFtVmFsdWVzW2ldICogMC41KTtcbiAgICB0b3BQYXJhbUJvdW5kc1tpXSA9IHBhcmFtVmFsdWVzW2ldID09PSAwID8gMSA6IHBhcmFtVmFsdWVzW2ldICsgTWF0aC5hYnMocGFyYW1WYWx1ZXNbaV0gKiAwLjUpO1xuICB9XG4gIGNvbnN0IHBhcmFtZXRlckJvdW5kc0JpdHNldDogREcuQml0U2V0ID0gREcuQml0U2V0LmNyZWF0ZShmaXRGdW5jdGlvbi5wYXJhbWV0ZXJOYW1lcy5sZW5ndGggKiAyKTtcbiAgaWYgKHBhcmFtZXRlckJvdW5kcyAmJiBwYXJhbWV0ZXJCb3VuZHMubGVuZ3RoICE9PSAwKVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1ldGVyQm91bmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocGFyYW1ldGVyQm91bmRzW2ldLm1pbiAhPT0gdW5kZWZpbmVkICYmIHBhcmFtZXRlckJvdW5kc1tpXS5taW4gIT09IG51bGwpIHtcbiAgICAgICAgYm90dG9tUGFyYW1Cb3VuZHNbaV0gPSBwYXJhbWV0ZXJCb3VuZHNbaV0ubWluITtcbiAgICAgICAgcGFyYW1ldGVyQm91bmRzQml0c2V0LnNldChpICogMiwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1ldGVyQm91bmRzW2ldLm1heCAhPT0gdW5kZWZpbmVkICYmIHBhcmFtZXRlckJvdW5kc1tpXS5tYXggIT09IG51bGwpIHtcbiAgICAgICAgdG9wUGFyYW1Cb3VuZHNbaV0gPSBwYXJhbWV0ZXJCb3VuZHNbaV0ubWF4ITtcbiAgICAgICAgcGFyYW1ldGVyQm91bmRzQml0c2V0LnNldChpICogMiArIDEsIHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICBjb25zdCBnZXRDb25zaXN0ZW5jeSA9IChleHRyZW11bTogRXh0cmVtdW0pID0+IHtcbiAgICBjb25zdCByZXNpZHVhbHMgPSBvZihleHRyZW11bS5wb2ludCkucmVzaWR1YWxzO1xuICAgIGxldCBxMXE0ID0gMDtcbiAgICBsZXQgcTJxMyA9IDA7XG4gICAgLy8gVE9ETzogcmV3cml0ZSBxdWFydGlsZXMgdG8gYSBiZXR0ZXIgY29uZGl0aW9uXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNpZHVhbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyZXNpZHVhbHMubGVuZ3RoIC8gNCA+IGkpXG4gICAgICAgIHExcTQgKz0gTWF0aC5wb3cocmVzaWR1YWxzW2ldLCAyKTtcbiAgICAgIGVsc2UgaWYgKDMgKiByZXNpZHVhbHMubGVuZ3RoIC8gNCA+IGkpXG4gICAgICAgIHEycTMgKz0gTWF0aC5wb3cocmVzaWR1YWxzW2ldLCAyKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcTFxNCArPSBNYXRoLnBvdyhyZXNpZHVhbHNbaV0sIDIpO1xuICAgIH1cbiAgICByZXR1cm4gcTFxNCAvIHEycTM7XG4gIH07XG5cbiAgbGV0IGl0ZXIgPSAtMTtcbiAgbGV0IGNvbnRpbnVlT3B0aW1pemF0aW9uID0gMDtcbiAgbGV0IHN0YXRpc3RpY3M6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBsZXQgb3B0aW1pemF0aW9uOiBPcHRpbWl6YXRpb25SZXN1bHQ7XG4gIGxldCBtaW5JZHggPSAwO1xuICBkbyB7XG4gICAgb3B0aW1pemF0aW9uID0gcGVyZm9ybU5lbGRlck1lYWRPcHRpbWl6YXRpb24ob2YsIGJvdHRvbVBhcmFtQm91bmRzLCB0b3BQYXJhbUJvdW5kcywge1xuICAgICAgdG9sZXJhbmNlOiBORUxERVJfTUVBRF9ERUZBVUxUUy5UT0xFUkFOQ0UsXG4gICAgICBtYXhJdGVyOiBORUxERVJfTUVBRF9ERUZBVUxUUy5NQVhfSVRFUixcbiAgICAgIG5vblplcm9QYXJhbTogTkVMREVSX01FQURfREVGQVVMVFMuTk9OX1pFUk9fUEFSQU0sXG4gICAgICBpbml0aWFsU2NhbGU6IE5FTERFUl9NRUFEX0RFRkFVTFRTLklOSVRJQUxfU0NBTEUsXG4gICAgICBzY2FsZVJlZmxlY3Rpb246IE5FTERFUl9NRUFEX0RFRkFVTFRTLlNDQUxFX1JFRkxFQ1RJT04sXG4gICAgICBzY2FsZUV4cGFuc2lvbjogTkVMREVSX01FQURfREVGQVVMVFMuU0NBTEVfRVhQQU5TSU9OLFxuICAgICAgc2NhbGVDb250cmFjdGlvbjogTkVMREVSX01FQURfREVGQVVMVFMuU0NBTEVfQ09OVFJBQ1RJT04sXG4gICAgfSwgMTAsIHBhcmFtVmFsdWVzKTtcblxuICAgIG1pbklkeCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBvcHRpbWl6YXRpb24uZXh0cmVtdW1zLmxlbmd0aDsgaSsrKVxuICAgICAgaWYgKG9wdGltaXphdGlvbi5leHRyZW11bXNbaV0uY29zdCA8IG9wdGltaXphdGlvbi5leHRyZW11bXNbbWluSWR4XS5jb3N0KVxuICAgICAgICBtaW5JZHggPSBpO1xuXG4gICAgY29uc3QgbmV3U3RhdGlzdGljcyA9IGdldENvbnNpc3RlbmN5KG9wdGltaXphdGlvbi5leHRyZW11bXNbbWluSWR4XSk7XG4gICAgaWYgKHN0YXRpc3RpY3MgPT09IG51bGwpXG4gICAgICBzdGF0aXN0aWNzID0gbmV3U3RhdGlzdGljcztcbiAgICBlbHNlIGlmIChuZXdTdGF0aXN0aWNzIDwgc3RhdGlzdGljcykge1xuICAgICAgc3RhdGlzdGljcyA9IG5ld1N0YXRpc3RpY3M7XG4gICAgICBjb250aW51ZU9wdGltaXphdGlvbiA9IDA7XG4gICAgfVxuICAgIGVsc2VcbiAgICAgIGNvbnRpbnVlT3B0aW1pemF0aW9uKys7XG5cbiAgICBpZiAoaXRlciA9PT0gLTEpIHtcbiAgICAgIGlmIChzdGF0aXN0aWNzIDw9IDIpXG4gICAgICAgIGJyZWFrO1xuICAgICAgaXRlcisrO1xuICAgIH1cblxuICAgIGlmIChpdGVyID4gNDApXG4gICAgICBicmVhaztcbiAgICBpZiAoY29udGludWVPcHRpbWl6YXRpb24gPT09IDMpXG4gICAgICBicmVhaztcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZml0RnVuY3Rpb24ucGFyYW1ldGVyTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghcGFyYW1ldGVyQm91bmRzQml0c2V0LmdldChpICogMikpXG4gICAgICAgIGJvdHRvbVBhcmFtQm91bmRzW2ldID0gcGFyYW1WYWx1ZXNbaV0gLSBNYXRoLmFicyhvcHRpbWl6YXRpb24uZXh0cmVtdW1zW21pbklkeF0ucG9pbnRbaV0gKiAoY29udGludWVPcHRpbWl6YXRpb24gKyAxLjUpKTtcbiAgICAgIGlmICghcGFyYW1ldGVyQm91bmRzQml0c2V0LmdldChpICogMiArIDEpKVxuICAgICAgICB0b3BQYXJhbUJvdW5kc1tpXSA9IHBhcmFtVmFsdWVzW2ldICsgTWF0aC5hYnMob3B0aW1pemF0aW9uLmV4dHJlbXVtc1ttaW5JZHhdLnBvaW50W2ldICogKGNvbnRpbnVlT3B0aW1pemF0aW9uICsgMS41KSk7XG4gICAgfVxuICB9IHdoaWxlICh0cnVlKTtcblxuICBwYXJhbVZhbHVlcyA9IG9wdGltaXphdGlvbi5leHRyZW11bXNbbWluSWR4XS5wb2ludDtcbiAgY29uc3QgZml0dGVkQ3VydmUgPSBnZXRGaXR0ZWRDdXJ2ZShjdXJ2ZUZ1bmN0aW9uLCBwYXJhbVZhbHVlcyk7XG5cbiAgcmV0dXJuIHtcbiAgICBmaXR0ZWRDdXJ2ZTogZml0dGVkQ3VydmUsXG4gICAgcGFyYW1ldGVyczogcGFyYW1WYWx1ZXMsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaXR0ZWRDdXJ2ZShjdXJ2ZUZ1bmN0aW9uOiAocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcikgPT4gbnVtYmVyLCBwYXJhbVZhbHVlczogRmxvYXQzMkFycmF5KTpcbiAoeDogbnVtYmVyKSA9PiBudW1iZXIge1xuICByZXR1cm4gKHg6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiBjdXJ2ZUZ1bmN0aW9uKHBhcmFtVmFsdWVzLCB4KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnZlQ29uZmlkZW5jZUludGVydmFscyhkYXRhOiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSwgcGFyYW1WYWx1ZXM6IEZsb2F0MzJBcnJheSxcbiAgY3VydmVGdW5jdGlvbjogKHBhcmFtczogRmxvYXQzMkFycmF5LCB4OiBudW1iZXIpID0+IG51bWJlciwgY29uZmlkZW5jZUxldmVsOiBudW1iZXIgPSAwLjA1LCBlcnJvck1vZGVsOiBGaXRFcnJvck1vZGVsVHlwZSk6XG4gIEZpdENvbmZpZGVuY2VJbnRlcnZhbHMge1xuICBjb25zdCBlcnJvciA9IGdldFNpZ21hKGN1cnZlRnVuY3Rpb24sIGRhdGEsIGVycm9yTW9kZWwsIHBhcmFtVmFsdWVzKTtcbiAgY29uc3QgcXVhbnRpbGUgPSBqU3RhdC5ub3JtYWwuaW52KDEgLSBjb25maWRlbmNlTGV2ZWwvMiwgMCwgMSk7XG5cbiAgY29uc3QgdG9wID0gKHg6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gY3VydmVGdW5jdGlvbihwYXJhbVZhbHVlcywgeCk7XG4gICAgcmV0dXJuIHZhbHVlICsgcXVhbnRpbGUgKiAoZXJyb3Iuc2lnbWFBICsgTWF0aC5hYnModmFsdWUpICogZXJyb3Iuc2lnbWFCKTtcbiAgfTtcblxuICBjb25zdCBib3R0b20gPSAoeDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBjdXJ2ZUZ1bmN0aW9uKHBhcmFtVmFsdWVzLCB4KTtcbiAgICByZXR1cm4gdmFsdWUgLSBxdWFudGlsZSAqIChlcnJvci5zaWdtYUEgKyBNYXRoLmFicyh2YWx1ZSkgKiBlcnJvci5zaWdtYUIpO1xuICB9O1xuXG4gIHJldHVybiB7Y29uZmlkZW5jZVRvcDogdG9wLCBjb25maWRlbmNlQm90dG9tOiBib3R0b219O1xufVxuXG4vLyBUT0RPOiBmb3IgbGluZWFyIC0gc2xvcGUgLSBBLCBpbnRlcmNlcHRZIC0gQlxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXRpc3RpY3MoZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0sIHBhcmFtVmFsdWVzOiBGbG9hdDMyQXJyYXksXG4gIGN1cnZlRnVuY3Rpb246IChwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKSA9PiBudW1iZXIsIHN0YXRpc3RpY3M6IGJvb2xlYW4gPSB0cnVlKTogRml0U3RhdGlzdGljcyB7XG4gIGNvbnN0IGZpdHRlZEN1cnZlID0gZ2V0Rml0dGVkQ3VydmUoY3VydmVGdW5jdGlvbiwgcGFyYW1WYWx1ZXMpO1xuXG4gIHJldHVybiB7XG4gICAgclNxdWFyZWQ6IHN0YXRpc3RpY3MgPyBnZXREZXRDb2VmZihmaXR0ZWRDdXJ2ZSwgZGF0YSkgOiB1bmRlZmluZWQsXG4gICAgYXVjOiBzdGF0aXN0aWNzID8gZ2V0QXVjKGZpdHRlZEN1cnZlLCBkYXRhKSA6IHVuZGVmaW5lZCxcbiAgICBpbnRlcmNlcHRYOiBwYXJhbVZhbHVlc1syXSxcbiAgICBpbnRlcmNlcHRZOiBmaXR0ZWRDdXJ2ZShwYXJhbVZhbHVlc1syXSksXG4gICAgc2xvcGU6IHBhcmFtVmFsdWVzWzFdLFxuICAgIHRvcDogcGFyYW1WYWx1ZXNbMF0sXG4gICAgYm90dG9tOiBwYXJhbVZhbHVlc1szXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEludmVydGVkRnVuY3Rpb25zKGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119LCBwYXJhbVZhbHVlczogbnVtYmVyW10sXG4gIGNvbmZpZGVuY2VMZXZlbDogbnVtYmVyID0gMC4wNSwgc3RhdGlzdGljczogYm9vbGVhbiA9IHRydWUpOiBGaXRJbnZlcnRlZEZ1bmN0aW9ucyB8IG51bGwge1xuICBjb25zdCBzdHVkZW50USA9IGpTdGF0LnN0dWRlbnR0LmludigxIC0gY29uZmlkZW5jZUxldmVsIC8gMiwgZGF0YS54Lmxlbmd0aCAtIHBhcmFtVmFsdWVzLmxlbmd0aCk7XG5cbiAgbGV0IGludjogKHk6IG51bWJlcikgPT4gbnVtYmVyID0gKHk6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiAwO1xuICB9O1xuICBsZXQgaW52VG9wOiAoeTogbnVtYmVyKSA9PiBudW1iZXIgPSAoeTogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIDA7XG4gIH07XG4gIGxldCBpbnZCb3R0b206ICh5OiBudW1iZXIpID0+IG51bWJlciA9ICh5OiBudW1iZXIpID0+IHtcbiAgICByZXR1cm4gMDtcbiAgfTtcblxuICBpZiAoc3RhdGlzdGljcykge1xuICAgIGludiA9ICh5OiBudW1iZXIpID0+IHtcbiAgICAgIC8vc2hvdWxkIGNoZWNrIGlmIG1vcmUgdGhhbiBib3R0b20gYW5kIGxlc3MgdGhhbiB0b3BcbiAgICAgIHJldHVybiBwYXJhbVZhbHVlc1syXSAvIE1hdGgucG93KChwYXJhbVZhbHVlc1swXSAtIHkpIC8gKHkgLSBwYXJhbVZhbHVlc1szXSksIDEgLyBwYXJhbVZhbHVlc1sxXSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGVycm9yID0gZ2V0SW52RXJyb3IoaW52LCBkYXRhKTtcblxuICAgIGludlRvcCA9ICh5OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gaW52KHkpO1xuICAgICAgcmV0dXJuIHZhbHVlICsgc3R1ZGVudFEgKiBlcnJvciAvIE1hdGguc3FydChkYXRhLnkubGVuZ3RoKTtcbiAgICB9O1xuXG4gICAgaW52Qm90dG9tID0gKHk6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBpbnYoeSk7XG4gICAgICByZXR1cm4gdmFsdWUgLSBzdHVkZW50USAqIGVycm9yIC8gTWF0aC5zcXJ0KGRhdGEueS5sZW5ndGgpO1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgaW52ZXJ0ZWQ6IGludixcbiAgICAgIGludmVydGVkVG9wOiBpbnZUb3AsXG4gICAgICBpbnZlcnRlZEJvdHRvbTogaW52Qm90dG9tLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ21vaWQocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IEEgPSBwYXJhbXNbMF07XG4gIGNvbnN0IEIgPSBwYXJhbXNbMV07XG4gIGNvbnN0IEMgPSBwYXJhbXNbMl07XG4gIGNvbnN0IEQgPSBwYXJhbXNbM107XG4gIHJldHVybiAoRCArIChBIC0gRCkgLyAoMSArIE1hdGgucG93KDEwLCAoeCAtIEMpICogQikpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmVhcihwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgQSA9IHBhcmFtc1swXTtcbiAgY29uc3QgQiA9IHBhcmFtc1sxXTtcbiAgcmV0dXJuIEEgKiB4ICsgQjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZ0xpbmVhcihwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgQSA9IHBhcmFtc1swXTtcbiAgY29uc3QgQiA9IHBhcmFtc1sxXTtcbiAgcmV0dXJuIEEgKiBNYXRoLmxvZyh4ICsgMSkgKyBCO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwb25lbnRpYWwocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IEEgPSBwYXJhbXNbMF07XG4gIGNvbnN0IEIgPSBwYXJhbXNbMV07XG4gIHJldHVybiBBICogTWF0aC5leHAoeCAqIEIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXVjKGZpdHRlZEN1cnZlOiAoeDogbnVtYmVyKSA9PiBudW1iZXIsIGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119KTogbnVtYmVyIHtcbiAgbGV0IGF1YyA9IDA7XG4gIGNvbnN0IG1pbiA9IE1hdGgubWluKC4uLmRhdGEueCk7XG4gIGNvbnN0IG1heCA9IE1hdGgubWF4KC4uLmRhdGEueCk7XG4gIGNvbnN0IGludGVncmF0aW9uU3RlcCA9IChtYXggLSBtaW4pIC8gMTAwMDtcbiAgZm9yIChsZXQgeCA9IG1pbjsgeCA8IG1heDsgeCs9IGludGVncmF0aW9uU3RlcClcbiAgICBhdWMgKz0gaW50ZWdyYXRpb25TdGVwICogZml0dGVkQ3VydmUoeCk7XG5cbiAgcmV0dXJuIGF1Yztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERldENvZWZmKGZpdHRlZEN1cnZlOiAoeDogbnVtYmVyKSA9PiBudW1iZXIsIGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119KTogbnVtYmVyIHtcbiAgbGV0IHNzUmVzID0gMDtcbiAgbGV0IHNzVG90ID0gMDtcbiAgY29uc3QgeU1lYW4gPSBqU3RhdC5tZWFuKGRhdGEueSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS54Lmxlbmd0aDsgaSsrKSB7XG4gICAgc3NSZXMgKz0gTWF0aC5wb3coZGF0YS55W2ldIC0gZml0dGVkQ3VydmUoZGF0YS54W2ldKSwgMik7XG4gICAgc3NUb3QgKz0gTWF0aC5wb3coZGF0YS55W2ldIC0geU1lYW4sIDIpO1xuICB9XG5cbiAgcmV0dXJuIDEgLSBzc1JlcyAvIHNzVG90O1xufVxuXG5mdW5jdGlvbiBnZXRJbnZFcnJvcih0YXJnZXRGdW5jOiAoeTogbnVtYmVyKSA9PiBudW1iZXIsIGRhdGE6IHt5OiBudW1iZXJbXSwgeDogbnVtYmVyW119KTogbnVtYmVyIHtcbiAgbGV0IHNpZ21hID0gMDtcbiAgbGV0IHNpZ21hU3EgPSAwO1xuICBjb25zdCByZXNpZHVlc1NxdWFyZXMgPSBuZXcgRmxvYXQzMkFycmF5KGRhdGEueS5sZW5ndGgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEueS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG9icyA9IGRhdGEueFtpXTtcbiAgICBjb25zdCBwcmVkID0gdGFyZ2V0RnVuYyhkYXRhLnlbaV0pO1xuICAgIHJlc2lkdWVzU3F1YXJlc1tpXSA9IE1hdGgucG93KG9icyAtIHByZWQsIDIpO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNpZHVlc1NxdWFyZXMubGVuZ3RoOyBpKyspXG4gICAgc2lnbWFTcSArPSByZXNpZHVlc1NxdWFyZXNbaV07XG5cbiAgc2lnbWFTcSAvPSByZXNpZHVlc1NxdWFyZXMubGVuZ3RoO1xuICBzaWdtYSA9IE1hdGguc3FydChzaWdtYVNxKTtcblxuICByZXR1cm4gc2lnbWE7XG59XG5cbmZ1bmN0aW9uIG9iamVjdGl2ZUZhY3RvcnkodGFyZ2V0RnVuYzogKHBhcmFtczogRmxvYXQzMkFycmF5LCB4OiBudW1iZXIpID0+IG51bWJlcixcbiAgZGF0YToge3k6IG51bWJlcltdLCB4OiBudW1iZXJbXX0sIGVycm9yTW9kZWw6IEZpdEVycm9yTW9kZWxUeXBlKTpcbiAgICAocGFyYW1zOiBGbG9hdDMyQXJyYXkpID0+IHtsaWtlbGlob29kOiBudW1iZXIsIHJlc2lkdWFsczogbnVtYmVyW119IHtcbiAgcmV0dXJuIChwYXJhbXM6IEZsb2F0MzJBcnJheSkgPT4ge1xuICAgIGxldCBsaWtlbGlob29kID0gMDtcbiAgICBsZXQgc2lnbWFBID0gMDtcbiAgICBsZXQgc2lnbWFCID0gMDtcblxuICAgIGNvbnN0IG9icyA9IGRhdGEueTtcbiAgICBjb25zdCBwcmVkID0gZGF0YS54Lm1hcCgoeCkgPT4gdGFyZ2V0RnVuYyhwYXJhbXMsIHgpKTtcbiAgICBjb25zdCByZXNpZHVhbHMgPSBvYnMubWFwKChvYnMsIGkpID0+IG9icyAtIHByZWRbaV0pO1xuICAgIGNvbnN0IHJlc2lkdWVzU3F1YXJlcyA9IHJlc2lkdWFscy5tYXAoKHJlcykgPT4gTWF0aC5wb3cocmVzLCAyKSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKFtGaXRFcnJvck1vZGVsLkNPTlNUQU5ULCBGaXRFcnJvck1vZGVsLkNPTUJJTkVEXS5pbmNsdWRlcyhlcnJvck1vZGVsKSlcbiAgICAgICAgc2lnbWFBICs9IHJlc2lkdWVzU3F1YXJlc1tpXTtcbiAgICAgIGVsc2UgaWYgKGVycm9yTW9kZWwgPT09IEZpdEVycm9yTW9kZWwuUFJPUE9SVElPTkFMKVxuICAgICAgICBzaWdtYUIgKz0gcmVzaWR1ZXNTcXVhcmVzW2ldIC8gKHByZWRbaV0gKiBwcmVkW2ldKTtcbiAgICB9XG4gICAgc2lnbWFBID0gTWF0aC5zcXJ0KHNpZ21hQSAvIHJlc2lkdWVzU3F1YXJlcy5sZW5ndGgpO1xuICAgIHNpZ21hQiA9IE1hdGguc3FydChzaWdtYUIgLyByZXNpZHVlc1NxdWFyZXMubGVuZ3RoKTtcblxuICAgIGlmIChlcnJvck1vZGVsID09PSBGaXRFcnJvck1vZGVsLkNPTUJJTkVEKVxuICAgICAgKHtzaWdtYUEsIHNpZ21hQn0gPSBnZXRTaWdtYXNGb3JDb21iaW5lZEVycm9yTW9kZWwoc2lnbWFBLCBzaWdtYUIsIHJlc2lkdWVzU3F1YXJlcywgcHJlZCkpO1xuXG4gICAgY29uc3Qgc2lnbWFTcUk6IG51bWJlcltdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNpZHVlc1NxdWFyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHNpZ21hU3FJW2ldID0gTWF0aC5wb3coc2lnbWFBICsgc2lnbWFCICogcHJlZFtpXSwgMik7XG4gICAgICBsaWtlbGlob29kICs9IHJlc2lkdWVzU3F1YXJlc1tpXSAvIHNpZ21hU3FJW2ldICsgTWF0aC5sb2coMiAqIE1hdGguUEkgKiBzaWdtYVNxSVtpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtsaWtlbGlob29kLCByZXNpZHVhbHN9O1xuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRTaWdtYSh0YXJnZXRGdW5jOiAocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcikgPT4gbnVtYmVyLFxuICBkYXRhOiB7eTogbnVtYmVyW10sIHg6IG51bWJlcltdfSwgZXJyb3JNb2RlbDogRml0RXJyb3JNb2RlbFR5cGUsIHBhcmFtczogRmxvYXQzMkFycmF5KToge3NpZ21hQTogbnVtYmVyLCBzaWdtYUI6IG51bWJlcn0ge1xuICBsZXQgc2lnbWFBID0gMDtcbiAgbGV0IHNpZ21hQiA9IDA7XG5cbiAgY29uc3Qgb2JzID0gZGF0YS55O1xuICBjb25zdCBwcmVkID0gZGF0YS54Lm1hcCgoeCkgPT4gdGFyZ2V0RnVuYyhwYXJhbXMsIHgpKTtcbiAgY29uc3QgcmVzaWR1YWxzID0gb2JzLm1hcCgob2JzLCBpKSA9PiBvYnMgLSBwcmVkW2ldKTtcbiAgY29uc3QgcmVzaWR1ZXNTcXVhcmVzID0gcmVzaWR1YWxzLm1hcCgocmVzKSA9PiBNYXRoLnBvdyhyZXMsIDIpKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChbRml0RXJyb3JNb2RlbC5DT05TVEFOVCwgRml0RXJyb3JNb2RlbC5DT01CSU5FRF0uaW5jbHVkZXMoZXJyb3JNb2RlbCkpXG4gICAgICBzaWdtYUEgKz0gcmVzaWR1ZXNTcXVhcmVzW2ldO1xuICAgIGVsc2UgaWYgKGVycm9yTW9kZWwgPT09IEZpdEVycm9yTW9kZWwuUFJPUE9SVElPTkFMKVxuICAgICAgc2lnbWFCICs9IE1hdGgucG93KHJlc2lkdWFsc1tpXSAvIE1hdGguYWJzKHByZWRbaV0pLCAyKTtcbiAgfVxuICBzaWdtYUEgPSBNYXRoLnNxcnQoc2lnbWFBIC8gcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aCk7XG4gIHNpZ21hQiA9IE1hdGguc3FydChzaWdtYUIgLyByZXNpZHVlc1NxdWFyZXMubGVuZ3RoKTtcblxuICBpZiAoZXJyb3JNb2RlbCA9PT0gRml0RXJyb3JNb2RlbC5DT01CSU5FRClcbiAgICAoe3NpZ21hQSwgc2lnbWFCfSA9IGdldFNpZ21hc0ZvckNvbWJpbmVkRXJyb3JNb2RlbChzaWdtYUEsIHNpZ21hQiwgcmVzaWR1ZXNTcXVhcmVzLCBwcmVkKSk7XG5cbiAgcmV0dXJuIHtzaWdtYUEsIHNpZ21hQn07XG59XG5cbmZ1bmN0aW9uIGdldFNpZ21hc0ZvckNvbWJpbmVkRXJyb3JNb2RlbChzaWdtYUE6IG51bWJlciwgc2lnbWFCOiBudW1iZXIsIHJlc2lkdWVzU3F1YXJlczogbnVtYmVyW10sIHByZWQ6IG51bWJlcltdKTpcbiAge3NpZ21hQTogbnVtYmVyLCBzaWdtYUI6IG51bWJlcn0ge1xuICBsZXQgbGlrZWxpaG9vZENvbWJpbmVkID0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgbGV0IGZpbmFsUHJvcG9ydGlvbiA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDw9IDEwOyBpKyspIHtcbiAgICBsZXQgbGlrZWxpaG9vZENvbWJpbmVkTG9jYWwgPSAwO1xuICAgIGNvbnN0IHByb3BvcnRpb24gPSBpIC8gMTA7XG4gICAgY29uc3Qgc2lnbWFBQ29tYmluZWQgPSBzaWdtYUEgKiBwcm9wb3J0aW9uO1xuICAgIGNvbnN0IHNpZ21hQkNvbWJpbmVkID0gc2lnbWFBICogKDEgLSBwcm9wb3J0aW9uKTtcbiAgICBjb25zdCBzaWdtYVNxSUNvbWJpbmVkOiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aDsgaisrKSB7XG4gICAgICBzaWdtYVNxSUNvbWJpbmVkW2pdID0gTWF0aC5wb3coc2lnbWFBQ29tYmluZWQgKyBzaWdtYUJDb21iaW5lZCAqIHByZWRbal0sIDIpO1xuICAgICAgbGlrZWxpaG9vZENvbWJpbmVkTG9jYWwgKz0gcmVzaWR1ZXNTcXVhcmVzW2pdIC8gc2lnbWFTcUlDb21iaW5lZFtqXSArIE1hdGgubG9nKDIgKiBNYXRoLlBJICogc2lnbWFTcUlDb21iaW5lZFtqXSk7XG4gICAgfVxuICAgIGlmIChsaWtlbGlob29kQ29tYmluZWRMb2NhbCA8IGxpa2VsaWhvb2RDb21iaW5lZCkge1xuICAgICAgbGlrZWxpaG9vZENvbWJpbmVkID0gbGlrZWxpaG9vZENvbWJpbmVkTG9jYWw7XG4gICAgICBmaW5hbFByb3BvcnRpb24gPSBwcm9wb3J0aW9uO1xuICAgIH1cbiAgfVxuICBzaWdtYUIgPSBzaWdtYUEgKiAoMSAtIGZpbmFsUHJvcG9ydGlvbik7XG4gIHNpZ21hQSA9IHNpZ21hQSAqIGZpbmFsUHJvcG9ydGlvbjtcblxuICByZXR1cm4ge3NpZ21hQSwgc2lnbWFCfTtcbn1cbiJdfQ==
@@ -1,6 +1,6 @@
1
1
  import * as DG from 'datagrok-api/dg';
2
2
  import { FitFunction, FitStatistics, FitConfidenceIntervals, FitCurve, IFitPoint, IFitChartData, IFitSeries } from './fit-curve';
3
- export declare type LogOptions = {
3
+ export type LogOptions = {
4
4
  logX: boolean | undefined;
5
5
  logY: boolean | undefined;
6
6
  };
@@ -17,10 +17,24 @@ export declare function getChartBounds(chartData: IFitChartData): DG.Rect;
17
17
  export declare function getSeriesFitFunction(series: IFitSeries): FitFunction;
18
18
  /** Returns a curve function, either using the pre-computed parameters or by fitting on-the-fly */
19
19
  export declare function getCurve(series: IFitSeries, fitFunc: FitFunction): (x: number) => number;
20
+ /** Returns the data points of a series with filtered outliers and logarithmic data if needed */
21
+ export declare function getDataPoints(series: IFitSeries, logOptions?: LogOptions, userParamsFlag?: boolean): {
22
+ x: number[];
23
+ y: number[];
24
+ };
20
25
  /** Fits the series data according to the series fitting settings */
21
- export declare function fitSeries(series: IFitSeries, fitFunc: FitFunction, logOptions?: LogOptions): FitCurve;
26
+ export declare function fitSeries(series: IFitSeries, fitFunc: FitFunction, dataPoints?: {
27
+ x: number[];
28
+ y: number[];
29
+ }, logOptions?: LogOptions): FitCurve;
22
30
  /** Returns series confidence interval functions */
23
- export declare function getSeriesConfidenceInterval(series: IFitSeries, fitFunc: FitFunction, userParamsFlag: boolean, logOptions?: LogOptions): FitConfidenceIntervals;
31
+ export declare function getSeriesConfidenceInterval(series: IFitSeries, fitFunc: FitFunction, userParamsFlag: boolean, dataPoints?: {
32
+ x: number[];
33
+ y: number[];
34
+ }, logOptions?: LogOptions): FitConfidenceIntervals;
24
35
  /** Returns series statistics */
25
- export declare function getSeriesStatistics(series: IFitSeries, fitFunc: FitFunction, logOptions?: LogOptions): FitStatistics;
36
+ export declare function getSeriesStatistics(series: IFitSeries, fitFunc: FitFunction, dataPoints?: {
37
+ x: number[];
38
+ y: number[];
39
+ }, logOptions?: LogOptions): FitStatistics;
26
40
  //# sourceMappingURL=fit-data.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fit-data.d.ts","sourceRoot":"","sources":["fit-data.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAKL,WAAW,EAEX,aAAa,EACb,sBAAsB,EACtB,QAAQ,EAER,SAAS,EACT,aAAa,EACb,UAAU,EAMX,MAAM,aAAa,CAAC;AAErB,oBAAY,UAAU,GAAG;IACvB,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,IAAI,EAAE,OAAO,GAAG,SAAS,CAAA;CAC1B,CAAC;AAcF,mDAAmD;AACnD,wBAAgB,sBAAsB,IAAI,aAAa,CAKtD;AAED,yDAAyD;AACzD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG;IAAC,EAAE,EAAE,MAAM,EAAE,CAAC;IAAC,EAAE,EAAE,MAAM,EAAE,CAAA;CAAC,CAQjF;AAwED,4DAA4D;AAC5D,wBAAgB,cAAc,CAAC,SAAS,EAAE,aAAa,GAAG,EAAE,CAAC,IAAI,CAehE;AAED,kCAAkC;AAClC,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,CAEpE;AAED,kGAAkG;AAClG,wBAAgB,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAIxF;AAED,oEAAoE;AACpE,wBAAgB,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,QAAQ,CAOrG;AAED,mDAAmD;AACnD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAClF,cAAc,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,sBAAsB,CAa1E;AAED,gCAAgC;AAChC,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,aAAa,CAUpH"}
1
+ {"version":3,"file":"fit-data.d.ts","sourceRoot":"","sources":["fit-data.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAKL,WAAW,EAEX,aAAa,EACb,sBAAsB,EACtB,QAAQ,EAER,SAAS,EACT,aAAa,EACb,UAAU,EAMX,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,IAAI,EAAE,OAAO,GAAG,SAAS,CAAA;CAC1B,CAAC;AAcF,mDAAmD;AACnD,wBAAgB,sBAAsB,IAAI,aAAa,CAKtD;AAED,yDAAyD;AACzD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG;IAAC,EAAE,EAAE,MAAM,EAAE,CAAC;IAAC,EAAE,EAAE,MAAM,EAAE,CAAA;CAAC,CAQjF;AAwED,4DAA4D;AAC5D,wBAAgB,cAAc,CAAC,SAAS,EAAE,aAAa,GAAG,EAAE,CAAC,IAAI,CAehE;AAED,kCAAkC;AAClC,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,CAEpE;AAED,kGAAkG;AAClG,wBAAgB,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAIxF;AAED,gGAAgG;AAChG,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,OAAO,GACjG;IAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,CAAC,EAAE,MAAM,EAAE,CAAA;CAAC,CAI3B;AAED,oEAAoE;AACpE,wBAAgB,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE;IAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,CAAC,EAAE,MAAM,EAAE,CAAA;CAAC,EACzG,UAAU,CAAC,EAAE,UAAU,GAAG,QAAQ,CAMnC;AAED,mDAAmD;AACnD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,EAC3G,UAAU,CAAC,EAAE;IAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,CAAC,EAAE,MAAM,EAAE,CAAA;CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,sBAAsB,CAU1F;AAED,gCAAgC;AAChC,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE;IAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,CAAC,EAAE,MAAM,EAAE,CAAA;CAAC,EACnH,UAAU,CAAC,EAAE,UAAU,GAAG,aAAa,CASxC"}
@@ -120,41 +120,42 @@ export function getCurve(series, fitFunc) {
120
120
  params.set(series.parameters);
121
121
  return getFittedCurve(fitFunc.y, params);
122
122
  }
123
+ /** Returns the data points of a series with filtered outliers and logarithmic data if needed */
124
+ export function getDataPoints(series, logOptions, userParamsFlag) {
125
+ const pointsToMap = userParamsFlag ? series.points : series.points.filter((p) => !p.outlier);
126
+ return { x: pointsToMap.map((p) => (logOptions === null || logOptions === void 0 ? void 0 : logOptions.logX) ? Math.log10(p.x) : p.x),
127
+ y: pointsToMap.map((p) => (logOptions === null || logOptions === void 0 ? void 0 : logOptions.logY) ? Math.log10(p.y) : p.y) };
128
+ }
123
129
  /** Fits the series data according to the series fitting settings */
124
- export function fitSeries(series, fitFunc, logOptions) {
130
+ export function fitSeries(series, fitFunc, dataPoints, logOptions) {
125
131
  var _a;
126
- const data = { x: series.points.filter((p) => !p.outlier).map((p) => (logOptions === null || logOptions === void 0 ? void 0 : logOptions.logX) ? Math.log10(p.x) : p.x),
127
- y: series.points.filter((p) => !p.outlier).map((p) => (logOptions === null || logOptions === void 0 ? void 0 : logOptions.logY) ? Math.log10(p.y) : p.y) };
132
+ dataPoints !== null && dataPoints !== void 0 ? dataPoints : (dataPoints = getDataPoints(series, logOptions, false));
128
133
  if (series.parameterBounds && (logOptions === null || logOptions === void 0 ? void 0 : logOptions.logX))
129
134
  series.parameterBounds[2] = logIC50ParameterBounds(series.parameterBounds[2]);
130
- return fitData(getMedianPoints(data), fitFunc, (_a = series.errorModel) !== null && _a !== void 0 ? _a : FitErrorModel.CONSTANT, series.parameterBounds);
135
+ return fitData(getMedianPoints(dataPoints), fitFunc, (_a = series.errorModel) !== null && _a !== void 0 ? _a : FitErrorModel.CONSTANT, series.parameterBounds);
131
136
  }
132
137
  /** Returns series confidence interval functions */
133
- export function getSeriesConfidenceInterval(series, fitFunc, userParamsFlag, logOptions) {
138
+ export function getSeriesConfidenceInterval(series, fitFunc, userParamsFlag, dataPoints, logOptions) {
134
139
  var _a, _b;
135
- const data = userParamsFlag ? { x: series.points.map((p) => (logOptions === null || logOptions === void 0 ? void 0 : logOptions.logX) ? Math.log10(p.x) : p.x),
136
- y: series.points.map((p) => (logOptions === null || logOptions === void 0 ? void 0 : logOptions.logY) ? Math.log10(p.y) : p.y) } :
137
- { x: series.points.filter((p) => !p.outlier).map((p) => (logOptions === null || logOptions === void 0 ? void 0 : logOptions.logX) ? Math.log10(p.x) : p.x),
138
- y: series.points.filter((p) => !p.outlier).map((p) => (logOptions === null || logOptions === void 0 ? void 0 : logOptions.logY) ? Math.log10(p.y) : p.y) };
140
+ dataPoints !== null && dataPoints !== void 0 ? dataPoints : (dataPoints = getDataPoints(series, logOptions, userParamsFlag));
139
141
  if (!series.parameters) {
140
- const params = fitSeries(series, fitFunc).parameters;
142
+ const params = fitSeries(series, fitFunc, dataPoints).parameters;
141
143
  series.parameters = [...params];
142
144
  }
143
145
  const params = new Float32Array((_a = series.parameters) === null || _a === void 0 ? void 0 : _a.length);
144
146
  params.set(series.parameters);
145
- return getCurveConfidenceIntervals(data, params, fitFunc.y, 0.05, (_b = series.errorModel) !== null && _b !== void 0 ? _b : FitErrorModel.CONSTANT);
147
+ return getCurveConfidenceIntervals(dataPoints, params, fitFunc.y, 0.05, (_b = series.errorModel) !== null && _b !== void 0 ? _b : FitErrorModel.CONSTANT);
146
148
  }
147
149
  /** Returns series statistics */
148
- export function getSeriesStatistics(series, fitFunc, logOptions) {
150
+ export function getSeriesStatistics(series, fitFunc, dataPoints, logOptions) {
149
151
  var _a;
150
- const data = { x: series.points.filter((p) => !p.outlier).map((p) => (logOptions === null || logOptions === void 0 ? void 0 : logOptions.logX) ? Math.log10(p.x) : p.x),
151
- y: series.points.filter((p) => !p.outlier).map((p) => (logOptions === null || logOptions === void 0 ? void 0 : logOptions.logY) ? Math.log10(p.y) : p.y) };
152
+ dataPoints !== null && dataPoints !== void 0 ? dataPoints : (dataPoints = getDataPoints(series, logOptions, false));
152
153
  if (!series.parameters) {
153
- const params = fitSeries(series, fitFunc).parameters;
154
+ const params = fitSeries(series, fitFunc, dataPoints).parameters;
154
155
  series.parameters = [...params];
155
156
  }
156
157
  const params = new Float32Array((_a = series.parameters) === null || _a === void 0 ? void 0 : _a.length);
157
158
  params.set(series.parameters);
158
- return getStatistics(data, params, fitFunc.y, true);
159
+ return getStatistics(dataPoints, params, fitFunc.y, true);
159
160
  }
160
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml0LWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmaXQtZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQ0FBZ0M7QUFDaEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0QyxPQUFPLEVBQ0wsYUFBYSxFQUNiLE9BQU8sRUFDUCwyQkFBMkIsRUFDM0IsYUFBYSxFQUViLGNBQWMsRUFJZCxzQkFBc0IsRUFJdEIsbUJBQW1CLEVBQ25CLHNCQUFzQixHQUl2QixNQUFNLGFBQWEsQ0FBQztBQVFyQixpRkFBaUY7QUFDakYsU0FBUyxvQkFBb0IsQ0FBQyxVQUF5QjtJQUNyRCxNQUFNLENBQUMsR0FBUSxFQUFFLENBQUM7SUFDbEIsS0FBSyxNQUFNLENBQUMsSUFBSSxVQUFVLEVBQUU7UUFDMUIsSUFBSSxDQUFDLENBQUMsWUFBWSxLQUFLLElBQUk7WUFDekIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDO0tBQzlCO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBRUQscUhBQXFIO0FBQ3JILG1EQUFtRDtBQUNuRCxNQUFNLFVBQVUsc0JBQXNCO0lBQ3BDLE9BQU87UUFDTCxZQUFZLEVBQUUsb0JBQW9CLENBQUMsc0JBQXNCLENBQUM7UUFDMUQsYUFBYSxFQUFFLG9CQUFvQixDQUFDLG1CQUFtQixDQUFDO0tBQ3pELENBQUM7QUFDSixDQUFDO0FBRUQseURBQXlEO0FBQ3pELE1BQU0sVUFBVSxlQUFlLENBQUMsTUFBbUI7SUFDakQsTUFBTSxFQUFFLEdBQWEsRUFBRSxDQUFDO0lBQ3hCLE1BQU0sRUFBRSxHQUFhLEVBQUUsQ0FBQztJQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN0QyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFD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Q0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQ3hFLEVBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLElBQUksRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUYsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLElBQUksRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDO0lBQ3JHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFO1FBQ3RCLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDO1FBQ3JELE1BQU0sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0tBQ2pDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsTUFBQSxNQUFNLENBQUMsVUFBVSwwQ0FBRSxNQUFPLENBQUMsQ0FBQztJQUM1RCxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFXLENBQUMsQ0FBQztJQUMvQixPQUFPLDJCQUEyQixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQzlELE1BQUEsTUFBTSxDQUFDLFVBQVUsbUNBQUksYUFBYSxDQUFDLFFBQTZCLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBRUQsZ0NBQWdDO0FBQ2hDLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxNQUFrQixFQUFFLE9BQW9CLEVBQUUsVUFBdUI7O0lBQ25HLE1BQU0sSUFBSSxHQUFHLEVBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLElBQUksRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0csQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLElBQUksRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDO0lBQ25HLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFO1FBQ3RCLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDO1FBQ3JELE1BQU0sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0tBQ2pDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsTUFBQSxNQUFNLENBQUMsVUFBVSwwQ0FBRSxNQUFPLENBQUMsQ0FBQztJQUM1RCxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFXLENBQUMsQ0FBQztJQUMvQixPQUFPLGFBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHZhbGlkLWpzZG9jICovXG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuXG5pbXBvcnQge1xuICBGaXRFcnJvck1vZGVsLFxuICBmaXREYXRhLFxuICBnZXRDdXJ2ZUNvbmZpZGVuY2VJbnRlcnZhbHMsXG4gIGdldFN0YXRpc3RpY3MsXG4gIEZpdEZ1bmN0aW9uLFxuICBnZXRGaXR0ZWRDdXJ2ZSxcbiAgRml0U3RhdGlzdGljcyxcbiAgRml0Q29uZmlkZW5jZUludGVydmFscyxcbiAgRml0Q3VydmUsXG4gIGdldE9yQ3JlYXRlRml0RnVuY3Rpb24sXG4gIElGaXRQb2ludCxcbiAgSUZpdENoYXJ0RGF0YSxcbiAgSUZpdFNlcmllcyxcbiAgZml0U2VyaWVzUHJvcGVydGllcyxcbiAgZml0Q2hhcnREYXRhUHJvcGVydGllcyxcbiAgRml0UGFyYW1Cb3VuZHMsXG4gIElGaXRDaGFydE9wdGlvbnMsXG4gIEZpdEVycm9yTW9kZWxUeXBlLFxufSBmcm9tICcuL2ZpdC1jdXJ2ZSc7XG5cbmV4cG9ydCB0eXBlIExvZ09wdGlvbnMgPSB7XG4gIGxvZ1g6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gIGxvZ1k6IGJvb2xlYW4gfCB1bmRlZmluZWRcbn07XG5cblxuLyoqIENyZWF0ZXMgbmV3IG9iamVjdCB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlcyBzcGVjaWZpZWQgaW4ge0BsaW5rIHByb3BlcnRpZXN9ICovXG5mdW5jdGlvbiBjcmVhdGVGcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzOiBERy5Qcm9wZXJ0eVtdKTogYW55IHtcbiAgY29uc3QgbzogYW55ID0ge307XG4gIGZvciAoY29uc3QgcCBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgaWYgKHAuZGVmYXVsdFZhbHVlICE9PSBudWxsKVxuICAgICAgb1twLm5hbWVdID0gcC5kZWZhdWx0VmFsdWU7XG4gIH1cbiAgcmV0dXJuIG87XG59XG5cbi8vIFRPRE86IHNldCBjb2x1bW4gd2l0aCBmaXQgcmVhZG9ubHkgdmFsdWUgKGluIGRldGVjdG9ycykgLSB0cnkgdG8gb25seSBzaG93IGNoYXJ0IC0gcmVtb3ZlIGVkaXRhYmxlIG9yIHByZXZlbnQgaXQ/P1xuLyoqIENyZWF0ZXMgZGVmYXVsdCB7QGxpbmsgSUZpdENoYXJ0RGF0YX0gb2JqZWN0ICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdENoYXJ0RGF0YSgpOiBJRml0Q2hhcnREYXRhIHtcbiAgcmV0dXJuIHtcbiAgICBjaGFydE9wdGlvbnM6IGNyZWF0ZUZyb21Qcm9wZXJ0aWVzKGZpdENoYXJ0RGF0YVByb3BlcnRpZXMpLFxuICAgIHNlcmllc09wdGlvbnM6IGNyZWF0ZUZyb21Qcm9wZXJ0aWVzKGZpdFNlcmllc1Byb3BlcnRpZXMpLFxuICB9O1xufVxuXG4vKiogUmV0dXJucyBwb2ludHMgYXJyYXlzIGZyb20ge0BsaW5rIElGaXRQb2ludH0gYXJyYXkgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQb2ludHNBcnJheXMocG9pbnRzOiBJRml0UG9pbnRbXSk6IHt4czogbnVtYmVyW10sIHlzOiBudW1iZXJbXX0ge1xuICBjb25zdCB4czogbnVtYmVyW10gPSBbXTtcbiAgY29uc3QgeXM6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgeHNbaV0gPSBwb2ludHNbaV0ueDtcbiAgICB5c1tpXSA9IHBvaW50c1tpXS55O1xuICB9XG4gIHJldHVybiB7eHM6IHhzLCB5czogeXN9O1xufVxuXG4vKiogUmV0dXJucyBtZWRpYW4gZnJvbSB3aXRoaW4gbXVsdGlwbGUgcG9pbnRzICovXG5mdW5jdGlvbiBnZXRNZWRpYW4ocG9pbnRzOiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSk6IG51bWJlciB7XG4gIGNvbnN0IG1pZCA9IE1hdGguZmxvb3IocG9pbnRzLnkubGVuZ3RoIC8gMik7XG4gIGNvbnN0IHNvcnRlZFBvaW50cyA9IHBvaW50cy55LnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgY29uc3QgbWVkaWFuID0gc29ydGVkUG9pbnRzLmxlbmd0aCAlIDIgPT09IDAgPyAoc29ydGVkUG9pbnRzW21pZCAtIDFdICsgc29ydGVkUG9pbnRzW21pZF0pIC8gMiA6IHNvcnRlZFBvaW50c1ttaWRdO1xuICByZXR1cm4gbWVkaWFuO1xufVxuXG4vKiogUmV0dXJucyBtZWRpYW4gcG9pbnRzIGZyb20gd2l0aGluIG11bHRpcGxlIHBvaW50cyB3aXRoIHRoZSBzYW1lIHguICovXG5mdW5jdGlvbiBnZXRNZWRpYW5Qb2ludHMoZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0pOiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSB7XG4gIGNvbnN0IG1lZGlhblBvaW50czoge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0gPSB7eDogW10sIHk6IFtdfTtcbiAgY29uc3QgY3VycmVudFBvaW50czoge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0gPSB7eDogW2RhdGEueFswXV0sIHk6IFtkYXRhLnlbMF1dfTtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBkYXRhLngubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZGF0YS54W2ldID09PSBjdXJyZW50UG9pbnRzLnhbMF0pIHtcbiAgICAgIGN1cnJlbnRQb2ludHMueFtjdXJyZW50UG9pbnRzLngubGVuZ3RoXSA9IGRhdGEueFtpXTtcbiAgICAgIGN1cnJlbnRQb2ludHMueVtjdXJyZW50UG9pbnRzLnkubGVuZ3RoXSA9IGRhdGEueVtpXTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBtZWRpYW4gPSBnZXRNZWRpYW4oY3VycmVudFBvaW50cyk7XG4gICAgbWVkaWFuUG9pbnRzLnhbbWVkaWFuUG9pbnRzLngubGVuZ3RoXSA9IGN1cnJlbnRQb2ludHMueFswXTtcbiAgICBtZWRpYW5Qb2ludHMueVttZWRpYW5Qb2ludHMueS5sZW5ndGhdID0gbWVkaWFuO1xuICAgIGN1cnJlbnRQb2ludHMueCA9IFtkYXRhLnhbaV1dO1xuICAgIGN1cnJlbnRQb2ludHMueSA9IFtkYXRhLnlbaV1dO1xuICB9XG4gIGNvbnN0IG1lZGlhbiA9IGdldE1lZGlhbihjdXJyZW50UG9pbnRzKTtcbiAgbWVkaWFuUG9pbnRzLnhbbWVkaWFuUG9pbnRzLngubGVuZ3RoXSA9IGN1cnJlbnRQb2ludHMueFswXTtcbiAgbWVkaWFuUG9pbnRzLnlbbWVkaWFuUG9pbnRzLnkubGVuZ3RoXSA9IG1lZGlhbjtcblxuICByZXR1cm4gbWVkaWFuUG9pbnRzO1xufVxuXG4vKiogUmV0dXJucyBsb2dhcml0aG1pYyBJQzUwIHBhcmFtZXRlciBib3VuZHMuICovXG5mdW5jdGlvbiBsb2dJQzUwUGFyYW1ldGVyQm91bmRzKGljNTBCb3VuZHM6IEZpdFBhcmFtQm91bmRzKTogRml0UGFyYW1Cb3VuZHMge1xuICBpZiAoaWM1MEJvdW5kcykge1xuICAgIGlmIChpYzUwQm91bmRzLm1heCAhPT0gdW5kZWZpbmVkKVxuICAgICAgaWM1MEJvdW5kcy5tYXggPSBNYXRoLmxvZzEwKGljNTBCb3VuZHMubWF4KTtcbiAgICBpZiAoaWM1MEJvdW5kcy5taW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWM1MEJvdW5kcy5taW4gPSBpYzUwQm91bmRzLm1pbiA9PT0gMCA/XG4gICAgICAgIC1OdW1iZXIuTUFYX1ZBTFVFIDogTWF0aC5sb2cxMChpYzUwQm91bmRzLm1pbik7XG4gICAgfVxuICB9XG4gIHJldHVybiBpYzUwQm91bmRzO1xufVxuXG5mdW5jdGlvbiBjaGFuZ2VCb3VuZHMoYm91bmRzOiBERy5SZWN0LCBjaGFydE9wdGlvbnM6IElGaXRDaGFydE9wdGlvbnMpOiBERy5SZWN0IHtcbiAgbGV0IHggPSBib3VuZHMueDtcbiAgbGV0IHkgPSBib3VuZHMueTtcbiAgbGV0IHdpZHRoID0gYm91bmRzLndpZHRoO1xuICBsZXQgaGVpZ2h0ID0gYm91bmRzLmhlaWdodDtcblxuICBpZiAoY2hhcnRPcHRpb25zLm1pblggIT09IHVuZGVmaW5lZCAmJiBjaGFydE9wdGlvbnMubWluWCAhPT0gbnVsbCAmJlxuICAgICgoIWNoYXJ0T3B0aW9ucy5sb2dYKSB8fCAoY2hhcnRPcHRpb25zLmxvZ1ggJiYgY2hhcnRPcHRpb25zLm1pblggPiAwKSkpIHtcbiAgICB3aWR0aCArPSB4IC0gY2hhcnRPcHRpb25zLm1pblg7XG4gICAgeCA9IGNoYXJ0T3B0aW9ucy5taW5YO1xuICB9XG4gIGlmIChjaGFydE9wdGlvbnMubWF4WCAhPT0gdW5kZWZpbmVkICYmIGNoYXJ0T3B0aW9ucy5tYXhYICE9PSBudWxsICYmXG4gICAgKCghY2hhcnRPcHRpb25zLmxvZ1gpIHx8IChjaGFydE9wdGlvbnMubG9nWCAmJiBjaGFydE9wdGlvbnMubWF4WCA+IDApKSlcbiAgICB3aWR0aCArPSBjaGFydE9wdGlvbnMubWF4WCAtICh4ICsgd2lkdGgpO1xuICBpZiAoY2hhcnRPcHRpb25zLm1pblkgIT09IHVuZGVmaW5lZCAmJiBjaGFydE9wdGlvbnMubWluWSAhPT0gbnVsbCAmJlxuICAgICgoIWNoYXJ0T3B0aW9ucy5sb2dZKSB8fCAoY2hhcnRPcHRpb25zLmxvZ1kgJiYgY2hhcnRPcHRpb25zLm1pblkgPiAwKSkpIHtcbiAgICBoZWlnaHQgKz0geSAtIGNoYXJ0T3B0aW9ucy5taW5ZO1xuICAgIHkgPSBjaGFydE9wdGlvbnMubWluWTtcbiAgfVxuICBpZiAoY2hhcnRPcHRpb25zLm1heFkgIT09IHVuZGVmaW5lZCAmJiBjaGFydE9wdGlvbnMubWF4WSAhPT0gbnVsbCAmJlxuICAgICgoIWNoYXJ0T3B0aW9ucy5sb2dZKSB8fCAoY2hhcnRPcHRpb25zLmxvZ1kgJiYgY2hhcnRPcHRpb25zLm1heFkgPiAwKSkpXG4gICAgaGVpZ2h0ICs9IGNoYXJ0T3B0aW9ucy5tYXhZIC0gKHkgKyBoZWlnaHQpO1xuXG4gIHJldHVybiBuZXcgREcuUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcbn1cblxuLyoqIFJldHVybnMgdGhlIGJvdW5kcyBvZiBhbiB7QGxpbmsgSUZpdENoYXJ0RGF0YX0gb2JqZWN0ICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhcnRCb3VuZHMoY2hhcnREYXRhOiBJRml0Q2hhcnREYXRhKTogREcuUmVjdCB7XG4gIGNvbnN0IG8gPSBjaGFydERhdGEuY2hhcnRPcHRpb25zO1xuICBpZiAoIWNoYXJ0RGF0YS5zZXJpZXM/Lmxlbmd0aCB8fCBjaGFydERhdGEuc2VyaWVzLmxlbmd0aCA9PT0gMClcbiAgICByZXR1cm4gbmV3IERHLlJlY3QoMCwgMCwgMSwgMSk7XG4gIGVsc2Uge1xuICAgIGNvbnN0IHt4cywgeXN9ID0gZ2V0UG9pbnRzQXJyYXlzKGNoYXJ0RGF0YS5zZXJpZXNbMF0ucG9pbnRzKTtcbiAgICBsZXQgYm91bmRzID0gREcuUmVjdC5mcm9tWFlBcnJheXMoeHMsIHlzKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGNoYXJ0RGF0YS5zZXJpZXMhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB7eHMsIHlzfSA9IGdldFBvaW50c0FycmF5cyhjaGFydERhdGEuc2VyaWVzW2ldLnBvaW50cyk7XG4gICAgICBpZiAoeHMuc29tZSgoeCkgPT4geCA9PT0gdW5kZWZpbmVkKSB8fCB5cy5zb21lKCh5KSA9PiB5ID09PSB1bmRlZmluZWQpKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIGJvdW5kcyA9IGJvdW5kcy51bmlvbihERy5SZWN0LmZyb21YWUFycmF5cyh4cywgeXMpKTtcbiAgICB9XG4gICAgcmV0dXJuIG8gPyBjaGFuZ2VCb3VuZHMoYm91bmRzLCBvISk6IGJvdW5kcztcbiAgfVxufVxuXG4vKiogUmV0dXJucyBzZXJpZXMgZml0IGZ1bmN0aW9uICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VyaWVzRml0RnVuY3Rpb24oc2VyaWVzOiBJRml0U2VyaWVzKTogRml0RnVuY3Rpb24ge1xuICByZXR1cm4gZ2V0T3JDcmVhdGVGaXRGdW5jdGlvbihzZXJpZXMuZml0RnVuY3Rpb24hKTtcbn1cblxuLyoqIFJldHVybnMgYSBjdXJ2ZSBmdW5jdGlvbiwgZWl0aGVyIHVzaW5nIHRoZSBwcmUtY29tcHV0ZWQgcGFyYW1ldGVycyBvciBieSBmaXR0aW5nIG9uLXRoZS1mbHkgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJ2ZShzZXJpZXM6IElGaXRTZXJpZXMsIGZpdEZ1bmM6IEZpdEZ1bmN0aW9uKTogKHg6IG51bWJlcikgPT4gbnVtYmVyIHtcbiAgY29uc3QgcGFyYW1zID0gbmV3IEZsb2F0MzJBcnJheShzZXJpZXMucGFyYW1ldGVycz8ubGVuZ3RoISk7XG4gIHBhcmFtcy5zZXQoc2VyaWVzLnBhcmFtZXRlcnMhKTtcbiAgcmV0dXJuIGdldEZpdHRlZEN1cnZlKGZpdEZ1bmMueSwgcGFyYW1zKTtcbn1cblxuLyoqIEZpdHMgdGhlIHNlcmllcyBkYXRhIGFjY29yZGluZyB0byB0aGUgc2VyaWVzIGZpdHRpbmcgc2V0dGluZ3MgKi9cbmV4cG9ydCBmdW5jdGlvbiBmaXRTZXJpZXMoc2VyaWVzOiBJRml0U2VyaWVzLCBmaXRGdW5jOiBGaXRGdW5jdGlvbiwgbG9nT3B0aW9ucz86IExvZ09wdGlvbnMpOiBGaXRDdXJ2ZSB7XG4gIGNvbnN0IGRhdGEgPSB7eDogc2VyaWVzLnBvaW50cy5maWx0ZXIoKHApID0+ICFwLm91dGxpZXIpLm1hcCgocCkgPT4gbG9nT3B0aW9ucz8ubG9nWCA/IE1hdGgubG9nMTAocC54KSA6IHAueCksXG4gICAgeTogc2VyaWVzLnBvaW50cy5maWx0ZXIoKHApID0+ICFwLm91dGxpZXIpLm1hcCgocCkgPT4gbG9nT3B0aW9ucz8ubG9nWSA/IE1hdGgubG9nMTAocC55KSA6IHAueSl9O1xuICBpZiAoc2VyaWVzLnBhcmFtZXRlckJvdW5kcyAmJiBsb2dPcHRpb25zPy5sb2dYKVxuICAgIHNlcmllcy5wYXJhbWV0ZXJCb3VuZHNbMl0gPSBsb2dJQzUwUGFyYW1ldGVyQm91bmRzKHNlcmllcy5wYXJhbWV0ZXJCb3VuZHNbMl0pO1xuICByZXR1cm4gZml0RGF0YShnZXRNZWRpYW5Qb2ludHMoZGF0YSksIGZpdEZ1bmMsIHNlcmllcy5lcnJvck1vZGVsID8/IEZpdEVycm9yTW9kZWwuQ09OU1RBTlQgYXMgRml0RXJyb3JNb2RlbFR5cGUsXG4gICAgc2VyaWVzLnBhcmFtZXRlckJvdW5kcyk7XG59XG5cbi8qKiBSZXR1cm5zIHNlcmllcyBjb25maWRlbmNlIGludGVydmFsIGZ1bmN0aW9ucyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlcmllc0NvbmZpZGVuY2VJbnRlcnZhbChzZXJpZXM6IElGaXRTZXJpZXMsIGZpdEZ1bmM6IEZpdEZ1bmN0aW9uLFxuICB1c2VyUGFyYW1zRmxhZzogYm9vbGVhbiwgbG9nT3B0aW9ucz86IExvZ09wdGlvbnMpOiBGaXRDb25maWRlbmNlSW50ZXJ2YWxzIHtcbiAgY29uc3QgZGF0YSA9IHVzZXJQYXJhbXNGbGFnID8ge3g6IHNlcmllcy5wb2ludHMubWFwKChwKSA9PiBsb2dPcHRpb25zPy5sb2dYID8gTWF0aC5sb2cxMChwLngpIDogcC54KSxcbiAgICB5OiBzZXJpZXMucG9pbnRzLm1hcCgocCkgPT4gbG9nT3B0aW9ucz8ubG9nWSA/IE1hdGgubG9nMTAocC55KSA6IHAueSl9IDpcbiAgICB7eDogc2VyaWVzLnBvaW50cy5maWx0ZXIoKHApID0+ICFwLm91dGxpZXIpLm1hcCgocCkgPT4gbG9nT3B0aW9ucz8ubG9nWCA/IE1hdGgubG9nMTAocC54KSA6IHAueCksXG4gICAgICB5OiBzZXJpZXMucG9pbnRzLmZpbHRlcigocCkgPT4gIXAub3V0bGllcikubWFwKChwKSA9PiBsb2dPcHRpb25zPy5sb2dZID8gTWF0aC5sb2cxMChwLnkpIDogcC55KX07XG4gIGlmICghc2VyaWVzLnBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBmaXRTZXJpZXMoc2VyaWVzLCBmaXRGdW5jKS5wYXJhbWV0ZXJzO1xuICAgIHNlcmllcy5wYXJhbWV0ZXJzID0gWy4uLnBhcmFtc107XG4gIH1cbiAgY29uc3QgcGFyYW1zID0gbmV3IEZsb2F0MzJBcnJheShzZXJpZXMucGFyYW1ldGVycz8ubGVuZ3RoISk7XG4gIHBhcmFtcy5zZXQoc2VyaWVzLnBhcmFtZXRlcnMhKTtcbiAgcmV0dXJuIGdldEN1cnZlQ29uZmlkZW5jZUludGVydmFscyhkYXRhLCBwYXJhbXMsIGZpdEZ1bmMueSwgMC4wNSxcbiAgICBzZXJpZXMuZXJyb3JNb2RlbCA/PyBGaXRFcnJvck1vZGVsLkNPTlNUQU5UIGFzIEZpdEVycm9yTW9kZWxUeXBlKTtcbn1cblxuLyoqIFJldHVybnMgc2VyaWVzIHN0YXRpc3RpY3MgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXJpZXNTdGF0aXN0aWNzKHNlcmllczogSUZpdFNlcmllcywgZml0RnVuYzogRml0RnVuY3Rpb24sIGxvZ09wdGlvbnM/OiBMb2dPcHRpb25zKTogRml0U3RhdGlzdGljcyB7XG4gIGNvbnN0IGRhdGEgPSB7eDogc2VyaWVzLnBvaW50cy5maWx0ZXIoKHApID0+ICFwLm91dGxpZXIpLm1hcCgocCkgPT4gbG9nT3B0aW9ucz8ubG9nWCA/IE1hdGgubG9nMTAocC54KSA6IHAueCksXG4gICAgeTogc2VyaWVzLnBvaW50cy5maWx0ZXIoKHApID0+ICFwLm91dGxpZXIpLm1hcCgocCkgPT4gbG9nT3B0aW9ucz8ubG9nWSA/IE1hdGgubG9nMTAocC55KSA6IHAueSl9O1xuICBpZiAoIXNlcmllcy5wYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgcGFyYW1zID0gZml0U2VyaWVzKHNlcmllcywgZml0RnVuYykucGFyYW1ldGVycztcbiAgICBzZXJpZXMucGFyYW1ldGVycyA9IFsuLi5wYXJhbXNdO1xuICB9XG4gIGNvbnN0IHBhcmFtcyA9IG5ldyBGbG9hdDMyQXJyYXkoc2VyaWVzLnBhcmFtZXRlcnM/Lmxlbmd0aCEpO1xuICBwYXJhbXMuc2V0KHNlcmllcy5wYXJhbWV0ZXJzISk7XG4gIHJldHVybiBnZXRTdGF0aXN0aWNzKGRhdGEsIHBhcmFtcywgZml0RnVuYy55LCB0cnVlKTtcbn1cbiJdfQ==
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml0LWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmaXQtZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQ0FBZ0M7QUFDaEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0QyxPQUFPLEVBQ0wsYUFBYSxFQUNiLE9BQU8sRUFDUCwyQkFBMkIsRUFDM0IsYUFBYSxFQUViLGNBQWMsRUFJZCxzQkFBc0IsRUFJdEIsbUJBQW1CLEVBQ25CLHNCQUFzQixHQUl2QixNQUFNLGFBQWEsQ0FBQztBQVFyQixpRkFBaUY7QUFDakYsU0FBUyxvQkFBb0IsQ0FBQyxVQUF5QjtJQUNyRCxNQUFNLENBQUMsR0FBUSxFQUFFLENBQUM7SUFDbEIsS0FBSyxNQUFNLENBQUMsSUFBSSxVQUFVLEVBQUU7UUFDMUIsSUFBSSxDQUFDLENBQUMsWUFBWSxLQUFLLElBQUk7WUFDekIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDO0tBQzlCO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBRUQscUhBQXFIO0FBQ3JILG1EQUFtRDtBQUNuRCxNQUFNLFVBQVUsc0JBQXNCO0lBQ3BDLE9BQU87UUFDTCxZQUFZLEVBQUUsb0JBQW9CLENBQUMsc0JBQXNCLENBQUM7UUFDMUQsYUFBYSxFQUFFLG9CQUFvQixDQUFDLG1CQUFtQixDQUFDO0tBQ3pELENBQUM7QUFDSixDQUFDO0FBRUQseURBQXlEO0FBQ3pELE1BQU0sVUFBVSxlQUFlLENBQUMsTUFBbUI7SUFDakQsTUFBTSxFQUFFLEdBQWEsRUFBRSxDQUFDO0lBQ3hCLE1BQU0sRUFBRSxHQUFhLEVBQUUsQ0FBQztJQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN0QyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFD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c0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgdmFsaWQtanNkb2MgKi9cbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5cbmltcG9ydCB7XG4gIEZpdEVycm9yTW9kZWwsXG4gIGZpdERhdGEsXG4gIGdldEN1cnZlQ29uZmlkZW5jZUludGVydmFscyxcbiAgZ2V0U3RhdGlzdGljcyxcbiAgRml0RnVuY3Rpb24sXG4gIGdldEZpdHRlZEN1cnZlLFxuICBGaXRTdGF0aXN0aWNzLFxuICBGaXRDb25maWRlbmNlSW50ZXJ2YWxzLFxuICBGaXRDdXJ2ZSxcbiAgZ2V0T3JDcmVhdGVGaXRGdW5jdGlvbixcbiAgSUZpdFBvaW50LFxuICBJRml0Q2hhcnREYXRhLFxuICBJRml0U2VyaWVzLFxuICBmaXRTZXJpZXNQcm9wZXJ0aWVzLFxuICBmaXRDaGFydERhdGFQcm9wZXJ0aWVzLFxuICBGaXRQYXJhbUJvdW5kcyxcbiAgSUZpdENoYXJ0T3B0aW9ucyxcbiAgRml0RXJyb3JNb2RlbFR5cGUsXG59IGZyb20gJy4vZml0LWN1cnZlJztcblxuZXhwb3J0IHR5cGUgTG9nT3B0aW9ucyA9IHtcbiAgbG9nWDogYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgbG9nWTogYm9vbGVhbiB8IHVuZGVmaW5lZFxufTtcblxuXG4vKiogQ3JlYXRlcyBuZXcgb2JqZWN0IHdpdGggdGhlIGRlZmF1bHQgdmFsdWVzIHNwZWNpZmllZCBpbiB7QGxpbmsgcHJvcGVydGllc30gKi9cbmZ1bmN0aW9uIGNyZWF0ZUZyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXM6IERHLlByb3BlcnR5W10pOiBhbnkge1xuICBjb25zdCBvOiBhbnkgPSB7fTtcbiAgZm9yIChjb25zdCBwIG9mIHByb3BlcnRpZXMpIHtcbiAgICBpZiAocC5kZWZhdWx0VmFsdWUgIT09IG51bGwpXG4gICAgICBvW3AubmFtZV0gPSBwLmRlZmF1bHRWYWx1ZTtcbiAgfVxuICByZXR1cm4gbztcbn1cblxuLy8gVE9ETzogc2V0IGNvbHVtbiB3aXRoIGZpdCByZWFkb25seSB2YWx1ZSAoaW4gZGV0ZWN0b3JzKSAtIHRyeSB0byBvbmx5IHNob3cgY2hhcnQgLSByZW1vdmUgZWRpdGFibGUgb3IgcHJldmVudCBpdD8/XG4vKiogQ3JlYXRlcyBkZWZhdWx0IHtAbGluayBJRml0Q2hhcnREYXRhfSBvYmplY3QgKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0Q2hhcnREYXRhKCk6IElGaXRDaGFydERhdGEge1xuICByZXR1cm4ge1xuICAgIGNoYXJ0T3B0aW9uczogY3JlYXRlRnJvbVByb3BlcnRpZXMoZml0Q2hhcnREYXRhUHJvcGVydGllcyksXG4gICAgc2VyaWVzT3B0aW9uczogY3JlYXRlRnJvbVByb3BlcnRpZXMoZml0U2VyaWVzUHJvcGVydGllcyksXG4gIH07XG59XG5cbi8qKiBSZXR1cm5zIHBvaW50cyBhcnJheXMgZnJvbSB7QGxpbmsgSUZpdFBvaW50fSBhcnJheSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBvaW50c0FycmF5cyhwb2ludHM6IElGaXRQb2ludFtdKToge3hzOiBudW1iZXJbXSwgeXM6IG51bWJlcltdfSB7XG4gIGNvbnN0IHhzOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCB5czogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICB4c1tpXSA9IHBvaW50c1tpXS54O1xuICAgIHlzW2ldID0gcG9pbnRzW2ldLnk7XG4gIH1cbiAgcmV0dXJuIHt4czogeHMsIHlzOiB5c307XG59XG5cbi8qKiBSZXR1cm5zIG1lZGlhbiBmcm9tIHdpdGhpbiBtdWx0aXBsZSBwb2ludHMgKi9cbmZ1bmN0aW9uIGdldE1lZGlhbihwb2ludHM6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119KTogbnVtYmVyIHtcbiAgY29uc3QgbWlkID0gTWF0aC5mbG9vcihwb2ludHMueS5sZW5ndGggLyAyKTtcbiAgY29uc3Qgc29ydGVkUG9pbnRzID0gcG9pbnRzLnkuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICBjb25zdCBtZWRpYW4gPSBzb3J0ZWRQb2ludHMubGVuZ3RoICUgMiA9PT0gMCA/IChzb3J0ZWRQb2ludHNbbWlkIC0gMV0gKyBzb3J0ZWRQb2ludHNbbWlkXSkgLyAyIDogc29ydGVkUG9pbnRzW21pZF07XG4gIHJldHVybiBtZWRpYW47XG59XG5cbi8qKiBSZXR1cm5zIG1lZGlhbiBwb2ludHMgZnJvbSB3aXRoaW4gbXVsdGlwbGUgcG9pbnRzIHdpdGggdGhlIHNhbWUgeC4gKi9cbmZ1bmN0aW9uIGdldE1lZGlhblBvaW50cyhkYXRhOiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSk6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119IHtcbiAgY29uc3QgbWVkaWFuUG9pbnRzOiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSA9IHt4OiBbXSwgeTogW119O1xuICBjb25zdCBjdXJyZW50UG9pbnRzOiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSA9IHt4OiBbZGF0YS54WzBdXSwgeTogW2RhdGEueVswXV19O1xuICBmb3IgKGxldCBpID0gMTsgaSA8IGRhdGEueC5sZW5ndGg7IGkrKykge1xuICAgIGlmIChkYXRhLnhbaV0gPT09IGN1cnJlbnRQb2ludHMueFswXSkge1xuICAgICAgY3VycmVudFBvaW50cy54W2N1cnJlbnRQb2ludHMueC5sZW5ndGhdID0gZGF0YS54W2ldO1xuICAgICAgY3VycmVudFBvaW50cy55W2N1cnJlbnRQb2ludHMueS5sZW5ndGhdID0gZGF0YS55W2ldO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IG1lZGlhbiA9IGdldE1lZGlhbihjdXJyZW50UG9pbnRzKTtcbiAgICBtZWRpYW5Qb2ludHMueFttZWRpYW5Qb2ludHMueC5sZW5ndGhdID0gY3VycmVudFBvaW50cy54WzBdO1xuICAgIG1lZGlhblBvaW50cy55W21lZGlhblBvaW50cy55Lmxlbmd0aF0gPSBtZWRpYW47XG4gICAgY3VycmVudFBvaW50cy54ID0gW2RhdGEueFtpXV07XG4gICAgY3VycmVudFBvaW50cy55ID0gW2RhdGEueVtpXV07XG4gIH1cbiAgY29uc3QgbWVkaWFuID0gZ2V0TWVkaWFuKGN1cnJlbnRQb2ludHMpO1xuICBtZWRpYW5Qb2ludHMueFttZWRpYW5Qb2ludHMueC5sZW5ndGhdID0gY3VycmVudFBvaW50cy54WzBdO1xuICBtZWRpYW5Qb2ludHMueVttZWRpYW5Qb2ludHMueS5sZW5ndGhdID0gbWVkaWFuO1xuXG4gIHJldHVybiBtZWRpYW5Qb2ludHM7XG59XG5cbi8qKiBSZXR1cm5zIGxvZ2FyaXRobWljIElDNTAgcGFyYW1ldGVyIGJvdW5kcy4gKi9cbmZ1bmN0aW9uIGxvZ0lDNTBQYXJhbWV0ZXJCb3VuZHMoaWM1MEJvdW5kczogRml0UGFyYW1Cb3VuZHMpOiBGaXRQYXJhbUJvdW5kcyB7XG4gIGlmIChpYzUwQm91bmRzKSB7XG4gICAgaWYgKGljNTBCb3VuZHMubWF4ICE9PSB1bmRlZmluZWQpXG4gICAgICBpYzUwQm91bmRzLm1heCA9IE1hdGgubG9nMTAoaWM1MEJvdW5kcy5tYXgpO1xuICAgIGlmIChpYzUwQm91bmRzLm1pbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpYzUwQm91bmRzLm1pbiA9IGljNTBCb3VuZHMubWluID09PSAwID9cbiAgICAgICAgLU51bWJlci5NQVhfVkFMVUUgOiBNYXRoLmxvZzEwKGljNTBCb3VuZHMubWluKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGljNTBCb3VuZHM7XG59XG5cbmZ1bmN0aW9uIGNoYW5nZUJvdW5kcyhib3VuZHM6IERHLlJlY3QsIGNoYXJ0T3B0aW9uczogSUZpdENoYXJ0T3B0aW9ucyk6IERHLlJlY3Qge1xuICBsZXQgeCA9IGJvdW5kcy54O1xuICBsZXQgeSA9IGJvdW5kcy55O1xuICBsZXQgd2lkdGggPSBib3VuZHMud2lkdGg7XG4gIGxldCBoZWlnaHQgPSBib3VuZHMuaGVpZ2h0O1xuXG4gIGlmIChjaGFydE9wdGlvbnMubWluWCAhPT0gdW5kZWZpbmVkICYmIGNoYXJ0T3B0aW9ucy5taW5YICE9PSBudWxsICYmXG4gICAgKCghY2hhcnRPcHRpb25zLmxvZ1gpIHx8IChjaGFydE9wdGlvbnMubG9nWCAmJiBjaGFydE9wdGlvbnMubWluWCA+IDApKSkge1xuICAgIHdpZHRoICs9IHggLSBjaGFydE9wdGlvbnMubWluWDtcbiAgICB4ID0gY2hhcnRPcHRpb25zLm1pblg7XG4gIH1cbiAgaWYgKGNoYXJ0T3B0aW9ucy5tYXhYICE9PSB1bmRlZmluZWQgJiYgY2hhcnRPcHRpb25zLm1heFggIT09IG51bGwgJiZcbiAgICAoKCFjaGFydE9wdGlvbnMubG9nWCkgfHwgKGNoYXJ0T3B0aW9ucy5sb2dYICYmIGNoYXJ0T3B0aW9ucy5tYXhYID4gMCkpKVxuICAgIHdpZHRoICs9IGNoYXJ0T3B0aW9ucy5tYXhYIC0gKHggKyB3aWR0aCk7XG4gIGlmIChjaGFydE9wdGlvbnMubWluWSAhPT0gdW5kZWZpbmVkICYmIGNoYXJ0T3B0aW9ucy5taW5ZICE9PSBudWxsICYmXG4gICAgKCghY2hhcnRPcHRpb25zLmxvZ1kpIHx8IChjaGFydE9wdGlvbnMubG9nWSAmJiBjaGFydE9wdGlvbnMubWluWSA+IDApKSkge1xuICAgIGhlaWdodCArPSB5IC0gY2hhcnRPcHRpb25zLm1pblk7XG4gICAgeSA9IGNoYXJ0T3B0aW9ucy5taW5ZO1xuICB9XG4gIGlmIChjaGFydE9wdGlvbnMubWF4WSAhPT0gdW5kZWZpbmVkICYmIGNoYXJ0T3B0aW9ucy5tYXhZICE9PSBudWxsICYmXG4gICAgKCghY2hhcnRPcHRpb25zLmxvZ1kpIHx8IChjaGFydE9wdGlvbnMubG9nWSAmJiBjaGFydE9wdGlvbnMubWF4WSA+IDApKSlcbiAgICBoZWlnaHQgKz0gY2hhcnRPcHRpb25zLm1heFkgLSAoeSArIGhlaWdodCk7XG5cbiAgcmV0dXJuIG5ldyBERy5SZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpO1xufVxuXG4vKiogUmV0dXJucyB0aGUgYm91bmRzIG9mIGFuIHtAbGluayBJRml0Q2hhcnREYXRhfSBvYmplY3QgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGFydEJvdW5kcyhjaGFydERhdGE6IElGaXRDaGFydERhdGEpOiBERy5SZWN0IHtcbiAgY29uc3QgbyA9IGNoYXJ0RGF0YS5jaGFydE9wdGlvbnM7XG4gIGlmICghY2hhcnREYXRhLnNlcmllcz8ubGVuZ3RoIHx8IGNoYXJ0RGF0YS5zZXJpZXMubGVuZ3RoID09PSAwKVxuICAgIHJldHVybiBuZXcgREcuUmVjdCgwLCAwLCAxLCAxKTtcbiAgZWxzZSB7XG4gICAgY29uc3Qge3hzLCB5c30gPSBnZXRQb2ludHNBcnJheXMoY2hhcnREYXRhLnNlcmllc1swXS5wb2ludHMpO1xuICAgIGxldCBib3VuZHMgPSBERy5SZWN0LmZyb21YWUFycmF5cyh4cywgeXMpO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgY2hhcnREYXRhLnNlcmllcyEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHt4cywgeXN9ID0gZ2V0UG9pbnRzQXJyYXlzKGNoYXJ0RGF0YS5zZXJpZXNbaV0ucG9pbnRzKTtcbiAgICAgIGlmICh4cy5zb21lKCh4KSA9PiB4ID09PSB1bmRlZmluZWQpIHx8IHlzLnNvbWUoKHkpID0+IHkgPT09IHVuZGVmaW5lZCkpXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgYm91bmRzID0gYm91bmRzLnVuaW9uKERHLlJlY3QuZnJvbVhZQXJyYXlzKHhzLCB5cykpO1xuICAgIH1cbiAgICByZXR1cm4gbyA/IGNoYW5nZUJvdW5kcyhib3VuZHMsIG8hKTogYm91bmRzO1xuICB9XG59XG5cbi8qKiBSZXR1cm5zIHNlcmllcyBmaXQgZnVuY3Rpb24gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXJpZXNGaXRGdW5jdGlvbihzZXJpZXM6IElGaXRTZXJpZXMpOiBGaXRGdW5jdGlvbiB7XG4gIHJldHVybiBnZXRPckNyZWF0ZUZpdEZ1bmN0aW9uKHNlcmllcy5maXRGdW5jdGlvbiEpO1xufVxuXG4vKiogUmV0dXJucyBhIGN1cnZlIGZ1bmN0aW9uLCBlaXRoZXIgdXNpbmcgdGhlIHByZS1jb21wdXRlZCBwYXJhbWV0ZXJzIG9yIGJ5IGZpdHRpbmcgb24tdGhlLWZseSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnZlKHNlcmllczogSUZpdFNlcmllcywgZml0RnVuYzogRml0RnVuY3Rpb24pOiAoeDogbnVtYmVyKSA9PiBudW1iZXIge1xuICBjb25zdCBwYXJhbXMgPSBuZXcgRmxvYXQzMkFycmF5KHNlcmllcy5wYXJhbWV0ZXJzPy5sZW5ndGghKTtcbiAgcGFyYW1zLnNldChzZXJpZXMucGFyYW1ldGVycyEpO1xuICByZXR1cm4gZ2V0Rml0dGVkQ3VydmUoZml0RnVuYy55LCBwYXJhbXMpO1xufVxuXG4vKiogUmV0dXJucyB0aGUgZGF0YSBwb2ludHMgb2YgYSBzZXJpZXMgd2l0aCBmaWx0ZXJlZCBvdXRsaWVycyBhbmQgbG9nYXJpdGhtaWMgZGF0YSBpZiBuZWVkZWQgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRhUG9pbnRzKHNlcmllczogSUZpdFNlcmllcywgbG9nT3B0aW9ucz86IExvZ09wdGlvbnMsIHVzZXJQYXJhbXNGbGFnPzogYm9vbGVhbik6XG4gIHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119IHtcbiAgY29uc3QgcG9pbnRzVG9NYXAgPSB1c2VyUGFyYW1zRmxhZyA/IHNlcmllcy5wb2ludHMgOiBzZXJpZXMucG9pbnRzLmZpbHRlcigocCkgPT4gIXAub3V0bGllcik7XG4gIHJldHVybiB7eDogcG9pbnRzVG9NYXAubWFwKChwKSA9PiBsb2dPcHRpb25zPy5sb2dYID8gTWF0aC5sb2cxMChwLngpIDogcC54KSxcbiAgICB5OiBwb2ludHNUb01hcC5tYXAoKHApID0+IGxvZ09wdGlvbnM/LmxvZ1kgPyBNYXRoLmxvZzEwKHAueSkgOiBwLnkpfTtcbn1cblxuLyoqIEZpdHMgdGhlIHNlcmllcyBkYXRhIGFjY29yZGluZyB0byB0aGUgc2VyaWVzIGZpdHRpbmcgc2V0dGluZ3MgKi9cbmV4cG9ydCBmdW5jdGlvbiBmaXRTZXJpZXMoc2VyaWVzOiBJRml0U2VyaWVzLCBmaXRGdW5jOiBGaXRGdW5jdGlvbiwgZGF0YVBvaW50cz86IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119LFxuICBsb2dPcHRpb25zPzogTG9nT3B0aW9ucyk6IEZpdEN1cnZlIHtcbiAgZGF0YVBvaW50cyA/Pz0gZ2V0RGF0YVBvaW50cyhzZXJpZXMsIGxvZ09wdGlvbnMsIGZhbHNlKTtcbiAgaWYgKHNlcmllcy5wYXJhbWV0ZXJCb3VuZHMgJiYgbG9nT3B0aW9ucz8ubG9nWClcbiAgICBzZXJpZXMucGFyYW1ldGVyQm91bmRzWzJdID0gbG9nSUM1MFBhcmFtZXRlckJvdW5kcyhzZXJpZXMucGFyYW1ldGVyQm91bmRzWzJdKTtcbiAgcmV0dXJuIGZpdERhdGEoZ2V0TWVkaWFuUG9pbnRzKGRhdGFQb2ludHMpLCBmaXRGdW5jLCBzZXJpZXMuZXJyb3JNb2RlbCA/PyBGaXRFcnJvck1vZGVsLkNPTlNUQU5UIGFzIEZpdEVycm9yTW9kZWxUeXBlLFxuICAgIHNlcmllcy5wYXJhbWV0ZXJCb3VuZHMpO1xufVxuXG4vKiogUmV0dXJucyBzZXJpZXMgY29uZmlkZW5jZSBpbnRlcnZhbCBmdW5jdGlvbnMgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXJpZXNDb25maWRlbmNlSW50ZXJ2YWwoc2VyaWVzOiBJRml0U2VyaWVzLCBmaXRGdW5jOiBGaXRGdW5jdGlvbiwgdXNlclBhcmFtc0ZsYWc6IGJvb2xlYW4sXG4gIGRhdGFQb2ludHM/OiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSwgbG9nT3B0aW9ucz86IExvZ09wdGlvbnMpOiBGaXRDb25maWRlbmNlSW50ZXJ2YWxzIHtcbiAgZGF0YVBvaW50cyA/Pz0gZ2V0RGF0YVBvaW50cyhzZXJpZXMsIGxvZ09wdGlvbnMsIHVzZXJQYXJhbXNGbGFnKTtcbiAgaWYgKCFzZXJpZXMucGFyYW1ldGVycykge1xuICAgIGNvbnN0IHBhcmFtcyA9IGZpdFNlcmllcyhzZXJpZXMsIGZpdEZ1bmMsIGRhdGFQb2ludHMpLnBhcmFtZXRlcnM7XG4gICAgc2VyaWVzLnBhcmFtZXRlcnMgPSBbLi4ucGFyYW1zXTtcbiAgfVxuICBjb25zdCBwYXJhbXMgPSBuZXcgRmxvYXQzMkFycmF5KHNlcmllcy5wYXJhbWV0ZXJzPy5sZW5ndGghKTtcbiAgcGFyYW1zLnNldChzZXJpZXMucGFyYW1ldGVycyEpO1xuICByZXR1cm4gZ2V0Q3VydmVDb25maWRlbmNlSW50ZXJ2YWxzKGRhdGFQb2ludHMsIHBhcmFtcywgZml0RnVuYy55LCAwLjA1LFxuICAgIHNlcmllcy5lcnJvck1vZGVsID8/IEZpdEVycm9yTW9kZWwuQ09OU1RBTlQgYXMgRml0RXJyb3JNb2RlbFR5cGUpO1xufVxuXG4vKiogUmV0dXJucyBzZXJpZXMgc3RhdGlzdGljcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlcmllc1N0YXRpc3RpY3Moc2VyaWVzOiBJRml0U2VyaWVzLCBmaXRGdW5jOiBGaXRGdW5jdGlvbiwgZGF0YVBvaW50cz86IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119LFxuICBsb2dPcHRpb25zPzogTG9nT3B0aW9ucyk6IEZpdFN0YXRpc3RpY3Mge1xuICBkYXRhUG9pbnRzID8/PSBnZXREYXRhUG9pbnRzKHNlcmllcywgbG9nT3B0aW9ucywgZmFsc2UpO1xuICBpZiAoIXNlcmllcy5wYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgcGFyYW1zID0gZml0U2VyaWVzKHNlcmllcywgZml0RnVuYywgZGF0YVBvaW50cykucGFyYW1ldGVycztcbiAgICBzZXJpZXMucGFyYW1ldGVycyA9IFsuLi5wYXJhbXNdO1xuICB9XG4gIGNvbnN0IHBhcmFtcyA9IG5ldyBGbG9hdDMyQXJyYXkoc2VyaWVzLnBhcmFtZXRlcnM/Lmxlbmd0aCEpO1xuICBwYXJhbXMuc2V0KHNlcmllcy5wYXJhbWV0ZXJzISk7XG4gIHJldHVybiBnZXRTdGF0aXN0aWNzKGRhdGFQb2ludHMsIHBhcmFtcywgZml0RnVuYy55LCB0cnVlKTtcbn1cbiJdfQ==
@@ -1,11 +1,11 @@
1
1
  import * as DG from 'datagrok-api/dg';
2
- export declare type Extremum = {
2
+ export type Extremum = {
3
3
  point: Float32Array;
4
4
  cost: number;
5
5
  iterCosts: number[];
6
6
  iterCount: number;
7
7
  };
8
- export declare type OptimizationResult = {
8
+ export type OptimizationResult = {
9
9
  extremums: Extremum[];
10
10
  fails: DG.DataFrame | null;
11
11
  };
@@ -1 +1 @@
1
- {"version":3,"file":"optimizer-misc.d.ts","sourceRoot":"","sources":["optimizer-misc.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGtC,oBAAY,QAAQ,GAAG;IACrB,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAA;AAED,oBAAY,kBAAkB,GAAG;IAC/B,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,KAAK,EAAE,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC;CAC5B,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAC,EAC9E,aAAa,EAAE,YAAY,EAC3B,QAAQ,EAAE,GAAG,EACb,kBAAkB,EAAE,YAAY,EAChC,eAAe,EAAE,YAAY,GAAG,QAAQ,CAAC;CAC1C;AAED,gCAAgC;AAChC,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,GAAG,EAAE,MAAM;CAGxB"}
1
+ {"version":3,"file":"optimizer-misc.d.ts","sourceRoot":"","sources":["optimizer-misc.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGtC,MAAM,MAAM,QAAQ,GAAG;IACrB,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,KAAK,EAAE,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC;CAC5B,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAC,EAC9E,aAAa,EAAE,YAAY,EAC3B,QAAQ,EAAE,GAAG,EACb,kBAAkB,EAAE,YAAY,EAChC,eAAe,EAAE,YAAY,GAAG,QAAQ,CAAC;CAC1C;AAED,gCAAgC;AAChC,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,GAAG,EAAE,MAAM;CAGxB"}
@@ -1,6 +1,6 @@
1
1
  import { IOptimizer } from './optimizer-misc';
2
2
  /** The Nelder-Mead method settings */
3
- export declare type NelderMeadSettings = {
3
+ export type NelderMeadSettings = {
4
4
  tolerance: number;
5
5
  maxIter: number;
6
6
  nonZeroParam: number;
@@ -1 +1 @@
1
- {"version":3,"file":"optimizer-nelder-mead.d.ts","sourceRoot":"","sources":["optimizer-nelder-mead.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAGtD,sCAAsC;AACtC,oBAAY,kBAAkB,GAAG;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,gDAAgD;AAChD,oBAAY,oBAAoB;IAC9B,SAAS,OAAO;IAChB,QAAQ,KAAK;IACb,cAAc,SAAS;IACvB,aAAa,OAAO;IACpB,gBAAgB,IAAI;IACpB,eAAe,IAAI;IACnB,iBAAiB,OAAO;CACzB;AAED,mDAAmD;AACnD,eAAO,MAAM,kBAAkB,qBAQ7B,CAAC;AAkEH,eAAO,MAAM,UAAU,EAAE,UA2HxB,CAAC"}
1
+ {"version":3,"file":"optimizer-nelder-mead.d.ts","sourceRoot":"","sources":["optimizer-nelder-mead.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAGtD,sCAAsC;AACtC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,gDAAgD;AAChD,oBAAY,oBAAoB;IAC9B,SAAS,OAAO;IAChB,QAAQ,KAAK;IACb,cAAc,SAAS;IACvB,aAAa,OAAO;IACpB,gBAAgB,IAAI;IACpB,eAAe,IAAI;IACnB,iBAAiB,OAAO;CACzB;AAED,mDAAmD;AACnD,eAAO,MAAM,kBAAkB,qBAQ7B,CAAC;AAkEH,eAAO,MAAM,UAAU,EAAE,UA2HxB,CAAC"}
package/src/tests.d.ts CHANGED
@@ -1,11 +1,11 @@
1
- declare type testStats = {
1
+ type testStats = {
2
2
  'p-value': number;
3
3
  'Mean difference'?: number;
4
4
  'Median difference'?: number;
5
5
  'p-value more': number;
6
6
  'p-value less': number;
7
7
  };
8
- declare type Population = number[] | Float32Array | Int32Array;
8
+ type Population = number[] | Float32Array | Int32Array;
9
9
  export declare function tTest(sample1: Population, sample2: Population, devKnown?: boolean, devEqual?: boolean): testStats;
10
10
  export declare function uTest(x: number[], y: number[], continuity?: boolean): testStats;
11
11
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"tests.d.ts","sourceRoot":"","sources":["tests.ts"],"names":[],"mappings":"AAGA,aAAK,SAAS,GAAG;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,aAAK,UAAU,GAAG,MAAM,EAAE,GAAG,YAAY,GAAG,UAAU,CAAC;AAEvD,wBAAgB,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,UAAM,EAAE,QAAQ,UAAM,GAAG,SAAS,CA6CzG;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,UAAU,UAAK,GAAG,SAAS,CA+B1E"}
1
+ {"version":3,"file":"tests.d.ts","sourceRoot":"","sources":["tests.ts"],"names":[],"mappings":"AAGA,KAAK,SAAS,GAAG;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,KAAK,UAAU,GAAG,MAAM,EAAE,GAAG,YAAY,GAAG,UAAU,CAAC;AAEvD,wBAAgB,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,UAAM,EAAE,QAAQ,UAAM,GAAG,SAAS,CA6CzG;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,UAAU,UAAK,GAAG,SAAS,CA+B1E"}