diff --git a/package.json b/package.json
index a212ad5..cac1b71 100644
--- a/package.json
+++ b/package.json
@@ -40,6 +40,6 @@
   },
   "license": "MIT",
   "dependencies": {
-    "experimental-pathkit-wasm": "^0.1.5"
+    "experimental-pathkit-wasm": "^0.1.7"
   }
 }
diff --git a/player/js/modules/pathkit.js b/player/js/modules/pathkit.js
index bca6641..266f387 100644
--- a/player/js/modules/pathkit.js
+++ b/player/js/modules/pathkit.js
@@ -18,8 +18,8 @@
 function e(a){d(a.instance)}function g(a){b().then(function(a){return WebAssembly.instantiate(a,h)}).then(a).catch(function(a){c.printErr("failed to asynchronously prepare wasm: "+a);x(a)})}if("object"!==typeof WebAssembly)return c.printErr("no native wasm support detected"),!1;if(!(c.wasmMemory instanceof WebAssembly.Memory))return c.printErr("no native wasm Memory in use"),!1;a.memory=c.wasmMemory;h.global={NaN:NaN,Infinity:Infinity};h["global.Math"]=Math;h.env=a;G++;c.monitorRunDependencies&&c.monitorRunDependencies(G);
 if(c.instantiateWasm)try{return c.instantiateWasm(h,d)}catch(ub){return c.printErr("Module.instantiateWasm callback failed with error: "+ub),!1}c.wasmBinary||"function"!==typeof WebAssembly.instantiateStreaming||Ea(f)||"function"!==typeof fetch?g(e):WebAssembly.instantiateStreaming(fetch(f,{credentials:"same-origin"}),h).then(e).catch(function(a){c.printErr("wasm streaming compile failed: "+a);c.printErr("falling back to ArrayBuffer instantiation");g(e)});return{}}var e="pathkit.wast",f="pathkit.wasm",
 g="pathkit.temp.asm.js";"function"===typeof c.locateFile&&(Ea(e)||(e=c.locateFile(e)),Ea(f)||(f=c.locateFile(f)),Ea(g)||(g=c.locateFile(g)));var h={global:null,env:null,asm2wasm:ea,parent:c},k=null;c.asmPreload=c.asm;var l=c.reallocBuffer;c.reallocBuffer=function(a){if("asmjs"===m)var b=l(a);else a:{var d=c.usingWasm?65536:16777216;0<a%d&&(a+=d-a%d);d=c.buffer.byteLength;if(c.usingWasm)try{b=-1!==c.wasmMemory.grow((a-d)/65536)?c.buffer=c.wasmMemory.buffer:null;break a}catch(B){b=null;break a}b=void 0}return b};
-var m="";c.asm=function(a,b){if(!b.table){a=c.wasmTableSize;void 0===a&&(a=1024);var e=c.wasmMaxTableSize;b.table="object"===typeof WebAssembly&&"function"===typeof WebAssembly.Table?void 0!==e?new WebAssembly.Table({initial:a,maximum:e,element:"anyfunc"}):new WebAssembly.Table({initial:a,element:"anyfunc"}):Array(a);c.wasmTable=b.table}b.memoryBase||(b.memoryBase=c.STATIC_BASE);b.tableBase||(b.tableBase=0);b=d(b);assert(b,"no binaryen method succeeded.");return b}})();na=1024;D=na+29984;
-xa.push({N:function(){Fa()}},{N:function(){Ha()}});c.STATIC_BASE=na;c.STATIC_BUMP=29984;D+=16;var I=0;function J(){I+=4;return A[I-4>>2]}var Ia={};
+var m="";c.asm=function(a,b){if(!b.table){a=c.wasmTableSize;void 0===a&&(a=1024);var e=c.wasmMaxTableSize;b.table="object"===typeof WebAssembly&&"function"===typeof WebAssembly.Table?void 0!==e?new WebAssembly.Table({initial:a,maximum:e,element:"anyfunc"}):new WebAssembly.Table({initial:a,element:"anyfunc"}):Array(a);c.wasmTable=b.table}b.memoryBase||(b.memoryBase=c.STATIC_BASE);b.tableBase||(b.tableBase=0);b=d(b);assert(b,"no binaryen method succeeded.");return b}})();na=1024;D=na+30112;
+xa.push({N:function(){Fa()}},{N:function(){Ha()}});c.STATIC_BASE=na;c.STATIC_BUMP=30112;D+=16;var I=0;function J(){I+=4;return A[I-4>>2]}var Ia={};
 function K(a,b){I=b;try{var d=J(),e=J(),f=J();a=0;K.J||(K.J=[null,[],[]],K.S=function(a,b){var d=K.J[a];assert(d);if(0===b||10===b){a=1===a?c.print:c.printErr;a:{for(var e=b=0;d[e];)++e;if(16<e-b&&d.subarray&&ha)b=ha.decode(d.subarray(b,e));else for(e="";;){var f=d[b++];if(!f){b=e;break a}if(f&128){var g=d[b++]&63;if(192==(f&224))e+=String.fromCharCode((f&31)<<6|g);else{var k=d[b++]&63;if(224==(f&240))f=(f&15)<<12|g<<6|k;else{var h=d[b++]&63;if(240==(f&248))f=(f&7)<<18|g<<12|k<<6|h;else{var l=d[b++]&
 63;if(248==(f&252))f=(f&3)<<24|g<<18|k<<12|h<<6|l;else{var m=d[b++]&63;f=(f&1)<<30|g<<24|k<<18|h<<12|l<<6|m}}}65536>f?e+=String.fromCharCode(f):(f-=65536,e+=String.fromCharCode(55296|f>>10,56320|f&1023))}}else e+=String.fromCharCode(f)}}a(b);d.length=0}else d.push(b)});for(b=0;b<f;b++){for(var g=A[e+8*b>>2],h=A[e+(8*b+4)>>2],k=0;k<h;k++)K.S(d,y[g+k]);a+=h}return a}catch(l){return"undefined"!==typeof FS&&l instanceof FS.I||x(l),-l.L}}var Ja={};
 function Ka(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function L(a){return this.fromWireType(C[a>>2])}var M={},N={},La={};function Ma(a){if(void 0===a)return"_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?"_"+a:a}function Na(a,b){a=Ma(a);return(new Function("body","return function "+a+'() {\n    "use strict";    return body.apply(this, arguments);\n};\n'))(b)}
diff --git a/player/js/modules/pathkit.wasm b/player/js/modules/pathkit.wasm
index f670491..fbde8e9 100644
--- a/player/js/modules/pathkit.wasm
+++ b/player/js/modules/pathkit.wasm
Binary files differ
diff --git a/player/js/utils/shapes/OffsetPathModifier.js b/player/js/utils/shapes/OffsetPathModifier.js
index 4af8deb..44650d4 100644
--- a/player/js/utils/shapes/OffsetPathModifier.js
+++ b/player/js/utils/shapes/OffsetPathModifier.js
@@ -77,12 +77,18 @@
 			shape = shapeData.shape;
 			commands.length = 0;
 			this.addShapeToCommands(shape, shapeData.data.transformers, shapeData.data.lvl, commands);
+			// commands = [[0,50,-50]];
+			// commands.push([1,50,50]);
+			// commands.push([1,-50,50]);
+			// commands.push([1,-50,-50]);
+			// commands.push([5]);
+			console.log(commands)
 			skPath = this.SkPathFromCmdTyped(commands);
 			offsettedSkPath = skPath.stroke(amount * 2, Module.StrokeJoin.MITER, Module.StrokeCap.BUTT);
 			if(commands[commands.length - 1][0] === 5) {
-				// outerSkPath = offsettedSkPath.op(skPath, Module.PathOp.DIFFERENCE); // subtract the original path out
-				// offsettedSkPath.delete();
-				outerSkPath = offsettedSkPath;
+				outerSkPath = offsettedSkPath.op(skPath, Module.PathOp.DIFFERENCE); // subtract the original path out
+				offsettedSkPath.delete();
+				// outerSkPath = offsettedSkPath;
 				// finalSkPath = outerSkPath.simplify();
 				// outerSkPath.delete();
 				finalSkPath = outerSkPath;
@@ -92,6 +98,8 @@
 				// finalSkPath = offsettedSkPath;
 			}
 		  	commands = finalSkPath.toCmds();
+		  	console.log(commands)
+		  	// commands.length = 44;
 			skPath.delete();
 			finalSkPath.delete();
 	        localShapeCollection = shapeData.localShapeCollection;
