diff --git a/.eslintrc.json b/.eslintrc.json
index 22b11dc..735af5c 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -59,7 +59,6 @@
         "no-floating-decimal": "off",
         "object-curly-newline": "off",
         "radix": "off",
-        "no-trailing-spaces": "off",
         "no-bitwise": "off",
         "no-multi-assign": "off",
         "no-unreachable": "off",
diff --git a/player/js/animation/AnimationItem.js b/player/js/animation/AnimationItem.js
index 2ae1b76..8c7a961 100644
--- a/player/js/animation/AnimationItem.js
+++ b/player/js/animation/AnimationItem.js
@@ -241,7 +241,7 @@
 };
 
 AnimationItem.prototype.checkLoaded = function () {
-  if (!this.isLoaded 
+  if (!this.isLoaded
         && this.renderer.globalData.fontManager.isLoaded
         && (this.imagePreloader.loaded() || this.renderer.rendererType !== 'canvas')
   ) {
diff --git a/player/js/elements/BaseElement.js b/player/js/elements/BaseElement.js
index 6641389..69b51db 100644
--- a/player/js/elements/BaseElement.js
+++ b/player/js/elements/BaseElement.js
@@ -44,14 +44,14 @@
     this.comp = comp;
     this.data = data;
     this.layerId = createElementID();
-        
+
     // Stretch factor for old animations missing this property.
     if (!this.data.sr) {
       this.data.sr = 1;
     }
     // effects manager
     this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties);
-        
+
   },
   getType: function () {
     return this.type;
diff --git a/player/js/elements/ImageElement.js b/player/js/elements/ImageElement.js
index cbdcba2..7bab892 100644
--- a/player/js/elements/ImageElement.js
+++ b/player/js/elements/ImageElement.js
@@ -15,7 +15,7 @@
   this.innerElem.setAttribute('height', this.assetData.h + 'px');
   this.innerElem.setAttribute('preserveAspectRatio', this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio);
   this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);
-    
+
   this.layerElement.appendChild(this.innerElem);
 };
 
diff --git a/player/js/elements/TextElement.js b/player/js/elements/TextElement.js
index 94e666c..585477a 100644
--- a/player/js/elements/TextElement.js
+++ b/player/js/elements/TextElement.js
@@ -76,5 +76,5 @@
 ITextElement.prototype.emptyProp = new LetterProps();
 
 ITextElement.prototype.destroy = function () {
-    
+
 };
diff --git a/player/js/elements/canvasElements/CVShapeElement.js b/player/js/elements/canvasElements/CVShapeElement.js
index 3bf155d..a4e9c6b 100644
--- a/player/js/elements/canvasElements/CVShapeElement.js
+++ b/player/js/elements/canvasElements/CVShapeElement.js
@@ -94,7 +94,7 @@
 
 CVShapeElement.prototype.createShapeElement = function (data) {
   var elementData = new CVShapeData(this, data, this.stylesList, this.transformsManager);
-    
+
   this.shapes.push(elementData);
   this.addShapeToModifiers(elementData);
   return elementData;
@@ -158,7 +158,7 @@
       } else {
         itemsData[i].style.closed = false;
       }
-            
+
       ownStyles.push(itemsData[i].style);
     } else if (arr[i].ty == 'gr') {
       if (!processedPos) {
@@ -181,7 +181,7 @@
       if (!processedPos) {
         itemsData[i] = this.createShapeElement(arr[i]);
       }
-            
+
     } else if (arr[i].ty == 'tm' || arr[i].ty == 'rd' || arr[i].ty == 'pb') {
       if (!processedPos) {
         modifier = ShapeModifiers.getModifier(arr[i].ty);
@@ -324,7 +324,7 @@
   if (isMain) {
     this.drawLayer();
   }
-    
+
 };
 
 CVShapeElement.prototype.renderStyledShape = function (styledShape, shape) {
@@ -384,9 +384,9 @@
   var styleElem = itemData.style;
 
   if (itemData.c._mdf || this._isFirstFrame) {
-    styleElem.co = 'rgb(' 
-        + bm_floor(itemData.c.v[0]) + ',' 
-        + bm_floor(itemData.c.v[1]) + ',' 
+    styleElem.co = 'rgb('
+        + bm_floor(itemData.c.v[0]) + ','
+        + bm_floor(itemData.c.v[1]) + ','
         + bm_floor(itemData.c.v[2]) + ')';
   }
   if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {
@@ -426,7 +426,7 @@
     styleElem.grd = grd;
   }
   styleElem.coOp = itemData.o.v * groupTransform.opacity;
-    
+
 };
 
 CVShapeElement.prototype.renderStroke = function (styleData, itemData, groupTransform) {
diff --git a/player/js/elements/helpers/FrameElement.js b/player/js/elements/helpers/FrameElement.js
index b6399f4..862cc43 100644
--- a/player/js/elements/helpers/FrameElement.js
+++ b/player/js/elements/helpers/FrameElement.js
@@ -1,5 +1,5 @@
 /**
- * @file 
+ * @file
  * Handles element's layer frame update.
  * Checks layer in point and out point
  *
@@ -9,7 +9,7 @@
 
 FrameElement.prototype = {
   /**
-     * @function 
+     * @function
      * Initializes frame related properties.
      *
      */
@@ -22,14 +22,14 @@
     this._mdf = false;
   },
   /**
-     * @function 
+     * @function
      * Calculates all dynamic values
      *
      * @param {number} num
      * current frame number in Layer's time
      * @param {boolean} isVisible
      * if layers is currently in range
-     * 
+     *
      */
   prepareProperties: function (num, isVisible) {
     var i, len = this.dynamicProperties.length;
diff --git a/player/js/elements/helpers/HierarchyElement.js b/player/js/elements/helpers/HierarchyElement.js
index 079302e..9e51560 100644
--- a/player/js/elements/helpers/HierarchyElement.js
+++ b/player/js/elements/helpers/HierarchyElement.js
@@ -1,5 +1,5 @@
 /**
- * @file 
+ * @file
  * Handles AE's layer parenting property.
  *
  */
@@ -8,7 +8,7 @@
 
 HierarchyElement.prototype = {
   /**
-     * @function 
+     * @function
      * Initializes hierarchy properties
      *
      */
@@ -20,28 +20,28 @@
     this.checkParenting();
   },
   /**
-     * @function 
+     * @function
      * Sets layer's hierarchy.
      * @param {array} hierarch
      * layer's parent list
      *
-     */ 
+     */
   setHierarchy: function (hierarchy) {
     this.hierarchy = hierarchy;
   },
   /**
-     * @function 
+     * @function
      * Sets layer as parent.
      *
-     */ 
+     */
   setAsParent: function () {
     this._isParent = true;
   },
   /**
-     * @function 
+     * @function
      * Searches layer's parenting chain
      *
-     */ 
+     */
   checkParenting: function () {
     if (this.data.parent !== undefined) {
       this.comp.buildElementParenting(this, this.data.parent, []);
diff --git a/player/js/elements/helpers/RenderableElement.js b/player/js/elements/helpers/RenderableElement.js
index 5dc4332..7664566 100644
--- a/player/js/elements/helpers/RenderableElement.js
+++ b/player/js/elements/helpers/RenderableElement.js
@@ -38,12 +38,12 @@
     }
   },
   /**
-     * @function 
+     * @function
      * Initializes frame related properties.
      *
      * @param {number} num
      * current frame number in Layer's time
-     * 
+     *
      */
   checkLayerLimits: function (num) {
     if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) {
diff --git a/player/js/elements/helpers/TransformElement.js b/player/js/elements/helpers/TransformElement.js
index 16075ac..baec89f 100644
--- a/player/js/elements/helpers/TransformElement.js
+++ b/player/js/elements/helpers/TransformElement.js
@@ -36,7 +36,7 @@
           i += 1;
         }
       }
-            
+
       if (this.finalTransform._matMdf) {
         mat = this.finalTransform.mProp.v.props;
         finalMat.cloneFromProps(mat);
diff --git a/player/js/elements/helpers/shapes/SVGGradientFillStyleData.js b/player/js/elements/helpers/shapes/SVGGradientFillStyleData.js
index 1b997b1..c6aca17 100644
--- a/player/js/elements/helpers/shapes/SVGGradientFillStyleData.js
+++ b/player/js/elements/helpers/shapes/SVGGradientFillStyleData.js
@@ -35,7 +35,7 @@
     stops.push(stop);
   }
   pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + locationHref + '#' + gradientId + ')');
-    
+
   this.gf = gfill;
   this.cst = stops;
 };
diff --git a/player/js/elements/helpers/shapes/SVGShapeData.js b/player/js/elements/helpers/shapes/SVGShapeData.js
index c301d31..cf64fea 100644
--- a/player/js/elements/helpers/shapes/SVGShapeData.js
+++ b/player/js/elements/helpers/shapes/SVGShapeData.js
@@ -5,7 +5,7 @@
   this.lStr = '';
   this.sh = shape;
   this.lvl = level;
-  // TODO find if there are some cases where _isAnimated can be false. 
+  // TODO find if there are some cases where _isAnimated can be false.
   // For now, since shapes add up with other shapes. They have to be calculated every time.
   // One way of finding out is checking if all styles associated to this shape depend only of this shape
   this._isAnimated = !!shape.k;
diff --git a/player/js/elements/helpers/shapes/ShapeTransformManager.js b/player/js/elements/helpers/shapes/ShapeTransformManager.js
index 5515a34..7625071 100644
--- a/player/js/elements/helpers/shapes/ShapeTransformManager.js
+++ b/player/js/elements/helpers/shapes/ShapeTransformManager.js
@@ -41,7 +41,7 @@
       }
     }
     sequence._mdf = _mdf;
-        
+
   },
   processSequences: function (isFirstFrame) {
     var i, len = this.sequenceList.length;
diff --git a/player/js/elements/htmlElements/HCameraElement.js b/player/js/elements/htmlElements/HCameraElement.js
index 1b45049..4bf4fe0 100644
--- a/player/js/elements/htmlElements/HCameraElement.js
+++ b/player/js/elements/htmlElements/HCameraElement.js
@@ -29,7 +29,7 @@
   this.mat = new Matrix();
   this._prevMat = new Matrix();
   this._isFirstFrame = true;
-    
+
   // TODO: find a better way to make the HCamera element to be compatible with the LayerInterface and TransformInterface.
   this.finalTransform = {
     mProp: this,
@@ -107,7 +107,7 @@
     this.mat.translate(0, 0, this.pe.v);
 
 
-        
+
 
     var hasMatrixChanged = !this._prevMat.equals(this.mat);
     if ((hasMatrixChanged || this.pe._mdf) && this.comp.threeDElements) {
diff --git a/player/js/elements/htmlElements/HShapeElement.js b/player/js/elements/htmlElements/HShapeElement.js
index 4dadb6a..f23b801 100644
--- a/player/js/elements/htmlElements/HShapeElement.js
+++ b/player/js/elements/htmlElements/HShapeElement.js
@@ -171,8 +171,8 @@
 };
 
 HShapeElement.prototype.currentBoxContains = function (box) {
-  return this.currentBBox.x <= box.x 
-    && this.currentBBox.y <= box.y 
+  return this.currentBBox.x <= box.x
+    && this.currentBBox.y <= box.y
     && this.currentBBox.width + this.currentBBox.x >= box.x + box.width
     && this.currentBBox.height + this.currentBBox.y >= box.y + box.height;
 };
diff --git a/player/js/elements/svgElements/SVGBaseElement.js b/player/js/elements/svgElements/SVGBaseElement.js
index 8848a7e..9cbf738 100644
--- a/player/js/elements/svgElements/SVGBaseElement.js
+++ b/player/js/elements/svgElements/SVGBaseElement.js
@@ -118,7 +118,7 @@
       } else {
         this.layerElement.setAttribute('clip-path', 'url(' + locationHref + '#' + clipId + ')');
       }
-            
+
     }
     if (this.data.bm !== 0) {
       this.setBlendMode();
diff --git a/player/js/elements/svgElements/SVGShapeElement.js b/player/js/elements/svgElements/SVGShapeElement.js
index 85f8026..64f8013 100644
--- a/player/js/elements/svgElements/SVGShapeElement.js
+++ b/player/js/elements/svgElements/SVGShapeElement.js
@@ -87,7 +87,7 @@
       pathElement.setAttribute('mask', 'url(' + locationHref + '#' + elementData.maskId + ')');
     }
   }
-    
+
   if (data.ty === 'st' || data.ty === 'gs') {
     pathElement.setAttribute('stroke-linecap', this.lcEnum[data.lc] || 'round');
     pathElement.setAttribute('stroke-linejoin', this.ljEnum[data.lj] || 'round');
diff --git a/player/js/elements/svgElements/SVGTextElement.js b/player/js/elements/svgElements/SVGTextElement.js
index f1ab4a0..5bfbcc0 100644
--- a/player/js/elements/svgElements/SVGTextElement.js
+++ b/player/js/elements/svgElements/SVGTextElement.js
@@ -90,7 +90,7 @@
       this.textSpans[i] = tSpan;
       yPos += documentData.finalLineHeight;
     }
-        
+
     this.layerElement.appendChild(tElement);
   } else {
     var cachedSpansLength = this.textSpans.length;
@@ -107,7 +107,7 @@
         }
         tSpan.style.display = 'inherit';
       }
-            
+
       matrixHelper.reset();
       matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);
       if (singleShape) {
@@ -148,7 +148,7 @@
     this.textSpans[i].style.display = 'none';
     i += 1;
   }
-    
+
   this._sizeChanged = true;
 };
 
diff --git a/player/js/elements/svgElements/effects/SVGProLevelsFilter.js b/player/js/elements/svgElements/effects/SVGProLevelsFilter.js
index d31b704..9e66b7d 100644
--- a/player/js/elements/svgElements/effects/SVGProLevelsFilter.js
+++ b/player/js/elements/svgElements/effects/SVGProLevelsFilter.js
@@ -3,7 +3,7 @@
   var effectElements = this.filterManager.effectElements;
   var feComponentTransfer = createNS('feComponentTransfer');
   var feFuncR, feFuncG, feFuncB;
-    
+
   if (effectElements[10].p.k || effectElements[10].p.v !== 0 || effectElements[11].p.k || effectElements[11].p.v !== 1 || effectElements[12].p.k || effectElements[12].p.v !== 1 || effectElements[13].p.k || effectElements[13].p.v !== 0 || effectElements[14].p.k || effectElements[14].p.v !== 1) {
     this.feFuncR = this.createFeFunc('feFuncR', feComponentTransfer);
   }
@@ -16,7 +16,7 @@
   if (effectElements[31].p.k || effectElements[31].p.v !== 0 || effectElements[32].p.k || effectElements[32].p.v !== 1 || effectElements[33].p.k || effectElements[33].p.v !== 1 || effectElements[34].p.k || effectElements[34].p.v !== 0 || effectElements[35].p.k || effectElements[35].p.v !== 1) {
     this.feFuncA = this.createFeFunc('feFuncA', feComponentTransfer);
   }
-    
+
   if (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) {
     feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');
     filter.appendChild(feComponentTransfer);
@@ -49,8 +49,8 @@
   var table = Array.call(null, { length: segments });
   var colorValue;
   var pos = 0;
-  var outputDelta = outputWhite - outputBlack; 
-  var inputDelta = inputWhite - inputBlack; 
+  var outputDelta = outputWhite - outputBlack;
+  var inputDelta = inputWhite - inputBlack;
   while (cnt <= 256) {
     perc = cnt / 256;
     if (perc <= min) {
@@ -97,6 +97,6 @@
       val = this.getTableValue(effectElements[31].p.v, effectElements[32].p.v, effectElements[33].p.v, effectElements[34].p.v, effectElements[35].p.v);
       this.feFuncA.setAttribute('tableValues', val);
     }
-        
+
   }
 };
diff --git a/player/js/elements/svgElements/effects/SVGStrokeEffect.js b/player/js/elements/svgElements/effects/SVGStrokeEffect.js
index 698e1ae..52ba7b8 100644
--- a/player/js/elements/svgElements/effects/SVGStrokeEffect.js
+++ b/player/js/elements/svgElements/effects/SVGStrokeEffect.js
@@ -16,7 +16,7 @@
     i = this.filterManager.effectElements[0].p.v - 1;
     len = i + 1;
   }
-  groupPath = createNS('g'); 
+  groupPath = createNS('g');
   groupPath.setAttribute('fill', 'none');
   groupPath.setAttribute('stroke-linecap', 'round');
   groupPath.setAttribute('stroke-dashoffset', 1);
@@ -94,7 +94,7 @@
   if (forceRender || this.filterManager.effectElements[4].p._mdf) {
     this.pathMasker.setAttribute('stroke-width', this.filterManager.effectElements[4].p.v * 2);
   }
-    
+
   if (forceRender || this.filterManager.effectElements[6].p._mdf) {
     this.pathMasker.setAttribute('opacity', this.filterManager.effectElements[6].p.v);
   }
diff --git a/player/js/renderers/HybridRenderer.js b/player/js/renderers/HybridRenderer.js
index e4db86b..aa6c820 100644
--- a/player/js/renderers/HybridRenderer.js
+++ b/player/js/renderers/HybridRenderer.js
@@ -69,7 +69,7 @@
         }
       }
     }
-        
+
   } else {
     this.addTo3dContainer(newDOMElement, pos);
   }
@@ -139,7 +139,7 @@
     perspectiveElem.style.transformOrigin = perspectiveElem.style.mozTransformOrigin = perspectiveElem.style.webkitTransformOrigin = '50% 50%';
     container.style.transform = container.style.webkitTransform = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';
   }
-    
+
   perspectiveElem.appendChild(container);
   // this.resizerElem.appendChild(perspectiveElem);
   var threeDContainerData = {
diff --git a/player/js/utils/FontManager.js b/player/js/utils/FontManager.js
index 1388f96..edd45ed 100644
--- a/player/js/utils/FontManager.js
+++ b/player/js/utils/FontManager.js
@@ -300,7 +300,7 @@
     this.setIsLoadedBinded = this.setIsLoaded.bind(this);
     this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this);
   };
-    // TODO: for now I'm adding these methods to the Class and not the prototype. Think of a better way to implement it. 
+    // TODO: for now I'm adding these methods to the Class and not the prototype. Think of a better way to implement it.
   Font.getCombinedCharacterCodes = getCombinedCharacterCodes;
 
   var fontPrototype = {
diff --git a/player/js/utils/PropertyFactory.js b/player/js/utils/PropertyFactory.js
index fc78696..05b31df 100644
--- a/player/js/utils/PropertyFactory.js
+++ b/player/js/utils/PropertyFactory.js
@@ -112,7 +112,7 @@
           var time = (frameNum - keyTime) / (nextKeyTime - keyTime);
           quaternionToEuler(newValue, slerp(quatStart, quatEnd, time));
         }
-                
+
       } else {
         for (i = 0; i < len; i += 1) {
           if (keyData.h !== 1) {
@@ -205,7 +205,7 @@
     var qz = quat[2];
     var qw = quat[3];
     var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz);
-    var attitude = Math.asin(2 * qx * qy + 2 * qz * qw); 
+    var attitude = Math.asin(2 * qx * qy + 2 * qz * qw);
     var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz);
     out[0] = heading / degToRads;
     out[1] = attitude / degToRads;
diff --git a/player/js/utils/animationFramePolyFill.js b/player/js/utils/animationFramePolyFill.js
index 2a0702b..1196941 100644
--- a/player/js/utils/animationFramePolyFill.js
+++ b/player/js/utils/animationFramePolyFill.js
@@ -15,11 +15,11 @@
       timeToCall);
       lastTime = currTime + timeToCall;
       return id;
-    }; 
+    };
   }
   if (!window.cancelAnimationFrame) {
     window.cancelAnimationFrame = function (id) {
       clearTimeout(id);
-    }; 
+    };
   }
 }());
diff --git a/player/js/utils/expressions/ExpressionManager.js b/player/js/utils/expressions/ExpressionManager.js
index 1295744..45f4173 100644
--- a/player/js/utils/expressions/ExpressionManager.js
+++ b/player/js/utils/expressions/ExpressionManager.js
@@ -55,7 +55,7 @@
       return b;
     }
     if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {
-            
+
       var i = 0, lenA = a.length, lenB = b.length;
       var retArr = [];
       while (i < lenA || i < lenB) {
@@ -513,7 +513,7 @@
             keyTime = data.k[i].t;
           }
         }
-                
+
       }
       var ob = {};
       ob.index = index;
@@ -541,7 +541,7 @@
       return ob;
     }
 
-    function framesToTime(frames, fps) { 
+    function framesToTime(frames, fps) {
       if (!fps) {
         fps = elem.comp.globalData.frameRate;
       }
@@ -632,7 +632,7 @@
                     scale = transform.scale; */
         }
       }
-            
+
       if (elemType === 4 && !content) {
         content = thisLayer('ADBE Root Vectors Group');
       }
diff --git a/player/js/utils/expressions/ExpressionPropertyDecorator.js b/player/js/utils/expressions/ExpressionPropertyDecorator.js
index c0cc5bd..eff4da9 100644
--- a/player/js/utils/expressions/ExpressionPropertyDecorator.js
+++ b/player/js/utils/expressions/ExpressionPropertyDecorator.js
@@ -311,7 +311,7 @@
         lastTime: initialDefaultFrame,
       };
     }
-        
+
     frameNum *= this.elem.globalData.frameRate;
     frameNum -= this.offsetTime;
     if (frameNum !== this._cachingAtTime.lastTime) {
@@ -345,7 +345,7 @@
         } else {
           arr[i] = [vertices[i][0], vertices[i][1]];
         }
-                
+
       }
       return arr;
     },
diff --git a/player/js/utils/expressions/ExpressionTextPropertyDecorator.js b/player/js/utils/expressions/ExpressionTextPropertyDecorator.js
index b293fa6..e74c9a3 100644
--- a/player/js/utils/expressions/ExpressionTextPropertyDecorator.js
+++ b/player/js/utils/expressions/ExpressionTextPropertyDecorator.js
@@ -29,5 +29,5 @@
   };
 
   TextProperty.prototype.searchExpressions = searchExpressions;
-    
+
 }());
diff --git a/player/js/utils/expressions/ExpressionValue.js b/player/js/utils/expressions/ExpressionValue.js
index cf66eb1..15475b2 100644
--- a/player/js/utils/expressions/ExpressionValue.js
+++ b/player/js/utils/expressions/ExpressionValue.js
@@ -29,7 +29,7 @@
     }
     expressionValue.value = arrValue;
   }
-    
+
   expressionValue.numKeys = elementProp.keyframes ? elementProp.keyframes.length : 0;
   expressionValue.key = function (pos) {
     if (!expressionValue.numKeys) {
diff --git a/player/js/utils/expressions/ExpressionValueFactory.js b/player/js/utils/expressions/ExpressionValueFactory.js
index 7c23346..78c97ed 100644
--- a/player/js/utils/expressions/ExpressionValueFactory.js
+++ b/player/js/utils/expressions/ExpressionValueFactory.js
@@ -84,7 +84,7 @@
   function defaultGetter() {
     return defaultUnidimensionalValue;
   }
-    
+
   return function (property) {
     if (!property) {
       return defaultGetter;
diff --git a/player/js/utils/expressions/ShapeInterface.js b/player/js/utils/expressions/ShapeInterface.js
index ea9cd40..d77d77a 100644
--- a/player/js/utils/expressions/ShapeInterface.js
+++ b/player/js/utils/expressions/ShapeInterface.js
@@ -226,7 +226,7 @@
         return interfaceFunction.skewAxis;
       }
     }
-        
+
     var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);
     view.transform.mProps.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));
     view.transform.mProps.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));
@@ -404,7 +404,7 @@
   }
 
   function roundedInterfaceFactory(shape, view, propertyGroup) {
-       
+
     function interfaceFunction(value) {
       if (shape.r.ix === value || value === 'Round Corners 1') {
         return interfaceFunction.radius;
diff --git a/player/js/utils/shapes/RepeaterModifier.js b/player/js/utils/shapes/RepeaterModifier.js
index 24b3a76..c4469b3 100644
--- a/player/js/utils/shapes/RepeaterModifier.js
+++ b/player/js/utils/shapes/RepeaterModifier.js
@@ -96,7 +96,7 @@
           ty: 'gr',
         };
         group.it.push({ a: { a: 0, ix: 1, k: [0, 0] }, nm: 'Transform', o: { a: 0, ix: 7, k: 100 }, p: { a: 0, ix: 2, k: [0, 0] }, r: { a: 1, ix: 6, k: [{ s: 0, e: 0, t: 0 }, { s: 0, e: 0, t: 1 }] }, s: { a: 0, ix: 3, k: [100, 100] }, sa: { a: 0, ix: 5, k: 0 }, sk: { a: 0, ix: 4, k: 0 }, ty: 'tr' });
-                
+
         this.arr.splice(0, 0, group);
         this._groups.splice(0, 0, group);
         this._currentCopies += 1;
@@ -111,7 +111,7 @@
       this.changeGroupRender(this._groups[i].it, renderFlag);
       cont += 1;
     }
-        
+
     this._currentCopies = copies;
     /// /
 
@@ -167,7 +167,7 @@
         this.matrix.transform(rProps[0], rProps[1], rProps[2], rProps[3], rProps[4], rProps[5], rProps[6], rProps[7], rProps[8], rProps[9], rProps[10], rProps[11], rProps[12], rProps[13], rProps[14], rProps[15]);
         this.matrix.transform(sProps[0], sProps[1], sProps[2], sProps[3], sProps[4], sProps[5], sProps[6], sProps[7], sProps[8], sProps[9], sProps[10], sProps[11], sProps[12], sProps[13], sProps[14], sProps[15]);
         this.matrix.transform(pProps[0], pProps[1], pProps[2], pProps[3], pProps[4], pProps[5], pProps[6], pProps[7], pProps[8], pProps[9], pProps[10], pProps[11], pProps[12], pProps[13], pProps[14], pProps[15]);
-                
+
         for (j = 0; j < jLen; j += 1) {
           itemsTransform[j] = this.matrix.props[j];
         }
diff --git a/player/js/utils/shapes/ShapeProperty.js b/player/js/utils/shapes/ShapeProperty.js
index ea32979..dc74f4f 100644
--- a/player/js/utils/shapes/ShapeProperty.js
+++ b/player/js/utils/shapes/ShapeProperty.js
@@ -95,11 +95,11 @@
     }
     var i, len = shape1._length;
     for (i = 0; i < len; i += 1) {
-      if (shape1.v[i][0] !== shape2.v[i][0] 
-            || shape1.v[i][1] !== shape2.v[i][1] 
-            || shape1.o[i][0] !== shape2.o[i][0] 
-            || shape1.o[i][1] !== shape2.o[i][1] 
-            || shape1.i[i][0] !== shape2.i[i][0] 
+      if (shape1.v[i][0] !== shape2.v[i][0]
+            || shape1.v[i][1] !== shape2.v[i][1]
+            || shape1.o[i][0] !== shape2.o[i][0]
+            || shape1.o[i][1] !== shape2.o[i][1]
+            || shape1.i[i][0] !== shape2.i[i][0]
             || shape1.i[i][1] !== shape2.i[i][1]) {
         return false;
       }
diff --git a/player/js/utils/shapes/TrimModifier.js b/player/js/utils/shapes/TrimModifier.js
index e1de1a3..a74613e 100644
--- a/player/js/utils/shapes/TrimModifier.js
+++ b/player/js/utils/shapes/TrimModifier.js
@@ -43,7 +43,7 @@
   for (i = 0; i < len; i += 1) {
     segmentOb = segments[i];
     if (segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength) {
-            
+
     } else {
       var shapeS, shapeE;
       if (segmentOb.s * totalModifierLength <= addedLength) {
@@ -190,10 +190,10 @@
                 this.addPaths(newShapesData, localShapeCollection);
                 newShapesData = this.addShapes(shapeData, segments[1]);
               }
-            } 
+            }
             this.addPaths(newShapesData, localShapeCollection);
           }
-                    
+
         }
         shapeData.shape.paths = localShapeCollection;
       }
diff --git a/player/js/utils/text/TextAnimatorProperty.js b/player/js/utils/text/TextAnimatorProperty.js
index 8dd0a52..4cc438f 100644
--- a/player/js/utils/text/TextAnimatorProperty.js
+++ b/player/js/utils/text/TextAnimatorProperty.js
@@ -470,7 +470,7 @@
               matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]);
             } else {
               matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);
-                        
+
             }
           }
         }
diff --git a/player/js/utils/text/TextSelectorProperty.js b/player/js/utils/text/TextSelectorProperty.js
index 1416265..080e7a3 100644
--- a/player/js/utils/text/TextSelectorProperty.js
+++ b/player/js/utils/text/TextSelectorProperty.js
@@ -144,4 +144,4 @@
   };
 }());
 
-    
+
