<commit_before>function MultitargetFramer(camera, targetPoints, domSize) {
	this.camera = camera;
	this.targetPoints = targetPoints;
	this.domSize = domSize;

	this.targetAverage = new THREE.Vector3();
	this.targetPointsTotal = this.targetPoints.length;

	//
	this.reframeZoomSpeed = .15,
	this.reframeOffsetSpeed = .25,
	this.frameMargin = new THREE.Vector2(.5, .5), 
	
	this._fullFrame = new THREE.Vector2(), 
	this._zoom = 1,
	this._halfFrame = new THREE.Vector2(), 
	this._offset = new THREE.Vector2(), 
	this._topLeft = new THREE.Vector2(), 
	this._size = new THREE.Vector2(),
	this._projector = new THREE.Projector(),
	this._screenspaceBounds = new THREE.Box2(),
	this._screenspaceTargetPoint = new THREE.Vector3(),
	this._screenspaceSize,
	this._screenspaceOffset;
}

MultitargetFramer.prototype = {
	update: function() {
		this.targetAverage.set(0, 0, 0);
		for (var i = this.targetPointsTotal - 1; i >= 0; i--) {
			this.targetAverage.add(this.targetPoints[i]);
		};
		this.targetAverage.multiplyScalar(1 / this.targetPointsTotal);
		this.camera.lookAt(this.targetAverage);

		this._screenspaceBounds.makeEmpty();
		for (var i = this.targetPointsTotal - 1; i >= 0; i--) {
			this._screenspaceTargetPoint.copy(this.targetPoints[i]);
			this._projector.projectVector( this._screenspaceTargetPoint, this.camera );
			this._screenspaceBounds.expandByPoint(this._screenspaceTargetPoint);
		}
		this._screenspaceBounds.expandByVector(this.frameMargin);<commit_msg>upgraded threejs to r69<commit_after>function MultitargetFramer(camera, targetPoints, domSize) {
	this.camera = camera;
	this.targetPoints = targetPoints;
	this.domSize = domSize;

	this.targetAverage = new THREE.Vector3();
	this.targetPointsTotal = this.targetPoints.length;

	//
	this.reframeZoomSpeed = .15,
	this.reframeOffsetSpeed = .25,
	this.frameMargin = new THREE.Vector2(.5, .5), 
	
	this._fullFrame = new THREE.Vector2(), 
	this._zoom = 1,
	this._halfFrame = new THREE.Vector2(), 
	this._offset = new THREE.Vector2(), 
	this._topLeft = new THREE.Vector2(), 
	this._size = new THREE.Vector2(),
	this._screenspaceBounds = new THREE.Box2(),
	this._screenspaceTargetPoint = new THREE.Vector3(),
	this._screenspaceSize,
	this._screenspaceOffset;
}

MultitargetFramer.prototype = {
	update: function() {
		this.targetAverage.set(0, 0, 0);
		for (var i = this.targetPointsTotal - 1; i >= 0; i--) {
			this.targetAverage.add(this.targetPoints[i]);
		};
		this.targetAverage.multiplyScalar(1 / this.targetPointsTotal);
		this.camera.lookAt(this.targetAverage);

		this._screenspaceBounds.makeEmpty();
		for (var i = this.targetPointsTotal - 1; i >= 0; i--) {
			this._screenspaceTargetPoint.copy(this.targetPoints[i]);
			this._screenspaceTargetPoint.project( this.camera );
			this._screenspaceBounds.expandByPoint(this._screenspaceTargetPoint);
		}
		this._screenspaceBounds.expandByVector(this.frameMargin);
{'fraction_non_alphanumeric': 0.13476901701979854, 'fraction_numerical': 0.01736714136853074, 'mean_word_length': 4.748502994011976, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3237210', 'n_tokens_mistral': 1060, 'n_tokens_neox': 965, 'n_words': 166}