| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615116161161711618116191162011621116221162311624116251162611627116281162911630116311163211633116341163511636116371163811639116401164111642116431164411645116461164711648116491165011651116521165311654116551165611657116581165911660116611166211663116641166511666116671166811669116701167111672116731167411675116761167711678116791168011681116821168311684116851168611687116881168911690116911169211693116941169511696116971169811699117001170111702117031170411705117061170711708117091171011711117121171311714117151171611717117181171911720117211172211723117241172511726117271172811729117301173111732117331173411735117361173711738117391174011741117421174311744117451174611747117481174911750117511175211753117541175511756117571175811759117601176111762117631176411765117661176711768117691177011771117721177311774117751177611777117781177911780117811178211783117841178511786117871178811789117901179111792117931179411795117961179711798117991180011801118021180311804118051180611807118081180911810118111181211813118141181511816118171181811819118201182111822118231182411825118261182711828118291183011831118321183311834118351183611837118381183911840118411184211843118441184511846118471184811849118501185111852118531185411855118561185711858118591186011861118621186311864118651186611867118681186911870118711187211873118741187511876118771187811879118801188111882118831188411885118861188711888118891189011891118921189311894118951189611897118981189911900119011190211903119041190511906119071190811909119101191111912119131191411915119161191711918119191192011921119221192311924119251192611927119281192911930119311193211933119341193511936119371193811939119401194111942119431194411945119461194711948119491195011951119521195311954119551195611957119581195911960119611196211963119641196511966119671196811969119701197111972119731197411975119761197711978119791198011981119821198311984119851198611987119881198911990119911199211993119941199511996119971199811999120001200112002120031200412005120061200712008120091201012011120121201312014120151201612017120181201912020120211202212023120241202512026120271202812029120301203112032120331203412035120361203712038120391204012041120421204312044120451204612047120481204912050120511205212053120541205512056120571205812059120601206112062120631206412065120661206712068120691207012071120721207312074120751207612077120781207912080120811208212083120841208512086120871208812089120901209112092120931209412095120961209712098120991210012101121021210312104121051210612107121081210912110121111211212113121141211512116121171211812119121201212112122121231212412125121261212712128121291213012131121321213312134121351213612137121381213912140121411214212143121441214512146121471214812149121501215112152121531215412155121561215712158121591216012161121621216312164121651216612167121681216912170121711217212173121741217512176121771217812179121801218112182121831218412185121861218712188121891219012191121921219312194121951219612197121981219912200122011220212203122041220512206122071220812209122101221112212122131221412215122161221712218122191222012221122221222312224122251222612227122281222912230122311223212233122341223512236122371223812239122401224112242122431224412245122461224712248122491225012251122521225312254122551225612257122581225912260122611226212263122641226512266122671226812269122701227112272122731227412275122761227712278122791228012281122821228312284122851228612287122881228912290122911229212293122941229512296122971229812299123001230112302123031230412305123061230712308123091231012311123121231312314123151231612317123181231912320123211232212323123241232512326123271232812329123301233112332123331233412335123361233712338123391234012341123421234312344123451234612347123481234912350123511235212353123541235512356123571235812359123601236112362123631236412365123661236712368123691237012371123721237312374123751237612377123781237912380123811238212383123841238512386123871238812389123901239112392123931239412395123961239712398123991240012401124021240312404124051240612407124081240912410124111241212413124141241512416124171241812419124201242112422124231242412425124261242712428124291243012431124321243312434124351243612437124381243912440124411244212443124441244512446124471244812449124501245112452124531245412455124561245712458124591246012461124621246312464124651246612467124681246912470124711247212473124741247512476124771247812479124801248112482124831248412485124861248712488124891249012491124921249312494124951249612497124981249912500125011250212503125041250512506125071250812509125101251112512125131251412515125161251712518125191252012521125221252312524125251252612527125281252912530125311253212533125341253512536125371253812539125401254112542125431254412545125461254712548125491255012551125521255312554125551255612557125581255912560125611256212563125641256512566125671256812569125701257112572125731257412575125761257712578125791258012581125821258312584125851258612587125881258912590125911259212593125941259512596125971259812599126001260112602126031260412605126061260712608126091261012611126121261312614126151261612617126181261912620126211262212623126241262512626126271262812629126301263112632126331263412635126361263712638126391264012641126421264312644126451264612647126481264912650126511265212653126541265512656126571265812659126601266112662126631266412665126661266712668126691267012671126721267312674126751267612677126781267912680126811268212683126841268512686126871268812689126901269112692126931269412695126961269712698126991270012701127021270312704127051270612707127081270912710127111271212713127141271512716127171271812719127201272112722127231272412725127261272712728127291273012731127321273312734127351273612737127381273912740127411274212743127441274512746127471274812749127501275112752127531275412755127561275712758127591276012761127621276312764127651276612767127681276912770127711277212773127741277512776127771277812779127801278112782127831278412785127861278712788127891279012791127921279312794127951279612797127981279912800128011280212803128041280512806128071280812809128101281112812128131281412815128161281712818128191282012821128221282312824128251282612827128281282912830128311283212833128341283512836128371283812839128401284112842128431284412845128461284712848128491285012851128521285312854128551285612857128581285912860128611286212863128641286512866128671286812869128701287112872128731287412875128761287712878128791288012881128821288312884128851288612887128881288912890128911289212893128941289512896128971289812899129001290112902129031290412905129061290712908129091291012911129121291312914129151291612917129181291912920129211292212923129241292512926129271292812929129301293112932129331293412935129361293712938129391294012941129421294312944129451294612947129481294912950129511295212953129541295512956129571295812959129601296112962129631296412965129661296712968129691297012971129721297312974129751297612977129781297912980129811298212983129841298512986129871298812989129901299112992129931299412995129961299712998129991300013001130021300313004130051300613007130081300913010130111301213013130141301513016130171301813019130201302113022130231302413025130261302713028130291303013031130321303313034130351303613037130381303913040130411304213043130441304513046130471304813049130501305113052130531305413055130561305713058130591306013061130621306313064130651306613067130681306913070130711307213073130741307513076130771307813079130801308113082130831308413085130861308713088130891309013091130921309313094130951309613097130981309913100131011310213103131041310513106131071310813109131101311113112131131311413115131161311713118131191312013121131221312313124131251312613127131281312913130131311313213133131341313513136131371313813139131401314113142131431314413145131461314713148131491315013151131521315313154131551315613157131581315913160131611316213163131641316513166131671316813169131701317113172131731317413175131761317713178131791318013181131821318313184131851318613187131881318913190131911319213193131941319513196131971319813199132001320113202132031320413205132061320713208132091321013211132121321313214132151321613217132181321913220132211322213223132241322513226132271322813229132301323113232132331323413235132361323713238132391324013241132421324313244132451324613247132481324913250132511325213253132541325513256132571325813259132601326113262132631326413265132661326713268132691327013271132721327313274132751327613277132781327913280132811328213283132841328513286132871328813289132901329113292132931329413295132961329713298132991330013301133021330313304133051330613307133081330913310133111331213313133141331513316133171331813319133201332113322133231332413325133261332713328133291333013331133321333313334133351333613337133381333913340133411334213343133441334513346133471334813349133501335113352133531335413355133561335713358133591336013361133621336313364133651336613367133681336913370133711337213373133741337513376133771337813379133801338113382133831338413385133861338713388133891339013391133921339313394133951339613397133981339913400134011340213403134041340513406134071340813409134101341113412134131341413415134161341713418134191342013421134221342313424134251342613427134281342913430134311343213433134341343513436134371343813439134401344113442134431344413445134461344713448134491345013451134521345313454134551345613457134581345913460134611346213463134641346513466134671346813469134701347113472134731347413475134761347713478134791348013481134821348313484134851348613487134881348913490134911349213493134941349513496134971349813499135001350113502135031350413505135061350713508135091351013511135121351313514135151351613517135181351913520135211352213523135241352513526135271352813529135301353113532135331353413535135361353713538135391354013541135421354313544135451354613547135481354913550135511355213553135541355513556135571355813559135601356113562135631356413565135661356713568135691357013571135721357313574135751357613577135781357913580135811358213583135841358513586135871358813589135901359113592135931359413595135961359713598135991360013601136021360313604136051360613607136081360913610136111361213613136141361513616136171361813619136201362113622136231362413625136261362713628136291363013631136321363313634136351363613637136381363913640136411364213643136441364513646136471364813649136501365113652136531365413655136561365713658136591366013661136621366313664136651366613667136681366913670136711367213673136741367513676136771367813679136801368113682136831368413685136861368713688136891369013691136921369313694136951369613697136981369913700137011370213703137041370513706137071370813709137101371113712137131371413715137161371713718137191372013721137221372313724137251372613727137281372913730137311373213733137341373513736137371373813739137401374113742137431374413745137461374713748137491375013751137521375313754137551375613757137581375913760137611376213763137641376513766137671376813769137701377113772137731377413775137761377713778137791378013781137821378313784137851378613787137881378913790137911379213793137941379513796137971379813799138001380113802138031380413805138061380713808138091381013811138121381313814138151381613817138181381913820138211382213823138241382513826138271382813829138301383113832138331383413835138361383713838138391384013841138421384313844138451384613847138481384913850138511385213853138541385513856138571385813859138601386113862138631386413865138661386713868138691387013871138721387313874138751387613877138781387913880138811388213883138841388513886138871388813889138901389113892138931389413895138961389713898138991390013901139021390313904139051390613907139081390913910139111391213913139141391513916139171391813919139201392113922139231392413925139261392713928139291393013931139321393313934139351393613937139381393913940139411394213943139441394513946139471394813949139501395113952139531395413955139561395713958139591396013961139621396313964139651396613967139681396913970139711397213973139741397513976139771397813979139801398113982139831398413985139861398713988139891399013991139921399313994139951399613997139981399914000140011400214003140041400514006140071400814009140101401114012140131401414015140161401714018140191402014021140221402314024140251402614027140281402914030140311403214033140341403514036140371403814039140401404114042140431404414045140461404714048140491405014051140521405314054140551405614057140581405914060140611406214063140641406514066140671406814069140701407114072140731407414075140761407714078140791408014081140821408314084140851408614087140881408914090140911409214093140941409514096140971409814099141001410114102141031410414105141061410714108141091411014111141121411314114141151411614117141181411914120141211412214123141241412514126141271412814129141301413114132141331413414135141361413714138141391414014141141421414314144141451414614147141481414914150141511415214153141541415514156141571415814159141601416114162141631416414165141661416714168141691417014171141721417314174141751417614177141781417914180141811418214183141841418514186141871418814189141901419114192141931419414195141961419714198141991420014201142021420314204142051420614207142081420914210142111421214213142141421514216142171421814219142201422114222142231422414225142261422714228142291423014231142321423314234142351423614237142381423914240142411424214243142441424514246142471424814249142501425114252142531425414255142561425714258142591426014261142621426314264142651426614267142681426914270142711427214273142741427514276142771427814279142801428114282142831428414285142861428714288142891429014291142921429314294142951429614297142981429914300143011430214303143041430514306143071430814309143101431114312143131431414315143161431714318143191432014321143221432314324143251432614327143281432914330143311433214333143341433514336143371433814339143401434114342143431434414345143461434714348143491435014351143521435314354143551435614357143581435914360143611436214363143641436514366143671436814369143701437114372143731437414375143761437714378143791438014381143821438314384143851438614387143881438914390143911439214393143941439514396143971439814399144001440114402144031440414405144061440714408144091441014411144121441314414144151441614417144181441914420144211442214423144241442514426144271442814429144301443114432144331443414435144361443714438144391444014441144421444314444144451444614447144481444914450144511445214453144541445514456144571445814459144601446114462144631446414465144661446714468144691447014471144721447314474144751447614477 |
- ;(function () {
- function _toConsumableArray(arr) {
- return (
- _arrayWithoutHoles(arr) ||
- _iterableToArray(arr) ||
- _unsupportedIterableToArray(arr) ||
- _nonIterableSpread()
- )
- }
- function _nonIterableSpread() {
- throw new TypeError(
- 'Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.'
- )
- }
- function _unsupportedIterableToArray(o, minLen) {
- if (!o) return
- if (typeof o === 'string') return _arrayLikeToArray(o, minLen)
- var n = Object.prototype.toString.call(o).slice(8, -1)
- if (n === 'Object' && o.constructor) n = o.constructor.name
- if (n === 'Map' || n === 'Set') return Array.from(o)
- if (n === 'Arguments' || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))
- return _arrayLikeToArray(o, minLen)
- }
- function _iterableToArray(iter) {
- if (
- (typeof Symbol !== 'undefined' && iter[Symbol.iterator] != null) ||
- iter['@@iterator'] != null
- )
- return Array.from(iter)
- }
- function _arrayWithoutHoles(arr) {
- if (Array.isArray(arr)) return _arrayLikeToArray(arr)
- }
- function _arrayLikeToArray(arr, len) {
- if (len == null || len > arr.length) len = arr.length
- for (var i = 0, arr2 = new Array(len); i < len; i++) {
- arr2[i] = arr[i]
- }
- return arr2
- }
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
- try {
- var info = gen[key](arg)
- var value = info.value
- } catch (error) {
- reject(error)
- return
- }
- if (info.done) {
- resolve(value)
- } else {
- Promise.resolve(value).then(_next, _throw)
- }
- }
- function _asyncToGenerator(fn) {
- return function () {
- var self = this,
- args = arguments
- return new Promise(function (resolve, reject) {
- var gen = fn.apply(self, args)
- function _next(value) {
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, 'next', value)
- }
- function _throw(err) {
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, 'throw', err)
- }
- _next(undefined)
- })
- }
- }
- function _typeof(obj) {
- '@babel/helpers - typeof'
- return (
- (_typeof =
- 'function' == typeof Symbol && 'symbol' == typeof Symbol.iterator
- ? function (obj) {
- return typeof obj
- }
- : function (obj) {
- return obj &&
- 'function' == typeof Symbol &&
- obj.constructor === Symbol &&
- obj !== Symbol.prototype
- ? 'symbol'
- : typeof obj
- }),
- _typeof(obj)
- )
- }
- var __vite_style__ = document.createElement('style')
- __vite_style__.innerHTML =
- '._roomHeader_13gb6_1{background:url(./assets/room_bg.498828a6.png) top center no-repeat;background-size:100%;overflow:hidden}._roomHeader_13gb6_1 .van-row{align-items:center}._countTimer_13gb6_9{padding:.85333rem .64rem .58667rem}._countTimer_13gb6_9 ._timer_13gb6_12{padding-left:.05333rem;font-size:.69333rem;font-weight:600;color:#333;padding-bottom:.26667rem}._countTimer_13gb6_9 ._timer_13gb6_12 span{color:#666;font-size:.37333rem}._countTimer_13gb6_9 ._title_13gb6_23{display:flex;align-items:center;font-size:.32rem;color:#333;line-height:.45333rem}._countTimer_13gb6_9 ._title_13gb6_23 img{width:.4rem;height:.4rem;margin-right:.13333rem}._chargeTimer_13gb6_35 .van-button__text{display:flex;align-items:center;font-weight:600}._chargeTimer_13gb6_35 .van-button__text img{margin-left:.05333rem;width:.26667rem;height:.26667rem}._studentList_13gb6_45{margin:0 .37333rem .4rem;background:#ffffff;border-radius:.26667rem;overflow:hidden}._studentCount_13gb6_51{font-size:.37333rem;font-weight:500;color:#333}._btnGroupInvite_13gb6_56{display:flex;align-items:center;justify-content:space-between;padding-bottom:.10667rem}._btnGroupInvite_13gb6_56 .van-button{width:48%;font-size:.37333rem;font-weight:500;color:#333!important}._btnGroupInvite_13gb6_56 .van-button img{margin-right:.21333rem;width:.53333rem;height:.53333rem}._btnGroupInvite_13gb6_56 .van-button__text{display:flex;align-items:center}._searchList_13gb6_77{display:flex;padding:.32rem .42667rem;background-color:#fff}._dataItem_13gb6_82{font-size:.37333rem;color:#333;padding-right:.64rem}._shareSection_b869d_1{width:8.13333rem;padding:.37333rem;background:url(./assets/share_bg.252c9956.png) center no-repeat #2dc7aa;background-size:cover;overflow:hidden}._shareSection_b869d_1 ._img_b869d_8{width:1.44rem;height:1.44rem;border-radius:50%;margin-right:.32rem}._shareSection_b869d_1 ._name_b869d_14{font-size:.48rem;font-weight:500;color:#1a1a1a;line-height:.48rem}._shareSection_b869d_1 ._titleTips_b869d_20{padding-top:.13333rem;font-size:.37333rem;color:#8a8a8a;line-height:.48rem}._section_b869d_26{background:#ffffff;border-radius:.29333rem;overflow:hidden;padding:.37333rem .42667rem .53333rem}._txt_b869d_32{font-size:.42667rem;color:#333;line-height:1.5}._txt_b869d_32 span{font-size:.48rem;font-weight:500;color:#2dc7aa}._teacherName_b869d_42{padding-top:.53333rem}._download_b869d_45{margin-top:.26667rem;display:flex;align-items:center;justify-content:space-between}._download_b869d_45 ._logo_b869d_51{font-size:.34667rem;color:#349784;line-height:.48rem}._download_b869d_45 ._logo_b869d_51 img{width:2.48rem;vertical-align:middle;margin-bottom:.29333rem}._download_b869d_45 ._qrcode_b869d_61{width:2.02667rem;height:2.02667rem}._continue_b869d_65{position:absolute;right:.66667rem;top:.53333rem;z-index:2;background:rgba(0,0,0,.23);border-radius:.50667rem;font-size:.37333rem;color:#fff;background:linear-gradient(0deg,#2dc7aa 0%,#32e8c6 100%);padding:.16rem .48rem}._label_v8pn1_1{margin-right:.21333rem;font-size:.37333rem}._label_v8pn1_1 .van-list__loading,._label_v8pn1_1 .van-list__finished-text,._label_v8pn1_1 .van-list__error-text{width:100%}._label_v8pn1_1 .iconfont-down{margin-left:.10667rem}._studentList_v8pn1_13{height:55vh;overflow:auto}._studentList_v8pn1_13 .van-checkbox{justify-content:flex-end}._btnGroup_v8pn1_20{padding:0 .53333rem .37333rem}._confirmTitle_yqlm2_1{font-size:.42667rem;font-weight:500;color:#333;line-height:.58667rem;padding:.58667rem .58667rem .32rem}._confirmTitle_yqlm2_1 ._timer_yqlm2_8{color:#2dc7aa}._addTitle_yqlm2_11,._calc_yqlm2_12{font-size:.42667rem;color:#666;line-height:.58667rem;padding:.32rem .58667rem 0}._addTitle_yqlm2_11 span,._calc_yqlm2_12 span{color:var(--van-primary)}._addTitle_yqlm2_11 .student,._calc_yqlm2_12 .student{margin:0}._studentList_yqlm2_26{max-height:45vh;overflow:auto}._btnGroup_yqlm2_30{padding:.37333rem .53333rem}\n'
- document.head.appendChild(__vite_style__)
- System.register(
- [
- './title_timers-legacy.616e8b2e.js',
- './icon_name_active-legacy.e2b0189a.js',
- './icon_tips-legacy.b7861467.js',
- './index-legacy.d37bf950.js',
- './index-legacy.a7be6226.js',
- './vendor-legacy.367a3d55.js',
- './index-legacy.637f3556.js',
- './index-legacy.f25f109a.js',
- './index-legacy.f25f109a2.js',
- './index-legacy.f25f109a6.js',
- './index-legacy.f25f109a11.js',
- './index-legacy.f25f109a7.js',
- './index-legacy.98b4b4a5.js',
- './icon_teacher-legacy.42ba77b1.js',
- './index-legacy.3ac502e7.js',
- './organ-search-legacy.18da60ce.js',
- './index-legacy.f25f109a13.js',
- './index-legacy.f25f109a14.js',
- './index-legacy.d66afaf7.js',
- './index-legacy.57f554ec.js',
- './index-legacy.f25f109a8.js',
- './icon_timer2-legacy.90431d1a.js',
- './index-legacy.901c4933.js',
- './index-legacy.f25f109a3.js',
- './index-legacy.f25f109a10.js',
- './index-legacy.f25f109a5.js',
- './icon_student-legacy.45be2fa9.js'
- ],
- function (exports) {
- 'use strict'
- var logo$1,
- __glob_11_0,
- __glob_11_1,
- __glob_11_4,
- __glob_11_5,
- __glob_11_6,
- __glob_11_7,
- __glob_11_8,
- __glob_11_10,
- __glob_11_11,
- __glob_11_13,
- __glob_11_14,
- __glob_11_15,
- __glob_11_16,
- __glob_11_17,
- __glob_11_18,
- __glob_11_19,
- __glob_11_2,
- __glob_11_3,
- __glob_11_9,
- __glob_11_12,
- ColHeader,
- state,
- postMessage,
- request,
- ColResult,
- formatterDate,
- defineComponent,
- ref,
- onUpdated,
- h,
- onMounted,
- createVNode,
- Fragment,
- createTextVNode,
- Cell,
- Toast,
- Icon,
- List,
- Checkbox,
- isVNode,
- Popup,
- Button,
- dayjs,
- Dialog,
- Row,
- Col,
- CellGroup,
- DatetimePicker,
- ActionSheet,
- Course,
- iconTeacher,
- ColSearch,
- OrganSearch,
- Student,
- useEventListener,
- useWindowScroll
- return {
- setters: [
- function (module) {
- logo$1 = module.l
- __glob_11_0 = module._
- __glob_11_1 = module.a
- __glob_11_4 = module.b
- __glob_11_5 = module.c
- __glob_11_6 = module.d
- __glob_11_7 = module.e
- __glob_11_8 = module.f
- __glob_11_10 = module.g
- __glob_11_11 = module.h
- __glob_11_13 = module.i
- __glob_11_14 = module.j
- __glob_11_15 = module.k
- __glob_11_16 = module.m
- __glob_11_17 = module.n
- __glob_11_18 = module.o
- __glob_11_19 = module.p
- },
- function (module) {
- __glob_11_2 = module._
- __glob_11_3 = module.a
- __glob_11_9 = module.b
- },
- function (module) {
- __glob_11_12 = module._
- },
- function (module) {
- ColHeader = module.C
- },
- function (module) {
- state = module.s
- postMessage = module.p
- request = module.r
- ColResult = module.C
- formatterDate = module.j
- },
- function (module) {
- defineComponent = module.d
- ref = module.V
- onUpdated = module.aE
- h = module.aF
- onMounted = module.a4
- createVNode = module.a
- Fragment = module.F
- createTextVNode = module.j
- Cell = module.q
- Toast = module.T
- Icon = module.u
- List = module.w
- Checkbox = module.a0
- isVNode = module.x
- Popup = module.P
- Button = module.B
- dayjs = module.g
- Dialog = module.D
- Row = module.k
- Col = module.l
- CellGroup = module.C
- DatetimePicker = module.J
- ActionSheet = module.A
- },
- function () {},
- function () {},
- function () {},
- function () {},
- function () {},
- function () {},
- function (module) {
- Course = module.C
- },
- function (module) {
- iconTeacher = module.i
- },
- function (module) {
- ColSearch = module.C
- },
- function (module) {
- OrganSearch = module.O
- },
- function () {},
- function () {},
- function (module) {
- Student = module.S
- },
- function (module) {
- useEventListener = module.u
- useWindowScroll = module.a
- },
- function () {},
- function () {},
- function () {},
- function () {},
- function () {},
- function () {},
- function () {}
- ],
- execute: function execute() {
- var roomHeader = '_roomHeader_13gb6_1'
- var countTimer = '_countTimer_13gb6_9'
- var timer$1 = '_timer_13gb6_12'
- var title = '_title_13gb6_23'
- var chargeTimer = '_chargeTimer_13gb6_35'
- var studentList$2 = '_studentList_13gb6_45'
- var studentCount = '_studentCount_13gb6_51'
- var btnGroupInvite = '_btnGroupInvite_13gb6_56'
- var searchList = '_searchList_13gb6_77'
- var dataItem = '_dataItem_13gb6_82'
- var styles$3 = {
- roomHeader: roomHeader,
- countTimer: countTimer,
- timer: timer$1,
- title: title,
- chargeTimer: chargeTimer,
- studentList: studentList$2,
- studentCount: studentCount,
- btnGroupInvite: btnGroupInvite,
- searchList: searchList,
- dataItem: dataItem
- }
- var shareSection = '_shareSection_b869d_1'
- var img = '_img_b869d_8'
- var name = '_name_b869d_14'
- var titleTips = '_titleTips_b869d_20'
- var section = '_section_b869d_26'
- var txt = '_txt_b869d_32'
- var teacherName = '_teacherName_b869d_42'
- var download = '_download_b869d_45'
- var logo = '_logo_b869d_51'
- var qrcode = '_qrcode_b869d_61'
- var styles$2 = {
- shareSection: shareSection,
- img: img,
- name: name,
- titleTips: titleTips,
- section: section,
- txt: txt,
- teacherName: teacherName,
- download: download,
- logo: logo,
- qrcode: qrcode,
- continue: '_continue_b869d_65'
- }
- /*!
- * qrcode.vue v3.3.3
- * A Vue.js component to generate QRCode.
- * © 2017-2021 @scopewu(https://github.com/scopewu)
- * MIT License.
- */ /*! *****************************************************************************
- Copyright (c) Microsoft Corporation.
- Permission to use, copy, modify, and/or distribute this software for any
- purpose with or without fee is hereby granted.
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
- ***************************************************************************** */ var _assign$ =
- function __assign$1() {
- _assign$ =
- Object.assign ||
- function __assign(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i]
- for (var p in s) {
- if (Object.prototype.hasOwnProperty.call(s, p))
- t[p] = s[p]
- }
- }
- return t
- }
- return _assign$.apply(this, arguments)
- }
- var mode$1 = {
- MODE_NUMBER: 1 << 0,
- MODE_ALPHA_NUM: 1 << 1,
- MODE_8BIT_BYTE: 1 << 2,
- MODE_KANJI: 1 << 3
- }
- var mode = mode$1
- function QR8bitByte(data) {
- this.mode = mode.MODE_8BIT_BYTE
- this.data = data
- }
- QR8bitByte.prototype = {
- getLength: function getLength(buffer) {
- return this.data.length
- },
- write: function write(buffer) {
- for (var i = 0; i < this.data.length; i++) {
- // not JIS ...
- buffer.put(this.data.charCodeAt(i), 8)
- }
- }
- }
- var _8BitByte = QR8bitByte
- var ErrorCorrectLevel = { L: 1, M: 0, Q: 3, H: 2 } // ErrorCorrectLevel
- var ECL = ErrorCorrectLevel
- function QRRSBlock(totalCount, dataCount) {
- this.totalCount = totalCount
- this.dataCount = dataCount
- }
- QRRSBlock.RS_BLOCK_TABLE = [
- // L
- // M
- // Q
- // H
- // 1
- [1, 26, 19],
- [1, 26, 16],
- [1, 26, 13],
- [1, 26, 9], // 2
- [1, 44, 34],
- [1, 44, 28],
- [1, 44, 22],
- [1, 44, 16], // 3
- [1, 70, 55],
- [1, 70, 44],
- [2, 35, 17],
- [2, 35, 13], // 4
- [1, 100, 80],
- [2, 50, 32],
- [2, 50, 24],
- [4, 25, 9], // 5
- [1, 134, 108],
- [2, 67, 43],
- [2, 33, 15, 2, 34, 16],
- [2, 33, 11, 2, 34, 12], // 6
- [2, 86, 68],
- [4, 43, 27],
- [4, 43, 19],
- [4, 43, 15], // 7
- [2, 98, 78],
- [4, 49, 31],
- [2, 32, 14, 4, 33, 15],
- [4, 39, 13, 1, 40, 14], // 8
- [2, 121, 97],
- [2, 60, 38, 2, 61, 39],
- [4, 40, 18, 2, 41, 19],
- [4, 40, 14, 2, 41, 15], // 9
- [2, 146, 116],
- [3, 58, 36, 2, 59, 37],
- [4, 36, 16, 4, 37, 17],
- [4, 36, 12, 4, 37, 13], // 10
- [2, 86, 68, 2, 87, 69],
- [4, 69, 43, 1, 70, 44],
- [6, 43, 19, 2, 44, 20],
- [6, 43, 15, 2, 44, 16], // 11
- [4, 101, 81],
- [1, 80, 50, 4, 81, 51],
- [4, 50, 22, 4, 51, 23],
- [3, 36, 12, 8, 37, 13], // 12
- [2, 116, 92, 2, 117, 93],
- [6, 58, 36, 2, 59, 37],
- [4, 46, 20, 6, 47, 21],
- [7, 42, 14, 4, 43, 15], // 13
- [4, 133, 107],
- [8, 59, 37, 1, 60, 38],
- [8, 44, 20, 4, 45, 21],
- [12, 33, 11, 4, 34, 12], // 14
- [3, 145, 115, 1, 146, 116],
- [4, 64, 40, 5, 65, 41],
- [11, 36, 16, 5, 37, 17],
- [11, 36, 12, 5, 37, 13], // 15
- [5, 109, 87, 1, 110, 88],
- [5, 65, 41, 5, 66, 42],
- [5, 54, 24, 7, 55, 25],
- [11, 36, 12], // 16
- [5, 122, 98, 1, 123, 99],
- [7, 73, 45, 3, 74, 46],
- [15, 43, 19, 2, 44, 20],
- [3, 45, 15, 13, 46, 16], // 17
- [1, 135, 107, 5, 136, 108],
- [10, 74, 46, 1, 75, 47],
- [1, 50, 22, 15, 51, 23],
- [2, 42, 14, 17, 43, 15], // 18
- [5, 150, 120, 1, 151, 121],
- [9, 69, 43, 4, 70, 44],
- [17, 50, 22, 1, 51, 23],
- [2, 42, 14, 19, 43, 15], // 19
- [3, 141, 113, 4, 142, 114],
- [3, 70, 44, 11, 71, 45],
- [17, 47, 21, 4, 48, 22],
- [9, 39, 13, 16, 40, 14], // 20
- [3, 135, 107, 5, 136, 108],
- [3, 67, 41, 13, 68, 42],
- [15, 54, 24, 5, 55, 25],
- [15, 43, 15, 10, 44, 16], // 21
- [4, 144, 116, 4, 145, 117],
- [17, 68, 42],
- [17, 50, 22, 6, 51, 23],
- [19, 46, 16, 6, 47, 17], // 22
- [2, 139, 111, 7, 140, 112],
- [17, 74, 46],
- [7, 54, 24, 16, 55, 25],
- [34, 37, 13], // 23
- [4, 151, 121, 5, 152, 122],
- [4, 75, 47, 14, 76, 48],
- [11, 54, 24, 14, 55, 25],
- [16, 45, 15, 14, 46, 16], // 24
- [6, 147, 117, 4, 148, 118],
- [6, 73, 45, 14, 74, 46],
- [11, 54, 24, 16, 55, 25],
- [30, 46, 16, 2, 47, 17], // 25
- [8, 132, 106, 4, 133, 107],
- [8, 75, 47, 13, 76, 48],
- [7, 54, 24, 22, 55, 25],
- [22, 45, 15, 13, 46, 16], // 26
- [10, 142, 114, 2, 143, 115],
- [19, 74, 46, 4, 75, 47],
- [28, 50, 22, 6, 51, 23],
- [33, 46, 16, 4, 47, 17], // 27
- [8, 152, 122, 4, 153, 123],
- [22, 73, 45, 3, 74, 46],
- [8, 53, 23, 26, 54, 24],
- [12, 45, 15, 28, 46, 16], // 28
- [3, 147, 117, 10, 148, 118],
- [3, 73, 45, 23, 74, 46],
- [4, 54, 24, 31, 55, 25],
- [11, 45, 15, 31, 46, 16], // 29
- [7, 146, 116, 7, 147, 117],
- [21, 73, 45, 7, 74, 46],
- [1, 53, 23, 37, 54, 24],
- [19, 45, 15, 26, 46, 16], // 30
- [5, 145, 115, 10, 146, 116],
- [19, 75, 47, 10, 76, 48],
- [15, 54, 24, 25, 55, 25],
- [23, 45, 15, 25, 46, 16], // 31
- [13, 145, 115, 3, 146, 116],
- [2, 74, 46, 29, 75, 47],
- [42, 54, 24, 1, 55, 25],
- [23, 45, 15, 28, 46, 16], // 32
- [17, 145, 115],
- [10, 74, 46, 23, 75, 47],
- [10, 54, 24, 35, 55, 25],
- [19, 45, 15, 35, 46, 16], // 33
- [17, 145, 115, 1, 146, 116],
- [14, 74, 46, 21, 75, 47],
- [29, 54, 24, 19, 55, 25],
- [11, 45, 15, 46, 46, 16], // 34
- [13, 145, 115, 6, 146, 116],
- [14, 74, 46, 23, 75, 47],
- [44, 54, 24, 7, 55, 25],
- [59, 46, 16, 1, 47, 17], // 35
- [12, 151, 121, 7, 152, 122],
- [12, 75, 47, 26, 76, 48],
- [39, 54, 24, 14, 55, 25],
- [22, 45, 15, 41, 46, 16], // 36
- [6, 151, 121, 14, 152, 122],
- [6, 75, 47, 34, 76, 48],
- [46, 54, 24, 10, 55, 25],
- [2, 45, 15, 64, 46, 16], // 37
- [17, 152, 122, 4, 153, 123],
- [29, 74, 46, 14, 75, 47],
- [49, 54, 24, 10, 55, 25],
- [24, 45, 15, 46, 46, 16], // 38
- [4, 152, 122, 18, 153, 123],
- [13, 74, 46, 32, 75, 47],
- [48, 54, 24, 14, 55, 25],
- [42, 45, 15, 32, 46, 16], // 39
- [20, 147, 117, 4, 148, 118],
- [40, 75, 47, 7, 76, 48],
- [43, 54, 24, 22, 55, 25],
- [10, 45, 15, 67, 46, 16], // 40
- [19, 148, 118, 6, 149, 119],
- [18, 75, 47, 31, 76, 48],
- [34, 54, 24, 34, 55, 25],
- [20, 45, 15, 61, 46, 16]
- ]
- QRRSBlock.getRSBlocks = function (typeNumber, errorCorrectLevel) {
- var rsBlock = QRRSBlock.getRsBlockTable(
- typeNumber,
- errorCorrectLevel
- )
- if (rsBlock == undefined) {
- throw new Error(
- 'bad rs block @ typeNumber:' +
- typeNumber +
- '/errorCorrectLevel:' +
- errorCorrectLevel
- )
- }
- var length = rsBlock.length / 3
- var list = new Array()
- for (var i = 0; i < length; i++) {
- var count = rsBlock[i * 3 + 0]
- var totalCount = rsBlock[i * 3 + 1]
- var dataCount = rsBlock[i * 3 + 2]
- for (var j = 0; j < count; j++) {
- list.push(new QRRSBlock(totalCount, dataCount))
- }
- }
- return list
- }
- QRRSBlock.getRsBlockTable = function (typeNumber, errorCorrectLevel) {
- switch (errorCorrectLevel) {
- case ECL.L:
- return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0]
- case ECL.M:
- return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1]
- case ECL.Q:
- return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2]
- case ECL.H:
- return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3]
- default:
- return undefined
- }
- }
- var RSBlock$1 = QRRSBlock
- function QRBitBuffer() {
- this.buffer = new Array()
- this.length = 0
- }
- QRBitBuffer.prototype = {
- get: function get(index) {
- var bufIndex = Math.floor(index / 8)
- return ((this.buffer[bufIndex] >>> (7 - (index % 8))) & 1) == 1
- },
- put: function put(num, length) {
- for (var i = 0; i < length; i++) {
- this.putBit(((num >>> (length - i - 1)) & 1) == 1)
- }
- },
- getLengthInBits: function getLengthInBits() {
- return this.length
- },
- putBit: function putBit(bit) {
- var bufIndex = Math.floor(this.length / 8)
- if (this.buffer.length <= bufIndex) {
- this.buffer.push(0)
- }
- if (bit) {
- this.buffer[bufIndex] |= 0x80 >>> this.length % 8
- }
- this.length++
- }
- }
- var BitBuffer$1 = QRBitBuffer
- var QRMath = {
- glog: function glog(n) {
- if (n < 1) {
- throw new Error('glog(' + n + ')')
- }
- return QRMath.LOG_TABLE[n]
- },
- gexp: function gexp(n) {
- while (n < 0) {
- n += 255
- }
- while (n >= 256) {
- n -= 255
- }
- return QRMath.EXP_TABLE[n]
- },
- EXP_TABLE: new Array(256),
- LOG_TABLE: new Array(256)
- }
- for (var i$4 = 0; i$4 < 8; i$4++) {
- QRMath.EXP_TABLE[i$4] = 1 << i$4
- }
- for (var i$4 = 8; i$4 < 256; i$4++) {
- QRMath.EXP_TABLE[i$4] =
- QRMath.EXP_TABLE[i$4 - 4] ^
- QRMath.EXP_TABLE[i$4 - 5] ^
- QRMath.EXP_TABLE[i$4 - 6] ^
- QRMath.EXP_TABLE[i$4 - 8]
- }
- for (var i$4 = 0; i$4 < 255; i$4++) {
- QRMath.LOG_TABLE[QRMath.EXP_TABLE[i$4]] = i$4
- }
- var math$2 = QRMath
- var math$1 = math$2
- function QRPolynomial(num, shift) {
- if (num.length == undefined) {
- throw new Error(num.length + '/' + shift)
- }
- var offset = 0
- while (offset < num.length && num[offset] == 0) {
- offset++
- }
- this.num = new Array(num.length - offset + shift)
- for (var i = 0; i < num.length - offset; i++) {
- this.num[i] = num[i + offset]
- }
- }
- QRPolynomial.prototype = {
- get: function get(index) {
- return this.num[index]
- },
- getLength: function getLength() {
- return this.num.length
- },
- multiply: function multiply(e) {
- var num = new Array(this.getLength() + e.getLength() - 1)
- for (var i = 0; i < this.getLength(); i++) {
- for (var j = 0; j < e.getLength(); j++) {
- num[i + j] ^= math$1.gexp(
- math$1.glog(this.get(i)) + math$1.glog(e.get(j))
- )
- }
- }
- return new QRPolynomial(num, 0)
- },
- mod: function mod(e) {
- if (this.getLength() - e.getLength() < 0) {
- return this
- }
- var ratio = math$1.glog(this.get(0)) - math$1.glog(e.get(0))
- var num = new Array(this.getLength())
- for (var i = 0; i < this.getLength(); i++) {
- num[i] = this.get(i)
- }
- for (var i = 0; i < e.getLength(); i++) {
- num[i] ^= math$1.gexp(math$1.glog(e.get(i)) + ratio)
- } // recursive call
- return new QRPolynomial(num, 0).mod(e)
- }
- }
- var Polynomial$2 = QRPolynomial
- var Mode = mode$1
- var Polynomial$1 = Polynomial$2
- var math = math$2
- var QRMaskPattern = {
- PATTERN000: 0,
- PATTERN001: 1,
- PATTERN010: 2,
- PATTERN011: 3,
- PATTERN100: 4,
- PATTERN101: 5,
- PATTERN110: 6,
- PATTERN111: 7
- }
- var QRUtil = {
- PATTERN_POSITION_TABLE: [
- [],
- [6, 18],
- [6, 22],
- [6, 26],
- [6, 30],
- [6, 34],
- [6, 22, 38],
- [6, 24, 42],
- [6, 26, 46],
- [6, 28, 50],
- [6, 30, 54],
- [6, 32, 58],
- [6, 34, 62],
- [6, 26, 46, 66],
- [6, 26, 48, 70],
- [6, 26, 50, 74],
- [6, 30, 54, 78],
- [6, 30, 56, 82],
- [6, 30, 58, 86],
- [6, 34, 62, 90],
- [6, 28, 50, 72, 94],
- [6, 26, 50, 74, 98],
- [6, 30, 54, 78, 102],
- [6, 28, 54, 80, 106],
- [6, 32, 58, 84, 110],
- [6, 30, 58, 86, 114],
- [6, 34, 62, 90, 118],
- [6, 26, 50, 74, 98, 122],
- [6, 30, 54, 78, 102, 126],
- [6, 26, 52, 78, 104, 130],
- [6, 30, 56, 82, 108, 134],
- [6, 34, 60, 86, 112, 138],
- [6, 30, 58, 86, 114, 142],
- [6, 34, 62, 90, 118, 146],
- [6, 30, 54, 78, 102, 126, 150],
- [6, 24, 50, 76, 102, 128, 154],
- [6, 28, 54, 80, 106, 132, 158],
- [6, 32, 58, 84, 110, 136, 162],
- [6, 26, 54, 82, 110, 138, 166],
- [6, 30, 58, 86, 114, 142, 170]
- ],
- G15:
- (1 << 10) |
- (1 << 8) |
- (1 << 5) |
- (1 << 4) |
- (1 << 2) |
- (1 << 1) |
- (1 << 0),
- G18:
- (1 << 12) |
- (1 << 11) |
- (1 << 10) |
- (1 << 9) |
- (1 << 8) |
- (1 << 5) |
- (1 << 2) |
- (1 << 0),
- G15_MASK: (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1),
- getBCHTypeInfo: function getBCHTypeInfo(data) {
- var d = data << 10
- while (
- QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >=
- 0
- ) {
- d ^=
- QRUtil.G15 <<
- (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15))
- }
- return ((data << 10) | d) ^ QRUtil.G15_MASK
- },
- getBCHTypeNumber: function getBCHTypeNumber(data) {
- var d = data << 12
- while (
- QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >=
- 0
- ) {
- d ^=
- QRUtil.G18 <<
- (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18))
- }
- return (data << 12) | d
- },
- getBCHDigit: function getBCHDigit(data) {
- var digit = 0
- while (data != 0) {
- digit++
- data >>>= 1
- }
- return digit
- },
- getPatternPosition: function getPatternPosition(typeNumber) {
- return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1]
- },
- getMask: function getMask(maskPattern, i, j) {
- switch (maskPattern) {
- case QRMaskPattern.PATTERN000:
- return (i + j) % 2 == 0
- case QRMaskPattern.PATTERN001:
- return i % 2 == 0
- case QRMaskPattern.PATTERN010:
- return j % 3 == 0
- case QRMaskPattern.PATTERN011:
- return (i + j) % 3 == 0
- case QRMaskPattern.PATTERN100:
- return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0
- case QRMaskPattern.PATTERN101:
- return ((i * j) % 2) + ((i * j) % 3) == 0
- case QRMaskPattern.PATTERN110:
- return (((i * j) % 2) + ((i * j) % 3)) % 2 == 0
- case QRMaskPattern.PATTERN111:
- return (((i * j) % 3) + ((i + j) % 2)) % 2 == 0
- default:
- throw new Error('bad maskPattern:' + maskPattern)
- }
- },
- getErrorCorrectPolynomial: function getErrorCorrectPolynomial(
- errorCorrectLength
- ) {
- var a = new Polynomial$1([1], 0)
- for (var i = 0; i < errorCorrectLength; i++) {
- a = a.multiply(new Polynomial$1([1, math.gexp(i)], 0))
- }
- return a
- },
- getLengthInBits: function getLengthInBits(mode, type) {
- if (1 <= type && type < 10) {
- // 1 - 9
- switch (mode) {
- case Mode.MODE_NUMBER:
- return 10
- case Mode.MODE_ALPHA_NUM:
- return 9
- case Mode.MODE_8BIT_BYTE:
- return 8
- case Mode.MODE_KANJI:
- return 8
- default:
- throw new Error('mode:' + mode)
- }
- } else if (type < 27) {
- // 10 - 26
- switch (mode) {
- case Mode.MODE_NUMBER:
- return 12
- case Mode.MODE_ALPHA_NUM:
- return 11
- case Mode.MODE_8BIT_BYTE:
- return 16
- case Mode.MODE_KANJI:
- return 10
- default:
- throw new Error('mode:' + mode)
- }
- } else if (type < 41) {
- // 27 - 40
- switch (mode) {
- case Mode.MODE_NUMBER:
- return 14
- case Mode.MODE_ALPHA_NUM:
- return 13
- case Mode.MODE_8BIT_BYTE:
- return 16
- case Mode.MODE_KANJI:
- return 12
- default:
- throw new Error('mode:' + mode)
- }
- } else {
- throw new Error('type:' + type)
- }
- },
- getLostPoint: function getLostPoint(qrCode) {
- var moduleCount = qrCode.getModuleCount()
- var lostPoint = 0 // LEVEL1
- for (var row = 0; row < moduleCount; row++) {
- for (var col = 0; col < moduleCount; col++) {
- var sameCount = 0
- var dark = qrCode.isDark(row, col)
- for (var r = -1; r <= 1; r++) {
- if (row + r < 0 || moduleCount <= row + r) {
- continue
- }
- for (var c = -1; c <= 1; c++) {
- if (col + c < 0 || moduleCount <= col + c) {
- continue
- }
- if (r == 0 && c == 0) {
- continue
- }
- if (dark == qrCode.isDark(row + r, col + c)) {
- sameCount++
- }
- }
- }
- if (sameCount > 5) {
- lostPoint += 3 + sameCount - 5
- }
- }
- } // LEVEL2
- for (var row = 0; row < moduleCount - 1; row++) {
- for (var col = 0; col < moduleCount - 1; col++) {
- var count = 0
- if (qrCode.isDark(row, col)) count++
- if (qrCode.isDark(row + 1, col)) count++
- if (qrCode.isDark(row, col + 1)) count++
- if (qrCode.isDark(row + 1, col + 1)) count++
- if (count == 0 || count == 4) {
- lostPoint += 3
- }
- }
- } // LEVEL3
- for (var row = 0; row < moduleCount; row++) {
- for (var col = 0; col < moduleCount - 6; col++) {
- if (
- qrCode.isDark(row, col) &&
- !qrCode.isDark(row, col + 1) &&
- qrCode.isDark(row, col + 2) &&
- qrCode.isDark(row, col + 3) &&
- qrCode.isDark(row, col + 4) &&
- !qrCode.isDark(row, col + 5) &&
- qrCode.isDark(row, col + 6)
- ) {
- lostPoint += 40
- }
- }
- }
- for (var col = 0; col < moduleCount; col++) {
- for (var row = 0; row < moduleCount - 6; row++) {
- if (
- qrCode.isDark(row, col) &&
- !qrCode.isDark(row + 1, col) &&
- qrCode.isDark(row + 2, col) &&
- qrCode.isDark(row + 3, col) &&
- qrCode.isDark(row + 4, col) &&
- !qrCode.isDark(row + 5, col) &&
- qrCode.isDark(row + 6, col)
- ) {
- lostPoint += 40
- }
- }
- } // LEVEL4
- var darkCount = 0
- for (var col = 0; col < moduleCount; col++) {
- for (var row = 0; row < moduleCount; row++) {
- if (qrCode.isDark(row, col)) {
- darkCount++
- }
- }
- }
- var ratio =
- Math.abs((100 * darkCount) / moduleCount / moduleCount - 50) / 5
- lostPoint += ratio * 10
- return lostPoint
- }
- }
- var util$1 = QRUtil
- var BitByte = _8BitByte
- var RSBlock = RSBlock$1
- var BitBuffer = BitBuffer$1
- var util = util$1
- var Polynomial = Polynomial$2
- function QRCode$1(typeNumber, errorCorrectLevel) {
- this.typeNumber = typeNumber
- this.errorCorrectLevel = errorCorrectLevel
- this.modules = null
- this.moduleCount = 0
- this.dataCache = null
- this.dataList = []
- } // for client side minification
- var proto = QRCode$1.prototype
- proto.addData = function (data) {
- var newData = new BitByte(data)
- this.dataList.push(newData)
- this.dataCache = null
- }
- proto.isDark = function (row, col) {
- if (
- row < 0 ||
- this.moduleCount <= row ||
- col < 0 ||
- this.moduleCount <= col
- ) {
- throw new Error(row + ',' + col)
- }
- return this.modules[row][col]
- }
- proto.getModuleCount = function () {
- return this.moduleCount
- }
- proto.make = function () {
- // Calculate automatically typeNumber if provided is < 1
- if (this.typeNumber < 1) {
- var typeNumber = 1
- for (typeNumber = 1; typeNumber < 40; typeNumber++) {
- var rsBlocks = RSBlock.getRSBlocks(
- typeNumber,
- this.errorCorrectLevel
- )
- var buffer = new BitBuffer()
- var totalDataCount = 0
- for (var i = 0; i < rsBlocks.length; i++) {
- totalDataCount += rsBlocks[i].dataCount
- }
- for (var i = 0; i < this.dataList.length; i++) {
- var data = this.dataList[i]
- buffer.put(data.mode, 4)
- buffer.put(
- data.getLength(),
- util.getLengthInBits(data.mode, typeNumber)
- )
- data.write(buffer)
- }
- if (buffer.getLengthInBits() <= totalDataCount * 8) break
- }
- this.typeNumber = typeNumber
- }
- this.makeImpl(false, this.getBestMaskPattern())
- }
- proto.makeImpl = function (test, maskPattern) {
- this.moduleCount = this.typeNumber * 4 + 17
- this.modules = new Array(this.moduleCount)
- for (var row = 0; row < this.moduleCount; row++) {
- this.modules[row] = new Array(this.moduleCount)
- for (var col = 0; col < this.moduleCount; col++) {
- this.modules[row][col] = null //(col + row) % 3;
- }
- }
- this.setupPositionProbePattern(0, 0)
- this.setupPositionProbePattern(this.moduleCount - 7, 0)
- this.setupPositionProbePattern(0, this.moduleCount - 7)
- this.setupPositionAdjustPattern()
- this.setupTimingPattern()
- this.setupTypeInfo(test, maskPattern)
- if (this.typeNumber >= 7) {
- this.setupTypeNumber(test)
- }
- if (this.dataCache == null) {
- this.dataCache = QRCode$1.createData(
- this.typeNumber,
- this.errorCorrectLevel,
- this.dataList
- )
- }
- this.mapData(this.dataCache, maskPattern)
- }
- proto.setupPositionProbePattern = function (row, col) {
- for (var r = -1; r <= 7; r++) {
- if (row + r <= -1 || this.moduleCount <= row + r) continue
- for (var c = -1; c <= 7; c++) {
- if (col + c <= -1 || this.moduleCount <= col + c) continue
- if (
- (0 <= r && r <= 6 && (c == 0 || c == 6)) ||
- (0 <= c && c <= 6 && (r == 0 || r == 6)) ||
- (2 <= r && r <= 4 && 2 <= c && c <= 4)
- ) {
- this.modules[row + r][col + c] = true
- } else {
- this.modules[row + r][col + c] = false
- }
- }
- }
- }
- proto.getBestMaskPattern = function () {
- var minLostPoint = 0
- var pattern = 0
- for (var i = 0; i < 8; i++) {
- this.makeImpl(true, i)
- var lostPoint = util.getLostPoint(this)
- if (i == 0 || minLostPoint > lostPoint) {
- minLostPoint = lostPoint
- pattern = i
- }
- }
- return pattern
- }
- proto.createMovieClip = function (target_mc, instance_name, depth) {
- var qr_mc = target_mc.createEmptyMovieClip(instance_name, depth)
- var cs = 1
- this.make()
- for (var row = 0; row < this.modules.length; row++) {
- var y = row * cs
- for (var col = 0; col < this.modules[row].length; col++) {
- var x = col * cs
- var dark = this.modules[row][col]
- if (dark) {
- qr_mc.beginFill(0, 100)
- qr_mc.moveTo(x, y)
- qr_mc.lineTo(x + cs, y)
- qr_mc.lineTo(x + cs, y + cs)
- qr_mc.lineTo(x, y + cs)
- qr_mc.endFill()
- }
- }
- }
- return qr_mc
- }
- proto.setupTimingPattern = function () {
- for (var r = 8; r < this.moduleCount - 8; r++) {
- if (this.modules[r][6] != null) {
- continue
- }
- this.modules[r][6] = r % 2 == 0
- }
- for (var c = 8; c < this.moduleCount - 8; c++) {
- if (this.modules[6][c] != null) {
- continue
- }
- this.modules[6][c] = c % 2 == 0
- }
- }
- proto.setupPositionAdjustPattern = function () {
- var pos = util.getPatternPosition(this.typeNumber)
- for (var i = 0; i < pos.length; i++) {
- for (var j = 0; j < pos.length; j++) {
- var row = pos[i]
- var col = pos[j]
- if (this.modules[row][col] != null) {
- continue
- }
- for (var r = -2; r <= 2; r++) {
- for (var c = -2; c <= 2; c++) {
- if (
- r == -2 ||
- r == 2 ||
- c == -2 ||
- c == 2 ||
- (r == 0 && c == 0)
- ) {
- this.modules[row + r][col + c] = true
- } else {
- this.modules[row + r][col + c] = false
- }
- }
- }
- }
- }
- }
- proto.setupTypeNumber = function (test) {
- var bits = util.getBCHTypeNumber(this.typeNumber)
- for (var i = 0; i < 18; i++) {
- var mod = !test && ((bits >> i) & 1) == 1
- this.modules[Math.floor(i / 3)][
- (i % 3) + this.moduleCount - 8 - 3
- ] = mod
- }
- for (var i = 0; i < 18; i++) {
- var mod = !test && ((bits >> i) & 1) == 1
- this.modules[(i % 3) + this.moduleCount - 8 - 3][
- Math.floor(i / 3)
- ] = mod
- }
- }
- proto.setupTypeInfo = function (test, maskPattern) {
- var data = (this.errorCorrectLevel << 3) | maskPattern
- var bits = util.getBCHTypeInfo(data) // vertical
- for (var i = 0; i < 15; i++) {
- var mod = !test && ((bits >> i) & 1) == 1
- if (i < 6) {
- this.modules[i][8] = mod
- } else if (i < 8) {
- this.modules[i + 1][8] = mod
- } else {
- this.modules[this.moduleCount - 15 + i][8] = mod
- }
- } // horizontal
- for (var i = 0; i < 15; i++) {
- var mod = !test && ((bits >> i) & 1) == 1
- if (i < 8) {
- this.modules[8][this.moduleCount - i - 1] = mod
- } else if (i < 9) {
- this.modules[8][15 - i - 1 + 1] = mod
- } else {
- this.modules[8][15 - i - 1] = mod
- }
- } // fixed module
- this.modules[this.moduleCount - 8][8] = !test
- }
- proto.mapData = function (data, maskPattern) {
- var inc = -1
- var row = this.moduleCount - 1
- var bitIndex = 7
- var byteIndex = 0
- for (var col = this.moduleCount - 1; col > 0; col -= 2) {
- if (col == 6) col--
- while (true) {
- for (var c = 0; c < 2; c++) {
- if (this.modules[row][col - c] == null) {
- var dark = false
- if (byteIndex < data.length) {
- dark = ((data[byteIndex] >>> bitIndex) & 1) == 1
- }
- var mask = util.getMask(maskPattern, row, col - c)
- if (mask) {
- dark = !dark
- }
- this.modules[row][col - c] = dark
- bitIndex--
- if (bitIndex == -1) {
- byteIndex++
- bitIndex = 7
- }
- }
- }
- row += inc
- if (row < 0 || this.moduleCount <= row) {
- row -= inc
- inc = -inc
- break
- }
- }
- }
- }
- QRCode$1.PAD0 = 0xec
- QRCode$1.PAD1 = 0x11
- QRCode$1.createData = function (
- typeNumber,
- errorCorrectLevel,
- dataList
- ) {
- var rsBlocks = RSBlock.getRSBlocks(typeNumber, errorCorrectLevel)
- var buffer = new BitBuffer()
- for (var i = 0; i < dataList.length; i++) {
- var data = dataList[i]
- buffer.put(data.mode, 4)
- buffer.put(
- data.getLength(),
- util.getLengthInBits(data.mode, typeNumber)
- )
- data.write(buffer)
- } // calc num max data.
- var totalDataCount = 0
- for (var i = 0; i < rsBlocks.length; i++) {
- totalDataCount += rsBlocks[i].dataCount
- }
- if (buffer.getLengthInBits() > totalDataCount * 8) {
- throw new Error(
- 'code length overflow. (' +
- buffer.getLengthInBits() +
- '>' +
- totalDataCount * 8 +
- ')'
- )
- } // end code
- if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {
- buffer.put(0, 4)
- } // padding
- while (buffer.getLengthInBits() % 8 != 0) {
- buffer.putBit(false)
- } // padding
- while (true) {
- if (buffer.getLengthInBits() >= totalDataCount * 8) {
- break
- }
- buffer.put(QRCode$1.PAD0, 8)
- if (buffer.getLengthInBits() >= totalDataCount * 8) {
- break
- }
- buffer.put(QRCode$1.PAD1, 8)
- }
- return QRCode$1.createBytes(buffer, rsBlocks)
- }
- QRCode$1.createBytes = function (buffer, rsBlocks) {
- var offset = 0
- var maxDcCount = 0
- var maxEcCount = 0
- var dcdata = new Array(rsBlocks.length)
- var ecdata = new Array(rsBlocks.length)
- for (var r = 0; r < rsBlocks.length; r++) {
- var dcCount = rsBlocks[r].dataCount
- var ecCount = rsBlocks[r].totalCount - dcCount
- maxDcCount = Math.max(maxDcCount, dcCount)
- maxEcCount = Math.max(maxEcCount, ecCount)
- dcdata[r] = new Array(dcCount)
- for (var i = 0; i < dcdata[r].length; i++) {
- dcdata[r][i] = 0xff & buffer.buffer[i + offset]
- }
- offset += dcCount
- var rsPoly = util.getErrorCorrectPolynomial(ecCount)
- var rawPoly = new Polynomial(dcdata[r], rsPoly.getLength() - 1)
- var modPoly = rawPoly.mod(rsPoly)
- ecdata[r] = new Array(rsPoly.getLength() - 1)
- for (var i = 0; i < ecdata[r].length; i++) {
- var modIndex = i + modPoly.getLength() - ecdata[r].length
- ecdata[r][i] = modIndex >= 0 ? modPoly.get(modIndex) : 0
- }
- }
- var totalCodeCount = 0
- for (var i = 0; i < rsBlocks.length; i++) {
- totalCodeCount += rsBlocks[i].totalCount
- }
- var data = new Array(totalCodeCount)
- var index = 0
- for (var i = 0; i < maxDcCount; i++) {
- for (var r = 0; r < rsBlocks.length; r++) {
- if (i < dcdata[r].length) {
- data[index++] = dcdata[r][i]
- }
- }
- }
- for (var i = 0; i < maxEcCount; i++) {
- for (var r = 0; r < rsBlocks.length; r++) {
- if (i < ecdata[r].length) {
- data[index++] = ecdata[r][i]
- }
- }
- }
- return data
- }
- var QRCode_1 = QRCode$1
- var defaultErrorCorrectLevel = 'H' // Thanks the `qrcode.react`
- var SUPPORTS_PATH2D = (function () {
- try {
- new Path2D().addPath(new Path2D())
- } catch (e) {
- return false
- }
- return true
- })()
- function QRCode(data, level) {
- var errorCorrectLevel = ErrorCorrectLevel[level] // We'll use type===-1 to force QRCode to automatically pick the best type
- var qrcode = new QRCode_1(-1, errorCorrectLevel)
- qrcode.addData(toUTF8String(data))
- qrcode.make()
- return qrcode
- }
- function validErrorCorrectLevel(level) {
- return level in ErrorCorrectLevel
- }
- /**
- * Encode UTF16 to UTF8.
- * See: http://jonisalonen.com/2012/from-utf-16-to-utf-8-in-javascript/
- * @param str {string}
- * @returns {string}
- */ function toUTF8String(str) {
- var utf8Str = ''
- for (var i = 0; i < str.length; i++) {
- var charCode = str.charCodeAt(i)
- if (charCode < 0x0080) {
- utf8Str += String.fromCharCode(charCode)
- } else if (charCode < 0x0800) {
- utf8Str += String.fromCharCode(0xc0 | (charCode >> 6))
- utf8Str += String.fromCharCode(0x80 | (charCode & 0x3f))
- } else if (charCode < 0xd800 || charCode >= 0xe000) {
- utf8Str += String.fromCharCode(0xe0 | (charCode >> 12))
- utf8Str += String.fromCharCode(0x80 | ((charCode >> 6) & 0x3f))
- utf8Str += String.fromCharCode(0x80 | (charCode & 0x3f))
- } else {
- // surrogate pair
- i++ // UTF-16 encodes 0x10000-0x10FFFF by
- // subtracting 0x10000 and splitting the
- // 20 bits of 0x0-0xFFFFF into two halves
- charCode =
- 0x10000 +
- (((charCode & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff))
- utf8Str += String.fromCharCode(0xf0 | (charCode >> 18))
- utf8Str += String.fromCharCode(0x80 | ((charCode >> 12) & 0x3f))
- utf8Str += String.fromCharCode(0x80 | ((charCode >> 6) & 0x3f))
- utf8Str += String.fromCharCode(0x80 | (charCode & 0x3f))
- }
- }
- return utf8Str
- }
- function generatePath(modules, margin) {
- if (margin === void 0) {
- margin = 0
- }
- var ops = []
- modules.forEach(function (row, y) {
- var start = null
- row.forEach(function (cell, x) {
- if (!cell && start !== null) {
- // M0 0h7v1H0z injects the space with the move and drops the comma,
- // saving a char per operation
- ops.push(
- 'M' +
- (start + margin) +
- ' ' +
- (y + margin) +
- 'h' +
- (x - start) +
- 'v1H' +
- (start + margin) +
- 'z'
- )
- start = null
- return
- } // end of row, clean up or skip
- if (x === row.length - 1) {
- if (!cell) {
- // We would have closed the op above already so this can only mean
- // 2+ light modules in a row.
- return
- }
- if (start === null) {
- // Just a single dark module.
- ops.push(
- 'M' +
- (x + margin) +
- ',' +
- (y + margin) +
- ' h1v1H' +
- (x + margin) +
- 'z'
- )
- } else {
- // Otherwise finish the current line.
- ops.push(
- 'M' +
- (start + margin) +
- ',' +
- (y + margin) +
- ' h' +
- (x + 1 - start) +
- 'v1H' +
- (start + margin) +
- 'z'
- )
- }
- return
- }
- if (cell && start === null) {
- start = x
- }
- })
- })
- return ops.join('')
- }
- var QRCodeProps = {
- value: { type: String, required: true, default: '' },
- size: { type: Number, default: 100 },
- level: {
- type: String,
- default: defaultErrorCorrectLevel,
- validator: function validator(l) {
- return validErrorCorrectLevel(l)
- }
- },
- background: { type: String, default: '#fff' },
- foreground: { type: String, default: '#000' },
- margin: { type: Number, required: false, default: 0 }
- }
- var QRCodeVueProps = _assign$(_assign$({}, QRCodeProps), {
- renderAs: {
- type: String,
- required: false,
- default: 'canvas',
- validator: function validator(as) {
- return ['canvas', 'svg'].indexOf(as) > -1
- }
- }
- })
- var QRCodeSvg = defineComponent({
- name: 'QRCodeSvg',
- props: QRCodeProps,
- setup: function setup(props) {
- var numCells = ref(0)
- var fgPath = ref('')
- var generate = function generate() {
- var value = props.value,
- level = props.level,
- margin = props.margin
- var cells = QRCode(value, level).modules
- numCells.value = cells.length + margin * 2 // Drawing strategy: instead of a rect per module, we're going to create a
- // single path for the dark modules and layer that on top of a light rect,
- // for a total of 2 DOM nodes. We pay a bit more in string concat but that's
- // way faster than DOM ops.
- // For level 1, 441 nodes -> 2
- // For level 40, 31329 -> 2
- fgPath.value = generatePath(cells, margin)
- }
- generate()
- onUpdated(generate)
- return function () {
- return h(
- 'svg',
- {
- width: props.size,
- height: props.size,
- 'shape-rendering': 'crispEdges',
- xmlns: 'http://www.w3.org/2000/svg',
- viewBox: '0 0 ' + numCells.value + ' ' + numCells.value
- },
- [
- h('path', {
- fill: props.background,
- d:
- 'M0,0 h' + numCells.value + 'v' + numCells.value + 'H0z'
- }),
- h('path', { fill: props.foreground, d: fgPath.value })
- ]
- )
- }
- }
- })
- var QRCodeCanvas = defineComponent({
- name: 'QRCodeCanvas',
- props: QRCodeProps,
- setup: function setup(props) {
- var canvasEl = ref(null)
- var generate = function generate() {
- var value = props.value,
- level = props.level,
- size = props.size,
- margin = props.margin,
- background = props.background,
- foreground = props.foreground
- var cells = QRCode(value, level).modules
- var numCells = cells.length + margin * 2
- var canvas = canvasEl.value
- if (!canvas) {
- return
- }
- var ctx = canvas.getContext('2d')
- if (!ctx) {
- return
- }
- var devicePixelRatio = window.devicePixelRatio || 1
- var scale = (size / numCells) * devicePixelRatio
- canvas.height = canvas.width = size * devicePixelRatio
- ctx.scale(scale, scale)
- ctx.fillStyle = background
- ctx.fillRect(0, 0, numCells, numCells)
- ctx.fillStyle = foreground
- if (SUPPORTS_PATH2D) {
- ctx.fill(new Path2D(generatePath(cells, margin)))
- } else {
- cells.forEach(function (row, rdx) {
- row.forEach(function (cell, cdx) {
- if (cell) {
- ctx.fillRect(cdx + margin, rdx + margin, 1, 1)
- }
- })
- })
- }
- }
- onMounted(generate)
- onUpdated(generate)
- return function () {
- return h('canvas', {
- ref: canvasEl,
- style: { width: props.size + 'px', height: props.size + 'px' }
- })
- }
- }
- })
- var QrcodeVue = defineComponent({
- name: 'Qrcode',
- render: function render() {
- var _a = this.$props,
- renderAs = _a.renderAs,
- value = _a.value,
- _size = _a.size,
- _margin = _a.margin,
- _level = _a.level,
- background = _a.background,
- foreground = _a.foreground
- var size = _size >>> 0
- var margin = _margin >>> 0
- var level = validErrorCorrectLevel(_level)
- ? _level
- : defaultErrorCorrectLevel
- return h(renderAs === 'svg' ? QRCodeSvg : QRCodeCanvas, {
- value: value,
- size: size,
- margin: margin,
- level: level,
- background: background,
- foreground: foreground
- })
- },
- props: QRCodeVueProps
- })
- /*!
- * html2canvas 1.4.1 <https://html2canvas.hertzen.com>
- * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>
- * Released under MIT License
- */ /*! *****************************************************************************
- Copyright (c) Microsoft Corporation.
- Permission to use, copy, modify, and/or distribute this software for any
- purpose with or without fee is hereby granted.
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
- ***************************************************************************** */ /* global Reflect, Promise */ var _extendStatics =
- function extendStatics(d, b) {
- _extendStatics =
- Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array &&
- function (d, b) {
- d.__proto__ = b
- }) ||
- function (d, b) {
- for (var p in b) {
- if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]
- }
- }
- return _extendStatics(d, b)
- }
- function __extends(d, b) {
- if (typeof b !== 'function' && b !== null)
- throw new TypeError(
- 'Class extends value ' +
- String(b) +
- ' is not a constructor or null'
- )
- _extendStatics(d, b)
- function __() {
- this.constructor = d
- }
- d.prototype =
- b === null
- ? Object.create(b)
- : ((__.prototype = b.prototype), new __())
- }
- var _assign = function __assign() {
- _assign =
- Object.assign ||
- function __assign(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i]
- for (var p in s) {
- if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]
- }
- }
- return t
- }
- return _assign.apply(this, arguments)
- }
- function __awaiter(thisArg, _arguments, P, generator) {
- function adopt(value) {
- return value instanceof P
- ? value
- : new P(function (resolve) {
- resolve(value)
- })
- }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) {
- try {
- step(generator.next(value))
- } catch (e) {
- reject(e)
- }
- }
- function rejected(value) {
- try {
- step(generator['throw'](value))
- } catch (e) {
- reject(e)
- }
- }
- function step(result) {
- result.done
- ? resolve(result.value)
- : adopt(result.value).then(fulfilled, rejected)
- }
- step(
- (generator = generator.apply(thisArg, _arguments || [])).next()
- )
- })
- }
- function __generator(thisArg, body) {
- var _ = {
- label: 0,
- sent: function sent() {
- if (t[0] & 1) throw t[1]
- return t[1]
- },
- trys: [],
- ops: []
- },
- f,
- y,
- t,
- g
- return (
- (g = { next: verb(0), throw: verb(1), return: verb(2) }),
- typeof Symbol === 'function' &&
- (g[Symbol.iterator] = function () {
- return this
- }),
- g
- )
- function verb(n) {
- return function (v) {
- return step([n, v])
- }
- }
- function step(op) {
- if (f) throw new TypeError('Generator is already executing.')
- while (_) {
- try {
- if (
- ((f = 1),
- y &&
- (t =
- op[0] & 2
- ? y['return']
- : op[0]
- ? y['throw'] || ((t = y['return']) && t.call(y), 0)
- : y.next) &&
- !(t = t.call(y, op[1])).done)
- )
- return t
- if (((y = 0), t)) op = [op[0] & 2, t.value]
- switch (op[0]) {
- case 0:
- case 1:
- t = op
- break
- case 4:
- _.label++
- return { value: op[1], done: false }
- case 5:
- _.label++
- y = op[1]
- op = [0]
- continue
- case 7:
- op = _.ops.pop()
- _.trys.pop()
- continue
- default:
- if (
- !((t = _.trys),
- (t = t.length > 0 && t[t.length - 1])) &&
- (op[0] === 6 || op[0] === 2)
- ) {
- _ = 0
- continue
- }
- if (
- op[0] === 3 &&
- (!t || (op[1] > t[0] && op[1] < t[3]))
- ) {
- _.label = op[1]
- break
- }
- if (op[0] === 6 && _.label < t[1]) {
- _.label = t[1]
- t = op
- break
- }
- if (t && _.label < t[2]) {
- _.label = t[2]
- _.ops.push(op)
- break
- }
- if (t[2]) _.ops.pop()
- _.trys.pop()
- continue
- }
- op = body.call(thisArg, _)
- } catch (e) {
- op = [6, e]
- y = 0
- } finally {
- f = t = 0
- }
- }
- if (op[0] & 5) throw op[1]
- return { value: op[0] ? op[1] : void 0, done: true }
- }
- }
- function __spreadArray(to, from, pack) {
- if (pack || arguments.length === 2)
- for (var i = 0, l = from.length, ar; i < l; i++) {
- if (ar || !(i in from)) {
- if (!ar) ar = Array.prototype.slice.call(from, 0, i)
- ar[i] = from[i]
- }
- }
- return to.concat(ar || from)
- }
- var Bounds = /** @class */ (function () {
- function Bounds(left, top, width, height) {
- this.left = left
- this.top = top
- this.width = width
- this.height = height
- }
- Bounds.prototype.add = function (x, y, w, h) {
- return new Bounds(
- this.left + x,
- this.top + y,
- this.width + w,
- this.height + h
- )
- }
- Bounds.fromClientRect = function (context, clientRect) {
- return new Bounds(
- clientRect.left + context.windowBounds.left,
- clientRect.top + context.windowBounds.top,
- clientRect.width,
- clientRect.height
- )
- }
- Bounds.fromDOMRectList = function (context, domRectList) {
- var domRect = Array.from(domRectList).find(function (rect) {
- return rect.width !== 0
- })
- return domRect
- ? new Bounds(
- domRect.left + context.windowBounds.left,
- domRect.top + context.windowBounds.top,
- domRect.width,
- domRect.height
- )
- : Bounds.EMPTY
- }
- Bounds.EMPTY = new Bounds(0, 0, 0, 0)
- return Bounds
- })()
- var parseBounds = function parseBounds(context, node) {
- return Bounds.fromClientRect(context, node.getBoundingClientRect())
- }
- var parseDocumentSize = function parseDocumentSize(document) {
- var body = document.body
- var documentElement = document.documentElement
- if (!body || !documentElement) {
- throw new Error('Unable to get document size')
- }
- var width = Math.max(
- Math.max(body.scrollWidth, documentElement.scrollWidth),
- Math.max(body.offsetWidth, documentElement.offsetWidth),
- Math.max(body.clientWidth, documentElement.clientWidth)
- )
- var height = Math.max(
- Math.max(body.scrollHeight, documentElement.scrollHeight),
- Math.max(body.offsetHeight, documentElement.offsetHeight),
- Math.max(body.clientHeight, documentElement.clientHeight)
- )
- return new Bounds(0, 0, width, height)
- }
- /*
- * css-line-break 2.1.0 <https://github.com/niklasvh/css-line-break#readme>
- * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>
- * Released under MIT License
- */ var toCodePoints$1 = function toCodePoints$1(str) {
- var codePoints = []
- var i = 0
- var length = str.length
- while (i < length) {
- var value = str.charCodeAt(i++)
- if (value >= 0xd800 && value <= 0xdbff && i < length) {
- var extra = str.charCodeAt(i++)
- if ((extra & 0xfc00) === 0xdc00) {
- codePoints.push(
- ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000
- )
- } else {
- codePoints.push(value)
- i--
- }
- } else {
- codePoints.push(value)
- }
- }
- return codePoints
- }
- var fromCodePoint$1 = function fromCodePoint$1() {
- var codePoints = []
- for (var _i = 0; _i < arguments.length; _i++) {
- codePoints[_i] = arguments[_i]
- }
- if (String.fromCodePoint) {
- return String.fromCodePoint.apply(String, codePoints)
- }
- var length = codePoints.length
- if (!length) {
- return ''
- }
- var codeUnits = []
- var index = -1
- var result = ''
- while (++index < length) {
- var codePoint = codePoints[index]
- if (codePoint <= 0xffff) {
- codeUnits.push(codePoint)
- } else {
- codePoint -= 0x10000
- codeUnits.push(
- (codePoint >> 10) + 0xd800,
- (codePoint % 0x400) + 0xdc00
- )
- }
- if (index + 1 === length || codeUnits.length > 0x4000) {
- result += String.fromCharCode.apply(String, codeUnits)
- codeUnits.length = 0
- }
- }
- return result
- }
- var chars$2 =
- 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' // Use a lookup table to find the index.
- var lookup$2 =
- typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256)
- for (var i$2 = 0; i$2 < chars$2.length; i$2++) {
- lookup$2[chars$2.charCodeAt(i$2)] = i$2
- }
- /*
- * utrie 1.0.2 <https://github.com/niklasvh/utrie>
- * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>
- * Released under MIT License
- */ var chars$1$1 =
- 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' // Use a lookup table to find the index.
- var lookup$1$1 =
- typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256)
- for (var i$1$1 = 0; i$1$1 < chars$1$1.length; i$1$1++) {
- lookup$1$1[chars$1$1.charCodeAt(i$1$1)] = i$1$1
- }
- var decode$1 = function decode$1(base64) {
- var bufferLength = base64.length * 0.75,
- len = base64.length,
- i,
- p = 0,
- encoded1,
- encoded2,
- encoded3,
- encoded4
- if (base64[base64.length - 1] === '=') {
- bufferLength--
- if (base64[base64.length - 2] === '=') {
- bufferLength--
- }
- }
- var buffer =
- typeof ArrayBuffer !== 'undefined' &&
- typeof Uint8Array !== 'undefined' &&
- typeof Uint8Array.prototype.slice !== 'undefined'
- ? new ArrayBuffer(bufferLength)
- : new Array(bufferLength)
- var bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer)
- for (i = 0; i < len; i += 4) {
- encoded1 = lookup$1$1[base64.charCodeAt(i)]
- encoded2 = lookup$1$1[base64.charCodeAt(i + 1)]
- encoded3 = lookup$1$1[base64.charCodeAt(i + 2)]
- encoded4 = lookup$1$1[base64.charCodeAt(i + 3)]
- bytes[p++] = (encoded1 << 2) | (encoded2 >> 4)
- bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2)
- bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63)
- }
- return buffer
- }
- var polyUint16Array$1 = function polyUint16Array$1(buffer) {
- var length = buffer.length
- var bytes = []
- for (var i = 0; i < length; i += 2) {
- bytes.push((buffer[i + 1] << 8) | buffer[i])
- }
- return bytes
- }
- var polyUint32Array$1 = function polyUint32Array$1(buffer) {
- var length = buffer.length
- var bytes = []
- for (var i = 0; i < length; i += 4) {
- bytes.push(
- (buffer[i + 3] << 24) |
- (buffer[i + 2] << 16) |
- (buffer[i + 1] << 8) |
- buffer[i]
- )
- }
- return bytes
- }
- /** Shift size for getting the index-2 table offset. */ var UTRIE2_SHIFT_2$1 = 5
- /** Shift size for getting the index-1 table offset. */ var UTRIE2_SHIFT_1$1 =
- 6 + 5
- /**
- * Shift size for shifting left the index array values.
- * Increases possible data size with 16-bit index values at the cost
- * of compactability.
- * This requires data blocks to be aligned by UTRIE2_DATA_GRANULARITY.
- */ var UTRIE2_INDEX_SHIFT$1 = 2
- /**
- * Difference between the two shift sizes,
- * for getting an index-1 offset from an index-2 offset. 6=11-5
- */ var UTRIE2_SHIFT_1_2$1 = UTRIE2_SHIFT_1$1 - UTRIE2_SHIFT_2$1
- /**
- * The part of the index-2 table for U+D800..U+DBFF stores values for
- * lead surrogate code _units_ not code _points_.
- * Values for lead surrogate code _points_ are indexed with this portion of the table.
- * Length=32=0x20=0x400>>UTRIE2_SHIFT_2. (There are 1024=0x400 lead surrogates.)
- */ var UTRIE2_LSCP_INDEX_2_OFFSET$1 = 0x10000 >> UTRIE2_SHIFT_2$1
- /** Number of entries in a data block. 32=0x20 */ var UTRIE2_DATA_BLOCK_LENGTH$1 =
- 1 << UTRIE2_SHIFT_2$1
- /** Mask for getting the lower bits for the in-data-block offset. */ var UTRIE2_DATA_MASK$1 =
- UTRIE2_DATA_BLOCK_LENGTH$1 - 1
- var UTRIE2_LSCP_INDEX_2_LENGTH$1 = 0x400 >> UTRIE2_SHIFT_2$1
- /** Count the lengths of both BMP pieces. 2080=0x820 */ var UTRIE2_INDEX_2_BMP_LENGTH$1 =
- UTRIE2_LSCP_INDEX_2_OFFSET$1 + UTRIE2_LSCP_INDEX_2_LENGTH$1
- /**
- * The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820.
- * Length 32=0x20 for lead bytes C0..DF, regardless of UTRIE2_SHIFT_2.
- */ var UTRIE2_UTF8_2B_INDEX_2_OFFSET$1 = UTRIE2_INDEX_2_BMP_LENGTH$1
- var UTRIE2_UTF8_2B_INDEX_2_LENGTH$1 = 0x800 >> 6
- /* U+0800 is the first code point after 2-byte UTF-8 */ /**
- * The index-1 table, only used for supplementary code points, at offset 2112=0x840.
- * Variable length, for code points up to highStart, where the last single-value range starts.
- * Maximum length 512=0x200=0x100000>>UTRIE2_SHIFT_1.
- * (For 0x100000 supplementary code points U+10000..U+10ffff.)
- *
- * The part of the index-2 table for supplementary code points starts
- * after this index-1 table.
- *
- * Both the index-1 table and the following part of the index-2 table
- * are omitted completely if there is only BMP data.
- */ var UTRIE2_INDEX_1_OFFSET$1 =
- UTRIE2_UTF8_2B_INDEX_2_OFFSET$1 + UTRIE2_UTF8_2B_INDEX_2_LENGTH$1
- /**
- * Number of index-1 entries for the BMP. 32=0x20
- * This part of the index-1 table is omitted from the serialized form.
- */ var UTRIE2_OMITTED_BMP_INDEX_1_LENGTH$1 =
- 0x10000 >> UTRIE2_SHIFT_1$1
- /** Number of entries in an index-2 block. 64=0x40 */ var UTRIE2_INDEX_2_BLOCK_LENGTH$1 =
- 1 << UTRIE2_SHIFT_1_2$1
- /** Mask for getting the lower bits for the in-index-2-block offset. */ var UTRIE2_INDEX_2_MASK$1 =
- UTRIE2_INDEX_2_BLOCK_LENGTH$1 - 1
- var slice16$1 = function slice16$1(view, start, end) {
- if (view.slice) {
- return view.slice(start, end)
- }
- return new Uint16Array(Array.prototype.slice.call(view, start, end))
- }
- var slice32$1 = function slice32$1(view, start, end) {
- if (view.slice) {
- return view.slice(start, end)
- }
- return new Uint32Array(Array.prototype.slice.call(view, start, end))
- }
- var createTrieFromBase64$1 = function createTrieFromBase64$1(
- base64,
- _byteLength
- ) {
- var buffer = decode$1(base64)
- var view32 = Array.isArray(buffer)
- ? polyUint32Array$1(buffer)
- : new Uint32Array(buffer)
- var view16 = Array.isArray(buffer)
- ? polyUint16Array$1(buffer)
- : new Uint16Array(buffer)
- var headerLength = 24
- var index = slice16$1(view16, headerLength / 2, view32[4] / 2)
- var data =
- view32[5] === 2
- ? slice16$1(view16, (headerLength + view32[4]) / 2)
- : slice32$1(view32, Math.ceil((headerLength + view32[4]) / 4))
- return new Trie$1(
- view32[0],
- view32[1],
- view32[2],
- view32[3],
- index,
- data
- )
- }
- var Trie$1 = /** @class */ (function () {
- function Trie(
- initialValue,
- errorValue,
- highStart,
- highValueIndex,
- index,
- data
- ) {
- this.initialValue = initialValue
- this.errorValue = errorValue
- this.highStart = highStart
- this.highValueIndex = highValueIndex
- this.index = index
- this.data = data
- }
- /**
- * Get the value for a code point as stored in the Trie.
- *
- * @param codePoint the code point
- * @return the value
- */ Trie.prototype.get = function (codePoint) {
- var ix
- if (codePoint >= 0) {
- if (
- codePoint < 0x0d800 ||
- (codePoint > 0x0dbff && codePoint <= 0x0ffff)
- ) {
- // Ordinary BMP code point, excluding leading surrogates.
- // BMP uses a single level lookup. BMP index starts at offset 0 in the Trie2 index.
- // 16 bit data is stored in the index array itself.
- ix = this.index[codePoint >> UTRIE2_SHIFT_2$1]
- ix =
- (ix << UTRIE2_INDEX_SHIFT$1) +
- (codePoint & UTRIE2_DATA_MASK$1)
- return this.data[ix]
- }
- if (codePoint <= 0xffff) {
- // Lead Surrogate Code Point. A Separate index section is stored for
- // lead surrogate code units and code points.
- // The main index has the code unit data.
- // For this function, we need the code point data.
- // Note: this expression could be refactored for slightly improved efficiency, but
- // surrogate code points will be so rare in practice that it's not worth it.
- ix =
- this.index[
- UTRIE2_LSCP_INDEX_2_OFFSET$1 +
- ((codePoint - 0xd800) >> UTRIE2_SHIFT_2$1)
- ]
- ix =
- (ix << UTRIE2_INDEX_SHIFT$1) +
- (codePoint & UTRIE2_DATA_MASK$1)
- return this.data[ix]
- }
- if (codePoint < this.highStart) {
- // Supplemental code point, use two-level lookup.
- ix =
- UTRIE2_INDEX_1_OFFSET$1 -
- UTRIE2_OMITTED_BMP_INDEX_1_LENGTH$1 +
- (codePoint >> UTRIE2_SHIFT_1$1)
- ix = this.index[ix]
- ix += (codePoint >> UTRIE2_SHIFT_2$1) & UTRIE2_INDEX_2_MASK$1
- ix = this.index[ix]
- ix =
- (ix << UTRIE2_INDEX_SHIFT$1) +
- (codePoint & UTRIE2_DATA_MASK$1)
- return this.data[ix]
- }
- if (codePoint <= 0x10ffff) {
- return this.data[this.highValueIndex]
- }
- } // Fall through. The code point is outside of the legal range of 0..0x10ffff.
- return this.errorValue
- }
- return Trie
- })()
- /*
- * base64-arraybuffer 1.0.2 <https://github.com/niklasvh/base64-arraybuffer>
- * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>
- * Released under MIT License
- */ var chars$3 =
- 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' // Use a lookup table to find the index.
- var lookup$3 =
- typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256)
- for (var i$3 = 0; i$3 < chars$3.length; i$3++) {
- lookup$3[chars$3.charCodeAt(i$3)] = i$3
- }
- var base64$1 =
- 'KwAAAAAAAAAACA4AUD0AADAgAAACAAAAAAAIABAAGABAAEgAUABYAGAAaABgAGgAYgBqAF8AZwBgAGgAcQB5AHUAfQCFAI0AlQCdAKIAqgCyALoAYABoAGAAaABgAGgAwgDKAGAAaADGAM4A0wDbAOEA6QDxAPkAAQEJAQ8BFwF1AH0AHAEkASwBNAE6AUIBQQFJAVEBWQFhAWgBcAF4ATAAgAGGAY4BlQGXAZ8BpwGvAbUBvQHFAc0B0wHbAeMB6wHxAfkBAQIJAvEBEQIZAiECKQIxAjgCQAJGAk4CVgJeAmQCbAJ0AnwCgQKJApECmQKgAqgCsAK4ArwCxAIwAMwC0wLbAjAA4wLrAvMC+AIAAwcDDwMwABcDHQMlAy0DNQN1AD0DQQNJA0kDSQNRA1EDVwNZA1kDdQB1AGEDdQBpA20DdQN1AHsDdQCBA4kDkQN1AHUAmQOhA3UAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AKYDrgN1AHUAtgO+A8YDzgPWAxcD3gPjA+sD8wN1AHUA+wMDBAkEdQANBBUEHQQlBCoEFwMyBDgEYABABBcDSARQBFgEYARoBDAAcAQzAXgEgASIBJAEdQCXBHUAnwSnBK4EtgS6BMIEyAR1AHUAdQB1AHUAdQCVANAEYABgAGAAYABgAGAAYABgANgEYADcBOQEYADsBPQE/AQEBQwFFAUcBSQFLAU0BWQEPAVEBUsFUwVbBWAAYgVgAGoFcgV6BYIFigWRBWAAmQWfBaYFYABgAGAAYABgAKoFYACxBbAFuQW6BcEFwQXHBcEFwQXPBdMF2wXjBeoF8gX6BQIGCgYSBhoGIgYqBjIGOgZgAD4GRgZMBmAAUwZaBmAAYABgAGAAYABgAGAAYABgAGAAYABgAGIGYABpBnAGYABgAGAAYABgAGAAYABgAGAAYAB4Bn8GhQZgAGAAYAB1AHcDFQSLBmAAYABgAJMGdQA9A3UAmwajBqsGqwaVALMGuwbDBjAAywbSBtIG1QbSBtIG0gbSBtIG0gbdBuMG6wbzBvsGAwcLBxMHAwcbByMHJwcsBywHMQcsB9IGOAdAB0gHTgfSBkgHVgfSBtIG0gbSBtIG0gbSBtIG0gbSBiwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdgAGAALAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdbB2MHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB2kH0gZwB64EdQB1AHUAdQB1AHUAdQB1AHUHfQdgAIUHjQd1AHUAlQedB2AAYAClB6sHYACzB7YHvgfGB3UAzgfWBzMB3gfmB1EB7gf1B/0HlQENAQUIDQh1ABUIHQglCBcDLQg1CD0IRQhNCEEDUwh1AHUAdQBbCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIcAh3CHoIMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIgggwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAALAcsBywHLAcsBywHLAcsBywHLAcsB4oILAcsB44I0gaWCJ4Ipgh1AHUAqgiyCHUAdQB1AHUAdQB1AHUAdQB1AHUAtwh8AXUAvwh1AMUIyQjRCNkI4AjoCHUAdQB1AO4I9gj+CAYJDgkTCS0HGwkjCYIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiAAIAAAAFAAYABgAGIAXwBgAHEAdQBFAJUAogCyAKAAYABgAEIA4ABGANMA4QDxAMEBDwE1AFwBLAE6AQEBUQF4QkhCmEKoQrhCgAHIQsAB0MLAAcABwAHAAeDC6ABoAHDCwMMAAcABwAHAAdDDGMMAAcAB6MM4wwjDWMNow3jDaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAEjDqABWw6bDqABpg6gAaABoAHcDvwOPA+gAaABfA/8DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DpcPAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcAB9cPKwkyCToJMAB1AHUAdQBCCUoJTQl1AFUJXAljCWcJawkwADAAMAAwAHMJdQB2CX4JdQCECYoJjgmWCXUAngkwAGAAYABxAHUApgn3A64JtAl1ALkJdQDACTAAMAAwADAAdQB1AHUAdQB1AHUAdQB1AHUAowYNBMUIMAAwADAAMADICcsJ0wnZCRUE4QkwAOkJ8An4CTAAMAB1AAAKvwh1AAgKDwoXCh8KdQAwACcKLgp1ADYKqAmICT4KRgowADAAdQB1AE4KMAB1AFYKdQBeCnUAZQowADAAMAAwADAAMAAwADAAMAAVBHUAbQowADAAdQC5CXUKMAAwAHwBxAijBogEMgF9CoQKiASMCpQKmgqIBKIKqgquCogEDQG2Cr4KxgrLCjAAMADTCtsKCgHjCusK8Qr5CgELMAAwADAAMAB1AIsECQsRC3UANAEZCzAAMAAwADAAMAB1ACELKQswAHUANAExCzkLdQBBC0kLMABRC1kLMAAwADAAMAAwADAAdQBhCzAAMAAwAGAAYABpC3ELdwt/CzAAMACHC4sLkwubC58Lpwt1AK4Ltgt1APsDMAAwADAAMAAwADAAMAAwAL4LwwvLC9IL1wvdCzAAMADlC+kL8Qv5C/8LSQswADAAMAAwADAAMAAwADAAMAAHDDAAMAAwADAAMAAODBYMHgx1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1ACYMMAAwADAAdQB1AHUALgx1AHUAdQB1AHUAdQA2DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AD4MdQBGDHUAdQB1AHUAdQB1AEkMdQB1AHUAdQB1AFAMMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQBYDHUAdQB1AF8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUA+wMVBGcMMAAwAHwBbwx1AHcMfwyHDI8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAYABgAJcMMAAwADAAdQB1AJ8MlQClDDAAMACtDCwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB7UMLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AA0EMAC9DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAsBywHLAcsBywHLAcsBywHLQcwAMEMyAwsBywHLAcsBywHLAcsBywHLAcsBywHzAwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1ANQM2QzhDDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMABgAGAAYABgAGAAYABgAOkMYADxDGAA+AwADQYNYABhCWAAYAAODTAAMAAwADAAFg1gAGAAHg37AzAAMAAwADAAYABgACYNYAAsDTQNPA1gAEMNPg1LDWAAYABgAGAAYABgAGAAYABgAGAAUg1aDYsGVglhDV0NcQBnDW0NdQ15DWAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAlQCBDZUAiA2PDZcNMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAnw2nDTAAMAAwADAAMAAwAHUArw23DTAAMAAwADAAMAAwADAAMAAwADAAMAB1AL8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQDHDTAAYABgAM8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA1w11ANwNMAAwAD0B5A0wADAAMAAwADAAMADsDfQN/A0EDgwOFA4wABsOMAAwADAAMAAwADAAMAAwANIG0gbSBtIG0gbSBtIG0gYjDigOwQUuDsEFMw7SBjoO0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGQg5KDlIOVg7SBtIGXg5lDm0OdQ7SBtIGfQ6EDooOjQ6UDtIGmg6hDtIG0gaoDqwO0ga0DrwO0gZgAGAAYADEDmAAYAAkBtIGzA5gANIOYADaDokO0gbSBt8O5w7SBu8O0gb1DvwO0gZgAGAAxA7SBtIG0gbSBtIGYABgAGAAYAAED2AAsAUMD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHJA8sBywHLAcsBywHLAccDywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywPLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAc0D9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHPA/SBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gYUD0QPlQCVAJUAMAAwADAAMACVAJUAlQCVAJUAlQCVAEwPMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA//8EAAQABAAEAAQABAAEAAQABAANAAMAAQABAAIABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQACgATABcAHgAbABoAHgAXABYAEgAeABsAGAAPABgAHABLAEsASwBLAEsASwBLAEsASwBLABgAGAAeAB4AHgATAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYAGwASAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAWAA0AEQAeAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAFAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJABYAGgAbABsAGwAeAB0AHQAeAE8AFwAeAA0AHgAeABoAGwBPAE8ADgBQAB0AHQAdAE8ATwAXAE8ATwBPABYAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAFAATwBAAE8ATwBPAEAATwBQAFAATwBQAB4AHgAeAB4AHgAeAB0AHQAdAB0AHgAdAB4ADgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgBQAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkACQAJAAkACQAJAAkABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAFAAHgAeAB4AKwArAFAAUABQAFAAGABQACsAKwArACsAHgAeAFAAHgBQAFAAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUAAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAYAA0AKwArAB4AHgAbACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAB4ABAAEAB4ABAAEABMABAArACsAKwArACsAKwArACsAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAKwArACsAKwBWAFYAVgBWAB4AHgArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AGgAaABoAGAAYAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQAEwAEACsAEwATAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABLAEsASwBLAEsASwBLAEsASwBLABoAGQAZAB4AUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABMAUAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABABQAFAABAAEAB4ABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUAAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAFAABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQAUABQAB4AHgAYABMAUAArACsABAAbABsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAFAABAAEAAQABAAEAFAABAAEAAQAUAAEAAQABAAEAAQAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArACsAHgArAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAUAAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEAA0ADQBLAEsASwBLAEsASwBLAEsASwBLAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUAArACsAKwBQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABABQACsAKwArACsAKwArACsAKwAEACsAKwArACsAUABQACsAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUAAaABoAUABQAFAAUABQAEwAHgAbAFAAHgAEACsAKwAEAAQABAArAFAAUABQAFAAUABQACsAKwArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQACsAUABQACsAKwAEACsABAAEAAQABAAEACsAKwArACsABAAEACsAKwAEAAQABAArACsAKwAEACsAKwArACsAKwArACsAUABQAFAAUAArAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLAAQABABQAFAAUAAEAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAArACsAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAB4AGwArACsAKwArACsAKwArAFAABAAEAAQABAAEAAQAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAKwArACsAKwArAAQABAAEACsAKwArACsAUABQACsAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAB4AUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAAQAUAArAFAAUABQAFAAUABQACsAKwArAFAAUABQACsAUABQAFAAUAArACsAKwBQAFAAKwBQACsAUABQACsAKwArAFAAUAArACsAKwBQAFAAUAArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAAQABAAEAAQABAArACsAKwAEAAQABAArAAQABAAEAAQAKwArAFAAKwArACsAKwArACsABAArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAHgAeAB4AHgAeAB4AGwAeACsAKwArACsAKwAEAAQABAAEAAQAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAUAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAAEACsAKwArACsAKwArACsABAAEACsAUABQAFAAKwArACsAKwArAFAAUAAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwAOAFAAUABQAFAAUABQAFAAHgBQAAQABAAEAA4AUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAKwArAAQAUAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAAEACsAKwArACsAKwArACsABAAEACsAKwArACsAKwArACsAUAArAFAAUAAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwBQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABABQAB4AKwArACsAKwBQAFAAUAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQABoAUABQAFAAUABQAFAAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQACsAUAArACsAUABQAFAAUABQAFAAUAArACsAKwAEACsAKwArACsABAAEAAQABAAEAAQAKwAEACsABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgAqACsAKwArACsAGwBcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAeAEsASwBLAEsASwBLAEsASwBLAEsADQANACsAKwArACsAKwBcAFwAKwBcACsAXABcAFwAXABcACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAXAArAFwAXABcAFwAXABcAFwAXABcAFwAKgBcAFwAKgAqACoAKgAqACoAKgAqACoAXAArACsAXABcAFwAXABcACsAXAArACoAKgAqACoAKgAqACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwBcAFwAXABcAFAADgAOAA4ADgAeAA4ADgAJAA4ADgANAAkAEwATABMAEwATAAkAHgATAB4AHgAeAAQABAAeAB4AHgAeAB4AHgBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQAFAADQAEAB4ABAAeAAQAFgARABYAEQAEAAQAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAAQABAAEAAQADQAEAAQAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAA0ADQAeAB4AHgAeAB4AHgAEAB4AHgAeAB4AHgAeACsAHgAeAA4ADgANAA4AHgAeAB4AHgAeAAkACQArACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgBcAEsASwBLAEsASwBLAEsASwBLAEsADQANAB4AHgAeAB4AXABcAFwAXABcAFwAKgAqACoAKgBcAFwAXABcACoAKgAqAFwAKgAqACoAXABcACoAKgAqACoAKgAqACoAXABcAFwAKgAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKgAqAFwAKgBLAEsASwBLAEsASwBLAEsASwBLACoAKgAqACoAKgAqAFAAUABQAFAAUABQACsAUAArACsAKwArACsAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgBQAFAAUABQAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAKwBQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsABAAEAAQAHgANAB4AHgAeAB4AHgAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUAArACsADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAWABEAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAA0ADQANAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAANAA0AKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUAArAAQABAArACsAKwArACsAKwArACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqAA0ADQAVAFwADQAeAA0AGwBcACoAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwAeAB4AEwATAA0ADQAOAB4AEwATAB4ABAAEAAQACQArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUAAEAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAHgArACsAKwATABMASwBLAEsASwBLAEsASwBLAEsASwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAXABcAFwAXABcACsAKwArACsAKwArACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAXAArACsAKwAqACoAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsAHgAeAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKwAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKwArAAQASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACoAKgAqACoAKgAqACoAXAAqACoAKgAqACoAKgArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABABQAFAAUABQAFAAUABQACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwANAA0AHgANAA0ADQANAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AKwArACsABAAEAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwAeAB4AHgAeAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArAA0ADQANAA0ADQBLAEsASwBLAEsASwBLAEsASwBLACsAKwArAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAA0ADQBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUAAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArAAQABAAEAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAAQAUABQAFAAUABQAFAABABQAFAABAAEAAQAUAArACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAKwBQACsAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQACsAKwAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQACsAHgAeAB4AHgAeAB4AHgAOAB4AKwANAA0ADQANAA0ADQANAAkADQANAA0ACAAEAAsABAAEAA0ACQANAA0ADAAdAB0AHgAXABcAFgAXABcAFwAWABcAHQAdAB4AHgAUABQAFAANAAEAAQAEAAQABAAEAAQACQAaABoAGgAaABoAGgAaABoAHgAXABcAHQAVABUAHgAeAB4AHgAeAB4AGAAWABEAFQAVABUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ADQAeAA0ADQANAA0AHgANAA0ADQAHAB4AHgAeAB4AKwAEAAQABAAEAAQABAAEAAQABAAEAFAAUAArACsATwBQAFAAUABQAFAAHgAeAB4AFgARAE8AUABPAE8ATwBPAFAAUABQAFAAUAAeAB4AHgAWABEAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArABsAGwAbABsAGwAbABsAGgAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGgAbABsAGwAbABoAGwAbABoAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAHgAeAFAAGgAeAB0AHgBQAB4AGgAeAB4AHgAeAB4AHgAeAB4AHgBPAB4AUAAbAB4AHgBQAFAAUABQAFAAHgAeAB4AHQAdAB4AUAAeAFAAHgBQAB4AUABPAFAAUAAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAHgBQAFAAUABQAE8ATwBQAFAAUABQAFAATwBQAFAATwBQAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAFAAUABQAFAATwBPAE8ATwBPAE8ATwBPAE8ATwBQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABPAB4AHgArACsAKwArAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHQAdAB4AHgAeAB0AHQAeAB4AHQAeAB4AHgAdAB4AHQAbABsAHgAdAB4AHgAeAB4AHQAeAB4AHQAdAB0AHQAeAB4AHQAeAB0AHgAdAB0AHQAdAB0AHQAeAB0AHgAeAB4AHgAeAB0AHQAdAB0AHgAeAB4AHgAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB0AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAdAB0AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAWABEAHgAeAB4AHgAeAB4AHQAeAB4AHgAeAB4AHgAeACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAFAAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeAB4AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AHQAdAB0AHgAeAB0AHgAeAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlAB4AHQAdAB4AHgAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AJQAlAB0AHQAlAB4AJQAlACUAIAAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAeAB4AHgAeAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAdAB0AHQAeAB0AJQAdAB0AHgAdAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAdAB0AHQAdACUAHgAlACUAJQAdACUAJQAdAB0AHQAlACUAHQAdACUAHQAdACUAJQAlAB4AHQAeAB4AHgAeAB0AHQAlAB0AHQAdAB0AHQAdACUAJQAlACUAJQAdACUAJQAgACUAHQAdACUAJQAlACUAJQAlACUAJQAeAB4AHgAlACUAIAAgACAAIAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AFwAXABcAFwAXABcAHgATABMAJQAeAB4AHgAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARABYAEQAWABEAFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAeAB4AKwArACsAKwArABMADQANAA0AUAATAA0AUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUAANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAA0ADQANAA0ADQANAA0ADQAeAA0AFgANAB4AHgAXABcAHgAeABcAFwAWABEAFgARABYAEQAWABEADQANAA0ADQATAFAADQANAB4ADQANAB4AHgAeAB4AHgAMAAwADQANAA0AHgANAA0AFgANAA0ADQANAA0ADQANAA0AHgANAB4ADQANAB4AHgAeACsAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArAA0AEQARACUAJQBHAFcAVwAWABEAFgARABYAEQAWABEAFgARACUAJQAWABEAFgARABYAEQAWABEAFQAWABEAEQAlAFcAVwBXAFcAVwBXAFcAVwBXAAQABAAEAAQABAAEACUAVwBXAFcAVwA2ACUAJQBXAFcAVwBHAEcAJQAlACUAKwBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBRAFcAUQBXAFEAVwBXAFcAVwBXAFcAUQBXAFcAVwBXAFcAVwBRAFEAKwArAAQABAAVABUARwBHAFcAFQBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBRAFcAVwBXAFcAVwBXAFEAUQBXAFcAVwBXABUAUQBHAEcAVwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwAlACUAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACsAKwArACsAKwArACsAKwArACsAKwArAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBPAE8ATwBPAE8ATwBPAE8AJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADQATAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQAHgBQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAeAA0ADQANAA0ADQArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAAQAUABQAFAABABQAFAAUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAeAB4AHgAeAAQAKwArACsAUABQAFAAUABQAFAAHgAeABoAHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADgAOABMAEwArACsAKwArACsAKwArACsABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUAAeAB4AHgBQAA4AUABQAAQAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAB4AWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYACsAKwArAAQAHgAeAB4AHgAeAB4ADQANAA0AHgAeAB4AHgArAFAASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArAB4AHgBcAFwAXABcAFwAKgBcAFwAXABcAFwAXABcAFwAXABcAEsASwBLAEsASwBLAEsASwBLAEsAXABcAFwAXABcACsAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAFAAUABQAAQAUABQAFAAUABQAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAHgANAA0ADQBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAKgAqACoAXABcACoAKgBcAFwAXABcAFwAKgAqAFwAKgBcACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAA0ADQBQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQADQAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAVABVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBUAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVACsAKwArACsAKwArACsAKwArACsAKwArAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAKwArACsAKwBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAKwArACsAKwAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArACsAKwArAFYABABWAFYAVgBWAFYAVgBWAFYAVgBWAB4AVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgArAFYAVgBWAFYAVgArAFYAKwBWAFYAKwBWAFYAKwBWAFYAVgBWAFYAVgBWAFYAVgBWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAEQAWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAaAB4AKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAARABEAGAAYABMAEwAWABEAFAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACUAJQAlACUAJQAWABEAFgARABYAEQAWABEAFgARABYAEQAlACUAFgARACUAJQAlACUAJQAlACUAEQAlABEAKwAVABUAEwATACUAFgARABYAEQAWABEAJQAlACUAJQAlACUAJQAlACsAJQAbABoAJQArACsAKwArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAcAKwATACUAJQAbABoAJQAlABYAEQAlACUAEQAlABEAJQBXAFcAVwBXAFcAVwBXAFcAVwBXABUAFQAlACUAJQATACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXABYAJQARACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAWACUAEQAlABYAEQARABYAEQARABUAVwBRAFEAUQBRAFEAUQBRAFEAUQBRAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcARwArACsAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXACsAKwBXAFcAVwBXAFcAVwArACsAVwBXAFcAKwArACsAGgAbACUAJQAlABsAGwArAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAAQAB0AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsADQANAA0AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAQAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAA0AUABQAFAAUAArACsAKwArAFAAUABQAFAAUABQAFAAUAANAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAKwArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArACsAKwBQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAUABQAFAAUABQAAQABAAEACsABAAEACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAKwBQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAA0ADQANAA0ADQANAA0ADQAeACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAArACsAKwArAFAAUABQAFAAUAANAA0ADQANAA0ADQAUACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsADQANAA0ADQANAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAAQABAAEAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArAAQABAANACsAKwBQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAB4AHgAeAB4AHgArACsAKwArACsAKwAEAAQABAAEAAQABAAEAA0ADQAeAB4AHgAeAB4AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwAeACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsASwBLAEsASwBLAEsASwBLAEsASwANAA0ADQANAFAABAAEAFAAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAeAA4AUAArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAADQANAB4ADQAEAAQABAAEAB4ABAAEAEsASwBLAEsASwBLAEsASwBLAEsAUAAOAFAADQANAA0AKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAA0AHgANAA0AHgAEACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAA0AKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQACsABAAEAFAABAAEAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAUAArACsAKwArACsAKwAEACsAKwArACsAKwBQAFAAUABQAFAABAAEACsAKwAEAAQABAAEAAQABAAEACsAKwArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABABQAFAAUABQAA0ADQANAA0AHgBLAEsASwBLAEsASwBLAEsASwBLAA0ADQArAB4ABABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAFAAUAAeAFAAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABAAEAAQADgANAA0AEwATAB4AHgAeAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAFAAUABQAFAABAAEACsAKwAEAA0ADQAeAFAAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKwArACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBcAFwADQANAA0AKgBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQAKwAEAAQAKwArAAQABAAEAAQAUAAEAFAABAAEAA0ADQANACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABABQAA4AUAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAOAB4ADQANAA0ADQAOAB4ABAArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA0ADQANAFAADgAOAA4ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAFAADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAOABMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAArACsAKwAEACsABAAEACsABAAEAAQABAAEAAQABABQAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwAEAAQAKwAEAAQABAAEAAQAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAaABoAGgAaAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABIAEgAQwBDAEMAUABQAFAAUABDAFAAUABQAEgAQwBIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABDAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAJAAkACQAJAAkACQAJABYAEQArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwANAA0AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAANACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQANAB4AHgAeAB4AHgAeAFAAUABQAFAADQAeACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAA0AHgAeACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAARwBHABUARwAJACsAKwArACsAKwArACsAKwArACsAKwAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUQBRAFEAKwArACsAKwArACsAKwArACsAKwArACsAKwBRAFEAUQBRACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArACsAHgAEAAQADQAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAQABAAEAAQABAAeAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQAHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQAFAAKwArAFAAKwArAFAAUAArACsAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUAArAFAAUABQAFAAUABQAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAHgAeAFAAUABQAFAAUAArAFAAKwArACsAUABQAFAAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeACsAKwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4ABAAeAB4AHgAeAB4AHgAeAB4AHgAeAAQAHgAeAA0ADQANAA0AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAAQAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArAAQABAAEAAQABAAEAAQAKwAEAAQAKwAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwBQAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArABsAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAB4AHgAeAB4ABAAEAAQABAAEAAQABABQACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArABYAFgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAGgBQAFAAUAAaAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQACsAKwBQACsAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwBQACsAUAArACsAKwArACsAKwBQACsAKwArACsAUAArAFAAKwBQACsAUABQAFAAKwBQAFAAKwBQACsAKwBQACsAUAArAFAAKwBQACsAUAArAFAAUAArAFAAKwArAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUAArAFAAUABQAFAAKwBQACsAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAKwBQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AJQAlACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeACUAJQAlAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAlACUAJQAlACUAHgAlACUAJQAlACUAIAAgACAAJQAlACAAJQAlACAAIAAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACEAIQAhACEAIQAlACUAIAAgACUAJQAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAIAAlACUAJQAlACAAIAAgACUAIAAgACAAJQAlACUAJQAlACUAJQAgACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAlAB4AJQAeACUAJQAlACUAJQAgACUAJQAlACUAHgAlAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACAAIAAgACUAJQAlACAAIAAgACAAIAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABcAFwAXABUAFQAVAB4AHgAeAB4AJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAgACUAJQAgACUAJQAlACUAJQAlACUAJQAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAgACAAIAAgACAAIAAgACAAIAAgACUAJQAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAlACAAIAAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAgACAAIAAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAA=='
- var LETTER_NUMBER_MODIFIER = 50 // Non-tailorable Line Breaking Classes
- var BK = 1 // Cause a line break (after)
- var CR$1 = 2 // Cause a line break (after), except between CR and LF
- var LF$1 = 3 // Cause a line break (after)
- var CM = 4 // Prohibit a line break between the character and the preceding character
- var NL = 5 // Cause a line break (after)
- var WJ = 7 // Prohibit line breaks before and after
- var ZW = 8 // Provide a break opportunity
- var GL = 9 // Prohibit line breaks before and after
- var SP = 10 // Enable indirect line breaks
- var ZWJ$1 = 11 // Prohibit line breaks within joiner sequences
- // Break Opportunities
- var B2 = 12 // Provide a line break opportunity before and after the character
- var BA = 13 // Generally provide a line break opportunity after the character
- var BB = 14 // Generally provide a line break opportunity before the character
- var HY = 15 // Provide a line break opportunity after the character, except in numeric context
- var CB = 16 // Provide a line break opportunity contingent on additional information
- // Characters Prohibiting Certain Breaks
- var CL = 17 // Prohibit line breaks before
- var CP = 18 // Prohibit line breaks before
- var EX = 19 // Prohibit line breaks before
- var IN = 20 // Allow only indirect line breaks between pairs
- var NS = 21 // Allow only indirect line breaks before
- var OP = 22 // Prohibit line breaks after
- var QU = 23 // Act like they are both opening and closing
- // Numeric Context
- var IS = 24 // Prevent breaks after any and before numeric
- var NU = 25 // Form numeric expressions for line breaking purposes
- var PO = 26 // Do not break following a numeric expression
- var PR = 27 // Do not break in front of a numeric expression
- var SY = 28 // Prevent a break before; and allow a break after
- // Other Characters
- var AI = 29 // Act like AL when the resolvedEAW is N; otherwise; act as ID
- var AL = 30 // Are alphabetic characters or symbols that are used with alphabetic characters
- var CJ = 31 // Treat as NS or ID for strict or normal breaking.
- var EB = 32 // Do not break from following Emoji Modifier
- var EM = 33 // Do not break from preceding Emoji Base
- var H2 = 34 // Form Korean syllable blocks
- var H3 = 35 // Form Korean syllable blocks
- var HL = 36 // Do not break around a following hyphen; otherwise act as Alphabetic
- var ID = 37 // Break before or after; except in some numeric context
- var JL = 38 // Form Korean syllable blocks
- var JV = 39 // Form Korean syllable blocks
- var JT = 40 // Form Korean syllable blocks
- var RI$1 = 41 // Keep pairs together. For pairs; break before and after other classes
- var SA = 42 // Provide a line break opportunity contingent on additional, language-specific context analysis
- var XX = 43 // Have as yet unknown line breaking behavior or unassigned code positions
- var ea_OP = [0x2329, 0xff08]
- var BREAK_MANDATORY = '!'
- var BREAK_NOT_ALLOWED$1 = '×'
- var BREAK_ALLOWED$1 = '÷'
- var UnicodeTrie$1 = createTrieFromBase64$1(base64$1)
- var ALPHABETICS = [AL, HL]
- var HARD_LINE_BREAKS = [BK, CR$1, LF$1, NL]
- var SPACE$1 = [SP, ZW]
- var PREFIX_POSTFIX = [PR, PO]
- var LINE_BREAKS = HARD_LINE_BREAKS.concat(SPACE$1)
- var KOREAN_SYLLABLE_BLOCK = [JL, JV, JT, H2, H3]
- var HYPHEN = [HY, BA]
- var codePointsToCharacterClasses =
- function codePointsToCharacterClasses(codePoints, lineBreak) {
- if (lineBreak === void 0) {
- lineBreak = 'strict'
- }
- var types = []
- var indices = []
- var categories = []
- codePoints.forEach(function (codePoint, index) {
- var classType = UnicodeTrie$1.get(codePoint)
- if (classType > LETTER_NUMBER_MODIFIER) {
- categories.push(true)
- classType -= LETTER_NUMBER_MODIFIER
- } else {
- categories.push(false)
- }
- if (['normal', 'auto', 'loose'].indexOf(lineBreak) !== -1) {
- // U+2010, – U+2013, 〜 U+301C, ゠ U+30A0
- if (
- [0x2010, 0x2013, 0x301c, 0x30a0].indexOf(codePoint) !== -1
- ) {
- indices.push(index)
- return types.push(CB)
- }
- }
- if (classType === CM || classType === ZWJ$1) {
- // LB10 Treat any remaining combining mark or ZWJ as AL.
- if (index === 0) {
- indices.push(index)
- return types.push(AL)
- } // LB9 Do not break a combining character sequence; treat it as if it has the line breaking class of
- // the base character in all of the following rules. Treat ZWJ as if it were CM.
- var prev = types[index - 1]
- if (LINE_BREAKS.indexOf(prev) === -1) {
- indices.push(indices[index - 1])
- return types.push(prev)
- }
- indices.push(index)
- return types.push(AL)
- }
- indices.push(index)
- if (classType === CJ) {
- return types.push(lineBreak === 'strict' ? NS : ID)
- }
- if (classType === SA) {
- return types.push(AL)
- }
- if (classType === AI) {
- return types.push(AL)
- } // For supplementary characters, a useful default is to treat characters in the range 10000..1FFFD as AL
- // and characters in the ranges 20000..2FFFD and 30000..3FFFD as ID, until the implementation can be revised
- // to take into account the actual line breaking properties for these characters.
- if (classType === XX) {
- if (
- (codePoint >= 0x20000 && codePoint <= 0x2fffd) ||
- (codePoint >= 0x30000 && codePoint <= 0x3fffd)
- ) {
- return types.push(ID)
- } else {
- return types.push(AL)
- }
- }
- types.push(classType)
- })
- return [indices, types, categories]
- }
- var isAdjacentWithSpaceIgnored = function isAdjacentWithSpaceIgnored(
- a,
- b,
- currentIndex,
- classTypes
- ) {
- var current = classTypes[currentIndex]
- if (Array.isArray(a) ? a.indexOf(current) !== -1 : a === current) {
- var i = currentIndex
- while (i <= classTypes.length) {
- i++
- var next = classTypes[i]
- if (next === b) {
- return true
- }
- if (next !== SP) {
- break
- }
- }
- }
- if (current === SP) {
- var i = currentIndex
- while (i > 0) {
- i--
- var prev = classTypes[i]
- if (Array.isArray(a) ? a.indexOf(prev) !== -1 : a === prev) {
- var n = currentIndex
- while (n <= classTypes.length) {
- n++
- var next = classTypes[n]
- if (next === b) {
- return true
- }
- if (next !== SP) {
- break
- }
- }
- }
- if (prev !== SP) {
- break
- }
- }
- }
- return false
- }
- var previousNonSpaceClassType = function previousNonSpaceClassType(
- currentIndex,
- classTypes
- ) {
- var i = currentIndex
- while (i >= 0) {
- var type = classTypes[i]
- if (type === SP) {
- i--
- } else {
- return type
- }
- }
- return 0
- }
- var _lineBreakAtIndex = function _lineBreakAtIndex(
- codePoints,
- classTypes,
- indicies,
- index,
- forbiddenBreaks
- ) {
- if (indicies[index] === 0) {
- return BREAK_NOT_ALLOWED$1
- }
- var currentIndex = index - 1
- if (
- Array.isArray(forbiddenBreaks) &&
- forbiddenBreaks[currentIndex] === true
- ) {
- return BREAK_NOT_ALLOWED$1
- }
- var beforeIndex = currentIndex - 1
- var afterIndex = currentIndex + 1
- var current = classTypes[currentIndex] // LB4 Always break after hard line breaks.
- // LB5 Treat CR followed by LF, as well as CR, LF, and NL as hard line breaks.
- var before = beforeIndex >= 0 ? classTypes[beforeIndex] : 0
- var next = classTypes[afterIndex]
- if (current === CR$1 && next === LF$1) {
- return BREAK_NOT_ALLOWED$1
- }
- if (HARD_LINE_BREAKS.indexOf(current) !== -1) {
- return BREAK_MANDATORY
- } // LB6 Do not break before hard line breaks.
- if (HARD_LINE_BREAKS.indexOf(next) !== -1) {
- return BREAK_NOT_ALLOWED$1
- } // LB7 Do not break before spaces or zero width space.
- if (SPACE$1.indexOf(next) !== -1) {
- return BREAK_NOT_ALLOWED$1
- } // LB8 Break before any character following a zero-width space, even if one or more spaces intervene.
- if (previousNonSpaceClassType(currentIndex, classTypes) === ZW) {
- return BREAK_ALLOWED$1
- } // LB8a Do not break after a zero width joiner.
- if (UnicodeTrie$1.get(codePoints[currentIndex]) === ZWJ$1) {
- return BREAK_NOT_ALLOWED$1
- } // zwj emojis
- if (
- (current === EB || current === EM) &&
- UnicodeTrie$1.get(codePoints[afterIndex]) === ZWJ$1
- ) {
- return BREAK_NOT_ALLOWED$1
- } // LB11 Do not break before or after Word joiner and related characters.
- if (current === WJ || next === WJ) {
- return BREAK_NOT_ALLOWED$1
- } // LB12 Do not break after NBSP and related characters.
- if (current === GL) {
- return BREAK_NOT_ALLOWED$1
- } // LB12a Do not break before NBSP and related characters, except after spaces and hyphens.
- if ([SP, BA, HY].indexOf(current) === -1 && next === GL) {
- return BREAK_NOT_ALLOWED$1
- } // LB13 Do not break before ‘]’ or ‘!’ or ‘;’ or ‘/’, even after spaces.
- if ([CL, CP, EX, IS, SY].indexOf(next) !== -1) {
- return BREAK_NOT_ALLOWED$1
- } // LB14 Do not break after ‘[’, even after spaces.
- if (previousNonSpaceClassType(currentIndex, classTypes) === OP) {
- return BREAK_NOT_ALLOWED$1
- } // LB15 Do not break within ‘”[’, even with intervening spaces.
- if (isAdjacentWithSpaceIgnored(QU, OP, currentIndex, classTypes)) {
- return BREAK_NOT_ALLOWED$1
- } // LB16 Do not break between closing punctuation and a nonstarter (lb=NS), even with intervening spaces.
- if (
- isAdjacentWithSpaceIgnored([CL, CP], NS, currentIndex, classTypes)
- ) {
- return BREAK_NOT_ALLOWED$1
- } // LB17 Do not break within ‘——’, even with intervening spaces.
- if (isAdjacentWithSpaceIgnored(B2, B2, currentIndex, classTypes)) {
- return BREAK_NOT_ALLOWED$1
- } // LB18 Break after spaces.
- if (current === SP) {
- return BREAK_ALLOWED$1
- } // LB19 Do not break before or after quotation marks, such as ‘ ” ’.
- if (current === QU || next === QU) {
- return BREAK_NOT_ALLOWED$1
- } // LB20 Break before and after unresolved CB.
- if (next === CB || current === CB) {
- return BREAK_ALLOWED$1
- } // LB21 Do not break before hyphen-minus, other hyphens, fixed-width spaces, small kana, and other non-starters, or after acute accents.
- if ([BA, HY, NS].indexOf(next) !== -1 || current === BB) {
- return BREAK_NOT_ALLOWED$1
- } // LB21a Don't break after Hebrew + Hyphen.
- if (before === HL && HYPHEN.indexOf(current) !== -1) {
- return BREAK_NOT_ALLOWED$1
- } // LB21b Don’t break between Solidus and Hebrew letters.
- if (current === SY && next === HL) {
- return BREAK_NOT_ALLOWED$1
- } // LB22 Do not break before ellipsis.
- if (next === IN) {
- return BREAK_NOT_ALLOWED$1
- } // LB23 Do not break between digits and letters.
- if (
- (ALPHABETICS.indexOf(next) !== -1 && current === NU) ||
- (ALPHABETICS.indexOf(current) !== -1 && next === NU)
- ) {
- return BREAK_NOT_ALLOWED$1
- } // LB23a Do not break between numeric prefixes and ideographs, or between ideographs and numeric postfixes.
- if (
- (current === PR && [ID, EB, EM].indexOf(next) !== -1) ||
- ([ID, EB, EM].indexOf(current) !== -1 && next === PO)
- ) {
- return BREAK_NOT_ALLOWED$1
- } // LB24 Do not break between numeric prefix/postfix and letters, or between letters and prefix/postfix.
- if (
- (ALPHABETICS.indexOf(current) !== -1 &&
- PREFIX_POSTFIX.indexOf(next) !== -1) ||
- (PREFIX_POSTFIX.indexOf(current) !== -1 &&
- ALPHABETICS.indexOf(next) !== -1)
- ) {
- return BREAK_NOT_ALLOWED$1
- } // LB25 Do not break between the following pairs of classes relevant to numbers:
- if (
- // (PR | PO) × ( OP | HY )? NU
- ([PR, PO].indexOf(current) !== -1 &&
- (next === NU ||
- ([OP, HY].indexOf(next) !== -1 &&
- classTypes[afterIndex + 1] === NU))) || // ( OP | HY ) × NU
- ([OP, HY].indexOf(current) !== -1 && next === NU) || // NU × (NU | SY | IS)
- (current === NU && [NU, SY, IS].indexOf(next) !== -1)
- ) {
- return BREAK_NOT_ALLOWED$1
- } // NU (NU | SY | IS)* × (NU | SY | IS | CL | CP)
- if ([NU, SY, IS, CL, CP].indexOf(next) !== -1) {
- var prevIndex = currentIndex
- while (prevIndex >= 0) {
- var type = classTypes[prevIndex]
- if (type === NU) {
- return BREAK_NOT_ALLOWED$1
- } else if ([SY, IS].indexOf(type) !== -1) {
- prevIndex--
- } else {
- break
- }
- }
- } // NU (NU | SY | IS)* (CL | CP)? × (PO | PR))
- if ([PR, PO].indexOf(next) !== -1) {
- var prevIndex =
- [CL, CP].indexOf(current) !== -1 ? beforeIndex : currentIndex
- while (prevIndex >= 0) {
- var type = classTypes[prevIndex]
- if (type === NU) {
- return BREAK_NOT_ALLOWED$1
- } else if ([SY, IS].indexOf(type) !== -1) {
- prevIndex--
- } else {
- break
- }
- }
- } // LB26 Do not break a Korean syllable.
- if (
- (JL === current && [JL, JV, H2, H3].indexOf(next) !== -1) ||
- ([JV, H2].indexOf(current) !== -1 &&
- [JV, JT].indexOf(next) !== -1) ||
- ([JT, H3].indexOf(current) !== -1 && next === JT)
- ) {
- return BREAK_NOT_ALLOWED$1
- } // LB27 Treat a Korean Syllable Block the same as ID.
- if (
- (KOREAN_SYLLABLE_BLOCK.indexOf(current) !== -1 &&
- [IN, PO].indexOf(next) !== -1) ||
- (KOREAN_SYLLABLE_BLOCK.indexOf(next) !== -1 && current === PR)
- ) {
- return BREAK_NOT_ALLOWED$1
- } // LB28 Do not break between alphabetics (“at”).
- if (
- ALPHABETICS.indexOf(current) !== -1 &&
- ALPHABETICS.indexOf(next) !== -1
- ) {
- return BREAK_NOT_ALLOWED$1
- } // LB29 Do not break between numeric punctuation and alphabetics (“e.g.”).
- if (current === IS && ALPHABETICS.indexOf(next) !== -1) {
- return BREAK_NOT_ALLOWED$1
- } // LB30 Do not break between letters, numbers, or ordinary symbols and opening or closing parentheses.
- if (
- (ALPHABETICS.concat(NU).indexOf(current) !== -1 &&
- next === OP &&
- ea_OP.indexOf(codePoints[afterIndex]) === -1) ||
- (ALPHABETICS.concat(NU).indexOf(next) !== -1 && current === CP)
- ) {
- return BREAK_NOT_ALLOWED$1
- } // LB30a Break between two regional indicator symbols if and only if there are an even number of regional
- // indicators preceding the position of the break.
- if (current === RI$1 && next === RI$1) {
- var i = indicies[currentIndex]
- var count = 1
- while (i > 0) {
- i--
- if (classTypes[i] === RI$1) {
- count++
- } else {
- break
- }
- }
- if (count % 2 !== 0) {
- return BREAK_NOT_ALLOWED$1
- }
- } // LB30b Do not break between an emoji base and an emoji modifier.
- if (current === EB && next === EM) {
- return BREAK_NOT_ALLOWED$1
- }
- return BREAK_ALLOWED$1
- }
- var cssFormattedClasses = function cssFormattedClasses(
- codePoints,
- options
- ) {
- if (!options) {
- options = { lineBreak: 'normal', wordBreak: 'normal' }
- }
- var _a = codePointsToCharacterClasses(
- codePoints,
- options.lineBreak
- ),
- indicies = _a[0],
- classTypes = _a[1],
- isLetterNumber = _a[2]
- if (
- options.wordBreak === 'break-all' ||
- options.wordBreak === 'break-word'
- ) {
- classTypes = classTypes.map(function (type) {
- return [NU, AL, SA].indexOf(type) !== -1 ? ID : type
- })
- }
- var forbiddenBreakpoints =
- options.wordBreak === 'keep-all'
- ? isLetterNumber.map(function (letterNumber, i) {
- return (
- letterNumber &&
- codePoints[i] >= 0x4e00 &&
- codePoints[i] <= 0x9fff
- )
- })
- : undefined
- return [indicies, classTypes, forbiddenBreakpoints]
- }
- var Break = /** @class */ (function () {
- function Break(codePoints, lineBreak, start, end) {
- this.codePoints = codePoints
- this.required = lineBreak === BREAK_MANDATORY
- this.start = start
- this.end = end
- }
- Break.prototype.slice = function () {
- return fromCodePoint$1.apply(
- void 0,
- this.codePoints.slice(this.start, this.end)
- )
- }
- return Break
- })()
- var LineBreaker = function LineBreaker(str, options) {
- var codePoints = toCodePoints$1(str)
- var _a = cssFormattedClasses(codePoints, options),
- indicies = _a[0],
- classTypes = _a[1],
- forbiddenBreakpoints = _a[2]
- var length = codePoints.length
- var lastEnd = 0
- var nextIndex = 0
- return {
- next: function next() {
- if (nextIndex >= length) {
- return { done: true, value: null }
- }
- var lineBreak = BREAK_NOT_ALLOWED$1
- while (
- nextIndex < length &&
- (lineBreak = _lineBreakAtIndex(
- codePoints,
- classTypes,
- indicies,
- ++nextIndex,
- forbiddenBreakpoints
- )) === BREAK_NOT_ALLOWED$1
- ) {}
- if (lineBreak !== BREAK_NOT_ALLOWED$1 || nextIndex === length) {
- var value = new Break(
- codePoints,
- lineBreak,
- lastEnd,
- nextIndex
- )
- lastEnd = nextIndex
- return { value: value, done: false }
- }
- return { done: true, value: null }
- }
- }
- } // https://www.w3.org/TR/css-syntax-3
- var FLAG_UNRESTRICTED = 1 << 0
- var FLAG_ID = 1 << 1
- var FLAG_INTEGER = 1 << 2
- var FLAG_NUMBER = 1 << 3
- var LINE_FEED = 0x000a
- var SOLIDUS = 0x002f
- var REVERSE_SOLIDUS = 0x005c
- var CHARACTER_TABULATION = 0x0009
- var SPACE = 0x0020
- var QUOTATION_MARK = 0x0022
- var EQUALS_SIGN = 0x003d
- var NUMBER_SIGN = 0x0023
- var DOLLAR_SIGN = 0x0024
- var PERCENTAGE_SIGN = 0x0025
- var APOSTROPHE = 0x0027
- var LEFT_PARENTHESIS = 0x0028
- var RIGHT_PARENTHESIS = 0x0029
- var LOW_LINE = 0x005f
- var HYPHEN_MINUS = 0x002d
- var EXCLAMATION_MARK = 0x0021
- var LESS_THAN_SIGN = 0x003c
- var GREATER_THAN_SIGN = 0x003e
- var COMMERCIAL_AT = 0x0040
- var LEFT_SQUARE_BRACKET = 0x005b
- var RIGHT_SQUARE_BRACKET = 0x005d
- var CIRCUMFLEX_ACCENT = 0x003d
- var LEFT_CURLY_BRACKET = 0x007b
- var QUESTION_MARK = 0x003f
- var RIGHT_CURLY_BRACKET = 0x007d
- var VERTICAL_LINE = 0x007c
- var TILDE = 0x007e
- var CONTROL = 0x0080
- var REPLACEMENT_CHARACTER = 0xfffd
- var ASTERISK = 0x002a
- var PLUS_SIGN = 0x002b
- var COMMA = 0x002c
- var COLON = 0x003a
- var SEMICOLON = 0x003b
- var FULL_STOP = 0x002e
- var NULL = 0x0000
- var BACKSPACE = 0x0008
- var LINE_TABULATION = 0x000b
- var SHIFT_OUT = 0x000e
- var INFORMATION_SEPARATOR_ONE = 0x001f
- var DELETE = 0x007f
- var EOF = -1
- var ZERO = 0x0030
- var a = 0x0061
- var e = 0x0065
- var f = 0x0066
- var u = 0x0075
- var z = 0x007a
- var A = 0x0041
- var E = 0x0045
- var F = 0x0046
- var U = 0x0055
- var Z = 0x005a
- var isDigit = function isDigit(codePoint) {
- return codePoint >= ZERO && codePoint <= 0x0039
- }
- var isSurrogateCodePoint = function isSurrogateCodePoint(codePoint) {
- return codePoint >= 0xd800 && codePoint <= 0xdfff
- }
- var isHex = function isHex(codePoint) {
- return (
- isDigit(codePoint) ||
- (codePoint >= A && codePoint <= F) ||
- (codePoint >= a && codePoint <= f)
- )
- }
- var isLowerCaseLetter = function isLowerCaseLetter(codePoint) {
- return codePoint >= a && codePoint <= z
- }
- var isUpperCaseLetter = function isUpperCaseLetter(codePoint) {
- return codePoint >= A && codePoint <= Z
- }
- var isLetter = function isLetter(codePoint) {
- return isLowerCaseLetter(codePoint) || isUpperCaseLetter(codePoint)
- }
- var isNonASCIICodePoint = function isNonASCIICodePoint(codePoint) {
- return codePoint >= CONTROL
- }
- var isWhiteSpace = function isWhiteSpace(codePoint) {
- return (
- codePoint === LINE_FEED ||
- codePoint === CHARACTER_TABULATION ||
- codePoint === SPACE
- )
- }
- var isNameStartCodePoint = function isNameStartCodePoint(codePoint) {
- return (
- isLetter(codePoint) ||
- isNonASCIICodePoint(codePoint) ||
- codePoint === LOW_LINE
- )
- }
- var isNameCodePoint = function isNameCodePoint(codePoint) {
- return (
- isNameStartCodePoint(codePoint) ||
- isDigit(codePoint) ||
- codePoint === HYPHEN_MINUS
- )
- }
- var isNonPrintableCodePoint = function isNonPrintableCodePoint(
- codePoint
- ) {
- return (
- (codePoint >= NULL && codePoint <= BACKSPACE) ||
- codePoint === LINE_TABULATION ||
- (codePoint >= SHIFT_OUT &&
- codePoint <= INFORMATION_SEPARATOR_ONE) ||
- codePoint === DELETE
- )
- }
- var isValidEscape = function isValidEscape(c1, c2) {
- if (c1 !== REVERSE_SOLIDUS) {
- return false
- }
- return c2 !== LINE_FEED
- }
- var isIdentifierStart = function isIdentifierStart(c1, c2, c3) {
- if (c1 === HYPHEN_MINUS) {
- return isNameStartCodePoint(c2) || isValidEscape(c2, c3)
- } else if (isNameStartCodePoint(c1)) {
- return true
- } else if (c1 === REVERSE_SOLIDUS && isValidEscape(c1, c2)) {
- return true
- }
- return false
- }
- var isNumberStart = function isNumberStart(c1, c2, c3) {
- if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) {
- if (isDigit(c2)) {
- return true
- }
- return c2 === FULL_STOP && isDigit(c3)
- }
- if (c1 === FULL_STOP) {
- return isDigit(c2)
- }
- return isDigit(c1)
- }
- var stringToNumber = function stringToNumber(codePoints) {
- var c = 0
- var sign = 1
- if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) {
- if (codePoints[c] === HYPHEN_MINUS) {
- sign = -1
- }
- c++
- }
- var integers = []
- while (isDigit(codePoints[c])) {
- integers.push(codePoints[c++])
- }
- var int = integers.length
- ? parseInt(fromCodePoint$1.apply(void 0, integers), 10)
- : 0
- if (codePoints[c] === FULL_STOP) {
- c++
- }
- var fraction = []
- while (isDigit(codePoints[c])) {
- fraction.push(codePoints[c++])
- }
- var fracd = fraction.length
- var frac = fracd
- ? parseInt(fromCodePoint$1.apply(void 0, fraction), 10)
- : 0
- if (codePoints[c] === E || codePoints[c] === e) {
- c++
- }
- var expsign = 1
- if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) {
- if (codePoints[c] === HYPHEN_MINUS) {
- expsign = -1
- }
- c++
- }
- var exponent = []
- while (isDigit(codePoints[c])) {
- exponent.push(codePoints[c++])
- }
- var exp = exponent.length
- ? parseInt(fromCodePoint$1.apply(void 0, exponent), 10)
- : 0
- return (
- sign *
- (int + frac * Math.pow(10, -fracd)) *
- Math.pow(10, expsign * exp)
- )
- }
- var LEFT_PARENTHESIS_TOKEN = { type: 2 /* LEFT_PARENTHESIS_TOKEN */ }
- var RIGHT_PARENTHESIS_TOKEN = {
- type: 3 /* RIGHT_PARENTHESIS_TOKEN */
- }
- var COMMA_TOKEN = { type: 4 /* COMMA_TOKEN */ }
- var SUFFIX_MATCH_TOKEN = { type: 13 /* SUFFIX_MATCH_TOKEN */ }
- var PREFIX_MATCH_TOKEN = { type: 8 /* PREFIX_MATCH_TOKEN */ }
- var COLUMN_TOKEN = { type: 21 /* COLUMN_TOKEN */ }
- var DASH_MATCH_TOKEN = { type: 9 /* DASH_MATCH_TOKEN */ }
- var INCLUDE_MATCH_TOKEN = { type: 10 /* INCLUDE_MATCH_TOKEN */ }
- var LEFT_CURLY_BRACKET_TOKEN = {
- type: 11 /* LEFT_CURLY_BRACKET_TOKEN */
- }
- var RIGHT_CURLY_BRACKET_TOKEN = {
- type: 12 /* RIGHT_CURLY_BRACKET_TOKEN */
- }
- var SUBSTRING_MATCH_TOKEN = { type: 14 /* SUBSTRING_MATCH_TOKEN */ }
- var BAD_URL_TOKEN = { type: 23 /* BAD_URL_TOKEN */ }
- var BAD_STRING_TOKEN = { type: 1 /* BAD_STRING_TOKEN */ }
- var CDO_TOKEN = { type: 25 /* CDO_TOKEN */ }
- var CDC_TOKEN = { type: 24 /* CDC_TOKEN */ }
- var COLON_TOKEN = { type: 26 /* COLON_TOKEN */ }
- var SEMICOLON_TOKEN = { type: 27 /* SEMICOLON_TOKEN */ }
- var LEFT_SQUARE_BRACKET_TOKEN = {
- type: 28 /* LEFT_SQUARE_BRACKET_TOKEN */
- }
- var RIGHT_SQUARE_BRACKET_TOKEN = {
- type: 29 /* RIGHT_SQUARE_BRACKET_TOKEN */
- }
- var WHITESPACE_TOKEN = { type: 31 /* WHITESPACE_TOKEN */ }
- var EOF_TOKEN = { type: 32 /* EOF_TOKEN */ }
- var Tokenizer = /** @class */ (function () {
- function Tokenizer() {
- this._value = []
- }
- Tokenizer.prototype.write = function (chunk) {
- this._value = this._value.concat(toCodePoints$1(chunk))
- }
- Tokenizer.prototype.read = function () {
- var tokens = []
- var token = this.consumeToken()
- while (token !== EOF_TOKEN) {
- tokens.push(token)
- token = this.consumeToken()
- }
- return tokens
- }
- Tokenizer.prototype.consumeToken = function () {
- var codePoint = this.consumeCodePoint()
- switch (codePoint) {
- case QUOTATION_MARK:
- return this.consumeStringToken(QUOTATION_MARK)
- case NUMBER_SIGN:
- var c1 = this.peekCodePoint(0)
- var c2 = this.peekCodePoint(1)
- var c3 = this.peekCodePoint(2)
- if (isNameCodePoint(c1) || isValidEscape(c2, c3)) {
- var flags = isIdentifierStart(c1, c2, c3)
- ? FLAG_ID
- : FLAG_UNRESTRICTED
- var value = this.consumeName()
- return {
- type: 5 /* HASH_TOKEN */,
- value: value,
- flags: flags
- }
- }
- break
- case DOLLAR_SIGN:
- if (this.peekCodePoint(0) === EQUALS_SIGN) {
- this.consumeCodePoint()
- return SUFFIX_MATCH_TOKEN
- }
- break
- case APOSTROPHE:
- return this.consumeStringToken(APOSTROPHE)
- case LEFT_PARENTHESIS:
- return LEFT_PARENTHESIS_TOKEN
- case RIGHT_PARENTHESIS:
- return RIGHT_PARENTHESIS_TOKEN
- case ASTERISK:
- if (this.peekCodePoint(0) === EQUALS_SIGN) {
- this.consumeCodePoint()
- return SUBSTRING_MATCH_TOKEN
- }
- break
- case PLUS_SIGN:
- if (
- isNumberStart(
- codePoint,
- this.peekCodePoint(0),
- this.peekCodePoint(1)
- )
- ) {
- this.reconsumeCodePoint(codePoint)
- return this.consumeNumericToken()
- }
- break
- case COMMA:
- return COMMA_TOKEN
- case HYPHEN_MINUS:
- var e1 = codePoint
- var e2 = this.peekCodePoint(0)
- var e3 = this.peekCodePoint(1)
- if (isNumberStart(e1, e2, e3)) {
- this.reconsumeCodePoint(codePoint)
- return this.consumeNumericToken()
- }
- if (isIdentifierStart(e1, e2, e3)) {
- this.reconsumeCodePoint(codePoint)
- return this.consumeIdentLikeToken()
- }
- if (e2 === HYPHEN_MINUS && e3 === GREATER_THAN_SIGN) {
- this.consumeCodePoint()
- this.consumeCodePoint()
- return CDC_TOKEN
- }
- break
- case FULL_STOP:
- if (
- isNumberStart(
- codePoint,
- this.peekCodePoint(0),
- this.peekCodePoint(1)
- )
- ) {
- this.reconsumeCodePoint(codePoint)
- return this.consumeNumericToken()
- }
- break
- case SOLIDUS:
- if (this.peekCodePoint(0) === ASTERISK) {
- this.consumeCodePoint()
- while (true) {
- var c = this.consumeCodePoint()
- if (c === ASTERISK) {
- c = this.consumeCodePoint()
- if (c === SOLIDUS) {
- return this.consumeToken()
- }
- }
- if (c === EOF) {
- return this.consumeToken()
- }
- }
- }
- break
- case COLON:
- return COLON_TOKEN
- case SEMICOLON:
- return SEMICOLON_TOKEN
- case LESS_THAN_SIGN:
- if (
- this.peekCodePoint(0) === EXCLAMATION_MARK &&
- this.peekCodePoint(1) === HYPHEN_MINUS &&
- this.peekCodePoint(2) === HYPHEN_MINUS
- ) {
- this.consumeCodePoint()
- this.consumeCodePoint()
- return CDO_TOKEN
- }
- break
- case COMMERCIAL_AT:
- var a1 = this.peekCodePoint(0)
- var a2 = this.peekCodePoint(1)
- var a3 = this.peekCodePoint(2)
- if (isIdentifierStart(a1, a2, a3)) {
- var value = this.consumeName()
- return { type: 7 /* AT_KEYWORD_TOKEN */, value: value }
- }
- break
- case LEFT_SQUARE_BRACKET:
- return LEFT_SQUARE_BRACKET_TOKEN
- case REVERSE_SOLIDUS:
- if (isValidEscape(codePoint, this.peekCodePoint(0))) {
- this.reconsumeCodePoint(codePoint)
- return this.consumeIdentLikeToken()
- }
- break
- case RIGHT_SQUARE_BRACKET:
- return RIGHT_SQUARE_BRACKET_TOKEN
- case CIRCUMFLEX_ACCENT:
- if (this.peekCodePoint(0) === EQUALS_SIGN) {
- this.consumeCodePoint()
- return PREFIX_MATCH_TOKEN
- }
- break
- case LEFT_CURLY_BRACKET:
- return LEFT_CURLY_BRACKET_TOKEN
- case RIGHT_CURLY_BRACKET:
- return RIGHT_CURLY_BRACKET_TOKEN
- case u:
- case U:
- var u1 = this.peekCodePoint(0)
- var u2 = this.peekCodePoint(1)
- if (u1 === PLUS_SIGN && (isHex(u2) || u2 === QUESTION_MARK)) {
- this.consumeCodePoint()
- this.consumeUnicodeRangeToken()
- }
- this.reconsumeCodePoint(codePoint)
- return this.consumeIdentLikeToken()
- case VERTICAL_LINE:
- if (this.peekCodePoint(0) === EQUALS_SIGN) {
- this.consumeCodePoint()
- return DASH_MATCH_TOKEN
- }
- if (this.peekCodePoint(0) === VERTICAL_LINE) {
- this.consumeCodePoint()
- return COLUMN_TOKEN
- }
- break
- case TILDE:
- if (this.peekCodePoint(0) === EQUALS_SIGN) {
- this.consumeCodePoint()
- return INCLUDE_MATCH_TOKEN
- }
- break
- case EOF:
- return EOF_TOKEN
- }
- if (isWhiteSpace(codePoint)) {
- this.consumeWhiteSpace()
- return WHITESPACE_TOKEN
- }
- if (isDigit(codePoint)) {
- this.reconsumeCodePoint(codePoint)
- return this.consumeNumericToken()
- }
- if (isNameStartCodePoint(codePoint)) {
- this.reconsumeCodePoint(codePoint)
- return this.consumeIdentLikeToken()
- }
- return {
- type: 6 /* DELIM_TOKEN */,
- value: fromCodePoint$1(codePoint)
- }
- }
- Tokenizer.prototype.consumeCodePoint = function () {
- var value = this._value.shift()
- return typeof value === 'undefined' ? -1 : value
- }
- Tokenizer.prototype.reconsumeCodePoint = function (codePoint) {
- this._value.unshift(codePoint)
- }
- Tokenizer.prototype.peekCodePoint = function (delta) {
- if (delta >= this._value.length) {
- return -1
- }
- return this._value[delta]
- }
- Tokenizer.prototype.consumeUnicodeRangeToken = function () {
- var digits = []
- var codePoint = this.consumeCodePoint()
- while (isHex(codePoint) && digits.length < 6) {
- digits.push(codePoint)
- codePoint = this.consumeCodePoint()
- }
- var questionMarks = false
- while (codePoint === QUESTION_MARK && digits.length < 6) {
- digits.push(codePoint)
- codePoint = this.consumeCodePoint()
- questionMarks = true
- }
- if (questionMarks) {
- var start_1 = parseInt(
- fromCodePoint$1.apply(
- void 0,
- digits.map(function (digit) {
- return digit === QUESTION_MARK ? ZERO : digit
- })
- ),
- 16
- )
- var end = parseInt(
- fromCodePoint$1.apply(
- void 0,
- digits.map(function (digit) {
- return digit === QUESTION_MARK ? F : digit
- })
- ),
- 16
- )
- return {
- type: 30 /* UNICODE_RANGE_TOKEN */,
- start: start_1,
- end: end
- }
- }
- var start = parseInt(fromCodePoint$1.apply(void 0, digits), 16)
- if (
- this.peekCodePoint(0) === HYPHEN_MINUS &&
- isHex(this.peekCodePoint(1))
- ) {
- this.consumeCodePoint()
- codePoint = this.consumeCodePoint()
- var endDigits = []
- while (isHex(codePoint) && endDigits.length < 6) {
- endDigits.push(codePoint)
- codePoint = this.consumeCodePoint()
- }
- var end = parseInt(fromCodePoint$1.apply(void 0, endDigits), 16)
- return {
- type: 30 /* UNICODE_RANGE_TOKEN */,
- start: start,
- end: end
- }
- } else {
- return {
- type: 30 /* UNICODE_RANGE_TOKEN */,
- start: start,
- end: start
- }
- }
- }
- Tokenizer.prototype.consumeIdentLikeToken = function () {
- var value = this.consumeName()
- if (
- value.toLowerCase() === 'url' &&
- this.peekCodePoint(0) === LEFT_PARENTHESIS
- ) {
- this.consumeCodePoint()
- return this.consumeUrlToken()
- } else if (this.peekCodePoint(0) === LEFT_PARENTHESIS) {
- this.consumeCodePoint()
- return { type: 19 /* FUNCTION_TOKEN */, value: value }
- }
- return { type: 20 /* IDENT_TOKEN */, value: value }
- }
- Tokenizer.prototype.consumeUrlToken = function () {
- var value = []
- this.consumeWhiteSpace()
- if (this.peekCodePoint(0) === EOF) {
- return { type: 22 /* URL_TOKEN */, value: '' }
- }
- var next = this.peekCodePoint(0)
- if (next === APOSTROPHE || next === QUOTATION_MARK) {
- var stringToken = this.consumeStringToken(
- this.consumeCodePoint()
- )
- if (stringToken.type === 0 /* STRING_TOKEN */) {
- this.consumeWhiteSpace()
- if (
- this.peekCodePoint(0) === EOF ||
- this.peekCodePoint(0) === RIGHT_PARENTHESIS
- ) {
- this.consumeCodePoint()
- return {
- type: 22 /* URL_TOKEN */,
- value: stringToken.value
- }
- }
- }
- this.consumeBadUrlRemnants()
- return BAD_URL_TOKEN
- }
- while (true) {
- var codePoint = this.consumeCodePoint()
- if (codePoint === EOF || codePoint === RIGHT_PARENTHESIS) {
- return {
- type: 22 /* URL_TOKEN */,
- value: fromCodePoint$1.apply(void 0, value)
- }
- } else if (isWhiteSpace(codePoint)) {
- this.consumeWhiteSpace()
- if (
- this.peekCodePoint(0) === EOF ||
- this.peekCodePoint(0) === RIGHT_PARENTHESIS
- ) {
- this.consumeCodePoint()
- return {
- type: 22 /* URL_TOKEN */,
- value: fromCodePoint$1.apply(void 0, value)
- }
- }
- this.consumeBadUrlRemnants()
- return BAD_URL_TOKEN
- } else if (
- codePoint === QUOTATION_MARK ||
- codePoint === APOSTROPHE ||
- codePoint === LEFT_PARENTHESIS ||
- isNonPrintableCodePoint(codePoint)
- ) {
- this.consumeBadUrlRemnants()
- return BAD_URL_TOKEN
- } else if (codePoint === REVERSE_SOLIDUS) {
- if (isValidEscape(codePoint, this.peekCodePoint(0))) {
- value.push(this.consumeEscapedCodePoint())
- } else {
- this.consumeBadUrlRemnants()
- return BAD_URL_TOKEN
- }
- } else {
- value.push(codePoint)
- }
- }
- }
- Tokenizer.prototype.consumeWhiteSpace = function () {
- while (isWhiteSpace(this.peekCodePoint(0))) {
- this.consumeCodePoint()
- }
- }
- Tokenizer.prototype.consumeBadUrlRemnants = function () {
- while (true) {
- var codePoint = this.consumeCodePoint()
- if (codePoint === RIGHT_PARENTHESIS || codePoint === EOF) {
- return
- }
- if (isValidEscape(codePoint, this.peekCodePoint(0))) {
- this.consumeEscapedCodePoint()
- }
- }
- }
- Tokenizer.prototype.consumeStringSlice = function (count) {
- var SLICE_STACK_SIZE = 50000
- var value = ''
- while (count > 0) {
- var amount = Math.min(SLICE_STACK_SIZE, count)
- value += fromCodePoint$1.apply(
- void 0,
- this._value.splice(0, amount)
- )
- count -= amount
- }
- this._value.shift()
- return value
- }
- Tokenizer.prototype.consumeStringToken = function (
- endingCodePoint
- ) {
- var value = ''
- var i = 0
- do {
- var codePoint = this._value[i]
- if (
- codePoint === EOF ||
- codePoint === undefined ||
- codePoint === endingCodePoint
- ) {
- value += this.consumeStringSlice(i)
- return { type: 0 /* STRING_TOKEN */, value: value }
- }
- if (codePoint === LINE_FEED) {
- this._value.splice(0, i)
- return BAD_STRING_TOKEN
- }
- if (codePoint === REVERSE_SOLIDUS) {
- var next = this._value[i + 1]
- if (next !== EOF && next !== undefined) {
- if (next === LINE_FEED) {
- value += this.consumeStringSlice(i)
- i = -1
- this._value.shift()
- } else if (isValidEscape(codePoint, next)) {
- value += this.consumeStringSlice(i)
- value += fromCodePoint$1(this.consumeEscapedCodePoint())
- i = -1
- }
- }
- }
- i++
- } while (true)
- }
- Tokenizer.prototype.consumeNumber = function () {
- var repr = []
- var type = FLAG_INTEGER
- var c1 = this.peekCodePoint(0)
- if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) {
- repr.push(this.consumeCodePoint())
- }
- while (isDigit(this.peekCodePoint(0))) {
- repr.push(this.consumeCodePoint())
- }
- c1 = this.peekCodePoint(0)
- var c2 = this.peekCodePoint(1)
- if (c1 === FULL_STOP && isDigit(c2)) {
- repr.push(this.consumeCodePoint(), this.consumeCodePoint())
- type = FLAG_NUMBER
- while (isDigit(this.peekCodePoint(0))) {
- repr.push(this.consumeCodePoint())
- }
- }
- c1 = this.peekCodePoint(0)
- c2 = this.peekCodePoint(1)
- var c3 = this.peekCodePoint(2)
- if (
- (c1 === E || c1 === e) &&
- (((c2 === PLUS_SIGN || c2 === HYPHEN_MINUS) && isDigit(c3)) ||
- isDigit(c2))
- ) {
- repr.push(this.consumeCodePoint(), this.consumeCodePoint())
- type = FLAG_NUMBER
- while (isDigit(this.peekCodePoint(0))) {
- repr.push(this.consumeCodePoint())
- }
- }
- return [stringToNumber(repr), type]
- }
- Tokenizer.prototype.consumeNumericToken = function () {
- var _a = this.consumeNumber(),
- number = _a[0],
- flags = _a[1]
- var c1 = this.peekCodePoint(0)
- var c2 = this.peekCodePoint(1)
- var c3 = this.peekCodePoint(2)
- if (isIdentifierStart(c1, c2, c3)) {
- var unit = this.consumeName()
- return {
- type: 15 /* DIMENSION_TOKEN */,
- number: number,
- flags: flags,
- unit: unit
- }
- }
- if (c1 === PERCENTAGE_SIGN) {
- this.consumeCodePoint()
- return {
- type: 16 /* PERCENTAGE_TOKEN */,
- number: number,
- flags: flags
- }
- }
- return {
- type: 17 /* NUMBER_TOKEN */,
- number: number,
- flags: flags
- }
- }
- Tokenizer.prototype.consumeEscapedCodePoint = function () {
- var codePoint = this.consumeCodePoint()
- if (isHex(codePoint)) {
- var hex = fromCodePoint$1(codePoint)
- while (isHex(this.peekCodePoint(0)) && hex.length < 6) {
- hex += fromCodePoint$1(this.consumeCodePoint())
- }
- if (isWhiteSpace(this.peekCodePoint(0))) {
- this.consumeCodePoint()
- }
- var hexCodePoint = parseInt(hex, 16)
- if (
- hexCodePoint === 0 ||
- isSurrogateCodePoint(hexCodePoint) ||
- hexCodePoint > 0x10ffff
- ) {
- return REPLACEMENT_CHARACTER
- }
- return hexCodePoint
- }
- if (codePoint === EOF) {
- return REPLACEMENT_CHARACTER
- }
- return codePoint
- }
- Tokenizer.prototype.consumeName = function () {
- var result = ''
- while (true) {
- var codePoint = this.consumeCodePoint()
- if (isNameCodePoint(codePoint)) {
- result += fromCodePoint$1(codePoint)
- } else if (isValidEscape(codePoint, this.peekCodePoint(0))) {
- result += fromCodePoint$1(this.consumeEscapedCodePoint())
- } else {
- this.reconsumeCodePoint(codePoint)
- return result
- }
- }
- }
- return Tokenizer
- })()
- var Parser = /** @class */ (function () {
- function Parser(tokens) {
- this._tokens = tokens
- }
- Parser.create = function (value) {
- var tokenizer = new Tokenizer()
- tokenizer.write(value)
- return new Parser(tokenizer.read())
- }
- Parser.parseValue = function (value) {
- return Parser.create(value).parseComponentValue()
- }
- Parser.parseValues = function (value) {
- return Parser.create(value).parseComponentValues()
- }
- Parser.prototype.parseComponentValue = function () {
- var token = this.consumeToken()
- while (token.type === 31 /* WHITESPACE_TOKEN */) {
- token = this.consumeToken()
- }
- if (token.type === 32 /* EOF_TOKEN */) {
- throw new SyntaxError(
- 'Error parsing CSS component value, unexpected EOF'
- )
- }
- this.reconsumeToken(token)
- var value = this.consumeComponentValue()
- do {
- token = this.consumeToken()
- } while (token.type === 31 /* WHITESPACE_TOKEN */)
- if (token.type === 32 /* EOF_TOKEN */) {
- return value
- }
- throw new SyntaxError(
- 'Error parsing CSS component value, multiple values found when expecting only one'
- )
- }
- Parser.prototype.parseComponentValues = function () {
- var values = []
- while (true) {
- var value = this.consumeComponentValue()
- if (value.type === 32 /* EOF_TOKEN */) {
- return values
- }
- values.push(value)
- values.push()
- }
- }
- Parser.prototype.consumeComponentValue = function () {
- var token = this.consumeToken()
- switch (token.type) {
- case 11 /* LEFT_CURLY_BRACKET_TOKEN */:
- case 28 /* LEFT_SQUARE_BRACKET_TOKEN */:
- case 2 /* LEFT_PARENTHESIS_TOKEN */:
- return this.consumeSimpleBlock(token.type)
- case 19 /* FUNCTION_TOKEN */:
- return this.consumeFunction(token)
- }
- return token
- }
- Parser.prototype.consumeSimpleBlock = function (type) {
- var block = { type: type, values: [] }
- var token = this.consumeToken()
- while (true) {
- if (
- token.type === 32 /* EOF_TOKEN */ ||
- isEndingTokenFor(token, type)
- ) {
- return block
- }
- this.reconsumeToken(token)
- block.values.push(this.consumeComponentValue())
- token = this.consumeToken()
- }
- }
- Parser.prototype.consumeFunction = function (functionToken) {
- var cssFunction = {
- name: functionToken.value,
- values: [],
- type: 18 /* FUNCTION */
- }
- while (true) {
- var token = this.consumeToken()
- if (
- token.type === 32 /* EOF_TOKEN */ ||
- token.type === 3 /* RIGHT_PARENTHESIS_TOKEN */
- ) {
- return cssFunction
- }
- this.reconsumeToken(token)
- cssFunction.values.push(this.consumeComponentValue())
- }
- }
- Parser.prototype.consumeToken = function () {
- var token = this._tokens.shift()
- return typeof token === 'undefined' ? EOF_TOKEN : token
- }
- Parser.prototype.reconsumeToken = function (token) {
- this._tokens.unshift(token)
- }
- return Parser
- })()
- var isDimensionToken = function isDimensionToken(token) {
- return token.type === 15 /* DIMENSION_TOKEN */
- }
- var isNumberToken = function isNumberToken(token) {
- return token.type === 17 /* NUMBER_TOKEN */
- }
- var isIdentToken = function isIdentToken(token) {
- return token.type === 20 /* IDENT_TOKEN */
- }
- var isStringToken = function isStringToken(token) {
- return token.type === 0 /* STRING_TOKEN */
- }
- var isIdentWithValue = function isIdentWithValue(token, value) {
- return isIdentToken(token) && token.value === value
- }
- var nonWhiteSpace = function nonWhiteSpace(token) {
- return token.type !== 31 /* WHITESPACE_TOKEN */
- }
- var nonFunctionArgSeparator = function nonFunctionArgSeparator(
- token
- ) {
- return (
- token.type !== 31 /* WHITESPACE_TOKEN */ &&
- token.type !== 4 /* COMMA_TOKEN */
- )
- }
- var parseFunctionArgs = function parseFunctionArgs(tokens) {
- var args = []
- var arg = []
- tokens.forEach(function (token) {
- if (token.type === 4 /* COMMA_TOKEN */) {
- if (arg.length === 0) {
- throw new Error(
- 'Error parsing function args, zero tokens for arg'
- )
- }
- args.push(arg)
- arg = []
- return
- }
- if (token.type !== 31 /* WHITESPACE_TOKEN */) {
- arg.push(token)
- }
- })
- if (arg.length) {
- args.push(arg)
- }
- return args
- }
- var isEndingTokenFor = function isEndingTokenFor(token, type) {
- if (
- type === 11 /* LEFT_CURLY_BRACKET_TOKEN */ &&
- token.type === 12 /* RIGHT_CURLY_BRACKET_TOKEN */
- ) {
- return true
- }
- if (
- type === 28 /* LEFT_SQUARE_BRACKET_TOKEN */ &&
- token.type === 29 /* RIGHT_SQUARE_BRACKET_TOKEN */
- ) {
- return true
- }
- return (
- type === 2 /* LEFT_PARENTHESIS_TOKEN */ &&
- token.type === 3 /* RIGHT_PARENTHESIS_TOKEN */
- )
- }
- var isLength = function isLength(token) {
- return (
- token.type === 17 /* NUMBER_TOKEN */ ||
- token.type === 15 /* DIMENSION_TOKEN */
- )
- }
- var isLengthPercentage = function isLengthPercentage(token) {
- return token.type === 16 /* PERCENTAGE_TOKEN */ || isLength(token)
- }
- var parseLengthPercentageTuple = function parseLengthPercentageTuple(
- tokens
- ) {
- return tokens.length > 1 ? [tokens[0], tokens[1]] : [tokens[0]]
- }
- var ZERO_LENGTH = {
- type: 17 /* NUMBER_TOKEN */,
- number: 0,
- flags: FLAG_INTEGER
- }
- var FIFTY_PERCENT = {
- type: 16 /* PERCENTAGE_TOKEN */,
- number: 50,
- flags: FLAG_INTEGER
- }
- var HUNDRED_PERCENT = {
- type: 16 /* PERCENTAGE_TOKEN */,
- number: 100,
- flags: FLAG_INTEGER
- }
- var getAbsoluteValueForTuple = function getAbsoluteValueForTuple(
- tuple,
- width,
- height
- ) {
- var x = tuple[0],
- y = tuple[1]
- return [
- getAbsoluteValue(x, width),
- getAbsoluteValue(typeof y !== 'undefined' ? y : x, height)
- ]
- }
- var getAbsoluteValue = function getAbsoluteValue(token, parent) {
- if (token.type === 16 /* PERCENTAGE_TOKEN */) {
- return (token.number / 100) * parent
- }
- if (isDimensionToken(token)) {
- switch (token.unit) {
- case 'rem':
- case 'em':
- return 16 * token.number // TODO use correct font-size
- case 'px':
- default:
- return token.number
- }
- }
- return token.number
- }
- var DEG = 'deg'
- var GRAD = 'grad'
- var RAD = 'rad'
- var TURN = 'turn'
- var angle = {
- name: 'angle',
- parse: function parse(_context, value) {
- if (value.type === 15 /* DIMENSION_TOKEN */) {
- switch (value.unit) {
- case DEG:
- return (Math.PI * value.number) / 180
- case GRAD:
- return (Math.PI / 200) * value.number
- case RAD:
- return value.number
- case TURN:
- return Math.PI * 2 * value.number
- }
- }
- throw new Error('Unsupported angle type')
- }
- }
- var isAngle = function isAngle(value) {
- if (value.type === 15 /* DIMENSION_TOKEN */) {
- if (
- value.unit === DEG ||
- value.unit === GRAD ||
- value.unit === RAD ||
- value.unit === TURN
- ) {
- return true
- }
- }
- return false
- }
- var parseNamedSide = function parseNamedSide(tokens) {
- var sideOrCorner = tokens
- .filter(isIdentToken)
- .map(function (ident) {
- return ident.value
- })
- .join(' ')
- switch (sideOrCorner) {
- case 'to bottom right':
- case 'to right bottom':
- case 'left top':
- case 'top left':
- return [ZERO_LENGTH, ZERO_LENGTH]
- case 'to top':
- case 'bottom':
- return deg(0)
- case 'to bottom left':
- case 'to left bottom':
- case 'right top':
- case 'top right':
- return [ZERO_LENGTH, HUNDRED_PERCENT]
- case 'to right':
- case 'left':
- return deg(90)
- case 'to top left':
- case 'to left top':
- case 'right bottom':
- case 'bottom right':
- return [HUNDRED_PERCENT, HUNDRED_PERCENT]
- case 'to bottom':
- case 'top':
- return deg(180)
- case 'to top right':
- case 'to right top':
- case 'left bottom':
- case 'bottom left':
- return [HUNDRED_PERCENT, ZERO_LENGTH]
- case 'to left':
- case 'right':
- return deg(270)
- }
- return 0
- }
- var deg = function deg(_deg) {
- return (Math.PI * _deg) / 180
- }
- var color$1 = {
- name: 'color',
- parse: function parse(context, value) {
- if (value.type === 18 /* FUNCTION */) {
- var colorFunction = SUPPORTED_COLOR_FUNCTIONS[value.name]
- if (typeof colorFunction === 'undefined') {
- throw new Error(
- 'Attempting to parse an unsupported color function "' +
- value.name +
- '"'
- )
- }
- return colorFunction(context, value.values)
- }
- if (value.type === 5 /* HASH_TOKEN */) {
- if (value.value.length === 3) {
- var r = value.value.substring(0, 1)
- var g = value.value.substring(1, 2)
- var b = value.value.substring(2, 3)
- return pack(
- parseInt(r + r, 16),
- parseInt(g + g, 16),
- parseInt(b + b, 16),
- 1
- )
- }
- if (value.value.length === 4) {
- var r = value.value.substring(0, 1)
- var g = value.value.substring(1, 2)
- var b = value.value.substring(2, 3)
- var a = value.value.substring(3, 4)
- return pack(
- parseInt(r + r, 16),
- parseInt(g + g, 16),
- parseInt(b + b, 16),
- parseInt(a + a, 16) / 255
- )
- }
- if (value.value.length === 6) {
- var r = value.value.substring(0, 2)
- var g = value.value.substring(2, 4)
- var b = value.value.substring(4, 6)
- return pack(
- parseInt(r, 16),
- parseInt(g, 16),
- parseInt(b, 16),
- 1
- )
- }
- if (value.value.length === 8) {
- var r = value.value.substring(0, 2)
- var g = value.value.substring(2, 4)
- var b = value.value.substring(4, 6)
- var a = value.value.substring(6, 8)
- return pack(
- parseInt(r, 16),
- parseInt(g, 16),
- parseInt(b, 16),
- parseInt(a, 16) / 255
- )
- }
- }
- if (value.type === 20 /* IDENT_TOKEN */) {
- var namedColor = COLORS[value.value.toUpperCase()]
- if (typeof namedColor !== 'undefined') {
- return namedColor
- }
- }
- return COLORS.TRANSPARENT
- }
- }
- var isTransparent = function isTransparent(color) {
- return (0xff & color) === 0
- }
- var asString = function asString(color) {
- var alpha = 0xff & color
- var blue = 0xff & (color >> 8)
- var green = 0xff & (color >> 16)
- var red = 0xff & (color >> 24)
- return alpha < 255
- ? 'rgba(' +
- red +
- ',' +
- green +
- ',' +
- blue +
- ',' +
- alpha / 255 +
- ')'
- : 'rgb(' + red + ',' + green + ',' + blue + ')'
- }
- var pack = function pack(r, g, b, a) {
- return (
- ((r << 24) |
- (g << 16) |
- (b << 8) |
- (Math.round(a * 255) << 0)) >>>
- 0
- )
- }
- var getTokenColorValue = function getTokenColorValue(token, i) {
- if (token.type === 17 /* NUMBER_TOKEN */) {
- return token.number
- }
- if (token.type === 16 /* PERCENTAGE_TOKEN */) {
- var max = i === 3 ? 1 : 255
- return i === 3
- ? (token.number / 100) * max
- : Math.round((token.number / 100) * max)
- }
- return 0
- }
- var rgb = function rgb(_context, args) {
- var tokens = args.filter(nonFunctionArgSeparator)
- if (tokens.length === 3) {
- var _a = tokens.map(getTokenColorValue),
- r = _a[0],
- g = _a[1],
- b = _a[2]
- return pack(r, g, b, 1)
- }
- if (tokens.length === 4) {
- var _b = tokens.map(getTokenColorValue),
- r = _b[0],
- g = _b[1],
- b = _b[2],
- a = _b[3]
- return pack(r, g, b, a)
- }
- return 0
- }
- function hue2rgb(t1, t2, hue) {
- if (hue < 0) {
- hue += 1
- }
- if (hue >= 1) {
- hue -= 1
- }
- if (hue < 1 / 6) {
- return (t2 - t1) * hue * 6 + t1
- } else if (hue < 1 / 2) {
- return t2
- } else if (hue < 2 / 3) {
- return (t2 - t1) * 6 * (2 / 3 - hue) + t1
- } else {
- return t1
- }
- }
- var hsl = function hsl(context, args) {
- var tokens = args.filter(nonFunctionArgSeparator)
- var hue = tokens[0],
- saturation = tokens[1],
- lightness = tokens[2],
- alpha = tokens[3]
- var h =
- (hue.type === 17 /* NUMBER_TOKEN */
- ? deg(hue.number)
- : angle.parse(context, hue)) /
- (Math.PI * 2)
- var s = isLengthPercentage(saturation) ? saturation.number / 100 : 0
- var l = isLengthPercentage(lightness) ? lightness.number / 100 : 0
- var a =
- typeof alpha !== 'undefined' && isLengthPercentage(alpha)
- ? getAbsoluteValue(alpha, 1)
- : 1
- if (s === 0) {
- return pack(l * 255, l * 255, l * 255, 1)
- }
- var t2 = l <= 0.5 ? l * (s + 1) : l + s - l * s
- var t1 = l * 2 - t2
- var r = hue2rgb(t1, t2, h + 1 / 3)
- var g = hue2rgb(t1, t2, h)
- var b = hue2rgb(t1, t2, h - 1 / 3)
- return pack(r * 255, g * 255, b * 255, a)
- }
- var SUPPORTED_COLOR_FUNCTIONS = {
- hsl: hsl,
- hsla: hsl,
- rgb: rgb,
- rgba: rgb
- }
- var parseColor = function parseColor(context, value) {
- return color$1.parse(
- context,
- Parser.create(value).parseComponentValue()
- )
- }
- var COLORS = {
- ALICEBLUE: 0xf0f8ffff,
- ANTIQUEWHITE: 0xfaebd7ff,
- AQUA: 0x00ffffff,
- AQUAMARINE: 0x7fffd4ff,
- AZURE: 0xf0ffffff,
- BEIGE: 0xf5f5dcff,
- BISQUE: 0xffe4c4ff,
- BLACK: 0x000000ff,
- BLANCHEDALMOND: 0xffebcdff,
- BLUE: 0x0000ffff,
- BLUEVIOLET: 0x8a2be2ff,
- BROWN: 0xa52a2aff,
- BURLYWOOD: 0xdeb887ff,
- CADETBLUE: 0x5f9ea0ff,
- CHARTREUSE: 0x7fff00ff,
- CHOCOLATE: 0xd2691eff,
- CORAL: 0xff7f50ff,
- CORNFLOWERBLUE: 0x6495edff,
- CORNSILK: 0xfff8dcff,
- CRIMSON: 0xdc143cff,
- CYAN: 0x00ffffff,
- DARKBLUE: 0x00008bff,
- DARKCYAN: 0x008b8bff,
- DARKGOLDENROD: 0xb886bbff,
- DARKGRAY: 0xa9a9a9ff,
- DARKGREEN: 0x006400ff,
- DARKGREY: 0xa9a9a9ff,
- DARKKHAKI: 0xbdb76bff,
- DARKMAGENTA: 0x8b008bff,
- DARKOLIVEGREEN: 0x556b2fff,
- DARKORANGE: 0xff8c00ff,
- DARKORCHID: 0x9932ccff,
- DARKRED: 0x8b0000ff,
- DARKSALMON: 0xe9967aff,
- DARKSEAGREEN: 0x8fbc8fff,
- DARKSLATEBLUE: 0x483d8bff,
- DARKSLATEGRAY: 0x2f4f4fff,
- DARKSLATEGREY: 0x2f4f4fff,
- DARKTURQUOISE: 0x00ced1ff,
- DARKVIOLET: 0x9400d3ff,
- DEEPPINK: 0xff1493ff,
- DEEPSKYBLUE: 0x00bfffff,
- DIMGRAY: 0x696969ff,
- DIMGREY: 0x696969ff,
- DODGERBLUE: 0x1e90ffff,
- FIREBRICK: 0xb22222ff,
- FLORALWHITE: 0xfffaf0ff,
- FORESTGREEN: 0x228b22ff,
- FUCHSIA: 0xff00ffff,
- GAINSBORO: 0xdcdcdcff,
- GHOSTWHITE: 0xf8f8ffff,
- GOLD: 0xffd700ff,
- GOLDENROD: 0xdaa520ff,
- GRAY: 0x808080ff,
- GREEN: 0x008000ff,
- GREENYELLOW: 0xadff2fff,
- GREY: 0x808080ff,
- HONEYDEW: 0xf0fff0ff,
- HOTPINK: 0xff69b4ff,
- INDIANRED: 0xcd5c5cff,
- INDIGO: 0x4b0082ff,
- IVORY: 0xfffff0ff,
- KHAKI: 0xf0e68cff,
- LAVENDER: 0xe6e6faff,
- LAVENDERBLUSH: 0xfff0f5ff,
- LAWNGREEN: 0x7cfc00ff,
- LEMONCHIFFON: 0xfffacdff,
- LIGHTBLUE: 0xadd8e6ff,
- LIGHTCORAL: 0xf08080ff,
- LIGHTCYAN: 0xe0ffffff,
- LIGHTGOLDENRODYELLOW: 0xfafad2ff,
- LIGHTGRAY: 0xd3d3d3ff,
- LIGHTGREEN: 0x90ee90ff,
- LIGHTGREY: 0xd3d3d3ff,
- LIGHTPINK: 0xffb6c1ff,
- LIGHTSALMON: 0xffa07aff,
- LIGHTSEAGREEN: 0x20b2aaff,
- LIGHTSKYBLUE: 0x87cefaff,
- LIGHTSLATEGRAY: 0x778899ff,
- LIGHTSLATEGREY: 0x778899ff,
- LIGHTSTEELBLUE: 0xb0c4deff,
- LIGHTYELLOW: 0xffffe0ff,
- LIME: 0x00ff00ff,
- LIMEGREEN: 0x32cd32ff,
- LINEN: 0xfaf0e6ff,
- MAGENTA: 0xff00ffff,
- MAROON: 0x800000ff,
- MEDIUMAQUAMARINE: 0x66cdaaff,
- MEDIUMBLUE: 0x0000cdff,
- MEDIUMORCHID: 0xba55d3ff,
- MEDIUMPURPLE: 0x9370dbff,
- MEDIUMSEAGREEN: 0x3cb371ff,
- MEDIUMSLATEBLUE: 0x7b68eeff,
- MEDIUMSPRINGGREEN: 0x00fa9aff,
- MEDIUMTURQUOISE: 0x48d1ccff,
- MEDIUMVIOLETRED: 0xc71585ff,
- MIDNIGHTBLUE: 0x191970ff,
- MINTCREAM: 0xf5fffaff,
- MISTYROSE: 0xffe4e1ff,
- MOCCASIN: 0xffe4b5ff,
- NAVAJOWHITE: 0xffdeadff,
- NAVY: 0x000080ff,
- OLDLACE: 0xfdf5e6ff,
- OLIVE: 0x808000ff,
- OLIVEDRAB: 0x6b8e23ff,
- ORANGE: 0xffa500ff,
- ORANGERED: 0xff4500ff,
- ORCHID: 0xda70d6ff,
- PALEGOLDENROD: 0xeee8aaff,
- PALEGREEN: 0x98fb98ff,
- PALETURQUOISE: 0xafeeeeff,
- PALEVIOLETRED: 0xdb7093ff,
- PAPAYAWHIP: 0xffefd5ff,
- PEACHPUFF: 0xffdab9ff,
- PERU: 0xcd853fff,
- PINK: 0xffc0cbff,
- PLUM: 0xdda0ddff,
- POWDERBLUE: 0xb0e0e6ff,
- PURPLE: 0x800080ff,
- REBECCAPURPLE: 0x663399ff,
- RED: 0xff0000ff,
- ROSYBROWN: 0xbc8f8fff,
- ROYALBLUE: 0x4169e1ff,
- SADDLEBROWN: 0x8b4513ff,
- SALMON: 0xfa8072ff,
- SANDYBROWN: 0xf4a460ff,
- SEAGREEN: 0x2e8b57ff,
- SEASHELL: 0xfff5eeff,
- SIENNA: 0xa0522dff,
- SILVER: 0xc0c0c0ff,
- SKYBLUE: 0x87ceebff,
- SLATEBLUE: 0x6a5acdff,
- SLATEGRAY: 0x708090ff,
- SLATEGREY: 0x708090ff,
- SNOW: 0xfffafaff,
- SPRINGGREEN: 0x00ff7fff,
- STEELBLUE: 0x4682b4ff,
- TAN: 0xd2b48cff,
- TEAL: 0x008080ff,
- THISTLE: 0xd8bfd8ff,
- TOMATO: 0xff6347ff,
- TRANSPARENT: 0x00000000,
- TURQUOISE: 0x40e0d0ff,
- VIOLET: 0xee82eeff,
- WHEAT: 0xf5deb3ff,
- WHITE: 0xffffffff,
- WHITESMOKE: 0xf5f5f5ff,
- YELLOW: 0xffff00ff,
- YELLOWGREEN: 0x9acd32ff
- }
- var backgroundClip = {
- name: 'background-clip',
- initialValue: 'border-box',
- prefix: false,
- type: 1 /* LIST */,
- parse: function parse(_context, tokens) {
- return tokens.map(function (token) {
- if (isIdentToken(token)) {
- switch (token.value) {
- case 'padding-box':
- return 1 /* PADDING_BOX */
- case 'content-box':
- return 2 /* CONTENT_BOX */
- }
- }
- return 0 /* BORDER_BOX */
- })
- }
- }
- var backgroundColor = {
- name: 'background-color',
- initialValue: 'transparent',
- prefix: false,
- type: 3 /* TYPE_VALUE */,
- format: 'color'
- }
- var parseColorStop = function parseColorStop(context, args) {
- var color = color$1.parse(context, args[0])
- var stop = args[1]
- return stop && isLengthPercentage(stop)
- ? { color: color, stop: stop }
- : { color: color, stop: null }
- }
- var processColorStops = function processColorStops(
- stops,
- lineLength
- ) {
- var first = stops[0]
- var last = stops[stops.length - 1]
- if (first.stop === null) {
- first.stop = ZERO_LENGTH
- }
- if (last.stop === null) {
- last.stop = HUNDRED_PERCENT
- }
- var processStops = []
- var previous = 0
- for (var i = 0; i < stops.length; i++) {
- var stop_1 = stops[i].stop
- if (stop_1 !== null) {
- var absoluteValue = getAbsoluteValue(stop_1, lineLength)
- if (absoluteValue > previous) {
- processStops.push(absoluteValue)
- } else {
- processStops.push(previous)
- }
- previous = absoluteValue
- } else {
- processStops.push(null)
- }
- }
- var gapBegin = null
- for (var i = 0; i < processStops.length; i++) {
- var stop_2 = processStops[i]
- if (stop_2 === null) {
- if (gapBegin === null) {
- gapBegin = i
- }
- } else if (gapBegin !== null) {
- var gapLength = i - gapBegin
- var beforeGap = processStops[gapBegin - 1]
- var gapValue = (stop_2 - beforeGap) / (gapLength + 1)
- for (var g = 1; g <= gapLength; g++) {
- processStops[gapBegin + g - 1] = gapValue * g
- }
- gapBegin = null
- }
- }
- return stops.map(function (_a, i) {
- var color = _a.color
- return {
- color: color,
- stop: Math.max(Math.min(1, processStops[i] / lineLength), 0)
- }
- })
- }
- var getAngleFromCorner = function getAngleFromCorner(
- corner,
- width,
- height
- ) {
- var centerX = width / 2
- var centerY = height / 2
- var x = getAbsoluteValue(corner[0], width) - centerX
- var y = centerY - getAbsoluteValue(corner[1], height)
- return (Math.atan2(y, x) + Math.PI * 2) % (Math.PI * 2)
- }
- var calculateGradientDirection = function calculateGradientDirection(
- angle,
- width,
- height
- ) {
- var radian =
- typeof angle === 'number'
- ? angle
- : getAngleFromCorner(angle, width, height)
- var lineLength =
- Math.abs(width * Math.sin(radian)) +
- Math.abs(height * Math.cos(radian))
- var halfWidth = width / 2
- var halfHeight = height / 2
- var halfLineLength = lineLength / 2
- var yDiff = Math.sin(radian - Math.PI / 2) * halfLineLength
- var xDiff = Math.cos(radian - Math.PI / 2) * halfLineLength
- return [
- lineLength,
- halfWidth - xDiff,
- halfWidth + xDiff,
- halfHeight - yDiff,
- halfHeight + yDiff
- ]
- }
- var distance = function distance(a, b) {
- return Math.sqrt(a * a + b * b)
- }
- var findCorner = function findCorner(width, height, x, y, closest) {
- var corners = [
- [0, 0],
- [0, height],
- [width, 0],
- [width, height]
- ]
- return corners.reduce(
- function (stat, corner) {
- var cx = corner[0],
- cy = corner[1]
- var d = distance(x - cx, y - cy)
- if (
- closest ? d < stat.optimumDistance : d > stat.optimumDistance
- ) {
- return { optimumCorner: corner, optimumDistance: d }
- }
- return stat
- },
- {
- optimumDistance: closest ? Infinity : -Infinity,
- optimumCorner: null
- }
- ).optimumCorner
- }
- var calculateRadius = function calculateRadius(
- gradient,
- x,
- y,
- width,
- height
- ) {
- var rx = 0
- var ry = 0
- switch (gradient.size) {
- case 0 /* CLOSEST_SIDE */: // The ending shape is sized so that that it exactly meets the side of the gradient box closest to the gradient’s center.
- // If the shape is an ellipse, it exactly meets the closest side in each dimension.
- if (gradient.shape === 0 /* CIRCLE */) {
- rx = ry = Math.min(
- Math.abs(x),
- Math.abs(x - width),
- Math.abs(y),
- Math.abs(y - height)
- )
- } else if (gradient.shape === 1 /* ELLIPSE */) {
- rx = Math.min(Math.abs(x), Math.abs(x - width))
- ry = Math.min(Math.abs(y), Math.abs(y - height))
- }
- break
- case 2 /* CLOSEST_CORNER */: // The ending shape is sized so that that it passes through the corner of the gradient box closest to the gradient’s center.
- // If the shape is an ellipse, the ending shape is given the same aspect-ratio it would have if closest-side were specified.
- if (gradient.shape === 0 /* CIRCLE */) {
- rx = ry = Math.min(
- distance(x, y),
- distance(x, y - height),
- distance(x - width, y),
- distance(x - width, y - height)
- )
- } else if (gradient.shape === 1 /* ELLIPSE */) {
- // Compute the ratio ry/rx (which is to be the same as for "closest-side")
- var c =
- Math.min(Math.abs(y), Math.abs(y - height)) /
- Math.min(Math.abs(x), Math.abs(x - width))
- var _a = findCorner(width, height, x, y, true),
- cx = _a[0],
- cy = _a[1]
- rx = distance(cx - x, (cy - y) / c)
- ry = c * rx
- }
- break
- case 1 /* FARTHEST_SIDE */: // Same as closest-side, except the ending shape is sized based on the farthest side(s)
- if (gradient.shape === 0 /* CIRCLE */) {
- rx = ry = Math.max(
- Math.abs(x),
- Math.abs(x - width),
- Math.abs(y),
- Math.abs(y - height)
- )
- } else if (gradient.shape === 1 /* ELLIPSE */) {
- rx = Math.max(Math.abs(x), Math.abs(x - width))
- ry = Math.max(Math.abs(y), Math.abs(y - height))
- }
- break
- case 3 /* FARTHEST_CORNER */: // Same as closest-corner, except the ending shape is sized based on the farthest corner.
- // If the shape is an ellipse, the ending shape is given the same aspect ratio it would have if farthest-side were specified.
- if (gradient.shape === 0 /* CIRCLE */) {
- rx = ry = Math.max(
- distance(x, y),
- distance(x, y - height),
- distance(x - width, y),
- distance(x - width, y - height)
- )
- } else if (gradient.shape === 1 /* ELLIPSE */) {
- // Compute the ratio ry/rx (which is to be the same as for "farthest-side")
- var c =
- Math.max(Math.abs(y), Math.abs(y - height)) /
- Math.max(Math.abs(x), Math.abs(x - width))
- var _b = findCorner(width, height, x, y, false),
- cx = _b[0],
- cy = _b[1]
- rx = distance(cx - x, (cy - y) / c)
- ry = c * rx
- }
- break
- }
- if (Array.isArray(gradient.size)) {
- rx = getAbsoluteValue(gradient.size[0], width)
- ry =
- gradient.size.length === 2
- ? getAbsoluteValue(gradient.size[1], height)
- : rx
- }
- return [rx, ry]
- }
- var linearGradient = function linearGradient(context, tokens) {
- var angle$1 = deg(180)
- var stops = []
- parseFunctionArgs(tokens).forEach(function (arg, i) {
- if (i === 0) {
- var firstToken = arg[0]
- if (
- firstToken.type === 20 /* IDENT_TOKEN */ &&
- firstToken.value === 'to'
- ) {
- angle$1 = parseNamedSide(arg)
- return
- } else if (isAngle(firstToken)) {
- angle$1 = angle.parse(context, firstToken)
- return
- }
- }
- var colorStop = parseColorStop(context, arg)
- stops.push(colorStop)
- })
- return {
- angle: angle$1,
- stops: stops,
- type: 1 /* LINEAR_GRADIENT */
- }
- }
- var prefixLinearGradient = function prefixLinearGradient(
- context,
- tokens
- ) {
- var angle$1 = deg(180)
- var stops = []
- parseFunctionArgs(tokens).forEach(function (arg, i) {
- if (i === 0) {
- var firstToken = arg[0]
- if (
- firstToken.type === 20 /* IDENT_TOKEN */ &&
- ['top', 'left', 'right', 'bottom'].indexOf(
- firstToken.value
- ) !== -1
- ) {
- angle$1 = parseNamedSide(arg)
- return
- } else if (isAngle(firstToken)) {
- angle$1 =
- (angle.parse(context, firstToken) + deg(270)) % deg(360)
- return
- }
- }
- var colorStop = parseColorStop(context, arg)
- stops.push(colorStop)
- })
- return {
- angle: angle$1,
- stops: stops,
- type: 1 /* LINEAR_GRADIENT */
- }
- }
- var webkitGradient = function webkitGradient(context, tokens) {
- var angle = deg(180)
- var stops = []
- var type = 1 /* LINEAR_GRADIENT */
- var shape = 0 /* CIRCLE */
- var size = 3 /* FARTHEST_CORNER */
- var position = []
- parseFunctionArgs(tokens).forEach(function (arg, i) {
- var firstToken = arg[0]
- if (i === 0) {
- if (isIdentToken(firstToken) && firstToken.value === 'linear') {
- type = 1 /* LINEAR_GRADIENT */
- return
- } else if (
- isIdentToken(firstToken) &&
- firstToken.value === 'radial'
- ) {
- type = 2 /* RADIAL_GRADIENT */
- return
- }
- }
- if (firstToken.type === 18 /* FUNCTION */) {
- if (firstToken.name === 'from') {
- var color = color$1.parse(context, firstToken.values[0])
- stops.push({ stop: ZERO_LENGTH, color: color })
- } else if (firstToken.name === 'to') {
- var color = color$1.parse(context, firstToken.values[0])
- stops.push({ stop: HUNDRED_PERCENT, color: color })
- } else if (firstToken.name === 'color-stop') {
- var values = firstToken.values.filter(nonFunctionArgSeparator)
- if (values.length === 2) {
- var color = color$1.parse(context, values[1])
- var stop_1 = values[0]
- if (isNumberToken(stop_1)) {
- stops.push({
- stop: {
- type: 16 /* PERCENTAGE_TOKEN */,
- number: stop_1.number * 100,
- flags: stop_1.flags
- },
- color: color
- })
- }
- }
- }
- }
- })
- return type === 1 /* LINEAR_GRADIENT */
- ? {
- angle: (angle + deg(180)) % deg(360),
- stops: stops,
- type: type
- }
- : {
- size: size,
- shape: shape,
- stops: stops,
- position: position,
- type: type
- }
- }
- var CLOSEST_SIDE = 'closest-side'
- var FARTHEST_SIDE = 'farthest-side'
- var CLOSEST_CORNER = 'closest-corner'
- var FARTHEST_CORNER = 'farthest-corner'
- var CIRCLE = 'circle'
- var ELLIPSE = 'ellipse'
- var COVER = 'cover'
- var CONTAIN = 'contain'
- var radialGradient = function radialGradient(context, tokens) {
- var shape = 0 /* CIRCLE */
- var size = 3 /* FARTHEST_CORNER */
- var stops = []
- var position = []
- parseFunctionArgs(tokens).forEach(function (arg, i) {
- var isColorStop = true
- if (i === 0) {
- var isAtPosition_1 = false
- isColorStop = arg.reduce(function (acc, token) {
- if (isAtPosition_1) {
- if (isIdentToken(token)) {
- switch (token.value) {
- case 'center':
- position.push(FIFTY_PERCENT)
- return acc
- case 'top':
- case 'left':
- position.push(ZERO_LENGTH)
- return acc
- case 'right':
- case 'bottom':
- position.push(HUNDRED_PERCENT)
- return acc
- }
- } else if (isLengthPercentage(token) || isLength(token)) {
- position.push(token)
- }
- } else if (isIdentToken(token)) {
- switch (token.value) {
- case CIRCLE:
- shape = 0 /* CIRCLE */
- return false
- case ELLIPSE:
- shape = 1 /* ELLIPSE */
- return false
- case 'at':
- isAtPosition_1 = true
- return false
- case CLOSEST_SIDE:
- size = 0 /* CLOSEST_SIDE */
- return false
- case COVER:
- case FARTHEST_SIDE:
- size = 1 /* FARTHEST_SIDE */
- return false
- case CONTAIN:
- case CLOSEST_CORNER:
- size = 2 /* CLOSEST_CORNER */
- return false
- case FARTHEST_CORNER:
- size = 3 /* FARTHEST_CORNER */
- return false
- }
- } else if (isLength(token) || isLengthPercentage(token)) {
- if (!Array.isArray(size)) {
- size = []
- }
- size.push(token)
- return false
- }
- return acc
- }, isColorStop)
- }
- if (isColorStop) {
- var colorStop = parseColorStop(context, arg)
- stops.push(colorStop)
- }
- })
- return {
- size: size,
- shape: shape,
- stops: stops,
- position: position,
- type: 2 /* RADIAL_GRADIENT */
- }
- }
- var prefixRadialGradient = function prefixRadialGradient(
- context,
- tokens
- ) {
- var shape = 0 /* CIRCLE */
- var size = 3 /* FARTHEST_CORNER */
- var stops = []
- var position = []
- parseFunctionArgs(tokens).forEach(function (arg, i) {
- var isColorStop = true
- if (i === 0) {
- isColorStop = arg.reduce(function (acc, token) {
- if (isIdentToken(token)) {
- switch (token.value) {
- case 'center':
- position.push(FIFTY_PERCENT)
- return false
- case 'top':
- case 'left':
- position.push(ZERO_LENGTH)
- return false
- case 'right':
- case 'bottom':
- position.push(HUNDRED_PERCENT)
- return false
- }
- } else if (isLengthPercentage(token) || isLength(token)) {
- position.push(token)
- return false
- }
- return acc
- }, isColorStop)
- } else if (i === 1) {
- isColorStop = arg.reduce(function (acc, token) {
- if (isIdentToken(token)) {
- switch (token.value) {
- case CIRCLE:
- shape = 0 /* CIRCLE */
- return false
- case ELLIPSE:
- shape = 1 /* ELLIPSE */
- return false
- case CONTAIN:
- case CLOSEST_SIDE:
- size = 0 /* CLOSEST_SIDE */
- return false
- case FARTHEST_SIDE:
- size = 1 /* FARTHEST_SIDE */
- return false
- case CLOSEST_CORNER:
- size = 2 /* CLOSEST_CORNER */
- return false
- case COVER:
- case FARTHEST_CORNER:
- size = 3 /* FARTHEST_CORNER */
- return false
- }
- } else if (isLength(token) || isLengthPercentage(token)) {
- if (!Array.isArray(size)) {
- size = []
- }
- size.push(token)
- return false
- }
- return acc
- }, isColorStop)
- }
- if (isColorStop) {
- var colorStop = parseColorStop(context, arg)
- stops.push(colorStop)
- }
- })
- return {
- size: size,
- shape: shape,
- stops: stops,
- position: position,
- type: 2 /* RADIAL_GRADIENT */
- }
- }
- var isLinearGradient = function isLinearGradient(background) {
- return background.type === 1 /* LINEAR_GRADIENT */
- }
- var isRadialGradient = function isRadialGradient(background) {
- return background.type === 2 /* RADIAL_GRADIENT */
- }
- var image = {
- name: 'image',
- parse: function parse(context, value) {
- if (value.type === 22 /* URL_TOKEN */) {
- var image_1 = { url: value.value, type: 0 /* URL */ }
- context.cache.addImage(value.value)
- return image_1
- }
- if (value.type === 18 /* FUNCTION */) {
- var imageFunction = SUPPORTED_IMAGE_FUNCTIONS[value.name]
- if (typeof imageFunction === 'undefined') {
- throw new Error(
- 'Attempting to parse an unsupported image function "' +
- value.name +
- '"'
- )
- }
- return imageFunction(context, value.values)
- }
- throw new Error('Unsupported image type ' + value.type)
- }
- }
- function isSupportedImage(value) {
- return (
- !(
- value.type === 20 /* IDENT_TOKEN */ && value.value === 'none'
- ) &&
- (value.type !== 18 /* FUNCTION */ ||
- !!SUPPORTED_IMAGE_FUNCTIONS[value.name])
- )
- }
- var SUPPORTED_IMAGE_FUNCTIONS = {
- 'linear-gradient': linearGradient,
- '-moz-linear-gradient': prefixLinearGradient,
- '-ms-linear-gradient': prefixLinearGradient,
- '-o-linear-gradient': prefixLinearGradient,
- '-webkit-linear-gradient': prefixLinearGradient,
- 'radial-gradient': radialGradient,
- '-moz-radial-gradient': prefixRadialGradient,
- '-ms-radial-gradient': prefixRadialGradient,
- '-o-radial-gradient': prefixRadialGradient,
- '-webkit-radial-gradient': prefixRadialGradient,
- '-webkit-gradient': webkitGradient
- }
- var backgroundImage = {
- name: 'background-image',
- initialValue: 'none',
- type: 1 /* LIST */,
- prefix: false,
- parse: function parse(context, tokens) {
- if (tokens.length === 0) {
- return []
- }
- var first = tokens[0]
- if (
- first.type === 20 /* IDENT_TOKEN */ &&
- first.value === 'none'
- ) {
- return []
- }
- return tokens
- .filter(function (value) {
- return (
- nonFunctionArgSeparator(value) && isSupportedImage(value)
- )
- })
- .map(function (value) {
- return image.parse(context, value)
- })
- }
- }
- var backgroundOrigin = {
- name: 'background-origin',
- initialValue: 'border-box',
- prefix: false,
- type: 1 /* LIST */,
- parse: function parse(_context, tokens) {
- return tokens.map(function (token) {
- if (isIdentToken(token)) {
- switch (token.value) {
- case 'padding-box':
- return 1 /* PADDING_BOX */
- case 'content-box':
- return 2 /* CONTENT_BOX */
- }
- }
- return 0 /* BORDER_BOX */
- })
- }
- }
- var backgroundPosition = {
- name: 'background-position',
- initialValue: '0% 0%',
- type: 1 /* LIST */,
- prefix: false,
- parse: function parse(_context, tokens) {
- return parseFunctionArgs(tokens)
- .map(function (values) {
- return values.filter(isLengthPercentage)
- })
- .map(parseLengthPercentageTuple)
- }
- }
- var backgroundRepeat = {
- name: 'background-repeat',
- initialValue: 'repeat',
- prefix: false,
- type: 1 /* LIST */,
- parse: function parse(_context, tokens) {
- return parseFunctionArgs(tokens)
- .map(function (values) {
- return values
- .filter(isIdentToken)
- .map(function (token) {
- return token.value
- })
- .join(' ')
- })
- .map(parseBackgroundRepeat)
- }
- }
- var parseBackgroundRepeat = function parseBackgroundRepeat(value) {
- switch (value) {
- case 'no-repeat':
- return 1 /* NO_REPEAT */
- case 'repeat-x':
- case 'repeat no-repeat':
- return 2 /* REPEAT_X */
- case 'repeat-y':
- case 'no-repeat repeat':
- return 3 /* REPEAT_Y */
- case 'repeat':
- default:
- return 0 /* REPEAT */
- }
- }
- var BACKGROUND_SIZE
- ;(function (BACKGROUND_SIZE) {
- BACKGROUND_SIZE['AUTO'] = 'auto'
- BACKGROUND_SIZE['CONTAIN'] = 'contain'
- BACKGROUND_SIZE['COVER'] = 'cover'
- })(BACKGROUND_SIZE || (BACKGROUND_SIZE = {}))
- var backgroundSize = {
- name: 'background-size',
- initialValue: '0',
- prefix: false,
- type: 1 /* LIST */,
- parse: function parse(_context, tokens) {
- return parseFunctionArgs(tokens).map(function (values) {
- return values.filter(isBackgroundSizeInfoToken)
- })
- }
- }
- var isBackgroundSizeInfoToken = function isBackgroundSizeInfoToken(
- value
- ) {
- return isIdentToken(value) || isLengthPercentage(value)
- }
- var borderColorForSide = function borderColorForSide(side) {
- return {
- name: 'border-' + side + '-color',
- initialValue: 'transparent',
- prefix: false,
- type: 3 /* TYPE_VALUE */,
- format: 'color'
- }
- }
- var borderTopColor = borderColorForSide('top')
- var borderRightColor = borderColorForSide('right')
- var borderBottomColor = borderColorForSide('bottom')
- var borderLeftColor = borderColorForSide('left')
- var borderRadiusForSide = function borderRadiusForSide(side) {
- return {
- name: 'border-radius-' + side,
- initialValue: '0 0',
- prefix: false,
- type: 1 /* LIST */,
- parse: function parse(_context, tokens) {
- return parseLengthPercentageTuple(
- tokens.filter(isLengthPercentage)
- )
- }
- }
- }
- var borderTopLeftRadius = borderRadiusForSide('top-left')
- var borderTopRightRadius = borderRadiusForSide('top-right')
- var borderBottomRightRadius = borderRadiusForSide('bottom-right')
- var borderBottomLeftRadius = borderRadiusForSide('bottom-left')
- var borderStyleForSide = function borderStyleForSide(side) {
- return {
- name: 'border-' + side + '-style',
- initialValue: 'solid',
- prefix: false,
- type: 2 /* IDENT_VALUE */,
- parse: function parse(_context, style) {
- switch (style) {
- case 'none':
- return 0 /* NONE */
- case 'dashed':
- return 2 /* DASHED */
- case 'dotted':
- return 3 /* DOTTED */
- case 'double':
- return 4 /* DOUBLE */
- }
- return 1 /* SOLID */
- }
- }
- }
- var borderTopStyle = borderStyleForSide('top')
- var borderRightStyle = borderStyleForSide('right')
- var borderBottomStyle = borderStyleForSide('bottom')
- var borderLeftStyle = borderStyleForSide('left')
- var borderWidthForSide = function borderWidthForSide(side) {
- return {
- name: 'border-' + side + '-width',
- initialValue: '0',
- type: 0 /* VALUE */,
- prefix: false,
- parse: function parse(_context, token) {
- if (isDimensionToken(token)) {
- return token.number
- }
- return 0
- }
- }
- }
- var borderTopWidth = borderWidthForSide('top')
- var borderRightWidth = borderWidthForSide('right')
- var borderBottomWidth = borderWidthForSide('bottom')
- var borderLeftWidth = borderWidthForSide('left')
- var color = {
- name: 'color',
- initialValue: 'transparent',
- prefix: false,
- type: 3 /* TYPE_VALUE */,
- format: 'color'
- }
- var direction = {
- name: 'direction',
- initialValue: 'ltr',
- prefix: false,
- type: 2 /* IDENT_VALUE */,
- parse: function parse(_context, direction) {
- switch (direction) {
- case 'rtl':
- return 1 /* RTL */
- case 'ltr':
- default:
- return 0 /* LTR */
- }
- }
- }
- var display = {
- name: 'display',
- initialValue: 'inline-block',
- prefix: false,
- type: 1 /* LIST */,
- parse: function parse(_context, tokens) {
- return tokens.filter(isIdentToken).reduce(function (bit, token) {
- return bit | parseDisplayValue(token.value)
- }, 0 /* NONE */)
- }
- }
- var parseDisplayValue = function parseDisplayValue(display) {
- switch (display) {
- case 'block':
- case '-webkit-box':
- return 2 /* BLOCK */
- case 'inline':
- return 4 /* INLINE */
- case 'run-in':
- return 8 /* RUN_IN */
- case 'flow':
- return 16 /* FLOW */
- case 'flow-root':
- return 32 /* FLOW_ROOT */
- case 'table':
- return 64 /* TABLE */
- case 'flex':
- case '-webkit-flex':
- return 128 /* FLEX */
- case 'grid':
- case '-ms-grid':
- return 256 /* GRID */
- case 'ruby':
- return 512 /* RUBY */
- case 'subgrid':
- return 1024 /* SUBGRID */
- case 'list-item':
- return 2048 /* LIST_ITEM */
- case 'table-row-group':
- return 4096 /* TABLE_ROW_GROUP */
- case 'table-header-group':
- return 8192 /* TABLE_HEADER_GROUP */
- case 'table-footer-group':
- return 16384 /* TABLE_FOOTER_GROUP */
- case 'table-row':
- return 32768 /* TABLE_ROW */
- case 'table-cell':
- return 65536 /* TABLE_CELL */
- case 'table-column-group':
- return 131072 /* TABLE_COLUMN_GROUP */
- case 'table-column':
- return 262144 /* TABLE_COLUMN */
- case 'table-caption':
- return 524288 /* TABLE_CAPTION */
- case 'ruby-base':
- return 1048576 /* RUBY_BASE */
- case 'ruby-text':
- return 2097152 /* RUBY_TEXT */
- case 'ruby-base-container':
- return 4194304 /* RUBY_BASE_CONTAINER */
- case 'ruby-text-container':
- return 8388608 /* RUBY_TEXT_CONTAINER */
- case 'contents':
- return 16777216 /* CONTENTS */
- case 'inline-block':
- return 33554432 /* INLINE_BLOCK */
- case 'inline-list-item':
- return 67108864 /* INLINE_LIST_ITEM */
- case 'inline-table':
- return 134217728 /* INLINE_TABLE */
- case 'inline-flex':
- return 268435456 /* INLINE_FLEX */
- case 'inline-grid':
- return 536870912 /* INLINE_GRID */
- }
- return 0 /* NONE */
- }
- var float = {
- name: 'float',
- initialValue: 'none',
- prefix: false,
- type: 2 /* IDENT_VALUE */,
- parse: function parse(_context, float) {
- switch (float) {
- case 'left':
- return 1 /* LEFT */
- case 'right':
- return 2 /* RIGHT */
- case 'inline-start':
- return 3 /* INLINE_START */
- case 'inline-end':
- return 4 /* INLINE_END */
- }
- return 0 /* NONE */
- }
- }
- var letterSpacing = {
- name: 'letter-spacing',
- initialValue: '0',
- prefix: false,
- type: 0 /* VALUE */,
- parse: function parse(_context, token) {
- if (
- token.type === 20 /* IDENT_TOKEN */ &&
- token.value === 'normal'
- ) {
- return 0
- }
- if (token.type === 17 /* NUMBER_TOKEN */) {
- return token.number
- }
- if (token.type === 15 /* DIMENSION_TOKEN */) {
- return token.number
- }
- return 0
- }
- }
- var LINE_BREAK
- ;(function (LINE_BREAK) {
- LINE_BREAK['NORMAL'] = 'normal'
- LINE_BREAK['STRICT'] = 'strict'
- })(LINE_BREAK || (LINE_BREAK = {}))
- var lineBreak = {
- name: 'line-break',
- initialValue: 'normal',
- prefix: false,
- type: 2 /* IDENT_VALUE */,
- parse: function parse(_context, lineBreak) {
- switch (lineBreak) {
- case 'strict':
- return LINE_BREAK.STRICT
- case 'normal':
- default:
- return LINE_BREAK.NORMAL
- }
- }
- }
- var lineHeight = {
- name: 'line-height',
- initialValue: 'normal',
- prefix: false,
- type: 4 /* TOKEN_VALUE */
- }
- var computeLineHeight = function computeLineHeight(token, fontSize) {
- if (isIdentToken(token) && token.value === 'normal') {
- return 1.2 * fontSize
- } else if (token.type === 17 /* NUMBER_TOKEN */) {
- return fontSize * token.number
- } else if (isLengthPercentage(token)) {
- return getAbsoluteValue(token, fontSize)
- }
- return fontSize
- }
- var listStyleImage = {
- name: 'list-style-image',
- initialValue: 'none',
- type: 0 /* VALUE */,
- prefix: false,
- parse: function parse(context, token) {
- if (
- token.type === 20 /* IDENT_TOKEN */ &&
- token.value === 'none'
- ) {
- return null
- }
- return image.parse(context, token)
- }
- }
- var listStylePosition = {
- name: 'list-style-position',
- initialValue: 'outside',
- prefix: false,
- type: 2 /* IDENT_VALUE */,
- parse: function parse(_context, position) {
- switch (position) {
- case 'inside':
- return 0 /* INSIDE */
- case 'outside':
- default:
- return 1 /* OUTSIDE */
- }
- }
- }
- var listStyleType = {
- name: 'list-style-type',
- initialValue: 'none',
- prefix: false,
- type: 2 /* IDENT_VALUE */,
- parse: function parse(_context, type) {
- switch (type) {
- case 'disc':
- return 0 /* DISC */
- case 'circle':
- return 1 /* CIRCLE */
- case 'square':
- return 2 /* SQUARE */
- case 'decimal':
- return 3 /* DECIMAL */
- case 'cjk-decimal':
- return 4 /* CJK_DECIMAL */
- case 'decimal-leading-zero':
- return 5 /* DECIMAL_LEADING_ZERO */
- case 'lower-roman':
- return 6 /* LOWER_ROMAN */
- case 'upper-roman':
- return 7 /* UPPER_ROMAN */
- case 'lower-greek':
- return 8 /* LOWER_GREEK */
- case 'lower-alpha':
- return 9 /* LOWER_ALPHA */
- case 'upper-alpha':
- return 10 /* UPPER_ALPHA */
- case 'arabic-indic':
- return 11 /* ARABIC_INDIC */
- case 'armenian':
- return 12 /* ARMENIAN */
- case 'bengali':
- return 13 /* BENGALI */
- case 'cambodian':
- return 14 /* CAMBODIAN */
- case 'cjk-earthly-branch':
- return 15 /* CJK_EARTHLY_BRANCH */
- case 'cjk-heavenly-stem':
- return 16 /* CJK_HEAVENLY_STEM */
- case 'cjk-ideographic':
- return 17 /* CJK_IDEOGRAPHIC */
- case 'devanagari':
- return 18 /* DEVANAGARI */
- case 'ethiopic-numeric':
- return 19 /* ETHIOPIC_NUMERIC */
- case 'georgian':
- return 20 /* GEORGIAN */
- case 'gujarati':
- return 21 /* GUJARATI */
- case 'gurmukhi':
- return 22 /* GURMUKHI */
- case 'hebrew':
- return 22 /* HEBREW */
- case 'hiragana':
- return 23 /* HIRAGANA */
- case 'hiragana-iroha':
- return 24 /* HIRAGANA_IROHA */
- case 'japanese-formal':
- return 25 /* JAPANESE_FORMAL */
- case 'japanese-informal':
- return 26 /* JAPANESE_INFORMAL */
- case 'kannada':
- return 27 /* KANNADA */
- case 'katakana':
- return 28 /* KATAKANA */
- case 'katakana-iroha':
- return 29 /* KATAKANA_IROHA */
- case 'khmer':
- return 30 /* KHMER */
- case 'korean-hangul-formal':
- return 31 /* KOREAN_HANGUL_FORMAL */
- case 'korean-hanja-formal':
- return 32 /* KOREAN_HANJA_FORMAL */
- case 'korean-hanja-informal':
- return 33 /* KOREAN_HANJA_INFORMAL */
- case 'lao':
- return 34 /* LAO */
- case 'lower-armenian':
- return 35 /* LOWER_ARMENIAN */
- case 'malayalam':
- return 36 /* MALAYALAM */
- case 'mongolian':
- return 37 /* MONGOLIAN */
- case 'myanmar':
- return 38 /* MYANMAR */
- case 'oriya':
- return 39 /* ORIYA */
- case 'persian':
- return 40 /* PERSIAN */
- case 'simp-chinese-formal':
- return 41 /* SIMP_CHINESE_FORMAL */
- case 'simp-chinese-informal':
- return 42 /* SIMP_CHINESE_INFORMAL */
- case 'tamil':
- return 43 /* TAMIL */
- case 'telugu':
- return 44 /* TELUGU */
- case 'thai':
- return 45 /* THAI */
- case 'tibetan':
- return 46 /* TIBETAN */
- case 'trad-chinese-formal':
- return 47 /* TRAD_CHINESE_FORMAL */
- case 'trad-chinese-informal':
- return 48 /* TRAD_CHINESE_INFORMAL */
- case 'upper-armenian':
- return 49 /* UPPER_ARMENIAN */
- case 'disclosure-open':
- return 50 /* DISCLOSURE_OPEN */
- case 'disclosure-closed':
- return 51 /* DISCLOSURE_CLOSED */
- case 'none':
- default:
- return -1 /* NONE */
- }
- }
- }
- var marginForSide = function marginForSide(side) {
- return {
- name: 'margin-' + side,
- initialValue: '0',
- prefix: false,
- type: 4 /* TOKEN_VALUE */
- }
- }
- var marginTop = marginForSide('top')
- var marginRight = marginForSide('right')
- var marginBottom = marginForSide('bottom')
- var marginLeft = marginForSide('left')
- var overflow = {
- name: 'overflow',
- initialValue: 'visible',
- prefix: false,
- type: 1 /* LIST */,
- parse: function parse(_context, tokens) {
- return tokens.filter(isIdentToken).map(function (overflow) {
- switch (overflow.value) {
- case 'hidden':
- return 1 /* HIDDEN */
- case 'scroll':
- return 2 /* SCROLL */
- case 'clip':
- return 3 /* CLIP */
- case 'auto':
- return 4 /* AUTO */
- case 'visible':
- default:
- return 0 /* VISIBLE */
- }
- })
- }
- }
- var overflowWrap = {
- name: 'overflow-wrap',
- initialValue: 'normal',
- prefix: false,
- type: 2 /* IDENT_VALUE */,
- parse: function parse(_context, overflow) {
- switch (overflow) {
- case 'break-word':
- return 'break-word' /* BREAK_WORD */
- case 'normal':
- default:
- return 'normal' /* NORMAL */
- }
- }
- }
- var paddingForSide = function paddingForSide(side) {
- return {
- name: 'padding-' + side,
- initialValue: '0',
- prefix: false,
- type: 3 /* TYPE_VALUE */,
- format: 'length-percentage'
- }
- }
- var paddingTop = paddingForSide('top')
- var paddingRight = paddingForSide('right')
- var paddingBottom = paddingForSide('bottom')
- var paddingLeft = paddingForSide('left')
- var textAlign = {
- name: 'text-align',
- initialValue: 'left',
- prefix: false,
- type: 2 /* IDENT_VALUE */,
- parse: function parse(_context, textAlign) {
- switch (textAlign) {
- case 'right':
- return 2 /* RIGHT */
- case 'center':
- case 'justify':
- return 1 /* CENTER */
- case 'left':
- default:
- return 0 /* LEFT */
- }
- }
- }
- var position = {
- name: 'position',
- initialValue: 'static',
- prefix: false,
- type: 2 /* IDENT_VALUE */,
- parse: function parse(_context, position) {
- switch (position) {
- case 'relative':
- return 1 /* RELATIVE */
- case 'absolute':
- return 2 /* ABSOLUTE */
- case 'fixed':
- return 3 /* FIXED */
- case 'sticky':
- return 4 /* STICKY */
- }
- return 0 /* STATIC */
- }
- }
- var textShadow = {
- name: 'text-shadow',
- initialValue: 'none',
- type: 1 /* LIST */,
- prefix: false,
- parse: function parse(context, tokens) {
- if (tokens.length === 1 && isIdentWithValue(tokens[0], 'none')) {
- return []
- }
- return parseFunctionArgs(tokens).map(function (values) {
- var shadow = {
- color: COLORS.TRANSPARENT,
- offsetX: ZERO_LENGTH,
- offsetY: ZERO_LENGTH,
- blur: ZERO_LENGTH
- }
- var c = 0
- for (var i = 0; i < values.length; i++) {
- var token = values[i]
- if (isLength(token)) {
- if (c === 0) {
- shadow.offsetX = token
- } else if (c === 1) {
- shadow.offsetY = token
- } else {
- shadow.blur = token
- }
- c++
- } else {
- shadow.color = color$1.parse(context, token)
- }
- }
- return shadow
- })
- }
- }
- var textTransform = {
- name: 'text-transform',
- initialValue: 'none',
- prefix: false,
- type: 2 /* IDENT_VALUE */,
- parse: function parse(_context, textTransform) {
- switch (textTransform) {
- case 'uppercase':
- return 2 /* UPPERCASE */
- case 'lowercase':
- return 1 /* LOWERCASE */
- case 'capitalize':
- return 3 /* CAPITALIZE */
- }
- return 0 /* NONE */
- }
- }
- var transform$1 = {
- name: 'transform',
- initialValue: 'none',
- prefix: true,
- type: 0 /* VALUE */,
- parse: function parse(_context, token) {
- if (
- token.type === 20 /* IDENT_TOKEN */ &&
- token.value === 'none'
- ) {
- return null
- }
- if (token.type === 18 /* FUNCTION */) {
- var transformFunction =
- SUPPORTED_TRANSFORM_FUNCTIONS[token.name]
- if (typeof transformFunction === 'undefined') {
- throw new Error(
- 'Attempting to parse an unsupported transform function "' +
- token.name +
- '"'
- )
- }
- return transformFunction(token.values)
- }
- return null
- }
- }
- var matrix = function matrix(args) {
- var values = args
- .filter(function (arg) {
- return arg.type === 17 /* NUMBER_TOKEN */
- })
- .map(function (arg) {
- return arg.number
- })
- return values.length === 6 ? values : null
- } // doesn't support 3D transforms at the moment
- var matrix3d = function matrix3d(args) {
- var values = args
- .filter(function (arg) {
- return arg.type === 17 /* NUMBER_TOKEN */
- })
- .map(function (arg) {
- return arg.number
- })
- var a1 = values[0],
- b1 = values[1]
- values[2]
- values[3]
- var a2 = values[4],
- b2 = values[5]
- values[6]
- values[7]
- values[8]
- values[9]
- values[10]
- values[11]
- var a4 = values[12],
- b4 = values[13]
- values[14]
- values[15]
- return values.length === 16 ? [a1, b1, a2, b2, a4, b4] : null
- }
- var SUPPORTED_TRANSFORM_FUNCTIONS = {
- matrix: matrix,
- matrix3d: matrix3d
- }
- var DEFAULT_VALUE = {
- type: 16 /* PERCENTAGE_TOKEN */,
- number: 50,
- flags: FLAG_INTEGER
- }
- var DEFAULT = [DEFAULT_VALUE, DEFAULT_VALUE]
- var transformOrigin = {
- name: 'transform-origin',
- initialValue: '50% 50%',
- prefix: true,
- type: 1 /* LIST */,
- parse: function parse(_context, tokens) {
- var origins = tokens.filter(isLengthPercentage)
- if (origins.length !== 2) {
- return DEFAULT
- }
- return [origins[0], origins[1]]
- }
- }
- var visibility = {
- name: 'visible',
- initialValue: 'none',
- prefix: false,
- type: 2 /* IDENT_VALUE */,
- parse: function parse(_context, visibility) {
- switch (visibility) {
- case 'hidden':
- return 1 /* HIDDEN */
- case 'collapse':
- return 2 /* COLLAPSE */
- case 'visible':
- default:
- return 0 /* VISIBLE */
- }
- }
- }
- var WORD_BREAK
- ;(function (WORD_BREAK) {
- WORD_BREAK['NORMAL'] = 'normal'
- WORD_BREAK['BREAK_ALL'] = 'break-all'
- WORD_BREAK['KEEP_ALL'] = 'keep-all'
- })(WORD_BREAK || (WORD_BREAK = {}))
- var wordBreak = {
- name: 'word-break',
- initialValue: 'normal',
- prefix: false,
- type: 2 /* IDENT_VALUE */,
- parse: function parse(_context, wordBreak) {
- switch (wordBreak) {
- case 'break-all':
- return WORD_BREAK.BREAK_ALL
- case 'keep-all':
- return WORD_BREAK.KEEP_ALL
- case 'normal':
- default:
- return WORD_BREAK.NORMAL
- }
- }
- }
- var zIndex = {
- name: 'z-index',
- initialValue: 'auto',
- prefix: false,
- type: 0 /* VALUE */,
- parse: function parse(_context, token) {
- if (token.type === 20 /* IDENT_TOKEN */) {
- return { auto: true, order: 0 }
- }
- if (isNumberToken(token)) {
- return { auto: false, order: token.number }
- }
- throw new Error('Invalid z-index number parsed')
- }
- }
- var time = {
- name: 'time',
- parse: function parse(_context, value) {
- if (value.type === 15 /* DIMENSION_TOKEN */) {
- switch (value.unit.toLowerCase()) {
- case 's':
- return 1000 * value.number
- case 'ms':
- return value.number
- }
- }
- throw new Error('Unsupported time type')
- }
- }
- var opacity = {
- name: 'opacity',
- initialValue: '1',
- type: 0 /* VALUE */,
- prefix: false,
- parse: function parse(_context, token) {
- if (isNumberToken(token)) {
- return token.number
- }
- return 1
- }
- }
- var textDecorationColor = {
- name: 'text-decoration-color',
- initialValue: 'transparent',
- prefix: false,
- type: 3 /* TYPE_VALUE */,
- format: 'color'
- }
- var textDecorationLine = {
- name: 'text-decoration-line',
- initialValue: 'none',
- prefix: false,
- type: 1 /* LIST */,
- parse: function parse(_context, tokens) {
- return tokens
- .filter(isIdentToken)
- .map(function (token) {
- switch (token.value) {
- case 'underline':
- return 1 /* UNDERLINE */
- case 'overline':
- return 2 /* OVERLINE */
- case 'line-through':
- return 3 /* LINE_THROUGH */
- case 'none':
- return 4 /* BLINK */
- }
- return 0 /* NONE */
- })
- .filter(function (line) {
- return line !== 0 /* NONE */
- })
- }
- }
- var fontFamily = {
- name: 'font-family',
- initialValue: '',
- prefix: false,
- type: 1 /* LIST */,
- parse: function parse(_context, tokens) {
- var accumulator = []
- var results = []
- tokens.forEach(function (token) {
- switch (token.type) {
- case 20 /* IDENT_TOKEN */:
- case 0 /* STRING_TOKEN */:
- accumulator.push(token.value)
- break
- case 17 /* NUMBER_TOKEN */:
- accumulator.push(token.number.toString())
- break
- case 4 /* COMMA_TOKEN */:
- results.push(accumulator.join(' '))
- accumulator.length = 0
- break
- }
- })
- if (accumulator.length) {
- results.push(accumulator.join(' '))
- }
- return results.map(function (result) {
- return result.indexOf(' ') === -1 ? result : "'" + result + "'"
- })
- }
- }
- var fontSize = {
- name: 'font-size',
- initialValue: '0',
- prefix: false,
- type: 3 /* TYPE_VALUE */,
- format: 'length'
- }
- var fontWeight = {
- name: 'font-weight',
- initialValue: 'normal',
- type: 0 /* VALUE */,
- prefix: false,
- parse: function parse(_context, token) {
- if (isNumberToken(token)) {
- return token.number
- }
- if (isIdentToken(token)) {
- switch (token.value) {
- case 'bold':
- return 700
- case 'normal':
- default:
- return 400
- }
- }
- return 400
- }
- }
- var fontVariant = {
- name: 'font-variant',
- initialValue: 'none',
- type: 1 /* LIST */,
- prefix: false,
- parse: function parse(_context, tokens) {
- return tokens.filter(isIdentToken).map(function (token) {
- return token.value
- })
- }
- }
- var fontStyle = {
- name: 'font-style',
- initialValue: 'normal',
- prefix: false,
- type: 2 /* IDENT_VALUE */,
- parse: function parse(_context, overflow) {
- switch (overflow) {
- case 'oblique':
- return 'oblique' /* OBLIQUE */
- case 'italic':
- return 'italic' /* ITALIC */
- case 'normal':
- default:
- return 'normal' /* NORMAL */
- }
- }
- }
- var contains = function contains(bit, value) {
- return (bit & value) !== 0
- }
- var content = {
- name: 'content',
- initialValue: 'none',
- type: 1 /* LIST */,
- prefix: false,
- parse: function parse(_context, tokens) {
- if (tokens.length === 0) {
- return []
- }
- var first = tokens[0]
- if (
- first.type === 20 /* IDENT_TOKEN */ &&
- first.value === 'none'
- ) {
- return []
- }
- return tokens
- }
- }
- var counterIncrement = {
- name: 'counter-increment',
- initialValue: 'none',
- prefix: true,
- type: 1 /* LIST */,
- parse: function parse(_context, tokens) {
- if (tokens.length === 0) {
- return null
- }
- var first = tokens[0]
- if (
- first.type === 20 /* IDENT_TOKEN */ &&
- first.value === 'none'
- ) {
- return null
- }
- var increments = []
- var filtered = tokens.filter(nonWhiteSpace)
- for (var i = 0; i < filtered.length; i++) {
- var counter = filtered[i]
- var next = filtered[i + 1]
- if (counter.type === 20 /* IDENT_TOKEN */) {
- var increment = next && isNumberToken(next) ? next.number : 1
- increments.push({
- counter: counter.value,
- increment: increment
- })
- }
- }
- return increments
- }
- }
- var counterReset = {
- name: 'counter-reset',
- initialValue: 'none',
- prefix: true,
- type: 1 /* LIST */,
- parse: function parse(_context, tokens) {
- if (tokens.length === 0) {
- return []
- }
- var resets = []
- var filtered = tokens.filter(nonWhiteSpace)
- for (var i = 0; i < filtered.length; i++) {
- var counter = filtered[i]
- var next = filtered[i + 1]
- if (isIdentToken(counter) && counter.value !== 'none') {
- var reset = next && isNumberToken(next) ? next.number : 0
- resets.push({ counter: counter.value, reset: reset })
- }
- }
- return resets
- }
- }
- var duration = {
- name: 'duration',
- initialValue: '0s',
- prefix: false,
- type: 1 /* LIST */,
- parse: function parse(context, tokens) {
- return tokens.filter(isDimensionToken).map(function (token) {
- return time.parse(context, token)
- })
- }
- }
- var quotes = {
- name: 'quotes',
- initialValue: 'none',
- prefix: true,
- type: 1 /* LIST */,
- parse: function parse(_context, tokens) {
- if (tokens.length === 0) {
- return null
- }
- var first = tokens[0]
- if (
- first.type === 20 /* IDENT_TOKEN */ &&
- first.value === 'none'
- ) {
- return null
- }
- var quotes = []
- var filtered = tokens.filter(isStringToken)
- if (filtered.length % 2 !== 0) {
- return null
- }
- for (var i = 0; i < filtered.length; i += 2) {
- var open_1 = filtered[i].value
- var close_1 = filtered[i + 1].value
- quotes.push({ open: open_1, close: close_1 })
- }
- return quotes
- }
- }
- var getQuote = function getQuote(quotes, depth, open) {
- if (!quotes) {
- return ''
- }
- var quote = quotes[Math.min(depth, quotes.length - 1)]
- if (!quote) {
- return ''
- }
- return open ? quote.open : quote.close
- }
- var boxShadow = {
- name: 'box-shadow',
- initialValue: 'none',
- type: 1 /* LIST */,
- prefix: false,
- parse: function parse(context, tokens) {
- if (tokens.length === 1 && isIdentWithValue(tokens[0], 'none')) {
- return []
- }
- return parseFunctionArgs(tokens).map(function (values) {
- var shadow = {
- color: 0x000000ff,
- offsetX: ZERO_LENGTH,
- offsetY: ZERO_LENGTH,
- blur: ZERO_LENGTH,
- spread: ZERO_LENGTH,
- inset: false
- }
- var c = 0
- for (var i = 0; i < values.length; i++) {
- var token = values[i]
- if (isIdentWithValue(token, 'inset')) {
- shadow.inset = true
- } else if (isLength(token)) {
- if (c === 0) {
- shadow.offsetX = token
- } else if (c === 1) {
- shadow.offsetY = token
- } else if (c === 2) {
- shadow.blur = token
- } else {
- shadow.spread = token
- }
- c++
- } else {
- shadow.color = color$1.parse(context, token)
- }
- }
- return shadow
- })
- }
- }
- var paintOrder = {
- name: 'paint-order',
- initialValue: 'normal',
- prefix: false,
- type: 1 /* LIST */,
- parse: function parse(_context, tokens) {
- var DEFAULT_VALUE = [
- 0 /* FILL */, 1 /* STROKE */, 2 /* MARKERS */
- ]
- var layers = []
- tokens.filter(isIdentToken).forEach(function (token) {
- switch (token.value) {
- case 'stroke':
- layers.push(1 /* STROKE */)
- break
- case 'fill':
- layers.push(0 /* FILL */)
- break
- case 'markers':
- layers.push(2 /* MARKERS */)
- break
- }
- })
- DEFAULT_VALUE.forEach(function (value) {
- if (layers.indexOf(value) === -1) {
- layers.push(value)
- }
- })
- return layers
- }
- }
- var webkitTextStrokeColor = {
- name: '-webkit-text-stroke-color',
- initialValue: 'currentcolor',
- prefix: false,
- type: 3 /* TYPE_VALUE */,
- format: 'color'
- }
- var webkitTextStrokeWidth = {
- name: '-webkit-text-stroke-width',
- initialValue: '0',
- type: 0 /* VALUE */,
- prefix: false,
- parse: function parse(_context, token) {
- if (isDimensionToken(token)) {
- return token.number
- }
- return 0
- }
- }
- var CSSParsedDeclaration = /** @class */ (function () {
- function CSSParsedDeclaration(context, declaration) {
- var _a, _b
- this.animationDuration = parse(
- context,
- duration,
- declaration.animationDuration
- )
- this.backgroundClip = parse(
- context,
- backgroundClip,
- declaration.backgroundClip
- )
- this.backgroundColor = parse(
- context,
- backgroundColor,
- declaration.backgroundColor
- )
- this.backgroundImage = parse(
- context,
- backgroundImage,
- declaration.backgroundImage
- )
- this.backgroundOrigin = parse(
- context,
- backgroundOrigin,
- declaration.backgroundOrigin
- )
- this.backgroundPosition = parse(
- context,
- backgroundPosition,
- declaration.backgroundPosition
- )
- this.backgroundRepeat = parse(
- context,
- backgroundRepeat,
- declaration.backgroundRepeat
- )
- this.backgroundSize = parse(
- context,
- backgroundSize,
- declaration.backgroundSize
- )
- this.borderTopColor = parse(
- context,
- borderTopColor,
- declaration.borderTopColor
- )
- this.borderRightColor = parse(
- context,
- borderRightColor,
- declaration.borderRightColor
- )
- this.borderBottomColor = parse(
- context,
- borderBottomColor,
- declaration.borderBottomColor
- )
- this.borderLeftColor = parse(
- context,
- borderLeftColor,
- declaration.borderLeftColor
- )
- this.borderTopLeftRadius = parse(
- context,
- borderTopLeftRadius,
- declaration.borderTopLeftRadius
- )
- this.borderTopRightRadius = parse(
- context,
- borderTopRightRadius,
- declaration.borderTopRightRadius
- )
- this.borderBottomRightRadius = parse(
- context,
- borderBottomRightRadius,
- declaration.borderBottomRightRadius
- )
- this.borderBottomLeftRadius = parse(
- context,
- borderBottomLeftRadius,
- declaration.borderBottomLeftRadius
- )
- this.borderTopStyle = parse(
- context,
- borderTopStyle,
- declaration.borderTopStyle
- )
- this.borderRightStyle = parse(
- context,
- borderRightStyle,
- declaration.borderRightStyle
- )
- this.borderBottomStyle = parse(
- context,
- borderBottomStyle,
- declaration.borderBottomStyle
- )
- this.borderLeftStyle = parse(
- context,
- borderLeftStyle,
- declaration.borderLeftStyle
- )
- this.borderTopWidth = parse(
- context,
- borderTopWidth,
- declaration.borderTopWidth
- )
- this.borderRightWidth = parse(
- context,
- borderRightWidth,
- declaration.borderRightWidth
- )
- this.borderBottomWidth = parse(
- context,
- borderBottomWidth,
- declaration.borderBottomWidth
- )
- this.borderLeftWidth = parse(
- context,
- borderLeftWidth,
- declaration.borderLeftWidth
- )
- this.boxShadow = parse(context, boxShadow, declaration.boxShadow)
- this.color = parse(context, color, declaration.color)
- this.direction = parse(context, direction, declaration.direction)
- this.display = parse(context, display, declaration.display)
- this.float = parse(context, float, declaration.cssFloat)
- this.fontFamily = parse(
- context,
- fontFamily,
- declaration.fontFamily
- )
- this.fontSize = parse(context, fontSize, declaration.fontSize)
- this.fontStyle = parse(context, fontStyle, declaration.fontStyle)
- this.fontVariant = parse(
- context,
- fontVariant,
- declaration.fontVariant
- )
- this.fontWeight = parse(
- context,
- fontWeight,
- declaration.fontWeight
- )
- this.letterSpacing = parse(
- context,
- letterSpacing,
- declaration.letterSpacing
- )
- this.lineBreak = parse(context, lineBreak, declaration.lineBreak)
- this.lineHeight = parse(
- context,
- lineHeight,
- declaration.lineHeight
- )
- this.listStyleImage = parse(
- context,
- listStyleImage,
- declaration.listStyleImage
- )
- this.listStylePosition = parse(
- context,
- listStylePosition,
- declaration.listStylePosition
- )
- this.listStyleType = parse(
- context,
- listStyleType,
- declaration.listStyleType
- )
- this.marginTop = parse(context, marginTop, declaration.marginTop)
- this.marginRight = parse(
- context,
- marginRight,
- declaration.marginRight
- )
- this.marginBottom = parse(
- context,
- marginBottom,
- declaration.marginBottom
- )
- this.marginLeft = parse(
- context,
- marginLeft,
- declaration.marginLeft
- )
- this.opacity = parse(context, opacity, declaration.opacity)
- var overflowTuple = parse(context, overflow, declaration.overflow)
- this.overflowX = overflowTuple[0]
- this.overflowY = overflowTuple[overflowTuple.length > 1 ? 1 : 0]
- this.overflowWrap = parse(
- context,
- overflowWrap,
- declaration.overflowWrap
- )
- this.paddingTop = parse(
- context,
- paddingTop,
- declaration.paddingTop
- )
- this.paddingRight = parse(
- context,
- paddingRight,
- declaration.paddingRight
- )
- this.paddingBottom = parse(
- context,
- paddingBottom,
- declaration.paddingBottom
- )
- this.paddingLeft = parse(
- context,
- paddingLeft,
- declaration.paddingLeft
- )
- this.paintOrder = parse(
- context,
- paintOrder,
- declaration.paintOrder
- )
- this.position = parse(context, position, declaration.position)
- this.textAlign = parse(context, textAlign, declaration.textAlign)
- this.textDecorationColor = parse(
- context,
- textDecorationColor,
- (_a = declaration.textDecorationColor) !== null && _a !== void 0
- ? _a
- : declaration.color
- )
- this.textDecorationLine = parse(
- context,
- textDecorationLine,
- (_b = declaration.textDecorationLine) !== null && _b !== void 0
- ? _b
- : declaration.textDecoration
- )
- this.textShadow = parse(
- context,
- textShadow,
- declaration.textShadow
- )
- this.textTransform = parse(
- context,
- textTransform,
- declaration.textTransform
- )
- this.transform = parse(
- context,
- transform$1,
- declaration.transform
- )
- this.transformOrigin = parse(
- context,
- transformOrigin,
- declaration.transformOrigin
- )
- this.visibility = parse(
- context,
- visibility,
- declaration.visibility
- )
- this.webkitTextStrokeColor = parse(
- context,
- webkitTextStrokeColor,
- declaration.webkitTextStrokeColor
- )
- this.webkitTextStrokeWidth = parse(
- context,
- webkitTextStrokeWidth,
- declaration.webkitTextStrokeWidth
- )
- this.wordBreak = parse(context, wordBreak, declaration.wordBreak)
- this.zIndex = parse(context, zIndex, declaration.zIndex)
- }
- CSSParsedDeclaration.prototype.isVisible = function () {
- return (
- this.display > 0 &&
- this.opacity > 0 &&
- this.visibility === 0 /* VISIBLE */
- )
- }
- CSSParsedDeclaration.prototype.isTransparent = function () {
- return isTransparent(this.backgroundColor)
- }
- CSSParsedDeclaration.prototype.isTransformed = function () {
- return this.transform !== null
- }
- CSSParsedDeclaration.prototype.isPositioned = function () {
- return this.position !== 0 /* STATIC */
- }
- CSSParsedDeclaration.prototype.isPositionedWithZIndex =
- function () {
- return this.isPositioned() && !this.zIndex.auto
- }
- CSSParsedDeclaration.prototype.isFloating = function () {
- return this.float !== 0 /* NONE */
- }
- CSSParsedDeclaration.prototype.isInlineLevel = function () {
- return (
- contains(this.display, 4 /* INLINE */) ||
- contains(this.display, 33554432 /* INLINE_BLOCK */) ||
- contains(this.display, 268435456 /* INLINE_FLEX */) ||
- contains(this.display, 536870912 /* INLINE_GRID */) ||
- contains(this.display, 67108864 /* INLINE_LIST_ITEM */) ||
- contains(this.display, 134217728 /* INLINE_TABLE */)
- )
- }
- return CSSParsedDeclaration
- })()
- var CSSParsedPseudoDeclaration = /** @class */ (function () {
- function CSSParsedPseudoDeclaration(context, declaration) {
- this.content = parse(context, content, declaration.content)
- this.quotes = parse(context, quotes, declaration.quotes)
- }
- return CSSParsedPseudoDeclaration
- })()
- var CSSParsedCounterDeclaration = /** @class */ (function () {
- function CSSParsedCounterDeclaration(context, declaration) {
- this.counterIncrement = parse(
- context,
- counterIncrement,
- declaration.counterIncrement
- )
- this.counterReset = parse(
- context,
- counterReset,
- declaration.counterReset
- )
- }
- return CSSParsedCounterDeclaration
- })() // eslint-disable-next-line @typescript-eslint/no-explicit-any
- var parse = function parse(context, descriptor, style) {
- var tokenizer = new Tokenizer()
- var value =
- style !== null && typeof style !== 'undefined'
- ? style.toString()
- : descriptor.initialValue
- tokenizer.write(value)
- var parser = new Parser(tokenizer.read())
- switch (descriptor.type) {
- case 2 /* IDENT_VALUE */:
- var token = parser.parseComponentValue()
- return descriptor.parse(
- context,
- isIdentToken(token) ? token.value : descriptor.initialValue
- )
- case 0 /* VALUE */:
- return descriptor.parse(context, parser.parseComponentValue())
- case 1 /* LIST */:
- return descriptor.parse(context, parser.parseComponentValues())
- case 4 /* TOKEN_VALUE */:
- return parser.parseComponentValue()
- case 3 /* TYPE_VALUE */:
- switch (descriptor.format) {
- case 'angle':
- return angle.parse(context, parser.parseComponentValue())
- case 'color':
- return color$1.parse(context, parser.parseComponentValue())
- case 'image':
- return image.parse(context, parser.parseComponentValue())
- case 'length':
- var length_1 = parser.parseComponentValue()
- return isLength(length_1) ? length_1 : ZERO_LENGTH
- case 'length-percentage':
- var value_1 = parser.parseComponentValue()
- return isLengthPercentage(value_1) ? value_1 : ZERO_LENGTH
- case 'time':
- return time.parse(context, parser.parseComponentValue())
- }
- break
- }
- }
- var elementDebuggerAttribute = 'data-html2canvas-debug'
- var getElementDebugType = function getElementDebugType(element) {
- var attribute = element.getAttribute(elementDebuggerAttribute)
- switch (attribute) {
- case 'all':
- return 1 /* ALL */
- case 'clone':
- return 2 /* CLONE */
- case 'parse':
- return 3 /* PARSE */
- case 'render':
- return 4 /* RENDER */
- default:
- return 0 /* NONE */
- }
- }
- var isDebugging = function isDebugging(element, type) {
- var elementType = getElementDebugType(element)
- return elementType === 1 /* ALL */ || type === elementType
- }
- var ElementContainer = /** @class */ (function () {
- function ElementContainer(context, element) {
- this.context = context
- this.textNodes = []
- this.elements = []
- this.flags = 0
- if (isDebugging(element, 3 /* PARSE */)) {
- debugger
- }
- this.styles = new CSSParsedDeclaration(
- context,
- window.getComputedStyle(element, null)
- )
- if (isHTMLElementNode(element)) {
- if (
- this.styles.animationDuration.some(function (duration) {
- return duration > 0
- })
- ) {
- element.style.animationDuration = '0s'
- }
- if (this.styles.transform !== null) {
- // getBoundingClientRect takes transforms into account
- element.style.transform = 'none'
- }
- }
- this.bounds = parseBounds(this.context, element)
- if (isDebugging(element, 4 /* RENDER */)) {
- this.flags |= 16 /* DEBUG_RENDER */
- }
- }
- return ElementContainer
- })()
- /*
- * text-segmentation 1.0.3 <https://github.com/niklasvh/text-segmentation>
- * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>
- * Released under MIT License
- */ var base64 =
- 'AAAAAAAAAAAAEA4AGBkAAFAaAAACAAAAAAAIABAAGAAwADgACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAAQABIAEQATAAIABAACAAQAAgAEAAIABAAVABcAAgAEAAIABAACAAQAGAAaABwAHgAgACIAI4AlgAIABAAmwCjAKgAsAC2AL4AvQDFAMoA0gBPAVYBWgEIAAgACACMANoAYgFkAWwBdAF8AX0BhQGNAZUBlgGeAaMBlQGWAasBswF8AbsBwwF0AcsBYwHTAQgA2wG/AOMBdAF8AekB8QF0AfkB+wHiAHQBfAEIAAMC5gQIAAsCEgIIAAgAFgIeAggAIgIpAggAMQI5AkACygEIAAgASAJQAlgCYAIIAAgACAAKBQoFCgUTBRMFGQUrBSsFCAAIAAgACAAIAAgACAAIAAgACABdAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABoAmgCrwGvAQgAbgJ2AggAHgEIAAgACADnAXsCCAAIAAgAgwIIAAgACAAIAAgACACKAggAkQKZAggAPADJAAgAoQKkAqwCsgK6AsICCADJAggA0AIIAAgACAAIANYC3gIIAAgACAAIAAgACABAAOYCCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAkASoB+QIEAAgACAA8AEMCCABCBQgACABJBVAFCAAIAAgACAAIAAgACAAIAAgACABTBVoFCAAIAFoFCABfBWUFCAAIAAgACAAIAAgAbQUIAAgACAAIAAgACABzBXsFfQWFBYoFigWKBZEFigWKBYoFmAWfBaYFrgWxBbkFCAAIAAgACAAIAAgACAAIAAgACAAIAMEFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAMgFCADQBQgACAAIAAgACAAIAAgACAAIAAgACAAIAO4CCAAIAAgAiQAIAAgACABAAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAD0AggACAD8AggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIANYFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAMDvwAIAAgAJAIIAAgACAAIAAgACAAIAAgACwMTAwgACAB9BOsEGwMjAwgAKwMyAwsFYgE3A/MEPwMIAEUDTQNRAwgAWQOsAGEDCAAIAAgACAAIAAgACABpAzQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFIQUoBSwFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABtAwgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABMAEwACAAIAAgACAAIABgACAAIAAgACAC/AAgACAAyAQgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACAAIAAwAAgACAAIAAgACAAIAAgACAAIAAAARABIAAgACAAIABQASAAIAAgAIABwAEAAjgCIABsAqAC2AL0AigDQAtwC+IJIQqVAZUBWQqVAZUBlQGVAZUBlQGrC5UBlQGVAZUBlQGVAZUBlQGVAXsKlQGVAbAK6wsrDGUMpQzlDJUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAfAKAAuZA64AtwCJALoC6ADwAAgAuACgA/oEpgO6AqsD+AAIAAgAswMIAAgACAAIAIkAuwP5AfsBwwPLAwgACAAIAAgACADRA9kDCAAIAOED6QMIAAgACAAIAAgACADuA/YDCAAIAP4DyQAIAAgABgQIAAgAXQAOBAgACAAIAAgACAAIABMECAAIAAgACAAIAAgACAD8AAQBCAAIAAgAGgQiBCoECAExBAgAEAEIAAgACAAIAAgACAAIAAgACAAIAAgACAA4BAgACABABEYECAAIAAgATAQYAQgAVAQIAAgACAAIAAgACAAIAAgACAAIAFoECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAOQEIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAB+BAcACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEABhgSMBAgACAAIAAgAlAQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAwAEAAQABAADAAMAAwADAAQABAAEAAQABAAEAAQABHATAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAdQMIAAgACAAIAAgACAAIAMkACAAIAAgAfQMIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACFA4kDCAAIAAgACAAIAOcBCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAIcDCAAIAAgACAAIAAgACAAIAAgACAAIAJEDCAAIAAgACADFAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABgBAgAZgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAbAQCBXIECAAIAHkECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABAAJwEQACjBKoEsgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAC6BMIECAAIAAgACAAIAAgACABmBAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAxwQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAGYECAAIAAgAzgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBd0FXwUIAOIF6gXxBYoF3gT5BQAGCAaKBYoFigWKBYoFigWKBYoFigWKBYoFigXWBIoFigWKBYoFigWKBYoFigWKBYsFEAaKBYoFigWKBYoFigWKBRQGCACKBYoFigWKBQgACAAIANEECAAIABgGigUgBggAJgYIAC4GMwaKBYoF0wQ3Bj4GigWKBYoFigWKBYoFigWKBYoFigWKBYoFigUIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWLBf///////wQABAAEAAQABAAEAAQABAAEAAQAAwAEAAQAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAQADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUAAAAFAAUAAAAFAAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAQAAAAUABQAFAAUABQAFAAAAAAAFAAUAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAFAAUAAQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAAABwAHAAcAAAAHAAcABwAFAAEAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAcABwAFAAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAQABAAAAAAAAAAAAAAAFAAUABQAFAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAHAAcAAAAHAAcAAAAAAAUABQAHAAUAAQAHAAEABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwABAAUABQAFAAUAAAAAAAAAAAAAAAEAAQABAAEAAQABAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABQANAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAABQAHAAUABQAFAAAAAAAAAAcABQAFAAUABQAFAAQABAAEAAQABAAEAAQABAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUAAAAFAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAUAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAcABwAFAAcABwAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUABwAHAAUABQAFAAUAAAAAAAcABwAAAAAABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAAAAAAAAAAABQAFAAAAAAAFAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAFAAUABQAFAAUAAAAFAAUABwAAAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABwAFAAUABQAFAAAAAAAHAAcAAAAAAAcABwAFAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAAAAAAAAAHAAcABwAAAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAUABQAFAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAHAAcABQAHAAcAAAAFAAcABwAAAAcABwAFAAUAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAcABwAFAAUABQAAAAUAAAAHAAcABwAHAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAHAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUAAAAFAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAUAAAAFAAUAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABwAFAAUABQAFAAUABQAAAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABQAFAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAFAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAHAAUABQAFAAUABQAFAAUABwAHAAcABwAHAAcABwAHAAUABwAHAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABwAHAAcABwAFAAUABwAHAAcAAAAAAAAAAAAHAAcABQAHAAcABwAHAAcABwAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAUABQAFAAUABQAFAAUAAAAFAAAABQAAAAAABQAFAAUABQAFAAUABQAFAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAUABQAFAAUABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABwAFAAcABwAHAAcABwAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAUABQAFAAUABwAHAAUABQAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABQAFAAcABwAHAAUABwAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAcABQAFAAUABQAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAAAAAABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAUABQAHAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAFAAUABQAFAAcABwAFAAUABwAHAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAcABwAFAAUABwAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABQAAAAAABQAFAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAcABwAAAAAAAAAAAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAcABwAFAAcABwAAAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAFAAUABQAAAAUABQAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABwAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAHAAcABQAHAAUABQAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAAABwAHAAAAAAAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAFAAUABwAFAAcABwAFAAcABQAFAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAAAAAABwAHAAcABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAFAAcABwAFAAUABQAFAAUABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAUABQAFAAcABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABQAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAAAAAAFAAUABwAHAAcABwAFAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAHAAUABQAFAAUABQAFAAUABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAABQAAAAUABQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAHAAcAAAAFAAUAAAAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABQAFAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAABQAFAAUABQAFAAUABQAAAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAFAAUABQAFAAUADgAOAA4ADgAOAA4ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAMAAwADAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAAAAAAAAAAAAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAAAAAAAAAAAAsADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwACwAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAADgAOAA4AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAAAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4AAAAOAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAAAAAAAAAAAA4AAAAOAAAAAAAAAAAADgAOAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAA='
- /*
- * utrie 1.0.2 <https://github.com/niklasvh/utrie>
- * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>
- * Released under MIT License
- */ var chars$1 =
- 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' // Use a lookup table to find the index.
- var lookup$1 =
- typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256)
- for (var i$1 = 0; i$1 < chars$1.length; i$1++) {
- lookup$1[chars$1.charCodeAt(i$1)] = i$1
- }
- var decode = function decode(base64) {
- var bufferLength = base64.length * 0.75,
- len = base64.length,
- i,
- p = 0,
- encoded1,
- encoded2,
- encoded3,
- encoded4
- if (base64[base64.length - 1] === '=') {
- bufferLength--
- if (base64[base64.length - 2] === '=') {
- bufferLength--
- }
- }
- var buffer =
- typeof ArrayBuffer !== 'undefined' &&
- typeof Uint8Array !== 'undefined' &&
- typeof Uint8Array.prototype.slice !== 'undefined'
- ? new ArrayBuffer(bufferLength)
- : new Array(bufferLength)
- var bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer)
- for (i = 0; i < len; i += 4) {
- encoded1 = lookup$1[base64.charCodeAt(i)]
- encoded2 = lookup$1[base64.charCodeAt(i + 1)]
- encoded3 = lookup$1[base64.charCodeAt(i + 2)]
- encoded4 = lookup$1[base64.charCodeAt(i + 3)]
- bytes[p++] = (encoded1 << 2) | (encoded2 >> 4)
- bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2)
- bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63)
- }
- return buffer
- }
- var polyUint16Array = function polyUint16Array(buffer) {
- var length = buffer.length
- var bytes = []
- for (var i = 0; i < length; i += 2) {
- bytes.push((buffer[i + 1] << 8) | buffer[i])
- }
- return bytes
- }
- var polyUint32Array = function polyUint32Array(buffer) {
- var length = buffer.length
- var bytes = []
- for (var i = 0; i < length; i += 4) {
- bytes.push(
- (buffer[i + 3] << 24) |
- (buffer[i + 2] << 16) |
- (buffer[i + 1] << 8) |
- buffer[i]
- )
- }
- return bytes
- }
- /** Shift size for getting the index-2 table offset. */ var UTRIE2_SHIFT_2 = 5
- /** Shift size for getting the index-1 table offset. */ var UTRIE2_SHIFT_1 =
- 6 + 5
- /**
- * Shift size for shifting left the index array values.
- * Increases possible data size with 16-bit index values at the cost
- * of compactability.
- * This requires data blocks to be aligned by UTRIE2_DATA_GRANULARITY.
- */ var UTRIE2_INDEX_SHIFT = 2
- /**
- * Difference between the two shift sizes,
- * for getting an index-1 offset from an index-2 offset. 6=11-5
- */ var UTRIE2_SHIFT_1_2 = UTRIE2_SHIFT_1 - UTRIE2_SHIFT_2
- /**
- * The part of the index-2 table for U+D800..U+DBFF stores values for
- * lead surrogate code _units_ not code _points_.
- * Values for lead surrogate code _points_ are indexed with this portion of the table.
- * Length=32=0x20=0x400>>UTRIE2_SHIFT_2. (There are 1024=0x400 lead surrogates.)
- */ var UTRIE2_LSCP_INDEX_2_OFFSET = 0x10000 >> UTRIE2_SHIFT_2
- /** Number of entries in a data block. 32=0x20 */ var UTRIE2_DATA_BLOCK_LENGTH =
- 1 << UTRIE2_SHIFT_2
- /** Mask for getting the lower bits for the in-data-block offset. */ var UTRIE2_DATA_MASK =
- UTRIE2_DATA_BLOCK_LENGTH - 1
- var UTRIE2_LSCP_INDEX_2_LENGTH = 0x400 >> UTRIE2_SHIFT_2
- /** Count the lengths of both BMP pieces. 2080=0x820 */ var UTRIE2_INDEX_2_BMP_LENGTH =
- UTRIE2_LSCP_INDEX_2_OFFSET + UTRIE2_LSCP_INDEX_2_LENGTH
- /**
- * The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820.
- * Length 32=0x20 for lead bytes C0..DF, regardless of UTRIE2_SHIFT_2.
- */ var UTRIE2_UTF8_2B_INDEX_2_OFFSET = UTRIE2_INDEX_2_BMP_LENGTH
- var UTRIE2_UTF8_2B_INDEX_2_LENGTH = 0x800 >> 6
- /* U+0800 is the first code point after 2-byte UTF-8 */ /**
- * The index-1 table, only used for supplementary code points, at offset 2112=0x840.
- * Variable length, for code points up to highStart, where the last single-value range starts.
- * Maximum length 512=0x200=0x100000>>UTRIE2_SHIFT_1.
- * (For 0x100000 supplementary code points U+10000..U+10ffff.)
- *
- * The part of the index-2 table for supplementary code points starts
- * after this index-1 table.
- *
- * Both the index-1 table and the following part of the index-2 table
- * are omitted completely if there is only BMP data.
- */ var UTRIE2_INDEX_1_OFFSET =
- UTRIE2_UTF8_2B_INDEX_2_OFFSET + UTRIE2_UTF8_2B_INDEX_2_LENGTH
- /**
- * Number of index-1 entries for the BMP. 32=0x20
- * This part of the index-1 table is omitted from the serialized form.
- */ var UTRIE2_OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> UTRIE2_SHIFT_1
- /** Number of entries in an index-2 block. 64=0x40 */ var UTRIE2_INDEX_2_BLOCK_LENGTH =
- 1 << UTRIE2_SHIFT_1_2
- /** Mask for getting the lower bits for the in-index-2-block offset. */ var UTRIE2_INDEX_2_MASK =
- UTRIE2_INDEX_2_BLOCK_LENGTH - 1
- var slice16 = function slice16(view, start, end) {
- if (view.slice) {
- return view.slice(start, end)
- }
- return new Uint16Array(Array.prototype.slice.call(view, start, end))
- }
- var slice32 = function slice32(view, start, end) {
- if (view.slice) {
- return view.slice(start, end)
- }
- return new Uint32Array(Array.prototype.slice.call(view, start, end))
- }
- var createTrieFromBase64 = function createTrieFromBase64(
- base64,
- _byteLength
- ) {
- var buffer = decode(base64)
- var view32 = Array.isArray(buffer)
- ? polyUint32Array(buffer)
- : new Uint32Array(buffer)
- var view16 = Array.isArray(buffer)
- ? polyUint16Array(buffer)
- : new Uint16Array(buffer)
- var headerLength = 24
- var index = slice16(view16, headerLength / 2, view32[4] / 2)
- var data =
- view32[5] === 2
- ? slice16(view16, (headerLength + view32[4]) / 2)
- : slice32(view32, Math.ceil((headerLength + view32[4]) / 4))
- return new Trie(
- view32[0],
- view32[1],
- view32[2],
- view32[3],
- index,
- data
- )
- }
- var Trie = /** @class */ (function () {
- function Trie(
- initialValue,
- errorValue,
- highStart,
- highValueIndex,
- index,
- data
- ) {
- this.initialValue = initialValue
- this.errorValue = errorValue
- this.highStart = highStart
- this.highValueIndex = highValueIndex
- this.index = index
- this.data = data
- }
- /**
- * Get the value for a code point as stored in the Trie.
- *
- * @param codePoint the code point
- * @return the value
- */ Trie.prototype.get = function (codePoint) {
- var ix
- if (codePoint >= 0) {
- if (
- codePoint < 0x0d800 ||
- (codePoint > 0x0dbff && codePoint <= 0x0ffff)
- ) {
- // Ordinary BMP code point, excluding leading surrogates.
- // BMP uses a single level lookup. BMP index starts at offset 0 in the Trie2 index.
- // 16 bit data is stored in the index array itself.
- ix = this.index[codePoint >> UTRIE2_SHIFT_2]
- ix =
- (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK)
- return this.data[ix]
- }
- if (codePoint <= 0xffff) {
- // Lead Surrogate Code Point. A Separate index section is stored for
- // lead surrogate code units and code points.
- // The main index has the code unit data.
- // For this function, we need the code point data.
- // Note: this expression could be refactored for slightly improved efficiency, but
- // surrogate code points will be so rare in practice that it's not worth it.
- ix =
- this.index[
- UTRIE2_LSCP_INDEX_2_OFFSET +
- ((codePoint - 0xd800) >> UTRIE2_SHIFT_2)
- ]
- ix =
- (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK)
- return this.data[ix]
- }
- if (codePoint < this.highStart) {
- // Supplemental code point, use two-level lookup.
- ix =
- UTRIE2_INDEX_1_OFFSET -
- UTRIE2_OMITTED_BMP_INDEX_1_LENGTH +
- (codePoint >> UTRIE2_SHIFT_1)
- ix = this.index[ix]
- ix += (codePoint >> UTRIE2_SHIFT_2) & UTRIE2_INDEX_2_MASK
- ix = this.index[ix]
- ix =
- (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK)
- return this.data[ix]
- }
- if (codePoint <= 0x10ffff) {
- return this.data[this.highValueIndex]
- }
- } // Fall through. The code point is outside of the legal range of 0..0x10ffff.
- return this.errorValue
- }
- return Trie
- })()
- /*
- * base64-arraybuffer 1.0.2 <https://github.com/niklasvh/base64-arraybuffer>
- * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>
- * Released under MIT License
- */ var chars =
- 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' // Use a lookup table to find the index.
- var lookup =
- typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256)
- for (var i = 0; i < chars.length; i++) {
- lookup[chars.charCodeAt(i)] = i
- }
- var Prepend = 1
- var CR = 2
- var LF = 3
- var Control = 4
- var Extend = 5
- var SpacingMark = 7
- var L = 8
- var V = 9
- var T = 10
- var LV = 11
- var LVT = 12
- var ZWJ = 13
- var Extended_Pictographic = 14
- var RI = 15
- var toCodePoints = function toCodePoints(str) {
- var codePoints = []
- var i = 0
- var length = str.length
- while (i < length) {
- var value = str.charCodeAt(i++)
- if (value >= 0xd800 && value <= 0xdbff && i < length) {
- var extra = str.charCodeAt(i++)
- if ((extra & 0xfc00) === 0xdc00) {
- codePoints.push(
- ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000
- )
- } else {
- codePoints.push(value)
- i--
- }
- } else {
- codePoints.push(value)
- }
- }
- return codePoints
- }
- var fromCodePoint = function fromCodePoint() {
- var codePoints = []
- for (var _i = 0; _i < arguments.length; _i++) {
- codePoints[_i] = arguments[_i]
- }
- if (String.fromCodePoint) {
- return String.fromCodePoint.apply(String, codePoints)
- }
- var length = codePoints.length
- if (!length) {
- return ''
- }
- var codeUnits = []
- var index = -1
- var result = ''
- while (++index < length) {
- var codePoint = codePoints[index]
- if (codePoint <= 0xffff) {
- codeUnits.push(codePoint)
- } else {
- codePoint -= 0x10000
- codeUnits.push(
- (codePoint >> 10) + 0xd800,
- (codePoint % 0x400) + 0xdc00
- )
- }
- if (index + 1 === length || codeUnits.length > 0x4000) {
- result += String.fromCharCode.apply(String, codeUnits)
- codeUnits.length = 0
- }
- }
- return result
- }
- var UnicodeTrie = createTrieFromBase64(base64)
- var BREAK_NOT_ALLOWED = '×'
- var BREAK_ALLOWED = '÷'
- var codePointToClass = function codePointToClass(codePoint) {
- return UnicodeTrie.get(codePoint)
- }
- var _graphemeBreakAtIndex = function _graphemeBreakAtIndex(
- _codePoints,
- classTypes,
- index
- ) {
- var prevIndex = index - 2
- var prev = classTypes[prevIndex]
- var current = classTypes[index - 1]
- var next = classTypes[index] // GB3 Do not break between a CR and LF
- if (current === CR && next === LF) {
- return BREAK_NOT_ALLOWED
- } // GB4 Otherwise, break before and after controls.
- if (current === CR || current === LF || current === Control) {
- return BREAK_ALLOWED
- } // GB5
- if (next === CR || next === LF || next === Control) {
- return BREAK_ALLOWED
- } // Do not break Hangul syllable sequences.
- // GB6
- if (current === L && [L, V, LV, LVT].indexOf(next) !== -1) {
- return BREAK_NOT_ALLOWED
- } // GB7
- if (
- (current === LV || current === V) &&
- (next === V || next === T)
- ) {
- return BREAK_NOT_ALLOWED
- } // GB8
- if ((current === LVT || current === T) && next === T) {
- return BREAK_NOT_ALLOWED
- } // GB9 Do not break before extending characters or ZWJ.
- if (next === ZWJ || next === Extend) {
- return BREAK_NOT_ALLOWED
- } // Do not break before SpacingMarks, or after Prepend characters.
- // GB9a
- if (next === SpacingMark) {
- return BREAK_NOT_ALLOWED
- } // GB9a
- if (current === Prepend) {
- return BREAK_NOT_ALLOWED
- } // GB11 Do not break within emoji modifier sequences or emoji zwj sequences.
- if (current === ZWJ && next === Extended_Pictographic) {
- while (prev === Extend) {
- prev = classTypes[--prevIndex]
- }
- if (prev === Extended_Pictographic) {
- return BREAK_NOT_ALLOWED
- }
- } // GB12 Do not break within emoji flag sequences.
- // That is, do not break between regional indicator (RI) symbols
- // if there is an odd number of RI characters before the break point.
- if (current === RI && next === RI) {
- var countRI = 0
- while (prev === RI) {
- countRI++
- prev = classTypes[--prevIndex]
- }
- if (countRI % 2 === 0) {
- return BREAK_NOT_ALLOWED
- }
- }
- return BREAK_ALLOWED
- }
- var GraphemeBreaker = function GraphemeBreaker(str) {
- var codePoints = toCodePoints(str)
- var length = codePoints.length
- var index = 0
- var lastEnd = 0
- var classTypes = codePoints.map(codePointToClass)
- return {
- next: function next() {
- if (index >= length) {
- return { done: true, value: null }
- }
- var graphemeBreak = BREAK_NOT_ALLOWED
- while (
- index < length &&
- (graphemeBreak = _graphemeBreakAtIndex(
- codePoints,
- classTypes,
- ++index
- )) === BREAK_NOT_ALLOWED
- ) {}
- if (graphemeBreak !== BREAK_NOT_ALLOWED || index === length) {
- var value = fromCodePoint.apply(
- null,
- codePoints.slice(lastEnd, index)
- )
- lastEnd = index
- return { value: value, done: false }
- }
- return { done: true, value: null }
- }
- }
- }
- var splitGraphemes = function splitGraphemes(str) {
- var breaker = GraphemeBreaker(str)
- var graphemes = []
- var bk
- while (!(bk = breaker.next()).done) {
- if (bk.value) {
- graphemes.push(bk.value.slice())
- }
- }
- return graphemes
- }
- var testRangeBounds = function testRangeBounds(document) {
- var TEST_HEIGHT = 123
- if (document.createRange) {
- var range = document.createRange()
- if (range.getBoundingClientRect) {
- var testElement = document.createElement('boundtest')
- testElement.style.height = TEST_HEIGHT + 'px'
- testElement.style.display = 'block'
- document.body.appendChild(testElement)
- range.selectNode(testElement)
- var rangeBounds = range.getBoundingClientRect()
- var rangeHeight = Math.round(rangeBounds.height)
- document.body.removeChild(testElement)
- if (rangeHeight === TEST_HEIGHT) {
- return true
- }
- }
- }
- return false
- }
- var testIOSLineBreak = function testIOSLineBreak(document) {
- var testElement = document.createElement('boundtest')
- testElement.style.width = '50px'
- testElement.style.display = 'block'
- testElement.style.fontSize = '12px'
- testElement.style.letterSpacing = '0px'
- testElement.style.wordSpacing = '0px'
- document.body.appendChild(testElement)
- var range = document.createRange()
- testElement.innerHTML =
- typeof ''.repeat === 'function' ? '👨'.repeat(10) : ''
- var node = testElement.firstChild
- var textList = toCodePoints$1(node.data).map(function (i) {
- return fromCodePoint$1(i)
- })
- var offset = 0
- var prev = {} // ios 13 does not handle range getBoundingClientRect line changes correctly #2177
- var supports = textList.every(function (text, i) {
- range.setStart(node, offset)
- range.setEnd(node, offset + text.length)
- var rect = range.getBoundingClientRect()
- offset += text.length
- var boundAhead = rect.x > prev.x || rect.y > prev.y
- prev = rect
- if (i === 0) {
- return true
- }
- return boundAhead
- })
- document.body.removeChild(testElement)
- return supports
- }
- var testCORS = function testCORS() {
- return typeof new Image().crossOrigin !== 'undefined'
- }
- var testResponseType = function testResponseType() {
- return typeof new XMLHttpRequest().responseType === 'string'
- }
- var testSVG = function testSVG(document) {
- var img = new Image()
- var canvas = document.createElement('canvas')
- var ctx = canvas.getContext('2d')
- if (!ctx) {
- return false
- }
- img.src =
- "data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'></svg>"
- try {
- ctx.drawImage(img, 0, 0)
- canvas.toDataURL()
- } catch (e) {
- return false
- }
- return true
- }
- var isGreenPixel = function isGreenPixel(data) {
- return (
- data[0] === 0 &&
- data[1] === 255 &&
- data[2] === 0 &&
- data[3] === 255
- )
- }
- var testForeignObject = function testForeignObject(document) {
- var canvas = document.createElement('canvas')
- var size = 100
- canvas.width = size
- canvas.height = size
- var ctx = canvas.getContext('2d')
- if (!ctx) {
- return Promise.reject(false)
- }
- ctx.fillStyle = 'rgb(0, 255, 0)'
- ctx.fillRect(0, 0, size, size)
- var img = new Image()
- var greenImageSrc = canvas.toDataURL()
- img.src = greenImageSrc
- var svg = createForeignObjectSVG(size, size, 0, 0, img)
- ctx.fillStyle = 'red'
- ctx.fillRect(0, 0, size, size)
- return loadSerializedSVG$1(svg)
- .then(function (img) {
- ctx.drawImage(img, 0, 0)
- var data = ctx.getImageData(0, 0, size, size).data
- ctx.fillStyle = 'red'
- ctx.fillRect(0, 0, size, size)
- var node = document.createElement('div')
- node.style.backgroundImage = 'url(' + greenImageSrc + ')'
- node.style.height = size + 'px' // Firefox 55 does not render inline <img /> tags
- return isGreenPixel(data)
- ? loadSerializedSVG$1(
- createForeignObjectSVG(size, size, 0, 0, node)
- )
- : Promise.reject(false)
- })
- .then(function (img) {
- ctx.drawImage(img, 0, 0) // Edge does not render background-images
- return isGreenPixel(ctx.getImageData(0, 0, size, size).data)
- })
- .catch(function () {
- return false
- })
- }
- var createForeignObjectSVG = function createForeignObjectSVG(
- width,
- height,
- x,
- y,
- node
- ) {
- var xmlns = 'http://www.w3.org/2000/svg'
- var svg = document.createElementNS(xmlns, 'svg')
- var foreignObject = document.createElementNS(xmlns, 'foreignObject')
- svg.setAttributeNS(null, 'width', width.toString())
- svg.setAttributeNS(null, 'height', height.toString())
- foreignObject.setAttributeNS(null, 'width', '100%')
- foreignObject.setAttributeNS(null, 'height', '100%')
- foreignObject.setAttributeNS(null, 'x', x.toString())
- foreignObject.setAttributeNS(null, 'y', y.toString())
- foreignObject.setAttributeNS(
- null,
- 'externalResourcesRequired',
- 'true'
- )
- svg.appendChild(foreignObject)
- foreignObject.appendChild(node)
- return svg
- }
- var loadSerializedSVG$1 = function loadSerializedSVG$1(svg) {
- return new Promise(function (resolve, reject) {
- var img = new Image()
- img.onload = function () {
- return resolve(img)
- }
- img.onerror = reject
- img.src =
- 'data:image/svg+xml;charset=utf-8,' +
- encodeURIComponent(new XMLSerializer().serializeToString(svg))
- })
- }
- var FEATURES = {
- get SUPPORT_RANGE_BOUNDS() {
- var value = testRangeBounds(document)
- Object.defineProperty(FEATURES, 'SUPPORT_RANGE_BOUNDS', {
- value: value
- })
- return value
- },
- get SUPPORT_WORD_BREAKING() {
- var value =
- FEATURES.SUPPORT_RANGE_BOUNDS && testIOSLineBreak(document)
- Object.defineProperty(FEATURES, 'SUPPORT_WORD_BREAKING', {
- value: value
- })
- return value
- },
- get SUPPORT_SVG_DRAWING() {
- var value = testSVG(document)
- Object.defineProperty(FEATURES, 'SUPPORT_SVG_DRAWING', {
- value: value
- })
- return value
- },
- get SUPPORT_FOREIGNOBJECT_DRAWING() {
- var value =
- typeof Array.from === 'function' &&
- typeof window.fetch === 'function'
- ? testForeignObject(document)
- : Promise.resolve(false)
- Object.defineProperty(FEATURES, 'SUPPORT_FOREIGNOBJECT_DRAWING', {
- value: value
- })
- return value
- },
- get SUPPORT_CORS_IMAGES() {
- var value = testCORS()
- Object.defineProperty(FEATURES, 'SUPPORT_CORS_IMAGES', {
- value: value
- })
- return value
- },
- get SUPPORT_RESPONSE_TYPE() {
- var value = testResponseType()
- Object.defineProperty(FEATURES, 'SUPPORT_RESPONSE_TYPE', {
- value: value
- })
- return value
- },
- get SUPPORT_CORS_XHR() {
- var value = 'withCredentials' in new XMLHttpRequest()
- Object.defineProperty(FEATURES, 'SUPPORT_CORS_XHR', {
- value: value
- })
- return value
- },
- get SUPPORT_NATIVE_TEXT_SEGMENTATION() {
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- var value = !!(typeof Intl !== 'undefined' && Intl.Segmenter)
- Object.defineProperty(
- FEATURES,
- 'SUPPORT_NATIVE_TEXT_SEGMENTATION',
- { value: value }
- )
- return value
- }
- }
- var TextBounds = /** @class */ (function () {
- function TextBounds(text, bounds) {
- this.text = text
- this.bounds = bounds
- }
- return TextBounds
- })()
- var parseTextBounds = function parseTextBounds(
- context,
- value,
- styles,
- node
- ) {
- var textList = breakText(value, styles)
- var textBounds = []
- var offset = 0
- textList.forEach(function (text) {
- if (styles.textDecorationLine.length || text.trim().length > 0) {
- if (FEATURES.SUPPORT_RANGE_BOUNDS) {
- var clientRects = createRange(
- node,
- offset,
- text.length
- ).getClientRects()
- if (clientRects.length > 1) {
- var subSegments = segmentGraphemes(text)
- var subOffset_1 = 0
- subSegments.forEach(function (subSegment) {
- textBounds.push(
- new TextBounds(
- subSegment,
- Bounds.fromDOMRectList(
- context,
- createRange(
- node,
- subOffset_1 + offset,
- subSegment.length
- ).getClientRects()
- )
- )
- )
- subOffset_1 += subSegment.length
- })
- } else {
- textBounds.push(
- new TextBounds(
- text,
- Bounds.fromDOMRectList(context, clientRects)
- )
- )
- }
- } else {
- var replacementNode = node.splitText(text.length)
- textBounds.push(
- new TextBounds(text, getWrapperBounds(context, node))
- )
- node = replacementNode
- }
- } else if (!FEATURES.SUPPORT_RANGE_BOUNDS) {
- node = node.splitText(text.length)
- }
- offset += text.length
- })
- return textBounds
- }
- var getWrapperBounds = function getWrapperBounds(context, node) {
- var ownerDocument = node.ownerDocument
- if (ownerDocument) {
- var wrapper = ownerDocument.createElement('html2canvaswrapper')
- wrapper.appendChild(node.cloneNode(true))
- var parentNode = node.parentNode
- if (parentNode) {
- parentNode.replaceChild(wrapper, node)
- var bounds = parseBounds(context, wrapper)
- if (wrapper.firstChild) {
- parentNode.replaceChild(wrapper.firstChild, wrapper)
- }
- return bounds
- }
- }
- return Bounds.EMPTY
- }
- var createRange = function createRange(node, offset, length) {
- var ownerDocument = node.ownerDocument
- if (!ownerDocument) {
- throw new Error('Node has no owner document')
- }
- var range = ownerDocument.createRange()
- range.setStart(node, offset)
- range.setEnd(node, offset + length)
- return range
- }
- var segmentGraphemes = function segmentGraphemes(value) {
- if (FEATURES.SUPPORT_NATIVE_TEXT_SEGMENTATION) {
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- var segmenter = new Intl.Segmenter(void 0, {
- granularity: 'grapheme'
- }) // eslint-disable-next-line @typescript-eslint/no-explicit-any
- return Array.from(segmenter.segment(value)).map(function (
- segment
- ) {
- return segment.segment
- })
- }
- return splitGraphemes(value)
- }
- var segmentWords = function segmentWords(value, styles) {
- if (FEATURES.SUPPORT_NATIVE_TEXT_SEGMENTATION) {
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- var segmenter = new Intl.Segmenter(void 0, {
- granularity: 'word'
- }) // eslint-disable-next-line @typescript-eslint/no-explicit-any
- return Array.from(segmenter.segment(value)).map(function (
- segment
- ) {
- return segment.segment
- })
- }
- return breakWords(value, styles)
- }
- var breakText = function breakText(value, styles) {
- return styles.letterSpacing !== 0
- ? segmentGraphemes(value)
- : segmentWords(value, styles)
- } // https://drafts.csswg.org/css-text/#word-separator
- var wordSeparators = [
- 0x0020, 0x00a0, 0x1361, 0x10100, 0x10101, 0x1039, 0x1091
- ]
- var breakWords = function breakWords(str, styles) {
- var breaker = LineBreaker(str, {
- lineBreak: styles.lineBreak,
- wordBreak:
- styles.overflowWrap === 'break-word' /* BREAK_WORD */
- ? 'break-word'
- : styles.wordBreak
- })
- var words = []
- var bk
- var _loop_1 = function _loop_1() {
- if (bk.value) {
- var value = bk.value.slice()
- var codePoints = toCodePoints$1(value)
- var word_1 = ''
- codePoints.forEach(function (codePoint) {
- if (wordSeparators.indexOf(codePoint) === -1) {
- word_1 += fromCodePoint$1(codePoint)
- } else {
- if (word_1.length) {
- words.push(word_1)
- }
- words.push(fromCodePoint$1(codePoint))
- word_1 = ''
- }
- })
- if (word_1.length) {
- words.push(word_1)
- }
- }
- }
- while (!(bk = breaker.next()).done) {
- _loop_1()
- }
- return words
- }
- var TextContainer = /** @class */ (function () {
- function TextContainer(context, node, styles) {
- this.text = transform(node.data, styles.textTransform)
- this.textBounds = parseTextBounds(
- context,
- this.text,
- styles,
- node
- )
- }
- return TextContainer
- })()
- var transform = function transform(text, _transform) {
- switch (_transform) {
- case 1 /* LOWERCASE */:
- return text.toLowerCase()
- case 3 /* CAPITALIZE */:
- return text.replace(CAPITALIZE, capitalize)
- case 2 /* UPPERCASE */:
- return text.toUpperCase()
- default:
- return text
- }
- }
- var CAPITALIZE = /(^|\s|:|-|\(|\))([a-z])/g
- var capitalize = function capitalize(m, p1, p2) {
- if (m.length > 0) {
- return p1 + p2.toUpperCase()
- }
- return m
- }
- var ImageElementContainer = /** @class */ (function (_super) {
- __extends(ImageElementContainer, _super)
- function ImageElementContainer(context, img) {
- var _this = _super.call(this, context, img) || this
- _this.src = img.currentSrc || img.src
- _this.intrinsicWidth = img.naturalWidth
- _this.intrinsicHeight = img.naturalHeight
- _this.context.cache.addImage(_this.src)
- return _this
- }
- return ImageElementContainer
- })(ElementContainer)
- var CanvasElementContainer = /** @class */ (function (_super) {
- __extends(CanvasElementContainer, _super)
- function CanvasElementContainer(context, canvas) {
- var _this = _super.call(this, context, canvas) || this
- _this.canvas = canvas
- _this.intrinsicWidth = canvas.width
- _this.intrinsicHeight = canvas.height
- return _this
- }
- return CanvasElementContainer
- })(ElementContainer)
- var SVGElementContainer = /** @class */ (function (_super) {
- __extends(SVGElementContainer, _super)
- function SVGElementContainer(context, img) {
- var _this = _super.call(this, context, img) || this
- var s = new XMLSerializer()
- var bounds = parseBounds(context, img)
- img.setAttribute('width', bounds.width + 'px')
- img.setAttribute('height', bounds.height + 'px')
- _this.svg =
- 'data:image/svg+xml,' +
- encodeURIComponent(s.serializeToString(img))
- _this.intrinsicWidth = img.width.baseVal.value
- _this.intrinsicHeight = img.height.baseVal.value
- _this.context.cache.addImage(_this.svg)
- return _this
- }
- return SVGElementContainer
- })(ElementContainer)
- var LIElementContainer = /** @class */ (function (_super) {
- __extends(LIElementContainer, _super)
- function LIElementContainer(context, element) {
- var _this = _super.call(this, context, element) || this
- _this.value = element.value
- return _this
- }
- return LIElementContainer
- })(ElementContainer)
- var OLElementContainer = /** @class */ (function (_super) {
- __extends(OLElementContainer, _super)
- function OLElementContainer(context, element) {
- var _this = _super.call(this, context, element) || this
- _this.start = element.start
- _this.reversed =
- typeof element.reversed === 'boolean' &&
- element.reversed === true
- return _this
- }
- return OLElementContainer
- })(ElementContainer)
- var CHECKBOX_BORDER_RADIUS = [
- { type: 15 /* DIMENSION_TOKEN */, flags: 0, unit: 'px', number: 3 }
- ]
- var RADIO_BORDER_RADIUS = [
- { type: 16 /* PERCENTAGE_TOKEN */, flags: 0, number: 50 }
- ]
- var reformatInputBounds = function reformatInputBounds(bounds) {
- if (bounds.width > bounds.height) {
- return new Bounds(
- bounds.left + (bounds.width - bounds.height) / 2,
- bounds.top,
- bounds.height,
- bounds.height
- )
- } else if (bounds.width < bounds.height) {
- return new Bounds(
- bounds.left,
- bounds.top + (bounds.height - bounds.width) / 2,
- bounds.width,
- bounds.width
- )
- }
- return bounds
- }
- var getInputValue = function getInputValue(node) {
- var value =
- node.type === PASSWORD
- ? new Array(node.value.length + 1).join('\u2022')
- : node.value
- return value.length === 0 ? node.placeholder || '' : value
- }
- var CHECKBOX = 'checkbox'
- var RADIO = 'radio'
- var PASSWORD = 'password'
- var INPUT_COLOR = 0x2a2a2aff
- var InputElementContainer = /** @class */ (function (_super) {
- __extends(InputElementContainer, _super)
- function InputElementContainer(context, input) {
- var _this = _super.call(this, context, input) || this
- _this.type = input.type.toLowerCase()
- _this.checked = input.checked
- _this.value = getInputValue(input)
- if (_this.type === CHECKBOX || _this.type === RADIO) {
- _this.styles.backgroundColor = 0xdededeff
- _this.styles.borderTopColor =
- _this.styles.borderRightColor =
- _this.styles.borderBottomColor =
- _this.styles.borderLeftColor =
- 0xa5a5a5ff
- _this.styles.borderTopWidth =
- _this.styles.borderRightWidth =
- _this.styles.borderBottomWidth =
- _this.styles.borderLeftWidth =
- 1
- _this.styles.borderTopStyle =
- _this.styles.borderRightStyle =
- _this.styles.borderBottomStyle =
- _this.styles.borderLeftStyle =
- 1 /* SOLID */
- _this.styles.backgroundClip = [0 /* BORDER_BOX */]
- _this.styles.backgroundOrigin = [0 /* BORDER_BOX */]
- _this.bounds = reformatInputBounds(_this.bounds)
- }
- switch (_this.type) {
- case CHECKBOX:
- _this.styles.borderTopRightRadius =
- _this.styles.borderTopLeftRadius =
- _this.styles.borderBottomRightRadius =
- _this.styles.borderBottomLeftRadius =
- CHECKBOX_BORDER_RADIUS
- break
- case RADIO:
- _this.styles.borderTopRightRadius =
- _this.styles.borderTopLeftRadius =
- _this.styles.borderBottomRightRadius =
- _this.styles.borderBottomLeftRadius =
- RADIO_BORDER_RADIUS
- break
- }
- return _this
- }
- return InputElementContainer
- })(ElementContainer)
- var SelectElementContainer = /** @class */ (function (_super) {
- __extends(SelectElementContainer, _super)
- function SelectElementContainer(context, element) {
- var _this = _super.call(this, context, element) || this
- var option = element.options[element.selectedIndex || 0]
- _this.value = option ? option.text || '' : ''
- return _this
- }
- return SelectElementContainer
- })(ElementContainer)
- var TextareaElementContainer = /** @class */ (function (_super) {
- __extends(TextareaElementContainer, _super)
- function TextareaElementContainer(context, element) {
- var _this = _super.call(this, context, element) || this
- _this.value = element.value
- return _this
- }
- return TextareaElementContainer
- })(ElementContainer)
- var IFrameElementContainer = /** @class */ (function (_super) {
- __extends(IFrameElementContainer, _super)
- function IFrameElementContainer(context, iframe) {
- var _this = _super.call(this, context, iframe) || this
- _this.src = iframe.src
- _this.width = parseInt(iframe.width, 10) || 0
- _this.height = parseInt(iframe.height, 10) || 0
- _this.backgroundColor = _this.styles.backgroundColor
- try {
- if (
- iframe.contentWindow &&
- iframe.contentWindow.document &&
- iframe.contentWindow.document.documentElement
- ) {
- _this.tree = parseTree(
- context,
- iframe.contentWindow.document.documentElement
- ) // http://www.w3.org/TR/css3-background/#special-backgrounds
- var documentBackgroundColor = iframe.contentWindow.document
- .documentElement
- ? parseColor(
- context,
- getComputedStyle(
- iframe.contentWindow.document.documentElement
- ).backgroundColor
- )
- : COLORS.TRANSPARENT
- var bodyBackgroundColor = iframe.contentWindow.document.body
- ? parseColor(
- context,
- getComputedStyle(iframe.contentWindow.document.body)
- .backgroundColor
- )
- : COLORS.TRANSPARENT
- _this.backgroundColor = isTransparent(documentBackgroundColor)
- ? isTransparent(bodyBackgroundColor)
- ? _this.styles.backgroundColor
- : bodyBackgroundColor
- : documentBackgroundColor
- }
- } catch (e) {}
- return _this
- }
- return IFrameElementContainer
- })(ElementContainer)
- var LIST_OWNERS = ['OL', 'UL', 'MENU']
- var parseNodeTree = function parseNodeTree(
- context,
- node,
- parent,
- root
- ) {
- for (
- var childNode = node.firstChild, nextNode = void 0;
- childNode;
- childNode = nextNode
- ) {
- nextNode = childNode.nextSibling
- if (isTextNode(childNode) && childNode.data.trim().length > 0) {
- parent.textNodes.push(
- new TextContainer(context, childNode, parent.styles)
- )
- } else if (isElementNode(childNode)) {
- if (isSlotElement(childNode) && childNode.assignedNodes) {
- childNode.assignedNodes().forEach(function (childNode) {
- return parseNodeTree(context, childNode, parent, root)
- })
- } else {
- var container = createContainer(context, childNode)
- if (container.styles.isVisible()) {
- if (
- createsRealStackingContext(childNode, container, root)
- ) {
- container.flags |= 4 /* CREATES_REAL_STACKING_CONTEXT */
- } else if (createsStackingContext(container.styles)) {
- container.flags |= 2 /* CREATES_STACKING_CONTEXT */
- }
- if (LIST_OWNERS.indexOf(childNode.tagName) !== -1) {
- container.flags |= 8 /* IS_LIST_OWNER */
- }
- parent.elements.push(container)
- childNode.slot
- if (childNode.shadowRoot) {
- parseNodeTree(
- context,
- childNode.shadowRoot,
- container,
- root
- )
- } else if (
- !isTextareaElement(childNode) &&
- !isSVGElement(childNode) &&
- !isSelectElement(childNode)
- ) {
- parseNodeTree(context, childNode, container, root)
- }
- }
- }
- }
- }
- }
- var createContainer = function createContainer(context, element) {
- if (isImageElement(element)) {
- return new ImageElementContainer(context, element)
- }
- if (isCanvasElement(element)) {
- return new CanvasElementContainer(context, element)
- }
- if (isSVGElement(element)) {
- return new SVGElementContainer(context, element)
- }
- if (isLIElement(element)) {
- return new LIElementContainer(context, element)
- }
- if (isOLElement(element)) {
- return new OLElementContainer(context, element)
- }
- if (isInputElement(element)) {
- return new InputElementContainer(context, element)
- }
- if (isSelectElement(element)) {
- return new SelectElementContainer(context, element)
- }
- if (isTextareaElement(element)) {
- return new TextareaElementContainer(context, element)
- }
- if (isIFrameElement(element)) {
- return new IFrameElementContainer(context, element)
- }
- return new ElementContainer(context, element)
- }
- var parseTree = function parseTree(context, element) {
- var container = createContainer(context, element)
- container.flags |= 4 /* CREATES_REAL_STACKING_CONTEXT */
- parseNodeTree(context, element, container, container)
- return container
- }
- var createsRealStackingContext = function createsRealStackingContext(
- node,
- container,
- root
- ) {
- return (
- container.styles.isPositionedWithZIndex() ||
- container.styles.opacity < 1 ||
- container.styles.isTransformed() ||
- (isBodyElement(node) && root.styles.isTransparent())
- )
- }
- var createsStackingContext = function createsStackingContext(styles) {
- return styles.isPositioned() || styles.isFloating()
- }
- var isTextNode = function isTextNode(node) {
- return node.nodeType === Node.TEXT_NODE
- }
- var isElementNode = function isElementNode(node) {
- return node.nodeType === Node.ELEMENT_NODE
- }
- var isHTMLElementNode = function isHTMLElementNode(node) {
- return (
- isElementNode(node) &&
- typeof node.style !== 'undefined' &&
- !isSVGElementNode(node)
- )
- }
- var isSVGElementNode = function isSVGElementNode(element) {
- return _typeof(element.className) === 'object'
- }
- var isLIElement = function isLIElement(node) {
- return node.tagName === 'LI'
- }
- var isOLElement = function isOLElement(node) {
- return node.tagName === 'OL'
- }
- var isInputElement = function isInputElement(node) {
- return node.tagName === 'INPUT'
- }
- var isHTMLElement = function isHTMLElement(node) {
- return node.tagName === 'HTML'
- }
- var isSVGElement = function isSVGElement(node) {
- return node.tagName === 'svg'
- }
- var isBodyElement = function isBodyElement(node) {
- return node.tagName === 'BODY'
- }
- var isCanvasElement = function isCanvasElement(node) {
- return node.tagName === 'CANVAS'
- }
- var isVideoElement = function isVideoElement(node) {
- return node.tagName === 'VIDEO'
- }
- var isImageElement = function isImageElement(node) {
- return node.tagName === 'IMG'
- }
- var isIFrameElement = function isIFrameElement(node) {
- return node.tagName === 'IFRAME'
- }
- var isStyleElement = function isStyleElement(node) {
- return node.tagName === 'STYLE'
- }
- var isScriptElement = function isScriptElement(node) {
- return node.tagName === 'SCRIPT'
- }
- var isTextareaElement = function isTextareaElement(node) {
- return node.tagName === 'TEXTAREA'
- }
- var isSelectElement = function isSelectElement(node) {
- return node.tagName === 'SELECT'
- }
- var isSlotElement = function isSlotElement(node) {
- return node.tagName === 'SLOT'
- } // https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name
- var isCustomElement = function isCustomElement(node) {
- return node.tagName.indexOf('-') > 0
- }
- var CounterState = /** @class */ (function () {
- function CounterState() {
- this.counters = {}
- }
- CounterState.prototype.getCounterValue = function (name) {
- var counter = this.counters[name]
- if (counter && counter.length) {
- return counter[counter.length - 1]
- }
- return 1
- }
- CounterState.prototype.getCounterValues = function (name) {
- var counter = this.counters[name]
- return counter ? counter : []
- }
- CounterState.prototype.pop = function (counters) {
- var _this = this
- counters.forEach(function (counter) {
- return _this.counters[counter].pop()
- })
- }
- CounterState.prototype.parse = function (style) {
- var _this = this
- var counterIncrement = style.counterIncrement
- var counterReset = style.counterReset
- var canReset = true
- if (counterIncrement !== null) {
- counterIncrement.forEach(function (entry) {
- var counter = _this.counters[entry.counter]
- if (counter && entry.increment !== 0) {
- canReset = false
- if (!counter.length) {
- counter.push(1)
- }
- counter[Math.max(0, counter.length - 1)] += entry.increment
- }
- })
- }
- var counterNames = []
- if (canReset) {
- counterReset.forEach(function (entry) {
- var counter = _this.counters[entry.counter]
- counterNames.push(entry.counter)
- if (!counter) {
- counter = _this.counters[entry.counter] = []
- }
- counter.push(entry.reset)
- })
- }
- return counterNames
- }
- return CounterState
- })()
- var ROMAN_UPPER = {
- integers: [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1],
- values: [
- 'M',
- 'CM',
- 'D',
- 'CD',
- 'C',
- 'XC',
- 'L',
- 'XL',
- 'X',
- 'IX',
- 'V',
- 'IV',
- 'I'
- ]
- }
- var ARMENIAN = {
- integers: [
- 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 900, 800,
- 700, 600, 500, 400, 300, 200, 100, 90, 80, 70, 60, 50, 40, 30, 20,
- 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
- ],
- values: [
- 'Ք',
- 'Փ',
- 'Ւ',
- 'Ց',
- 'Ր',
- 'Տ',
- 'Վ',
- 'Ս',
- 'Ռ',
- 'Ջ',
- 'Պ',
- 'Չ',
- 'Ո',
- 'Շ',
- 'Ն',
- 'Յ',
- 'Մ',
- 'Ճ',
- 'Ղ',
- 'Ձ',
- 'Հ',
- 'Կ',
- 'Ծ',
- 'Խ',
- 'Լ',
- 'Ի',
- 'Ժ',
- 'Թ',
- 'Ը',
- 'Է',
- 'Զ',
- 'Ե',
- 'Դ',
- 'Գ',
- 'Բ',
- 'Ա'
- ]
- }
- var HEBREW = {
- integers: [
- 10000, 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 400,
- 300, 200, 100, 90, 80, 70, 60, 50, 40, 30, 20, 19, 18, 17, 16, 15,
- 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
- ],
- values: [
- 'י׳',
- 'ט׳',
- 'ח׳',
- 'ז׳',
- 'ו׳',
- 'ה׳',
- 'ד׳',
- 'ג׳',
- 'ב׳',
- 'א׳',
- 'ת',
- 'ש',
- 'ר',
- 'ק',
- 'צ',
- 'פ',
- 'ע',
- 'ס',
- 'נ',
- 'מ',
- 'ל',
- 'כ',
- 'יט',
- 'יח',
- 'יז',
- 'טז',
- 'טו',
- 'י',
- 'ט',
- 'ח',
- 'ז',
- 'ו',
- 'ה',
- 'ד',
- 'ג',
- 'ב',
- 'א'
- ]
- }
- var GEORGIAN = {
- integers: [
- 10000, 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 900,
- 800, 700, 600, 500, 400, 300, 200, 100, 90, 80, 70, 60, 50, 40,
- 30, 20, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
- ],
- values: [
- 'ჵ',
- 'ჰ',
- 'ჯ',
- 'ჴ',
- 'ხ',
- 'ჭ',
- 'წ',
- 'ძ',
- 'ც',
- 'ჩ',
- 'შ',
- 'ყ',
- 'ღ',
- 'ქ',
- 'ფ',
- 'ჳ',
- 'ტ',
- 'ს',
- 'რ',
- 'ჟ',
- 'პ',
- 'ო',
- 'ჲ',
- 'ნ',
- 'მ',
- 'ლ',
- 'კ',
- 'ი',
- 'თ',
- 'ჱ',
- 'ზ',
- 'ვ',
- 'ე',
- 'დ',
- 'გ',
- 'ბ',
- 'ა'
- ]
- }
- var createAdditiveCounter = function createAdditiveCounter(
- value,
- min,
- max,
- symbols,
- fallback,
- suffix
- ) {
- if (value < min || value > max) {
- return createCounterText(value, fallback, suffix.length > 0)
- }
- return (
- symbols.integers.reduce(function (string, integer, index) {
- while (value >= integer) {
- value -= integer
- string += symbols.values[index]
- }
- return string
- }, '') + suffix
- )
- }
- var createCounterStyleWithSymbolResolver =
- function createCounterStyleWithSymbolResolver(
- value,
- codePointRangeLength,
- isNumeric,
- resolver
- ) {
- var string = ''
- do {
- if (!isNumeric) {
- value--
- }
- string = resolver(value) + string
- value /= codePointRangeLength
- } while (value * codePointRangeLength >= codePointRangeLength)
- return string
- }
- var createCounterStyleFromRange =
- function createCounterStyleFromRange(
- value,
- codePointRangeStart,
- codePointRangeEnd,
- isNumeric,
- suffix
- ) {
- var codePointRangeLength =
- codePointRangeEnd - codePointRangeStart + 1
- return (
- (value < 0 ? '-' : '') +
- (createCounterStyleWithSymbolResolver(
- Math.abs(value),
- codePointRangeLength,
- isNumeric,
- function (codePoint) {
- return fromCodePoint$1(
- Math.floor(codePoint % codePointRangeLength) +
- codePointRangeStart
- )
- }
- ) +
- suffix)
- )
- }
- var createCounterStyleFromSymbols =
- function createCounterStyleFromSymbols(value, symbols, suffix) {
- if (suffix === void 0) {
- suffix = '. '
- }
- var codePointRangeLength = symbols.length
- return (
- createCounterStyleWithSymbolResolver(
- Math.abs(value),
- codePointRangeLength,
- false,
- function (codePoint) {
- return symbols[Math.floor(codePoint % codePointRangeLength)]
- }
- ) + suffix
- )
- }
- var CJK_ZEROS = 1 << 0
- var CJK_TEN_COEFFICIENTS = 1 << 1
- var CJK_TEN_HIGH_COEFFICIENTS = 1 << 2
- var CJK_HUNDRED_COEFFICIENTS = 1 << 3
- var createCJKCounter = function createCJKCounter(
- value,
- numbers,
- multipliers,
- negativeSign,
- suffix,
- flags
- ) {
- if (value < -9999 || value > 9999) {
- return createCounterText(
- value,
- 4 /* CJK_DECIMAL */,
- suffix.length > 0
- )
- }
- var tmp = Math.abs(value)
- var string = suffix
- if (tmp === 0) {
- return numbers[0] + string
- }
- for (var digit = 0; tmp > 0 && digit <= 4; digit++) {
- var coefficient = tmp % 10
- if (
- coefficient === 0 &&
- contains(flags, CJK_ZEROS) &&
- string !== ''
- ) {
- string = numbers[coefficient] + string
- } else if (
- coefficient > 1 ||
- (coefficient === 1 && digit === 0) ||
- (coefficient === 1 &&
- digit === 1 &&
- contains(flags, CJK_TEN_COEFFICIENTS)) ||
- (coefficient === 1 &&
- digit === 1 &&
- contains(flags, CJK_TEN_HIGH_COEFFICIENTS) &&
- value > 100) ||
- (coefficient === 1 &&
- digit > 1 &&
- contains(flags, CJK_HUNDRED_COEFFICIENTS))
- ) {
- string =
- numbers[coefficient] +
- (digit > 0 ? multipliers[digit - 1] : '') +
- string
- } else if (coefficient === 1 && digit > 0) {
- string = multipliers[digit - 1] + string
- }
- tmp = Math.floor(tmp / 10)
- }
- return (value < 0 ? negativeSign : '') + string
- }
- var CHINESE_INFORMAL_MULTIPLIERS = '十百千萬'
- var CHINESE_FORMAL_MULTIPLIERS = '拾佰仟萬'
- var JAPANESE_NEGATIVE = 'マイナス'
- var KOREAN_NEGATIVE = '마이너스'
- var createCounterText = function createCounterText(
- value,
- type,
- appendSuffix
- ) {
- var defaultSuffix = appendSuffix ? '. ' : ''
- var cjkSuffix = appendSuffix ? '、' : ''
- var koreanSuffix = appendSuffix ? ', ' : ''
- var spaceSuffix = appendSuffix ? ' ' : ''
- switch (type) {
- case 0 /* DISC */:
- return '•' + spaceSuffix
- case 1 /* CIRCLE */:
- return '◦' + spaceSuffix
- case 2 /* SQUARE */:
- return '◾' + spaceSuffix
- case 5 /* DECIMAL_LEADING_ZERO */:
- var string = createCounterStyleFromRange(
- value,
- 48,
- 57,
- true,
- defaultSuffix
- )
- return string.length < 4 ? '0' + string : string
- case 4 /* CJK_DECIMAL */:
- return createCounterStyleFromSymbols(
- value,
- '〇一二三四五六七八九',
- cjkSuffix
- )
- case 6 /* LOWER_ROMAN */:
- return createAdditiveCounter(
- value,
- 1,
- 3999,
- ROMAN_UPPER,
- 3 /* DECIMAL */,
- defaultSuffix
- ).toLowerCase()
- case 7 /* UPPER_ROMAN */:
- return createAdditiveCounter(
- value,
- 1,
- 3999,
- ROMAN_UPPER,
- 3 /* DECIMAL */,
- defaultSuffix
- )
- case 8 /* LOWER_GREEK */:
- return createCounterStyleFromRange(
- value,
- 945,
- 969,
- false,
- defaultSuffix
- )
- case 9 /* LOWER_ALPHA */:
- return createCounterStyleFromRange(
- value,
- 97,
- 122,
- false,
- defaultSuffix
- )
- case 10 /* UPPER_ALPHA */:
- return createCounterStyleFromRange(
- value,
- 65,
- 90,
- false,
- defaultSuffix
- )
- case 11 /* ARABIC_INDIC */:
- return createCounterStyleFromRange(
- value,
- 1632,
- 1641,
- true,
- defaultSuffix
- )
- case 12 /* ARMENIAN */:
- case 49 /* UPPER_ARMENIAN */:
- return createAdditiveCounter(
- value,
- 1,
- 9999,
- ARMENIAN,
- 3 /* DECIMAL */,
- defaultSuffix
- )
- case 35 /* LOWER_ARMENIAN */:
- return createAdditiveCounter(
- value,
- 1,
- 9999,
- ARMENIAN,
- 3 /* DECIMAL */,
- defaultSuffix
- ).toLowerCase()
- case 13 /* BENGALI */:
- return createCounterStyleFromRange(
- value,
- 2534,
- 2543,
- true,
- defaultSuffix
- )
- case 14 /* CAMBODIAN */:
- case 30 /* KHMER */:
- return createCounterStyleFromRange(
- value,
- 6112,
- 6121,
- true,
- defaultSuffix
- )
- case 15 /* CJK_EARTHLY_BRANCH */:
- return createCounterStyleFromSymbols(
- value,
- '子丑寅卯辰巳午未申酉戌亥',
- cjkSuffix
- )
- case 16 /* CJK_HEAVENLY_STEM */:
- return createCounterStyleFromSymbols(
- value,
- '甲乙丙丁戊己庚辛壬癸',
- cjkSuffix
- )
- case 17 /* CJK_IDEOGRAPHIC */:
- case 48 /* TRAD_CHINESE_INFORMAL */:
- return createCJKCounter(
- value,
- '零一二三四五六七八九',
- CHINESE_INFORMAL_MULTIPLIERS,
- '負',
- cjkSuffix,
- CJK_TEN_COEFFICIENTS |
- CJK_TEN_HIGH_COEFFICIENTS |
- CJK_HUNDRED_COEFFICIENTS
- )
- case 47 /* TRAD_CHINESE_FORMAL */:
- return createCJKCounter(
- value,
- '零壹貳參肆伍陸柒捌玖',
- CHINESE_FORMAL_MULTIPLIERS,
- '負',
- cjkSuffix,
- CJK_ZEROS |
- CJK_TEN_COEFFICIENTS |
- CJK_TEN_HIGH_COEFFICIENTS |
- CJK_HUNDRED_COEFFICIENTS
- )
- case 42 /* SIMP_CHINESE_INFORMAL */:
- return createCJKCounter(
- value,
- '零一二三四五六七八九',
- CHINESE_INFORMAL_MULTIPLIERS,
- '负',
- cjkSuffix,
- CJK_TEN_COEFFICIENTS |
- CJK_TEN_HIGH_COEFFICIENTS |
- CJK_HUNDRED_COEFFICIENTS
- )
- case 41 /* SIMP_CHINESE_FORMAL */:
- return createCJKCounter(
- value,
- '零壹贰叁肆伍陆柒捌玖',
- CHINESE_FORMAL_MULTIPLIERS,
- '负',
- cjkSuffix,
- CJK_ZEROS |
- CJK_TEN_COEFFICIENTS |
- CJK_TEN_HIGH_COEFFICIENTS |
- CJK_HUNDRED_COEFFICIENTS
- )
- case 26 /* JAPANESE_INFORMAL */:
- return createCJKCounter(
- value,
- '〇一二三四五六七八九',
- '十百千万',
- JAPANESE_NEGATIVE,
- cjkSuffix,
- 0
- )
- case 25 /* JAPANESE_FORMAL */:
- return createCJKCounter(
- value,
- '零壱弐参四伍六七八九',
- '拾百千万',
- JAPANESE_NEGATIVE,
- cjkSuffix,
- CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS
- )
- case 31 /* KOREAN_HANGUL_FORMAL */:
- return createCJKCounter(
- value,
- '영일이삼사오육칠팔구',
- '십백천만',
- KOREAN_NEGATIVE,
- koreanSuffix,
- CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS
- )
- case 33 /* KOREAN_HANJA_INFORMAL */:
- return createCJKCounter(
- value,
- '零一二三四五六七八九',
- '十百千萬',
- KOREAN_NEGATIVE,
- koreanSuffix,
- 0
- )
- case 32 /* KOREAN_HANJA_FORMAL */:
- return createCJKCounter(
- value,
- '零壹貳參四五六七八九',
- '拾百千',
- KOREAN_NEGATIVE,
- koreanSuffix,
- CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS
- )
- case 18 /* DEVANAGARI */:
- return createCounterStyleFromRange(
- value,
- 0x966,
- 0x96f,
- true,
- defaultSuffix
- )
- case 20 /* GEORGIAN */:
- return createAdditiveCounter(
- value,
- 1,
- 19999,
- GEORGIAN,
- 3 /* DECIMAL */,
- defaultSuffix
- )
- case 21 /* GUJARATI */:
- return createCounterStyleFromRange(
- value,
- 0xae6,
- 0xaef,
- true,
- defaultSuffix
- )
- case 22 /* GURMUKHI */:
- return createCounterStyleFromRange(
- value,
- 0xa66,
- 0xa6f,
- true,
- defaultSuffix
- )
- case 22 /* HEBREW */:
- return createAdditiveCounter(
- value,
- 1,
- 10999,
- HEBREW,
- 3 /* DECIMAL */,
- defaultSuffix
- )
- case 23 /* HIRAGANA */:
- return createCounterStyleFromSymbols(
- value,
- 'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん'
- )
- case 24 /* HIRAGANA_IROHA */:
- return createCounterStyleFromSymbols(
- value,
- 'いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす'
- )
- case 27 /* KANNADA */:
- return createCounterStyleFromRange(
- value,
- 0xce6,
- 0xcef,
- true,
- defaultSuffix
- )
- case 28 /* KATAKANA */:
- return createCounterStyleFromSymbols(
- value,
- 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン',
- cjkSuffix
- )
- case 29 /* KATAKANA_IROHA */:
- return createCounterStyleFromSymbols(
- value,
- 'イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス',
- cjkSuffix
- )
- case 34 /* LAO */:
- return createCounterStyleFromRange(
- value,
- 0xed0,
- 0xed9,
- true,
- defaultSuffix
- )
- case 37 /* MONGOLIAN */:
- return createCounterStyleFromRange(
- value,
- 0x1810,
- 0x1819,
- true,
- defaultSuffix
- )
- case 38 /* MYANMAR */:
- return createCounterStyleFromRange(
- value,
- 0x1040,
- 0x1049,
- true,
- defaultSuffix
- )
- case 39 /* ORIYA */:
- return createCounterStyleFromRange(
- value,
- 0xb66,
- 0xb6f,
- true,
- defaultSuffix
- )
- case 40 /* PERSIAN */:
- return createCounterStyleFromRange(
- value,
- 0x6f0,
- 0x6f9,
- true,
- defaultSuffix
- )
- case 43 /* TAMIL */:
- return createCounterStyleFromRange(
- value,
- 0xbe6,
- 0xbef,
- true,
- defaultSuffix
- )
- case 44 /* TELUGU */:
- return createCounterStyleFromRange(
- value,
- 0xc66,
- 0xc6f,
- true,
- defaultSuffix
- )
- case 45 /* THAI */:
- return createCounterStyleFromRange(
- value,
- 0xe50,
- 0xe59,
- true,
- defaultSuffix
- )
- case 46 /* TIBETAN */:
- return createCounterStyleFromRange(
- value,
- 0xf20,
- 0xf29,
- true,
- defaultSuffix
- )
- case 3 /* DECIMAL */:
- default:
- return createCounterStyleFromRange(
- value,
- 48,
- 57,
- true,
- defaultSuffix
- )
- }
- }
- var IGNORE_ATTRIBUTE = 'data-html2canvas-ignore'
- var DocumentCloner = /** @class */ (function () {
- function DocumentCloner(context, element, options) {
- this.context = context
- this.options = options
- this.scrolledElements = []
- this.referenceElement = element
- this.counters = new CounterState()
- this.quoteDepth = 0
- if (!element.ownerDocument) {
- throw new Error(
- 'Cloned element does not have an owner document'
- )
- }
- this.documentElement = this.cloneNode(
- element.ownerDocument.documentElement,
- false
- )
- }
- DocumentCloner.prototype.toIFrame = function (
- ownerDocument,
- windowSize
- ) {
- var _this = this
- var iframe = createIFrameContainer(ownerDocument, windowSize)
- if (!iframe.contentWindow) {
- return Promise.reject('Unable to find iframe window')
- }
- var scrollX = ownerDocument.defaultView.pageXOffset
- var scrollY = ownerDocument.defaultView.pageYOffset
- var cloneWindow = iframe.contentWindow
- var documentClone = cloneWindow.document
- /* Chrome doesn't detect relative background-images assigned in inline <style> sheets when fetched through getComputedStyle
- if window url is about:blank, we can assign the url to current by writing onto the document
- */ var iframeLoad = iframeLoader(iframe).then(function () {
- return __awaiter(_this, void 0, void 0, function () {
- var onclone, referenceElement
- return __generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- this.scrolledElements.forEach(restoreNodeScroll)
- if (cloneWindow) {
- cloneWindow.scrollTo(windowSize.left, windowSize.top)
- if (
- /(iPad|iPhone|iPod)/g.test(navigator.userAgent) &&
- (cloneWindow.scrollY !== windowSize.top ||
- cloneWindow.scrollX !== windowSize.left)
- ) {
- this.context.logger.warn(
- 'Unable to restore scroll position for cloned document'
- )
- this.context.windowBounds =
- this.context.windowBounds.add(
- cloneWindow.scrollX - windowSize.left,
- cloneWindow.scrollY - windowSize.top,
- 0,
- 0
- )
- }
- }
- onclone = this.options.onclone
- referenceElement = this.clonedReferenceElement
- if (typeof referenceElement === 'undefined') {
- return [
- 2 /*return*/,
- Promise.reject(
- 'Error finding the ' +
- this.referenceElement.nodeName +
- ' in the cloned document'
- )
- ]
- }
- if (!(documentClone.fonts && documentClone.fonts.ready))
- return [3 /*break*/, 2]
- return [4 /*yield*/, documentClone.fonts.ready]
- case 1:
- _a.sent()
- _a.label = 2
- case 2:
- if (!/(AppleWebKit)/g.test(navigator.userAgent))
- return [3 /*break*/, 4]
- return [4 /*yield*/, imagesReady(documentClone)]
- case 3:
- _a.sent()
- _a.label = 4
- case 4:
- if (typeof onclone === 'function') {
- return [
- 2 /*return*/,
- Promise.resolve()
- .then(function () {
- return onclone(documentClone, referenceElement)
- })
- .then(function () {
- return iframe
- })
- ]
- }
- return [2 /*return*/, iframe]
- }
- })
- })
- })
- documentClone.open()
- documentClone.write(
- serializeDoctype(document.doctype) + '<html></html>'
- ) // Chrome scrolls the parent document for some reason after the write to the cloned window???
- restoreOwnerScroll(
- this.referenceElement.ownerDocument,
- scrollX,
- scrollY
- )
- documentClone.replaceChild(
- documentClone.adoptNode(this.documentElement),
- documentClone.documentElement
- )
- documentClone.close()
- return iframeLoad
- }
- DocumentCloner.prototype.createElementClone = function (node) {
- if (isDebugging(node, 2 /* CLONE */)) {
- debugger
- }
- if (isCanvasElement(node)) {
- return this.createCanvasClone(node)
- }
- if (isVideoElement(node)) {
- return this.createVideoClone(node)
- }
- if (isStyleElement(node)) {
- return this.createStyleClone(node)
- }
- var clone = node.cloneNode(false)
- if (isImageElement(clone)) {
- if (
- isImageElement(node) &&
- node.currentSrc &&
- node.currentSrc !== node.src
- ) {
- clone.src = node.currentSrc
- clone.srcset = ''
- }
- if (clone.loading === 'lazy') {
- clone.loading = 'eager'
- }
- }
- if (isCustomElement(clone)) {
- return this.createCustomElementClone(clone)
- }
- return clone
- }
- DocumentCloner.prototype.createCustomElementClone = function (
- node
- ) {
- var clone = document.createElement('html2canvascustomelement')
- copyCSSStyles(node.style, clone)
- return clone
- }
- DocumentCloner.prototype.createStyleClone = function (node) {
- try {
- var sheet = node.sheet
- if (sheet && sheet.cssRules) {
- var css = [].slice
- .call(sheet.cssRules, 0)
- .reduce(function (css, rule) {
- if (rule && typeof rule.cssText === 'string') {
- return css + rule.cssText
- }
- return css
- }, '')
- var style = node.cloneNode(false)
- style.textContent = css
- return style
- }
- } catch (e) {
- // accessing node.sheet.cssRules throws a DOMException
- this.context.logger.error(
- 'Unable to access cssRules property',
- e
- )
- if (e.name !== 'SecurityError') {
- throw e
- }
- }
- return node.cloneNode(false)
- }
- DocumentCloner.prototype.createCanvasClone = function (canvas) {
- var _a
- if (this.options.inlineImages && canvas.ownerDocument) {
- var img = canvas.ownerDocument.createElement('img')
- try {
- img.src = canvas.toDataURL()
- return img
- } catch (e) {
- this.context.logger.info(
- 'Unable to inline canvas contents, canvas is tainted',
- canvas
- )
- }
- }
- var clonedCanvas = canvas.cloneNode(false)
- try {
- clonedCanvas.width = canvas.width
- clonedCanvas.height = canvas.height
- var ctx = canvas.getContext('2d')
- var clonedCtx = clonedCanvas.getContext('2d')
- if (clonedCtx) {
- if (!this.options.allowTaint && ctx) {
- clonedCtx.putImageData(
- ctx.getImageData(0, 0, canvas.width, canvas.height),
- 0,
- 0
- )
- } else {
- var gl =
- (_a = canvas.getContext('webgl2')) !== null &&
- _a !== void 0
- ? _a
- : canvas.getContext('webgl')
- if (gl) {
- var attribs = gl.getContextAttributes()
- if (
- (attribs === null || attribs === void 0
- ? void 0
- : attribs.preserveDrawingBuffer) === false
- ) {
- this.context.logger.warn(
- 'Unable to clone WebGL context as it has preserveDrawingBuffer=false',
- canvas
- )
- }
- }
- clonedCtx.drawImage(canvas, 0, 0)
- }
- }
- return clonedCanvas
- } catch (e) {
- this.context.logger.info(
- 'Unable to clone canvas as it is tainted',
- canvas
- )
- }
- return clonedCanvas
- }
- DocumentCloner.prototype.createVideoClone = function (video) {
- var canvas = video.ownerDocument.createElement('canvas')
- canvas.width = video.offsetWidth
- canvas.height = video.offsetHeight
- var ctx = canvas.getContext('2d')
- try {
- if (ctx) {
- ctx.drawImage(video, 0, 0, canvas.width, canvas.height)
- if (!this.options.allowTaint) {
- ctx.getImageData(0, 0, canvas.width, canvas.height)
- }
- }
- return canvas
- } catch (e) {
- this.context.logger.info(
- 'Unable to clone video as it is tainted',
- video
- )
- }
- var blankCanvas = video.ownerDocument.createElement('canvas')
- blankCanvas.width = video.offsetWidth
- blankCanvas.height = video.offsetHeight
- return blankCanvas
- }
- DocumentCloner.prototype.appendChildNode = function (
- clone,
- child,
- copyStyles
- ) {
- if (
- !isElementNode(child) ||
- (!isScriptElement(child) &&
- !child.hasAttribute(IGNORE_ATTRIBUTE) &&
- (typeof this.options.ignoreElements !== 'function' ||
- !this.options.ignoreElements(child)))
- ) {
- if (
- !this.options.copyStyles ||
- !isElementNode(child) ||
- !isStyleElement(child)
- ) {
- clone.appendChild(this.cloneNode(child, copyStyles))
- }
- }
- }
- DocumentCloner.prototype.cloneChildNodes = function (
- node,
- clone,
- copyStyles
- ) {
- var _this = this
- for (
- var child = node.shadowRoot
- ? node.shadowRoot.firstChild
- : node.firstChild;
- child;
- child = child.nextSibling
- ) {
- if (
- isElementNode(child) &&
- isSlotElement(child) &&
- typeof child.assignedNodes === 'function'
- ) {
- var assignedNodes = child.assignedNodes()
- if (assignedNodes.length) {
- assignedNodes.forEach(function (assignedNode) {
- return _this.appendChildNode(
- clone,
- assignedNode,
- copyStyles
- )
- })
- }
- } else {
- this.appendChildNode(clone, child, copyStyles)
- }
- }
- }
- DocumentCloner.prototype.cloneNode = function (node, copyStyles) {
- if (isTextNode(node)) {
- return document.createTextNode(node.data)
- }
- if (!node.ownerDocument) {
- return node.cloneNode(false)
- }
- var window = node.ownerDocument.defaultView
- if (
- window &&
- isElementNode(node) &&
- (isHTMLElementNode(node) || isSVGElementNode(node))
- ) {
- var clone = this.createElementClone(node)
- clone.style.transitionProperty = 'none'
- var style = window.getComputedStyle(node)
- var styleBefore = window.getComputedStyle(node, ':before')
- var styleAfter = window.getComputedStyle(node, ':after')
- if (
- this.referenceElement === node &&
- isHTMLElementNode(clone)
- ) {
- this.clonedReferenceElement = clone
- }
- if (isBodyElement(clone)) {
- createPseudoHideStyles(clone)
- }
- var counters = this.counters.parse(
- new CSSParsedCounterDeclaration(this.context, style)
- )
- var before = this.resolvePseudoContent(
- node,
- clone,
- styleBefore,
- PseudoElementType.BEFORE
- )
- if (isCustomElement(node)) {
- copyStyles = true
- }
- if (!isVideoElement(node)) {
- this.cloneChildNodes(node, clone, copyStyles)
- }
- if (before) {
- clone.insertBefore(before, clone.firstChild)
- }
- var after = this.resolvePseudoContent(
- node,
- clone,
- styleAfter,
- PseudoElementType.AFTER
- )
- if (after) {
- clone.appendChild(after)
- }
- this.counters.pop(counters)
- if (
- (style &&
- (this.options.copyStyles || isSVGElementNode(node)) &&
- !isIFrameElement(node)) ||
- copyStyles
- ) {
- copyCSSStyles(style, clone)
- }
- if (node.scrollTop !== 0 || node.scrollLeft !== 0) {
- this.scrolledElements.push([
- clone,
- node.scrollLeft,
- node.scrollTop
- ])
- }
- if (
- (isTextareaElement(node) || isSelectElement(node)) &&
- (isTextareaElement(clone) || isSelectElement(clone))
- ) {
- clone.value = node.value
- }
- return clone
- }
- return node.cloneNode(false)
- }
- DocumentCloner.prototype.resolvePseudoContent = function (
- node,
- clone,
- style,
- pseudoElt
- ) {
- var _this = this
- if (!style) {
- return
- }
- var value = style.content
- var document = clone.ownerDocument
- if (
- !document ||
- !value ||
- value === 'none' ||
- value === '-moz-alt-content' ||
- style.display === 'none'
- ) {
- return
- }
- this.counters.parse(
- new CSSParsedCounterDeclaration(this.context, style)
- )
- var declaration = new CSSParsedPseudoDeclaration(
- this.context,
- style
- )
- var anonymousReplacedElement = document.createElement(
- 'html2canvaspseudoelement'
- )
- copyCSSStyles(style, anonymousReplacedElement)
- declaration.content.forEach(function (token) {
- if (token.type === 0 /* STRING_TOKEN */) {
- anonymousReplacedElement.appendChild(
- document.createTextNode(token.value)
- )
- } else if (token.type === 22 /* URL_TOKEN */) {
- var img = document.createElement('img')
- img.src = token.value
- img.style.opacity = '1'
- anonymousReplacedElement.appendChild(img)
- } else if (token.type === 18 /* FUNCTION */) {
- if (token.name === 'attr') {
- var attr = token.values.filter(isIdentToken)
- if (attr.length) {
- anonymousReplacedElement.appendChild(
- document.createTextNode(
- node.getAttribute(attr[0].value) || ''
- )
- )
- }
- } else if (token.name === 'counter') {
- var _a = token.values.filter(nonFunctionArgSeparator),
- counter = _a[0],
- counterStyle = _a[1]
- if (counter && isIdentToken(counter)) {
- var counterState = _this.counters.getCounterValue(
- counter.value
- )
- var counterType =
- counterStyle && isIdentToken(counterStyle)
- ? listStyleType.parse(
- _this.context,
- counterStyle.value
- )
- : 3 /* DECIMAL */
- anonymousReplacedElement.appendChild(
- document.createTextNode(
- createCounterText(counterState, counterType, false)
- )
- )
- }
- } else if (token.name === 'counters') {
- var _b = token.values.filter(nonFunctionArgSeparator),
- counter = _b[0],
- delim = _b[1],
- counterStyle = _b[2]
- if (counter && isIdentToken(counter)) {
- var counterStates = _this.counters.getCounterValues(
- counter.value
- )
- var counterType_1 =
- counterStyle && isIdentToken(counterStyle)
- ? listStyleType.parse(
- _this.context,
- counterStyle.value
- )
- : 3 /* DECIMAL */
- var separator =
- delim && delim.type === 0 /* STRING_TOKEN */
- ? delim.value
- : ''
- var text = counterStates
- .map(function (value) {
- return createCounterText(value, counterType_1, false)
- })
- .join(separator)
- anonymousReplacedElement.appendChild(
- document.createTextNode(text)
- )
- }
- } else;
- } else if (token.type === 20 /* IDENT_TOKEN */) {
- switch (token.value) {
- case 'open-quote':
- anonymousReplacedElement.appendChild(
- document.createTextNode(
- getQuote(declaration.quotes, _this.quoteDepth++, true)
- )
- )
- break
- case 'close-quote':
- anonymousReplacedElement.appendChild(
- document.createTextNode(
- getQuote(
- declaration.quotes,
- --_this.quoteDepth,
- false
- )
- )
- )
- break
- default:
- // safari doesn't parse string tokens correctly because of lack of quotes
- anonymousReplacedElement.appendChild(
- document.createTextNode(token.value)
- )
- }
- }
- })
- anonymousReplacedElement.className =
- PSEUDO_HIDE_ELEMENT_CLASS_BEFORE +
- ' ' +
- PSEUDO_HIDE_ELEMENT_CLASS_AFTER
- var newClassName =
- pseudoElt === PseudoElementType.BEFORE
- ? ' ' + PSEUDO_HIDE_ELEMENT_CLASS_BEFORE
- : ' ' + PSEUDO_HIDE_ELEMENT_CLASS_AFTER
- if (isSVGElementNode(clone)) {
- clone.className.baseValue += newClassName
- } else {
- clone.className += newClassName
- }
- return anonymousReplacedElement
- }
- DocumentCloner.destroy = function (container) {
- if (container.parentNode) {
- container.parentNode.removeChild(container)
- return true
- }
- return false
- }
- return DocumentCloner
- })()
- var PseudoElementType
- ;(function (PseudoElementType) {
- PseudoElementType[(PseudoElementType['BEFORE'] = 0)] = 'BEFORE'
- PseudoElementType[(PseudoElementType['AFTER'] = 1)] = 'AFTER'
- })(PseudoElementType || (PseudoElementType = {}))
- var createIFrameContainer = function createIFrameContainer(
- ownerDocument,
- bounds
- ) {
- var cloneIframeContainer = ownerDocument.createElement('iframe')
- cloneIframeContainer.className = 'html2canvas-container'
- cloneIframeContainer.style.visibility = 'hidden'
- cloneIframeContainer.style.position = 'fixed'
- cloneIframeContainer.style.left = '-10000px'
- cloneIframeContainer.style.top = '0px'
- cloneIframeContainer.style.border = '0'
- cloneIframeContainer.width = bounds.width.toString()
- cloneIframeContainer.height = bounds.height.toString()
- cloneIframeContainer.scrolling = 'no' // ios won't scroll without it
- cloneIframeContainer.setAttribute(IGNORE_ATTRIBUTE, 'true')
- ownerDocument.body.appendChild(cloneIframeContainer)
- return cloneIframeContainer
- }
- var imageReady = function imageReady(img) {
- return new Promise(function (resolve) {
- if (img.complete) {
- resolve()
- return
- }
- if (!img.src) {
- resolve()
- return
- }
- img.onload = resolve
- img.onerror = resolve
- })
- }
- var imagesReady = function imagesReady(document) {
- return Promise.all(
- [].slice.call(document.images, 0).map(imageReady)
- )
- }
- var iframeLoader = function iframeLoader(iframe) {
- return new Promise(function (resolve, reject) {
- var cloneWindow = iframe.contentWindow
- if (!cloneWindow) {
- return reject('No window assigned for iframe')
- }
- var documentClone = cloneWindow.document
- cloneWindow.onload = iframe.onload = function () {
- cloneWindow.onload = iframe.onload = null
- var interval = setInterval(function () {
- if (
- documentClone.body.childNodes.length > 0 &&
- documentClone.readyState === 'complete'
- ) {
- clearInterval(interval)
- resolve(iframe)
- }
- }, 50)
- }
- })
- }
- var ignoredStyleProperties = [
- 'all',
- 'd',
- 'content' // Safari shows pseudoelements if content is set
- ]
- var copyCSSStyles = function copyCSSStyles(style, target) {
- // Edge does not provide value for cssText
- for (var i = style.length - 1; i >= 0; i--) {
- var property = style.item(i)
- if (ignoredStyleProperties.indexOf(property) === -1) {
- target.style.setProperty(
- property,
- style.getPropertyValue(property)
- )
- }
- }
- return target
- }
- var serializeDoctype = function serializeDoctype(doctype) {
- var str = ''
- if (doctype) {
- str += '<!DOCTYPE '
- if (doctype.name) {
- str += doctype.name
- }
- if (doctype.internalSubset) {
- str += doctype.internalSubset
- }
- if (doctype.publicId) {
- str += '"' + doctype.publicId + '"'
- }
- if (doctype.systemId) {
- str += '"' + doctype.systemId + '"'
- }
- str += '>'
- }
- return str
- }
- var restoreOwnerScroll = function restoreOwnerScroll(
- ownerDocument,
- x,
- y
- ) {
- if (
- ownerDocument &&
- ownerDocument.defaultView &&
- (x !== ownerDocument.defaultView.pageXOffset ||
- y !== ownerDocument.defaultView.pageYOffset)
- ) {
- ownerDocument.defaultView.scrollTo(x, y)
- }
- }
- var restoreNodeScroll = function restoreNodeScroll(_a) {
- var element = _a[0],
- x = _a[1],
- y = _a[2]
- element.scrollLeft = x
- element.scrollTop = y
- }
- var PSEUDO_BEFORE = ':before'
- var PSEUDO_AFTER = ':after'
- var PSEUDO_HIDE_ELEMENT_CLASS_BEFORE =
- '___html2canvas___pseudoelement_before'
- var PSEUDO_HIDE_ELEMENT_CLASS_AFTER =
- '___html2canvas___pseudoelement_after'
- var PSEUDO_HIDE_ELEMENT_STYLE =
- '{\n content: "" !important;\n display: none !important;\n}'
- var createPseudoHideStyles = function createPseudoHideStyles(body) {
- createStyles(
- body,
- '.' +
- PSEUDO_HIDE_ELEMENT_CLASS_BEFORE +
- PSEUDO_BEFORE +
- PSEUDO_HIDE_ELEMENT_STYLE +
- '\n .' +
- PSEUDO_HIDE_ELEMENT_CLASS_AFTER +
- PSEUDO_AFTER +
- PSEUDO_HIDE_ELEMENT_STYLE
- )
- }
- var createStyles = function createStyles(body, styles) {
- var document = body.ownerDocument
- if (document) {
- var style = document.createElement('style')
- style.textContent = styles
- body.appendChild(style)
- }
- }
- var CacheStorage = /** @class */ (function () {
- function CacheStorage() {}
- CacheStorage.getOrigin = function (url) {
- var link = CacheStorage._link
- if (!link) {
- return 'about:blank'
- }
- link.href = url
- link.href = link.href // IE9, LOL! - http://jsfiddle.net/niklasvh/2e48b/
- return link.protocol + link.hostname + link.port
- }
- CacheStorage.isSameOrigin = function (src) {
- return CacheStorage.getOrigin(src) === CacheStorage._origin
- }
- CacheStorage.setContext = function (window) {
- CacheStorage._link = window.document.createElement('a')
- CacheStorage._origin = CacheStorage.getOrigin(
- window.location.href
- )
- }
- CacheStorage._origin = 'about:blank'
- return CacheStorage
- })()
- var Cache = /** @class */ (function () {
- function Cache(context, _options) {
- this.context = context
- this._options = _options // eslint-disable-next-line @typescript-eslint/no-explicit-any
- this._cache = {}
- }
- Cache.prototype.addImage = function (src) {
- var result = Promise.resolve()
- if (this.has(src)) {
- return result
- }
- if (isBlobImage(src) || isRenderable(src)) {
- ;(this._cache[src] = this.loadImage(src)).catch(function () {
- // prevent unhandled rejection
- })
- return result
- }
- return result
- } // eslint-disable-next-line @typescript-eslint/no-explicit-any
- Cache.prototype.match = function (src) {
- return this._cache[src]
- }
- Cache.prototype.loadImage = function (key) {
- return __awaiter(this, void 0, void 0, function () {
- var isSameOrigin, useCORS, useProxy, src
- var _this = this
- return __generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- isSameOrigin = CacheStorage.isSameOrigin(key)
- useCORS =
- !isInlineImage(key) &&
- this._options.useCORS === true &&
- FEATURES.SUPPORT_CORS_IMAGES &&
- !isSameOrigin
- useProxy =
- !isInlineImage(key) &&
- !isSameOrigin &&
- !isBlobImage(key) &&
- typeof this._options.proxy === 'string' &&
- FEATURES.SUPPORT_CORS_XHR &&
- !useCORS
- if (
- !isSameOrigin &&
- this._options.allowTaint === false &&
- !isInlineImage(key) &&
- !isBlobImage(key) &&
- !useProxy &&
- !useCORS
- ) {
- return [2 /*return*/]
- }
- src = key
- if (!useProxy) return [3 /*break*/, 2]
- return [4 /*yield*/, this.proxy(src)]
- case 1:
- src = _a.sent()
- _a.label = 2
- case 2:
- this.context.logger.debug(
- 'Added image ' + key.substring(0, 256)
- )
- return [
- 4 /*yield*/,
- new Promise(function (resolve, reject) {
- var img = new Image()
- img.onload = function () {
- return resolve(img)
- }
- img.onerror = reject //ios safari 10.3 taints canvas with data urls unless crossOrigin is set to anonymous
- if (isInlineBase64Image(src) || useCORS) {
- img.crossOrigin = 'anonymous'
- }
- img.src = src
- if (img.complete === true) {
- // Inline XML images may fail to parse, throwing an Error later on
- setTimeout(function () {
- return resolve(img)
- }, 500)
- }
- if (_this._options.imageTimeout > 0) {
- setTimeout(function () {
- return reject(
- 'Timed out (' +
- _this._options.imageTimeout +
- 'ms) loading image'
- )
- }, _this._options.imageTimeout)
- }
- })
- ]
- case 3:
- return [2 /*return*/, _a.sent()]
- }
- })
- })
- }
- Cache.prototype.has = function (key) {
- return typeof this._cache[key] !== 'undefined'
- }
- Cache.prototype.keys = function () {
- return Promise.resolve(Object.keys(this._cache))
- }
- Cache.prototype.proxy = function (src) {
- var _this = this
- var proxy = this._options.proxy
- if (!proxy) {
- throw new Error('No proxy defined')
- }
- var key = src.substring(0, 256)
- return new Promise(function (resolve, reject) {
- var responseType = FEATURES.SUPPORT_RESPONSE_TYPE
- ? 'blob'
- : 'text'
- var xhr = new XMLHttpRequest()
- xhr.onload = function () {
- if (xhr.status === 200) {
- if (responseType === 'text') {
- resolve(xhr.response)
- } else {
- var reader_1 = new FileReader()
- reader_1.addEventListener(
- 'load',
- function () {
- return resolve(reader_1.result)
- },
- false
- )
- reader_1.addEventListener(
- 'error',
- function (e) {
- return reject(e)
- },
- false
- )
- reader_1.readAsDataURL(xhr.response)
- }
- } else {
- reject(
- 'Failed to proxy resource ' +
- key +
- ' with status code ' +
- xhr.status
- )
- }
- }
- xhr.onerror = reject
- var queryString = proxy.indexOf('?') > -1 ? '&' : '?'
- xhr.open(
- 'GET',
- '' +
- proxy +
- queryString +
- 'url=' +
- encodeURIComponent(src) +
- '&responseType=' +
- responseType
- )
- if (responseType !== 'text' && xhr instanceof XMLHttpRequest) {
- xhr.responseType = responseType
- }
- if (_this._options.imageTimeout) {
- var timeout_1 = _this._options.imageTimeout
- xhr.timeout = timeout_1
- xhr.ontimeout = function () {
- return reject(
- 'Timed out (' + timeout_1 + 'ms) proxying ' + key
- )
- }
- }
- xhr.send()
- })
- }
- return Cache
- })()
- var INLINE_SVG = /^data:image\/svg\+xml/i
- var INLINE_BASE64 = /^data:image\/.*;base64,/i
- var INLINE_IMG = /^data:image\/.*/i
- var isRenderable = function isRenderable(src) {
- return FEATURES.SUPPORT_SVG_DRAWING || !isSVG(src)
- }
- var isInlineImage = function isInlineImage(src) {
- return INLINE_IMG.test(src)
- }
- var isInlineBase64Image = function isInlineBase64Image(src) {
- return INLINE_BASE64.test(src)
- }
- var isBlobImage = function isBlobImage(src) {
- return src.substr(0, 4) === 'blob'
- }
- var isSVG = function isSVG(src) {
- return (
- src.substr(-3).toLowerCase() === 'svg' || INLINE_SVG.test(src)
- )
- }
- var Vector = /** @class */ (function () {
- function Vector(x, y) {
- this.type = 0 /* VECTOR */
- this.x = x
- this.y = y
- }
- Vector.prototype.add = function (deltaX, deltaY) {
- return new Vector(this.x + deltaX, this.y + deltaY)
- }
- return Vector
- })()
- var lerp = function lerp(a, b, t) {
- return new Vector(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t)
- }
- var BezierCurve = /** @class */ (function () {
- function BezierCurve(start, startControl, endControl, end) {
- this.type = 1 /* BEZIER_CURVE */
- this.start = start
- this.startControl = startControl
- this.endControl = endControl
- this.end = end
- }
- BezierCurve.prototype.subdivide = function (t, firstHalf) {
- var ab = lerp(this.start, this.startControl, t)
- var bc = lerp(this.startControl, this.endControl, t)
- var cd = lerp(this.endControl, this.end, t)
- var abbc = lerp(ab, bc, t)
- var bccd = lerp(bc, cd, t)
- var dest = lerp(abbc, bccd, t)
- return firstHalf
- ? new BezierCurve(this.start, ab, abbc, dest)
- : new BezierCurve(dest, bccd, cd, this.end)
- }
- BezierCurve.prototype.add = function (deltaX, deltaY) {
- return new BezierCurve(
- this.start.add(deltaX, deltaY),
- this.startControl.add(deltaX, deltaY),
- this.endControl.add(deltaX, deltaY),
- this.end.add(deltaX, deltaY)
- )
- }
- BezierCurve.prototype.reverse = function () {
- return new BezierCurve(
- this.end,
- this.endControl,
- this.startControl,
- this.start
- )
- }
- return BezierCurve
- })()
- var isBezierCurve = function isBezierCurve(path) {
- return path.type === 1 /* BEZIER_CURVE */
- }
- var BoundCurves = /** @class */ (function () {
- function BoundCurves(element) {
- var styles = element.styles
- var bounds = element.bounds
- var _a = getAbsoluteValueForTuple(
- styles.borderTopLeftRadius,
- bounds.width,
- bounds.height
- ),
- tlh = _a[0],
- tlv = _a[1]
- var _b = getAbsoluteValueForTuple(
- styles.borderTopRightRadius,
- bounds.width,
- bounds.height
- ),
- trh = _b[0],
- trv = _b[1]
- var _c = getAbsoluteValueForTuple(
- styles.borderBottomRightRadius,
- bounds.width,
- bounds.height
- ),
- brh = _c[0],
- brv = _c[1]
- var _d = getAbsoluteValueForTuple(
- styles.borderBottomLeftRadius,
- bounds.width,
- bounds.height
- ),
- blh = _d[0],
- blv = _d[1]
- var factors = []
- factors.push((tlh + trh) / bounds.width)
- factors.push((blh + brh) / bounds.width)
- factors.push((tlv + blv) / bounds.height)
- factors.push((trv + brv) / bounds.height)
- var maxFactor = Math.max.apply(Math, factors)
- if (maxFactor > 1) {
- tlh /= maxFactor
- tlv /= maxFactor
- trh /= maxFactor
- trv /= maxFactor
- brh /= maxFactor
- brv /= maxFactor
- blh /= maxFactor
- blv /= maxFactor
- }
- var topWidth = bounds.width - trh
- var rightHeight = bounds.height - brv
- var bottomWidth = bounds.width - brh
- var leftHeight = bounds.height - blv
- var borderTopWidth = styles.borderTopWidth
- var borderRightWidth = styles.borderRightWidth
- var borderBottomWidth = styles.borderBottomWidth
- var borderLeftWidth = styles.borderLeftWidth
- var paddingTop = getAbsoluteValue(
- styles.paddingTop,
- element.bounds.width
- )
- var paddingRight = getAbsoluteValue(
- styles.paddingRight,
- element.bounds.width
- )
- var paddingBottom = getAbsoluteValue(
- styles.paddingBottom,
- element.bounds.width
- )
- var paddingLeft = getAbsoluteValue(
- styles.paddingLeft,
- element.bounds.width
- )
- this.topLeftBorderDoubleOuterBox =
- tlh > 0 || tlv > 0
- ? getCurvePoints(
- bounds.left + borderLeftWidth / 3,
- bounds.top + borderTopWidth / 3,
- tlh - borderLeftWidth / 3,
- tlv - borderTopWidth / 3,
- CORNER.TOP_LEFT
- )
- : new Vector(
- bounds.left + borderLeftWidth / 3,
- bounds.top + borderTopWidth / 3
- )
- this.topRightBorderDoubleOuterBox =
- tlh > 0 || tlv > 0
- ? getCurvePoints(
- bounds.left + topWidth,
- bounds.top + borderTopWidth / 3,
- trh - borderRightWidth / 3,
- trv - borderTopWidth / 3,
- CORNER.TOP_RIGHT
- )
- : new Vector(
- bounds.left + bounds.width - borderRightWidth / 3,
- bounds.top + borderTopWidth / 3
- )
- this.bottomRightBorderDoubleOuterBox =
- brh > 0 || brv > 0
- ? getCurvePoints(
- bounds.left + bottomWidth,
- bounds.top + rightHeight,
- brh - borderRightWidth / 3,
- brv - borderBottomWidth / 3,
- CORNER.BOTTOM_RIGHT
- )
- : new Vector(
- bounds.left + bounds.width - borderRightWidth / 3,
- bounds.top + bounds.height - borderBottomWidth / 3
- )
- this.bottomLeftBorderDoubleOuterBox =
- blh > 0 || blv > 0
- ? getCurvePoints(
- bounds.left + borderLeftWidth / 3,
- bounds.top + leftHeight,
- blh - borderLeftWidth / 3,
- blv - borderBottomWidth / 3,
- CORNER.BOTTOM_LEFT
- )
- : new Vector(
- bounds.left + borderLeftWidth / 3,
- bounds.top + bounds.height - borderBottomWidth / 3
- )
- this.topLeftBorderDoubleInnerBox =
- tlh > 0 || tlv > 0
- ? getCurvePoints(
- bounds.left + (borderLeftWidth * 2) / 3,
- bounds.top + (borderTopWidth * 2) / 3,
- tlh - (borderLeftWidth * 2) / 3,
- tlv - (borderTopWidth * 2) / 3,
- CORNER.TOP_LEFT
- )
- : new Vector(
- bounds.left + (borderLeftWidth * 2) / 3,
- bounds.top + (borderTopWidth * 2) / 3
- )
- this.topRightBorderDoubleInnerBox =
- tlh > 0 || tlv > 0
- ? getCurvePoints(
- bounds.left + topWidth,
- bounds.top + (borderTopWidth * 2) / 3,
- trh - (borderRightWidth * 2) / 3,
- trv - (borderTopWidth * 2) / 3,
- CORNER.TOP_RIGHT
- )
- : new Vector(
- bounds.left + bounds.width - (borderRightWidth * 2) / 3,
- bounds.top + (borderTopWidth * 2) / 3
- )
- this.bottomRightBorderDoubleInnerBox =
- brh > 0 || brv > 0
- ? getCurvePoints(
- bounds.left + bottomWidth,
- bounds.top + rightHeight,
- brh - (borderRightWidth * 2) / 3,
- brv - (borderBottomWidth * 2) / 3,
- CORNER.BOTTOM_RIGHT
- )
- : new Vector(
- bounds.left + bounds.width - (borderRightWidth * 2) / 3,
- bounds.top + bounds.height - (borderBottomWidth * 2) / 3
- )
- this.bottomLeftBorderDoubleInnerBox =
- blh > 0 || blv > 0
- ? getCurvePoints(
- bounds.left + (borderLeftWidth * 2) / 3,
- bounds.top + leftHeight,
- blh - (borderLeftWidth * 2) / 3,
- blv - (borderBottomWidth * 2) / 3,
- CORNER.BOTTOM_LEFT
- )
- : new Vector(
- bounds.left + (borderLeftWidth * 2) / 3,
- bounds.top + bounds.height - (borderBottomWidth * 2) / 3
- )
- this.topLeftBorderStroke =
- tlh > 0 || tlv > 0
- ? getCurvePoints(
- bounds.left + borderLeftWidth / 2,
- bounds.top + borderTopWidth / 2,
- tlh - borderLeftWidth / 2,
- tlv - borderTopWidth / 2,
- CORNER.TOP_LEFT
- )
- : new Vector(
- bounds.left + borderLeftWidth / 2,
- bounds.top + borderTopWidth / 2
- )
- this.topRightBorderStroke =
- tlh > 0 || tlv > 0
- ? getCurvePoints(
- bounds.left + topWidth,
- bounds.top + borderTopWidth / 2,
- trh - borderRightWidth / 2,
- trv - borderTopWidth / 2,
- CORNER.TOP_RIGHT
- )
- : new Vector(
- bounds.left + bounds.width - borderRightWidth / 2,
- bounds.top + borderTopWidth / 2
- )
- this.bottomRightBorderStroke =
- brh > 0 || brv > 0
- ? getCurvePoints(
- bounds.left + bottomWidth,
- bounds.top + rightHeight,
- brh - borderRightWidth / 2,
- brv - borderBottomWidth / 2,
- CORNER.BOTTOM_RIGHT
- )
- : new Vector(
- bounds.left + bounds.width - borderRightWidth / 2,
- bounds.top + bounds.height - borderBottomWidth / 2
- )
- this.bottomLeftBorderStroke =
- blh > 0 || blv > 0
- ? getCurvePoints(
- bounds.left + borderLeftWidth / 2,
- bounds.top + leftHeight,
- blh - borderLeftWidth / 2,
- blv - borderBottomWidth / 2,
- CORNER.BOTTOM_LEFT
- )
- : new Vector(
- bounds.left + borderLeftWidth / 2,
- bounds.top + bounds.height - borderBottomWidth / 2
- )
- this.topLeftBorderBox =
- tlh > 0 || tlv > 0
- ? getCurvePoints(
- bounds.left,
- bounds.top,
- tlh,
- tlv,
- CORNER.TOP_LEFT
- )
- : new Vector(bounds.left, bounds.top)
- this.topRightBorderBox =
- trh > 0 || trv > 0
- ? getCurvePoints(
- bounds.left + topWidth,
- bounds.top,
- trh,
- trv,
- CORNER.TOP_RIGHT
- )
- : new Vector(bounds.left + bounds.width, bounds.top)
- this.bottomRightBorderBox =
- brh > 0 || brv > 0
- ? getCurvePoints(
- bounds.left + bottomWidth,
- bounds.top + rightHeight,
- brh,
- brv,
- CORNER.BOTTOM_RIGHT
- )
- : new Vector(
- bounds.left + bounds.width,
- bounds.top + bounds.height
- )
- this.bottomLeftBorderBox =
- blh > 0 || blv > 0
- ? getCurvePoints(
- bounds.left,
- bounds.top + leftHeight,
- blh,
- blv,
- CORNER.BOTTOM_LEFT
- )
- : new Vector(bounds.left, bounds.top + bounds.height)
- this.topLeftPaddingBox =
- tlh > 0 || tlv > 0
- ? getCurvePoints(
- bounds.left + borderLeftWidth,
- bounds.top + borderTopWidth,
- Math.max(0, tlh - borderLeftWidth),
- Math.max(0, tlv - borderTopWidth),
- CORNER.TOP_LEFT
- )
- : new Vector(
- bounds.left + borderLeftWidth,
- bounds.top + borderTopWidth
- )
- this.topRightPaddingBox =
- trh > 0 || trv > 0
- ? getCurvePoints(
- bounds.left +
- Math.min(topWidth, bounds.width - borderRightWidth),
- bounds.top + borderTopWidth,
- topWidth > bounds.width + borderRightWidth
- ? 0
- : Math.max(0, trh - borderRightWidth),
- Math.max(0, trv - borderTopWidth),
- CORNER.TOP_RIGHT
- )
- : new Vector(
- bounds.left + bounds.width - borderRightWidth,
- bounds.top + borderTopWidth
- )
- this.bottomRightPaddingBox =
- brh > 0 || brv > 0
- ? getCurvePoints(
- bounds.left +
- Math.min(bottomWidth, bounds.width - borderLeftWidth),
- bounds.top +
- Math.min(
- rightHeight,
- bounds.height - borderBottomWidth
- ),
- Math.max(0, brh - borderRightWidth),
- Math.max(0, brv - borderBottomWidth),
- CORNER.BOTTOM_RIGHT
- )
- : new Vector(
- bounds.left + bounds.width - borderRightWidth,
- bounds.top + bounds.height - borderBottomWidth
- )
- this.bottomLeftPaddingBox =
- blh > 0 || blv > 0
- ? getCurvePoints(
- bounds.left + borderLeftWidth,
- bounds.top +
- Math.min(leftHeight, bounds.height - borderBottomWidth),
- Math.max(0, blh - borderLeftWidth),
- Math.max(0, blv - borderBottomWidth),
- CORNER.BOTTOM_LEFT
- )
- : new Vector(
- bounds.left + borderLeftWidth,
- bounds.top + bounds.height - borderBottomWidth
- )
- this.topLeftContentBox =
- tlh > 0 || tlv > 0
- ? getCurvePoints(
- bounds.left + borderLeftWidth + paddingLeft,
- bounds.top + borderTopWidth + paddingTop,
- Math.max(0, tlh - (borderLeftWidth + paddingLeft)),
- Math.max(0, tlv - (borderTopWidth + paddingTop)),
- CORNER.TOP_LEFT
- )
- : new Vector(
- bounds.left + borderLeftWidth + paddingLeft,
- bounds.top + borderTopWidth + paddingTop
- )
- this.topRightContentBox =
- trh > 0 || trv > 0
- ? getCurvePoints(
- bounds.left +
- Math.min(
- topWidth,
- bounds.width + borderLeftWidth + paddingLeft
- ),
- bounds.top + borderTopWidth + paddingTop,
- topWidth > bounds.width + borderLeftWidth + paddingLeft
- ? 0
- : trh - borderLeftWidth + paddingLeft,
- trv - (borderTopWidth + paddingTop),
- CORNER.TOP_RIGHT
- )
- : new Vector(
- bounds.left +
- bounds.width -
- (borderRightWidth + paddingRight),
- bounds.top + borderTopWidth + paddingTop
- )
- this.bottomRightContentBox =
- brh > 0 || brv > 0
- ? getCurvePoints(
- bounds.left +
- Math.min(
- bottomWidth,
- bounds.width - (borderLeftWidth + paddingLeft)
- ),
- bounds.top +
- Math.min(
- rightHeight,
- bounds.height + borderTopWidth + paddingTop
- ),
- Math.max(0, brh - (borderRightWidth + paddingRight)),
- brv - (borderBottomWidth + paddingBottom),
- CORNER.BOTTOM_RIGHT
- )
- : new Vector(
- bounds.left +
- bounds.width -
- (borderRightWidth + paddingRight),
- bounds.top +
- bounds.height -
- (borderBottomWidth + paddingBottom)
- )
- this.bottomLeftContentBox =
- blh > 0 || blv > 0
- ? getCurvePoints(
- bounds.left + borderLeftWidth + paddingLeft,
- bounds.top + leftHeight,
- Math.max(0, blh - (borderLeftWidth + paddingLeft)),
- blv - (borderBottomWidth + paddingBottom),
- CORNER.BOTTOM_LEFT
- )
- : new Vector(
- bounds.left + borderLeftWidth + paddingLeft,
- bounds.top +
- bounds.height -
- (borderBottomWidth + paddingBottom)
- )
- }
- return BoundCurves
- })()
- var CORNER
- ;(function (CORNER) {
- CORNER[(CORNER['TOP_LEFT'] = 0)] = 'TOP_LEFT'
- CORNER[(CORNER['TOP_RIGHT'] = 1)] = 'TOP_RIGHT'
- CORNER[(CORNER['BOTTOM_RIGHT'] = 2)] = 'BOTTOM_RIGHT'
- CORNER[(CORNER['BOTTOM_LEFT'] = 3)] = 'BOTTOM_LEFT'
- })(CORNER || (CORNER = {}))
- var getCurvePoints = function getCurvePoints(x, y, r1, r2, position) {
- var kappa = 4 * ((Math.sqrt(2) - 1) / 3)
- var ox = r1 * kappa // control point offset horizontal
- var oy = r2 * kappa // control point offset vertical
- var xm = x + r1 // x-middle
- var ym = y + r2 // y-middle
- switch (position) {
- case CORNER.TOP_LEFT:
- return new BezierCurve(
- new Vector(x, ym),
- new Vector(x, ym - oy),
- new Vector(xm - ox, y),
- new Vector(xm, y)
- )
- case CORNER.TOP_RIGHT:
- return new BezierCurve(
- new Vector(x, y),
- new Vector(x + ox, y),
- new Vector(xm, ym - oy),
- new Vector(xm, ym)
- )
- case CORNER.BOTTOM_RIGHT:
- return new BezierCurve(
- new Vector(xm, y),
- new Vector(xm, y + oy),
- new Vector(x + ox, ym),
- new Vector(x, ym)
- )
- case CORNER.BOTTOM_LEFT:
- default:
- return new BezierCurve(
- new Vector(xm, ym),
- new Vector(xm - ox, ym),
- new Vector(x, y + oy),
- new Vector(x, y)
- )
- }
- }
- var calculateBorderBoxPath = function calculateBorderBoxPath(curves) {
- return [
- curves.topLeftBorderBox,
- curves.topRightBorderBox,
- curves.bottomRightBorderBox,
- curves.bottomLeftBorderBox
- ]
- }
- var calculateContentBoxPath = function calculateContentBoxPath(
- curves
- ) {
- return [
- curves.topLeftContentBox,
- curves.topRightContentBox,
- curves.bottomRightContentBox,
- curves.bottomLeftContentBox
- ]
- }
- var calculatePaddingBoxPath = function calculatePaddingBoxPath(
- curves
- ) {
- return [
- curves.topLeftPaddingBox,
- curves.topRightPaddingBox,
- curves.bottomRightPaddingBox,
- curves.bottomLeftPaddingBox
- ]
- }
- var TransformEffect = /** @class */ (function () {
- function TransformEffect(offsetX, offsetY, matrix) {
- this.offsetX = offsetX
- this.offsetY = offsetY
- this.matrix = matrix
- this.type = 0 /* TRANSFORM */
- this.target = 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */
- }
- return TransformEffect
- })()
- var ClipEffect = /** @class */ (function () {
- function ClipEffect(path, target) {
- this.path = path
- this.target = target
- this.type = 1 /* CLIP */
- }
- return ClipEffect
- })()
- var OpacityEffect = /** @class */ (function () {
- function OpacityEffect(opacity) {
- this.opacity = opacity
- this.type = 2 /* OPACITY */
- this.target = 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */
- }
- return OpacityEffect
- })()
- var isTransformEffect = function isTransformEffect(effect) {
- return effect.type === 0 /* TRANSFORM */
- }
- var isClipEffect = function isClipEffect(effect) {
- return effect.type === 1 /* CLIP */
- }
- var isOpacityEffect = function isOpacityEffect(effect) {
- return effect.type === 2 /* OPACITY */
- }
- var equalPath = function equalPath(a, b) {
- if (a.length === b.length) {
- return a.some(function (v, i) {
- return v === b[i]
- })
- }
- return false
- }
- var transformPath = function transformPath(
- path,
- deltaX,
- deltaY,
- deltaW,
- deltaH
- ) {
- return path.map(function (point, index) {
- switch (index) {
- case 0:
- return point.add(deltaX, deltaY)
- case 1:
- return point.add(deltaX + deltaW, deltaY)
- case 2:
- return point.add(deltaX + deltaW, deltaY + deltaH)
- case 3:
- return point.add(deltaX, deltaY + deltaH)
- }
- return point
- })
- }
- var StackingContext = /** @class */ (function () {
- function StackingContext(container) {
- this.element = container
- this.inlineLevel = []
- this.nonInlineLevel = []
- this.negativeZIndex = []
- this.zeroOrAutoZIndexOrTransformedOrOpacity = []
- this.positiveZIndex = []
- this.nonPositionedFloats = []
- this.nonPositionedInlineLevel = []
- }
- return StackingContext
- })()
- var ElementPaint = /** @class */ (function () {
- function ElementPaint(container, parent) {
- this.container = container
- this.parent = parent
- this.effects = []
- this.curves = new BoundCurves(this.container)
- if (this.container.styles.opacity < 1) {
- this.effects.push(
- new OpacityEffect(this.container.styles.opacity)
- )
- }
- if (this.container.styles.transform !== null) {
- var offsetX =
- this.container.bounds.left +
- this.container.styles.transformOrigin[0].number
- var offsetY =
- this.container.bounds.top +
- this.container.styles.transformOrigin[1].number
- var matrix = this.container.styles.transform
- this.effects.push(new TransformEffect(offsetX, offsetY, matrix))
- }
- if (this.container.styles.overflowX !== 0 /* VISIBLE */) {
- var borderBox = calculateBorderBoxPath(this.curves)
- var paddingBox = calculatePaddingBoxPath(this.curves)
- if (equalPath(borderBox, paddingBox)) {
- this.effects.push(
- new ClipEffect(
- borderBox,
- 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */
- )
- )
- } else {
- this.effects.push(
- new ClipEffect(borderBox, 2 /* BACKGROUND_BORDERS */)
- )
- this.effects.push(new ClipEffect(paddingBox, 4 /* CONTENT */))
- }
- }
- }
- ElementPaint.prototype.getEffects = function (target) {
- var inFlow =
- [2 /* ABSOLUTE */, 3 /* FIXED */].indexOf(
- this.container.styles.position
- ) === -1
- var parent = this.parent
- var effects = this.effects.slice(0)
- while (parent) {
- var croplessEffects = parent.effects.filter(function (effect) {
- return !isClipEffect(effect)
- })
- if (
- inFlow ||
- parent.container.styles.position !== 0 /* STATIC */ ||
- !parent.parent
- ) {
- effects.unshift.apply(effects, croplessEffects)
- inFlow =
- [2 /* ABSOLUTE */, 3 /* FIXED */].indexOf(
- parent.container.styles.position
- ) === -1
- if (parent.container.styles.overflowX !== 0 /* VISIBLE */) {
- var borderBox = calculateBorderBoxPath(parent.curves)
- var paddingBox = calculatePaddingBoxPath(parent.curves)
- if (!equalPath(borderBox, paddingBox)) {
- effects.unshift(
- new ClipEffect(
- paddingBox,
- 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */
- )
- )
- }
- }
- } else {
- effects.unshift.apply(effects, croplessEffects)
- }
- parent = parent.parent
- }
- return effects.filter(function (effect) {
- return contains(effect.target, target)
- })
- }
- return ElementPaint
- })()
- var parseStackTree = function parseStackTree(
- parent,
- stackingContext,
- realStackingContext,
- listItems
- ) {
- parent.container.elements.forEach(function (child) {
- var treatAsRealStackingContext = contains(
- child.flags,
- 4 /* CREATES_REAL_STACKING_CONTEXT */
- )
- var createsStackingContext = contains(
- child.flags,
- 2 /* CREATES_STACKING_CONTEXT */
- )
- var paintContainer = new ElementPaint(child, parent)
- if (contains(child.styles.display, 2048 /* LIST_ITEM */)) {
- listItems.push(paintContainer)
- }
- var listOwnerItems = contains(child.flags, 8 /* IS_LIST_OWNER */)
- ? []
- : listItems
- if (treatAsRealStackingContext || createsStackingContext) {
- var parentStack =
- treatAsRealStackingContext || child.styles.isPositioned()
- ? realStackingContext
- : stackingContext
- var stack = new StackingContext(paintContainer)
- if (
- child.styles.isPositioned() ||
- child.styles.opacity < 1 ||
- child.styles.isTransformed()
- ) {
- var order_1 = child.styles.zIndex.order
- if (order_1 < 0) {
- var index_1 = 0
- parentStack.negativeZIndex.some(function (current, i) {
- if (
- order_1 > current.element.container.styles.zIndex.order
- ) {
- index_1 = i
- return false
- } else if (index_1 > 0) {
- return true
- }
- return false
- })
- parentStack.negativeZIndex.splice(index_1, 0, stack)
- } else if (order_1 > 0) {
- var index_2 = 0
- parentStack.positiveZIndex.some(function (current, i) {
- if (
- order_1 >= current.element.container.styles.zIndex.order
- ) {
- index_2 = i + 1
- return false
- } else if (index_2 > 0) {
- return true
- }
- return false
- })
- parentStack.positiveZIndex.splice(index_2, 0, stack)
- } else {
- parentStack.zeroOrAutoZIndexOrTransformedOrOpacity.push(
- stack
- )
- }
- } else {
- if (child.styles.isFloating()) {
- parentStack.nonPositionedFloats.push(stack)
- } else {
- parentStack.nonPositionedInlineLevel.push(stack)
- }
- }
- parseStackTree(
- paintContainer,
- stack,
- treatAsRealStackingContext ? stack : realStackingContext,
- listOwnerItems
- )
- } else {
- if (child.styles.isInlineLevel()) {
- stackingContext.inlineLevel.push(paintContainer)
- } else {
- stackingContext.nonInlineLevel.push(paintContainer)
- }
- parseStackTree(
- paintContainer,
- stackingContext,
- realStackingContext,
- listOwnerItems
- )
- }
- if (contains(child.flags, 8 /* IS_LIST_OWNER */)) {
- processListItems(child, listOwnerItems)
- }
- })
- }
- var processListItems = function processListItems(owner, elements) {
- var numbering =
- owner instanceof OLElementContainer ? owner.start : 1
- var reversed =
- owner instanceof OLElementContainer ? owner.reversed : false
- for (var i = 0; i < elements.length; i++) {
- var item = elements[i]
- if (
- item.container instanceof LIElementContainer &&
- typeof item.container.value === 'number' &&
- item.container.value !== 0
- ) {
- numbering = item.container.value
- }
- item.listValue = createCounterText(
- numbering,
- item.container.styles.listStyleType,
- true
- )
- numbering += reversed ? -1 : 1
- }
- }
- var parseStackingContexts = function parseStackingContexts(
- container
- ) {
- var paintContainer = new ElementPaint(container, null)
- var root = new StackingContext(paintContainer)
- var listItems = []
- parseStackTree(paintContainer, root, root, listItems)
- processListItems(paintContainer.container, listItems)
- return root
- }
- var parsePathForBorder = function parsePathForBorder(
- curves,
- borderSide
- ) {
- switch (borderSide) {
- case 0:
- return createPathFromCurves(
- curves.topLeftBorderBox,
- curves.topLeftPaddingBox,
- curves.topRightBorderBox,
- curves.topRightPaddingBox
- )
- case 1:
- return createPathFromCurves(
- curves.topRightBorderBox,
- curves.topRightPaddingBox,
- curves.bottomRightBorderBox,
- curves.bottomRightPaddingBox
- )
- case 2:
- return createPathFromCurves(
- curves.bottomRightBorderBox,
- curves.bottomRightPaddingBox,
- curves.bottomLeftBorderBox,
- curves.bottomLeftPaddingBox
- )
- case 3:
- default:
- return createPathFromCurves(
- curves.bottomLeftBorderBox,
- curves.bottomLeftPaddingBox,
- curves.topLeftBorderBox,
- curves.topLeftPaddingBox
- )
- }
- }
- var parsePathForBorderDoubleOuter =
- function parsePathForBorderDoubleOuter(curves, borderSide) {
- switch (borderSide) {
- case 0:
- return createPathFromCurves(
- curves.topLeftBorderBox,
- curves.topLeftBorderDoubleOuterBox,
- curves.topRightBorderBox,
- curves.topRightBorderDoubleOuterBox
- )
- case 1:
- return createPathFromCurves(
- curves.topRightBorderBox,
- curves.topRightBorderDoubleOuterBox,
- curves.bottomRightBorderBox,
- curves.bottomRightBorderDoubleOuterBox
- )
- case 2:
- return createPathFromCurves(
- curves.bottomRightBorderBox,
- curves.bottomRightBorderDoubleOuterBox,
- curves.bottomLeftBorderBox,
- curves.bottomLeftBorderDoubleOuterBox
- )
- case 3:
- default:
- return createPathFromCurves(
- curves.bottomLeftBorderBox,
- curves.bottomLeftBorderDoubleOuterBox,
- curves.topLeftBorderBox,
- curves.topLeftBorderDoubleOuterBox
- )
- }
- }
- var parsePathForBorderDoubleInner =
- function parsePathForBorderDoubleInner(curves, borderSide) {
- switch (borderSide) {
- case 0:
- return createPathFromCurves(
- curves.topLeftBorderDoubleInnerBox,
- curves.topLeftPaddingBox,
- curves.topRightBorderDoubleInnerBox,
- curves.topRightPaddingBox
- )
- case 1:
- return createPathFromCurves(
- curves.topRightBorderDoubleInnerBox,
- curves.topRightPaddingBox,
- curves.bottomRightBorderDoubleInnerBox,
- curves.bottomRightPaddingBox
- )
- case 2:
- return createPathFromCurves(
- curves.bottomRightBorderDoubleInnerBox,
- curves.bottomRightPaddingBox,
- curves.bottomLeftBorderDoubleInnerBox,
- curves.bottomLeftPaddingBox
- )
- case 3:
- default:
- return createPathFromCurves(
- curves.bottomLeftBorderDoubleInnerBox,
- curves.bottomLeftPaddingBox,
- curves.topLeftBorderDoubleInnerBox,
- curves.topLeftPaddingBox
- )
- }
- }
- var parsePathForBorderStroke = function parsePathForBorderStroke(
- curves,
- borderSide
- ) {
- switch (borderSide) {
- case 0:
- return createStrokePathFromCurves(
- curves.topLeftBorderStroke,
- curves.topRightBorderStroke
- )
- case 1:
- return createStrokePathFromCurves(
- curves.topRightBorderStroke,
- curves.bottomRightBorderStroke
- )
- case 2:
- return createStrokePathFromCurves(
- curves.bottomRightBorderStroke,
- curves.bottomLeftBorderStroke
- )
- case 3:
- default:
- return createStrokePathFromCurves(
- curves.bottomLeftBorderStroke,
- curves.topLeftBorderStroke
- )
- }
- }
- var createStrokePathFromCurves = function createStrokePathFromCurves(
- outer1,
- outer2
- ) {
- var path = []
- if (isBezierCurve(outer1)) {
- path.push(outer1.subdivide(0.5, false))
- } else {
- path.push(outer1)
- }
- if (isBezierCurve(outer2)) {
- path.push(outer2.subdivide(0.5, true))
- } else {
- path.push(outer2)
- }
- return path
- }
- var createPathFromCurves = function createPathFromCurves(
- outer1,
- inner1,
- outer2,
- inner2
- ) {
- var path = []
- if (isBezierCurve(outer1)) {
- path.push(outer1.subdivide(0.5, false))
- } else {
- path.push(outer1)
- }
- if (isBezierCurve(outer2)) {
- path.push(outer2.subdivide(0.5, true))
- } else {
- path.push(outer2)
- }
- if (isBezierCurve(inner2)) {
- path.push(inner2.subdivide(0.5, true).reverse())
- } else {
- path.push(inner2)
- }
- if (isBezierCurve(inner1)) {
- path.push(inner1.subdivide(0.5, false).reverse())
- } else {
- path.push(inner1)
- }
- return path
- }
- var paddingBox = function paddingBox(element) {
- var bounds = element.bounds
- var styles = element.styles
- return bounds.add(
- styles.borderLeftWidth,
- styles.borderTopWidth,
- -(styles.borderRightWidth + styles.borderLeftWidth),
- -(styles.borderTopWidth + styles.borderBottomWidth)
- )
- }
- var contentBox = function contentBox(element) {
- var styles = element.styles
- var bounds = element.bounds
- var paddingLeft = getAbsoluteValue(styles.paddingLeft, bounds.width)
- var paddingRight = getAbsoluteValue(
- styles.paddingRight,
- bounds.width
- )
- var paddingTop = getAbsoluteValue(styles.paddingTop, bounds.width)
- var paddingBottom = getAbsoluteValue(
- styles.paddingBottom,
- bounds.width
- )
- return bounds.add(
- paddingLeft + styles.borderLeftWidth,
- paddingTop + styles.borderTopWidth,
- -(
- styles.borderRightWidth +
- styles.borderLeftWidth +
- paddingLeft +
- paddingRight
- ),
- -(
- styles.borderTopWidth +
- styles.borderBottomWidth +
- paddingTop +
- paddingBottom
- )
- )
- }
- var calculateBackgroundPositioningArea =
- function calculateBackgroundPositioningArea(
- backgroundOrigin,
- element
- ) {
- if (backgroundOrigin === 0 /* BORDER_BOX */) {
- return element.bounds
- }
- if (backgroundOrigin === 2 /* CONTENT_BOX */) {
- return contentBox(element)
- }
- return paddingBox(element)
- }
- var calculateBackgroundPaintingArea =
- function calculateBackgroundPaintingArea(backgroundClip, element) {
- if (backgroundClip === 0 /* BORDER_BOX */) {
- return element.bounds
- }
- if (backgroundClip === 2 /* CONTENT_BOX */) {
- return contentBox(element)
- }
- return paddingBox(element)
- }
- var calculateBackgroundRendering =
- function calculateBackgroundRendering(
- container,
- index,
- intrinsicSize
- ) {
- var backgroundPositioningArea =
- calculateBackgroundPositioningArea(
- getBackgroundValueForIndex(
- container.styles.backgroundOrigin,
- index
- ),
- container
- )
- var backgroundPaintingArea = calculateBackgroundPaintingArea(
- getBackgroundValueForIndex(
- container.styles.backgroundClip,
- index
- ),
- container
- )
- var backgroundImageSize = calculateBackgroundSize(
- getBackgroundValueForIndex(
- container.styles.backgroundSize,
- index
- ),
- intrinsicSize,
- backgroundPositioningArea
- )
- var sizeWidth = backgroundImageSize[0],
- sizeHeight = backgroundImageSize[1]
- var position = getAbsoluteValueForTuple(
- getBackgroundValueForIndex(
- container.styles.backgroundPosition,
- index
- ),
- backgroundPositioningArea.width - sizeWidth,
- backgroundPositioningArea.height - sizeHeight
- )
- var path = calculateBackgroundRepeatPath(
- getBackgroundValueForIndex(
- container.styles.backgroundRepeat,
- index
- ),
- position,
- backgroundImageSize,
- backgroundPositioningArea,
- backgroundPaintingArea
- )
- var offsetX = Math.round(
- backgroundPositioningArea.left + position[0]
- )
- var offsetY = Math.round(
- backgroundPositioningArea.top + position[1]
- )
- return [path, offsetX, offsetY, sizeWidth, sizeHeight]
- }
- var isAuto = function isAuto(token) {
- return isIdentToken(token) && token.value === BACKGROUND_SIZE.AUTO
- }
- var hasIntrinsicValue = function hasIntrinsicValue(value) {
- return typeof value === 'number'
- }
- var calculateBackgroundSize = function calculateBackgroundSize(
- size,
- _a,
- bounds
- ) {
- var intrinsicWidth = _a[0],
- intrinsicHeight = _a[1],
- intrinsicProportion = _a[2]
- var first = size[0],
- second = size[1]
- if (!first) {
- return [0, 0]
- }
- if (
- isLengthPercentage(first) &&
- second &&
- isLengthPercentage(second)
- ) {
- return [
- getAbsoluteValue(first, bounds.width),
- getAbsoluteValue(second, bounds.height)
- ]
- }
- var hasIntrinsicProportion = hasIntrinsicValue(intrinsicProportion)
- if (
- isIdentToken(first) &&
- (first.value === BACKGROUND_SIZE.CONTAIN ||
- first.value === BACKGROUND_SIZE.COVER)
- ) {
- if (hasIntrinsicValue(intrinsicProportion)) {
- var targetRatio = bounds.width / bounds.height
- return targetRatio < intrinsicProportion !==
- (first.value === BACKGROUND_SIZE.COVER)
- ? [bounds.width, bounds.width / intrinsicProportion]
- : [bounds.height * intrinsicProportion, bounds.height]
- }
- return [bounds.width, bounds.height]
- }
- var hasIntrinsicWidth = hasIntrinsicValue(intrinsicWidth)
- var hasIntrinsicHeight = hasIntrinsicValue(intrinsicHeight)
- var hasIntrinsicDimensions = hasIntrinsicWidth || hasIntrinsicHeight // If the background-size is auto or auto auto:
- if (isAuto(first) && (!second || isAuto(second))) {
- // If the image has both horizontal and vertical intrinsic dimensions, it's rendered at that size.
- if (hasIntrinsicWidth && hasIntrinsicHeight) {
- return [intrinsicWidth, intrinsicHeight]
- } // If the image has no intrinsic dimensions and has no intrinsic proportions,
- // it's rendered at the size of the background positioning area.
- if (!hasIntrinsicProportion && !hasIntrinsicDimensions) {
- return [bounds.width, bounds.height]
- } // TODO If the image has no intrinsic dimensions but has intrinsic proportions, it's rendered as if contain had been specified instead.
- // If the image has only one intrinsic dimension and has intrinsic proportions, it's rendered at the size corresponding to that one dimension.
- // The other dimension is computed using the specified dimension and the intrinsic proportions.
- if (hasIntrinsicDimensions && hasIntrinsicProportion) {
- var width_1 = hasIntrinsicWidth
- ? intrinsicWidth
- : intrinsicHeight * intrinsicProportion
- var height_1 = hasIntrinsicHeight
- ? intrinsicHeight
- : intrinsicWidth / intrinsicProportion
- return [width_1, height_1]
- } // If the image has only one intrinsic dimension but has no intrinsic proportions,
- // it's rendered using the specified dimension and the other dimension of the background positioning area.
- var width_2 = hasIntrinsicWidth ? intrinsicWidth : bounds.width
- var height_2 = hasIntrinsicHeight
- ? intrinsicHeight
- : bounds.height
- return [width_2, height_2]
- } // If the image has intrinsic proportions, it's stretched to the specified dimension.
- // The unspecified dimension is computed using the specified dimension and the intrinsic proportions.
- if (hasIntrinsicProportion) {
- var width_3 = 0
- var height_3 = 0
- if (isLengthPercentage(first)) {
- width_3 = getAbsoluteValue(first, bounds.width)
- } else if (isLengthPercentage(second)) {
- height_3 = getAbsoluteValue(second, bounds.height)
- }
- if (isAuto(first)) {
- width_3 = height_3 * intrinsicProportion
- } else if (!second || isAuto(second)) {
- height_3 = width_3 / intrinsicProportion
- }
- return [width_3, height_3]
- } // If the image has no intrinsic proportions, it's stretched to the specified dimension.
- // The unspecified dimension is computed using the image's corresponding intrinsic dimension,
- // if there is one. If there is no such intrinsic dimension,
- // it becomes the corresponding dimension of the background positioning area.
- var width = null
- var height = null
- if (isLengthPercentage(first)) {
- width = getAbsoluteValue(first, bounds.width)
- } else if (second && isLengthPercentage(second)) {
- height = getAbsoluteValue(second, bounds.height)
- }
- if (width !== null && (!second || isAuto(second))) {
- height =
- hasIntrinsicWidth && hasIntrinsicHeight
- ? (width / intrinsicWidth) * intrinsicHeight
- : bounds.height
- }
- if (height !== null && isAuto(first)) {
- width =
- hasIntrinsicWidth && hasIntrinsicHeight
- ? (height / intrinsicHeight) * intrinsicWidth
- : bounds.width
- }
- if (width !== null && height !== null) {
- return [width, height]
- }
- throw new Error('Unable to calculate background-size for element')
- }
- var getBackgroundValueForIndex = function getBackgroundValueForIndex(
- values,
- index
- ) {
- var value = values[index]
- if (typeof value === 'undefined') {
- return values[0]
- }
- return value
- }
- var calculateBackgroundRepeatPath =
- function calculateBackgroundRepeatPath(
- repeat,
- _a,
- _b,
- backgroundPositioningArea,
- backgroundPaintingArea
- ) {
- var x = _a[0],
- y = _a[1]
- var width = _b[0],
- height = _b[1]
- switch (repeat) {
- case 2 /* REPEAT_X */:
- return [
- new Vector(
- Math.round(backgroundPositioningArea.left),
- Math.round(backgroundPositioningArea.top + y)
- ),
- new Vector(
- Math.round(
- backgroundPositioningArea.left +
- backgroundPositioningArea.width
- ),
- Math.round(backgroundPositioningArea.top + y)
- ),
- new Vector(
- Math.round(
- backgroundPositioningArea.left +
- backgroundPositioningArea.width
- ),
- Math.round(height + backgroundPositioningArea.top + y)
- ),
- new Vector(
- Math.round(backgroundPositioningArea.left),
- Math.round(height + backgroundPositioningArea.top + y)
- )
- ]
- case 3 /* REPEAT_Y */:
- return [
- new Vector(
- Math.round(backgroundPositioningArea.left + x),
- Math.round(backgroundPositioningArea.top)
- ),
- new Vector(
- Math.round(backgroundPositioningArea.left + x + width),
- Math.round(backgroundPositioningArea.top)
- ),
- new Vector(
- Math.round(backgroundPositioningArea.left + x + width),
- Math.round(
- backgroundPositioningArea.height +
- backgroundPositioningArea.top
- )
- ),
- new Vector(
- Math.round(backgroundPositioningArea.left + x),
- Math.round(
- backgroundPositioningArea.height +
- backgroundPositioningArea.top
- )
- )
- ]
- case 1 /* NO_REPEAT */:
- return [
- new Vector(
- Math.round(backgroundPositioningArea.left + x),
- Math.round(backgroundPositioningArea.top + y)
- ),
- new Vector(
- Math.round(backgroundPositioningArea.left + x + width),
- Math.round(backgroundPositioningArea.top + y)
- ),
- new Vector(
- Math.round(backgroundPositioningArea.left + x + width),
- Math.round(backgroundPositioningArea.top + y + height)
- ),
- new Vector(
- Math.round(backgroundPositioningArea.left + x),
- Math.round(backgroundPositioningArea.top + y + height)
- )
- ]
- default:
- return [
- new Vector(
- Math.round(backgroundPaintingArea.left),
- Math.round(backgroundPaintingArea.top)
- ),
- new Vector(
- Math.round(
- backgroundPaintingArea.left +
- backgroundPaintingArea.width
- ),
- Math.round(backgroundPaintingArea.top)
- ),
- new Vector(
- Math.round(
- backgroundPaintingArea.left +
- backgroundPaintingArea.width
- ),
- Math.round(
- backgroundPaintingArea.height +
- backgroundPaintingArea.top
- )
- ),
- new Vector(
- Math.round(backgroundPaintingArea.left),
- Math.round(
- backgroundPaintingArea.height +
- backgroundPaintingArea.top
- )
- )
- ]
- }
- }
- var SMALL_IMAGE =
- 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'
- var SAMPLE_TEXT = 'Hidden Text'
- var FontMetrics = /** @class */ (function () {
- function FontMetrics(document) {
- this._data = {}
- this._document = document
- }
- FontMetrics.prototype.parseMetrics = function (
- fontFamily,
- fontSize
- ) {
- var container = this._document.createElement('div')
- var img = this._document.createElement('img')
- var span = this._document.createElement('span')
- var body = this._document.body
- container.style.visibility = 'hidden'
- container.style.fontFamily = fontFamily
- container.style.fontSize = fontSize
- container.style.margin = '0'
- container.style.padding = '0'
- container.style.whiteSpace = 'nowrap'
- body.appendChild(container)
- img.src = SMALL_IMAGE
- img.width = 1
- img.height = 1
- img.style.margin = '0'
- img.style.padding = '0'
- img.style.verticalAlign = 'baseline'
- span.style.fontFamily = fontFamily
- span.style.fontSize = fontSize
- span.style.margin = '0'
- span.style.padding = '0'
- span.appendChild(this._document.createTextNode(SAMPLE_TEXT))
- container.appendChild(span)
- container.appendChild(img)
- var baseline = img.offsetTop - span.offsetTop + 2
- container.removeChild(span)
- container.appendChild(this._document.createTextNode(SAMPLE_TEXT))
- container.style.lineHeight = 'normal'
- img.style.verticalAlign = 'super'
- var middle = img.offsetTop - container.offsetTop + 2
- body.removeChild(container)
- return { baseline: baseline, middle: middle }
- }
- FontMetrics.prototype.getMetrics = function (fontFamily, fontSize) {
- var key = fontFamily + ' ' + fontSize
- if (typeof this._data[key] === 'undefined') {
- this._data[key] = this.parseMetrics(fontFamily, fontSize)
- }
- return this._data[key]
- }
- return FontMetrics
- })()
- var Renderer = /** @class */ (function () {
- function Renderer(context, options) {
- this.context = context
- this.options = options
- }
- return Renderer
- })()
- var MASK_OFFSET = 10000
- var CanvasRenderer = /** @class */ (function (_super) {
- __extends(CanvasRenderer, _super)
- function CanvasRenderer(context, options) {
- var _this = _super.call(this, context, options) || this
- _this._activeEffects = []
- _this.canvas = options.canvas
- ? options.canvas
- : document.createElement('canvas')
- _this.ctx = _this.canvas.getContext('2d')
- if (!options.canvas) {
- _this.canvas.width = Math.floor(options.width * options.scale)
- _this.canvas.height = Math.floor(options.height * options.scale)
- _this.canvas.style.width = options.width + 'px'
- _this.canvas.style.height = options.height + 'px'
- }
- _this.fontMetrics = new FontMetrics(document)
- _this.ctx.scale(_this.options.scale, _this.options.scale)
- _this.ctx.translate(-options.x, -options.y)
- _this.ctx.textBaseline = 'bottom'
- _this._activeEffects = []
- _this.context.logger.debug(
- 'Canvas renderer initialized (' +
- options.width +
- 'x' +
- options.height +
- ') with scale ' +
- options.scale
- )
- return _this
- }
- CanvasRenderer.prototype.applyEffects = function (effects) {
- var _this = this
- while (this._activeEffects.length) {
- this.popEffect()
- }
- effects.forEach(function (effect) {
- return _this.applyEffect(effect)
- })
- }
- CanvasRenderer.prototype.applyEffect = function (effect) {
- this.ctx.save()
- if (isOpacityEffect(effect)) {
- this.ctx.globalAlpha = effect.opacity
- }
- if (isTransformEffect(effect)) {
- this.ctx.translate(effect.offsetX, effect.offsetY)
- this.ctx.transform(
- effect.matrix[0],
- effect.matrix[1],
- effect.matrix[2],
- effect.matrix[3],
- effect.matrix[4],
- effect.matrix[5]
- )
- this.ctx.translate(-effect.offsetX, -effect.offsetY)
- }
- if (isClipEffect(effect)) {
- this.path(effect.path)
- this.ctx.clip()
- }
- this._activeEffects.push(effect)
- }
- CanvasRenderer.prototype.popEffect = function () {
- this._activeEffects.pop()
- this.ctx.restore()
- }
- CanvasRenderer.prototype.renderStack = function (stack) {
- return __awaiter(this, void 0, void 0, function () {
- var styles
- return __generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- styles = stack.element.container.styles
- if (!styles.isVisible()) return [3 /*break*/, 2]
- return [4 /*yield*/, this.renderStackContent(stack)]
- case 1:
- _a.sent()
- _a.label = 2
- case 2:
- return [2 /*return*/]
- }
- })
- })
- }
- CanvasRenderer.prototype.renderNode = function (paint) {
- return __awaiter(this, void 0, void 0, function () {
- return __generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- if (
- contains(paint.container.flags, 16 /* DEBUG_RENDER */)
- ) {
- debugger
- }
- if (!paint.container.styles.isVisible())
- return [3 /*break*/, 3]
- return [
- 4 /*yield*/,
- this.renderNodeBackgroundAndBorders(paint)
- ]
- case 1:
- _a.sent()
- return [4 /*yield*/, this.renderNodeContent(paint)]
- case 2:
- _a.sent()
- _a.label = 3
- case 3:
- return [2 /*return*/]
- }
- })
- })
- }
- CanvasRenderer.prototype.renderTextWithLetterSpacing = function (
- text,
- letterSpacing,
- baseline
- ) {
- var _this = this
- if (letterSpacing === 0) {
- this.ctx.fillText(
- text.text,
- text.bounds.left,
- text.bounds.top + baseline
- )
- } else {
- var letters = segmentGraphemes(text.text)
- letters.reduce(function (left, letter) {
- _this.ctx.fillText(letter, left, text.bounds.top + baseline)
- return left + _this.ctx.measureText(letter).width
- }, text.bounds.left)
- }
- }
- CanvasRenderer.prototype.createFontStyle = function (styles) {
- var fontVariant = styles.fontVariant
- .filter(function (variant) {
- return variant === 'normal' || variant === 'small-caps'
- })
- .join('')
- var fontFamily = fixIOSSystemFonts(styles.fontFamily).join(', ')
- var fontSize = isDimensionToken(styles.fontSize)
- ? '' + styles.fontSize.number + styles.fontSize.unit
- : styles.fontSize.number + 'px'
- return [
- [
- styles.fontStyle,
- fontVariant,
- styles.fontWeight,
- fontSize,
- fontFamily
- ].join(' '),
- fontFamily,
- fontSize
- ]
- }
- CanvasRenderer.prototype.renderTextNode = function (text, styles) {
- return __awaiter(this, void 0, void 0, function () {
- var _a,
- font,
- fontFamily,
- fontSize,
- _b,
- baseline,
- middle,
- paintOrder
- var _this = this
- return __generator(this, function (_c) {
- ;(_a = this.createFontStyle(styles)),
- (font = _a[0]),
- (fontFamily = _a[1]),
- (fontSize = _a[2])
- this.ctx.font = font
- this.ctx.direction =
- styles.direction === 1 /* RTL */ ? 'rtl' : 'ltr'
- this.ctx.textAlign = 'left'
- this.ctx.textBaseline = 'alphabetic'
- ;(_b = this.fontMetrics.getMetrics(fontFamily, fontSize)),
- (baseline = _b.baseline),
- (middle = _b.middle)
- paintOrder = styles.paintOrder
- text.textBounds.forEach(function (text) {
- paintOrder.forEach(function (paintOrderLayer) {
- switch (paintOrderLayer) {
- case 0 /* FILL */:
- _this.ctx.fillStyle = asString(styles.color)
- _this.renderTextWithLetterSpacing(
- text,
- styles.letterSpacing,
- baseline
- )
- var textShadows = styles.textShadow
- if (textShadows.length && text.text.trim().length) {
- textShadows
- .slice(0)
- .reverse()
- .forEach(function (textShadow) {
- _this.ctx.shadowColor = asString(
- textShadow.color
- )
- _this.ctx.shadowOffsetX =
- textShadow.offsetX.number *
- _this.options.scale
- _this.ctx.shadowOffsetY =
- textShadow.offsetY.number *
- _this.options.scale
- _this.ctx.shadowBlur = textShadow.blur.number
- _this.renderTextWithLetterSpacing(
- text,
- styles.letterSpacing,
- baseline
- )
- })
- _this.ctx.shadowColor = ''
- _this.ctx.shadowOffsetX = 0
- _this.ctx.shadowOffsetY = 0
- _this.ctx.shadowBlur = 0
- }
- if (styles.textDecorationLine.length) {
- _this.ctx.fillStyle = asString(
- styles.textDecorationColor || styles.color
- )
- styles.textDecorationLine.forEach(function (
- textDecorationLine
- ) {
- switch (textDecorationLine) {
- case 1 /* UNDERLINE */: // Draws a line at the baseline of the font
- // TODO As some browsers display the line as more than 1px if the font-size is big,
- // need to take that into account both in position and size
- _this.ctx.fillRect(
- text.bounds.left,
- Math.round(text.bounds.top + baseline),
- text.bounds.width,
- 1
- )
- break
- case 2 /* OVERLINE */:
- _this.ctx.fillRect(
- text.bounds.left,
- Math.round(text.bounds.top),
- text.bounds.width,
- 1
- )
- break
- case 3 /* LINE_THROUGH */: // TODO try and find exact position for line-through
- _this.ctx.fillRect(
- text.bounds.left,
- Math.ceil(text.bounds.top + middle),
- text.bounds.width,
- 1
- )
- break
- }
- })
- }
- break
- case 1 /* STROKE */:
- if (
- styles.webkitTextStrokeWidth &&
- text.text.trim().length
- ) {
- _this.ctx.strokeStyle = asString(
- styles.webkitTextStrokeColor
- )
- _this.ctx.lineWidth = styles.webkitTextStrokeWidth // eslint-disable-next-line @typescript-eslint/no-explicit-any
- _this.ctx.lineJoin = !!window.chrome
- ? 'miter'
- : 'round'
- _this.ctx.strokeText(
- text.text,
- text.bounds.left,
- text.bounds.top + baseline
- )
- }
- _this.ctx.strokeStyle = ''
- _this.ctx.lineWidth = 0
- _this.ctx.lineJoin = 'miter'
- break
- }
- })
- })
- return [2 /*return*/]
- })
- })
- }
- CanvasRenderer.prototype.renderReplacedElement = function (
- container,
- curves,
- image
- ) {
- if (
- image &&
- container.intrinsicWidth > 0 &&
- container.intrinsicHeight > 0
- ) {
- var box = contentBox(container)
- var path = calculatePaddingBoxPath(curves)
- this.path(path)
- this.ctx.save()
- this.ctx.clip()
- this.ctx.drawImage(
- image,
- 0,
- 0,
- container.intrinsicWidth,
- container.intrinsicHeight,
- box.left,
- box.top,
- box.width,
- box.height
- )
- this.ctx.restore()
- }
- }
- CanvasRenderer.prototype.renderNodeContent = function (paint) {
- return __awaiter(this, void 0, void 0, function () {
- var container,
- curves,
- styles,
- _i,
- _a,
- child,
- image,
- image,
- iframeRenderer,
- canvas,
- size,
- _b,
- fontFamily,
- fontSize,
- baseline,
- bounds,
- x,
- textBounds,
- img,
- image,
- url,
- fontFamily,
- bounds
- return __generator(this, function (_c) {
- switch (_c.label) {
- case 0:
- this.applyEffects(paint.getEffects(4 /* CONTENT */))
- container = paint.container
- curves = paint.curves
- styles = container.styles
- ;(_i = 0), (_a = container.textNodes)
- _c.label = 1
- case 1:
- if (!(_i < _a.length)) return [3 /*break*/, 4]
- child = _a[_i]
- return [4 /*yield*/, this.renderTextNode(child, styles)]
- case 2:
- _c.sent()
- _c.label = 3
- case 3:
- _i++
- return [3 /*break*/, 1]
- case 4:
- if (!(container instanceof ImageElementContainer))
- return [3 /*break*/, 8]
- _c.label = 5
- case 5:
- _c.trys.push([5, 7, , 8])
- return [
- 4 /*yield*/,
- this.context.cache.match(container.src)
- ]
- case 6:
- image = _c.sent()
- this.renderReplacedElement(container, curves, image)
- return [3 /*break*/, 8]
- case 7:
- _c.sent()
- this.context.logger.error(
- 'Error loading image ' + container.src
- )
- return [3 /*break*/, 8]
- case 8:
- if (container instanceof CanvasElementContainer) {
- this.renderReplacedElement(
- container,
- curves,
- container.canvas
- )
- }
- if (!(container instanceof SVGElementContainer))
- return [3 /*break*/, 12]
- _c.label = 9
- case 9:
- _c.trys.push([9, 11, , 12])
- return [
- 4 /*yield*/,
- this.context.cache.match(container.svg)
- ]
- case 10:
- image = _c.sent()
- this.renderReplacedElement(container, curves, image)
- return [3 /*break*/, 12]
- case 11:
- _c.sent()
- this.context.logger.error(
- 'Error loading svg ' + container.svg.substring(0, 255)
- )
- return [3 /*break*/, 12]
- case 12:
- if (
- !(
- container instanceof IFrameElementContainer &&
- container.tree
- )
- )
- return [3 /*break*/, 14]
- iframeRenderer = new CanvasRenderer(this.context, {
- scale: this.options.scale,
- backgroundColor: container.backgroundColor,
- x: 0,
- y: 0,
- width: container.width,
- height: container.height
- })
- return [
- 4 /*yield*/,
- iframeRenderer.render(container.tree)
- ]
- case 13:
- canvas = _c.sent()
- if (container.width && container.height) {
- this.ctx.drawImage(
- canvas,
- 0,
- 0,
- container.width,
- container.height,
- container.bounds.left,
- container.bounds.top,
- container.bounds.width,
- container.bounds.height
- )
- }
- _c.label = 14
- case 14:
- if (container instanceof InputElementContainer) {
- size = Math.min(
- container.bounds.width,
- container.bounds.height
- )
- if (container.type === CHECKBOX) {
- if (container.checked) {
- this.ctx.save()
- this.path([
- new Vector(
- container.bounds.left + size * 0.39363,
- container.bounds.top + size * 0.79
- ),
- new Vector(
- container.bounds.left + size * 0.16,
- container.bounds.top + size * 0.5549
- ),
- new Vector(
- container.bounds.left + size * 0.27347,
- container.bounds.top + size * 0.44071
- ),
- new Vector(
- container.bounds.left + size * 0.39694,
- container.bounds.top + size * 0.5649
- ),
- new Vector(
- container.bounds.left + size * 0.72983,
- container.bounds.top + size * 0.23
- ),
- new Vector(
- container.bounds.left + size * 0.84,
- container.bounds.top + size * 0.34085
- ),
- new Vector(
- container.bounds.left + size * 0.39363,
- container.bounds.top + size * 0.79
- )
- ])
- this.ctx.fillStyle = asString(INPUT_COLOR)
- this.ctx.fill()
- this.ctx.restore()
- }
- } else if (container.type === RADIO) {
- if (container.checked) {
- this.ctx.save()
- this.ctx.beginPath()
- this.ctx.arc(
- container.bounds.left + size / 2,
- container.bounds.top + size / 2,
- size / 4,
- 0,
- Math.PI * 2,
- true
- )
- this.ctx.fillStyle = asString(INPUT_COLOR)
- this.ctx.fill()
- this.ctx.restore()
- }
- }
- }
- if (
- isTextInputElement(container) &&
- container.value.length
- ) {
- ;(_b = this.createFontStyle(styles)),
- (fontFamily = _b[0]),
- (fontSize = _b[1])
- baseline = this.fontMetrics.getMetrics(
- fontFamily,
- fontSize
- ).baseline
- this.ctx.font = fontFamily
- this.ctx.fillStyle = asString(styles.color)
- this.ctx.textBaseline = 'alphabetic'
- this.ctx.textAlign = canvasTextAlign(
- container.styles.textAlign
- )
- bounds = contentBox(container)
- x = 0
- switch (container.styles.textAlign) {
- case 1 /* CENTER */:
- x += bounds.width / 2
- break
- case 2 /* RIGHT */:
- x += bounds.width
- break
- }
- textBounds = bounds.add(x, 0, 0, -bounds.height / 2 + 1)
- this.ctx.save()
- this.path([
- new Vector(bounds.left, bounds.top),
- new Vector(bounds.left + bounds.width, bounds.top),
- new Vector(
- bounds.left + bounds.width,
- bounds.top + bounds.height
- ),
- new Vector(bounds.left, bounds.top + bounds.height)
- ])
- this.ctx.clip()
- this.renderTextWithLetterSpacing(
- new TextBounds(container.value, textBounds),
- styles.letterSpacing,
- baseline
- )
- this.ctx.restore()
- this.ctx.textBaseline = 'alphabetic'
- this.ctx.textAlign = 'left'
- }
- if (
- !contains(
- container.styles.display,
- 2048 /* LIST_ITEM */
- )
- )
- return [3 /*break*/, 20]
- if (!(container.styles.listStyleImage !== null))
- return [3 /*break*/, 19]
- img = container.styles.listStyleImage
- if (!((img.type === 0) /* URL */))
- return [3 /*break*/, 18]
- image = void 0
- url = img.url
- _c.label = 15
- case 15:
- _c.trys.push([15, 17, , 18])
- return [4 /*yield*/, this.context.cache.match(url)]
- case 16:
- image = _c.sent()
- this.ctx.drawImage(
- image,
- container.bounds.left - (image.width + 10),
- container.bounds.top
- )
- return [3 /*break*/, 18]
- case 17:
- _c.sent()
- this.context.logger.error(
- 'Error loading list-style-image ' + url
- )
- return [3 /*break*/, 18]
- case 18:
- return [3 /*break*/, 20]
- case 19:
- if (
- paint.listValue &&
- container.styles.listStyleType !== -1 /* NONE */
- ) {
- fontFamily = this.createFontStyle(styles)[0]
- this.ctx.font = fontFamily
- this.ctx.fillStyle = asString(styles.color)
- this.ctx.textBaseline = 'middle'
- this.ctx.textAlign = 'right'
- bounds = new Bounds(
- container.bounds.left,
- container.bounds.top +
- getAbsoluteValue(
- container.styles.paddingTop,
- container.bounds.width
- ),
- container.bounds.width,
- computeLineHeight(
- styles.lineHeight,
- styles.fontSize.number
- ) /
- 2 +
- 1
- )
- this.renderTextWithLetterSpacing(
- new TextBounds(paint.listValue, bounds),
- styles.letterSpacing,
- computeLineHeight(
- styles.lineHeight,
- styles.fontSize.number
- ) /
- 2 +
- 2
- )
- this.ctx.textBaseline = 'bottom'
- this.ctx.textAlign = 'left'
- }
- _c.label = 20
- case 20:
- return [2 /*return*/]
- }
- })
- })
- }
- CanvasRenderer.prototype.renderStackContent = function (stack) {
- return __awaiter(this, void 0, void 0, function () {
- var _i,
- _a,
- child,
- _b,
- _c,
- child,
- _d,
- _e,
- child,
- _f,
- _g,
- child,
- _h,
- _j,
- child,
- _k,
- _l,
- child,
- _m,
- _o,
- child
- return __generator(this, function (_p) {
- switch (_p.label) {
- case 0:
- if (
- contains(
- stack.element.container.flags,
- 16 /* DEBUG_RENDER */
- )
- ) {
- debugger
- } // https://www.w3.org/TR/css-position-3/#painting-order
- // 1. the background and borders of the element forming the stacking context.
- return [
- 4 /*yield*/,
- this.renderNodeBackgroundAndBorders(stack.element)
- ]
- case 1: // https://www.w3.org/TR/css-position-3/#painting-order
- // 1. the background and borders of the element forming the stacking context.
- _p.sent()
- ;(_i = 0), (_a = stack.negativeZIndex)
- _p.label = 2
- case 2:
- if (!(_i < _a.length)) return [3 /*break*/, 5]
- child = _a[_i]
- return [4 /*yield*/, this.renderStack(child)]
- case 3:
- _p.sent()
- _p.label = 4
- case 4:
- _i++
- return [3 /*break*/, 2]
- case 5: // 3. For all its in-flow, non-positioned, block-level descendants in tree order:
- return [
- 4 /*yield*/,
- this.renderNodeContent(stack.element)
- ]
- case 6: // 3. For all its in-flow, non-positioned, block-level descendants in tree order:
- _p.sent()
- ;(_b = 0), (_c = stack.nonInlineLevel)
- _p.label = 7
- case 7:
- if (!(_b < _c.length)) return [3 /*break*/, 10]
- child = _c[_b]
- return [4 /*yield*/, this.renderNode(child)]
- case 8:
- _p.sent()
- _p.label = 9
- case 9:
- _b++
- return [3 /*break*/, 7]
- case 10:
- ;(_d = 0), (_e = stack.nonPositionedFloats)
- _p.label = 11
- case 11:
- if (!(_d < _e.length)) return [3 /*break*/, 14]
- child = _e[_d]
- return [4 /*yield*/, this.renderStack(child)]
- case 12:
- _p.sent()
- _p.label = 13
- case 13:
- _d++
- return [3 /*break*/, 11]
- case 14:
- ;(_f = 0), (_g = stack.nonPositionedInlineLevel)
- _p.label = 15
- case 15:
- if (!(_f < _g.length)) return [3 /*break*/, 18]
- child = _g[_f]
- return [4 /*yield*/, this.renderStack(child)]
- case 16:
- _p.sent()
- _p.label = 17
- case 17:
- _f++
- return [3 /*break*/, 15]
- case 18:
- ;(_h = 0), (_j = stack.inlineLevel)
- _p.label = 19
- case 19:
- if (!(_h < _j.length)) return [3 /*break*/, 22]
- child = _j[_h]
- return [4 /*yield*/, this.renderNode(child)]
- case 20:
- _p.sent()
- _p.label = 21
- case 21:
- _h++
- return [3 /*break*/, 19]
- case 22:
- ;(_k = 0),
- (_l = stack.zeroOrAutoZIndexOrTransformedOrOpacity)
- _p.label = 23
- case 23:
- if (!(_k < _l.length)) return [3 /*break*/, 26]
- child = _l[_k]
- return [4 /*yield*/, this.renderStack(child)]
- case 24:
- _p.sent()
- _p.label = 25
- case 25:
- _k++
- return [3 /*break*/, 23]
- case 26:
- ;(_m = 0), (_o = stack.positiveZIndex)
- _p.label = 27
- case 27:
- if (!(_m < _o.length)) return [3 /*break*/, 30]
- child = _o[_m]
- return [4 /*yield*/, this.renderStack(child)]
- case 28:
- _p.sent()
- _p.label = 29
- case 29:
- _m++
- return [3 /*break*/, 27]
- case 30:
- return [2 /*return*/]
- }
- })
- })
- }
- CanvasRenderer.prototype.mask = function (paths) {
- this.ctx.beginPath()
- this.ctx.moveTo(0, 0)
- this.ctx.lineTo(this.canvas.width, 0)
- this.ctx.lineTo(this.canvas.width, this.canvas.height)
- this.ctx.lineTo(0, this.canvas.height)
- this.ctx.lineTo(0, 0)
- this.formatPath(paths.slice(0).reverse())
- this.ctx.closePath()
- }
- CanvasRenderer.prototype.path = function (paths) {
- this.ctx.beginPath()
- this.formatPath(paths)
- this.ctx.closePath()
- }
- CanvasRenderer.prototype.formatPath = function (paths) {
- var _this = this
- paths.forEach(function (point, index) {
- var start = isBezierCurve(point) ? point.start : point
- if (index === 0) {
- _this.ctx.moveTo(start.x, start.y)
- } else {
- _this.ctx.lineTo(start.x, start.y)
- }
- if (isBezierCurve(point)) {
- _this.ctx.bezierCurveTo(
- point.startControl.x,
- point.startControl.y,
- point.endControl.x,
- point.endControl.y,
- point.end.x,
- point.end.y
- )
- }
- })
- }
- CanvasRenderer.prototype.renderRepeat = function (
- path,
- pattern,
- offsetX,
- offsetY
- ) {
- this.path(path)
- this.ctx.fillStyle = pattern
- this.ctx.translate(offsetX, offsetY)
- this.ctx.fill()
- this.ctx.translate(-offsetX, -offsetY)
- }
- CanvasRenderer.prototype.resizeImage = function (
- image,
- width,
- height
- ) {
- var _a
- if (image.width === width && image.height === height) {
- return image
- }
- var ownerDocument =
- (_a = this.canvas.ownerDocument) !== null && _a !== void 0
- ? _a
- : document
- var canvas = ownerDocument.createElement('canvas')
- canvas.width = Math.max(1, width)
- canvas.height = Math.max(1, height)
- var ctx = canvas.getContext('2d')
- ctx.drawImage(
- image,
- 0,
- 0,
- image.width,
- image.height,
- 0,
- 0,
- width,
- height
- )
- return canvas
- }
- CanvasRenderer.prototype.renderBackgroundImage = function (
- container
- ) {
- return __awaiter(this, void 0, void 0, function () {
- var index, _loop_1, this_1, _i, _a, backgroundImage
- return __generator(this, function (_b) {
- switch (_b.label) {
- case 0:
- index = container.styles.backgroundImage.length - 1
- _loop_1 = function _loop_1(backgroundImage) {
- var image,
- url,
- _c,
- path,
- x,
- y,
- width,
- height,
- pattern,
- _d,
- path,
- x,
- y,
- width,
- height,
- _e,
- lineLength,
- x0,
- x1,
- y0,
- y1,
- canvas,
- ctx,
- gradient_1,
- pattern,
- _f,
- path,
- left,
- top_1,
- width,
- height,
- position,
- x,
- y,
- _g,
- rx,
- ry,
- radialGradient_1,
- midX,
- midY,
- f,
- invF
- return __generator(this, function (_h) {
- switch (_h.label) {
- case 0:
- if (!((backgroundImage.type === 0) /* URL */))
- return [3 /*break*/, 5]
- image = void 0
- url = backgroundImage.url
- _h.label = 1
- case 1:
- _h.trys.push([1, 3, , 4])
- return [
- 4 /*yield*/,
- this_1.context.cache.match(url)
- ]
- case 2:
- image = _h.sent()
- return [3 /*break*/, 4]
- case 3:
- _h.sent()
- this_1.context.logger.error(
- 'Error loading background-image ' + url
- )
- return [3 /*break*/, 4]
- case 4:
- if (image) {
- ;(_c = calculateBackgroundRendering(
- container,
- index,
- [
- image.width,
- image.height,
- image.width / image.height
- ]
- )),
- (path = _c[0]),
- (x = _c[1]),
- (y = _c[2]),
- (width = _c[3]),
- (height = _c[4])
- pattern = this_1.ctx.createPattern(
- this_1.resizeImage(image, width, height),
- 'repeat'
- )
- this_1.renderRepeat(path, pattern, x, y)
- }
- return [3 /*break*/, 6]
- case 5:
- if (isLinearGradient(backgroundImage)) {
- ;(_d = calculateBackgroundRendering(
- container,
- index,
- [null, null, null]
- )),
- (path = _d[0]),
- (x = _d[1]),
- (y = _d[2]),
- (width = _d[3]),
- (height = _d[4])
- ;(_e = calculateGradientDirection(
- backgroundImage.angle,
- width,
- height
- )),
- (lineLength = _e[0]),
- (x0 = _e[1]),
- (x1 = _e[2]),
- (y0 = _e[3]),
- (y1 = _e[4])
- canvas = document.createElement('canvas')
- canvas.width = width
- canvas.height = height
- ctx = canvas.getContext('2d')
- gradient_1 = ctx.createLinearGradient(
- x0,
- y0,
- x1,
- y1
- )
- processColorStops(
- backgroundImage.stops,
- lineLength
- ).forEach(function (colorStop) {
- return gradient_1.addColorStop(
- colorStop.stop,
- asString(colorStop.color)
- )
- })
- ctx.fillStyle = gradient_1
- ctx.fillRect(0, 0, width, height)
- if (width > 0 && height > 0) {
- pattern = this_1.ctx.createPattern(
- canvas,
- 'repeat'
- )
- this_1.renderRepeat(path, pattern, x, y)
- }
- } else if (isRadialGradient(backgroundImage)) {
- ;(_f = calculateBackgroundRendering(
- container,
- index,
- [null, null, null]
- )),
- (path = _f[0]),
- (left = _f[1]),
- (top_1 = _f[2]),
- (width = _f[3]),
- (height = _f[4])
- position =
- backgroundImage.position.length === 0
- ? [FIFTY_PERCENT]
- : backgroundImage.position
- x = getAbsoluteValue(position[0], width)
- y = getAbsoluteValue(
- position[position.length - 1],
- height
- )
- ;(_g = calculateRadius(
- backgroundImage,
- x,
- y,
- width,
- height
- )),
- (rx = _g[0]),
- (ry = _g[1])
- if (rx > 0 && ry > 0) {
- radialGradient_1 =
- this_1.ctx.createRadialGradient(
- left + x,
- top_1 + y,
- 0,
- left + x,
- top_1 + y,
- rx
- )
- processColorStops(
- backgroundImage.stops,
- rx * 2
- ).forEach(function (colorStop) {
- return radialGradient_1.addColorStop(
- colorStop.stop,
- asString(colorStop.color)
- )
- })
- this_1.path(path)
- this_1.ctx.fillStyle = radialGradient_1
- if (rx !== ry) {
- midX =
- container.bounds.left +
- 0.5 * container.bounds.width
- midY =
- container.bounds.top +
- 0.5 * container.bounds.height
- f = ry / rx
- invF = 1 / f
- this_1.ctx.save()
- this_1.ctx.translate(midX, midY)
- this_1.ctx.transform(1, 0, 0, f, 0, 0)
- this_1.ctx.translate(-midX, -midY)
- this_1.ctx.fillRect(
- left,
- invF * (top_1 - midY) + midY,
- width,
- height * invF
- )
- this_1.ctx.restore()
- } else {
- this_1.ctx.fill()
- }
- }
- }
- _h.label = 6
- case 6:
- index--
- return [2 /*return*/]
- }
- })
- }
- this_1 = this
- ;(_i = 0),
- (_a = container.styles.backgroundImage
- .slice(0)
- .reverse())
- _b.label = 1
- case 1:
- if (!(_i < _a.length)) return [3 /*break*/, 4]
- backgroundImage = _a[_i]
- return [5 /*yield**/, _loop_1(backgroundImage)]
- case 2:
- _b.sent()
- _b.label = 3
- case 3:
- _i++
- return [3 /*break*/, 1]
- case 4:
- return [2 /*return*/]
- }
- })
- })
- }
- CanvasRenderer.prototype.renderSolidBorder = function (
- color,
- side,
- curvePoints
- ) {
- return __awaiter(this, void 0, void 0, function () {
- return __generator(this, function (_a) {
- this.path(parsePathForBorder(curvePoints, side))
- this.ctx.fillStyle = asString(color)
- this.ctx.fill()
- return [2 /*return*/]
- })
- })
- }
- CanvasRenderer.prototype.renderDoubleBorder = function (
- color,
- width,
- side,
- curvePoints
- ) {
- return __awaiter(this, void 0, void 0, function () {
- var outerPaths, innerPaths
- return __generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- if (!(width < 3)) return [3 /*break*/, 2]
- return [
- 4 /*yield*/,
- this.renderSolidBorder(color, side, curvePoints)
- ]
- case 1:
- _a.sent()
- return [2 /*return*/]
- case 2:
- outerPaths = parsePathForBorderDoubleOuter(
- curvePoints,
- side
- )
- this.path(outerPaths)
- this.ctx.fillStyle = asString(color)
- this.ctx.fill()
- innerPaths = parsePathForBorderDoubleInner(
- curvePoints,
- side
- )
- this.path(innerPaths)
- this.ctx.fill()
- return [2 /*return*/]
- }
- })
- })
- }
- CanvasRenderer.prototype.renderNodeBackgroundAndBorders = function (
- paint
- ) {
- return __awaiter(this, void 0, void 0, function () {
- var styles,
- hasBackground,
- borders,
- backgroundPaintingArea,
- side,
- _i,
- borders_1,
- border
- var _this = this
- return __generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- this.applyEffects(
- paint.getEffects(2 /* BACKGROUND_BORDERS */)
- )
- styles = paint.container.styles
- hasBackground =
- !isTransparent(styles.backgroundColor) ||
- styles.backgroundImage.length
- borders = [
- {
- style: styles.borderTopStyle,
- color: styles.borderTopColor,
- width: styles.borderTopWidth
- },
- {
- style: styles.borderRightStyle,
- color: styles.borderRightColor,
- width: styles.borderRightWidth
- },
- {
- style: styles.borderBottomStyle,
- color: styles.borderBottomColor,
- width: styles.borderBottomWidth
- },
- {
- style: styles.borderLeftStyle,
- color: styles.borderLeftColor,
- width: styles.borderLeftWidth
- }
- ]
- backgroundPaintingArea =
- calculateBackgroundCurvedPaintingArea(
- getBackgroundValueForIndex(styles.backgroundClip, 0),
- paint.curves
- )
- if (!(hasBackground || styles.boxShadow.length))
- return [3 /*break*/, 2]
- this.ctx.save()
- this.path(backgroundPaintingArea)
- this.ctx.clip()
- if (!isTransparent(styles.backgroundColor)) {
- this.ctx.fillStyle = asString(styles.backgroundColor)
- this.ctx.fill()
- }
- return [
- 4 /*yield*/,
- this.renderBackgroundImage(paint.container)
- ]
- case 1:
- _a.sent()
- this.ctx.restore()
- styles.boxShadow
- .slice(0)
- .reverse()
- .forEach(function (shadow) {
- _this.ctx.save()
- var borderBoxArea = calculateBorderBoxPath(
- paint.curves
- )
- var maskOffset = shadow.inset ? 0 : MASK_OFFSET
- var shadowPaintingArea = transformPath(
- borderBoxArea,
- -maskOffset +
- (shadow.inset ? 1 : -1) * shadow.spread.number,
- (shadow.inset ? 1 : -1) * shadow.spread.number,
- shadow.spread.number * (shadow.inset ? -2 : 2),
- shadow.spread.number * (shadow.inset ? -2 : 2)
- )
- if (shadow.inset) {
- _this.path(borderBoxArea)
- _this.ctx.clip()
- _this.mask(shadowPaintingArea)
- } else {
- _this.mask(borderBoxArea)
- _this.ctx.clip()
- _this.path(shadowPaintingArea)
- }
- _this.ctx.shadowOffsetX =
- shadow.offsetX.number + maskOffset
- _this.ctx.shadowOffsetY = shadow.offsetY.number
- _this.ctx.shadowColor = asString(shadow.color)
- _this.ctx.shadowBlur = shadow.blur.number
- _this.ctx.fillStyle = shadow.inset
- ? asString(shadow.color)
- : 'rgba(0,0,0,1)'
- _this.ctx.fill()
- _this.ctx.restore()
- })
- _a.label = 2
- case 2:
- side = 0
- ;(_i = 0), (borders_1 = borders)
- _a.label = 3
- case 3:
- if (!(_i < borders_1.length)) return [3 /*break*/, 13]
- border = borders_1[_i]
- if (
- !(
- border.style !== 0 /* NONE */ &&
- !isTransparent(border.color) &&
- border.width > 0
- )
- )
- return [3 /*break*/, 11]
- if (!((border.style === 2) /* DASHED */))
- return [3 /*break*/, 5]
- return [
- 4 /*yield*/,
- this.renderDashedDottedBorder(
- border.color,
- border.width,
- side,
- paint.curves,
- 2 /* DASHED */
- )
- ]
- case 4:
- _a.sent()
- return [3 /*break*/, 11]
- case 5:
- if (!((border.style === 3) /* DOTTED */))
- return [3 /*break*/, 7]
- return [
- 4 /*yield*/,
- this.renderDashedDottedBorder(
- border.color,
- border.width,
- side,
- paint.curves,
- 3 /* DOTTED */
- )
- ]
- case 6:
- _a.sent()
- return [3 /*break*/, 11]
- case 7:
- if (!((border.style === 4) /* DOUBLE */))
- return [3 /*break*/, 9]
- return [
- 4 /*yield*/,
- this.renderDoubleBorder(
- border.color,
- border.width,
- side,
- paint.curves
- )
- ]
- case 8:
- _a.sent()
- return [3 /*break*/, 11]
- case 9:
- return [
- 4 /*yield*/,
- this.renderSolidBorder(border.color, side, paint.curves)
- ]
- case 10:
- _a.sent()
- _a.label = 11
- case 11:
- side++
- _a.label = 12
- case 12:
- _i++
- return [3 /*break*/, 3]
- case 13:
- return [2 /*return*/]
- }
- })
- })
- }
- CanvasRenderer.prototype.renderDashedDottedBorder = function (
- color,
- width,
- side,
- curvePoints,
- style
- ) {
- return __awaiter(this, void 0, void 0, function () {
- var strokePaths,
- boxPaths,
- startX,
- startY,
- endX,
- endY,
- length,
- dashLength,
- spaceLength,
- useLineDash,
- multiplier,
- numberOfDashes,
- minSpace,
- maxSpace,
- path1,
- path2,
- path1,
- path2
- return __generator(this, function (_a) {
- this.ctx.save()
- strokePaths = parsePathForBorderStroke(curvePoints, side)
- boxPaths = parsePathForBorder(curvePoints, side)
- if (style === 2 /* DASHED */) {
- this.path(boxPaths)
- this.ctx.clip()
- }
- if (isBezierCurve(boxPaths[0])) {
- startX = boxPaths[0].start.x
- startY = boxPaths[0].start.y
- } else {
- startX = boxPaths[0].x
- startY = boxPaths[0].y
- }
- if (isBezierCurve(boxPaths[1])) {
- endX = boxPaths[1].end.x
- endY = boxPaths[1].end.y
- } else {
- endX = boxPaths[1].x
- endY = boxPaths[1].y
- }
- if (side === 0 || side === 2) {
- length = Math.abs(startX - endX)
- } else {
- length = Math.abs(startY - endY)
- }
- this.ctx.beginPath()
- if (style === 3 /* DOTTED */) {
- this.formatPath(strokePaths)
- } else {
- this.formatPath(boxPaths.slice(0, 2))
- }
- dashLength = width < 3 ? width * 3 : width * 2
- spaceLength = width < 3 ? width * 2 : width
- if (style === 3 /* DOTTED */) {
- dashLength = width
- spaceLength = width
- }
- useLineDash = true
- if (length <= dashLength * 2) {
- useLineDash = false
- } else if (length <= dashLength * 2 + spaceLength) {
- multiplier = length / (2 * dashLength + spaceLength)
- dashLength *= multiplier
- spaceLength *= multiplier
- } else {
- numberOfDashes = Math.floor(
- (length + spaceLength) / (dashLength + spaceLength)
- )
- minSpace =
- (length - numberOfDashes * dashLength) /
- (numberOfDashes - 1)
- maxSpace =
- (length - (numberOfDashes + 1) * dashLength) /
- numberOfDashes
- spaceLength =
- maxSpace <= 0 ||
- Math.abs(spaceLength - minSpace) <
- Math.abs(spaceLength - maxSpace)
- ? minSpace
- : maxSpace
- }
- if (useLineDash) {
- if (style === 3 /* DOTTED */) {
- this.ctx.setLineDash([0, dashLength + spaceLength])
- } else {
- this.ctx.setLineDash([dashLength, spaceLength])
- }
- }
- if (style === 3 /* DOTTED */) {
- this.ctx.lineCap = 'round'
- this.ctx.lineWidth = width
- } else {
- this.ctx.lineWidth = width * 2 + 1.1
- }
- this.ctx.strokeStyle = asString(color)
- this.ctx.stroke()
- this.ctx.setLineDash([]) // dashed round edge gap
- if (style === 2 /* DASHED */) {
- if (isBezierCurve(boxPaths[0])) {
- path1 = boxPaths[3]
- path2 = boxPaths[0]
- this.ctx.beginPath()
- this.formatPath([
- new Vector(path1.end.x, path1.end.y),
- new Vector(path2.start.x, path2.start.y)
- ])
- this.ctx.stroke()
- }
- if (isBezierCurve(boxPaths[1])) {
- path1 = boxPaths[1]
- path2 = boxPaths[2]
- this.ctx.beginPath()
- this.formatPath([
- new Vector(path1.end.x, path1.end.y),
- new Vector(path2.start.x, path2.start.y)
- ])
- this.ctx.stroke()
- }
- }
- this.ctx.restore()
- return [2 /*return*/]
- })
- })
- }
- CanvasRenderer.prototype.render = function (element) {
- return __awaiter(this, void 0, void 0, function () {
- var stack
- return __generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- if (this.options.backgroundColor) {
- this.ctx.fillStyle = asString(
- this.options.backgroundColor
- )
- this.ctx.fillRect(
- this.options.x,
- this.options.y,
- this.options.width,
- this.options.height
- )
- }
- stack = parseStackingContexts(element)
- return [4 /*yield*/, this.renderStack(stack)]
- case 1:
- _a.sent()
- this.applyEffects([])
- return [2 /*return*/, this.canvas]
- }
- })
- })
- }
- return CanvasRenderer
- })(Renderer)
- var isTextInputElement = function isTextInputElement(container) {
- if (container instanceof TextareaElementContainer) {
- return true
- } else if (container instanceof SelectElementContainer) {
- return true
- } else if (
- container instanceof InputElementContainer &&
- container.type !== RADIO &&
- container.type !== CHECKBOX
- ) {
- return true
- }
- return false
- }
- var calculateBackgroundCurvedPaintingArea =
- function calculateBackgroundCurvedPaintingArea(clip, curves) {
- switch (clip) {
- case 0 /* BORDER_BOX */:
- return calculateBorderBoxPath(curves)
- case 2 /* CONTENT_BOX */:
- return calculateContentBoxPath(curves)
- case 1 /* PADDING_BOX */:
- default:
- return calculatePaddingBoxPath(curves)
- }
- }
- var canvasTextAlign = function canvasTextAlign(textAlign) {
- switch (textAlign) {
- case 1 /* CENTER */:
- return 'center'
- case 2 /* RIGHT */:
- return 'right'
- case 0 /* LEFT */:
- default:
- return 'left'
- }
- } // see https://github.com/niklasvh/html2canvas/pull/2645
- var iOSBrokenFonts = ['-apple-system', 'system-ui']
- var fixIOSSystemFonts = function fixIOSSystemFonts(fontFamilies) {
- return /iPhone OS 15_(0|1)/.test(window.navigator.userAgent)
- ? fontFamilies.filter(function (fontFamily) {
- return iOSBrokenFonts.indexOf(fontFamily) === -1
- })
- : fontFamilies
- }
- var ForeignObjectRenderer = /** @class */ (function (_super) {
- __extends(ForeignObjectRenderer, _super)
- function ForeignObjectRenderer(context, options) {
- var _this = _super.call(this, context, options) || this
- _this.canvas = options.canvas
- ? options.canvas
- : document.createElement('canvas')
- _this.ctx = _this.canvas.getContext('2d')
- _this.options = options
- _this.canvas.width = Math.floor(options.width * options.scale)
- _this.canvas.height = Math.floor(options.height * options.scale)
- _this.canvas.style.width = options.width + 'px'
- _this.canvas.style.height = options.height + 'px'
- _this.ctx.scale(_this.options.scale, _this.options.scale)
- _this.ctx.translate(-options.x, -options.y)
- _this.context.logger.debug(
- 'EXPERIMENTAL ForeignObject renderer initialized (' +
- options.width +
- 'x' +
- options.height +
- ' at ' +
- options.x +
- ',' +
- options.y +
- ') with scale ' +
- options.scale
- )
- return _this
- }
- ForeignObjectRenderer.prototype.render = function (element) {
- return __awaiter(this, void 0, void 0, function () {
- var svg, img
- return __generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- svg = createForeignObjectSVG(
- this.options.width * this.options.scale,
- this.options.height * this.options.scale,
- this.options.scale,
- this.options.scale,
- element
- )
- return [4 /*yield*/, loadSerializedSVG(svg)]
- case 1:
- img = _a.sent()
- if (this.options.backgroundColor) {
- this.ctx.fillStyle = asString(
- this.options.backgroundColor
- )
- this.ctx.fillRect(
- 0,
- 0,
- this.options.width * this.options.scale,
- this.options.height * this.options.scale
- )
- }
- this.ctx.drawImage(
- img,
- -this.options.x * this.options.scale,
- -this.options.y * this.options.scale
- )
- return [2 /*return*/, this.canvas]
- }
- })
- })
- }
- return ForeignObjectRenderer
- })(Renderer)
- var loadSerializedSVG = function loadSerializedSVG(svg) {
- return new Promise(function (resolve, reject) {
- var img = new Image()
- img.onload = function () {
- resolve(img)
- }
- img.onerror = reject
- img.src =
- 'data:image/svg+xml;charset=utf-8,' +
- encodeURIComponent(new XMLSerializer().serializeToString(svg))
- })
- }
- var Logger = /** @class */ (function () {
- function Logger(_a) {
- var id = _a.id,
- enabled = _a.enabled
- this.id = id
- this.enabled = enabled
- this.start = Date.now()
- } // eslint-disable-next-line @typescript-eslint/no-explicit-any
- Logger.prototype.debug = function () {
- var args = []
- for (var _i = 0; _i < arguments.length; _i++) {
- args[_i] = arguments[_i]
- }
- if (this.enabled) {
- // eslint-disable-next-line no-console
- if (
- typeof window !== 'undefined' &&
- window.console &&
- typeof console.debug === 'function'
- ) {
- // eslint-disable-next-line no-console
- console.debug.apply(
- console,
- __spreadArray([this.id, this.getTime() + 'ms'], args)
- )
- } else {
- this.info.apply(this, args)
- }
- }
- }
- Logger.prototype.getTime = function () {
- return Date.now() - this.start
- } // eslint-disable-next-line @typescript-eslint/no-explicit-any
- Logger.prototype.info = function () {
- var args = []
- for (var _i = 0; _i < arguments.length; _i++) {
- args[_i] = arguments[_i]
- }
- if (this.enabled) {
- // eslint-disable-next-line no-console
- if (
- typeof window !== 'undefined' &&
- window.console &&
- typeof console.info === 'function'
- ) {
- // eslint-disable-next-line no-console
- console.info.apply(
- console,
- __spreadArray([this.id, this.getTime() + 'ms'], args)
- )
- }
- }
- } // eslint-disable-next-line @typescript-eslint/no-explicit-any
- Logger.prototype.warn = function () {
- var args = []
- for (var _i = 0; _i < arguments.length; _i++) {
- args[_i] = arguments[_i]
- }
- if (this.enabled) {
- // eslint-disable-next-line no-console
- if (
- typeof window !== 'undefined' &&
- window.console &&
- typeof console.warn === 'function'
- ) {
- // eslint-disable-next-line no-console
- console.warn.apply(
- console,
- __spreadArray([this.id, this.getTime() + 'ms'], args)
- )
- } else {
- this.info.apply(this, args)
- }
- }
- } // eslint-disable-next-line @typescript-eslint/no-explicit-any
- Logger.prototype.error = function () {
- var args = []
- for (var _i = 0; _i < arguments.length; _i++) {
- args[_i] = arguments[_i]
- }
- if (this.enabled) {
- // eslint-disable-next-line no-console
- if (
- typeof window !== 'undefined' &&
- window.console &&
- typeof console.error === 'function'
- ) {
- // eslint-disable-next-line no-console
- console.error.apply(
- console,
- __spreadArray([this.id, this.getTime() + 'ms'], args)
- )
- } else {
- this.info.apply(this, args)
- }
- }
- }
- Logger.instances = {}
- return Logger
- })()
- var Context = /** @class */ (function () {
- function Context(options, windowBounds) {
- var _a
- this.windowBounds = windowBounds
- this.instanceName = '#' + Context.instanceCount++
- this.logger = new Logger({
- id: this.instanceName,
- enabled: options.logging
- })
- this.cache =
- (_a = options.cache) !== null && _a !== void 0
- ? _a
- : new Cache(this, options)
- }
- Context.instanceCount = 1
- return Context
- })()
- var html2canvas = function html2canvas(element, options) {
- if (options === void 0) {
- options = {}
- }
- return renderElement(element, options)
- }
- if (typeof window !== 'undefined') {
- CacheStorage.setContext(window)
- }
- var renderElement = function renderElement(element, opts) {
- return __awaiter(void 0, void 0, void 0, function () {
- var ownerDocument,
- defaultView,
- resourceOptions,
- contextOptions,
- windowOptions,
- windowBounds,
- context,
- foreignObjectRendering,
- cloneOptions,
- documentCloner,
- clonedElement,
- container,
- _a,
- width,
- height,
- left,
- top,
- backgroundColor,
- renderOptions,
- canvas,
- renderer,
- root,
- renderer
- var _b,
- _c,
- _d,
- _e,
- _f,
- _g,
- _h,
- _j,
- _k,
- _l,
- _m,
- _o,
- _p,
- _q,
- _r,
- _s,
- _t
- return __generator(this, function (_u) {
- switch (_u.label) {
- case 0:
- if (!element || _typeof(element) !== 'object') {
- return [
- 2 /*return*/,
- Promise.reject(
- 'Invalid element provided as first argument'
- )
- ]
- }
- ownerDocument = element.ownerDocument
- if (!ownerDocument) {
- throw new Error('Element is not attached to a Document')
- }
- defaultView = ownerDocument.defaultView
- if (!defaultView) {
- throw new Error('Document is not attached to a Window')
- }
- resourceOptions = {
- allowTaint:
- (_b = opts.allowTaint) !== null && _b !== void 0
- ? _b
- : false,
- imageTimeout:
- (_c = opts.imageTimeout) !== null && _c !== void 0
- ? _c
- : 15000,
- proxy: opts.proxy,
- useCORS:
- (_d = opts.useCORS) !== null && _d !== void 0
- ? _d
- : false
- }
- contextOptions = _assign(
- {
- logging:
- (_e = opts.logging) !== null && _e !== void 0
- ? _e
- : true,
- cache: opts.cache
- },
- resourceOptions
- )
- windowOptions = {
- windowWidth:
- (_f = opts.windowWidth) !== null && _f !== void 0
- ? _f
- : defaultView.innerWidth,
- windowHeight:
- (_g = opts.windowHeight) !== null && _g !== void 0
- ? _g
- : defaultView.innerHeight,
- scrollX:
- (_h = opts.scrollX) !== null && _h !== void 0
- ? _h
- : defaultView.pageXOffset,
- scrollY:
- (_j = opts.scrollY) !== null && _j !== void 0
- ? _j
- : defaultView.pageYOffset
- }
- windowBounds = new Bounds(
- windowOptions.scrollX,
- windowOptions.scrollY,
- windowOptions.windowWidth,
- windowOptions.windowHeight
- )
- context = new Context(contextOptions, windowBounds)
- foreignObjectRendering =
- (_k = opts.foreignObjectRendering) !== null &&
- _k !== void 0
- ? _k
- : false
- cloneOptions = {
- allowTaint:
- (_l = opts.allowTaint) !== null && _l !== void 0
- ? _l
- : false,
- onclone: opts.onclone,
- ignoreElements: opts.ignoreElements,
- inlineImages: foreignObjectRendering,
- copyStyles: foreignObjectRendering
- }
- context.logger.debug(
- 'Starting document clone with size ' +
- windowBounds.width +
- 'x' +
- windowBounds.height +
- ' scrolled to ' +
- -windowBounds.left +
- ',' +
- -windowBounds.top
- )
- documentCloner = new DocumentCloner(
- context,
- element,
- cloneOptions
- )
- clonedElement = documentCloner.clonedReferenceElement
- if (!clonedElement) {
- return [
- 2 /*return*/,
- Promise.reject(
- 'Unable to find element in cloned iframe'
- )
- ]
- }
- return [
- 4 /*yield*/,
- documentCloner.toIFrame(ownerDocument, windowBounds)
- ]
- case 1:
- container = _u.sent()
- ;(_a =
- isBodyElement(clonedElement) ||
- isHTMLElement(clonedElement)
- ? parseDocumentSize(clonedElement.ownerDocument)
- : parseBounds(context, clonedElement)),
- (width = _a.width),
- (height = _a.height),
- (left = _a.left),
- (top = _a.top)
- backgroundColor = parseBackgroundColor(
- context,
- clonedElement,
- opts.backgroundColor
- )
- renderOptions = {
- canvas: opts.canvas,
- backgroundColor: backgroundColor,
- scale:
- (_o =
- (_m = opts.scale) !== null && _m !== void 0
- ? _m
- : defaultView.devicePixelRatio) !== null &&
- _o !== void 0
- ? _o
- : 1,
- x:
- ((_p = opts.x) !== null && _p !== void 0 ? _p : 0) +
- left,
- y:
- ((_q = opts.y) !== null && _q !== void 0 ? _q : 0) +
- top,
- width:
- (_r = opts.width) !== null && _r !== void 0
- ? _r
- : Math.ceil(width),
- height:
- (_s = opts.height) !== null && _s !== void 0
- ? _s
- : Math.ceil(height)
- }
- if (!foreignObjectRendering) return [3 /*break*/, 3]
- context.logger.debug(
- 'Document cloned, using foreign object rendering'
- )
- renderer = new ForeignObjectRenderer(context, renderOptions)
- return [4 /*yield*/, renderer.render(clonedElement)]
- case 2:
- canvas = _u.sent()
- return [3 /*break*/, 5]
- case 3:
- context.logger.debug(
- 'Document cloned, element located at ' +
- left +
- ',' +
- top +
- ' with size ' +
- width +
- 'x' +
- height +
- ' using computed rendering'
- )
- context.logger.debug('Starting DOM parsing')
- root = parseTree(context, clonedElement)
- if (backgroundColor === root.styles.backgroundColor) {
- root.styles.backgroundColor = COLORS.TRANSPARENT
- }
- context.logger.debug(
- 'Starting renderer for element at ' +
- renderOptions.x +
- ',' +
- renderOptions.y +
- ' with size ' +
- renderOptions.width +
- 'x' +
- renderOptions.height
- )
- renderer = new CanvasRenderer(context, renderOptions)
- return [4 /*yield*/, renderer.render(root)]
- case 4:
- canvas = _u.sent()
- _u.label = 5
- case 5:
- if (
- (_t = opts.removeContainer) !== null && _t !== void 0
- ? _t
- : true
- ) {
- if (!DocumentCloner.destroy(container)) {
- context.logger.error(
- 'Cannot detach cloned iframe as it is not in the DOM anymore'
- )
- }
- }
- context.logger.debug('Finished rendering')
- return [2 /*return*/, canvas]
- }
- })
- })
- }
- var parseBackgroundColor = function parseBackgroundColor(
- context,
- element,
- backgroundColorOverride
- ) {
- var ownerDocument = element.ownerDocument // http://www.w3.org/TR/css3-background/#special-backgrounds
- var documentBackgroundColor = ownerDocument.documentElement
- ? parseColor(
- context,
- getComputedStyle(ownerDocument.documentElement)
- .backgroundColor
- )
- : COLORS.TRANSPARENT
- var bodyBackgroundColor = ownerDocument.body
- ? parseColor(
- context,
- getComputedStyle(ownerDocument.body).backgroundColor
- )
- : COLORS.TRANSPARENT
- var defaultBackgroundColor =
- typeof backgroundColorOverride === 'string'
- ? parseColor(context, backgroundColorOverride)
- : backgroundColorOverride === null
- ? COLORS.TRANSPARENT
- : 0xffffffff
- return element === ownerDocument.documentElement
- ? isTransparent(documentBackgroundColor)
- ? isTransparent(bodyBackgroundColor)
- ? defaultBackgroundColor
- : bodyBackgroundColor
- : documentBackgroundColor
- : defaultBackgroundColor
- }
- var html2canvas$1 = html2canvas
- var Share = defineComponent({
- name: 'share',
- props: { teacherId: { type: Number } },
- data: function data() {
- return { qrCode: '', image: null }
- },
- mounted: function mounted() {
- var _this2 = this
- console.log(state)
- this.qrCode =
- location.origin +
- '/student/#/inviteTeacher?id=' +
- this.teacherId
- this.$nextTick(
- /*#__PURE__*/ _asyncToGenerator(
- /*#__PURE__*/ regeneratorRuntime.mark(function _callee() {
- var container
- return regeneratorRuntime.wrap(function _callee$(
- _context2
- ) {
- while (1) {
- switch ((_context2.prev = _context2.next)) {
- case 0:
- container = document.getElementById(
- 'share-preview-container'
- )
- html2canvas$1(container, {
- allowTaint: true,
- useCORS: true
- }).then(function (canvas) {
- var url = canvas.toDataURL('image/png')
- _this2.image = url
- }) // let image = await toPng(container)
- // image = await toPng(container)
- // this.image = image
- case 2:
- case 'end':
- return _context2.stop()
- }
- }
- },
- _callee)
- })
- )
- )
- },
- methods: {
- shareShow: function shareShow() {
- var _this3 = this
- return _asyncToGenerator(
- /*#__PURE__*/ regeneratorRuntime.mark(function _callee2() {
- var image
- return regeneratorRuntime.wrap(function _callee2$(
- _context3
- ) {
- while (1) {
- switch ((_context3.prev = _context3.next)) {
- case 0:
- image = _this3.image
- if (image) {
- postMessage(
- {
- api: 'shareAchievements',
- content: {
- title: '我在管乐迷使用AI智能云教练练习乐器',
- desc: '管乐迷AI智能云教练帮助我自主练习乐器,真的太好用啦!每天都要坚持练习哦~',
- image: image,
- video: '',
- type: 'image'
- }
- },
- function (res) {
- if (res && res.content) {
- Toast(
- res.content.message ||
- (res.content.status
- ? '分享成功'
- : '分享失败')
- )
- }
- }
- )
- }
- case 2:
- case 'end':
- return _context3.stop()
- }
- }
- },
- _callee2)
- })
- )()
- }
- },
- render: function render() {
- var _this4 = this
- return createVNode(Fragment, null, [
- createVNode(
- 'div',
- {
- class: styles$2.continue,
- onClick: function onClick() {
- _this4.shareShow()
- }
- },
- [createTextVNode('\u5206\u4EAB')]
- ),
- createVNode(
- 'div',
- {
- class: styles$2.shareSection,
- id: 'share-preview-container'
- },
- [
- createVNode('div', { class: styles$2.section }, [
- createVNode(
- Cell,
- { center: true, border: false, style: { padding: 0 } },
- {
- icon: function icon() {
- return createVNode(
- 'img',
- {
- src: state.user.data.heardUrl
- ? state.user.data.heardUrl +
- '?time=' +
- new Date().valueOf()
- : iconTeacher,
- class: styles$2.img,
- crossorigin: 'anonymous'
- },
- null
- )
- },
- title: function title() {
- return createVNode('div', null, [
- createVNode('p', { class: styles$2.name }, [
- state.user.data.username
- ]),
- createVNode('p', { class: styles$2.titleTips }, [
- createTextVNode(
- '\u9177\u4E50\u79C0\u5165\u9A7B\u8001\u5E08'
- )
- ])
- ])
- }
- }
- ),
- createVNode(
- 'p',
- { class: [styles$2.txt, styles$2.teacherName] },
- [
- createVNode('span', null, [state.user.data.username]),
- createTextVNode(
- '\u9080\u8BF7\u60A8\u52A0\u5165\u9177\u4E50\u79C0'
- )
- ]
- ),
- createVNode('p', { class: styles$2.txt }, [
- createTextVNode(
- '\u6765\u4E0E\u6211\u4E00\u8D77\u8E0F\u5165\u97F3\u4E50\u6BBF\u5802\u5427\uFF01'
- )
- ])
- ]),
- createVNode(
- 'div',
- { class: [styles$2.section, styles$2.download] },
- [
- createVNode('div', { class: styles$2.logo }, [
- createVNode('img', { src: logo$1 }, null),
- createVNode('p', null, [
- createTextVNode(
- '\u626B\u7801\u4E0B\u8F7D\u9177\u4E50\u79C0\u5F00\u542F\u6559\u5B66\u4E4B\u65C5'
- )
- ])
- ]),
- createVNode('div', { class: styles$2.qrcode }, [
- createVNode(
- QrcodeVue,
- {
- value: this.qrCode,
- style: { width: '100%', height: '100%' }
- },
- null
- )
- ])
- ]
- )
- ]
- )
- ])
- }
- })
- var label = '_label_v8pn1_1'
- var studentList$1 = '_studentList_v8pn1_13'
- var btnGroup$1 = '_btnGroup_v8pn1_20'
- var styles$1 = {
- label: label,
- studentList: studentList$1,
- btnGroup: btnGroup$1
- }
- function _isSlot$1(s) {
- return (
- typeof s === 'function' ||
- (Object.prototype.toString.call(s) === '[object Object]' &&
- !isVNode(s))
- )
- }
- var StudentInfo = defineComponent({
- name: 'myStudent',
- props: {
- courseId: Number,
- onSubmit: { type: Function, default: function _default(item) {} }
- },
- data: function data() {
- return {
- searchStatus: false,
- openStatus: false,
- subjectList: [],
- list: [],
- dataShow: true, // 判断是否有数据
- loading: false,
- finished: false,
- params: {
- userName: '',
- subjectName: '全部声部',
- subjectId: null,
- page: 1,
- rows: 20
- },
- interfaceIds: [],
- userIdList: []
- }
- },
- mounted: function mounted() {
- var _this5 = this
- return _asyncToGenerator(
- /*#__PURE__*/ regeneratorRuntime.mark(function _callee3() {
- var res
- return regeneratorRuntime.wrap(
- function _callee3$(_context4) {
- while (1) {
- switch ((_context4.prev = _context4.next)) {
- case 0:
- _context4.prev = 0
- _context4.next = 3
- return request.get(
- '/api-teacher/subject/subjectSelect'
- )
- case 3:
- res = _context4.sent
- _this5.subjectList = res.data || []
- _context4.next = 9
- break
- case 7:
- _context4.prev = 7
- _context4.t0 = _context4['catch'](0)
- case 9:
- _context4.next = 11
- return _this5.getExistList()
- case 11:
- _context4.next = 13
- return _this5.getList()
- case 13:
- case 'end':
- return _context4.stop()
- }
- }
- },
- _callee3,
- null,
- [[0, 7]]
- )
- })
- )()
- },
- methods: {
- onSort: function onSort() {
- this.params.page = 1
- this.list = []
- this.dataShow = true // 判断是否有数据
- this.loading = false
- this.finished = false
- this.searchStatus = false
- this.getList()
- },
- onSearch: function onSearch(val) {
- this.params.userName = val
- this.onSort()
- },
- getExistList: function getExistList() {
- var _this6 = this
- return _asyncToGenerator(
- /*#__PURE__*/ regeneratorRuntime.mark(function _callee4() {
- var res, rows, userIdList
- return regeneratorRuntime.wrap(
- function _callee4$(_context5) {
- while (1) {
- switch ((_context5.prev = _context5.next)) {
- case 0:
- _context5.prev = 0
- _context5.next = 3
- return request.post(
- '/api-teacher/courseSchedule/selectStudent',
- {
- data: {
- courseId: _this6.courseId,
- page: 1,
- rows: 20
- }
- }
- )
- case 3:
- res = _context5.sent
- rows = res.data.rows || []
- userIdList = rows.map(function (item) {
- return item.userId
- })
- _this6.interfaceIds =
- _toConsumableArray(userIdList)
- _this6.userIdList = _toConsumableArray(userIdList)
- _context5.next = 12
- break
- case 10:
- _context5.prev = 10
- _context5.t0 = _context5['catch'](0)
- case 12:
- case 'end':
- return _context5.stop()
- }
- }
- },
- _callee4,
- null,
- [[0, 10]]
- )
- })
- )()
- },
- getList: function getList() {
- var _this7 = this
- return _asyncToGenerator(
- /*#__PURE__*/ regeneratorRuntime.mark(function _callee5() {
- var res, result, rows
- return regeneratorRuntime.wrap(
- function _callee5$(_context6) {
- while (1) {
- switch ((_context6.prev = _context6.next)) {
- case 0:
- _context6.prev = 0
- _context6.next = 3
- return request.post(
- '/api-teacher/courseSchedule/selectStudent',
- { data: _this7.params }
- )
- case 3:
- res = _context6.sent
- _this7.loading = false
- result = res.data || {} // 处理重复请求数据
- if (
- !(_this7.list.length > 0 && result.pageNo === 1)
- ) {
- _context6.next = 8
- break
- }
- return _context6.abrupt('return')
- case 8:
- rows = result.rows || []
- rows.forEach(function (n) {
- if (_this7.userIdList.includes(n.userId)) {
- n.checked = true
- } else {
- n.checked = false
- }
- })
- _this7.list = _this7.list.concat(rows || [])
- _this7.finished =
- result.pageNo >= result.totalPage
- _this7.params.page = result.pageNo + 1
- _this7.dataShow = _this7.list.length > 0
- _context6.next = 20
- break
- case 16:
- _context6.prev = 16
- _context6.t0 = _context6['catch'](0)
- _this7.dataShow = false
- _this7.finished = true
- case 20:
- case 'end':
- return _context6.stop()
- }
- }
- },
- _callee5,
- null,
- [[0, 16]]
- )
- })
- )()
- },
- equar: function equar(a, b) {
- // 判断数组的长度
- if (a.length !== b.length) {
- return false
- } else {
- // 循环遍历数组的值进行比较
- for (var _i2 = 0; _i2 < a.length; _i2++) {
- if (a[_i2] !== b[_i2]) {
- return false
- }
- }
- return true
- }
- },
- nextSubmit: function nextSubmit() {
- var _this8 = this
- if (this.userIdList.length <= 0) {
- return Toast('请至少选择一个学员')
- }
- if (this.equar(this.interfaceIds, this.userIdList)) {
- return Toast('您未调整学员')
- }
- var addStudentIds = this.userIdList.filter(function (item) {
- return !_this8.interfaceIds.includes(item) && item
- })
- var removeStudentIds = this.interfaceIds.filter(function (
- item
- ) {
- return !_this8.userIdList.includes(item) && item
- })
- console.log(addStudentIds, removeStudentIds)
- var addStudents = []
- var removeStudents = []
- this.list.forEach(function (item) {
- if (addStudentIds.includes(item.userId)) {
- addStudents.push(item)
- }
- if (removeStudentIds.includes(item.userId)) {
- removeStudents.push(item)
- }
- })
- console.log(addStudents, removeStudents)
- this.onSubmit({
- addStudents: addStudents,
- removeStudents: removeStudents,
- userIdList: this.userIdList
- })
- },
- onCheckbox: function onCheckbox(item) {
- if (!item.checked && this.userIdList.length >= 7) {
- return Toast('学生已达上限')
- }
- item.checked = !item.checked
- var isExist = this.userIdList.includes(item.userId)
- if (item.checked) {
- !isExist && this.userIdList.push(item.userId)
- } else {
- isExist &&
- this.userIdList.splice(
- this.userIdList.indexOf(item.userId),
- 1
- )
- }
- }
- },
- render: function render() {
- var _this9 = this
- var _slot
- return createVNode(Fragment, null, [
- createVNode(
- ColSearch,
- { placeholder: '请输入学员名称', onSearch: this.onSearch },
- {
- left: function left() {
- return createVNode(
- 'div',
- {
- class: styles$1.label,
- onClick: function onClick() {
- _this9.searchStatus = !_this9.searchStatus
- _this9.openStatus = !_this9.openStatus
- }
- },
- [
- _this9.params.subjectName,
- createVNode(
- Icon,
- {
- classPrefix: 'iconfont',
- name: 'down',
- size: 12,
- color: '#333'
- },
- null
- )
- ]
- )
- }
- }
- ),
- createVNode('div', { class: styles$1.studentList }, [
- this.dataShow
- ? createVNode(
- List,
- {
- loading: this.loading,
- 'onUpdate:loading': function onUpdateLoading($event) {
- return (_this9.loading = $event)
- },
- finished: this.finished,
- finishedText: ' ',
- class: ['mb12'],
- immediateCheck: false,
- onLoad: this.getList
- },
- _isSlot$1(
- (_slot = this.list.map(function (item) {
- return createVNode(
- Student,
- {
- item: {
- userName: item.userName,
- subjectName: item.subjectName,
- avatar: item.avatar
- },
- onClick: function onClick() {
- _this9.onCheckbox(item)
- }
- },
- {
- default: function _default() {
- return [
- createVNode(
- Checkbox,
- {
- modelValue: item.checked,
- 'onUpdate:modelValue':
- function onUpdateModelValue($event) {
- return (item.checked = $event)
- },
- name: item.userId,
- onClick: function onClick() {
- _this9.onCheckbox(item)
- }
- },
- null
- )
- ]
- }
- }
- )
- }))
- )
- ? _slot
- : {
- default: function _default() {
- return [_slot]
- }
- }
- )
- : createVNode(
- ColResult,
- {
- btnStatus: false,
- classImgSize: 'SMALL',
- tips: '暂无学员'
- },
- null
- )
- ]),
- createVNode(
- Popup,
- {
- show: this.searchStatus,
- position: 'bottom',
- round: true,
- closeable: true,
- 'safe-area-inset-bottom': true,
- onClose: function onClose() {
- return (_this9.searchStatus = false)
- },
- onClosed: function onClosed() {
- return (_this9.openStatus = false)
- }
- },
- {
- default: function _default() {
- return [
- _this9.openStatus &&
- createVNode(
- OrganSearch,
- {
- subjectList: _this9.subjectList,
- onSort: _this9.onSort,
- isReset: true,
- modelValue: _this9.params.subjectId,
- 'onUpdate:modelValue':
- function onUpdateModelValue($event) {
- return (_this9.params.subjectId = $event)
- },
- subjectName: _this9.params.subjectName,
- 'onUpdate:subjectName':
- function onUpdateSubjectName($event) {
- return (_this9.params.subjectName = $event)
- }
- },
- null
- )
- ]
- }
- }
- ),
- createVNode('div', { class: styles$1.btnGroup }, [
- createVNode(
- Button,
- {
- type: 'primary',
- round: true,
- block: true,
- onClick: this.nextSubmit
- },
- {
- default: function _default() {
- return [createTextVNode('\u4E0B\u4E00\u6B65')]
- }
- }
- )
- ])
- ])
- }
- })
- var confirmTitle = '_confirmTitle_yqlm2_1'
- var timer = '_timer_yqlm2_8'
- var addTitle = '_addTitle_yqlm2_11'
- var calc = '_calc_yqlm2_12'
- var studentList = '_studentList_yqlm2_26'
- var btnGroup = '_btnGroup_yqlm2_30'
- var styles = {
- confirmTitle: confirmTitle,
- timer: timer,
- addTitle: addTitle,
- calc: calc,
- studentList: studentList,
- btnGroup: btnGroup
- }
- var StudentConfirm = defineComponent({
- name: 'studentConfirm',
- props: {
- courseInfo: { type: Object, default: {} },
- studentObject: { type: Object, default: {} },
- onSubmit: { type: Function, default: function _default(item) {} }
- },
- computed: {
- timer: function timer() {
- var item = this.courseInfo
- return (
- dayjs(item.startTime).format('YYYY/MM/DD HH:mm') +
- ' ~ ' +
- dayjs(item.endTime).format('HH:mm')
- )
- },
- addStudents: function addStudents() {
- var addStudents = this.studentObject.addStudents
- return addStudents || []
- },
- removeStudents: function removeStudents() {
- var removeStudents = this.studentObject.removeStudents
- return removeStudents || []
- },
- calcTimer: function calcTimer() {
- var _this$studentObject = this.studentObject,
- addStudents = _this$studentObject.addStudents,
- removeStudents = _this$studentObject.removeStudents
- var _this$courseInfo = this.courseInfo,
- singleCourseTime = _this$courseInfo.singleCourseTime,
- studentCount = _this$courseInfo.studentCount
- var suffix = addStudents.length - removeStudents.length
- console.log(suffix, singleCourseTime, this.courseInfo)
- var type = suffix >= 0 ? 'add' : 'remove' // n * (n -1) * 分钟数 * 课次数
- // 总分钟数
- var allMinutes =
- (studentCount + 1) * studentCount * singleCourseTime //
- var reTime = Math.abs(
- (Math.abs(suffix + studentCount) + 1) *
- Math.abs(suffix + studentCount) *
- singleCourseTime
- )
- return { type: type, mins: Math.abs(allMinutes - reTime) }
- }
- },
- render: function render() {
- var _this10 = this
- return createVNode('div', { class: styles.studentConfirm }, [
- createVNode(
- 'div',
- { class: [styles.confirmTitle, 'van-hairline--bottom'] },
- [
- createVNode('p', null, [
- createTextVNode('\u60A8\u5C06\u4E3A'),
- this.courseInfo.groupName
- ]),
- createVNode('p', { class: styles.timer }, [this.timer])
- ]
- ),
- createVNode('div', { class: styles.studentList }, [
- this.addStudents.length > 0 &&
- createVNode(Fragment, null, [
- createVNode('p', { class: styles.addTitle }, [
- createTextVNode('\u6DFB\u52A0\u5B66\u5458 '),
- createVNode('span', null, [this.addStudents.length]),
- createTextVNode(' \u540D')
- ]),
- this.addStudents.map(function (item) {
- return createVNode(
- Student,
- { border: false, item: item },
- null
- )
- })
- ]),
- this.removeStudents.length > 0 &&
- createVNode(Fragment, null, [
- createVNode('p', { class: styles.addTitle }, [
- createTextVNode('\u79FB\u9664\u5B66\u5458 '),
- createVNode('span', null, [this.removeStudents.length]),
- createTextVNode(' \u540D')
- ]),
- this.removeStudents.map(function (item) {
- return createVNode(
- Student,
- { border: false, item: item },
- null
- )
- })
- ])
- ]),
- createVNode('p', { class: styles.calc }, [
- createTextVNode('\u8C03\u6574\u540E\u5C06'),
- this.calcTimer.type === 'remove' ? '释放' : '冻结',
- ' ',
- createVNode('span', null, [this.calcTimer.mins]),
- createTextVNode(' \u5206\u949F')
- ]),
- createVNode('div', { class: styles.btnGroup }, [
- createVNode(
- Button,
- {
- type: 'primary',
- round: true,
- block: true,
- onClick: function onClick() {
- var userIdList = _this10.studentObject.userIdList
- _this10.onSubmit(userIdList)
- }
- },
- {
- default: function _default() {
- return [createTextVNode('\u786E\u8BA4\u8C03\u6574')]
- }
- }
- )
- ])
- ])
- }
- })
- function _isSlot(s) {
- return (
- typeof s === 'function' ||
- (Object.prototype.toString.call(s) === '[object Object]' &&
- !isVNode(s))
- )
- }
- var getAssetsHomeFile = exports(
- 'getAssetsHomeFile',
- function (fileName) {
- var path = './images/'.concat(fileName)
- var modules = {
- './images/icon_arrow.png': __glob_11_0,
- './images/icon_class_plan.png': __glob_11_1,
- './images/icon_education.png': __glob_11_2,
- './images/icon_education_active.png': __glob_11_3,
- './images/icon_freeze_timer.png': __glob_11_4,
- './images/icon_invite_student.png': __glob_11_5,
- './images/icon_last_timer.png': __glob_11_6,
- './images/icon_message.png': __glob_11_7,
- './images/icon_music_account.png': __glob_11_8,
- './images/icon_name_active.png': __glob_11_9,
- './images/icon_num.png': __glob_11_10,
- './images/icon_timers.png': __glob_11_11,
- './images/icon_tips.png': __glob_11_12,
- './images/logo.png': __glob_11_13,
- './images/paino_bg.png': __glob_11_14,
- './images/room_bg.png': __glob_11_15,
- './images/select_timers.png': __glob_11_16,
- './images/select_timers_bg.png': __glob_11_17,
- './images/share_bg.png': __glob_11_18,
- './images/title_timers.png': __glob_11_19
- }
- return modules[path].default
- }
- )
- var index = exports(
- 'default',
- defineComponent({
- name: 'PianoRoom',
- data: function data() {
- return {
- shareStatus: false,
- teacherId: 0,
- typeStatus: false,
- courseTxt: '所有课程',
- actions: [
- { name: '所有课程' },
- { name: '未开始', status: 'NOT_START' },
- { name: '进行中', status: 'ING' },
- { name: '已完成', status: 'COMPLETE' },
- { name: '已取消', status: 'CANCEL' }
- ],
- remain: { frozenTime: 0, remainTime: 0, studentCount: 0 },
- list: [],
- dataShow: true, // 判断是否有数据
- loading: false,
- finished: false,
- monthTxt: dayjs().format('YYYY年MM月'),
- month: new Date(),
- params: {
- status: '',
- month: dayjs().format('YYYY-MM'),
- page: 1,
- rows: 20
- },
- timeShow: false,
- timeUpdateStatus: false,
- timeUpdateInfo: {},
- timeUpdateTimer: new Date(),
- studentStatus: false,
- studentConfirm: false,
- studentChangeObject: {},
- background: 'transparent',
- setLoading: false,
- startClassTime: '',
- endClassTime: '',
- minDate: new Date()
- }
- },
- mounted: function mounted() {
- var _this11 = this
- return _asyncToGenerator(
- /*#__PURE__*/ regeneratorRuntime.mark(function _callee6() {
- return regeneratorRuntime.wrap(function _callee6$(
- _context7
- ) {
- while (1) {
- switch ((_context7.prev = _context7.next)) {
- case 0:
- _context7.next = 2
- return _this11._init()
- case 2:
- _context7.next = 4
- return _this11.getBaseData()
- case 4:
- _context7.next = 6
- return _this11.getList()
- case 6:
- useEventListener(
- document,
- 'scroll',
- function (evt) {
- var _useWindowScroll = useWindowScroll(),
- y = _useWindowScroll.y
- if (y.value > 45) {
- _this11.background = '#fff'
- } else {
- _this11.background = 'transparent'
- }
- }
- )
- case 7:
- case 'end':
- return _context7.stop()
- }
- }
- },
- _callee6)
- })
- )()
- },
- methods: {
- _init: function _init() {
- var _this12 = this
- return _asyncToGenerator(
- /*#__PURE__*/ regeneratorRuntime.mark(function _callee7() {
- var res,
- _ref2,
- frozenTime,
- remainTime,
- _studentCount,
- teacherId
- return regeneratorRuntime.wrap(
- function _callee7$(_context8) {
- while (1) {
- switch ((_context8.prev = _context8.next)) {
- case 0:
- _context8.prev = 0
- _context8.next = 3
- return request.get(
- '/api-teacher/courseSchedule/selectRemainTime'
- )
- case 3:
- res = _context8.sent // console.log(res)
- ;(_ref2 = res.data || {}),
- (frozenTime = _ref2.frozenTime),
- (remainTime = _ref2.remainTime),
- (_studentCount = _ref2.studentCount),
- (teacherId = _ref2.teacherId)
- _this12.remain = {
- frozenTime: frozenTime || 0,
- remainTime: remainTime || 0,
- studentCount: _studentCount || 0
- }
- _this12.teacherId = teacherId
- _context8.next = 11
- break
- case 9:
- _context8.prev = 9
- _context8.t0 = _context8['catch'](0)
- case 11:
- case 'end':
- return _context8.stop()
- }
- }
- },
- _callee7,
- null,
- [[0, 9]]
- )
- })
- )()
- },
- getBaseData: function getBaseData() {
- var _this13 = this
- return _asyncToGenerator(
- /*#__PURE__*/ regeneratorRuntime.mark(function _callee8() {
- var result, tempResult, _i3, len
- return regeneratorRuntime.wrap(
- function _callee8$(_context9) {
- while (1) {
- switch ((_context9.prev = _context9.next)) {
- case 0:
- _context9.prev = 0
- _context9.next = 3
- return request.get(
- '/api-teacher/sysConfig/queryByParamNameList',
- {
- params: {
- paramNames:
- 'course_start_setting,course_end_setting'
- }
- }
- )
- case 3:
- result = _context9.sent
- console.log(result)
- tempResult = result.data
- for (
- _i3 = 0, len = tempResult.length;
- _i3 < len;
- _i3++
- ) {
- if (
- tempResult[_i3].paramName ===
- 'course_start_setting'
- ) {
- _this13.startClassTime = tempResult[_i3]
- .paramValue
- ? tempResult[_i3].paramValue.split(':')
- : []
- }
- if (
- tempResult[_i3].paramName ===
- 'course_end_setting'
- ) {
- _this13.endClassTime = tempResult[_i3]
- .paramValue
- ? tempResult[_i3].paramValue.split(':')
- : []
- }
- }
- console.log(
- _this13.startClassTime,
- _this13.endClassTime
- )
- _context9.next = 12
- break
- case 10:
- _context9.prev = 10
- _context9.t0 = _context9['catch'](0)
- case 12:
- case 'end':
- return _context9.stop()
- }
- }
- },
- _callee8,
- null,
- [[0, 10]]
- )
- })
- )()
- },
- onSearch: function onSearch() {
- this.dataShow = true
- this.loading = false
- this.finished = false
- this.list = []
- this.params.page = 1
- this.getList()
- },
- onSelect: function onSelect(item) {
- this.courseTxt = item.name
- this.params.status = item.status || ''
- this._init()
- this.onSearch()
- },
- getList: function getList() {
- var _this14 = this
- return _asyncToGenerator(
- /*#__PURE__*/ regeneratorRuntime.mark(function _callee9() {
- var res, result
- return regeneratorRuntime.wrap(
- function _callee9$(_context10) {
- while (1) {
- switch ((_context10.prev = _context10.next)) {
- case 0:
- _context10.prev = 0
- if (!_this14.setLoading) {
- _context10.next = 3
- break
- }
- return _context10.abrupt('return')
- case 3:
- _this14.setLoading = true
- _context10.next = 6
- return request.post(
- '/api-teacher/courseSchedule/selectCourseList',
- { data: _this14.params }
- )
- case 6:
- res = _context10.sent
- _this14.setLoading = false
- _this14.loading = false
- result = res.data || {} // 处理重复请求数据
- if (
- !(
- _this14.list.length > 0 &&
- result.pageNo === 1
- )
- ) {
- _context10.next = 12
- break
- }
- return _context10.abrupt('return')
- case 12:
- _this14.list = _this14.list.concat(
- result.rows || []
- )
- _this14.finished =
- result.pageNo >= result.totalPage
- _this14.params.page = result.pageNo + 1
- _this14.dataShow = _this14.list.length > 0
- _context10.next = 22
- break
- case 18:
- _context10.prev = 18
- _context10.t0 = _context10['catch'](0)
- _this14.dataShow = false
- _this14.finished = true
- case 22:
- case 'end':
- return _context10.stop()
- }
- }
- },
- _callee9,
- null,
- [[0, 18]]
- )
- })
- )()
- },
- onCourseDelete: function onCourseDelete(item) {
- var _this15 = this
- return _asyncToGenerator(
- /*#__PURE__*/ regeneratorRuntime.mark(function _callee11() {
- return regeneratorRuntime.wrap(function _callee11$(
- _context12
- ) {
- while (1) {
- switch ((_context12.prev = _context12.next)) {
- case 0:
- try {
- Dialog.confirm({
- title: '提示',
- message: '确定删除该课程吗?',
- confirmButtonColor: 'var(--van-primary)'
- }).then(
- /*#__PURE__*/ _asyncToGenerator(
- /*#__PURE__*/ regeneratorRuntime.mark(
- function _callee10() {
- return regeneratorRuntime.wrap(
- function _callee10$(_context11) {
- while (1) {
- switch (
- (_context11.prev =
- _context11.next)
- ) {
- case 0:
- _context11.next = 2
- return request.post(
- '/api-teacher/courseSchedule/deleteCourse',
- {
- data: {
- courseId: item.courseId
- }
- }
- )
- case 2:
- console.log('删除成功')
- Toast('课程删除成功')
- _this15._init()
- _this15.onSearch()
- case 6:
- case 'end':
- return _context11.stop()
- }
- }
- },
- _callee10
- )
- }
- )
- )
- )
- } catch (_unused7) {}
- case 1:
- case 'end':
- return _context12.stop()
- }
- }
- },
- _callee11)
- })
- )()
- },
- onTimeUpdateChange: function onTimeUpdateChange(item) {
- var _this16 = this
- try {
- Dialog.confirm({
- title: '提示',
- message: '确定调整该课程吗?',
- confirmButtonColor: 'var(--van-primary)'
- }).then(
- /*#__PURE__*/ _asyncToGenerator(
- /*#__PURE__*/ regeneratorRuntime.mark(
- function _callee12() {
- var _this16$timeUpdateInf,
- courseId,
- singleCourseTime,
- startTime,
- endTime
- return regeneratorRuntime.wrap(function _callee12$(
- _context13
- ) {
- while (1) {
- switch ((_context13.prev = _context13.next)) {
- case 0:
- ;(_this16$timeUpdateInf =
- _this16.timeUpdateInfo),
- (courseId =
- _this16$timeUpdateInf.courseId),
- (singleCourseTime =
- _this16$timeUpdateInf.singleCourseTime)
- startTime = dayjs(item).format(
- 'YYYY-MM-DD HH:mm:ss'
- )
- endTime = dayjs(item)
- .add(singleCourseTime, 'minute')
- .format('YYYY-MM-DD HH:mm:ss')
- _context13.next = 5
- return request.post(
- '/api-teacher/courseSchedule/updateCourseTime',
- {
- data: {
- courseId: courseId,
- startTime: startTime,
- endTime: endTime
- }
- }
- )
- case 5:
- _this16.timeUpdateStatus = false
- Toast('课程调整成功')
- _this16.onSearch()
- case 8:
- case 'end':
- return _context13.stop()
- }
- }
- },
- _callee12)
- }
- )
- )
- )
- } catch (_unused8) {}
- },
- onStudentChange: function onStudentChange(item) {
- var _this17 = this
- return _asyncToGenerator(
- /*#__PURE__*/ regeneratorRuntime.mark(function _callee14() {
- var courseId
- return regeneratorRuntime.wrap(
- function _callee14$(_context15) {
- while (1) {
- switch ((_context15.prev = _context15.next)) {
- case 0:
- _context15.prev = 0
- courseId = _this17.timeUpdateInfo.courseId
- _context15.next = 4
- return request.post(
- '/api-teacher/courseSchedule/updateCourseStudent',
- {
- data: {
- studentIds: item,
- courseId: courseId
- }
- }
- )
- case 4:
- _this17.studentConfirm = false
- Toast('学生调整成功')
- setTimeout(
- /*#__PURE__*/ _asyncToGenerator(
- /*#__PURE__*/ regeneratorRuntime.mark(
- function _callee13() {
- return regeneratorRuntime.wrap(
- function _callee13$(_context14) {
- while (1) {
- switch (
- (_context14.prev =
- _context14.next)
- ) {
- case 0:
- _context14.next = 2
- return _this17._init()
- case 2:
- _this17.onSearch()
- case 3:
- case 'end':
- return _context14.stop()
- }
- }
- },
- _callee13
- )
- }
- )
- ),
- 1000
- )
- _context15.next = 11
- break
- case 9:
- _context15.prev = 9
- _context15.t0 = _context15['catch'](0)
- case 11:
- case 'end':
- return _context15.stop()
- }
- }
- },
- _callee14,
- null,
- [[0, 9]]
- )
- })
- )()
- },
- onTeacherAuth: function onTeacherAuth(callBack) {
- // 是否达人认证
- // 老师入驻状态 0、未申请 UNPAALY、未申请 DOING、审核中 PASS、通过 UNPASS、不通过,可用值:UNPAALY,DOING,PASS,UNPASS
- var data = state.user.data
- if (data.entryStatus === 'PASS') {
- callBack && callBack()
- } else if (data.entryStatus === 'DOING') {
- Toast('认证审核中,请稍后再试')
- } else {
- this.$router.push('/teacherCert')
- }
- },
- filterDate: function filterDate(type, options) {
- var _this18 = this
- var value = 0
- if (this.$refs.datetime) {
- var _picker$getValues$
- var picker = this.$refs.datetime.getPicker()
- value =
- ((_picker$getValues$ = picker.getValues()[3]) === null ||
- _picker$getValues$ === void 0
- ? void 0
- : _picker$getValues$.split('时')[0]) || 0
- }
- if (type == 'hour') {
- return options.filter(function (option) {
- return (
- Number(_this18.startClassTime[0]) <= Number(option) &&
- Number(_this18.endClassTime[0]) >= Number(option)
- )
- })
- }
- if (type === 'minute') {
- return options.filter(function (option) {
- return (
- (Number(_this18.startClassTime[1]) <= Number(option) &&
- Number(_this18.endClassTime[1]) >= Number(option)) ||
- value != Number(_this18.endClassTime[0])
- )
- })
- }
- return options
- }
- },
- render: function render() {
- var _this19 = this
- var _slot
- return createVNode(Fragment, null, [
- createVNode('div', { class: styles$3.roomHeader }, [
- createVNode(
- ColHeader,
- {
- background: this.background,
- rightText: '课程记录',
- onClickRight: function onClickRight() {
- _this19.$router.push('/courseRecord')
- },
- border: false
- },
- null
- ),
- createVNode(
- Row,
- { class: styles$3.countTimer },
- {
- default: function _default() {
- return [
- createVNode(
- Col,
- { span: 9 },
- {
- default: function _default() {
- return [
- createVNode(
- 'p',
- { class: styles$3.timer },
- [
- _this19.remain.remainTime,
- createVNode('span', null, [
- createTextVNode('\u5206\u949F')
- ])
- ]
- ),
- createVNode(
- 'p',
- { class: styles$3.title },
- [
- createVNode(
- 'img',
- {
- src: getAssetsHomeFile(
- 'icon_last_timer.png'
- )
- },
- null
- ),
- createVNode('span', null, [
- createTextVNode(
- '\u7434\u623F\u5269\u4F59\u65F6\u957F'
- )
- ])
- ]
- )
- ]
- }
- }
- ),
- createVNode(
- Col,
- { span: 9 },
- {
- default: function _default() {
- return [
- createVNode(
- 'p',
- { class: styles$3.timer },
- [
- _this19.remain.frozenTime,
- createVNode('span', null, [
- createTextVNode('\u5206\u949F')
- ])
- ]
- ),
- createVNode(
- 'p',
- { class: styles$3.title },
- [
- createVNode(
- 'img',
- {
- src: getAssetsHomeFile(
- 'icon_freeze_timer.png'
- )
- },
- null
- ),
- createVNode('span', null, [
- createTextVNode(
- '\u51BB\u7ED3\u65F6\u957F'
- )
- ])
- ]
- )
- ]
- }
- }
- ),
- createVNode(
- Col,
- { span: 6 },
- {
- default: function _default() {
- return [
- createVNode(
- Button,
- {
- type: 'primary',
- round: true,
- size: 'small',
- class: styles$3.chargeTimer,
- onClick: function onClick() {
- _this19.onTeacherAuth(function () {
- _this19.$router.push({
- path: '/accountRechargeTimer'
- })
- })
- }
- },
- {
- default: function _default() {
- return [
- createTextVNode(
- '\u65F6\u957F\u5145\u503C'
- ),
- createVNode(
- 'img',
- {
- src: getAssetsHomeFile(
- 'icon_arrow.png'
- )
- },
- null
- )
- ]
- }
- }
- )
- ]
- }
- }
- )
- ]
- }
- }
- ),
- createVNode(
- CellGroup,
- { class: styles$3.studentList, border: false },
- {
- default: function _default() {
- return [
- createVNode(
- Cell,
- {
- title: '\u6211\u7684\u5B66\u5458 '.concat(
- _this19.remain.studentCount,
- ' \u4EBA'
- ),
- titleClass: styles$3.studentCount,
- isLink: true,
- to: '/myStudent',
- border: false
- },
- null
- ),
- createVNode(
- Cell,
- { valueClass: styles$3.btnGroupInvite },
- {
- default: function _default() {
- return [
- createVNode(
- Button,
- {
- color: '#E0F7F3',
- round: true,
- block: true,
- onClick: function onClick() {
- _this19.onTeacherAuth(function () {
- _this19.shareStatus = true
- })
- }
- },
- {
- default: function _default() {
- return [
- createVNode(
- 'img',
- {
- src: getAssetsHomeFile(
- 'icon_invite_student.png'
- )
- },
- null
- ),
- createTextVNode(
- '\u9080\u8BF7\u5B66\u5458'
- )
- ]
- }
- }
- ),
- createVNode(
- Button,
- {
- color: '#E0F7F3',
- round: true,
- block: true,
- onClick: function onClick() {
- _this19.onTeacherAuth(function () {
- _this19.$router.push(
- '/classArrangement'
- )
- })
- }
- },
- {
- default: function _default() {
- return [
- createVNode(
- 'img',
- {
- src: getAssetsHomeFile(
- 'icon_class_plan.png'
- )
- },
- null
- ),
- createTextVNode('\u6392\u8BFE')
- ]
- }
- }
- )
- ]
- }
- }
- )
- ]
- }
- }
- )
- ]),
- createVNode('div', { class: styles$3.searchList }, [
- createVNode(
- 'div',
- {
- class: styles$3.dataItem,
- onClick: function onClick() {
- _this19.timeShow = true
- }
- },
- [
- this.monthTxt,
- createVNode(
- Icon,
- {
- classPrefix: 'iconfont',
- name: 'down',
- size: 8,
- style: { marginLeft: '4px' },
- color: '#CCCCCC'
- },
- null
- )
- ]
- ),
- createVNode(
- 'div',
- {
- class: styles$3.dataItem,
- onClick: function onClick() {
- _this19.typeStatus = true
- }
- },
- [
- this.courseTxt,
- createVNode(
- Icon,
- {
- classPrefix: 'iconfont',
- name: 'down',
- size: 8,
- style: { marginLeft: '4px' },
- color: '#CCCCCC'
- },
- null
- )
- ]
- )
- ]),
- this.dataShow
- ? createVNode(
- List,
- {
- loading: this.loading,
- 'onUpdate:loading': function onUpdateLoading($event) {
- return (_this19.loading = $event)
- },
- finished: this.finished,
- finishedText: ' ',
- class: [styles$3.liveList, 'mb12'],
- immediateCheck: false,
- onLoad: this.getList
- },
- _isSlot(
- (_slot = this.list.map(function (item) {
- return createVNode(
- Course,
- {
- item: item,
- operation:
- item.status === 'NOT_START' ? true : false,
- onCourseDelete: _this19.onCourseDelete,
- onStudentAdjust: function onStudentAdjust(
- item
- ) {
- console.log(item)
- _this19.timeUpdateInfo = item
- _this19.studentStatus = true
- },
- onTimeAdjust: function onTimeAdjust(item) {
- _this19.timeUpdateInfo = item
- _this19.timeUpdateTimer = dayjs(
- item.startTime
- ).toDate()
- _this19.timeUpdateStatus = true
- }
- },
- null
- )
- }))
- )
- ? _slot
- : {
- default: function _default() {
- return [_slot]
- }
- }
- )
- : createVNode(
- ColResult,
- {
- btnStatus: false,
- classImgSize: 'SMALL',
- tips: '暂无课程'
- },
- null
- ),
- createVNode(
- Popup,
- {
- position: 'bottom',
- show: this.timeShow,
- 'onUpdate:show': function onUpdateShow($event) {
- return (_this19.timeShow = $event)
- },
- round: true
- },
- {
- default: function _default() {
- return [
- createVNode('div', { class: styles$3.picker }, [
- createVNode(
- DatetimePicker,
- {
- modelValue: _this19.month,
- 'onUpdate:modelValue':
- function onUpdateModelValue($event) {
- return (_this19.month = $event)
- },
- type: 'year-month',
- formatter: formatterDate,
- onConfirm: function onConfirm(item) {
- _this19.monthTxt =
- dayjs(item).format('YYYY年MM月')
- _this19.params.month =
- dayjs(item).format('YYYY-MM')
- _this19.timeShow = false
- _this19.onSearch()
- },
- onCancel: function onCancel() {
- return (_this19.timeShow = false)
- }
- },
- null
- )
- ])
- ]
- }
- }
- ),
- createVNode(
- Popup,
- {
- position: 'bottom',
- show: this.timeUpdateStatus,
- 'onUpdate:show': function onUpdateShow($event) {
- return (_this19.timeUpdateStatus = $event)
- },
- round: true
- },
- {
- default: function _default() {
- return [
- createVNode('div', { class: styles$3.picker }, [
- createVNode(
- DatetimePicker,
- {
- modelValue: _this19.timeUpdateTimer,
- 'onUpdate:modelValue':
- function onUpdateModelValue($event) {
- return (_this19.timeUpdateTimer = $event)
- },
- type: 'datetime',
- minDate: _this19.minDate,
- formatter: formatterDate,
- filter: _this19.filterDate,
- ref: 'datetime',
- onConfirm: function onConfirm(item) {
- _this19.onTimeUpdateChange(item)
- },
- onCancel: function onCancel() {
- return (_this19.timeUpdateStatus = false)
- }
- },
- null
- )
- ])
- ]
- }
- }
- ),
- createVNode(
- ActionSheet,
- {
- show: this.typeStatus,
- 'onUpdate:show': function onUpdateShow($event) {
- return (_this19.typeStatus = $event)
- },
- actions: this.actions,
- closeOnClickAction: true,
- cancelText: '取消',
- onSelect: this.onSelect,
- onCancel: function onCancel() {
- _this19.typeStatus = false
- }
- },
- null
- ),
- createVNode(
- Popup,
- {
- show: this.shareStatus,
- 'onUpdate:show': function onUpdateShow($event) {
- return (_this19.shareStatus = $event)
- },
- round: true
- },
- {
- default: function _default() {
- return [
- createVNode(
- Share,
- { teacherId: _this19.teacherId },
- null
- )
- ]
- }
- }
- ),
- createVNode(
- Popup,
- {
- show: this.studentStatus,
- 'onUpdate:show': function onUpdateShow($event) {
- return (_this19.studentStatus = $event)
- },
- position: 'bottom',
- round: true
- },
- {
- default: function _default() {
- return [
- _this19.studentStatus &&
- createVNode(
- StudentInfo,
- {
- courseId: _this19.timeUpdateInfo.courseId,
- onSubmit: function onSubmit(item) {
- _this19.studentChangeObject = item
- _this19.studentStatus = false
- _this19.studentConfirm = true
- }
- },
- null
- )
- ]
- }
- }
- ),
- createVNode(
- Popup,
- {
- show: this.studentConfirm,
- 'onUpdate:show': function onUpdateShow($event) {
- return (_this19.studentConfirm = $event)
- },
- position: 'bottom',
- round: true,
- closeable: true
- },
- {
- default: function _default() {
- return [
- createVNode(
- StudentConfirm,
- {
- courseInfo: _this19.timeUpdateInfo,
- studentObject: _this19.studentChangeObject,
- onSubmit: (function () {
- var _onSubmit = _asyncToGenerator(
- /*#__PURE__*/ regeneratorRuntime.mark(
- function _callee15(item) {
- return regeneratorRuntime.wrap(
- function _callee15$(_context16) {
- while (1) {
- switch (
- (_context16.prev =
- _context16.next)
- ) {
- case 0:
- _context16.next = 2
- return _this19.onStudentChange(
- item
- )
- case 2:
- case 'end':
- return _context16.stop()
- }
- }
- },
- _callee15
- )
- }
- )
- )
- function onSubmit(_x) {
- return _onSubmit.apply(this, arguments)
- }
- return onSubmit
- })()
- },
- null
- )
- ]
- }
- }
- )
- ])
- }
- })
- )
- }
- }
- }
- )
- })()
|