@eliorar/angular-cesium
Version:
Angular library for working with Cesium.
160 lines • 23.7 kB
JavaScript
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
import { Cartesian2, Cartesian3, Color } from 'cesium';
import { EditActions } from '../../models/edit-actions.enum';
import { EditModes } from '../../models/edit-mode.enum';
import { PolylinesEditorService } from '../../services/entity-editors/polyline-editor/polylines-editor.service';
import * as i0 from "@angular/core";
import * as i1 from "../../services/entity-editors/polyline-editor/polylines-editor.service";
import * as i2 from "../../../angular-cesium/services/coordinate-converter/coordinate-converter.service";
import * as i3 from "../polylines-editor/polylines-editor.component";
/**
*
* Range and bearing component that is used to draw range and bearing on the map.
* The inputs are used to customize the range and bearing style and behavior.
* Create component reference and use the `create()` function to start creating R&B on the map.
* The function receives an optional RangeAndBearingOptions object that defines the created range and bearing style and behavior
* (on top of the default and global definitions).
*
* Usage:
*
* my-component.ts:
*
* ```
* \@ViewChild('rangeAndBearing', {static: false}) private rangeAndBearing: RangeAndBearingComponent; // Get R&B reference
* // ...
* this.rangeAndBearing.create({style: { pointProps: { pixelSize: 12 } }, bearingLabelsStyle: { fillColor: Color.GREEN } });
* ```
*
* my-component.html
* ```
* <range-and-bearing #rangeAndBearing></range-and-bearing> // Optional inputs defines global style and behavior.
* ```
*
*/
export class RangeAndBearingComponent {
constructor(polylineEditor, coordinateConverter) {
this.polylineEditor = polylineEditor;
this.coordinateConverter = coordinateConverter;
this.lineEditOptions = {};
this.labelsStyle = {};
this.distanceLabelsStyle = {};
this.bearingLabelsStyle = {};
}
create({ lineEditOptions = {}, labelsStyle = {}, distanceLabelsStyle = {}, bearingLabelsStyle = {}, bearingStringFn, distanceStringFn, labelsRenderFn, } = { lineEditOptions: {}, labelsStyle: {}, distanceLabelsStyle: {}, bearingLabelsStyle: {} }) {
const rnb = this.polylineEditor.create({
allowDrag: false,
pointProps: {
showVirtual: false,
pixelSize: 8,
},
polylineProps: {
width: 2,
},
...this.lineEditOptions,
...lineEditOptions,
});
if (labelsRenderFn) {
rnb.setLabelsRenderFn(labelsRenderFn);
}
else if (this.labelsRenderFn) {
rnb.setLabelsRenderFn(this.labelsRenderFn);
}
else {
rnb.setLabelsRenderFn(update => {
const positions = update.positions;
let totalDistance = 0;
if (!positions || positions.length === 0) {
return [];
}
return (update.editMode === EditModes.CREATE && update.editAction !== EditActions.ADD_LAST_POINT
? [...positions, update.updatedPosition]
: positions).reduce((labels, position, index, array) => {
if (index !== 0) {
const previousPosition = array[index - 1];
const bearing = this.coordinateConverter.bearingToCartesian(previousPosition, position);
const distance = Cartesian3.distance(previousPosition, position) / 1000;
labels.push({
text: (bearingStringFn && bearingStringFn(bearing)) ||
(this.bearingStringFn && this.bearingStringFn(bearing)) ||
`${bearing.toFixed(2)}°`,
scale: 0.2,
font: '80px Helvetica',
pixelOffset: new Cartesian2(-20, -8),
position: new Cartesian3((position.x + previousPosition.x) / 2, (position.y + previousPosition.y) / 2, (position.z + previousPosition.z) / 2),
fillColor: Color.WHITE,
outlineColor: Color.WHITE,
showBackground: true,
...this.labelsStyle,
...labelsStyle,
...this.bearingLabelsStyle,
...bearingLabelsStyle,
}, {
text: (distanceStringFn && distanceStringFn(totalDistance + distance)) ||
(this.distanceStringFn && this.distanceStringFn(totalDistance + distance)) ||
`${(totalDistance + distance).toFixed(2)} Km`,
scale: 0.2,
font: '80px Helvetica',
pixelOffset: new Cartesian2(-35, -8),
position: position,
fillColor: Color.WHITE,
outlineColor: Color.WHITE,
showBackground: true,
...this.labelsStyle,
...labelsStyle,
...this.distanceLabelsStyle,
...distanceLabelsStyle,
});
totalDistance += distance;
}
return labels;
}, [
{
text: (distanceStringFn && distanceStringFn(0)) || (this.distanceStringFn && this.distanceStringFn(0)) || `0 Km`,
scale: 0.2,
font: '80px Helvetica',
pixelOffset: new Cartesian2(-20, -8),
position: positions[0],
fillColor: Color.WHITE,
outlineColor: Color.WHITE,
showBackground: true,
...this.labelsStyle,
...labelsStyle,
...this.distanceLabelsStyle,
...distanceLabelsStyle,
},
]);
});
}
return rnb;
}
}
RangeAndBearingComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: RangeAndBearingComponent, deps: [{ token: i1.PolylinesEditorService }, { token: i2.CoordinateConverter }], target: i0.ɵɵFactoryTarget.Component });
RangeAndBearingComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: RangeAndBearingComponent, selector: "range-and-bearing", inputs: { lineEditOptions: "lineEditOptions", labelsStyle: "labelsStyle", distanceLabelsStyle: "distanceLabelsStyle", bearingLabelsStyle: "bearingLabelsStyle", bearingStringFn: "bearingStringFn", distanceStringFn: "distanceStringFn", labelsRenderFn: "labelsRenderFn" }, providers: [PolylinesEditorService], ngImport: i0, template: `
<polylines-editor></polylines-editor>
`, isInline: true, components: [{ type: i3.PolylinesEditorComponent, selector: "polylines-editor" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: RangeAndBearingComponent, decorators: [{
type: Component,
args: [{
selector: 'range-and-bearing',
template: `
<polylines-editor></polylines-editor>
`,
changeDetection: ChangeDetectionStrategy.OnPush,
providers: [PolylinesEditorService],
}]
}], ctorParameters: function () { return [{ type: i1.PolylinesEditorService }, { type: i2.CoordinateConverter }]; }, propDecorators: { lineEditOptions: [{
type: Input
}], labelsStyle: [{
type: Input
}], distanceLabelsStyle: [{
type: Input
}], bearingLabelsStyle: [{
type: Input
}], bearingStringFn: [{
type: Input
}], distanceStringFn: [{
type: Input
}], labelsRenderFn: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UtYW5kLWJlYXJpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jZXNpdW0vc3JjL2xpYi9hbmd1bGFyLWNlc2l1bS13aWRnZXRzL2NvbXBvbmVudHMvcmFuZ2UtYW5kLWJlYXJpbmcvcmFuZ2UtYW5kLWJlYXJpbmcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUVyRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFLM0QsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3RELE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHdFQUF3RSxDQUFDOzs7OztBQUU5Rzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFTSCxNQUFNLE9BQU8sd0JBQXdCO0lBU25DLFlBQW9CLGNBQXNDLEVBQVUsbUJBQXdDO1FBQXhGLG1CQUFjLEdBQWQsY0FBYyxDQUF3QjtRQUFVLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFSbkcsb0JBQWUsR0FBeUIsRUFBRSxDQUFDO1FBQzNDLGdCQUFXLEdBQWdCLEVBQUUsQ0FBQztRQUM5Qix3QkFBbUIsR0FBZ0IsRUFBRSxDQUFDO1FBQ3RDLHVCQUFrQixHQUFnQixFQUFFLENBQUM7SUFNOUMsQ0FBQztJQUVELE1BQU0sQ0FDSixFQUNFLGVBQWUsR0FBRyxFQUFFLEVBQ3BCLFdBQVcsR0FBRyxFQUFFLEVBQ2hCLG1CQUFtQixHQUFHLEVBQUUsRUFDeEIsa0JBQWtCLEdBQUcsRUFBRSxFQUN2QixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hC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RUFBRSxnQkFBZ0I7d0JBQ3RCLFdBQVcsRUFBRSxJQUFJLFVBQVUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDcEMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7d0JBQ3RCLFNBQVMsRUFBRSxLQUFLLENBQUMsS0FBSzt3QkFDdEIsWUFBWSxFQUFFLEtBQUssQ0FBQyxLQUFLO3dCQUN6QixjQUFjLEVBQUUsSUFBSTt3QkFDcEIsR0FBSSxJQUFJLENBQUMsV0FBbUI7d0JBQzVCLEdBQUksV0FBbUI7d0JBQ3ZCLEdBQUksSUFBSSxDQUFDLG1CQUEyQjt3QkFDcEMsR0FBSSxtQkFBMkI7cUJBQ2hDO2lCQUNGLENBQ0YsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7O3FIQTNIVSx3QkFBd0I7eUdBQXhCLHdCQUF3QiwwVEFGeEIsQ0FBQyxzQkFBc0IsQ0FBQywwQkFKekI7O0dBRVQ7MkZBSVUsd0JBQXdCO2tCQVJwQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFFBQVEsRUFBRTs7R0FFVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsU0FBUyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ3BDOytJQUVVLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q2FydGVzaWFuMiwgQ2FydGVzaWFuMywgQ29sb3J9IGZyb20gJ2Nlc2l1bSc7XG5pbXBvcnQge0Nvb3JkaW5hdGVDb252ZXJ0ZXJ9IGZyb20gJy4uLy4uLy4uL2FuZ3VsYXItY2VzaXVtL3NlcnZpY2VzL2Nvb3JkaW5hdGUtY29udmVydGVyL2Nvb3JkaW5hdGUtY29udmVydGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtFZGl0QWN0aW9uc30gZnJvbSAnLi4vLi4vbW9kZWxzL2VkaXQtYWN0aW9ucy5lbnVtJztcbmltcG9ydCB7UG9seWxpbmVFZGl0b3JPYnNlcnZhYmxlfSBmcm9tICcuLi8uLi9tb2RlbHMvcG9seWxpbmUtZWRpdG9yLW9ic2VydmFibGUnO1xuaW1wb3J0IHtQb2x5bGluZUVkaXRPcHRpb25zfSBmcm9tICcuLi8uLi9tb2RlbHMvcG9seWxpbmUtZWRpdC1vcHRpb25zJztcbmltcG9ydCB7TGFiZWxQcm9wcywgTGFiZWxTdHlsZX0gZnJvbSAnLi4vLi4vbW9kZWxzL2xhYmVsLXByb3BzJztcbmltcG9ydCB7UG9seWxpbmVFZGl0VXBkYXRlfSBmcm9tICcuLi8uLi9tb2RlbHMvcG9seWxpbmUtZWRpdC11cGRhdGUnO1xuaW1wb3J0IHtFZGl0TW9kZXN9IGZyb20gJy4uLy4uL21vZGVscy9lZGl0LW1vZGUuZW51bSc7XG5pbXBvcnQge1BvbHlsaW5lc0VkaXRvclNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VudGl0eS1lZGl0b3JzL3BvbHlsaW5lLWVkaXRvci9wb2x5bGluZXMtZWRpdG9yLnNlcnZpY2UnO1xuXG4vKipcbiAqXG4gKiBSYW5nZSBhbmQgYmVhcmluZyBjb21wb25lbnQgdGhhdCBpcyB1c2VkIHRvIGRyYXcgcmFuZ2UgYW5kIGJlYXJpbmcgb24gdGhlIG1hcC5cbiAqIFRoZSBpbnB1dHMgYXJlIHVzZWQgdG8gY3VzdG9taXplIHRoZSByYW5nZSBhbmQgYmVhcmluZyBzdHlsZSBhbmQgYmVoYXZpb3IuXG4gKiBDcmVhdGUgY29tcG9uZW50IHJlZmVyZW5jZSBhbmQgdXNlIHRoZSBgY3JlYXRlKClgIGZ1bmN0aW9uIHRvIHN0YXJ0IGNyZWF0aW5nIFImQiBvbiB0aGUgbWFwLlxuICogVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIGFuIG9wdGlvbmFsIFJhbmdlQW5kQmVhcmluZ09wdGlvbnMgb2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUgY3JlYXRlZCByYW5nZSBhbmQgYmVhcmluZyBzdHlsZSBhbmQgYmVoYXZpb3JcbiAqIChvbiB0b3Agb2YgdGhlIGRlZmF1bHQgYW5kIGdsb2JhbCBkZWZpbml0aW9ucykuXG4gKlxuICogVXNhZ2U6XG4gKlxuICogbXktY29tcG9uZW50LnRzOlxuICpcbiAqIGBgYFxuICogXFxAVmlld0NoaWxkKCdyYW5nZUFuZEJlYXJpbmcnLCB7c3RhdGljOiBmYWxzZX0pIHByaXZhdGUgcmFuZ2VBbmRCZWFyaW5nOiBSYW5nZUFuZEJlYXJpbmdDb21wb25lbnQ7IC8vIEdldCBSJkIgcmVmZXJlbmNlXG4gKiAgLy8gLi4uXG4gKiB0aGlzLnJhbmdlQW5kQmVhcmluZy5jcmVhdGUoe3N0eWxlOiB7IHBvaW50UHJvcHM6IHsgcGl4ZWxTaXplOiAxMiB9IH0sIGJlYXJpbmdMYWJlbHNTdHlsZTogeyBmaWxsQ29sb3I6IENvbG9yLkdSRUVOIH0gfSk7XG4gKiBgYGBcbiAqXG4gKiBteS1jb21wb25lbnQuaHRtbFxuICogYGBgXG4gKiA8cmFuZ2UtYW5kLWJlYXJpbmcgI3JhbmdlQW5kQmVhcmluZz48L3JhbmdlLWFuZC1iZWFyaW5nPiAvLyBPcHRpb25hbCBpbnB1dHMgZGVmaW5lcyBnbG9iYWwgc3R5bGUgYW5kIGJlaGF2aW9yLlxuICogYGBgXG4gKlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyYW5nZS1hbmQtYmVhcmluZycsXG4gIHRlbXBsYXRlOiBgXG4gICAgPHBvbHlsaW5lcy1lZGl0b3I+PC9wb2x5bGluZXMtZWRpdG9yPlxuICBgLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbUG9seWxpbmVzRWRpdG9yU2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIFJhbmdlQW5kQmVhcmluZ0NvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGxpbmVFZGl0T3B0aW9ucz86IFBvbHlsaW5lRWRpdE9wdGlvbnMgPSB7fTtcbiAgQElucHV0KCkgbGFiZWxzU3R5bGU/OiBMYWJlbFN0eWxlID0ge307XG4gIEBJbnB1dCgpIGRpc3RhbmNlTGFiZWxzU3R5bGU/OiBMYWJlbFN0eWxlID0ge307XG4gIEBJbnB1dCgpIGJlYXJpbmdMYWJlbHNTdHlsZT86IExhYmVsU3R5bGUgPSB7fTtcbiAgQElucHV0KCkgYmVhcmluZ1N0cmluZ0ZuPzogKHZhbHVlOiBudW1iZXIpID0+IHN0cmluZztcbiAgQElucHV0KCkgZGlzdGFuY2VTdHJpbmdGbj86ICh2YWx1ZTogbnVtYmVyKSA9PiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxhYmVsc1JlbmRlckZuPzogKHVwZGF0ZTogUG9seWxpbmVFZGl0VXBkYXRlLCBsYWJlbHM6IExhYmVsUHJvcHNbXSkgPT4gTGFiZWxQcm9wc1tdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcG9seWxpbmVFZGl0b3I6IFBvbHlsaW5lc0VkaXRvclNlcnZpY2UsIHByaXZhdGUgY29vcmRpbmF0ZUNvbnZlcnRlcjogQ29vcmRpbmF0ZUNvbnZlcnRlcikge1xuICB9XG5cbiAgY3JlYXRlKFxuICAgIHtcbiAgICAgIGxpbmVFZGl0T3B0aW9ucyA9IHt9LFxuICAgICAgbGFiZWxzU3R5bGUgPSB7fSxcbiAgICAgIGRpc3RhbmNlTGFiZWxzU3R5bGUgPSB7fSxcbiAgICAgIGJlYXJpbmdMYWJlbHNTdHlsZSA9IHt9LFxuICAgICAgYmVhcmluZ1N0cmluZ0ZuLFxuICAgICAgZGlzdGFuY2VTdHJpbmdGbixcbiAgICAgIGxhYmVsc1JlbmRlckZuLFxuICAgIH06IFJhbmdlQW5kQmVhcmluZ09wdGlvbnMgPSB7bGluZUVkaXRPcHRpb25zOiB7fSwgbGFiZWxzU3R5bGU6IHt9LCBkaXN0YW5jZUxhYmVsc1N0eWxlOiB7fSwgYmVhcmluZ0xhYmVsc1N0eWxlOiB7fX0sXG4gICk6IFBvbHlsaW5lRWRpdG9yT2JzZXJ2YWJsZSB7XG4gICAgY29uc3Qgcm5iID0gdGhpcy5wb2x5bGluZUVkaXRvci5jcmVhdGUoe1xuICAgICAgYWxsb3dEcmFnOiBmYWxzZSxcbiAgICAgIHBvaW50UHJvcHM6IHtcbiAgICAgICAgc2hvd1ZpcnR1YWw6IGZhbHNlLFxuICAgICAgICBwaXhlbFNpemU6IDgsXG4gICAgICB9LFxuICAgICAgcG9seWxpbmVQcm9wczoge1xuICAgICAgICB3aWR0aDogMixcbiAgICAgIH0sXG4gICAgICAuLi50aGlzLmxpbmVFZGl0T3B0aW9ucyxcbiAgICAgIC4uLmxpbmVFZGl0T3B0aW9ucyxcbiAgICB9KTtcblxuICAgIGlmIChsYWJlbHNSZW5kZXJGbikge1xuICAgICAgcm5iLnNldExhYmVsc1JlbmRlckZuKGxhYmVsc1JlbmRlckZuKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubGFiZWxzUmVuZGVyRm4pIHtcbiAgICAgIHJuYi5zZXRMYWJlbHNSZW5kZXJGbih0aGlzLmxhYmVsc1JlbmRlckZuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm5iLnNldExhYmVsc1JlbmRlckZuKHVwZGF0ZSA9PiB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IHVwZGF0ZS5wb3NpdGlvbnM7XG4gICAgICAgIGxldCB0b3RhbERpc3RhbmNlID0gMDtcbiAgICAgICAgaWYgKCFwb3NpdGlvbnMgfHwgcG9zaXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHVwZGF0ZS5lZGl0TW9kZSA9PT0gRWRpdE1vZGVzLkNSRUFURSAmJiB1cGRhdGUuZWRpdEFjdGlvbiAhPT0gRWRpdEFjdGlvbnMuQUREX0xBU1RfUE9JTlRcbiAgICAgICAgICAgID8gWy4uLnBvc2l0aW9ucywgdXBkYXRlLnVwZGF0ZWRQb3NpdGlvbl1cbiAgICAgICAgICAgIDogcG9zaXRpb25zXG4gICAgICAgICkucmVkdWNlKFxuICAgICAgICAgIChsYWJlbHMsIHBvc2l0aW9uLCBpbmRleCwgYXJyYXkpID0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gMCkge1xuICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c1Bvc2l0aW9uID0gYXJyYXlbaW5kZXggLSAxXTtcbiAgICAgICAgICAgICAgY29uc3QgYmVhcmluZyA9IHRoaXMuY29vcmRpbmF0ZUNvbnZlcnRlci5iZWFyaW5nVG9DYXJ0ZXNpYW4ocHJldmlvdXNQb3NpdGlvbiwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IENhcnRlc2lhbjMuZGlzdGFuY2UocHJldmlvdXNQb3NpdGlvbiwgcG9zaXRpb24pIC8gMTAwMDtcbiAgICAgICAgICAgICAgbGFiZWxzLnB1c2goXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdGV4dDpcbiAgICAgICAgICAgICAgICAgICAgKGJlYXJpbmdTdHJpbmdGbiAmJiBiZWFyaW5nU3RyaW5nRm4oYmVhcmluZykpIHx8XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmJlYXJpbmdTdHJpbmdGbiAmJiB0aGlzLmJlYXJpbmdTdHJpbmdGbihiZWFyaW5nKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgYCR7YmVhcmluZy50b0ZpeGVkKDIpfcKwYCxcbiAgICAgICAgICAgICAgICAgIHNjYWxlOiAwLjIsXG4gICAgICAgICAgICAgICAgICBmb250OiAnODBweCBIZWx2ZXRpY2EnLFxuICAgICAgICAgICAgICAgICAgcGl4ZWxPZmZzZXQ6IG5ldyBDYXJ0ZXNpYW4yKC0yMCwgLTgpLFxuICAgICAgICAgICAgICAgICAgcG9zaXRpb246IG5ldyBDYXJ0ZXNpYW4zKFxuICAgICAgICAgICAgICAgICAgICAocG9zaXRpb24ueCArIHByZXZpb3VzUG9zaXRpb24ueCkgLyAyLFxuICAgICAgICAgICAgICAgICAgICAocG9zaXRpb24ueSArIHByZXZpb3VzUG9zaXRpb24ueSkgLyAyLFxuICAgICAgICAgICAgICAgICAgICAocG9zaXRpb24ueiArIHByZXZpb3VzUG9zaXRpb24ueikgLyAyLFxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIGZpbGxDb2xvcjogQ29sb3IuV0hJVEUsXG4gICAgICAgICAgICAgICAgICBvdXRsaW5lQ29sb3I6IENvbG9yLldISVRFLFxuICAgICAgICAgICAgICAgICAgc2hvd0JhY2tncm91bmQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAuLi4odGhpcy5sYWJlbHNTdHlsZSBhcyBhbnkpLFxuICAgICAgICAgICAgICAgICAgLi4uKGxhYmVsc1N0eWxlIGFzIGFueSksXG4gICAgICAgICAgICAgICAgICAuLi4odGhpcy5iZWFyaW5nTGFiZWxzU3R5bGUgYXMgYW55KSxcbiAgICAgICAgICAgICAgICAgIC4uLihiZWFyaW5nTGFiZWxzU3R5bGUgYXMgYW55KSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHRleHQ6XG4gICAgICAgICAgICAgICAgICAgIChkaXN0YW5jZVN0cmluZ0ZuICYmIGRpc3RhbmNlU3RyaW5nRm4odG90YWxEaXN0YW5jZSArIGRpc3RhbmNlKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuZGlzdGFuY2VTdHJpbmdGbiAmJiB0aGlzLmRpc3RhbmNlU3RyaW5nRm4odG90YWxEaXN0YW5jZSArIGRpc3RhbmNlKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgYCR7KHRvdGFsRGlzdGFuY2UgKyBkaXN0YW5jZSkudG9GaXhlZCgyKX0gS21gLFxuICAgICAgICAgICAgICAgICAgc2NhbGU6IDAuMixcbiAgICAgICAgICAgICAgICAgIGZvbnQ6ICc4MHB4IEhlbHZldGljYScsXG4gICAgICAgICAgICAgICAgICBwaXhlbE9mZnNldDogbmV3IENhcnRlc2lhbjIoLTM1LCAtOCksXG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbjogcG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICBmaWxsQ29sb3I6IENvbG9yLldISVRFLFxuICAgICAgICAgICAgICAgICAgb3V0bGluZUNvbG9yOiBDb2xvci5XSElURSxcbiAgICAgICAgICAgICAgICAgIHNob3dCYWNrZ3JvdW5kOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgLi4uKHRoaXMubGFiZWxzU3R5bGUgYXMgYW55KSxcbiAgICAgICAgICAgICAgICAgIC4uLihsYWJlbHNTdHlsZSBhcyBhbnkpLFxuICAgICAgICAgICAgICAgICAgLi4uKHRoaXMuZGlzdGFuY2VMYWJlbHNTdHlsZSBhcyBhbnkpLFxuICAgICAgICAgICAgICAgICAgLi4uKGRpc3RhbmNlTGFiZWxzU3R5bGUgYXMgYW55KSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHRvdGFsRGlzdGFuY2UgKz0gZGlzdGFuY2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBsYWJlbHM7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRleHQ6IChkaXN0YW5jZVN0cmluZ0ZuICYmIGRpc3RhbmNlU3RyaW5nRm4oMCkpIHx8ICh0aGlzLmRpc3RhbmNlU3RyaW5nRm4gJiYgdGhpcy5kaXN0YW5jZVN0cmluZ0ZuKDApKSB8fCBgMCBLbWAsXG4gICAgICAgICAgICAgIHNjYWxlOiAwLjIsXG4gICAgICAgICAgICAgIGZvbnQ6ICc4MHB4IEhlbHZldGljYScsXG4gICAgICAgICAgICAgIHBpeGVsT2Zmc2V0OiBuZXcgQ2FydGVzaWFuMigtMjAsIC04KSxcbiAgICAgICAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uc1swXSxcbiAgICAgICAgICAgICAgZmlsbENvbG9yOiBDb2xvci5XSElURSxcbiAgICAgICAgICAgICAgb3V0bGluZUNvbG9yOiBDb2xvci5XSElURSxcbiAgICAgICAgICAgICAgc2hvd0JhY2tncm91bmQ6IHRydWUsXG4gICAgICAgICAgICAgIC4uLih0aGlzLmxhYmVsc1N0eWxlIGFzIGFueSksXG4gICAgICAgICAgICAgIC4uLihsYWJlbHNTdHlsZSBhcyBhbnkpLFxuICAgICAgICAgICAgICAuLi4odGhpcy5kaXN0YW5jZUxhYmVsc1N0eWxlIGFzIGFueSksXG4gICAgICAgICAgICAgIC4uLihkaXN0YW5jZUxhYmVsc1N0eWxlIGFzIGFueSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm5iO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmFuZ2VBbmRCZWFyaW5nT3B0aW9ucyB7XG4gIGxpbmVFZGl0T3B0aW9ucz86IFBvbHlsaW5lRWRpdE9wdGlvbnM7XG4gIGxhYmVsc1N0eWxlPzogTGFiZWxTdHlsZTtcbiAgZGlzdGFuY2VMYWJlbHNTdHlsZT86IExhYmVsU3R5bGU7XG4gIGJlYXJpbmdMYWJlbHNTdHlsZT86IExhYmVsU3R5bGU7XG4gIGJlYXJpbmdTdHJpbmdGbj86ICh2YWx1ZTogbnVtYmVyKSA9PiBzdHJpbmc7XG4gIGRpc3RhbmNlU3RyaW5nRm4/OiAodmFsdWU6IG51bWJlcikgPT4gc3RyaW5nO1xuICBsYWJlbHNSZW5kZXJGbj86ICh1cGRhdGU6IFBvbHlsaW5lRWRpdFVwZGF0ZSwgbGFiZWxzOiBMYWJlbFByb3BzW10pID0+IExhYmVsUHJvcHNbXTtcbn1cbiJdfQ==