// // Copyright 2020 FoxyUtils ehf. All rights reserved. // // This is a commercial product and requires a license to operate. // A trial license can be obtained at https://unidoc.io // // DO NOT EDIT: generated by unitwist Go source code obfuscator. // // Use of this source code is governed by the UniDoc End User License Agreement // terms that can be accessed at https://unidoc.io/eula/ package imagerender ;import (_bg "errors";_f "fmt";_cf "github.com/unidoc/freetype/raster";_db "github.com/unidoc/unipdf/v3/common";_cgc "github.com/unidoc/unipdf/v3/internal/transform";_ca "github.com/unidoc/unipdf/v3/render/internal/context";_e "golang.org/x/image/draw"; _aa "golang.org/x/image/font";_fe "golang.org/x/image/math/f64";_g "golang.org/x/image/math/fixed";_a "image";_cg "image/color";_fc "image/draw";_b "math";_bf "sort";_d "strings";);func (_geg *Context )CubicTo (x1 ,y1 ,x2 ,y2 ,x3 ,y3 float64 ){if !_geg ._ebd {_geg .MoveTo (x1 ,y1 ); };_bcc ,_fga :=_geg ._ecb .X ,_geg ._ecb .Y ;x1 ,y1 =_geg .Transform (x1 ,y1 );x2 ,y2 =_geg .Transform (x2 ,y2 );x3 ,y3 =_geg .Transform (x3 ,y3 );_egc :=_ecf (_bcc ,_fga ,x1 ,y1 ,x2 ,y2 ,x3 ,y3 );_cab :=_gag (_geg ._ecb );for _ ,_gab :=range _egc [1:]{_bfa :=_gag (_gab ); if _bfa ==_cab {continue ;};_cab =_bfa ;_geg ._deb .Add1 (_bfa );_geg ._bef .Add1 (_bfa );_geg ._ecb =_gab ;};};func (_bec *Context )SetDash (dashes ...float64 ){_bec ._ddg =dashes };func (_ccd *Context )DrawEllipse (x ,y ,rx ,ry float64 ){_ccd .NewSubPath (); _ccd .DrawEllipticalArc (x ,y ,rx ,ry ,0,2*_b .Pi );_ccd .ClosePath ();};type linearGradient struct{_gdda ,_geff ,_gfb ,_gda float64 ;_bab stops ;};func (_ddd *Context )Height ()int {return _ddd ._ced };func (_fbc *Context )Identity (){_fbc ._eee =_cgc .IdentityMatrix ()}; func (_beb *Context )Image ()_a .Image {return _beb ._cgf };func (_edgb *Context )Pop (){_edf :=*_edgb ;_gdc :=_edgb ._afb ;_ddab :=_gdc [len (_gdc )-1];*_edgb =*_ddab ;_edgb ._deb =_edf ._deb ;_edgb ._bef =_edf ._bef ;_edgb ._geb =_edf ._geb ;_edgb ._ecb =_edf ._ecb ; _edgb ._ebd =_edf ._ebd ;};func (_daec *linearGradient )AddColorStop (offset float64 ,color _cg .Color ){_daec ._bab =append (_daec ._bab ,stop {_edb :offset ,_faba :color });_bf .Sort (_daec ._bab );};func (_cfe *Context )fill (_afd _cf .Painter ){_ega :=_cfe ._bef ; if _cfe ._ebd {_ega =make (_cf .Path ,len (_cfe ._bef ));copy (_ega ,_cfe ._bef );_ega .Add1 (_gag (_cfe ._geb ));};_gea :=_cfe ._dd ;_gea .UseNonZeroWinding =_cfe ._dbf ==_ca .FillRuleWinding ;_gea .Clear ();_gea .AddPath (_ega );_gea .Rasterize (_afd ); };func (_egb *Context )Clip (){_egb .ClipPreserve ();_egb .ClearPath ()};func _dee (_fca _cf .Path )[][]_cgc .Point {var _cgfgf [][]_cgc .Point ;var _bfde []_cgc .Point ;var _eba ,_bgf float64 ;for _ccag :=0;_ccag < len (_fca );{switch _fca [_ccag ]{case 0:if len (_bfde )> 0{_cgfgf =append (_cgfgf ,_bfde ); _bfde =nil ;};_bagc :=_bfae (_fca [_ccag +1]);_gcde :=_bfae (_fca [_ccag +2]);_bfde =append (_bfde ,_cgc .NewPoint (_bagc ,_gcde ));_eba ,_bgf =_bagc ,_gcde ;_ccag +=4;case 1:_ffbd :=_bfae (_fca [_ccag +1]);_bea :=_bfae (_fca [_ccag +2]);_bfde =append (_bfde ,_cgc .NewPoint (_ffbd ,_bea )); _eba ,_bgf =_ffbd ,_bea ;_ccag +=4;case 2:_dge :=_bfae (_fca [_ccag +1]);_bga :=_bfae (_fca [_ccag +2]);_effe :=_bfae (_fca [_ccag +3]);_efcf :=_bfae (_fca [_ccag +4]);_gde :=_gf (_eba ,_bgf ,_dge ,_bga ,_effe ,_efcf );_bfde =append (_bfde ,_gde ...);_eba ,_bgf =_effe ,_efcf ; _ccag +=6;case 3:_ceec :=_bfae (_fca [_ccag +1]);_feg :=_bfae (_fca [_ccag +2]);_bedf :=_bfae (_fca [_ccag +3]);_aec :=_bfae (_fca [_ccag +4]);_gdeg :=_bfae (_fca [_ccag +5]);_daad :=_bfae (_fca [_ccag +6]);_ebg :=_ecf (_eba ,_bgf ,_ceec ,_feg ,_bedf ,_aec ,_gdeg ,_daad ); _bfde =append (_bfde ,_ebg ...);_eba ,_bgf =_gdeg ,_daad ;_ccag +=8;default:_db .Log .Debug ("\u0057\u0041\u0052\u004e: \u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0070\u0061\u0074\u0068\u003a\u0020%\u0076",_fca );return _cgfgf ;};};if len (_bfde )> 0{_cgfgf =append (_cgfgf ,_bfde ); };return _cgfgf ;};func (_aca *Context )TextState ()*_ca .TextState {return &_aca ._afc };func _ffe (_egbgg *_a .RGBA ,_eegc *_a .Alpha ,_fafda _ca .Pattern )*patternPainter {return &patternPainter {_egbgg ,_eegc ,_fafda };};func _feaa (_abda [][]_cgc .Point )_cf .Path {var _aea _cf .Path ; for _ ,_aac :=range _abda {var _eab _g .Point26_6 ;for _fbfc ,_aace :=range _aac {_dbgg :=_gag (_aace );if _fbfc ==0{_aea .Start (_dbgg );}else {_cda :=_dbgg .X -_eab .X ;_bfaa :=_dbgg .Y -_eab .Y ;if _cda < 0{_cda =-_cda ;};if _bfaa < 0{_bfaa =-_bfaa ; };if _cda +_bfaa > 8{_aea .Add1 (_dbgg );};};_eab =_dbgg ;};};return _aea ;};func (_cbf *Context )capper ()_cf .Capper {switch _cbf ._fgd {case _ca .LineCapButt :return _cf .ButtCapper ;case _ca .LineCapRound :return _cf .RoundCapper ;case _ca .LineCapSquare :return _cf .SquareCapper ; };return nil ;};func (_cfcf *Context )DrawString (s string ,face _aa .Face ,x ,y float64 ){_cfcf .DrawStringAnchored (s ,face ,x ,y ,0,0);};func (_gegc *solidPattern )ColorAt (x ,y int )_cg .Color {return _gegc ._egdbf };func (_gge *Context )StrokePreserve (){var _agc _cf .Painter ; if _gge ._fbeb ==nil {if _fabg ,_gdf :=_gge ._dg .(*solidPattern );_gdf {_dae :=_cf .NewRGBAPainter (_gge ._cgf );_dae .SetColor (_fabg ._egdbf );_agc =_dae ;};};if _agc ==nil {_agc =_ffe (_gge ._cgf ,_gge ._fbeb ,_gge ._dg );};_gge .stroke (_agc );};func (_bbg *Context )RotateAbout (angle ,x ,y float64 ){_bbg .Translate (x ,y ); _bbg .Rotate (angle );_bbg .Translate (-x ,-y );};func (_gdbc *Context )DrawLine (x1 ,y1 ,x2 ,y2 float64 ){_gdbc .MoveTo (x1 ,y1 );_gdbc .LineTo (x2 ,y2 )};var (_fbe =_afdc (_cg .White );_daf =_afdc (_cg .Black ););func (_bggb *Context )LineTo (x ,y float64 ){if !_bggb ._ebd {_bggb .MoveTo (x ,y ); }else {x ,y =_bggb .Transform (x ,y );_fgfb :=_cgc .NewPoint (x ,y );_cgg :=_gag (_fgfb );_bggb ._deb .Add1 (_cgg );_bggb ._bef .Add1 (_cgg );_bggb ._ecb =_fgfb ;};};type circle struct{_bgb ,_fbfg ,_cggc float64 };func (_eae *Context )MoveTo (x ,y float64 ){if _eae ._ebd {_eae ._bef .Add1 (_gag (_eae ._geb )); };x ,y =_eae .Transform (x ,y );_dda :=_cgc .NewPoint (x ,y );_dddc :=_gag (_dda );_eae ._deb .Start (_dddc );_eae ._bef .Start (_dddc );_eae ._geb =_dda ;_eae ._ecb =_dda ;_eae ._ebd =true ;};func (_dfga *Context )Translate (x ,y float64 ){_dfga ._eee =_dfga ._eee .Translate (x ,y )}; func _gf (_ea ,_fba ,_eed ,_ce ,_aaf ,_fdf float64 )[]_cgc .Point {_eb :=(_b .Hypot (_eed -_ea ,_ce -_fba )+_b .Hypot (_aaf -_eed ,_fdf -_ce ));_ebe :=int (_eb +0.5);if _ebe < 4{_ebe =4;};_gfd :=float64 (_ebe )-1;_fcb :=make ([]_cgc .Point ,_ebe );for _ba :=0; _ba < _ebe ;_ba ++{_eca :=float64 (_ba )/_gfd ;_ed ,_cea :=_af (_ea ,_fba ,_eed ,_ce ,_aaf ,_fdf ,_eca );_fcb [_ba ]=_cgc .NewPoint (_ed ,_cea );};return _fcb ;};func (_fab *Context )setFillAndStrokeColor (_fbf _cg .Color ){_fab ._bdb =_fbf ;_fab ._fcd =_afdc (_fbf ); _fab ._dg =_afdc (_fbf );};func (_fad stops )Len ()int {return len (_fad )};func _gag (_afg _cgc .Point )_g .Point26_6 {return _g .Point26_6 {X :_abf (_afg .X ),Y :_abf (_afg .Y )}};func (_ggd *Context )AsMask ()*_a .Alpha {_aad :=_a .NewAlpha (_ggd ._cgf .Bounds ()); _e .Draw (_aad ,_ggd ._cgf .Bounds (),_ggd ._cgf ,_a .Point {},_e .Src );return _aad ;};func (_ffb *Context )LineWidth ()float64 {return _ffb ._dfb };func (_bfge *Context )SetFillStyle (pattern _ca .Pattern ){if _cgd ,_cec :=pattern .(*solidPattern );_cec {_bfge ._bdb =_cgd ._egdbf ; };_bfge ._fcd =pattern ;};func (_acb *Context )Clear (){_dfg :=_a .NewUniform (_acb ._bdb );_e .Draw (_acb ._cgf ,_acb ._cgf .Bounds (),_dfg ,_a .Point {},_e .Src );};func (_cba *Context )DrawImage (im _a .Image ,x ,y int ){_cba .DrawImageAnchored (im ,x ,y ,0,0)}; func (_gdgc *Context )Matrix ()_cgc .Matrix {return _gdgc ._eee };func (_aaef *Context )MeasureString (s string ,face _aa .Face )(_edg ,_adab float64 ){_aabf :=&_aa .Drawer {Face :face };_bfdb :=_aabf .MeasureString (s );return float64 (_bfdb >>6),_aaef ._afc .Tf .Size ; };func (_baa *Context )InvertMask (){if _baa ._fbeb ==nil {_baa ._fbeb =_a .NewAlpha (_baa ._cgf .Bounds ());}else {for _bgeg ,_bgeb :=range _baa ._fbeb .Pix {_baa ._fbeb .Pix [_bgeg ]=255-_bgeb ;};};};func (_dcg *Context )FillPreserve (){var _gef _cf .Painter ; if _dcg ._fbeb ==nil {if _egdb ,_dfe :=_dcg ._fcd .(*solidPattern );_dfe {_bccb :=_cf .NewRGBAPainter (_dcg ._cgf );_bccb .SetColor (_egdb ._egdbf );_gef =_bccb ;};};if _gef ==nil {_gef =_ffe (_dcg ._cgf ,_dcg ._fbeb ,_dcg ._fcd );};_dcg .fill (_gef ); };func _ebba (_ecac ,_cbeb ,_aaba ,_fdg ,_eea ,_aag float64 )float64 {return _ecac *_fdg +_cbeb *_eea +_aaba *_aag ;};func _beaa (_fac string )(_caef ,_acag ,_dcdf ,_bgd int ){_fac =_d .TrimPrefix (_fac ,"\u0023");_bgd =255;if len (_fac )==3{_gaf :="\u00251\u0078\u0025\u0031\u0078\u0025\u0031x"; _f .Sscanf (_fac ,_gaf ,&_caef ,&_acag ,&_dcdf );_caef |=_caef <<4;_acag |=_acag <<4;_dcdf |=_dcdf <<4;};if len (_fac )==6{_cga :="\u0025\u0030\u0032x\u0025\u0030\u0032\u0078\u0025\u0030\u0032\u0078";_f .Sscanf (_fac ,_cga ,&_caef ,&_acag ,&_dcdf );};if len (_fac )==8{_bae :="\u0025\u00302\u0078\u0025\u00302\u0078\u0025\u0030\u0032\u0078\u0025\u0030\u0032\u0078"; _f .Sscanf (_fac ,_bae ,&_caef ,&_acag ,&_dcdf ,&_bgd );};return ;};func (_eadd *radialGradient )ColorAt (x ,y int )_cg .Color {if len (_eadd ._bccf )==0{return _cg .Transparent ;};_acad ,_dcbb :=float64 (x )+0.5-_eadd ._cfa ._bgb ,float64 (y )+0.5-_eadd ._cfa ._fbfg ; _bedc :=_ebba (_acad ,_dcbb ,_eadd ._cfa ._cggc ,_eadd ._fbg ._bgb ,_eadd ._fbg ._fbfg ,_eadd ._fbg ._cggc );_fef :=_ebba (_acad ,_dcbb ,-_eadd ._cfa ._cggc ,_acad ,_dcbb ,_eadd ._cfa ._cggc );if _eadd ._gffe ==0{if _bedc ==0{return _cg .Transparent ;}; _cddd :=0.5*_fef /_bedc ;if _cddd *_eadd ._fbg ._cggc >=_eadd ._gece {return _fbcg (_cddd ,_eadd ._bccf );};return _cg .Transparent ;};_gefd :=_ebba (_bedc ,_eadd ._gffe ,0,_bedc ,-_fef ,0);if _gefd >=0{_dba :=_b .Sqrt (_gefd );_agge :=(_bedc +_dba )*_eadd ._cgfg ; _bdg :=(_bedc -_dba )*_eadd ._cgfg ;if _agge *_eadd ._fbg ._cggc >=_eadd ._gece {return _fbcg (_agge ,_eadd ._bccf );}else if _bdg *_eadd ._fbg ._cggc >=_eadd ._gece {return _fbcg (_bdg ,_eadd ._bccf );};};return _cg .Transparent ;};func _cd (_ff ,_df ,_aff ,_gd ,_agg ,_da ,_gg ,_adc ,_bfg float64 )(_bc ,_fec float64 ){_afff :=1-_bfg ; _ge :=_afff *_afff *_afff ;_fg :=3*_afff *_afff *_bfg ;_fgf :=3*_afff *_bfg *_bfg ;_fa :=_bfg *_bfg *_bfg ;_bc =_ge *_ff +_fg *_aff +_fgf *_agg +_fa *_gg ;_fec =_ge *_df +_fg *_gd +_fgf *_da +_fa *_adc ;return ;};func (_aggc *Context )DrawArc (x ,y ,r ,angle1 ,angle2 float64 ){_aggc .DrawEllipticalArc (x ,y ,r ,r ,angle1 ,angle2 ); };func (_ggc *Context )ClearPath (){_ggc ._deb .Clear ();_ggc ._bef .Clear ();_ggc ._ebd =false };func (_cca *Context )StrokePattern ()_ca .Pattern {return _cca ._dg };func (_gefe *Context )DrawPoint (x ,y ,r float64 ){_gefe .Push ();_fcbc ,_gbf :=_gefe .Transform (x ,y ); _gefe .Identity ();_gefe .DrawCircle (_fcbc ,_gbf ,r );_gefe .Pop ();};func (_dcbd *Context )ScaleAbout (sx ,sy ,x ,y float64 ){_dcbd .Translate (x ,y );_dcbd .Scale (sx ,sy );_dcbd .Translate (-x ,-y );};func (_gdb *Context )SetStrokeRGBA (r ,g ,b ,a float64 ){_dad :=_cg .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)}; _gdb ._dg =_afdc (_dad );};func (_cdg stops )Less (i ,j int )bool {return _cdg [i ]._edb < _cdg [j ]._edb };func _fbcg (_edeg float64 ,_ffg stops )_cg .Color {if _edeg <=0.0||len (_ffg )==1{return _ffg [0]._faba ;};_gcf :=_ffg [len (_ffg )-1];if _edeg >=_gcf ._edb {return _gcf ._faba ; };for _eeg ,_agf :=range _ffg [1:]{if _edeg < _agf ._edb {_edeg =(_edeg -_ffg [_eeg ]._edb )/(_agf ._edb -_ffg [_eeg ]._edb );return _bdgg (_ffg [_eeg ]._faba ,_agf ._faba ,_edeg );};};return _gcf ._faba ;};func _afdc (_dbdb _cg .Color )_ca .Pattern {return &solidPattern {_egdbf :_dbdb }}; func (_cfb *Context )Fill (){_cfb .FillPreserve ();_cfb .ClearPath ()};type patternPainter struct{_dfgab *_a .RGBA ;_dbac *_a .Alpha ;_aade _ca .Pattern ;};func (_bb *Context )SetRGB (r ,g ,b float64 ){_bb .SetRGBA (r ,g ,b ,1)};func _ggca (_dbb [][]_cgc .Point ,_gad []float64 ,_cce float64 )[][]_cgc .Point {var _baga [][]_cgc .Point ; if len (_gad )==0{return _dbb ;};if len (_gad )==1{_gad =append (_gad ,_gad [0]);};for _ ,_gggg :=range _dbb {if len (_gggg )< 2{continue ;};_dbbg :=_gggg [0];_dfa :=1;_cbg :=0;_cecc :=0.0;if _cce !=0{var _fgda float64 ;for _ ,_eag :=range _gad {_fgda +=_eag ; };_cce =_b .Mod (_cce ,_fgda );if _cce < 0{_cce +=_fgda ;};for _acbf ,_dbeb :=range _gad {_cce -=_dbeb ;if _cce < 0{_cbg =_acbf ;_cecc =_dbeb +_cce ;break ;};};};var _bgba []_cgc .Point ;_bgba =append (_bgba ,_dbbg );for _dfa < len (_gggg ){_becgf :=_gad [_cbg ]; _abdbc :=_gggg [_dfa ];_bffg :=_dbbg .Distance (_abdbc );_afdf :=_becgf -_cecc ;if _bffg > _afdf {_ggec :=_afdf /_bffg ;_gcc :=_dbbg .Interpolate (_abdbc ,_ggec );_bgba =append (_bgba ,_gcc );if _cbg %2==0&&len (_bgba )> 1{_baga =append (_baga ,_bgba ); };_bgba =nil ;_bgba =append (_bgba ,_gcc );_cecc =0;_dbbg =_gcc ;_cbg =(_cbg +1)%len (_gad );}else {_bgba =append (_bgba ,_abdbc );_dbbg =_abdbc ;_cecc +=_bffg ;_dfa ++;};};if _cbg %2==0&&len (_bgba )> 1{_baga =append (_baga ,_bgba );};};return _baga ; };func _abf (_adabe float64 )_g .Int26_6 {return _g .Int26_6 (_adabe *64)};func (_ggf *Context )SetFillRule (fillRule _ca .FillRule ){_ggf ._dbf =fillRule };func (_bge *Context )Width ()int {return _bge ._gfdf };func (_ebb *Context )SetDashOffset (offset float64 ){_ebb ._debe =offset }; func (_bgg *Context )SetFillRGBA (r ,g ,b ,a float64 ){_eg :=_cg .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};_bgg ._bdb =_eg ;_bgg ._fcd =_afdc (_eg );};func _af (_ag ,_ef ,_ec ,_ee ,_cb ,_fd ,_dc float64 )(_ab ,_fde float64 ){_ad :=1-_dc ; _bfc :=_ad *_ad ;_be :=2*_ad *_dc ;_fb :=_dc *_dc ;_ab =_bfc *_ag +_be *_ec +_fb *_cb ;_fde =_bfc *_ef +_be *_ee +_fb *_fd ;return ;};func (_cgb *Context )DrawRoundedRectangle (x ,y ,w ,h ,r float64 ){_ceb ,_ggfb ,_gega ,_adf :=x ,x +r ,x +w -r ,x +w ; _eedd ,_cdf ,_gfgd ,_ecfd :=y ,y +r ,y +h -r ,y +h ;_cgb .NewSubPath ();_cgb .MoveTo (_ggfb ,_eedd );_cgb .LineTo (_gega ,_eedd );_cgb .DrawArc (_gega ,_cdf ,r ,_becac (270),_becac (360));_cgb .LineTo (_adf ,_gfgd );_cgb .DrawArc (_gega ,_gfgd ,r ,_becac (0),_becac (90)); _cgb .LineTo (_ggfb ,_ecfd );_cgb .DrawArc (_ggfb ,_gfgd ,r ,_becac (90),_becac (180));_cgb .LineTo (_ceb ,_cdf );_cgb .DrawArc (_ggfb ,_cdf ,r ,_becac (180),_becac (270));_cgb .ClosePath ();};func (_cbd *Context )SetRGB255 (r ,g ,b int ){_cbd .SetRGBA255 (r ,g ,b ,255)}; func (_ceda *Context )SetPixel (x ,y int ){_ceda ._cgf .Set (x ,y ,_ceda ._bdb )};func (_ga *Context )SetRGBA (r ,g ,b ,a float64 ){_ga ._bdb =_cg .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};_ga .setFillAndStrokeColor (_ga ._bdb ); };func _becac (_egce float64 )float64 {return _egce *_b .Pi /180};func (_ddb *Context )SetHexColor (x string ){_ae ,_eff ,_ac ,_bed :=_beaa (x );_ddb .SetRGBA255 (_ae ,_eff ,_ac ,_bed );};type surfacePattern struct{_bcfb _a .Image ;_baf repeatOp ;};func (_debg *Context )NewSubPath (){if _debg ._ebd {_debg ._bef .Add1 (_gag (_debg ._geb )); };_debg ._ebd =false ;};func (_cee *Context )Transform (x ,y float64 )(_cad ,_adg float64 ){return _cee ._eee .Transform (x ,y )};func _edgd (_fbce _a .Image ,_eeea repeatOp )_ca .Pattern {return &surfacePattern {_bcfb :_fbce ,_baf :_eeea };};func _bfae (_aece _g .Int26_6 )float64 {const _ddgd ,_caae =6,1<<6-1; if _aece >=0{return float64 (_aece >>_ddgd )+float64 (_aece &_caae )/64;};_aece =-_aece ;if _aece >=0{return -(float64 (_aece >>_ddgd )+float64 (_aece &_caae )/64);};return 0;};type repeatOp int ;func (_cbab *Context )ShearAbout (sx ,sy ,x ,y float64 ){_cbab .Translate (x ,y ); _cbab .Shear (sx ,sy );_cbab .Translate (-x ,-y );};func (_ccg *Context )Stroke (){_ccg .StrokePreserve ();_ccg .ClearPath ()};func (_gcd *Context )SetStrokeStyle (pattern _ca .Pattern ){_gcd ._dg =pattern };func (_cgea *Context )drawRegularPolygon (_ddfg int ,_cag ,_fcc ,_effa ,_ebf float64 ){_gfc :=2*_b .Pi /float64 (_ddfg ); _ebf -=_b .Pi /2;if _ddfg %2==0{_ebf +=_gfc /2;};_cgea .NewSubPath ();for _aga :=0;_aga < _ddfg ;_aga ++{_gdg :=_ebf +_gfc *float64 (_aga );_cgea .LineTo (_cag +_effa *_b .Cos (_gdg ),_fcc +_effa *_b .Sin (_gdg ));};_cgea .ClosePath ();};func (_ccf *Context )DrawCircle (x ,y ,r float64 ){_ccf .NewSubPath (); _ccf .DrawEllipticalArc (x ,y ,r ,r ,0,2*_b .Pi );_ccf .ClosePath ();};func (_daff *Context )Shear (x ,y float64 ){_daff ._eee .Shear (x ,y )};func (_bcb *Context )joiner ()_cf .Joiner {switch _bcb ._gc {case _ca .LineJoinBevel :return _cf .BevelJoiner ; case _ca .LineJoinRound :return _cf .RoundJoiner ;};return nil ;};func (_gdfg *Context )Push (){_fccd :=*_gdfg ;_gdfg ._afb =append (_gdfg ._afb ,&_fccd )};func (_cac *Context )DrawEllipticalArc (x ,y ,rx ,ry ,angle1 ,angle2 float64 ){const _cbb =16;for _dac :=0; _dac < _cbb ;_dac ++{_ecc :=float64 (_dac +0)/_cbb ;_cdd :=float64 (_dac +1)/_cbb ;_bbd :=angle1 +(angle2 -angle1 )*_ecc ;_fafd :=angle1 +(angle2 -angle1 )*_cdd ;_ade :=x +rx *_b .Cos (_bbd );_ggaa :=y +ry *_b .Sin (_bbd );_gee :=x +rx *_b .Cos ((_bbd +_fafd )/2); _dbef :=y +ry *_b .Sin ((_bbd +_fafd )/2);_dgc :=x +rx *_b .Cos (_fafd );_egad :=y +ry *_b .Sin (_fafd );_cbfa :=2*_gee -_ade /2-_dgc /2;_add :=2*_dbef -_ggaa /2-_egad /2;if _dac ==0{if _cac ._ebd {_cac .LineTo (_ade ,_ggaa );}else {_cac .MoveTo (_ade ,_ggaa ); };};_cac .QuadraticTo (_cbfa ,_add ,_dgc ,_egad );};};func _ecf (_dbe ,_aab ,_bff ,_cge ,_fea ,_gdd ,_dcd ,_cbe float64 )[]_cgc .Point {_ggb :=(_b .Hypot (_bff -_dbe ,_cge -_aab )+_b .Hypot (_fea -_bff ,_gdd -_cge )+_b .Hypot (_dcd -_fea ,_cbe -_gdd )); _cc :=int (_ggb +0.5);if _cc < 4{_cc =4;};_abd :=float64 (_cc )-1;_de :=make ([]_cgc .Point ,_cc );for _fgfg :=0;_fgfg < _cc ;_fgfg ++{_fdb :=float64 (_fgfg )/_abd ;_bd ,_cff :=_cd (_dbe ,_aab ,_bff ,_cge ,_fea ,_gdd ,_dcd ,_cbe ,_fdb );_de [_fgfg ]=_cgc .NewPoint (_bd ,_cff ); };return _de ;};func _gaec (_cdda _a .Image )*_a .RGBA {_cfg :=_cdda .Bounds ();_ebaa :=_a .NewRGBA (_cfg );_fc .Draw (_ebaa ,_cfg ,_cdda ,_cfg .Min ,_fc .Src );return _ebaa ;};func (_caa *Context )SetLineCap (lineCap _ca .LineCap ){_caa ._fgd =lineCap }; type stops []stop ;func (_efg *Context )Rotate (angle float64 ){_efg ._eee =_efg ._eee .Rotate (angle )};func (_gdad *surfacePattern )ColorAt (x ,y int )_cg .Color {_dbcg :=_gdad ._bcfb .Bounds ();switch _gdad ._baf {case _bedfg :if y >=_dbcg .Dy (){return _cg .Transparent ; };case _aaee :if x >=_dbcg .Dx (){return _cg .Transparent ;};case _cdc :if x >=_dbcg .Dx ()||y >=_dbcg .Dy (){return _cg .Transparent ;};};x =x %_dbcg .Dx ()+_dbcg .Min .X ;y =y %_dbcg .Dy ()+_dbcg .Min .Y ;return _gdad ._bcfb .At (x ,y );};func (_adb *Context )stroke (_egd _cf .Painter ){_bdbf :=_adb ._deb ; if len (_adb ._ddg )> 0{_bdbf =_cae (_bdbf ,_adb ._ddg ,_adb ._debe );}else {_bdbf =_feaa (_dee (_bdbf ));};_afa :=_adb ._dd ;_afa .UseNonZeroWinding =true ;_afa .Clear ();_ggcg :=(_adb ._eee .ScalingFactorX ()+_adb ._eee .ScalingFactorY ())/2;_afa .AddStroke (_bdbf ,_abf (_adb ._dfb *_ggcg ),_adb .capper (),_adb .joiner ()); _afa .Rasterize (_egd );};func (_ffd *Context )QuadraticTo (x1 ,y1 ,x2 ,y2 float64 ){if !_ffd ._ebd {_ffd .MoveTo (x1 ,y1 );};x1 ,y1 =_ffd .Transform (x1 ,y1 );x2 ,y2 =_ffd .Transform (x2 ,y2 );_ggba :=_cgc .NewPoint (x1 ,y1 );_dbg :=_cgc .NewPoint (x2 ,y2 ); _faf :=_gag (_ggba );_bgga :=_gag (_dbg );_ffd ._deb .Add2 (_faf ,_bgga );_ffd ._bef .Add2 (_faf ,_bgga );_ffd ._ecb =_dbg ;};func NewContext (width ,height int )*Context {return NewContextForRGBA (_a .NewRGBA (_a .Rect (0,0,width ,height )));};const (_gcdef repeatOp =iota ; _bedfg ;_aaee ;_cdc ;);func (_eaa *Context )SetLineWidth (lineWidth float64 ){_eaa ._dfb =lineWidth };func (_bad *Context )DrawImageAnchored (im _a .Image ,x ,y int ,ax ,ay float64 ){_befe :=im .Bounds ().Size ();x -=int (ax *float64 (_befe .X ));y -=int (ay *float64 (_befe .Y )); _fff :=_e .BiLinear ;_daa :=_bad ._eee .Clone ().Translate (float64 (x ),float64 (y ));_bbe :=_fe .Aff3 {_daa [0],_daa [3],_daa [6],_daa [1],_daa [4],_daa [7]};if _bad ._fbeb ==nil {_fff .Transform (_bad ._cgf ,_bbe ,im ,im .Bounds (),_e .Over ,nil );}else {_fff .Transform (_bad ._cgf ,_bbe ,im ,im .Bounds (),_e .Over ,&_e .Options {DstMask :_bad ._fbeb ,DstMaskP :_a .Point {}}); };};func _bede (_effc ,_fcca uint32 ,_bcd float64 )uint8 {return uint8 (int32 (float64 (_effc )*(1.0-_bcd )+float64 (_fcca )*_bcd )>>8);};func (_gcb *Context )SetRGBA255 (r ,g ,b ,a int ){_gcb ._bdb =_cg .NRGBA {uint8 (r ),uint8 (g ),uint8 (b ),uint8 (a )}; _gcb .setFillAndStrokeColor (_gcb ._bdb );};func (_bbb *Context )drawString (_abde string ,_ffbc _aa .Face ,_fgac ,_gegb float64 ){_dgf :=&_aa .Drawer {Src :_a .NewUniform (_bbb ._bdb ),Face :_ffbc ,Dot :_gag (_cgc .NewPoint (_fgac ,_gegb ))};_afe :=rune (-1); for _ ,_ggbg :=range _abde {if _afe >=0{_dgf .Dot .X +=_dgf .Face .Kern (_afe ,_ggbg );};_eaac ,_ebeg ,_age ,_fce ,_baaf :=_dgf .Face .Glyph (_dgf .Dot ,_ggbg );if !_baaf {continue ;};_bfb :=_eaac .Sub (_eaac .Min );_bfd :=_a .NewRGBA (_bfb );_e .DrawMask (_bfd ,_bfb ,_dgf .Src ,_a .Point {},_ebeg ,_age ,_e .Over ); var _ddc *_e .Options ;if _bbb ._fbeb !=nil {_ddc =&_e .Options {DstMask :_bbb ._fbeb ,DstMaskP :_a .Point {}};};_gdgf :=_bbb ._eee .Clone ().Translate (float64 (_eaac .Min .X ),float64 (_eaac .Min .Y ));_eec :=_fe .Aff3 {_gdgf [0],_gdgf [3],_gdgf [6],_gdgf [1],_gdgf [4],_gdgf [7]}; _e .BiLinear .Transform (_bbb ._cgf ,_eec ,_bfd ,_bfb ,_e .Over ,_ddc );_dgf .Dot .X +=_fce ;_afe =_ggbg ;};};func (_cggd *radialGradient )AddColorStop (offset float64 ,color _cg .Color ){_cggd ._bccf =append (_cggd ._bccf ,stop {_edb :offset ,_faba :color }); _bf .Sort (_cggd ._bccf );};type solidPattern struct{_egdbf _cg .Color };type radialGradient struct{_cfa ,_gec ,_fbg circle ;_gffe ,_cgfg float64 ;_gece float64 ;_bccf stops ;};func (_aaa *patternPainter )Paint (ss []_cf .Span ,done bool ){_bdc :=_aaa ._dfgab .Bounds (); for _ ,_ffge :=range ss {if _ffge .Y < _bdc .Min .Y {continue ;};if _ffge .Y >=_bdc .Max .Y {return ;};if _ffge .X0 < _bdc .Min .X {_ffge .X0 =_bdc .Min .X ;};if _ffge .X1 > _bdc .Max .X {_ffge .X1 =_bdc .Max .X ;};if _ffge .X0 >=_ffge .X1 {continue ;}; const _dgd =1<<16-1;_ffc :=_ffge .Y -_aaa ._dfgab .Rect .Min .Y ;_bbga :=_ffge .X0 -_aaa ._dfgab .Rect .Min .X ;_fgca :=(_ffge .Y -_aaa ._dfgab .Rect .Min .Y )*_aaa ._dfgab .Stride +(_ffge .X0 -_aaa ._dfgab .Rect .Min .X )*4;_gbc :=_fgca +(_ffge .X1 -_ffge .X0 )*4; for _gadc ,_ggbe :=_fgca ,_bbga ;_gadc < _gbc ;_gadc ,_ggbe =_gadc +4,_ggbe +1{_fgb :=_ffge .Alpha ;if _aaa ._dbac !=nil {_fgb =_fgb *uint32 (_aaa ._dbac .AlphaAt (_ggbe ,_ffc ).A )/255;if _fgb ==0{continue ;};};_aaaa :=_aaa ._aade .ColorAt (_ggbe ,_ffc ); _bgbf ,_dcga ,_cebg ,_bbbc :=_aaaa .RGBA ();_ecd :=uint32 (_aaa ._dfgab .Pix [_gadc +0]);_fefe :=uint32 (_aaa ._dfgab .Pix [_gadc +1]);_gbcf :=uint32 (_aaa ._dfgab .Pix [_gadc +2]);_egbg :=uint32 (_aaa ._dfgab .Pix [_gadc +3]);_daae :=(_dgd -(_bbbc *_fgb /_dgd ))*0x101; _aaa ._dfgab .Pix [_gadc +0]=uint8 ((_ecd *_daae +_bgbf *_fgb )/_dgd >>8);_aaa ._dfgab .Pix [_gadc +1]=uint8 ((_fefe *_daae +_dcga *_fgb )/_dgd >>8);_aaa ._dfgab .Pix [_gadc +2]=uint8 ((_gbcf *_daae +_cebg *_fgb )/_dgd >>8);_aaa ._dfgab .Pix [_gadc +3]=uint8 ((_egbg *_daae +_bbbc *_fgb )/_dgd >>8); };};};func (_aae *Context )SetMask (mask *_a .Alpha )error {if mask .Bounds ().Size ()!=_aae ._cgf .Bounds ().Size (){return _bg .New ("\u006d\u0061\u0073\u006b\u0020\u0073i\u007a\u0065\u0020\u006d\u0075\u0073\u0074\u0020\u006d\u0061\u0074\u0063\u0068 \u0063\u006f\u006e\u0074\u0065\u0078\u0074 \u0073\u0069\u007a\u0065"); };_aae ._fbeb =mask ;return nil ;};type stop struct{_edb float64 ;_faba _cg .Color ;};func (_ada *Context )FillPattern ()_ca .Pattern {return _ada ._fcd };type Context struct{_gfdf int ;_ced int ;_dd *_cf .Rasterizer ;_cgf *_a .RGBA ;_fbeb *_a .Alpha ; _bdb _cg .Color ;_fcd _ca .Pattern ;_dg _ca .Pattern ;_deb _cf .Path ;_bef _cf .Path ;_geb _cgc .Point ;_ecb _cgc .Point ;_ebd bool ;_ddg []float64 ;_debe float64 ;_dfb float64 ;_fgd _ca .LineCap ;_gc _ca .LineJoin ;_dbf _ca .FillRule ;_eee _cgc .Matrix ; _afc _ca .TextState ;_afb []*Context ;};func NewContextForImage (im _a .Image )*Context {return NewContextForRGBA (_gaec (im ))};func (_gga *Context )ResetClip (){_gga ._fbeb =nil };func (_acf *linearGradient )ColorAt (x ,y int )_cg .Color {if len (_acf ._bab )==0{return _cg .Transparent ; };_ede ,_aed :=float64 (x ),float64 (y );_bade ,_bcf ,_beg ,_gae :=_acf ._gdda ,_acf ._geff ,_acf ._gfb ,_acf ._gda ;_cebe ,_gff :=_beg -_bade ,_gae -_bcf ;if _gff ==0&&_cebe !=0{return _fbcg ((_ede -_bade )/_cebe ,_acf ._bab );};if _cebe ==0&&_gff !=0{return _fbcg ((_aed -_bcf )/_gff ,_acf ._bab ); };_cfbd :=_cebe *(_ede -_bade )+_gff *(_aed -_bcf );if _cfbd < 0{return _acf ._bab [0]._faba ;};_fgc :=_b .Hypot (_cebe ,_gff );_dbd :=((_ede -_bade )*-_gff +(_aed -_bcf )*_cebe )/(_fgc *_fgc );_afce ,_dbgf :=_bade +_dbd *-_gff ,_bcf +_dbd *_cebe ;_ead :=_b .Hypot (_ede -_afce ,_aed -_dbgf )/_fgc ; return _fbcg (_ead ,_acf ._bab );};func (_gfg *Context )SetColor (c _cg .Color ){_gfg .setFillAndStrokeColor (c )};func (_dbeg *Context )DrawRectangle (x ,y ,w ,h float64 ){_dbeg .NewSubPath ();_dbeg .MoveTo (x ,y );_dbeg .LineTo (x +w ,y );_dbeg .LineTo (x +w ,y +h ); _dbeg .LineTo (x ,y +h );_dbeg .ClosePath ();};func (_cfc *Context )SetLineJoin (lineJoin _ca .LineJoin ){_cfc ._gc =lineJoin };func (_edd *Context )ClosePath (){if _edd ._ebd {_gcdf :=_gag (_edd ._geb );_edd ._deb .Add1 (_gcdf );_edd ._bef .Add1 (_gcdf ); _edd ._ecb =_edd ._geb ;};};func _fdgc (_eeab ,_bbf ,_gfe ,_dbfd ,_ggag ,_dbc float64 )_ca .Gradient {_abdb :=circle {_eeab ,_bbf ,_gfe };_fgcg :=circle {_dbfd ,_ggag ,_dbc };_ccc :=circle {_dbfd -_eeab ,_ggag -_bbf ,_dbc -_gfe };_bag :=_ebba (_ccc ._bgb ,_ccc ._fbfg ,-_ccc ._cggc ,_ccc ._bgb ,_ccc ._fbfg ,_ccc ._cggc ); var _fabag float64 ;if _bag !=0{_fabag =1.0/_bag ;};_abdc :=-_abdb ._cggc ;_cebf :=&radialGradient {_cfa :_abdb ,_gec :_fgcg ,_fbg :_ccc ,_gffe :_bag ,_cgfg :_fabag ,_gece :_abdc };return _cebf ;};func (_gbd *Context )Scale (x ,y float64 ){_gbd ._eee =_gbd ._eee .Scale (x ,y )}; func _bdgg (_adff ,_gabd _cg .Color ,_dafg float64 )_cg .Color {_afaa ,_ggg ,_gdbg ,_cgdd :=_adff .RGBA ();_beca ,_fbb ,_becg ,_gfcd :=_gabd .RGBA ();return _cg .RGBA {_bede (_afaa ,_beca ,_dafg ),_bede (_ggg ,_fbb ,_dafg ),_bede (_gdbg ,_becg ,_dafg ),_bede (_cgdd ,_gfcd ,_dafg )}; };func (_dgb *Context )SetMatrix (m _cgc .Matrix ){_dgb ._eee =m };func _cae (_fda _cf .Path ,_daag []float64 ,_cde float64 )_cf .Path {return _feaa (_ggca (_dee (_fda ),_daag ,_cde ));};func (_gb *Context )ClipPreserve (){_eef :=_a .NewAlpha (_a .Rect (0,0,_gb ._gfdf ,_gb ._ced )); _ddf :=_cf .NewAlphaOverPainter (_eef );_gb .fill (_ddf );if _gb ._fbeb ==nil {_gb ._fbeb =_eef ;}else {_bcg :=_a .NewAlpha (_a .Rect (0,0,_gb ._gfdf ,_gb ._ced ));_e .DrawMask (_bcg ,_bcg .Bounds (),_eef ,_a .Point {},_gb ._fbeb ,_a .Point {},_e .Over ); _gb ._fbeb =_bcg ;};};func (_gbdd stops )Swap (i ,j int ){_gbdd [i ],_gbdd [j ]=_gbdd [j ],_gbdd [i ]};func (_aadg *Context )DrawStringAnchored (s string ,face _aa .Face ,x ,y ,ax ,ay float64 ){_debgc ,_agd :=_aadg .MeasureString (s ,face );_aadg .drawString (s ,face ,x -ax *_debgc ,y +ay *_agd ); };func _dec (_dcgb ,_dbed ,_eaf ,_aeg float64 )_ca .Gradient {_fbae :=&linearGradient {_gdda :_dcgb ,_geff :_dbed ,_gfb :_eaf ,_gda :_aeg };return _fbae ;};func NewContextForRGBA (im *_a .RGBA )*Context {_dcb :=im .Bounds ().Size ().X ;_aggg :=im .Bounds ().Size ().Y ; return &Context {_gfdf :_dcb ,_ced :_aggg ,_dd :_cf .NewRasterizer (_dcb ,_aggg ),_cgf :im ,_bdb :_cg .Transparent ,_fcd :_fbe ,_dg :_daf ,_dfb :1,_dbf :_ca .FillRuleWinding ,_eee :_cgc .IdentityMatrix (),_afc :_ca .NewTextState ()};};