angular-cesium
Version:
Angular library for working with Cesium.
186 lines • 29.1 kB
JavaScript
import { KeyboardAction } from '../../models/ac-keyboard-action.enum';
const CAMERA_MOVEMENT_DEFAULT_FACTOR = 100.0;
const CAMERA_LOOK_DEFAULT_FACTOR = 0.01;
const CAMERA_TWIST_DEFAULT_FACTOR = 0.01;
const CAMERA_ROTATE_DEFAULT_FACTOR = 0.01;
export const PREDEFINED_KEYBOARD_ACTIONS = {
/**
* Moves the camera forward, accepts a numeric parameter named `moveRate` that controls
* the factor of movement, according to the camera height.
*/
[KeyboardAction.CAMERA_FORWARD]: (cesiumService, params) => {
const camera = cesiumService.getViewer().camera;
const scene = cesiumService.getScene();
const cameraHeight = scene.globe.ellipsoid.cartesianToCartographic(camera.position).height;
const moveRate = cameraHeight / (params.moveRate || CAMERA_MOVEMENT_DEFAULT_FACTOR);
camera.moveForward(moveRate);
},
/**
* Moves the camera backward, accepts a numeric parameter named `moveRate` that controls
* the factor of movement, according to the camera height.
*/
[KeyboardAction.CAMERA_BACKWARD]: (cesiumService, params) => {
const camera = cesiumService.getViewer().camera;
const scene = cesiumService.getScene();
const cameraHeight = scene.globe.ellipsoid.cartesianToCartographic(camera.position).height;
const moveRate = cameraHeight / (params.moveRate || CAMERA_MOVEMENT_DEFAULT_FACTOR);
camera.moveBackward(moveRate);
},
/**
* Moves the camera up, accepts a numeric parameter named `moveRate` that controls
* the factor of movement, according to the camera height.
*/
[KeyboardAction.CAMERA_UP]: (cesiumService, params) => {
const camera = cesiumService.getViewer().camera;
const scene = cesiumService.getScene();
const cameraHeight = scene.globe.ellipsoid.cartesianToCartographic(camera.position).height;
const moveRate = cameraHeight / (params.moveRate || CAMERA_MOVEMENT_DEFAULT_FACTOR);
camera.moveUp(moveRate);
},
/**
* Moves the camera down, accepts a numeric parameter named `moveRate` that controls
* the factor of movement, according to the camera height.
*/
[KeyboardAction.CAMERA_DOWN]: (cesiumService, params) => {
const camera = cesiumService.getViewer().camera;
const scene = cesiumService.getScene();
const cameraHeight = scene.globe.ellipsoid.cartesianToCartographic(camera.position).height;
const moveRate = cameraHeight / (params.moveRate || CAMERA_MOVEMENT_DEFAULT_FACTOR);
camera.moveDown(moveRate);
},
/**
* Moves the camera right, accepts a numeric parameter named `moveRate` that controls
* the factor of movement, according to the camera height.
*/
[KeyboardAction.CAMERA_RIGHT]: (cesiumService, params) => {
const camera = cesiumService.getViewer().camera;
const scene = cesiumService.getScene();
const cameraHeight = scene.globe.ellipsoid.cartesianToCartographic(camera.position).height;
const moveRate = cameraHeight / (params.moveRate || CAMERA_MOVEMENT_DEFAULT_FACTOR);
camera.moveRight(moveRate);
},
/**
* Moves the camera left, accepts a numeric parameter named `moveRate` that controls
* the factor of movement, according to the camera height.
*/
[KeyboardAction.CAMERA_LEFT]: (cesiumService, params) => {
const camera = cesiumService.getViewer().camera;
const scene = cesiumService.getScene();
const cameraHeight = scene.globe.ellipsoid.cartesianToCartographic(camera.position).height;
const moveRate = cameraHeight / (params.moveRate || CAMERA_MOVEMENT_DEFAULT_FACTOR);
camera.moveLeft(moveRate);
},
/**
* Changes the camera to look to the right, accepts a numeric parameter named `lookFactor` that controls
* the factor of looking, according to the camera current position.
*/
[KeyboardAction.CAMERA_LOOK_RIGHT]: (cesiumService, params) => {
const camera = cesiumService.getViewer().camera;
const currentPosition = camera.positionCartographic;
const lookFactor = params.lookFactor || CAMERA_LOOK_DEFAULT_FACTOR;
camera.lookRight(currentPosition.latitude * lookFactor);
},
/**
* Changes the camera to look to the left, accepts a numeric parameter named `lookFactor` that controls
* the factor of looking, according to the camera current position.
*/
[KeyboardAction.CAMERA_LOOK_LEFT]: (cesiumService, params) => {
const camera = cesiumService.getViewer().camera;
const currentPosition = camera.positionCartographic;
const lookFactor = params.lookFactor || CAMERA_LOOK_DEFAULT_FACTOR;
camera.lookLeft(currentPosition.latitude * lookFactor);
},
/**
* Changes the camera to look up, accepts a numeric parameter named `lookFactor` that controls
* the factor of looking, according to the camera current position.
*/
[KeyboardAction.CAMERA_LOOK_UP]: (cesiumService, params) => {
const camera = cesiumService.getViewer().camera;
const currentPosition = camera.positionCartographic;
const lookFactor = params.lookFactor || CAMERA_LOOK_DEFAULT_FACTOR;
camera.lookUp(currentPosition.longitude * (lookFactor * -1));
},
/**
* Changes the camera to look down, accepts a numeric parameter named `lookFactor` that controls
* the factor of looking, according to the camera current position.
*/
[KeyboardAction.CAMERA_LOOK_DOWN]: (cesiumService, params) => {
const camera = cesiumService.getViewer().camera;
const currentPosition = camera.positionCartographic;
const lookFactor = params.lookFactor || CAMERA_LOOK_DEFAULT_FACTOR;
camera.lookDown(currentPosition.longitude * (lookFactor * -1));
},
/**
* Twists the camera to the right, accepts a numeric parameter named `amount` that controls
* the twist amount
*/
[KeyboardAction.CAMERA_TWIST_RIGHT]: (cesiumService, params) => {
const camera = cesiumService.getViewer().camera;
const lookFactor = params.amount || CAMERA_TWIST_DEFAULT_FACTOR;
camera.twistRight(lookFactor);
},
/**
* Twists the camera to the left, accepts a numeric parameter named `amount` that controls
* the twist amount
*/
[KeyboardAction.CAMERA_TWIST_LEFT]: (cesiumService, params) => {
const camera = cesiumService.getViewer().camera;
const lookFactor = params.amount || CAMERA_TWIST_DEFAULT_FACTOR;
camera.twistLeft(lookFactor);
},
/**
* Rotates the camera to the right, accepts a numeric parameter named `angle` that controls
* the rotation angle
*/
[KeyboardAction.CAMERA_ROTATE_RIGHT]: (cesiumService, params) => {
const camera = cesiumService.getViewer().camera;
const lookFactor = params.angle || CAMERA_ROTATE_DEFAULT_FACTOR;
camera.rotateRight(lookFactor);
},
/**
* Rotates the camera to the left, accepts a numeric parameter named `angle` that controls
* the rotation angle
*/
[KeyboardAction.CAMERA_ROTATE_LEFT]: (cesiumService, params) => {
const camera = cesiumService.getViewer().camera;
const lookFactor = params.angle || CAMERA_ROTATE_DEFAULT_FACTOR;
camera.rotateLeft(lookFactor);
},
/**
* Rotates the camera upwards, accepts a numeric parameter named `angle` that controls
* the rotation angle
*/
[KeyboardAction.CAMERA_ROTATE_UP]: (cesiumService, params) => {
const camera = cesiumService.getViewer().camera;
const lookFactor = params.angle || CAMERA_ROTATE_DEFAULT_FACTOR;
camera.rotateUp(lookFactor);
},
/**
* Rotates the camera downwards, accepts a numeric parameter named `angle` that controls
* the rotation angle
*/
[KeyboardAction.CAMERA_ROTATE_DOWN]: (cesiumService, params) => {
const camera = cesiumService.getViewer().camera;
const lookFactor = params.angle || CAMERA_ROTATE_DEFAULT_FACTOR;
camera.rotateDown(lookFactor);
},
/**
* Zoom in into the current camera center position, accepts a numeric parameter named
* `amount` that controls the amount of zoom in meters.
*/
[KeyboardAction.CAMERA_ZOOM_IN]: (cesiumService, params) => {
const camera = cesiumService.getViewer().camera;
const amount = params.amount;
camera.zoomIn(amount);
},
/**
* Zoom out from the current camera center position, accepts a numeric parameter named
* `amount` that controls the amount of zoom in meters.
*/
[KeyboardAction.CAMERA_ZOOM_OUT]: (cesiumService, params) => {
const camera = cesiumService.getViewer().camera;
const amount = params.amount;
camera.zoomOut(amount);
},
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZGVmaW5lZC1hY3Rpb25zLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1jZXNpdW0vIiwic291cmNlcyI6WyJsaWIvYW5ndWxhci1jZXNpdW0vc2VydmljZXMva2V5Ym9hcmQtY29udHJvbC9wcmVkZWZpbmVkLWFjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBSXRFLE1BQU0sOEJBQThCLEdBQUcsS0FBSyxDQUFDO0FBQzdDLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLE1BQU0sMkJBQTJCLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSxDQUFDO0FBRTFDLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUErQztJQUNyRjs7O09BR0c7SUFDSCxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLGFBQTRCLEVBQUUsTUFBVyxFQUFFLEVBQUU7UUFDN0UsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUNoRCxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdkMsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUMzRixNQUFNLFFBQVEsR0FBRyxZQUFZLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLDhCQUE4QixDQUFDLENBQUM7UUFDcEYsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxhQUE0QixFQUFFLE1BQVcsRUFBRSxFQUFFO1FBQzlFLE1BQU0sTUFBTSxHQUFHLGFBQWEs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LENBQUMsTUFBTSxDQUFDO1FBQ2hELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLElBQUksNEJBQTRCLENBQUM7UUFDaEUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxhQUE0QixFQUFFLE1BQVcsRUFBRSxFQUFFO1FBQzdFLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDaEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM3QixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFDRDs7O09BR0c7SUFDSCxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLGFBQTRCLEVBQUUsTUFBVyxFQUFFLEVBQUU7UUFDOUUsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUNoRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekIsQ0FBQztDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBLZXlib2FyZEFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9hYy1rZXlib2FyZC1hY3Rpb24uZW51bSc7XG5pbXBvcnQgeyBLZXlib2FyZENvbnRyb2xBY3Rpb25GbiB9IGZyb20gJy4va2V5Ym9hcmQtY29udHJvbC5zZXJ2aWNlJztcbmltcG9ydCB7IENlc2l1bVNlcnZpY2UgfSBmcm9tICcuLi9jZXNpdW0vY2VzaXVtLnNlcnZpY2UnO1xuXG5jb25zdCBDQU1FUkFfTU9WRU1FTlRfREVGQVVMVF9GQUNUT1IgPSAxMDAuMDtcbmNvbnN0IENBTUVSQV9MT09LX0RFRkFVTFRfRkFDVE9SID0gMC4wMTtcbmNvbnN0IENBTUVSQV9UV0lTVF9ERUZBVUxUX0ZBQ1RPUiA9IDAuMDE7XG5jb25zdCBDQU1FUkFfUk9UQVRFX0RFRkFVTFRfRkFDVE9SID0gMC4wMTtcblxuZXhwb3J0IGNvbnN0IFBSRURFRklORURfS0VZQk9BUkRfQUNUSU9OUzogeyBba2V5OiBudW1iZXJdOiBLZXlib2FyZENvbnRyb2xBY3Rpb25GbiB9ID0ge1xuICAvKipcbiAgICogTW92ZXMgdGhlIGNhbWVyYSBmb3J3YXJkLCBhY2NlcHRzIGEgbnVtZXJpYyBwYXJhbWV0ZXIgbmFtZWQgYG1vdmVSYXRlYCB0aGF0IGNvbnRyb2xzXG4gICAqIHRoZSBmYWN0b3Igb2YgbW92ZW1lbnQsIGFjY29yZGluZyB0byB0aGUgY2FtZXJhIGhlaWdodC5cbiAgICovXG4gIFtLZXlib2FyZEFjdGlvbi5DQU1FUkFfRk9SV0FSRF06IChjZXNpdW1TZXJ2aWNlOiBDZXNpdW1TZXJ2aWNlLCBwYXJhbXM6IGFueSkgPT4ge1xuICAgIGNvbnN0IGNhbWVyYSA9IGNlc2l1bVNlcnZpY2UuZ2V0Vmlld2VyKCkuY2FtZXJhO1xuICAgIGNvbnN0IHNjZW5lID0gY2VzaXVtU2VydmljZS5nZXRTY2VuZSgpO1xuICAgIGNvbnN0IGNhbWVyYUhlaWdodCA9IHNjZW5lLmdsb2JlLmVsbGlwc29pZC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhjYW1lcmEucG9zaXRpb24pLmhlaWdodDtcbiAgICBjb25zdCBtb3ZlUmF0ZSA9IGNhbWVyYUhlaWdodCAvIChwYXJhbXMubW92ZVJhdGUgfHwgQ0FNRVJBX01PVkVNRU5UX0RFRkFVTFRfRkFDVE9SKTtcbiAgICBjYW1lcmEubW92ZUZvcndhcmQobW92ZVJhdGUpO1xuICB9LFxuICAvKipcbiAgICogTW92ZXMgdGhlIGNhbWVyYSBiYWNrd2FyZCwgYWNjZXB0cyBhIG51bWVyaWMgcGFyYW1ldGVyIG5hbWVkIGBtb3ZlUmF0ZWAgdGhhdCBjb250cm9sc1xuICAgKiB0aGUgZmFjdG9yIG9mIG1vdmVtZW50LCBhY2NvcmRpbmcgdG8gdGhlIGNhbWVyYSBoZWlnaHQuXG4gICAqL1xuICBbS2V5Ym9hcmRBY3Rpb24uQ0FNRVJBX0JBQ0tXQVJEXTogKGNlc2l1bVNlcnZpY2U6IENlc2l1bVNlcnZpY2UsIHBhcmFtczogYW55KSA9PiB7XG4gICAgY29uc3QgY2FtZXJhID0gY2VzaXVtU2VydmljZS5nZXRWaWV3ZXIoKS5jYW1lcmE7XG4gICAgY29uc3Qgc2NlbmUgPSBjZXNpdW1TZXJ2aWNlLmdldFNjZW5lKCk7XG4gICAgY29uc3QgY2FtZXJhSGVpZ2h0ID0gc2NlbmUuZ2xvYmUuZWxsaXBzb2lkLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGNhbWVyYS5wb3NpdGlvbikuaGVpZ2h0O1xuICAgIGNvbnN0IG1vdmVSYXRlID0gY2FtZXJhSGVpZ2h0IC8gKHBhcmFtcy5tb3ZlUmF0ZSB8fCBDQU1FUkFfTU9WRU1FTlRfREVGQVVMVF9GQUNUT1IpO1xuICAgIGNhbWVyYS5tb3ZlQmFja3dhcmQobW92ZVJhdGUpO1xuICB9LFxuICAvKipcbiAgICogTW92ZXMgdGhlIGNhbWVyYSB1cCwgYWNjZXB0cyBhIG51bWVyaWMgcGFyYW1ldGVyIG5hbWVkIGBtb3ZlUmF0ZWAgdGhhdCBjb250cm9sc1xuICAgKiB0aGUgZmFjdG9yIG9mIG1vdmVtZW50LCBhY2NvcmRpbmcgdG8gdGhlIGNhbWVyYSBoZWlnaHQuXG4gICAqL1xuICBbS2V5Ym9hcmRBY3Rpb24uQ0FNRVJBX1VQXTogKGNlc2l1bVNlcnZpY2U6IENlc2l1bVNlcnZpY2UsIHBhcmFtczogYW55KSA9PiB7XG4gICAgY29uc3QgY2FtZXJhID0gY2VzaXVtU2VydmljZS5nZXRWaWV3ZXIoKS5jYW1lcmE7XG4gICAgY29uc3Qgc2NlbmUgPSBjZXNpdW1TZXJ2aWNlLmdldFNjZW5lKCk7XG4gICAgY29uc3QgY2FtZXJhSGVpZ2h0ID0gc2NlbmUuZ2xvYmUuZWxsaXBzb2lkLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGNhbWVyYS5wb3NpdGlvbikuaGVpZ2h0O1xuICAgIGNvbnN0IG1vdmVSYXRlID0gY2FtZXJhSGVpZ2h0IC8gKHBhcmFtcy5tb3ZlUmF0ZSB8fCBDQU1FUkFfTU9WRU1FTlRfREVGQVVMVF9GQUNUT1IpO1xuICAgIGNhbWVyYS5tb3ZlVXAobW92ZVJhdGUpO1xuICB9LFxuICAvKipcbiAgICogTW92ZXMgdGhlIGNhbWVyYSBkb3duLCBhY2NlcHRzIGEgbnVtZXJpYyBwYXJhbWV0ZXIgbmFtZWQgYG1vdmVSYXRlYCB0aGF0IGNvbnRyb2xzXG4gICAqIHRoZSBmYWN0b3Igb2YgbW92ZW1lbnQsIGFjY29yZGluZyB0byB0aGUgY2FtZXJhIGhlaWdodC5cbiAgICovXG4gIFtLZXlib2FyZEFjdGlvbi5DQU1FUkFfRE9XTl06IChjZXNpdW1TZXJ2aWNlOiBDZXNpdW1TZXJ2aWNlLCBwYXJhbXM6IGFueSkgPT4ge1xuICAgIGNvbnN0IGNhbWVyYSA9IGNlc2l1bVNlcnZpY2UuZ2V0Vmlld2VyKCkuY2FtZXJhO1xuICAgIGNvbnN0IHNjZW5lID0gY2VzaXVtU2VydmljZS5nZXRTY2VuZSgpO1xuICAgIGNvbnN0IGNhbWVyYUhlaWdodCA9IHNjZW5lLmdsb2JlLmVsbGlwc29pZC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhjYW1lcmEucG9zaXRpb24pLmhlaWdodDtcbiAgICBjb25zdCBtb3ZlUmF0ZSA9IGNhbWVyYUhlaWdodCAvIChwYXJhbXMubW92ZVJhdGUgfHwgQ0FNRVJBX01PVkVNRU5UX0RFRkFVTFRfRkFDVE9SKTtcbiAgICBjYW1lcmEubW92ZURvd24obW92ZVJhdGUpO1xuICB9LFxuICAvKipcbiAgICogTW92ZXMgdGhlIGNhbWVyYSByaWdodCwgYWNjZXB0cyBhIG51bWVyaWMgcGFyYW1ldGVyIG5hbWVkIGBtb3ZlUmF0ZWAgdGhhdCBjb250cm9sc1xuICAgKiB0aGUgZmFjdG9yIG9mIG1vdmVtZW50LCBhY2NvcmRpbmcgdG8gdGhlIGNhbWVyYSBoZWlnaHQuXG4gICAqL1xuICBbS2V5Ym9hcmRBY3Rpb24uQ0FNRVJBX1JJR0hUXTogKGNlc2l1bVNlcnZpY2U6IENlc2l1bVNlcnZpY2UsIHBhcmFtczogYW55KSA9PiB7XG4gICAgY29uc3QgY2FtZXJhID0gY2VzaXVtU2VydmljZS5nZXRWaWV3ZXIoKS5jYW1lcmE7XG4gICAgY29uc3Qgc2NlbmUgPSBjZXNpdW1TZXJ2aWNlLmdldFNjZW5lKCk7XG4gICAgY29uc3QgY2FtZXJhSGVpZ2h0ID0gc2NlbmUuZ2xvYmUuZWxsaXBzb2lkLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGNhbWVyYS5wb3NpdGlvbikuaGVpZ2h0O1xuICAgIGNvbnN0IG1vdmVSYXRlID0gY2FtZXJhSGVpZ2h0IC8gKHBhcmFtcy5tb3ZlUmF0ZSB8fCBDQU1FUkFfTU9WRU1FTlRfREVGQVVMVF9GQUNUT1IpO1xuICAgIGNhbWVyYS5tb3ZlUmlnaHQobW92ZVJhdGUpO1xuICB9LFxuICAvKipcbiAgICogTW92ZXMgdGhlIGNhbWVyYSBsZWZ0LCBhY2NlcHRzIGEgbnVtZXJpYyBwYXJhbWV0ZXIgbmFtZWQgYG1vdmVSYXRlYCB0aGF0IGNvbnRyb2xzXG4gICAqIHRoZSBmYWN0b3Igb2YgbW92ZW1lbnQsIGFjY29yZGluZyB0byB0aGUgY2FtZXJhIGhlaWdodC5cbiAgICovXG4gIFtLZXlib2FyZEFjdGlvbi5DQU1FUkFfTEVGVF06IChjZXNpdW1TZXJ2aWNlOiBDZXNpdW1TZXJ2aWNlLCBwYXJhbXM6IGFueSkgPT4ge1xuICAgIGNvbnN0IGNhbWVyYSA9IGNlc2l1bVNlcnZpY2UuZ2V0Vmlld2VyKCkuY2FtZXJhO1xuICAgIGNvbnN0IHNjZW5lID0gY2VzaXVtU2VydmljZS5nZXRTY2VuZSgpO1xuICAgIGNvbnN0IGNhbWVyYUhlaWdodCA9IHNjZW5lLmdsb2JlLmVsbGlwc29pZC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhjYW1lcmEucG9zaXRpb24pLmhlaWdodDtcbiAgICBjb25zdCBtb3ZlUmF0ZSA9IGNhbWVyYUhlaWdodCAvIChwYXJhbXMubW92ZVJhdGUgfHwgQ0FNRVJBX01PVkVNRU5UX0RFRkFVTFRfRkFDVE9SKTtcbiAgICBjYW1lcmEubW92ZUxlZnQobW92ZVJhdGUpO1xuICB9LFxuICAvKipcbiAgICogQ2hhbmdlcyB0aGUgY2FtZXJhIHRvIGxvb2sgdG8gdGhlIHJpZ2h0LCBhY2NlcHRzIGEgbnVtZXJpYyBwYXJhbWV0ZXIgbmFtZWQgYGxvb2tGYWN0b3JgIHRoYXQgY29udHJvbHNcbiAgICogdGhlIGZhY3RvciBvZiBsb29raW5nLCBhY2NvcmRpbmcgdG8gdGhlIGNhbWVyYSBjdXJyZW50IHBvc2l0aW9uLlxuICAgKi9cbiAgW0tleWJvYXJkQWN0aW9uLkNBTUVSQV9MT09LX1JJR0hUXTogKGNlc2l1bVNlcnZpY2U6IENlc2l1bVNlcnZpY2UsIHBhcmFtczogYW55KSA9PiB7XG4gICAgY29uc3QgY2FtZXJhID0gY2VzaXVtU2VydmljZS5nZXRWaWV3ZXIoKS5jYW1lcmE7XG4gICAgY29uc3QgY3VycmVudFBvc2l0aW9uID0gY2FtZXJhLnBvc2l0aW9uQ2FydG9ncmFwaGljO1xuICAgIGNvbnN0IGxvb2tGYWN0b3IgPSBwYXJhbXMubG9va0ZhY3RvciB8fCBDQU1FUkFfTE9PS19ERUZBVUxUX0ZBQ1RPUjtcbiAgICBjYW1lcmEubG9va1JpZ2h0KGN1cnJlbnRQb3NpdGlvbi5sYXRpdHVkZSAqIGxvb2tGYWN0b3IpO1xuICB9LFxuICAvKipcbiAgICogQ2hhbmdlcyB0aGUgY2FtZXJhIHRvIGxvb2sgdG8gdGhlIGxlZnQsIGFjY2VwdHMgYSBudW1lcmljIHBhcmFtZXRlciBuYW1lZCBgbG9va0ZhY3RvcmAgdGhhdCBjb250cm9sc1xuICAgKiB0aGUgZmFjdG9yIG9mIGxvb2tpbmcsIGFjY29yZGluZyB0byB0aGUgY2FtZXJhIGN1cnJlbnQgcG9zaXRpb24uXG4gICAqL1xuICBbS2V5Ym9hcmRBY3Rpb24uQ0FNRVJBX0xPT0tfTEVGVF06IChjZXNpdW1TZXJ2aWNlOiBDZXNpdW1TZXJ2aWNlLCBwYXJhbXM6IGFueSkgPT4ge1xuICAgIGNvbnN0IGNhbWVyYSA9IGNlc2l1bVNlcnZpY2UuZ2V0Vmlld2VyKCkuY2FtZXJhO1xuICAgIGNvbnN0IGN1cnJlbnRQb3NpdGlvbiA9IGNhbWVyYS5wb3NpdGlvbkNhcnRvZ3JhcGhpYztcbiAgICBjb25zdCBsb29rRmFjdG9yID0gcGFyYW1zLmxvb2tGYWN0b3IgfHwgQ0FNRVJBX0xPT0tfREVGQVVMVF9GQUNUT1I7XG4gICAgY2FtZXJhLmxvb2tMZWZ0KGN1cnJlbnRQb3NpdGlvbi5sYXRpdHVkZSAqIGxvb2tGYWN0b3IpO1xuICB9LFxuICAvKipcbiAgICogQ2hhbmdlcyB0aGUgY2FtZXJhIHRvIGxvb2sgdXAsIGFjY2VwdHMgYSBudW1lcmljIHBhcmFtZXRlciBuYW1lZCBgbG9va0ZhY3RvcmAgdGhhdCBjb250cm9sc1xuICAgKiB0aGUgZmFjdG9yIG9mIGxvb2tpbmcsIGFjY29yZGluZyB0byB0aGUgY2FtZXJhIGN1cnJlbnQgcG9zaXRpb24uXG4gICAqL1xuICBbS2V5Ym9hcmRBY3Rpb24uQ0FNRVJBX0xPT0tfVVBdOiAoY2VzaXVtU2VydmljZTogQ2VzaXVtU2VydmljZSwgcGFyYW1zOiBhbnkpID0+IHtcbiAgICBjb25zdCBjYW1lcmEgPSBjZXNpdW1TZXJ2aWNlLmdldFZpZXdlcigpLmNhbWVyYTtcbiAgICBjb25zdCBjdXJyZW50UG9zaXRpb24gPSBjYW1lcmEucG9zaXRpb25DYXJ0b2dyYXBoaWM7XG4gICAgY29uc3QgbG9va0ZhY3RvciA9IHBhcmFtcy5sb29rRmFjdG9yIHx8IENBTUVSQV9MT09LX0RFRkFVTFRfRkFDVE9SO1xuICAgIGNhbWVyYS5sb29rVXAoY3VycmVudFBvc2l0aW9uLmxvbmdpdHVkZSAqIChsb29rRmFjdG9yICogLTEpKTtcbiAgfSxcbiAgLyoqXG4gICAqIENoYW5nZXMgdGhlIGNhbWVyYSB0byBsb29rIGRvd24sIGFjY2VwdHMgYSBudW1lcmljIHBhcmFtZXRlciBuYW1lZCBgbG9va0ZhY3RvcmAgdGhhdCBjb250cm9sc1xuICAgKiB0aGUgZmFjdG9yIG9mIGxvb2tpbmcsIGFjY29yZGluZyB0byB0aGUgY2FtZXJhIGN1cnJlbnQgcG9zaXRpb24uXG4gICAqL1xuICBbS2V5Ym9hcmRBY3Rpb24uQ0FNRVJBX0xPT0tfRE9XTl06IChjZXNpdW1TZXJ2aWNlOiBDZXNpdW1TZXJ2aWNlLCBwYXJhbXM6IGFueSkgPT4ge1xuICAgIGNvbnN0IGNhbWVyYSA9IGNlc2l1bVNlcnZpY2UuZ2V0Vmlld2VyKCkuY2FtZXJhO1xuICAgIGNvbnN0IGN1cnJlbnRQb3NpdGlvbiA9IGNhbWVyYS5wb3NpdGlvbkNhcnRvZ3JhcGhpYztcbiAgICBjb25zdCBsb29rRmFjdG9yID0gcGFyYW1zLmxvb2tGYWN0b3IgfHwgQ0FNRVJBX0xPT0tfREVGQVVMVF9GQUNUT1I7XG4gICAgY2FtZXJhLmxvb2tEb3duKGN1cnJlbnRQb3NpdGlvbi5sb25naXR1ZGUgKiAobG9va0ZhY3RvciAqIC0xKSk7XG4gIH0sXG4gIC8qKlxuICAgKiBUd2lzdHMgdGhlIGNhbWVyYSB0byB0aGUgcmlnaHQsIGFjY2VwdHMgYSBudW1lcmljIHBhcmFtZXRlciBuYW1lZCBgYW1vdW50YCB0aGF0IGNvbnRyb2xzXG4gICAqIHRoZSB0d2lzdCBhbW91bnRcbiAgICovXG4gIFtLZXlib2FyZEFjdGlvbi5DQU1FUkFfVFdJU1RfUklHSFRdOiAoY2VzaXVtU2VydmljZTogQ2VzaXVtU2VydmljZSwgcGFyYW1zOiBhbnkpID0+IHtcbiAgICBjb25zdCBjYW1lcmEgPSBjZXNpdW1TZXJ2aWNlLmdldFZpZXdlcigpLmNhbWVyYTtcbiAgICBjb25zdCBsb29rRmFjdG9yID0gcGFyYW1zLmFtb3VudCB8fCBDQU1FUkFfVFdJU1RfREVGQVVMVF9GQUNUT1I7XG4gICAgY2FtZXJhLnR3aXN0UmlnaHQobG9va0ZhY3Rvcik7XG4gIH0sXG4gIC8qKlxuICAgKiBUd2lzdHMgdGhlIGNhbWVyYSB0byB0aGUgbGVmdCwgYWNjZXB0cyBhIG51bWVyaWMgcGFyYW1ldGVyIG5hbWVkIGBhbW91bnRgIHRoYXQgY29udHJvbHNcbiAgICogdGhlIHR3aXN0IGFtb3VudFxuICAgKi9cbiAgW0tleWJvYXJkQWN0aW9uLkNBTUVSQV9UV0lTVF9MRUZUXTogKGNlc2l1bVNlcnZpY2U6IENlc2l1bVNlcnZpY2UsIHBhcmFtczogYW55KSA9PiB7XG4gICAgY29uc3QgY2FtZXJhID0gY2VzaXVtU2VydmljZS5nZXRWaWV3ZXIoKS5jYW1lcmE7XG4gICAgY29uc3QgbG9va0ZhY3RvciA9IHBhcmFtcy5hbW91bnQgfHwgQ0FNRVJBX1RXSVNUX0RFRkFVTFRfRkFDVE9SO1xuICAgIGNhbWVyYS50d2lzdExlZnQobG9va0ZhY3Rvcik7XG4gIH0sXG4gIC8qKlxuICAgKiBSb3RhdGVzIHRoZSBjYW1lcmEgdG8gdGhlIHJpZ2h0LCBhY2NlcHRzIGEgbnVtZXJpYyBwYXJhbWV0ZXIgbmFtZWQgYGFuZ2xlYCB0aGF0IGNvbnRyb2xzXG4gICAqIHRoZSByb3RhdGlvbiBhbmdsZVxuICAgKi9cbiAgW0tleWJvYXJkQWN0aW9uLkNBTUVSQV9ST1RBVEVfUklHSFRdOiAoY2VzaXVtU2VydmljZTogQ2VzaXVtU2VydmljZSwgcGFyYW1zOiBhbnkpID0+IHtcbiAgICBjb25zdCBjYW1lcmEgPSBjZXNpdW1TZXJ2aWNlLmdldFZpZXdlcigpLmNhbWVyYTtcbiAgICBjb25zdCBsb29rRmFjdG9yID0gcGFyYW1zLmFuZ2xlIHx8IENBTUVSQV9ST1RBVEVfREVGQVVMVF9GQUNUT1I7XG4gICAgY2FtZXJhLnJvdGF0ZVJpZ2h0KGxvb2tGYWN0b3IpO1xuICB9LFxuICAvKipcbiAgICogUm90YXRlcyB0aGUgY2FtZXJhIHRvIHRoZSBsZWZ0LCBhY2NlcHRzIGEgbnVtZXJpYyBwYXJhbWV0ZXIgbmFtZWQgYGFuZ2xlYCB0aGF0IGNvbnRyb2xzXG4gICAqIHRoZSByb3RhdGlvbiBhbmdsZVxuICAgKi9cbiAgW0tleWJvYXJkQWN0aW9uLkNBTUVSQV9ST1RBVEVfTEVGVF06IChjZXNpdW1TZXJ2aWNlOiBDZXNpdW1TZXJ2aWNlLCBwYXJhbXM6IGFueSkgPT4ge1xuICAgIGNvbnN0IGNhbWVyYSA9IGNlc2l1bVNlcnZpY2UuZ2V0Vmlld2VyKCkuY2FtZXJhO1xuICAgIGNvbnN0IGxvb2tGYWN0b3IgPSBwYXJhbXMuYW5nbGUgfHwgQ0FNRVJBX1JPVEFURV9ERUZBVUxUX0ZBQ1RPUjtcbiAgICBjYW1lcmEucm90YXRlTGVmdChsb29rRmFjdG9yKTtcbiAgfSxcbiAgLyoqXG4gICAqIFJvdGF0ZXMgdGhlIGNhbWVyYSB1cHdhcmRzLCBhY2NlcHRzIGEgbnVtZXJpYyBwYXJhbWV0ZXIgbmFtZWQgYGFuZ2xlYCB0aGF0IGNvbnRyb2xzXG4gICAqIHRoZSByb3RhdGlvbiBhbmdsZVxuICAgKi9cbiAgW0tleWJvYXJkQWN0aW9uLkNBTUVSQV9ST1RBVEVfVVBdOiAoY2VzaXVtU2VydmljZTogQ2VzaXVtU2VydmljZSwgcGFyYW1zOiBhbnkpID0+IHtcbiAgICBjb25zdCBjYW1lcmEgPSBjZXNpdW1TZXJ2aWNlLmdldFZpZXdlcigpLmNhbWVyYTtcbiAgICBjb25zdCBsb29rRmFjdG9yID0gcGFyYW1zLmFuZ2xlIHx8IENBTUVSQV9ST1RBVEVfREVGQVVMVF9GQUNUT1I7XG4gICAgY2FtZXJhLnJvdGF0ZVVwKGxvb2tGYWN0b3IpO1xuICB9LFxuICAvKipcbiAgICogUm90YXRlcyB0aGUgY2FtZXJhIGRvd253YXJkcywgYWNjZXB0cyBhIG51bWVyaWMgcGFyYW1ldGVyIG5hbWVkIGBhbmdsZWAgdGhhdCBjb250cm9sc1xuICAgKiB0aGUgcm90YXRpb24gYW5nbGVcbiAgICovXG4gIFtLZXlib2FyZEFjdGlvbi5DQU1FUkFfUk9UQVRFX0RPV05dOiAoY2VzaXVtU2VydmljZTogQ2VzaXVtU2VydmljZSwgcGFyYW1zOiBhbnkpID0+IHtcbiAgICBjb25zdCBjYW1lcmEgPSBjZXNpdW1TZXJ2aWNlLmdldFZpZXdlcigpLmNhbWVyYTtcbiAgICBjb25zdCBsb29rRmFjdG9yID0gcGFyYW1zLmFuZ2xlIHx8IENBTUVSQV9ST1RBVEVfREVGQVVMVF9GQUNUT1I7XG4gICAgY2FtZXJhLnJvdGF0ZURvd24obG9va0ZhY3Rvcik7XG4gIH0sXG4gIC8qKlxuICAgKiBab29tIGluIGludG8gdGhlIGN1cnJlbnQgY2FtZXJhIGNlbnRlciBwb3NpdGlvbiwgYWNjZXB0cyBhIG51bWVyaWMgcGFyYW1ldGVyIG5hbWVkXG4gICAqIGBhbW91bnRgIHRoYXQgY29udHJvbHMgdGhlIGFtb3VudCBvZiB6b29tIGluIG1ldGVycy5cbiAgICovXG4gIFtLZXlib2FyZEFjdGlvbi5DQU1FUkFfWk9PTV9JTl06IChjZXNpdW1TZXJ2aWNlOiBDZXNpdW1TZXJ2aWNlLCBwYXJhbXM6IGFueSkgPT4ge1xuICAgIGNvbnN0IGNhbWVyYSA9IGNlc2l1bVNlcnZpY2UuZ2V0Vmlld2VyKCkuY2FtZXJhO1xuICAgIGNvbnN0IGFtb3VudCA9IHBhcmFtcy5hbW91bnQ7XG4gICAgY2FtZXJhLnpvb21JbihhbW91bnQpO1xuICB9LFxuICAvKipcbiAgICogWm9vbSBvdXQgZnJvbSB0aGUgY3VycmVudCBjYW1lcmEgY2VudGVyIHBvc2l0aW9uLCBhY2NlcHRzIGEgbnVtZXJpYyBwYXJhbWV0ZXIgbmFtZWRcbiAgICogYGFtb3VudGAgdGhhdCBjb250cm9scyB0aGUgYW1vdW50IG9mIHpvb20gaW4gbWV0ZXJzLlxuICAgKi9cbiAgW0tleWJvYXJkQWN0aW9uLkNBTUVSQV9aT09NX09VVF06IChjZXNpdW1TZXJ2aWNlOiBDZXNpdW1TZXJ2aWNlLCBwYXJhbXM6IGFueSkgPT4ge1xuICAgIGNvbnN0IGNhbWVyYSA9IGNlc2l1bVNlcnZpY2UuZ2V0Vmlld2VyKCkuY2FtZXJhO1xuICAgIGNvbnN0IGFtb3VudCA9IHBhcmFtcy5hbW91bnQ7XG4gICAgY2FtZXJhLnpvb21PdXQoYW1vdW50KTtcbiAgfSxcbn07XG4iXX0=