{"version":3,"file":"./build/blocks/index.min.js","mappings":"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gC,YACd38B,KAAKo7B,aAAa,eACA,MAATV,GACT16B,KAAK26B,SAASkC,kBACZ,gDAEF78B,KAAKo7B,aAAa,iBAClBp7B,KAAK26B,SAASmC,iBACd98B,KAAKs7B,UACLt7B,KAAK26B,SAASoC,sBAAsBrC,KAEpC16B,KAAKo7B,aAAa,iBAClBp7B,KAAK26B,SAASmC,mBAIlB/F,cAAa,WACX,IAAI2D,EAAO16B,KAAKm7B,OAEZuB,GAAQhC,IACV16B,KAAKo7B,aAAa,sBAClBp7B,KAAKs7B,WACa,MAATZ,GACT16B,KAAK26B,SAASqC,qBAAoB,GAClCh9B,KAAK26B,SAASsC,uBACdj9B,KAAKs7B,UACLt7B,KAAKo7B,aAAa,wBACA,MAATV,GACT16B,KAAKo7B,aAAa,wBAClBp7B,KAAKs7B,WACa,MAATZ,GACT16B,KAAK26B,SAASqC,qBAAoB,GAClCh9B,KAAK26B,SAASsC,uBACdj9B,KAAKs7B,UACLt7B,KAAK26B,SAASgC,YACd38B,KAAKo7B,aAAa,eACA,MAATV,GAAyB,MAATA,GAAyB,MAATA,GACzC16B,KAAK26B,SAASkC,kBACZnC,EAAO,oDAET16B,KAAKs7B,UACLt7B,KAAK26B,SAASoC,sBAAsBrC,KAEpC16B,KAAKs7B,UACLt7B,KAAK26B,SAASoC,sBAAsBrC,KAIxCwC,mBAAkB,WAChB,IAAIxC,EAAO16B,KAAKm7B,OAEZuB,GAAQhC,GACV16B,KAAKs7B,UAEa,MAATZ,GACT16B,KAAK26B,SAASqC,qBAAoB,GAClCh9B,KAAK26B,SAASsC,uBACdj9B,KAAKs7B,UACLt7B,KAAKo7B,aAAa,wBACA,MAATV,GACT16B,KAAKs7B,UACLt7B,KAAKo7B,aAAa,yBACA,MAATV,GACT16B,KAAK26B,SAASqC,qBAAoB,GAClCh9B,KAAK26B,SAASsC,uBACdj9B,KAAKs7B,UACLt7B,KAAK26B,SAASgC,YACd38B,KAAKo7B,aAAa,gBAElBp7B,KAAK26B,SAASqC,qBAAoB,GAClCh9B,KAAK26B,SAASsC,uBACdj9B,KAAKo7B,aAAa,iBAClBp7B,KAAK26B,SAASmC,iBACd98B,KAAKs7B,UACLt7B,KAAK26B,SAASoC,sBAAsBrC,KAIxCyC,qBAAoB,WAClB,IAAIzC,EAAO16B,KAAKm7B,OAEZuB,GAAQhC,GACV16B,KAAKs7B,UACa,MAATZ,GACT16B,KAAKo7B,aAAa,8BAClBp7B,KAAK26B,SAASqC,qBAAoB,GAClCh9B,KAAKs7B,WACa,MAATZ,GACT16B,KAAKo7B,aAAa,8BAClBp7B,KAAK26B,SAASqC,qBAAoB,GAClCh9B,KAAKs7B,WACa,MAATZ,GACT16B,KAAK26B,SAASqC,qBAAoB,GAClCh9B,KAAK26B,SAASsC,uBACdj9B,KAAKs7B,UACLt7B,KAAK26B,SAASgC,YACd38B,KAAKo7B,aAAa,gBAElBp7B,KAAKo7B,aAAa,0BAClBp7B,KAAK26B,SAASqC,qBAAoB,GAClCh9B,KAAKs7B,UACLt7B,KAAK26B,SAASyC,uBAAuB1C,KAIzC2C,2BAA0B,WACxB,IAAI3C,EAAO16B,KAAKs7B,UAEH,MAATZ,GACF16B,KAAK26B,SAASsC,uBACdj9B,KAAKo7B,aAAa,8BACA,MAATV,EACT16B,KAAK26B,SAASyC,uBAAuBp9B,KAAK27B,kBAAoB,KAE9D37B,KAAK26B,SAASyC,uBAAuB1C,IAIzC4C,2BAA0B,WACxB,IAAI5C,EAAO16B,KAAKs7B,UAEH,MAATZ,GACF16B,KAAK26B,SAASsC,uBACdj9B,KAAKo7B,aAAa,8BACA,MAATV,EACT16B,KAAK26B,SAASyC,uBAAuBp9B,KAAK27B,kBAAoB,KAE9D37B,KAAK26B,SAASyC,uBAAuB1C,IAIzC6C,uBAAsB,WACpB,IAAI7C,EAAO16B,KAAKm7B,OAEZuB,GAAQhC,IACV16B,KAAK26B,SAASsC,uBACdj9B,KAAKs7B,UACLt7B,KAAKo7B,aAAa,wBACA,MAATV,GACT16B,KAAK26B,SAASsC,uBACdj9B,KAAKs7B,UACLt7B,KAAKo7B,aAAa,wBACA,MAATV,GACT16B,KAAKs7B,UACLt7B,KAAK26B,SAASyC,uBAAuBp9B,KAAK27B,kBAAoB,MAC5C,MAATjB,GACT16B,KAAK26B,SAASsC,uBACdj9B,KAAKs7B,UACLt7B,KAAK26B,SAASgC,YACd38B,KAAKo7B,aAAa,gBAElBp7B,KAAKs7B,UACLt7B,KAAK26B,SAASyC,uBAAuB1C,KAIzC8C,0BAAyB,WACvB,IAAI9C,EAAO16B,KAAKm7B,OAEZuB,GAAQhC,IACV16B,KAAKs7B,UACLt7B,KAAKo7B,aAAa,wBACA,MAATV,GACT16B,KAAKs7B,UACLt7B,KAAKo7B,aAAa,wBACA,MAATV,GACT16B,KAAKs7B,UACLt7B,KAAK26B,SAASgC,YACd38B,KAAKo7B,aAAa,eAElBp7B,KAAKo7B,aAAa,wBAItBqC,oBAAmB,WAGJ,MAFFz9B,KAAKm7B,QAGdn7B,KAAKs7B,UACLt7B,KAAK26B,SAAS+C,uBACd19B,KAAK26B,SAASgC,YACd38B,KAAKo7B,aAAa,eAElBp7B,KAAKo7B,aAAa,wBAItBuC,WAAU,WACR,IAAIjD,EAAO16B,KAAKs7B,WAEH,MAATZ,GAAyB,MAATA,GAAgBmB,GAAQnB,MAC1C16B,KAAKo7B,aAAa,WAClBp7B,KAAKg7B,cAAgB,GACrBh7B,KAAK26B,SAASiD,cACd59B,KAAK+7B,gBAAgBrB,MAxbzB16B,KAAK69B,QA4bT,OAzbE,YAAAA,MAAA,WACE79B,KAAKo7B,aAAa,cAClBp7B,KAAK+6B,MAAQ,GAEb/6B,KAAKwD,MAAQ,EACbxD,KAAK66B,KAAO,EACZ76B,KAAK86B,OAAS,EAEd96B,KAAK26B,SAASkD,SAGhB,YAAAzC,aAAA,SAAazkB,GACX3W,KAAK2W,MAAQA,GAGf,YAAAmnB,SAAA,SAAS/C,GACP/6B,KAAK69B,QACL79B,KAAK+9B,aAAahD,GAClB/6B,KAAKg+B,eAGP,YAAAD,aAAA,SAAahD,GAGX,IAFA/6B,KAAK+6B,OD/BT,SAAgCA,GAC9B,OAAOA,EAAMv7B,QAAQi7B,GAAM,MC8BXwD,CAAgBlD,GAEvB/6B,KAAKwD,MAAQxD,KAAK+6B,MAAMl8B,QAAQ,CACrC,IAAIq/B,EAAUl+B,KAAKi7B,OAAOj7B,KAAK2W,OAC/B,QAAgBrB,IAAZ4oB,EAGF,MAAM,IAAI99B,MAAM,mBAAmBJ,KAAK2W,OAFxCunB,EAAQ18B,KAAKxB,QAOnB,YAAAg+B,YAAA,WACEh+B,KAAKm+B,aAGP,YAAAA,UAAA,WACqB,SAAfn+B,KAAK2W,QACP3W,KAAK26B,SAASc,aACdz7B,KAAKo7B,aAAa,gBAItB,YAAAD,KAAA,WACE,OAAOn7B,KAAK+6B,MAAMkB,OAAOj8B,KAAKwD,QAGhC,YAAA83B,QAAA,WACE,IAAIZ,EAAO16B,KAAKm7B,OAWhB,OATAn7B,KAAKwD,QAEQ,OAATk3B,GACF16B,KAAK66B,OACL76B,KAAK86B,OAAS,GAEd96B,KAAK86B,SAGAJ,GAGT,YAAAiB,eAAA,WACE,IAAIyC,EAAWp+B,KAAK+6B,MAAM93B,QAAQ,IAAKjD,KAAKwD,OAC5C,IAAkB,IAAd46B,EAAJ,CAGA,IAAIC,EAASr+B,KAAK+6B,MAAMj3B,MAAM9D,KAAKwD,MAAO46B,GACtCE,EAAQt+B,KAAK46B,aAAa19B,MAAMmhC,GACpC,GAAIC,EAAO,CAGT,IAFA,IAAIC,EAAQF,EAAOx/B,OAEZ0/B,GACLv+B,KAAKs7B,UACLiD,IAKF,OAFAv+B,KAAKs7B,UAEEgD,KAIX,YAAAjD,aAAA,WACEr7B,KAAK26B,SAASiB,WAGR,YAAAG,gBAAR,SAAwBrB,GACtB16B,KAAKg7B,eAAiBN,EACtB16B,KAAK26B,SAASoB,gBAAgBrB,IA8VlC,EA3cA,GCQA,cAQE,WACEE,EACQ18B,QAAA,IAAAA,IAAAA,EAAA,SAAAA,QAAAA,EATF,KAAAsgC,MAAsB,KACtB,KAAAC,UAAY,EACZ,KAAAC,YAAc,EAEd,KAAAC,OAAkB,GAOxB3+B,KAAK4+B,UAAY,IAAIC,GAAiB7+B,KAAM46B,GAC5C56B,KAAK8+B,uBAAoBxpB,EAuK7B,OApKE,YAAAwoB,SAAA,SAAS/C,GAGP,OAFA/6B,KAAK2+B,OAAS,GACd3+B,KAAK4+B,UAAUd,SAAS/C,GACjB/6B,KAAK2+B,QAGd,YAAAZ,aAAA,SAAahD,GAGX,OAFA/6B,KAAK2+B,OAAS,GACd3+B,KAAK4+B,UAAUb,aAAahD,GACrB/6B,KAAK2+B,QAGd,YAAAX,YAAA,WAGE,OAFAh+B,KAAK2+B,OAAS,GACd3+B,KAAK4+B,UAAUZ,cACRh+B,KAAK2+B,OAAO,IAGrB,YAAAd,MAAA,WACE79B,KAAKw+B,MAAQ,KACbx+B,KAAKy+B,UAAY,EACjBz+B,KAAK0+B,YAAc,GASrB,YAAAK,QAAA,WACE,IAAMP,EAAQx+B,KAAKw+B,MACnB,GAAc,OAAVA,EACF,MAAM,IAAIp+B,MAAM,+BAElB,GAAyB,IAArBsZ,UAAU7a,OACZ,OAAO2/B,EAET,IAAK,IAAI5/B,EAAI,EAAGA,EAAI8a,UAAU7a,OAAQD,IACpC,GAAI4/B,EAAMxjC,OAAS0e,UAAU9a,GAC3B,OAAO4/B,EAGX,MAAM,IAAIp+B,MAAM,+BAA+Bo+B,EAAMxjC,OAGvD,YAAA0I,KAAA,SAAK86B,GACHx+B,KAAKw+B,MAAQA,EACbx+B,KAAK2+B,OAAOj7B,KAAK86B,IAGnB,YAAAQ,iBAAA,WACE,OAAOh/B,KAAK8+B,mBAGd,YAAAG,WAAA,WACMj/B,KAAK9B,QAAQghC,MACfl/B,KAAK++B,UAAUG,IAAM,CACnBr8B,MAAO,CACLg4B,KAAM76B,KAAKy+B,UACX3D,OAAQ96B,KAAK0+B,aAEf57B,IAAK,CACH+3B,KAAM76B,KAAK4+B,UAAU/D,KACrBC,OAAQ96B,KAAK4+B,UAAU9D,UAI7B96B,KAAKy+B,UAAYz+B,KAAK4+B,UAAU/D,KAChC76B,KAAK0+B,YAAc1+B,KAAK4+B,UAAU9D,QAKpC,YAAAU,UAAA,WACEx7B,KAAK0D,KAAK,CACR1I,KAAM,QACNsjC,MAAO,MAIX,YAAA5C,aAAA,SAAahB,GACX16B,KAAK++B,QAAQ,SAAiBT,OAAS5D,GAGzC,YAAAe,WAAA,WACEz7B,KAAKi/B,cAKP,YAAA/C,aAAA,WACEl8B,KAAK0D,KAAK,CACR1I,KAAM,UACNsjC,MAAO,MAIX,YAAAjC,oBAAA,SAAoB3B,GAClB16B,KAAK++B,QAAQ,WAAmBT,OAAS5D,GAG3C,YAAA0B,cAAA,WACEp8B,KAAKi/B,cAKP,YAAArD,QAAA,aAEA,YAAAE,cAAA,WACE97B,KAAK0D,KAAK,CACR1I,KAAM,WACN4N,QAAS,GACTqS,WAAY,GACZkkB,aAAa,KAIjB,YAAAvB,YAAA,WACE59B,KAAK0D,KAAK,CACR1I,KAAM,SACN4N,QAAS,MAIb,YAAA+zB,UAAA,WACE38B,KAAKi/B,cAGP,YAAAvB,qBAAA,WACE19B,KAAK++B,QAAQ,YAAoBI,aAAc,GAIjD,YAAApD,gBAAA,SAAgBrB,GACd16B,KAAK++B,QAAQ,WAAD,UAAuCn2B,SAAW8xB,GAKhE,YAAAoC,eAAA,WACE98B,KAAK8+B,kBAAoB,CAAC,GAAI,IAAI,IAGpC,YAAA/B,sBAAA,SAAsBrC,GACpB16B,KAAKg/B,mBAAoB,IAAMtE,GAGjC,YAAAsC,oBAAA,SAAoBoC,GAClBp/B,KAAKg/B,mBAAoB,GAAKI,GAGhC,YAAAhC,uBAAA,SAAuB1C,GACrB16B,KAAKg/B,mBAAoB,IAAMtE,GAGjC,YAAAuC,qBAAA,WACEj9B,KAAK++B,QAAQ,YAAoB9jB,WAAWvX,KAAK1D,KAAK8+B,oBAGxD,YAAAjC,kBAAA,SAAkBwC,GAChBr/B,KAAK++B,UAAUO,YAAcD,GAEjC,EApLA,GCXI,GAA+Bp3B,OAAW,GAAgB,aCAvD,SAASs3B,KAQf,SAASC,EAAkBC,GAY1B,OAXU,SAAEJ,GAAF,2BAAc9lB,EAAd,iCAAcA,EAAd,yBACTkmB,EAAQ,qBAAuBJ,KAAY9lB,IAa7C,MAAO,CAEN9a,MAAO+gC,EAAkBt+B,QAAQzC,OAEjCihC,QAASF,EAAkBt+B,QAAQC,MACnCw+B,SAAQ,IACA,ICFV,MAAMC,GAAoB,kBAOpBC,GAAyB,mBAOzBC,GAAwB,kCAiBxBC,GAAqB,CAC1B,kBACA,sBACA,iBACA,QACA,YACA,WACA,UACA,WACA,UACA,QACA,WACA,WACA,iBACA,SACA,QACA,YACA,OACA,WACA,QACA,WACA,aACA,OACA,cACA,WACA,WACA,WACA,WACA,iBAkDKC,GAAwB,IAC1BD,GA/BH,iBACA,eACA,UACA,kBACA,cACA,WACA,MACA,YACA,UACA,cACA,aACA,aACA,YACA,OACA,SACA,UACA,QACA,QACA,aACA,YACA,OACA,QAqBKE,GAAsB,CAAEC,EAAAA,SA+GvB,SAAyCl+B,GAK/C,OAAOm+B,GAAgCn+B,GAAOqC,KAAM,OA5F/C+7B,GAAmC,cAYnCC,GAAqC,SAcrCC,GAAyC,gBAyBxC,MAAMC,GASZrjC,MAAOmhC,GACN,GAzByCr8B,EAyBTq8B,EAvBhC+B,GAAiC98B,KAAMtB,IACvCq+B,GAAmC/8B,KAAMtB,IACzCs+B,GAAuCh9B,KAAMtB,GAsB5C,OAAOw+B,EAAAA,GAAAA,gBAAgB,IAAMnC,EAAS,KA1BlC,IAAoCr8B,GAuCpC,SAASm+B,GAAgCn+B,GAC/C,OAAOA,EAAK8G,OAAOK,MAAOy2B,IA8BpB,SAASa,GAA6BjC,GAC5C,OAAOA,EAAMvjB,WAAW7b,QAAUshC,IACjC,MAAQ5gC,EAAKC,GAAU2gC,EACvB,OACC3gC,GAC2B,IAA3BD,EAAImD,QAAS,WACb8X,EAAAA,EAAAA,UAAUilB,GAAuBlgC,MAe7B,SAAS6gC,GACfC,EACAC,GAEC,IADDpB,EACC,uDADQF,KAMLuB,EAAcF,EAAOtC,MACrByC,EAAgBF,EAASvC,MAE7B,IAAM,IAAI1/B,EAAI,EAAGA,EAAIqhC,GAAoBphC,OAAQD,IAAM,CACtD,MAAMoiC,EAAYf,GAAqBrhC,GAKvC,GAHAkiC,EAAcE,EAAWF,GACzBC,EAAgBC,EAAWD,GAEtBD,IAAgBC,EACpB,OAAO,EAUT,OANAtB,EAAOC,QACN,gCACAmB,EAASvC,MACTsC,EAAOtC,QAGD,EAWD,SAAS2C,GAAqBlhC,GACpC,OAAK,IAAMmhC,WAAYnhC,GACf,IAGsB,IAAzBA,EAAMkD,QAAS,KACZ,IAAMlD,EAGPA,EAWD,SAASohC,GAAyBphC,GAKxC,OAJmBogC,GAAgCpgC,GACf4S,IAAKsuB,IACT58B,KAAM,KAKnC7E,QAASsgC,GAAuB,WAW7B,SAASsB,GAAoBp/B,GACnC,MAAMq/B,EAAQr/B,EAEZxC,QAAS,SAAU,IAEnB2J,MAAO,KAEPwJ,KAAOnB,IAEP,MAAQ1R,KAAQwhC,GAAe9vB,EAAMrI,MAAO,KACtCpJ,EAAQuhC,EAAWj9B,KAAM,KAE/B,MAAO,CAAEvE,EAAIgJ,OAAQq4B,GAAyBphC,EAAM+I,YAGtD,OAAOy4B,EAAAA,EAAAA,WAAWF,GAQZ,MAAMG,GAA0B,CACtCC,MAAO,CAAEb,EAAQC,MAGPa,EAAAA,EAAAA,QACL,CAAEd,EAAQC,GAAWluB,IAAKwtB,KAC5BthC,OAEH2S,MAAO,CAAEovB,EAAQC,KACT1gB,EAAAA,EAAAA,YAAY,CAAEygB,EAAQC,GAAWluB,IAAKyuB,SAI3CG,EAAAA,EAAAA,WACFxB,GAAmBptB,KAAO2I,GAAe,CAAEA,EAAWqmB,EAAAA,cAcjD,SAASC,GACfhB,EACAC,GAEC,IADDpB,EACC,uDADQF,KAKT,GAAKqB,EAAO/hC,SAAWgiC,EAAShiC,OAM/B,OALA4gC,EAAOC,QACN,0CACAmB,EACAD,IAEM,EAMR,MAAMiB,EAAqB,GAC3B,IAAM,IAAIjjC,EAAI,EAAGA,EAAIiiC,EAAShiC,OAAQD,IACrCijC,EAAoBhB,EAAUjiC,GAAK,GAAIK,eACtC4hC,EAAUjiC,GAAK,GAGjB,IAAM,IAAIA,EAAI,EAAGA,EAAIgiC,EAAO/hC,OAAQD,IAAM,CACzC,MAAQN,EAAMwjC,GAAgBlB,EAAQhiC,GAChCmjC,EAAYzjC,EAAKW,cAGvB,IAAO4iC,EAAmBvkC,eAAgBykC,GAEzC,OADAtC,EAAOC,QAAS,yCAA0CphC,IACnD,EAGR,MAAM0jC,EAAgBH,EAAoBE,GACpCE,EAAoBT,GAAyBO,GAEnD,GAAKE,GAEJ,IAAOA,EAAmBH,EAAaE,GAOtC,OANAvC,EAAOC,QACN,mDACAphC,EACA0jC,EACAF,IAEM,OAEF,GAAKA,IAAgBE,EAQ3B,OANAvC,EAAOC,QACN,mDACAphC,EACA0jC,EACAF,IAEM,EAIT,OAAO,EAQD,MAAMI,GAAsB,CAClCC,SAAU,SAAEvB,EAAQC,GAAuC,IAA7BpB,EAA6B,uDAApBF,KACtC,OACCqB,EAAOh4B,UAAYi4B,EAASj4B,SAI5Bg4B,EAAOh4B,QAAQ3J,gBAAkB4hC,EAASj4B,QAAQ3J,eAElDwgC,EAAOC,QACN,4CACAmB,EAASj4B,QACTg4B,EAAOh4B,UAED,GAGDg5B,MACH,CAAEhB,EAAQC,GAAWluB,IAAK8tB,IAC7BhB,IAGF2C,MAAOzB,GACP0B,QAAS1B,IAaH,SAAS2B,GAA2B3D,GAC1C,IAAIH,EACJ,KAAUA,EAAQG,EAAO1rB,SAAY,CACpC,GAAoB,UAAfurB,EAAMxjC,KACV,OAAOwjC,EAGR,IAAOqB,GAAuBv8B,KAAMk7B,EAAMF,OACzC,OAAOE,GAcV,SAAS+D,GAAe/zB,GAAgC,IAA1BixB,EAA0B,uDAAjBF,KACtC,IACC,OAAO,IAAIiD,GAAW,IAAIjC,IAAuBzC,SAAUtvB,GAC1D,MAAQoP,GACT6hB,EAAOC,QAAS,8BAA+BlxB,GAGhD,OAAO,KAWD,SAASi0B,GAAiBC,EAAcC,GAE9C,QAAOD,EAAavD,gBAMnBwD,GACAA,EAAU/5B,UAAY85B,EAAa95B,SAChB,WAAnB+5B,EAAU3nC,MA0HL,SAAS4nC,GAAe1a,EAAOoC,GAMrC,GAJCpC,EAAM5pB,OAASgnB,MACf4C,EAAM5pB,OAASmnB,KAIf,MAAO,EAAE,GAGV,MAAMga,ED3qBA,WAMN,MAAMoD,EAAQ,GAERpD,EAASF,KAEf,MAAO,CACN9gC,QAAiB,2BAAP8a,EAAO,yBAAPA,EAAO,gBAChBspB,EAAMn/B,KAAM,CAAE+B,IAAKg6B,EAAOhhC,MAAO8a,KAAAA,KAElCmmB,UAAmB,2BAAPnmB,EAAO,yBAAPA,EAAO,gBAClBspB,EAAMn/B,KAAM,CAAE+B,IAAKg6B,EAAOC,QAASnmB,KAAAA,KAEpComB,SAAQ,IACAkD,GCypBMC,GACTxrB,EAAYiT,GAAoBD,GACtC,IAAIyY,EACJ,IACCA,EAAwBxJ,GAAgBjiB,EAAW4Q,EAAMjN,YACxD,MAAQxc,GAMT,OALAghC,EAAOhhC,MACN,0FACAA,EAAM8C,YAGA,EAAE,EAAOk+B,EAAOE,YAGxB,MAAM5gB,EA/HA,SAA2B6hB,EAAQC,GAAoC,IAA1BpB,EAA0B,uDAAjBF,KAE5D,GAAKqB,IAAWC,EACf,OAAO,EAIR,MAAQmC,EAAcC,GAAmB,CACxCrC,EACAC,GACCluB,KAAOnE,GAAU+zB,GAAe/zB,EAAMixB,KAGxC,IAAOuD,IAAkBC,EACxB,OAAO,EAGR,IAAIC,EAAaC,EACjB,KAAUD,EAAcZ,GAA2BU,IAAmB,CAIrE,GAHAG,EAAgBb,GAA2BW,IAGpCE,EAKN,OAJA1D,EAAOC,QACN,2CACAwD,IAEM,EAIR,GAAKA,EAAYloC,OAASmoC,EAAcnoC,KAQvC,OAPAykC,EAAOC,QACN,2DACAyD,EAAcnoC,KACdmoC,EACAD,EAAYloC,KACZkoC,IAEM,EAKR,MAAME,EAAgBlB,GAAqBgB,EAAYloC,MACvD,GACCooC,IACEA,EAAeF,EAAaC,EAAe1D,GAE7C,OAAO,EAKHgD,GAAiBS,EAAaD,EAAgB,IAGlDX,GAA2BW,GAChBR,GAAiBU,EAAeH,EAAc,KAGzDV,GAA2BU,GAI7B,QAAOG,EAAgBb,GAA2BW,MAGjDxD,EAAOC,QACN,2CACAyD,IAEM,GAuDQE,CACfnb,EAAM2R,gBACNkJ,EACAtD,GAaD,OAVO1gB,GACN0gB,EAAOhhC,MACN,mIACA6Y,EAAUhZ,KACVgZ,EACAyrB,EACA7a,EAAM2R,iBAID,CAAE9a,EAAS0gB,EAAOE,YAgBnB,SAAS2D,GACfhZ,EACArP,EACAsoB,GAEA,MAAMjsB,EAAYiT,GAAoBD,GAChCpC,EAAQ,CACb5pB,KAAMgZ,EAAUhZ,KAChB2c,WAAAA,EACAwM,YAAa,GACboS,gBAAiB0J,IAEVxkB,GAAY6jB,GAAe1a,EAAO5Q,GAE1C,OAAOyH,EC/vBD,SAASykB,GAAqCllC,EAAM2c,GAC1D,MAAMwoB,EAAgB,IAAKxoB,GAqB3B,GAnBK,qBAAuB3c,IAC3BA,EAAO,cAIH,cAAgBA,GAAQ,oBAAsBA,IAClDA,EAAO,kBAKHA,GAAgD,IAAxCA,EAAK2E,QAAS,uBAE1BwgC,EAAcC,QAAUplC,EAAKkG,UAAW,IACxClG,EAAO,oBAKHA,GAA0C,IAAlCA,EAAK2E,QAAS,eAAwB,CAElD,MAAM0gC,EAAerlC,EAAKkG,UAAW,IAC/B8yB,EAAa,CAClBsM,QAAS,eACTC,UAAW,eAEZJ,EAAcK,iBACbH,KAAgBrM,EACbA,EAAYqM,GACZA,EAGG,CAAE,gBAAiB,aAAc5oB,SAAU4oB,KACjDF,EAAcM,YAAa,GAE5BzlC,EAAO,aAqBR,MAhBc,oBAATA,IACJA,EAAO,sBAKM,6BAATA,IACJA,EAAO,4BAEM,8BAATA,IACJA,EAAO,wBAEM,2BAATA,IACJA,EAAO,qBAGD,CAAEA,EAAMmlC,GC3CT,SAASO,GAAmBC,GAAyB,IAAf/lC,EAAe,uDAAL,GACtD,MAAM,mBAAEgmC,GAAqB,GAAShmC,GAChC,UACL4Z,EADK,MAELqsB,EAAQ,GAFH,YAGL1c,EAAc,GAHT,aAIL2c,EAAe,IACZH,EAEJ,IAAII,EAAa,EACjB,MAAMx7B,EAAUu7B,EACdzxB,KAAOhC,GAEE,OAATA,EACGA,EACAqzB,GAAmBvc,EAAa4c,KAAgBnmC,KAEnDmG,KAAM,MACN7E,QAAS,OAAQ,MACjBsJ,OAEF,OAAOo7B,EACJpK,GAA4BhiB,EAAWqsB,EAAOt7B,GAC9CA,ECzCW,SAASy7B,GAAQ9lB,EAAQ+lB,GAItC,IAHA,IACIC,EADAC,EAAWF,EAAKp7B,MAAM,KAGnBq7B,EAAUC,EAASxxB,SAAS,CACjC,KAAMuxB,KAAWhmB,GACf,OAGFA,EAASA,EAAOgmB,GAGlB,OAAOhmB,ECTT,IACMrW,GADFu8B,GAEK,WAKL,OAJKv8B,KACHA,GAAMD,SAASy8B,eAAeC,mBAAmB,KAG5Cz8B,IAaJ,SAASjL,GAAM2a,EAAQgtB,GAC5B,GAAKA,EAAL,CAKA,GAAI,iBAAoBhtB,EAAQ,CAC9B,IAAI1P,EAAMu8B,KACVv8B,EAAI28B,KAAKz8B,UAAYwP,EACrBA,EAAS1P,EAAI28B,KAIf,GAAI,mBAAsBD,EACxB,OAAOA,EAAShtB,GAIlB,GAAI9B,SAAW8uB,EAASE,YAKxB,OAAOhvB,OAAOqF,KAAKypB,GAAUhgB,QAAO,SAAUmgB,EAAMllC,GAElD,OADAklC,EAAKllC,GAAO5C,GAAM2a,EAAQgtB,EAAS/kC,IAC5BklC,IACN,KAYE,SAASnjC,GAAKoX,EAAU3a,GAM7B,OALI,IAAMob,UAAU7a,SAClBP,EAAO2a,EACPA,OAAW3D,GAGN,SAAU5L,GACf,IAAIjG,EAAQiG,EAMZ,GAJIuP,IACFxV,EAAQiG,EAAKu7B,cAAchsB,IAGzBxV,EACF,OAAO6gC,GAAQ7gC,EAAOnF,IC5CrB,SAAS4mC,GAAyBC,GACxC,MAAM/5B,EAAS,GACf,IAAM,IAAIxM,EAAI,EAAGA,EAAIumC,EAAQtmC,OAAQD,IAAM,CAC1C,MAAM,KAAEN,EAAF,MAAQyB,GAAUolC,EAASvmC,GACjCwM,EAAQ9M,GAASyB,EAGlB,OAAOqL,EAaD,SAASg6B,GAASC,GACxB,GAAKA,EAAQv7B,WAAau7B,EAAQC,UACjC,OAAOD,EAAQt7B,UAGhB,GAAKs7B,EAAQv7B,WAAau7B,EAAQE,aACjC,MAAM,IAAIhe,UACT,yEAKF,MAAO,CACNvsB,KAAMqqC,EAAQG,SAASvmC,cACvB25B,MAAO,IACHsM,GAAyBG,EAAQpqB,YACpCtH,SAAUA,GAAkB0xB,EAAQz7B,cAwBhC,SAAS67B,GAASxsB,GACxB,OAASosB,IACR,IAAI5hC,EAAQ4hC,EAEPpsB,IACJxV,EAAQ4hC,EAAQJ,cAAehsB,IAGhC,IACC,OAAOmsB,GAAS3hC,GACf,MAAQhF,GACT,OAAO,OAgBV,QACCinC,aAtGD,SAAuBh8B,EAAM1O,GAC5B,OAAO0O,GAAQA,EAAK1O,OAASA,GAsG7BoqC,QAAAA,GACAO,OA1CM,SAAiBj8B,GACvB,OAAOiK,GAAiB,CAAEjK,KA0C1B+7B,QAAOA,ICzCD,SAASL,GAASQ,GACxB,MAAMx6B,EAAS,GACf,IAAM,IAAIxM,EAAI,EAAGA,EAAIgnC,EAAS/mC,OAAQD,IACrC,IACCwM,EAAO1H,KAAMgG,GAAck8B,EAAUhnC,KACpC,MAAQH,IAKX,OAAO2M,EAUD,SAASu6B,GAAQhyB,GACvB,MAAMylB,EAAsCzlB,EAE5C,OAAO6lB,EAAAA,GAAAA,gBAAgBJ,GAWjB,SAASqM,GAASxsB,GACxB,OAASosB,IACR,IAAI5hC,EAAQ4hC,EAMZ,OAJKpsB,IACJxV,EAAQ4hC,EAAQJ,cAAehsB,IAG3BxV,EACG2hC,GAAS3hC,EAAMmG,YAGhB,IAeT,QACC0E,OA3FM,WACN,MAAMlD,EAAS,GACf,IAAM,IAAIxM,EAAI,EAAGA,EAAI,UAAWC,OAAQD,IAAM,CAC7C,MAAMinC,GAAYjb,EAAAA,EAAAA,WAAuBhsB,EAAd,qBAAcA,OAAd,YAAcA,IACzC,IAAM,IAAIigB,EAAI,EAAGA,EAAIgnB,EAAUhnC,OAAQggB,IAAM,CAC5C,MAAMhV,EAAQg8B,EAAWhnB,GAEP,iBAAVhV,GACgC,iBAAhCuB,EAAQA,EAAOvM,OAAS,GAG/BuM,EAAQA,EAAOvM,OAAS,IAAOgL,EAE/BuB,EAAO1H,KAAMmG,IAKhB,OAAOuB,GA0EP06B,iBA3GD,SAA2BnyB,GAI1B,OAAOA,GAwGPyxB,QAHc,GAIdO,OAJc,GAKdF,QAAOA,IC9CD,SAASM,GACfC,EACAtM,EACArxB,EACA49B,GAEA,MAAM,KAAEjrC,EAAMkrC,KAAMC,GAAYzM,EAChC,IAAI35B,EAEJ,OAAS25B,EAAgB7hB,QAGxB,UAAKvC,EACJvV,EAAQkmC,EACLA,EAAmBD,QACnB1wB,EACH,MACD,IAAK,YACL,IAAK,WACL,IAAK,OACL,IAAK,OACL,IAAK,WACL,IAAK,OACL,IAAK,QACL,IAAK,MACJvV,EAAQqmC,GAA0B/9B,EAAWqxB,GAU/C,OAkBM,SAAwB35B,EAAO/E,GACrC,YAAgBsa,IAATta,GAtED,SAAoB+E,EAAOsmC,GACjC,OAAOA,EAAMppB,MAAQjiB,GArCf,SAAmB+E,EAAO/E,GAChC,OAASA,GACR,IAAK,SACJ,MAAwB,iBAAV+E,EAEf,IAAK,UACJ,MAAwB,kBAAVA,EAEf,IAAK,SACJ,QAAUA,GAASA,EAAMglC,cAAgBhvB,OAE1C,IAAK,OACJ,OAAiB,OAAVhW,EAER,IAAK,QACJ,OAAO0B,MAAM9C,QAASoB,GAEvB,IAAK,UACL,IAAK,SACJ,MAAwB,iBAAVA,EAGhB,OAAO,EAewBumC,CAAUvmC,EAAO/E,KAqEnBurC,CAAWxmC,GAAO6qB,EAAAA,EAAAA,WAAW5vB,IAzBnDwrC,CAAezmC,EAAO/E,IAuCvB,SAAwB+E,EAAOomC,GACrC,OAAS1kC,MAAM9C,QAASwnC,IAAaA,EAAQprB,SAAUhb,GAxCd0mC,CAAe1mC,EAAOomC,KAG9DpmC,OAAQuV,QAGMA,IAAVvV,EACG25B,EAAgB/C,QAGjB52B,EAwCD,SAAS2mC,GAAmBC,GAClC,OAASA,EAAa9uB,QACrB,IAAK,YACJ,IAAI4tB,EH9FA,SAAcxsB,EAAU3a,GAM7B,OALI,IAAMob,UAAU7a,SAClBP,EAAO2a,EACPA,OAAW3D,GAGN,SAAU5L,GACf,IAAIuR,EAAapZ,GAAKoX,EAAU,aAAfpX,CAA6B6H,GAE9C,GAAIuR,GAAcA,EAAW3d,eAAegB,GAC1C,OAAO2c,EAAW3c,GAAMyB,OGoFb6mC,CAAMD,EAAa1tB,SAAU0tB,EAAarrB,WAKxD,MAJ2B,YAAtBqrB,EAAa3rC,OACjByqC,EArKuCA,CAAAA,IAC1C9oB,EAAAA,EAAAA,MAAM,CACL8oB,EAcE1lC,QAAqBuV,IAAVvV,IAqJD8mC,CAA2BpB,IAG/BA,EACR,IAAK,OACJ,OC3LmBxsB,ED2LN0tB,EAAa1tB,SC3LG6tB,ED2LOH,EAAaI,UC1L1C1B,IACR,IAAI5hC,EAAQ4hC,EAMZ,GAJKpsB,IACJxV,EAAQ4hC,EAAQJ,cAAehsB,KAGzBxV,EACN,MAAO,GAGR,GAAKqjC,EAAe,CACnB,IAAI/mC,EAAQ,GACZ,MAAMlB,EAAS4E,EAAMkQ,SAAS9U,OAE9B,IAAM,IAAI2E,EAAQ,EAAGA,EAAQ3E,EAAQ2E,IAAU,CAC9C,MAAMqG,EAAQpG,EAAMkQ,SAAUnQ,GAEzBqG,EAAM27B,SAASvmC,gBAAkB6nC,IAItC/mC,GAAS8J,EAAMP,WAGhB,OAAOvJ,EAGR,OAAO0D,EAAM4E,WD+Jb,IAAK,OACJ,OHpEI,SAAc4Q,GACnB,OAAOpX,GAAKoX,EAAU,eGmEdjX,CAAM2kC,EAAa1tB,UAC3B,IAAK,WACJ,OAAOtF,GAAUgzB,EAAa1tB,UAC/B,IAAK,OACJ,OAAOvP,GAAMi9B,EAAa1tB,UAC3B,IAAK,QACJ,MAAM+tB,GAAcrvB,EAAAA,EAAAA,WACnBgvB,EAAaM,MACbP,IAED,OH/DI,SAAeztB,EAAU4rB,GAC9B,OAAO,SAAUn7B,GACf,IAAIL,EAAUK,EAAKlB,iBAAiByQ,GACpC,MAAO,GAAGtG,IAAInR,KAAK6H,GAAS,SAAU5F,GACpC,OAAOvG,GAAMuG,EAAOohC,OG2DhBoC,CAAON,EAAa1tB,SAAU+tB,GACtC,IAAK,MACJ,OAAOrqB,EAAAA,EAAAA,MAAM,CACZ9a,GAAM8kC,EAAa1tB,SAAU,YAC3BusB,GACDA,EAAWA,EAASvmC,mBAAgBqW,IAEvC,QAECpU,QAAQzC,MAAQ,wBAAwBkoC,EAAa9uB,WChNjD,IAAeoB,EAAU6tB,ED6NzB,SAASV,GAA0B/9B,EAAWqxB,GACpD,OAAOwN,GAAU7+B,EAAWq+B,GAAmBhN,IAYzC,SAASyN,GACf7c,EACAjiB,GAEC,IADD4S,EACC,uDADY,GAEb,MAAM3D,EAAYiT,GAAoBD,GAChC8c,GAAkBzvB,EAAAA,EAAAA,WACvBL,EAAU2D,YACV,CAAEye,EAAiBsM,IACXD,GACNC,EACAtM,EACArxB,EACA4S,KAKH,OAAOoP,EAAAA,EAAAA,cACN,4BACA+c,EACA9vB,EACAjP,EACA4S,GExPK,SAASosB,GAA2Bh/B,GAG1C,MAAMnC,EAASkgC,GAFf/9B,EAAa,+BAA+BA,UAEQ,CACnDrN,KAAM,SACN6c,OAAQ,YACRoB,SAAU,+BACVqC,UAAW,UAGZ,OAAOpV,EAASA,EAAO4C,OAAOK,MAAO,OAAU,GCdzC,SAASm+B,GAA6Bpf,EAAO5Q,GACnD,MAAMiwB,ED4BA,SAA6BH,EAAiB9vB,EAAWjP,GAC/D,GAAKkU,GAAiBjF,EAAW,mBAAmB,GAAS,CAK5D,MAGMkwB,EAAajO,GAAgBjiB,GAHHC,EAAAA,EAAAA,MAAM6vB,EAAiB,CACtD,eAGKK,EAAiBJ,GAA2BG,GAC5CE,EAAgBL,GAA2Bh/B,GAC3Cs/B,GAAgBC,EAAAA,EAAAA,YAAYF,EAAeD,GAE5CE,EAAc9oC,OAClBuoC,EAAgBl+B,UAAYy+B,EAActjC,KAAM,KACrCmjC,UACJJ,EAAgBl+B,UAIzB,OAAOk+B,ECjDwBS,CAC9B3f,EAAMjN,WACN3D,EACA4Q,EAAM2R,iBAEP,MAAO,IACH3R,EACHjN,WAAYssB,GCgKP,SAASO,GAAe7D,GAC9B,IAAI8D,EAtGE,SAA4B9D,GAClC,MAAM+D,EAAoB1iB,KAGpByU,EAAekK,EAASnsB,WAAawN,KACrC2iB,EAAgBhE,EAASE,OAAS,GAClC+D,EAAiBjE,EAASxc,aAAe,GAC/C,IAAI0gB,EAAelE,EAAS57B,UAAUS,OAStC,OAJKixB,IAAiBiO,IACrBG,GAAeC,EAAAA,GAAAA,OAAOD,GAAer/B,QAG/B,IACHm7B,EACHnsB,UAAWiiB,EACXoK,MAAO8D,EACP5/B,UAAW8/B,EACX1gB,YAAaygB,GAiFQG,CAAmBpE,GAKzC8D,EAlID,SAA8B9D,GAC7B,MACCqE,EACAC,GACG/E,GACHS,EAASnsB,UACTmsB,EAASE,OAEV,MAAO,IACHF,EACHnsB,UAAWwwB,EACXnE,MAAOoE,GAuHUC,CAAqBT,GAGvC,IAAIzwB,EAAYiD,GAAcwtB,EAAgBjwB,WAGvCR,IACNywB,EAlFF,SAAiC9D,GAChC,MAAMwE,EACLhjB,MAAoCH,KAK/BojB,EAA6B1E,GAAmBC,EAAU,CAC/DC,oBAAoB,IAKfrK,EAAkBmK,GAAmBC,EAAU,CACpDC,oBAAoB,IAGrB,MAAO,CACNpsB,UAAW2wB,EACXtE,MAAO,CACNwE,aAAc1E,EAASnsB,UACvB+hB,gBAAAA,EACA6O,2BAAAA,GAEDrgC,UAAW47B,EAASnsB,UAAY+hB,EAAkBoK,EAAS57B,UAC3Dof,YAAawc,EAASxc,YACtB2c,aAAcH,EAASG,cAwDLwE,CAAwBb,GAC1CzwB,EAAYiD,GAAcwtB,EAAgBjwB,YAQ3C,MAAM+wB,EACLd,EAAgBjwB,YAAcwN,MAC9ByiB,EAAgBjwB,YAAc2N,KAC/B,IAAOnO,IAAiBywB,EAAgB1/B,WAAawgC,EACpD,OAID,MAAMC,EAAoBf,EAAgBtgB,YACxC9U,IAAKm1B,IAEL1oC,QAAU2oB,KAAmBA,IAGzBghB,EAAcvhB,GACnBugB,EAAgBjwB,UAChBqvB,GACC7vB,EACAywB,EAAgB1/B,UAChB0/B,EAAgB5D,OAEjB2E,GAEDC,EAAYlP,gBAAkBkO,EAAgB1/B,UAE9C,MAAM2gC,EA7EP,SAA+BC,EAAkB3xB,GAEhD,MAAQyH,GAAY6jB,GAAeqG,EAAkB3xB,GAErD,GAAKyH,EACJ,MAAO,IAAKkqB,EAAkBlqB,QAAAA,EAASmqB,iBAAkB,IAK1D,MAAMC,EAAa7B,GAClB2B,EACA3xB,IAGO8xB,EAAcF,GAAqBtG,GAC1CqG,EACA3xB,GAGD,MAAO,IAAK6xB,EAAYpqB,QAASqqB,EAAcF,iBAAAA,GAyDxBG,CAAsBN,EAAazxB,IACpD,iBAAE4xB,GAAqBF,EAMvBM,ECpNA,SAAuCphB,EAAO+b,EAAU3sB,GAC9D,MAAMiyB,EAAmBtF,EAASE,OAC1B7M,WAAYkS,GAA0BlyB,EAE9C,IAAOkyB,IAA2BA,EAAsB3qC,OACvD,OAAOqpB,EASR,IAAM,IAAItpB,EAAI,EAAGA,EAAI4qC,EAAsB3qC,OAAQD,IAAM,CAIxD,MAAM,WAAE6qC,EAAaC,EAAAA,WAAcF,EAAuB5qC,GAC1D,GACCspB,EAAMnJ,UACJ0qB,EAAYF,EAAkBrhB,EAAMT,aAEtC,SAMD,MAAMkiB,EAAsB5zB,OAAO6zB,QAClCryB,EAAAA,EAAAA,MAAMD,EAAWgJ,IACjBkpB,EAAuB5qC,IAGxB,IAAIirC,EAAgB,IAChB3hB,EACHjN,WAAYksB,GACXwC,EACAzhB,EAAM2R,gBACN0P,KAKIxqB,GAAY6jB,GAAeiH,EAAeF,GAahD,GAVO5qB,IACN8qB,EAAgBvC,GACfuC,EACAF,IAEC5qB,GAAY6jB,GAAeiH,EAAeF,KAKtC5qB,EACN,SAGD,IAAI+qB,EAAsBD,EAAcpiB,YACpCsiB,EAAqBF,EAAc5uB,WAIvC,MAAM,QAAE+uB,GAAYL,EACfK,KAEHD,EAAqBR,EACrBO,EAAsB5hB,EAAMT,cACzBmD,EAAAA,EAAAA,WAAWof,EAASD,EAAoB7hB,EAAMT,eAGnDS,EAAQ,IACJA,EACHjN,WAAY8uB,EACZtiB,YAAaqiB,EACb/qB,SAAS,EACTmqB,iBAAkB,IAIpB,OAAOhhB,EDiIc+hB,CACpBjB,EACAjB,EACAzwB,GAmBD,OAhBO0xB,EAAejqB,SAAWuqB,EAAavqB,SAE7C7d,QAAQgpC,eAAgB,oBAAqB5yB,EAAUhZ,MACvD4C,QAAQipC,KACP,0IACA7yB,EAAUhZ,KACVgZ,EACAiiB,GAAgBjiB,EAAWgyB,EAAaruB,YACxCquB,EAAazP,iBAEd34B,QAAQkpC,YAEKpB,EAAejqB,SAAauqB,EAAavqB,SACtDmqB,EAAiBxnC,SAAS,QAAE,IAAE+D,EAAF,KAAO8T,GAAT,SAAqB9T,KAAQ8T,MAGjD+vB,EAuBO,SAASpsC,GAAO2L,GAC9B,OAAOwhC,EAAAA,GAAAA,OAAcxhC,GAAUgc,QAAQ,CAAEC,EAAamf,KACrD,MAAM/b,EAAQ4f,GAAe7D,GAI7B,OAHK/b,GACJpD,EAAYphB,KAAMwkB,GAEZpD,IACL,IElSJ,IAAI,GAA+B7c,OAAW,GAAc,W,WCUrD,SAASqiC,KACf,OAAOlrC,EAAAA,EAAAA,QAAQiqB,GAAoB,QAAU,CAAEruB,KAAM,QAAU2X,KAC5D4V,GACMA,EAAUQ,QACdR,EACA,IACGA,EACHQ,QAAWrf,GACV6e,EAAUtP,UACVvP,EAAKL,QAASkf,EAAUtP,aCHxB,SAASsxB,GAAc/7B,GAC7B,MAAMrG,EAAMD,SAASy8B,eAAeC,mBAAoB,IAIxD,OAFAz8B,EAAI28B,KAAKz8B,UAAYmG,EAEd/M,MAAM+oC,KAAMriC,EAAI28B,KAAKnxB,UAAW+V,SAAWhgB,IACjD,MAAM+gC,EAAerhB,GACpBkhB,MACA,QAAE,QAAEvhB,GAAJ,SAAmBA,EAASrf,MAG7B,IAAO+gC,EACN,OAAOjjB,GAEN,YACA2f,GAAoB,YAAaz9B,EAAKJ,YAIxC,MAAM,UAAEif,EAAF,UAAazQ,GAAc2yB,EAEjC,OAAKliB,EACGA,EAAW7e,GAGZ8d,GACN1P,EACAqvB,GAAoBrvB,EAAWpO,EAAKJ,eCtCxB,SAASohC,GAAiBC,GACxC,MAAMC,EAAU1iC,SAASy8B,eAAeC,mBAAoB,IACtDiG,EAAU3iC,SAASy8B,eAAeC,mBAAoB,IAEtDkG,EAAOF,EAAQ9F,KACfiG,EAAOF,EAAQ/F,KAIrB,IAFAgG,EAAKziC,UAAYsiC,EAETG,EAAKniC,YAAa,CACzB,MAAMe,EAAOohC,EAAKniC,WAGbe,EAAKI,WAAaJ,EAAK47B,WACtBhtB,EAAAA,GAAAA,SAAS5O,GACbohC,EAAK9gC,YAAaN,IAEXqhC,EAAKC,WAAyC,MAA5BD,EAAKC,UAAUxF,UACvCuF,EAAKE,YAAaJ,EAAQziC,cAAe,MAG1C2iC,EAAKC,UAAUC,YAAavhC,IAGlBA,EAAKI,WAAaJ,EAAK67B,aAEX,OAAlB77B,EAAK87B,UACJ97B,EAAKwhC,aAA6C,OAA9BxhC,EAAKwhC,YAAY1F,WACzCuF,EAAKE,YAAaJ,EAAQziC,cAAe,MACzC0iC,EAAK9gC,YAAaN,EAAKwhC,cAKvBH,EAAKC,WACuB,MAA5BD,EAAKC,UAAUxF,UACfuF,EAAKC,UAAUt3B,gBAEfq3B,EAAKC,UAAUC,YAAavhC,GAE5BohC,EAAK9gC,YAAaN,IAEU,MAAlBA,EAAK87B,UAEXltB,EAAAA,GAAAA,SAAS5O,GACbohC,EAAK9gC,YAAaN,GAElBqhC,EAAKE,YAAavhC,IAERyhC,EAAAA,GAAAA,mBAAmBzhC,IACvBqhC,EAAKC,WAAyC,MAA5BD,EAAKC,UAAUxF,UACvCuF,EAAKE,YAAaJ,EAAQziC,cAAe,MAE1C2iC,EAAKC,UAAUC,YAAavhC,IAE5BqhC,EAAKE,YAAavhC,GAGnBohC,EAAK9gC,YAAaN,GAIpB,OAAOqhC,EAAK1iC,UC9CE,SAAS+iC,GAAyB1hC,EAAMvB,GACtD,GAAKuB,EAAKI,WAAaJ,EAAK2hC,aAI5B,GAAwB,aAAnB3hC,EAAKK,WAKV,GAA0C,IAArCL,EAAKK,UAAU9G,QAAS,QAAiB,CAE7C,MAAMqoC,EAAa5hC,EAAKK,UAAUjG,MAAO,GAAIgF,OAO7C,IAAIyiC,EAAU7hC,EACV8hC,GAAW,EACf,KAAUD,EAAUA,EAAQL,aAC3B,GACCK,EAAQzhC,WAAayhC,EAAQF,cACP,aAAtBE,EAAQxhC,UACP,CACDyhC,GAAW,GACXC,EAAAA,GAAAA,QAAQF,GACR,OAIF/rC,EAAAA,GAAAA,SAASkK,EAIX,SAAqB4hC,EAAYE,EAAUrjC,GAC1C,MAAMuB,EAAOvB,EAAIC,cAAe,YAShC,OARAsB,EAAKgiC,QAAQxjB,MAAQ,YAChBojB,IACJ5hC,EAAKgiC,QAAQJ,WAAaA,GAEtBE,IAEJ9hC,EAAKgiC,QAAQF,SAAW,IAElB9hC,EAdSiiC,CAAYL,EAAYE,EAAUrjC,UA1BjD3I,EAAAA,GAAAA,SAASkK,EA2CX,SAAyBvB,GACxB,MAAMuB,EAAOvB,EAAIC,cAAe,YAGhC,OAFAsB,EAAKgiC,QAAQxjB,MAAQ,gBAEdxe,EA/CSkiC,CAAgBzjC,ICtBjC,SAAS0jC,GAAQniC,GAChB,MAAyB,OAAlBA,EAAK87B,UAAuC,OAAlB97B,EAAK87B,SASxB,SAASsG,GAAapiC,GACpC,IAAOmiC,GAAQniC,GACd,OAGD,MAAMsH,EAAOtH,EACPqiC,EAAcriC,EAAKsiC,uBAKzB,GACCD,GACAA,EAAYvG,WAAa97B,EAAK87B,UACL,IAAzBx0B,EAAK2C,SAAS9U,OACb,CAED,KAAQmS,EAAKrI,YACZojC,EAAYd,YAAaj6B,EAAKrI,YAG/BqI,EAAKi7B,WAAWjiC,YAAagH,GAG9B,MAAMk7B,EAAgBxiC,EAAKuiC,WAG3B,GACCC,GAC2B,OAA3BA,EAAc1G,UACoB,IAAlC0G,EAAcv4B,SAAS9U,SACrB,KAAKyE,MArCoB81B,EAqCM8S,EApC3BzqC,MAAM+oC,KAAMpR,EAAQxvB,YACzB+I,KAAK,QAAE,UAAE5I,EAAY,IAAhB,SAA0BA,KAC/B1F,KAAM,MAmCN,CACD,MAAM8nC,EAAiBD,EACjBE,EAAeD,EAAeH,uBAC9BK,EAAaF,EAAeF,WAE7BG,GACJA,EAAanB,YAAaj6B,GAC1Bq7B,EAAWriC,YAAamiC,KAExBE,EAAWJ,WAAWK,aAAct7B,EAAMq7B,GAC1CA,EAAWJ,WAAWjiC,YAAaqiC,IAhDtC,IAA6BjT,EAqD5B,GAAK8S,GAAiBL,GAAQK,GAAkB,CAC/C,MAAME,EAAe1iC,EAAKsiC,uBAErBI,EACJA,EAAanB,YAAavhC,IAE1B6iC,EAAAA,GAAAA,QAAQ7iC,IC/DI,SAAS8iC,GAAsB9iC,GACtB,eAAlBA,EAAK87B,WAIV97B,EAAKrB,UAAYqiC,GAAiBhhC,EAAKrB,YCwCxC,SAASokC,GAAmBrT,GAAmC,IAA1BsT,EAA0B,uDAAVtT,EACpD,MAAMuT,EAASvT,EAAQwT,cAAcxkC,cAAe,UACpDskC,EAAcT,WAAWK,aAAcK,EAAQD,GAC/CC,EAAO1B,YAAa7R,GAaN,SAASyT,GAAsBnjC,EAAMvB,EAAKuuB,GACxD,IAjDD,SAA0BhtB,EAAMgtB,GAC/B,MAAM6E,EAAM7xB,EAAK87B,SAASvmC,cAI1B,MAAa,eAARs8B,KAAwBuR,EAAAA,GAAAA,eAAepjC,KAIrCyQ,EAAAA,EAAAA,KAAKuc,EAAQ,CAAE,SAAU,WAAY6E,IAwCrCwR,CAAiBrjC,EAAMgtB,GAC7B,OAGD,IAAIsW,EAAetjC,EACnB,MAAMuiC,EAAaviC,EAAKuiC,YAlCzB,SAAwBviC,EAAMgtB,GAC7B,MAAM6E,EAAM7xB,EAAK87B,SAASvmC,cAE1B,OAAOkb,EAAAA,EAAAA,KAAKuc,EAAQ,CAAE,SAAU,WAAY,IAAK,WAAY6E,KAoC5D0R,CAAevjC,EAAMgtB,IACG,MAAxBuV,EAAWzG,UACsB,IAAjCyG,EAAWriC,WAAW/K,SAEtBmuC,EAAetjC,EAAKuiC,YAGrB,MAAMiB,EAAUF,EAAapY,QAAS,SAKjCsY,EAGGxjC,EAAKyjC,WAGXzjC,EAAKyjC,UAAUC,SAAU,eACzB1jC,EAAKyjC,UAAUC,SAAU,cACzB1jC,EAAKyjC,UAAUC,SAAU,iBACvBF,EAAQG,YAAYvkC,SAEtB2jC,GAAmBO,EAAcE,GAPjCT,GAAmBO,EAAcE,GASc,SAArCF,EAAaf,WAAWzG,UACnCiH,GAAmBO,GCvGrB,IAAI,GAA+B/kC,OAAW,GAAa,UCyH3D,GAvGA,SAASqlC,EACR3C,GAGC,IAFDpnC,EAEC,uDAFW,EACZgqC,EACC,uDADoB,GAGrB,MAAMC,EAAiBnkB,GAAoB,QAErCM,EAAiBP,GACtBokB,GACEjlB,IACsD,IAAvDglB,EAAmBtqC,QAASslB,EAAUzQ,YACnB,cAAnByQ,EAAUvtB,OACViiB,EAAAA,EAAAA,OAAM2N,EAAAA,EAAAA,WAAWrC,EAAUgT,MAASA,IACnCkS,EAAAA,GAAAA,QAAQlS,GAAMj4B,KAAMqnC,OAIvB,IAAOhhB,EACN,MAAO,CAAEghB,GAGV,MAAM+C,GAAgB9iB,EAAAA,EAAAA,WAAWjB,EAAe4R,KAC1CoS,GAAep1B,EAAAA,EAAAA,MAAMm1B,GAAiBnS,IAC3CkS,EAAAA,GAAAA,QAAQlS,GAAMj4B,KAAMqnC,KAGrB,IAAIlnC,EACJ,MAAMmqC,EAAgBrqC,EAEtB,GAAOE,GAAQsW,EAAAA,GAAAA,MAAM4zB,EAAchD,EAAMpnC,GAAgB,CACxDA,EAAYE,EAAMD,MAAQC,EAAMoF,QAAQhK,OACxC,MAAMgvC,EAAalD,EAAKrsB,OAAQ,EAAG7a,EAAMD,OACnCsqC,EAAYnD,EAAKrsB,OAAQ/a,GAM/B,MACGwX,EAAAA,EAAAA,UAAUtX,EAAMsqC,UAAUllC,SAAW,GAAI,MAE1C,eAAevF,KAAMuqC,IACrB,iBAAiBvqC,KAAMwqC,IAGxB,OAAOR,EAA6B3C,EAAMpnC,GAW3C,GACComB,EAAeZ,UACbY,EAAeZ,QAAStlB,EAAMsqC,UAAU5J,OAE1C,OAAOmJ,EAA6B3C,EAAMiD,EAAe,IACrDL,EACH5jB,EAAe7R,YAIjB,MAAMmD,GAAatD,EAAAA,EAAAA,YAClB4L,EAAAA,EAAAA,QAAQoG,EAAe1O,YAAcyb,GAAYA,EAAOqX,aAKtDrX,GAAYA,EAAOqX,UAAWtqC,EAAMsqC,UAAU5J,MAAO1gC,KAGlDuqC,EAA0B,IAC5BzzB,GAAcoP,EAAe7R,WAChCmD,WAAY0O,EAAe1O,YAG5B,IAAIiN,EAAQV,GACXmC,EAAe7R,UACfqvB,GACC6G,EACAvqC,EAAMsqC,UAAUllC,QAChBoS,IAOF,OAJAiN,EAAM2R,gBAAkBp2B,EAAMsqC,UAAUllC,QAExCqf,EAAQof,GAA6Bpf,EAAO8lB,GAErC,IACHV,EAA6BO,GAChC3lB,KACGolB,EAA6BQ,IAIlC,MAAO,CAAEnD,ICpCH,SAASsD,GAAuBjY,GACtC,OAnEM,SAA8ClM,EAAYkM,GAChE,MACMkY,EAAa,CAAEC,uBADSC,EAAAA,GAAAA,0BAA0BpY,GACZqY,QAAqB,UAAZrY,GAC/CsY,EAAUxkB,EAAWnX,KAAK,IAAsC,IAApC,QAAEoW,EAAF,UAAWjR,EAAX,OAAsB4e,GAAc,EACrE,MAAM6X,EAAmBhyB,GAAiBzE,EAAW,UAMrD,OAJA4e,GAASp1B,EAAAA,EAAAA,YAAYo1B,GAAWA,EAAQwX,GAAexX,EAIhD6X,GAAsBxlB,GAItBpR,EAAAA,EAAAA,WAAW+e,GAAU32B,IAC3B,IAAIkb,EAAalb,EAAMkb,YAAc,GAKrC,OAHKszB,IACJtzB,EAAa,IAAKA,EAAY,OAExB,IACHlb,EACHkb,WAAAA,EACA8N,QAASA,QAAoBzT,MAZvBohB,KAiBT,OAAO8X,EAAAA,EAAAA,WAAW,MAAOF,GAAS,CAAEG,EAAUC,EAAU5uC,KACvD,OAASA,GACR,IAAK,WACJ,MAAkB,MAAb2uC,GAAiC,MAAbC,EACjB,IAGD,IAAKD,KAAaC,GAE1B,IAAK,aACL,IAAK,UACJ,MAAO,IAAOD,GAAY,MAAWC,GAAY,IAElD,IAAK,UAGJ,IAAOD,IAAcC,EACpB,OAID,OAAO,WACN,OAAOD,KAAa,YAAUC,KAAa,gBAiBxCC,CAAqCrE,KAAoBtU,GAuB1D,SAAS4Y,GAAoBC,EAAUC,EAAS3mC,EAAKuuB,GAC3Dj1B,MAAM+oC,KAAMqE,GAAWntC,SAAWgI,IACjCklC,GAAoBllC,EAAKE,WAAYklC,EAAS3mC,EAAKuuB,GAEnDoY,EAAQptC,SAAWiP,IAEXxI,EAAIilC,SAAU1jC,IAIrBiH,EAAMjH,EAAMvB,EAAKuuB,SAeb,SAASqY,GAAgBpE,GAA6B,IAAvBmE,EAAuB,uDAAb,GAAIpY,EAAS,uCAC5D,MAAMvuB,EAAMD,SAASy8B,eAAeC,mBAAoB,IAMxD,OAJAz8B,EAAI28B,KAAKz8B,UAAYsiC,EAErBiE,GAAoBzmC,EAAI28B,KAAKl7B,WAAYklC,EAAS3mC,EAAKuuB,GAEhDvuB,EAAI28B,KAAKz8B,UASV,SAAS2mC,GAAYtlC,EAAMulC,GACjC,MAAM1D,EAAU7hC,EAAO,GAAGulC,YAE1B,GAAK1D,IAAWJ,EAAAA,GAAAA,mBAAmBI,GAClC,OAAOA,EAGR,MAAM,WAAEU,GAAeviC,EAEvB,OAAOuiC,IAAgBd,EAAAA,GAAAA,mBAAmBc,GAInC+C,GAAY/C,EAAYgD,QAJ/B,EClIM,SAASC,GAAoClZ,GAKnD,OAJAsB,IAAAA,CAAY,qCAAsC,CACjD6X,MAAO,MACPC,YAAa,qCAEPhB,EAAAA,GAAAA,0BAA0BpY,GAW3B,SAASqZ,GAAT,GAAqC,IAAhB,KAAE1E,EAAO,IAAO,EAE3C,IAAqC,IAAhCA,EAAK1nC,QAAS,eAClB,OAAO/F,GAAOytC,GAKf,MAAM2E,EAASC,GAAoB5E,GAC7B6E,EAAqBvB,KAE3B,OAAOwB,EAAAA,EAAAA,UACN/lB,EAAAA,EAAAA,SAAS4lB,GAAUI,GAEI,iBAAVA,EACJA,EAqBDnF,GAFPmF,EAAQhF,GADRgF,EAAQX,GAAgBW,EAZR,CAEf5D,GAEAV,GAEAyB,GAGAL,IAGuCgD,QChE5B,SAASG,GAAgBjmC,GAClCA,EAAKI,WAAaJ,EAAK2hC,eAC3BI,EAAAA,GAAAA,QAAQ/hC,GC0BV,SAASkmC,GAAW3lC,EAAO4lC,GAC1B,OAAO5lC,EAAMsR,OACV7R,GAtBJ,SAAmBA,EAAMmmC,GACxB,IAAK/C,EAAAA,GAAAA,eAAepjC,GACnB,OAAO,EAGR,IAAOmmC,EACN,OAAO,EAGR,MAAMtU,EAAM7xB,EAAK87B,SAASvmC,cAM1B,MAL+B,CAC9B,CAAE,KAAM,KAAM,MACd,CAAE,KAAM,KAAM,KAAM,KAAM,KAAM,OAGHge,MAC3B6yB,GAAqE,KAAvDlI,EAAAA,EAAAA,YAAY,CAAErM,EAAKsU,GAAcC,GAAWjxC,SAO3DkxC,CAAUrmC,EAAMmmC,IAChBD,GAAWnuC,MAAM+oC,KAAM9gC,EAAKiK,UAAYk8B,KAI3C,SAASG,GAAYtmC,GACpB,MACmB,OAAlBA,EAAK87B,UACL97B,EAAKumC,iBAC6B,OAAlCvmC,EAAKumC,gBAAgBzK,SCzCR,SAAS0K,GAAwBxmC,EAAMvB,GAGrD,GAAuB,SAAlBuB,EAAK87B,UAAuB97B,EAAK8H,MAAQ,CAC7C,MAAM,WACLkQ,EADK,UAELD,EAFK,mBAGL0uB,EAHK,eAIL5tB,EAJK,cAKL6tB,GACG1mC,EAAK8H,MAEW,SAAfkQ,GAAwC,QAAfA,IAC7B2uB,EAAAA,GAAAA,MAAMloC,EAAIC,cAAe,UAAYsB,GAGnB,WAAd+X,IACJ4uB,EAAAA,GAAAA,MAAMloC,EAAIC,cAAe,MAAQsB,IAOV,iBAAvBymC,IACAp1B,EAAAA,EAAAA,UAAUwH,EAAgB,mBAE1B8tB,EAAAA,GAAAA,MAAMloC,EAAIC,cAAe,KAAOsB,GAGV,UAAlB0mC,GACJC,EAAAA,GAAAA,MAAMloC,EAAIC,cAAe,OAASsB,GACL,QAAlB0mC,IACXC,EAAAA,GAAAA,MAAMloC,EAAIC,cAAe,OAASsB,OAEN,MAAlBA,EAAK87B,SAChB97B,GAAO4mC,EAAAA,GAAAA,YAAY5mC,EAAM,UACI,MAAlBA,EAAK87B,SAChB97B,GAAO4mC,EAAAA,GAAAA,YAAY5mC,EAAM,MACI,MAAlBA,EAAK87B,WAGX97B,EAAKiC,QAAwC,WAA9BjC,EAAKiC,OAAO1M,cAC/ByK,EAAK6mC,IAAM,uBAEX7mC,EAAK8mC,gBAAiB,UACtB9mC,EAAK8mC,gBAAiB,QAIlB9mC,EAAKpL,OAAUoL,EAAK+I,KACxB/I,EAAK+I,GAAK/I,EAAKpL,MAKfoL,EAAK+I,KACH/I,EAAKkjC,cAAc3H,cAAgB,WAAWv7B,EAAK+I,SAErD/I,EAAK8mC,gBAAiB,OCrEV,SAASC,GAAa/mC,GAEjB,WAAlBA,EAAK87B,UACa,aAAlB97B,EAAK87B,UACa,aAAlB97B,EAAK87B,UACa,UAAlB97B,EAAK87B,UAKN97B,EAAKuiC,WAAWjiC,YAAaN,GCP9B,MAAQoF,SAAQA,IAAK7G,OAErB,SAAS4jC,GAAQniC,GAChB,MAAyB,OAAlBA,EAAK87B,UAAuC,OAAlB97B,EAAK87B,SAGxB,SAASkL,GAAiBhnC,EAAMvB,GAC9C,GAAuB,MAAlBuB,EAAK87B,SACT,OAGD,MAAMh0B,EAAQ9H,EAAKV,aAAc,SAEjC,IAAOwI,EACN,OAID,IAAsC,IAAjCA,EAAMvO,QAAS,YACnB,OAGD,MAAMoG,EAAU,kCAAkChG,KAAMmO,GAExD,IAAOnI,EACN,OAGD,IAAI4rB,EAAQnmB,GAAUzF,EAAS,GAAK,IAAO,GAAK,EAEhD,MAAMsnC,EAAWjnC,EAAKsiC,uBAGtB,IAAO2E,IAAc9E,GAAQ8E,GAAa,CAEzC,MAAM31C,EAAO0O,EAAK2jC,YAAYvkC,OAAOhF,MAAO,EAAG,GACzC8sC,EAAY,UAAUttC,KAAMtI,GAC5B61C,EAAc1oC,EAAIC,cAAewoC,EAAY,KAAO,MAErDA,GACJC,EAAYtnC,aAAc,OAAQvO,GAGnC0O,EAAKuiC,WAAWK,aAAcuE,EAAannC,GAG5C,MAAMonC,EAAWpnC,EAAKsiC,uBAChB/6B,EAAW6/B,EAAStL,SACpBuL,EAAW5oC,EAAIC,cAAe,MAEpC,IAAI4oC,EAAgBF,EAMpB,IAHApnC,EAAKM,YAAaN,EAAKf,YAGfe,EAAKf,YACZooC,EAAS9F,YAAavhC,EAAKf,YAI5B,KAAQssB,KACP+b,EAAgBA,EAAchG,WAAagG,EAGtCnF,GAAQmF,KACZA,EAAgBA,EAAchG,WAAagG,GAKtCnF,GAAQmF,KACdA,EAAgBA,EAAc/F,YAC7B9iC,EAAIC,cAAe6I,KAKrB+/B,EAAc/F,YAAa8F,GAG3BrnC,EAAKuiC,WAAWjiC,YAAaN,GCpF9B,IAAI,GAA+BzB,OAAW,GAAQ,KCQtD,MAAM,KAAEgpC,GAAF,KAAQC,IAASjpC,OAER,SAASkpC,GAAgBznC,GACvC,GAAuB,QAAlBA,EAAK87B,SAAV,CASA,GALqC,IAAhC97B,EAAK3B,IAAI9E,QAAS,WACtByG,EAAK3B,IAAM,IAIyB,IAAhC2B,EAAK3B,IAAI9E,QAAS,SAAkB,CACxC,MAAQ6d,EAAYvM,GAAS7K,EAAK3B,IAAIoB,MAAO,MACrCnO,GAAS8lB,EAAWhd,MAAO,GAAIqF,MAAO,KAE9C,IAAOoL,IAAUvZ,EAEhB,YADA0O,EAAK3B,IAAM,IAIZ,IAAIqpC,EAGJ,IACCA,EAAUH,GAAM18B,GACf,MAAQqJ,GAET,YADAlU,EAAK3B,IAAM,IAIZ,MAAMspC,EAAa,IAAItqB,WAAYqqB,EAAQvyC,QAE3C,IAAM,IAAID,EAAI,EAAGA,EAAIyyC,EAAWxyC,OAAQD,IACvCyyC,EAAYzyC,GAAMwyC,EAAQxxC,WAAYhB,GAGvC,MAAMN,EAAOtD,EAAKwE,QAAS,IAAK,KAC1B8xC,EAAO,IAAIJ,GAAM,CAAEG,GAAc/yC,EAAM,CAAEtD,KAAAA,IAE/C0O,EAAK3B,KAAMwpC,EAAAA,GAAAA,eAAeD,GAIN,IAAhB5nC,EAAKsG,QAA+B,IAAftG,EAAKqG,OAC9BrG,EAAKuiC,WAAWjiC,YAAaN,IChDhB,SAAS8nC,GAAe9nC,GACf,QAAlBA,EAAK87B,WAIV97B,EAAKrB,UAAYqiC,GAAiBhhC,EAAKrB,Y,eCJxC,MAAMZ,GAAY,I,OAAIlK,GAAAA,WAAoB,CACzCtC,YAAY,EACZY,QAAQ,EACRH,2BAA2B,EAC3Bb,yBAAyB,EACzBwB,kBAAkB,EAClBT,eAAe,ICLD,SAAS61C,GAAe/nC,GACtC,GAAuB,WAAlBA,EAAK87B,SAAwB,CACjC,MAAMxjC,EAAO0H,EAAKkjC,cAAc8E,eAAgBhoC,EAAK3B,KACrD2B,EAAKuiC,WAAW0F,aAAc3vC,EAAM0H,ICLvB,SAASkoC,GAAsBloC,GACtCA,EAAK+I,IAAmD,IAA7C/I,EAAK+I,GAAGxP,QAAS,yBAInCspC,EAAAA,GAAAA,QAAQ7iC,GCYM,SAASmoC,GAAuBnoC,GAC9C,GAAKA,EAAKI,WAAaJ,EAAK47B,UAC3B,OAUD,IAAIppB,EAASxS,EACb,KAAUwS,EAASA,EAAO+vB,YACzB,GACC/vB,EAAOpS,WAAaoS,EAAOqpB,cACP,QAApBrpB,EAAOspB,SAEP,OAKF,IAAIsM,EAAUpoC,EAAK6K,KAAK/U,QAAS,cAAe,KAKhD,GAAsB,MAAjBsyC,EAAS,GAAc,CAC3B,MAAM7B,EAAkBjB,GAAYtlC,EAAM,YAGvCumC,GAC2B,OAA7BA,EAAgBzK,UAC4B,MAA5CyK,EAAgB5C,YAAYvpC,OAAQ,KAEpCguC,EAAUA,EAAQhuC,MAAO,IAO3B,GAAuC,MAAlCguC,EAASA,EAAQjzC,OAAS,GAAc,CAC5C,MAAMqsC,EAAc8D,GAAYtlC,EAAM,UAGnCwhC,GACuB,OAAzBA,EAAY1F,UACV0F,EAAYphC,WAAaohC,EAAY5F,YAhE1B,OAFYyM,EAmEL7G,EAAYmC,YAAa,KAhEhC,OAAd0E,GACc,OAAdA,GACc,OAAdA,MAgECD,EAAUA,EAAQhuC,MAAO,GAAI,IArEhC,IAA4BiuC,EA2EpBD,EAGNpoC,EAAK6K,KAAOu9B,EAFZpoC,EAAKuiC,WAAWjiC,YAAaN,GCvEhB,SAASsoC,GAAWtoC,GACX,OAAlBA,EAAK87B,WAILwJ,GAAYtlC,EAAM,SAIvBA,EAAKuiC,WAAWjiC,YAAaN,ICdf,SAASuoC,GAAuBvoC,GACvB,MAAlBA,EAAK87B,WAIL97B,EAAKgK,iBAIVhK,EAAKuiC,WAAWjiC,YAAaN,IC2B9B,MAAQxI,QAAOA,IAAK+G,OAUpB,SAASiqC,GAAkBvH,EAAMwH,GAiBhC,OAhBAxH,EAAOoE,GAAgBpE,EAAM,CAC5ByH,GACAlC,GACAP,KAEDhF,GAAO0H,EAAAA,GAAAA,mBAAmB1H,GAAMyD,EAAAA,GAAAA,0BAA0B,SAAW,CACpEkE,QAAQ,IAGFH,IACNxH,EAAOoE,GAAgBpE,EAAM,CAAEkH,GAAuBG,MAIvD9wC,GAAQuE,IAAK,6BAA8BklC,GAEpCA,EAkBD,SAAS4H,GAAT,GAMH,IAN0B,KAC7B5H,EAAO,GADsB,UAE7B6H,EAAY,GAFiB,KAG7BC,EAAO,OAHsB,QAI7B7pC,EAJ6B,mBAK7BupC,GACG,EAcH,GAZAxH,EAAOA,EAAKnrC,QAAS,eAAgB,IAErCmrC,EAAOA,EAAKnrC,QACX,mEACA,IAEDmrC,EAAOA,EAAKnrC,QACX,2DACA,IAIa,WAATizC,EAAoB,CAExB,MAAM5pC,EAAU8hC,GAAc6H,EAE9B,IAAwC,IAAnC3pC,EAAQ5F,QAAS,eACrB,OAAO/F,GAAO2L,GNvEF,IAA4B7G,EMgH1C,GA9BKX,OAAO8U,UAAU6qB,YACrB2J,EAAOA,EAAK3J,cAMRwR,GAAiB7H,IhBnChB,SAAkBA,GACxB,OAAS,gBAAgBrnC,KAAMqnC,GgBkCD+H,CAAS/H,KACtCA,EAAO6H,EAGA,QAAQlvC,KAAMkvC,KN7FoBxwC,EM8Fd2oC,EAA1BA,EN7FKljC,GAAUT,SAhBlB,SAAwChF,GACvC,OAAOA,EAAKxC,QACX,uCACA,CAAEiE,EAAOkvC,EAAIC,EAAIC,IAAS,GAAGF,MAASC,MAASC,MAarBC,CAA+B9wC,KMsG/C,SAATywC,IAC+B,IAA/BD,EAAUvvC,QAAS,OACY,IAA/BuvC,EAAUvvC,QAAS,QACO,IAA1B0nC,EAAK1nC,QAAS,SAEdwvC,EAAO,WAIK,WAATA,EACJ,OAAOP,GAAkBvH,EAAMwH,GAKhC,MAAM7C,EAASC,GAAoB5E,GAK7BoI,EAAgBzD,EAAOzwC,OAAS,EAEtC,GACU,SAAT4zC,IACEM,GbhHW,SAA0BpI,EAAMkF,GAC9C,MAAM1nC,EAAMD,SAASy8B,eAAeC,mBAAoB,IAExDz8B,EAAI28B,KAAKz8B,UAAYsiC,EAErB,MAAM1gC,EAAQxI,MAAM+oC,KAAMriC,EAAI28B,KAAKnxB,UAEnC,OAAS1J,EAAMgT,KAAM+yB,KAAgBJ,GAAW3lC,EAAO4lC,Ga0GtDmD,CAAiBrI,EAAM/hC,GAEvB,OAAOspC,GAAkBvH,EAAMwH,GAGhC,MAAMhE,GAAwBC,EAAAA,GAAAA,0BAA0B,SAClDoB,EAAqBvB,GAAuB,SAE5CxlB,GAASgnB,EAAAA,EAAAA,UACd/lB,EAAAA,EAAAA,SAAS4lB,GAAUI,IAElB,GAAsB,iBAAVA,EACX,OAAOA,EAGR,MAAMZ,EAAU,CACfsD,GACA1B,GACAD,GACA3E,GACAqF,GACAjB,GACA9E,GACAuE,GACA8B,GACA5E,GACAL,GACAgF,IAGK9a,EAAS,IACX8Y,KAEArB,GAeJ,OAZAuB,EAAQX,GAAgBW,EAAOZ,EAASU,GAGxCE,EAAQX,GADRW,EAAQhF,GADRgF,GAAQ2C,EAAAA,GAAAA,mBAAmB3C,EAAOhZ,IAIjC,CAAEmb,GAAuBG,GAAWC,IACpCzC,GAIDtuC,GAAQuE,IAAK,4BAA6BiqC,GAEnCnF,GAAcmF,OAOvB,GACU,SAAT+C,GACkB,IAAlBhqB,EAAO5pB,QACP0d,GAAiBkM,EAAQ,GAAInqB,KAAM,6BAA6B,GAC/D,CAED,MAAM20C,EAAmBT,EAAUhzC,QAAS,iBAAkB,IAE9D,GACsB,KAArByzC,IACsC,IAAtCA,EAAiBhwC,QAAS,MAE1B,OAAOovC,EAAAA,GAAAA,mBACN1Y,GAAmBlR,EAAQ,IAC3B0lB,GAKH,OAAO1lB,ECjOD,SAAS9M,KACf,OAAOwI,EAAAA,EAAAA,QAAQC,IAAczI,gBAQvB,SAASmc,GAAe1f,IAC9BoM,EAAAA,EAAAA,UAAUJ,IAAc0T,cAAe1f,GAUjC,SAAS2f,GAAgBxhB,EAAM8B,IACrCmM,EAAAA,EAAAA,UAAUJ,IAAc2T,eAAgBxhB,EAAM8B,GCbxC,SAAS66B,KAAoD,IAA7BzqB,EAA6B,uDAApB,GAAI0qB,EAAgB,uDAAL,GAC9D,OACC1qB,EAAO5pB,SAAWs0C,EAASt0C,SAC3B0c,EAAAA,EAAAA,OAAO43B,GAAU,CAAC,EAAkC3vC,KAAW,IAA1ClF,EAAF,CAAU80C,GAAkC,EAC9D,MAAMlrB,EAAQO,EAAQjlB,GACtB,OACClF,IAAS4pB,EAAM5pB,MACf40C,GAAuBhrB,EAAMT,YAAa2rB,MAmBvC,SAASC,KAAuD,IAAxB5qB,EAAwB,uDAAf,GAAI0qB,EAAW,uCAEtE,OAAOA,GAIAxgC,EAAAA,EAAAA,KACNwgC,GACA,CAAC,EAA4C3vC,KAAW,IAApDlF,EAAM2c,EAAYm4B,GAAkC,EACvD,MAAMlrB,EAAQO,EAAQjlB,GAEtB,GAAK0kB,GAASA,EAAM5pB,OAASA,EAAO,CACnC,MAAMmpB,EAAc4rB,GACnBnrB,EAAMT,YACN2rB,GAED,MAAO,IAAKlrB,EAAOT,YAAAA,GAOpB,MAAMnQ,EAAYiD,GAAcjc,GAM1Bg1C,EAAsB,CAAE5c,EAAQ/b,KAC9BhD,EAAAA,EAAAA,WAAWgD,GAAQ,CAAE5a,EAAOD,IAC3ByzC,EAAoB7c,EAAQ52B,GAAOC,KAGtCwzC,EAAqB,CAAE19B,EAAY9V,KACxC,OAXyByzC,EAWH39B,EAVuB,UAA7CK,EAAAA,EAAAA,KAAKs9B,EAAqB,CAAE,aAUU70C,EAAAA,EAAAA,SAASoB,IAIvCy5B,EAAAA,GAAAA,gBAAgBz5B,GAbEyzC,CAAAA,GACmB,WAA7Ct9B,EAAAA,EAAAA,KAAKs9B,EAAqB,CAAE,WAevBC,CAAkB59B,IAAgB9V,EAC/BA,EAAM4S,KAAO+gC,GACZJ,EACNz9B,EAAWoxB,MACXyM,KAKI3zC,EA3BkByzC,IAAAA,GA8BpBG,EAAuBL,GAC5Bp9B,EAAAA,EAAAA,KAAKoB,EAAW,CAAE,cAAgB,IAClC2D,GAGD,IACCnD,EACAsvB,GACG5D,GACHllC,EACAq1C,GAcD,YATKr+B,IAAciF,GAAczC,KAChCsvB,EAAkB,CACjBuB,aAAcrqC,EACdu7B,gBAAiB,GACjB6O,2BAA4B,IAE7B5wB,EAAY,gBAGN0P,GACN1P,EACAsvB,EACAiM,GAA+B,GAAID,OA9E9B3qB,ECtDM,SAASmrB,KAetB,OAdAA,GAAW79B,OAAO6zB,QAAU,SAAUj+B,GACpC,IAAK,IAAI/M,EAAI,EAAGA,EAAI8a,UAAU7a,OAAQD,IAAK,CACzC,IAAIiZ,EAAS6B,UAAU9a,GAEvB,IAAK,IAAIkB,KAAO+X,EACV9B,OAAOI,UAAU7Y,eAAekE,KAAKqW,EAAQ/X,KAC/C6L,EAAO7L,GAAO+X,EAAO/X,IAK3B,OAAO6L,IAGOgO,MAAM3Z,KAAM0Z,WCf9B,IAAI,GAA+BzR,OAAW,GAAW,QCWzD,MAAM,SAAE4rC,GAAF,SAAYC,KAAaC,EAAAA,GAAAA,gBAAe,SAyCjCC,IAA0BC,EAAAA,GAAAA,6BACpCC,GACQtb,IACR,oBAACib,GAAD,MACK7d,IACH,oBAACke,EAAD,MAAwBtb,EAAxB,CAAgCub,aAAene,QAKnD,2B","sources":["webpack://wp/./node_modules/showdown/src/options.js","webpack://wp/./node_modules/showdown/src/showdown.js","webpack://wp/./node_modules/showdown/src/helpers.js","webpack://wp/./node_modules/showdown/src/converter.js","webpack://wp/./node_modules/showdown/src/subParsers/anchors.js","webpack://wp/./node_modules/showdown/src/subParsers/autoLinks.js","webpack://wp/./node_modules/showdown/src/subParsers/blockGamut.js","webpack://wp/./node_modules/showdown/src/subParsers/blockQuotes.js","webpack://wp/./node_modules/showdown/src/subParsers/codeBlocks.js","webpack://wp/./node_modules/showdown/src/subParsers/codeSpans.js","webpack://wp/./node_modules/showdown/src/subParsers/completeHTMLDocument.js","webpack://wp/./node_modules/showdown/src/subParsers/detab.js","webpack://wp/./node_modules/showdown/src/subParsers/ellipsis.js","webpack://wp/./node_modules/showdown/src/subParsers/emoji.js","webpack://wp/./node_modules/showdown/src/subParsers/encodeAmpsAndAngles.js","webpack://wp/./node_modules/showdown/src/subParsers/encodeBackslashEscapes.js","webpack://wp/./node_modules/showdown/src/subParsers/encodeCode.js","webpack://wp/./node_modules/showdown/src/subParsers/escapeSpecialCharsWithinTagAttributes.js","webpack://wp/./node_modules/showdown/src/subParsers/githubCodeBlocks.js","webpack://wp/./node_modules/showdown/src/subParsers/hashBlock.js","webpack://wp/./node_modules/showdown/src/subParsers/hashCodeTags.js","webpack://wp/./node_modules/showdown/src/subParsers/hashElement.js","webpack://wp/./node_modules/showdown/src/subParsers/hashHTMLBlocks.js","webpack://wp/./node_modules/showdown/src/subParsers/hashHTMLSpans.js","webpack://wp/./node_modules/showdown/src/subParsers/hashPreCodeTags.js","webpack://wp/./node_modules/showdown/src/subParsers/headers.js","webpack://wp/./node_modules/showdown/src/subParsers/horizontalRule.js","webpack://wp/./node_modules/showdown/src/subParsers/images.js","webpack://wp/./node_modules/showdown/src/subParsers/italicsAndBold.js","webpack://wp/./node_modules/showdown/src/subParsers/lists.js","webpack://wp/./node_modules/showdown/src/subParsers/metadata.js","webpack://wp/./node_modules/showdown/src/subParsers/outdent.js","webpack://wp/./node_modules/showdown/src/subParsers/paragraphs.js","webpack://wp/./node_modules/showdown/src/subParsers/runExtension.js","webpack://wp/./node_modules/showdown/src/subParsers/spanGamut.js","webpack://wp/./node_modules/showdown/src/subParsers/strikethrough.js","webpack://wp/./node_modules/showdown/src/subParsers/stripLinkDefinitions.js","webpack://wp/./node_modules/showdown/src/subParsers/tables.js","webpack://wp/./node_modules/showdown/src/subParsers/underline.js","webpack://wp/./node_modules/showdown/src/subParsers/unescapeSpecialChars.js","webpack://wp/./node_modules/showdown/src/subParsers/makeMarkdown/blockquote.js","webpack://wp/./node_modules/showdown/src/subParsers/makeMarkdown/codeBlock.js","webpack://wp/./node_modules/showdown/src/subParsers/makeMarkdown/codeSpan.js","webpack://wp/./node_modules/showdown/src/subParsers/makeMarkdown/emphasis.js","webpack://wp/./node_modules/showdown/src/subParsers/makeMarkdown/header.js","webpack://wp/./node_modules/showdown/src/subParsers/makeMarkdown/hr.js","webpack://wp/./node_modules/showdown/src/subParsers/makeMarkdown/image.js","webpack://wp/./node_modules/showdown/src/subParsers/makeMarkdown/links.js","webpack://wp/./node_modules/showdown/src/subParsers/makeMarkdown/list.js","webpack://wp/./node_modules/showdown/src/subParsers/makeMarkdown/listItem.js","webpack://wp/./node_modules/showdown/src/subParsers/makeMarkdown/node.js","webpack://wp/./node_modules/showdown/src/subParsers/makeMarkdown/paragraph.js","webpack://wp/./node_modules/showdown/src/subParsers/makeMarkdown/pre.js","webpack://wp/./node_modules/showdown/src/subParsers/makeMarkdown/strikethrough.js","webpack://wp/./node_modules/showdown/src/subParsers/makeMarkdown/strong.js","webpack://wp/./node_modules/showdown/src/subParsers/makeMarkdown/table.js","webpack://wp/./node_modules/showdown/src/subParsers/makeMarkdown/tableCell.js","webpack://wp/./node_modules/showdown/src/subParsers/makeMarkdown/txt.js","webpack://wp/./node_modules/showdown/src/loader.js","webpack://wp/webpack/bootstrap","webpack://wp/webpack/runtime/compat get default export","webpack://wp/webpack/runtime/define property getters","webpack://wp/webpack/runtime/hasOwnProperty shorthand","webpack://wp/webpack/runtime/make namespace object","webpack://wp/external window [\"wp\",\"data\"]","webpack://wp/external window \"lodash\"","webpack://wp/external window [\"wp\",\"i18n\"]","webpack://wp/./packages/blocks/build-module/store/@wordpress/blocks/src/store/reducer.js","webpack://wp/./node_modules/rememo/es/rememo.js","webpack://wp/./packages/blocks/build-module/store/@wordpress/blocks/src/store/selectors.js","webpack://wp/external window [\"wp\",\"hooks\"]","webpack://wp/./packages/blocks/node_modules/colord/index.mjs","webpack://wp/./packages/blocks/node_modules/colord/plugins/a11y.mjs","webpack://wp/external window [\"wp\",\"element\"]","webpack://wp/external window [\"wp\",\"dom\"]","webpack://wp/./packages/blocks/build-module/api/@wordpress/blocks/src/api/constants.js","webpack://wp/./packages/blocks/build-module/api/@wordpress/blocks/src/api/registration.js","webpack://wp/./node_modules/uuid/dist/esm-browser/rng.js","webpack://wp/./node_modules/uuid/dist/esm-browser/stringify.js","webpack://wp/./node_modules/uuid/dist/esm-browser/regex.js","webpack://wp/./node_modules/uuid/dist/esm-browser/validate.js","webpack://wp/./node_modules/uuid/dist/esm-browser/v4.js","webpack://wp/./packages/blocks/build-module/api/@wordpress/blocks/src/api/factory.js","webpack://wp/./packages/blocks/build-module/api/@wordpress/blocks/src/api/utils.js","webpack://wp/./packages/blocks/node_modules/colord/plugins/names.mjs","webpack://wp/./packages/blocks/build-module/store/@wordpress/blocks/src/store/actions.js","webpack://wp/./packages/blocks/build-module/store/@wordpress/blocks/src/store/constants.js","webpack://wp/./packages/blocks/build-module/store/@wordpress/blocks/src/store/index.js","webpack://wp/external window [\"wp\",\"blockSerializationDefaultParser\"]","webpack://wp/external window [\"wp\",\"autop\"]","webpack://wp/external window [\"wp\",\"isShallowEqual\"]","webpack://wp/./packages/blocks/build-module/api/@wordpress/blocks/src/api/serializer.js","webpack://wp/./node_modules/simple-html-tokenizer/src/generated/html5-named-char-refs.ts","webpack://wp/./node_modules/simple-html-tokenizer/src/utils.ts","webpack://wp/./node_modules/simple-html-tokenizer/src/evented-tokenizer.ts","webpack://wp/./node_modules/simple-html-tokenizer/src/tokenizer.ts","webpack://wp/external window [\"wp\",\"htmlEntities\"]","webpack://wp/./packages/blocks/build-module/api/validation/@wordpress/blocks/src/api/validation/logger.js","webpack://wp/./packages/blocks/build-module/api/validation/@wordpress/blocks/src/api/validation/index.js","webpack://wp/./packages/blocks/build-module/api/parser/@wordpress/blocks/src/api/parser/convert-legacy-block.js","webpack://wp/./packages/blocks/build-module/api/parser/@wordpress/blocks/src/api/parser/serialize-raw-block.js","webpack://wp/./node_modules/hpq/es/get-path.js","webpack://wp/./node_modules/hpq/es/index.js","webpack://wp/./packages/blocks/build-module/api/@wordpress/blocks/src/api/node.js","webpack://wp/./packages/blocks/build-module/api/@wordpress/blocks/src/api/children.js","webpack://wp/./packages/blocks/build-module/api/parser/@wordpress/blocks/src/api/parser/get-block-attributes.js","webpack://wp/./packages/blocks/build-module/api/@wordpress/blocks/src/api/matchers.js","webpack://wp/./packages/blocks/build-module/api/parser/@wordpress/blocks/src/api/parser/fix-custom-classname.js","webpack://wp/./packages/blocks/build-module/api/parser/@wordpress/blocks/src/api/parser/apply-built-in-validation-fixes.js","webpack://wp/./packages/blocks/build-module/api/parser/@wordpress/blocks/src/api/parser/index.js","webpack://wp/./packages/blocks/build-module/api/parser/@wordpress/blocks/src/api/parser/apply-block-deprecated-versions.js","webpack://wp/external window [\"wp\",\"deprecated\"]","webpack://wp/./packages/blocks/build-module/api/raw-handling/@wordpress/blocks/src/api/raw-handling/get-raw-transforms.js","webpack://wp/./packages/blocks/build-module/api/raw-handling/@wordpress/blocks/src/api/raw-handling/html-to-blocks.js","webpack://wp/./packages/blocks/build-module/api/raw-handling/@wordpress/blocks/src/api/raw-handling/normalise-blocks.js","webpack://wp/./packages/blocks/build-module/api/raw-handling/@wordpress/blocks/src/api/raw-handling/special-comment-converter.js","webpack://wp/./packages/blocks/build-module/api/raw-handling/@wordpress/blocks/src/api/raw-handling/list-reducer.js","webpack://wp/./packages/blocks/build-module/api/raw-handling/@wordpress/blocks/src/api/raw-handling/blockquote-normaliser.js","webpack://wp/./packages/blocks/build-module/api/raw-handling/@wordpress/blocks/src/api/raw-handling/figure-content-reducer.js","webpack://wp/external window [\"wp\",\"shortcode\"]","webpack://wp/./packages/blocks/build-module/api/raw-handling/@wordpress/blocks/src/api/raw-handling/shortcode-converter.js","webpack://wp/./packages/blocks/build-module/api/raw-handling/@wordpress/blocks/src/api/raw-handling/utils.js","webpack://wp/./packages/blocks/build-module/api/raw-handling/@wordpress/blocks/src/api/raw-handling/index.js","webpack://wp/./packages/blocks/build-module/api/raw-handling/@wordpress/blocks/src/api/raw-handling/comment-remover.js","webpack://wp/./packages/blocks/build-module/api/raw-handling/@wordpress/blocks/src/api/raw-handling/is-inline-content.js","webpack://wp/./packages/blocks/build-module/api/raw-handling/@wordpress/blocks/src/api/raw-handling/phrasing-content-reducer.js","webpack://wp/./packages/blocks/build-module/api/raw-handling/@wordpress/blocks/src/api/raw-handling/head-remover.js","webpack://wp/./packages/blocks/build-module/api/raw-handling/@wordpress/blocks/src/api/raw-handling/ms-list-converter.js","webpack://wp/external window [\"wp\",\"blob\"]","webpack://wp/./packages/blocks/build-module/api/raw-handling/@wordpress/blocks/src/api/raw-handling/image-corrector.js","webpack://wp/./packages/blocks/build-module/api/raw-handling/@wordpress/blocks/src/api/raw-handling/div-normaliser.js","webpack://wp/./packages/blocks/build-module/api/raw-handling/@wordpress/blocks/src/api/raw-handling/markdown-converter.js","webpack://wp/./packages/blocks/build-module/api/raw-handling/@wordpress/blocks/src/api/raw-handling/iframe-remover.js","webpack://wp/./packages/blocks/build-module/api/raw-handling/@wordpress/blocks/src/api/raw-handling/google-docs-uid-remover.js","webpack://wp/./packages/blocks/build-module/api/raw-handling/@wordpress/blocks/src/api/raw-handling/html-formatting-remover.js","webpack://wp/./packages/blocks/build-module/api/raw-handling/@wordpress/blocks/src/api/raw-handling/br-remover.js","webpack://wp/./packages/blocks/build-module/api/raw-handling/@wordpress/blocks/src/api/raw-handling/empty-paragraph-remover.js","webpack://wp/./packages/blocks/build-module/api/raw-handling/@wordpress/blocks/src/api/raw-handling/paste-handler.js","webpack://wp/./packages/blocks/build-module/api/@wordpress/blocks/src/api/categories.js","webpack://wp/./packages/blocks/build-module/api/@wordpress/blocks/src/api/templates.js","webpack://wp/./node_modules/@babel/runtime/helpers/esm/extends.js","webpack://wp/external window [\"wp\",\"compose\"]","webpack://wp/./packages/blocks/build-module/block-content-provider/@wordpress/blocks/src/block-content-provider/index.js"],"sourcesContent":["/**\n * Created by Tivie on 13-07-2015.\n */\n\nfunction getDefaultOpts (simple) {\n 'use strict';\n\n var defaultOptions = {\n omitExtraWLInCodeBlocks: {\n defaultValue: false,\n describe: 'Omit the default extra whiteline added to code blocks',\n type: 'boolean'\n },\n noHeaderId: {\n defaultValue: false,\n describe: 'Turn on/off generated header id',\n type: 'boolean'\n },\n prefixHeaderId: {\n defaultValue: false,\n describe: 'Add a prefix to the generated header ids. Passing a string will prefix that string to the header id. Setting to true will add a generic \\'section-\\' prefix',\n type: 'string'\n },\n rawPrefixHeaderId: {\n defaultValue: false,\n describe: 'Setting this option to true will prevent showdown from modifying the prefix. This might result in malformed IDs (if, for instance, the \" char is used in the prefix)',\n type: 'boolean'\n },\n ghCompatibleHeaderId: {\n defaultValue: false,\n describe: 'Generate header ids compatible with github style (spaces are replaced with dashes, a bunch of non alphanumeric chars are removed)',\n type: 'boolean'\n },\n rawHeaderId: {\n defaultValue: false,\n describe: 'Remove only spaces, \\' and \" from generated header ids (including prefixes), replacing them with dashes (-). WARNING: This might result in malformed ids',\n type: 'boolean'\n },\n headerLevelStart: {\n defaultValue: false,\n describe: 'The header blocks level start',\n type: 'integer'\n },\n parseImgDimensions: {\n defaultValue: false,\n describe: 'Turn on/off image dimension parsing',\n type: 'boolean'\n },\n simplifiedAutoLink: {\n defaultValue: false,\n describe: 'Turn on/off GFM autolink style',\n type: 'boolean'\n },\n excludeTrailingPunctuationFromURLs: {\n defaultValue: false,\n describe: 'Excludes trailing punctuation from links generated with autoLinking',\n type: 'boolean'\n },\n literalMidWordUnderscores: {\n defaultValue: false,\n describe: 'Parse midword underscores as literal underscores',\n type: 'boolean'\n },\n literalMidWordAsterisks: {\n defaultValue: false,\n describe: 'Parse midword asterisks as literal asterisks',\n type: 'boolean'\n },\n strikethrough: {\n defaultValue: false,\n describe: 'Turn on/off strikethrough support',\n type: 'boolean'\n },\n tables: {\n defaultValue: false,\n describe: 'Turn on/off tables support',\n type: 'boolean'\n },\n tablesHeaderId: {\n defaultValue: false,\n describe: 'Add an id to table headers',\n type: 'boolean'\n },\n ghCodeBlocks: {\n defaultValue: true,\n describe: 'Turn on/off GFM fenced code blocks support',\n type: 'boolean'\n },\n tasklists: {\n defaultValue: false,\n describe: 'Turn on/off GFM tasklist support',\n type: 'boolean'\n },\n smoothLivePreview: {\n defaultValue: false,\n describe: 'Prevents weird effects in live previews due to incomplete input',\n type: 'boolean'\n },\n smartIndentationFix: {\n defaultValue: false,\n description: 'Tries to smartly fix indentation in es6 strings',\n type: 'boolean'\n },\n disableForced4SpacesIndentedSublists: {\n defaultValue: false,\n description: 'Disables the requirement of indenting nested sublists by 4 spaces',\n type: 'boolean'\n },\n simpleLineBreaks: {\n defaultValue: false,\n description: 'Parses simple line breaks as
(GFM Style)',\n type: 'boolean'\n },\n requireSpaceBeforeHeadingText: {\n defaultValue: false,\n description: 'Makes adding a space between `#` and the header text mandatory (GFM Style)',\n type: 'boolean'\n },\n ghMentions: {\n defaultValue: false,\n description: 'Enables github @mentions',\n type: 'boolean'\n },\n ghMentionsLink: {\n defaultValue: 'https://github.com/{u}',\n description: 'Changes the link generated by @mentions. Only applies if ghMentions option is enabled.',\n type: 'string'\n },\n encodeEmails: {\n defaultValue: true,\n description: 'Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities',\n type: 'boolean'\n },\n openLinksInNewWindow: {\n defaultValue: false,\n description: 'Open all links in new windows',\n type: 'boolean'\n },\n backslashEscapesHTMLTags: {\n defaultValue: false,\n description: 'Support for HTML Tag escaping. ex: \\
foo\\
',\n type: 'boolean'\n },\n emoji: {\n defaultValue: false,\n description: 'Enable emoji support. Ex: `this is a :smile: emoji`',\n type: 'boolean'\n },\n underline: {\n defaultValue: false,\n description: 'Enable support for underline. Syntax is double or triple underscores: `__underline word__`. With this option enabled, underscores no longer parses into `` and ``',\n type: 'boolean'\n },\n completeHTMLDocument: {\n defaultValue: false,\n description: 'Outputs a complete html document, including ``, `` and `` tags',\n type: 'boolean'\n },\n metadata: {\n defaultValue: false,\n description: 'Enable support for document metadata (defined at the top of the document between `«««` and `»»»` or between `---` and `---`).',\n type: 'boolean'\n },\n splitAdjacentBlockquotes: {\n defaultValue: false,\n description: 'Split adjacent blockquote blocks',\n type: 'boolean'\n }\n };\n if (simple === false) {\n return JSON.parse(JSON.stringify(defaultOptions));\n }\n var ret = {};\n for (var opt in defaultOptions) {\n if (defaultOptions.hasOwnProperty(opt)) {\n ret[opt] = defaultOptions[opt].defaultValue;\n }\n }\n return ret;\n}\n\nfunction allOptionsOn () {\n 'use strict';\n var options = getDefaultOpts(true),\n ret = {};\n for (var opt in options) {\n if (options.hasOwnProperty(opt)) {\n ret[opt] = true;\n }\n }\n return ret;\n}\n","/**\n * Created by Tivie on 06-01-2015.\n */\n\n// Private properties\nvar showdown = {},\n parsers = {},\n extensions = {},\n globalOptions = getDefaultOpts(true),\n setFlavor = 'vanilla',\n flavor = {\n github: {\n omitExtraWLInCodeBlocks: true,\n simplifiedAutoLink: true,\n excludeTrailingPunctuationFromURLs: true,\n literalMidWordUnderscores: true,\n strikethrough: true,\n tables: true,\n tablesHeaderId: true,\n ghCodeBlocks: true,\n tasklists: true,\n disableForced4SpacesIndentedSublists: true,\n simpleLineBreaks: true,\n requireSpaceBeforeHeadingText: true,\n ghCompatibleHeaderId: true,\n ghMentions: true,\n backslashEscapesHTMLTags: true,\n emoji: true,\n splitAdjacentBlockquotes: true\n },\n original: {\n noHeaderId: true,\n ghCodeBlocks: false\n },\n ghost: {\n omitExtraWLInCodeBlocks: true,\n parseImgDimensions: true,\n simplifiedAutoLink: true,\n excludeTrailingPunctuationFromURLs: true,\n literalMidWordUnderscores: true,\n strikethrough: true,\n tables: true,\n tablesHeaderId: true,\n ghCodeBlocks: true,\n tasklists: true,\n smoothLivePreview: true,\n simpleLineBreaks: true,\n requireSpaceBeforeHeadingText: true,\n ghMentions: false,\n encodeEmails: true\n },\n vanilla: getDefaultOpts(true),\n allOn: allOptionsOn()\n };\n\n/**\n * helper namespace\n * @type {{}}\n */\nshowdown.helper = {};\n\n/**\n * TODO LEGACY SUPPORT CODE\n * @type {{}}\n */\nshowdown.extensions = {};\n\n/**\n * Set a global option\n * @static\n * @param {string} key\n * @param {*} value\n * @returns {showdown}\n */\nshowdown.setOption = function (key, value) {\n 'use strict';\n globalOptions[key] = value;\n return this;\n};\n\n/**\n * Get a global option\n * @static\n * @param {string} key\n * @returns {*}\n */\nshowdown.getOption = function (key) {\n 'use strict';\n return globalOptions[key];\n};\n\n/**\n * Get the global options\n * @static\n * @returns {{}}\n */\nshowdown.getOptions = function () {\n 'use strict';\n return globalOptions;\n};\n\n/**\n * Reset global options to the default values\n * @static\n */\nshowdown.resetOptions = function () {\n 'use strict';\n globalOptions = getDefaultOpts(true);\n};\n\n/**\n * Set the flavor showdown should use as default\n * @param {string} name\n */\nshowdown.setFlavor = function (name) {\n 'use strict';\n if (!flavor.hasOwnProperty(name)) {\n throw Error(name + ' flavor was not found');\n }\n showdown.resetOptions();\n var preset = flavor[name];\n setFlavor = name;\n for (var option in preset) {\n if (preset.hasOwnProperty(option)) {\n globalOptions[option] = preset[option];\n }\n }\n};\n\n/**\n * Get the currently set flavor\n * @returns {string}\n */\nshowdown.getFlavor = function () {\n 'use strict';\n return setFlavor;\n};\n\n/**\n * Get the options of a specified flavor. Returns undefined if the flavor was not found\n * @param {string} name Name of the flavor\n * @returns {{}|undefined}\n */\nshowdown.getFlavorOptions = function (name) {\n 'use strict';\n if (flavor.hasOwnProperty(name)) {\n return flavor[name];\n }\n};\n\n/**\n * Get the default options\n * @static\n * @param {boolean} [simple=true]\n * @returns {{}}\n */\nshowdown.getDefaultOptions = function (simple) {\n 'use strict';\n return getDefaultOpts(simple);\n};\n\n/**\n * Get or set a subParser\n *\n * subParser(name) - Get a registered subParser\n * subParser(name, func) - Register a subParser\n * @static\n * @param {string} name\n * @param {function} [func]\n * @returns {*}\n */\nshowdown.subParser = function (name, func) {\n 'use strict';\n if (showdown.helper.isString(name)) {\n if (typeof func !== 'undefined') {\n parsers[name] = func;\n } else {\n if (parsers.hasOwnProperty(name)) {\n return parsers[name];\n } else {\n throw Error('SubParser named ' + name + ' not registered!');\n }\n }\n }\n};\n\n/**\n * Gets or registers an extension\n * @static\n * @param {string} name\n * @param {object|function=} ext\n * @returns {*}\n */\nshowdown.extension = function (name, ext) {\n 'use strict';\n\n if (!showdown.helper.isString(name)) {\n throw Error('Extension \\'name\\' must be a string');\n }\n\n name = showdown.helper.stdExtName(name);\n\n // Getter\n if (showdown.helper.isUndefined(ext)) {\n if (!extensions.hasOwnProperty(name)) {\n throw Error('Extension named ' + name + ' is not registered!');\n }\n return extensions[name];\n\n // Setter\n } else {\n // Expand extension if it's wrapped in a function\n if (typeof ext === 'function') {\n ext = ext();\n }\n\n // Ensure extension is an array\n if (!showdown.helper.isArray(ext)) {\n ext = [ext];\n }\n\n var validExtension = validate(ext, name);\n\n if (validExtension.valid) {\n extensions[name] = ext;\n } else {\n throw Error(validExtension.error);\n }\n }\n};\n\n/**\n * Gets all extensions registered\n * @returns {{}}\n */\nshowdown.getAllExtensions = function () {\n 'use strict';\n return extensions;\n};\n\n/**\n * Remove an extension\n * @param {string} name\n */\nshowdown.removeExtension = function (name) {\n 'use strict';\n delete extensions[name];\n};\n\n/**\n * Removes all extensions\n */\nshowdown.resetExtensions = function () {\n 'use strict';\n extensions = {};\n};\n\n/**\n * Validate extension\n * @param {array} extension\n * @param {string} name\n * @returns {{valid: boolean, error: string}}\n */\nfunction validate (extension, name) {\n 'use strict';\n\n var errMsg = (name) ? 'Error in ' + name + ' extension->' : 'Error in unnamed extension',\n ret = {\n valid: true,\n error: ''\n };\n\n if (!showdown.helper.isArray(extension)) {\n extension = [extension];\n }\n\n for (var i = 0; i < extension.length; ++i) {\n var baseMsg = errMsg + ' sub-extension ' + i + ': ',\n ext = extension[i];\n if (typeof ext !== 'object') {\n ret.valid = false;\n ret.error = baseMsg + 'must be an object, but ' + typeof ext + ' given';\n return ret;\n }\n\n if (!showdown.helper.isString(ext.type)) {\n ret.valid = false;\n ret.error = baseMsg + 'property \"type\" must be a string, but ' + typeof ext.type + ' given';\n return ret;\n }\n\n var type = ext.type = ext.type.toLowerCase();\n\n // normalize extension type\n if (type === 'language') {\n type = ext.type = 'lang';\n }\n\n if (type === 'html') {\n type = ext.type = 'output';\n }\n\n if (type !== 'lang' && type !== 'output' && type !== 'listener') {\n ret.valid = false;\n ret.error = baseMsg + 'type ' + type + ' is not recognized. Valid values: \"lang/language\", \"output/html\" or \"listener\"';\n return ret;\n }\n\n if (type === 'listener') {\n if (showdown.helper.isUndefined(ext.listeners)) {\n ret.valid = false;\n ret.error = baseMsg + '. Extensions of type \"listener\" must have a property called \"listeners\"';\n return ret;\n }\n } else {\n if (showdown.helper.isUndefined(ext.filter) && showdown.helper.isUndefined(ext.regex)) {\n ret.valid = false;\n ret.error = baseMsg + type + ' extensions must define either a \"regex\" property or a \"filter\" method';\n return ret;\n }\n }\n\n if (ext.listeners) {\n if (typeof ext.listeners !== 'object') {\n ret.valid = false;\n ret.error = baseMsg + '\"listeners\" property must be an object but ' + typeof ext.listeners + ' given';\n return ret;\n }\n for (var ln in ext.listeners) {\n if (ext.listeners.hasOwnProperty(ln)) {\n if (typeof ext.listeners[ln] !== 'function') {\n ret.valid = false;\n ret.error = baseMsg + '\"listeners\" property must be an hash of [event name]: [callback]. listeners.' + ln +\n ' must be a function but ' + typeof ext.listeners[ln] + ' given';\n return ret;\n }\n }\n }\n }\n\n if (ext.filter) {\n if (typeof ext.filter !== 'function') {\n ret.valid = false;\n ret.error = baseMsg + '\"filter\" must be a function, but ' + typeof ext.filter + ' given';\n return ret;\n }\n } else if (ext.regex) {\n if (showdown.helper.isString(ext.regex)) {\n ext.regex = new RegExp(ext.regex, 'g');\n }\n if (!(ext.regex instanceof RegExp)) {\n ret.valid = false;\n ret.error = baseMsg + '\"regex\" property must either be a string or a RegExp object, but ' + typeof ext.regex + ' given';\n return ret;\n }\n if (showdown.helper.isUndefined(ext.replace)) {\n ret.valid = false;\n ret.error = baseMsg + '\"regex\" extensions must implement a replace string or function';\n return ret;\n }\n }\n }\n return ret;\n}\n\n/**\n * Validate extension\n * @param {object} ext\n * @returns {boolean}\n */\nshowdown.validateExtension = function (ext) {\n 'use strict';\n\n var validateExtension = validate(ext, null);\n if (!validateExtension.valid) {\n console.warn(validateExtension.error);\n return false;\n }\n return true;\n};\n","/**\n * showdownjs helper functions\n */\n\nif (!showdown.hasOwnProperty('helper')) {\n showdown.helper = {};\n}\n\n/**\n * Check if var is string\n * @static\n * @param {string} a\n * @returns {boolean}\n */\nshowdown.helper.isString = function (a) {\n 'use strict';\n return (typeof a === 'string' || a instanceof String);\n};\n\n/**\n * Check if var is a function\n * @static\n * @param {*} a\n * @returns {boolean}\n */\nshowdown.helper.isFunction = function (a) {\n 'use strict';\n var getType = {};\n return a && getType.toString.call(a) === '[object Function]';\n};\n\n/**\n * isArray helper function\n * @static\n * @param {*} a\n * @returns {boolean}\n */\nshowdown.helper.isArray = function (a) {\n 'use strict';\n return Array.isArray(a);\n};\n\n/**\n * Check if value is undefined\n * @static\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n */\nshowdown.helper.isUndefined = function (value) {\n 'use strict';\n return typeof value === 'undefined';\n};\n\n/**\n * ForEach helper function\n * Iterates over Arrays and Objects (own properties only)\n * @static\n * @param {*} obj\n * @param {function} callback Accepts 3 params: 1. value, 2. key, 3. the original array/object\n */\nshowdown.helper.forEach = function (obj, callback) {\n 'use strict';\n // check if obj is defined\n if (showdown.helper.isUndefined(obj)) {\n throw new Error('obj param is required');\n }\n\n if (showdown.helper.isUndefined(callback)) {\n throw new Error('callback param is required');\n }\n\n if (!showdown.helper.isFunction(callback)) {\n throw new Error('callback param must be a function/closure');\n }\n\n if (typeof obj.forEach === 'function') {\n obj.forEach(callback);\n } else if (showdown.helper.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n callback(obj[i], i, obj);\n }\n } else if (typeof (obj) === 'object') {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n callback(obj[prop], prop, obj);\n }\n }\n } else {\n throw new Error('obj does not seem to be an array or an iterable object');\n }\n};\n\n/**\n * Standardidize extension name\n * @static\n * @param {string} s extension name\n * @returns {string}\n */\nshowdown.helper.stdExtName = function (s) {\n 'use strict';\n return s.replace(/[_?*+\\/\\\\.^-]/g, '').replace(/\\s/g, '').toLowerCase();\n};\n\nfunction escapeCharactersCallback (wholeMatch, m1) {\n 'use strict';\n var charCodeToEscape = m1.charCodeAt(0);\n return '¨E' + charCodeToEscape + 'E';\n}\n\n/**\n * Callback used to escape characters when passing through String.replace\n * @static\n * @param {string} wholeMatch\n * @param {string} m1\n * @returns {string}\n */\nshowdown.helper.escapeCharactersCallback = escapeCharactersCallback;\n\n/**\n * Escape characters in a string\n * @static\n * @param {string} text\n * @param {string} charsToEscape\n * @param {boolean} afterBackslash\n * @returns {XML|string|void|*}\n */\nshowdown.helper.escapeCharacters = function (text, charsToEscape, afterBackslash) {\n 'use strict';\n // First we have to escape the escape characters so that\n // we can build a character class out of them\n var regexString = '([' + charsToEscape.replace(/([\\[\\]\\\\])/g, '\\\\$1') + '])';\n\n if (afterBackslash) {\n regexString = '\\\\\\\\' + regexString;\n }\n\n var regex = new RegExp(regexString, 'g');\n text = text.replace(regex, escapeCharactersCallback);\n\n return text;\n};\n\n/**\n * Unescape HTML entities\n * @param txt\n * @returns {string}\n */\nshowdown.helper.unescapeHTMLEntities = function (txt) {\n 'use strict';\n\n return txt\n .replace(/"/g, '\"')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&');\n};\n\nvar rgxFindMatchPos = function (str, left, right, flags) {\n 'use strict';\n var f = flags || '',\n g = f.indexOf('g') > -1,\n x = new RegExp(left + '|' + right, 'g' + f.replace(/g/g, '')),\n l = new RegExp(left, f.replace(/g/g, '')),\n pos = [],\n t, s, m, start, end;\n\n do {\n t = 0;\n while ((m = x.exec(str))) {\n if (l.test(m[0])) {\n if (!(t++)) {\n s = x.lastIndex;\n start = s - m[0].length;\n }\n } else if (t) {\n if (!--t) {\n end = m.index + m[0].length;\n var obj = {\n left: {start: start, end: s},\n match: {start: s, end: m.index},\n right: {start: m.index, end: end},\n wholeMatch: {start: start, end: end}\n };\n pos.push(obj);\n if (!g) {\n return pos;\n }\n }\n }\n }\n } while (t && (x.lastIndex = s));\n\n return pos;\n};\n\n/**\n * matchRecursiveRegExp\n *\n * (c) 2007 Steven Levithan \n * MIT License\n *\n * Accepts a string to search, a left and right format delimiter\n * as regex patterns, and optional regex flags. Returns an array\n * of matches, allowing nested instances of left/right delimiters.\n * Use the \"g\" flag to return all matches, otherwise only the\n * first is returned. Be careful to ensure that the left and\n * right format delimiters produce mutually exclusive matches.\n * Backreferences are not supported within the right delimiter\n * due to how it is internally combined with the left delimiter.\n * When matching strings whose format delimiters are unbalanced\n * to the left or right, the output is intentionally as a\n * conventional regex library with recursion support would\n * produce, e.g. \"<\" and \">\" both produce [\"x\"] when using\n * \"<\" and \">\" as the delimiters (both strings contain a single,\n * balanced instance of \"\").\n *\n * examples:\n * matchRecursiveRegExp(\"test\", \"\\\\(\", \"\\\\)\")\n * returns: []\n * matchRecursiveRegExp(\">>t<>\", \"<\", \">\", \"g\")\n * returns: [\"t<>\", \"\"]\n * matchRecursiveRegExp(\"
test
\", \"]*>\", \"\", \"gi\")\n * returns: [\"test\"]\n */\nshowdown.helper.matchRecursiveRegExp = function (str, left, right, flags) {\n 'use strict';\n\n var matchPos = rgxFindMatchPos (str, left, right, flags),\n results = [];\n\n for (var i = 0; i < matchPos.length; ++i) {\n results.push([\n str.slice(matchPos[i].wholeMatch.start, matchPos[i].wholeMatch.end),\n str.slice(matchPos[i].match.start, matchPos[i].match.end),\n str.slice(matchPos[i].left.start, matchPos[i].left.end),\n str.slice(matchPos[i].right.start, matchPos[i].right.end)\n ]);\n }\n return results;\n};\n\n/**\n *\n * @param {string} str\n * @param {string|function} replacement\n * @param {string} left\n * @param {string} right\n * @param {string} flags\n * @returns {string}\n */\nshowdown.helper.replaceRecursiveRegExp = function (str, replacement, left, right, flags) {\n 'use strict';\n\n if (!showdown.helper.isFunction(replacement)) {\n var repStr = replacement;\n replacement = function () {\n return repStr;\n };\n }\n\n var matchPos = rgxFindMatchPos(str, left, right, flags),\n finalStr = str,\n lng = matchPos.length;\n\n if (lng > 0) {\n var bits = [];\n if (matchPos[0].wholeMatch.start !== 0) {\n bits.push(str.slice(0, matchPos[0].wholeMatch.start));\n }\n for (var i = 0; i < lng; ++i) {\n bits.push(\n replacement(\n str.slice(matchPos[i].wholeMatch.start, matchPos[i].wholeMatch.end),\n str.slice(matchPos[i].match.start, matchPos[i].match.end),\n str.slice(matchPos[i].left.start, matchPos[i].left.end),\n str.slice(matchPos[i].right.start, matchPos[i].right.end)\n )\n );\n if (i < lng - 1) {\n bits.push(str.slice(matchPos[i].wholeMatch.end, matchPos[i + 1].wholeMatch.start));\n }\n }\n if (matchPos[lng - 1].wholeMatch.end < str.length) {\n bits.push(str.slice(matchPos[lng - 1].wholeMatch.end));\n }\n finalStr = bits.join('');\n }\n return finalStr;\n};\n\n/**\n * Returns the index within the passed String object of the first occurrence of the specified regex,\n * starting the search at fromIndex. Returns -1 if the value is not found.\n *\n * @param {string} str string to search\n * @param {RegExp} regex Regular expression to search\n * @param {int} [fromIndex = 0] Index to start the search\n * @returns {Number}\n * @throws InvalidArgumentError\n */\nshowdown.helper.regexIndexOf = function (str, regex, fromIndex) {\n 'use strict';\n if (!showdown.helper.isString(str)) {\n throw 'InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string';\n }\n if (regex instanceof RegExp === false) {\n throw 'InvalidArgumentError: second parameter of showdown.helper.regexIndexOf function must be an instance of RegExp';\n }\n var indexOf = str.substring(fromIndex || 0).search(regex);\n return (indexOf >= 0) ? (indexOf + (fromIndex || 0)) : indexOf;\n};\n\n/**\n * Splits the passed string object at the defined index, and returns an array composed of the two substrings\n * @param {string} str string to split\n * @param {int} index index to split string at\n * @returns {[string,string]}\n * @throws InvalidArgumentError\n */\nshowdown.helper.splitAtIndex = function (str, index) {\n 'use strict';\n if (!showdown.helper.isString(str)) {\n throw 'InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string';\n }\n return [str.substring(0, index), str.substring(index)];\n};\n\n/**\n * Obfuscate an e-mail address through the use of Character Entities,\n * transforming ASCII characters into their equivalent decimal or hex entities.\n *\n * Since it has a random component, subsequent calls to this function produce different results\n *\n * @param {string} mail\n * @returns {string}\n */\nshowdown.helper.encodeEmailAddress = function (mail) {\n 'use strict';\n var encode = [\n function (ch) {\n return '&#' + ch.charCodeAt(0) + ';';\n },\n function (ch) {\n return '&#x' + ch.charCodeAt(0).toString(16) + ';';\n },\n function (ch) {\n return ch;\n }\n ];\n\n mail = mail.replace(/./g, function (ch) {\n if (ch === '@') {\n // this *must* be encoded. I insist.\n ch = encode[Math.floor(Math.random() * 2)](ch);\n } else {\n var r = Math.random();\n // roughly 10% raw, 45% hex, 45% dec\n ch = (\n r > 0.9 ? encode[2](ch) : r > 0.45 ? encode[1](ch) : encode[0](ch)\n );\n }\n return ch;\n });\n\n return mail;\n};\n\n/**\n *\n * @param str\n * @param targetLength\n * @param padString\n * @returns {string}\n */\nshowdown.helper.padEnd = function padEnd (str, targetLength, padString) {\n 'use strict';\n /*jshint bitwise: false*/\n // eslint-disable-next-line space-infix-ops\n targetLength = targetLength>>0; //floor if number or convert non-number to 0;\n /*jshint bitwise: true*/\n padString = String(padString || ' ');\n if (str.length > targetLength) {\n return String(str);\n } else {\n targetLength = targetLength - str.length;\n if (targetLength > padString.length) {\n padString += padString.repeat(targetLength / padString.length); //append to original to ensure we are longer than needed\n }\n return String(str) + padString.slice(0,targetLength);\n }\n};\n\n/**\n * POLYFILLS\n */\n// use this instead of builtin is undefined for IE8 compatibility\nif (typeof console === 'undefined') {\n console = {\n warn: function (msg) {\n 'use strict';\n alert(msg);\n },\n log: function (msg) {\n 'use strict';\n alert(msg);\n },\n error: function (msg) {\n 'use strict';\n throw msg;\n }\n };\n}\n\n/**\n * Common regexes.\n * We declare some common regexes to improve performance\n */\nshowdown.helper.regexes = {\n asteriskDashAndColon: /([*_:~])/g\n};\n\n/**\n * EMOJIS LIST\n */\nshowdown.helper.emojis = {\n '+1':'\\ud83d\\udc4d',\n '-1':'\\ud83d\\udc4e',\n '100':'\\ud83d\\udcaf',\n '1234':'\\ud83d\\udd22',\n '1st_place_medal':'\\ud83e\\udd47',\n '2nd_place_medal':'\\ud83e\\udd48',\n '3rd_place_medal':'\\ud83e\\udd49',\n '8ball':'\\ud83c\\udfb1',\n 'a':'\\ud83c\\udd70\\ufe0f',\n 'ab':'\\ud83c\\udd8e',\n 'abc':'\\ud83d\\udd24',\n 'abcd':'\\ud83d\\udd21',\n 'accept':'\\ud83c\\ude51',\n 'aerial_tramway':'\\ud83d\\udea1',\n 'airplane':'\\u2708\\ufe0f',\n 'alarm_clock':'\\u23f0',\n 'alembic':'\\u2697\\ufe0f',\n 'alien':'\\ud83d\\udc7d',\n 'ambulance':'\\ud83d\\ude91',\n 'amphora':'\\ud83c\\udffa',\n 'anchor':'\\u2693\\ufe0f',\n 'angel':'\\ud83d\\udc7c',\n 'anger':'\\ud83d\\udca2',\n 'angry':'\\ud83d\\ude20',\n 'anguished':'\\ud83d\\ude27',\n 'ant':'\\ud83d\\udc1c',\n 'apple':'\\ud83c\\udf4e',\n 'aquarius':'\\u2652\\ufe0f',\n 'aries':'\\u2648\\ufe0f',\n 'arrow_backward':'\\u25c0\\ufe0f',\n 'arrow_double_down':'\\u23ec',\n 'arrow_double_up':'\\u23eb',\n 'arrow_down':'\\u2b07\\ufe0f',\n 'arrow_down_small':'\\ud83d\\udd3d',\n 'arrow_forward':'\\u25b6\\ufe0f',\n 'arrow_heading_down':'\\u2935\\ufe0f',\n 'arrow_heading_up':'\\u2934\\ufe0f',\n 'arrow_left':'\\u2b05\\ufe0f',\n 'arrow_lower_left':'\\u2199\\ufe0f',\n 'arrow_lower_right':'\\u2198\\ufe0f',\n 'arrow_right':'\\u27a1\\ufe0f',\n 'arrow_right_hook':'\\u21aa\\ufe0f',\n 'arrow_up':'\\u2b06\\ufe0f',\n 'arrow_up_down':'\\u2195\\ufe0f',\n 'arrow_up_small':'\\ud83d\\udd3c',\n 'arrow_upper_left':'\\u2196\\ufe0f',\n 'arrow_upper_right':'\\u2197\\ufe0f',\n 'arrows_clockwise':'\\ud83d\\udd03',\n 'arrows_counterclockwise':'\\ud83d\\udd04',\n 'art':'\\ud83c\\udfa8',\n 'articulated_lorry':'\\ud83d\\ude9b',\n 'artificial_satellite':'\\ud83d\\udef0',\n 'astonished':'\\ud83d\\ude32',\n 'athletic_shoe':'\\ud83d\\udc5f',\n 'atm':'\\ud83c\\udfe7',\n 'atom_symbol':'\\u269b\\ufe0f',\n 'avocado':'\\ud83e\\udd51',\n 'b':'\\ud83c\\udd71\\ufe0f',\n 'baby':'\\ud83d\\udc76',\n 'baby_bottle':'\\ud83c\\udf7c',\n 'baby_chick':'\\ud83d\\udc24',\n 'baby_symbol':'\\ud83d\\udebc',\n 'back':'\\ud83d\\udd19',\n 'bacon':'\\ud83e\\udd53',\n 'badminton':'\\ud83c\\udff8',\n 'baggage_claim':'\\ud83d\\udec4',\n 'baguette_bread':'\\ud83e\\udd56',\n 'balance_scale':'\\u2696\\ufe0f',\n 'balloon':'\\ud83c\\udf88',\n 'ballot_box':'\\ud83d\\uddf3',\n 'ballot_box_with_check':'\\u2611\\ufe0f',\n 'bamboo':'\\ud83c\\udf8d',\n 'banana':'\\ud83c\\udf4c',\n 'bangbang':'\\u203c\\ufe0f',\n 'bank':'\\ud83c\\udfe6',\n 'bar_chart':'\\ud83d\\udcca',\n 'barber':'\\ud83d\\udc88',\n 'baseball':'\\u26be\\ufe0f',\n 'basketball':'\\ud83c\\udfc0',\n 'basketball_man':'\\u26f9\\ufe0f',\n 'basketball_woman':'\\u26f9\\ufe0f‍\\u2640\\ufe0f',\n 'bat':'\\ud83e\\udd87',\n 'bath':'\\ud83d\\udec0',\n 'bathtub':'\\ud83d\\udec1',\n 'battery':'\\ud83d\\udd0b',\n 'beach_umbrella':'\\ud83c\\udfd6',\n 'bear':'\\ud83d\\udc3b',\n 'bed':'\\ud83d\\udecf',\n 'bee':'\\ud83d\\udc1d',\n 'beer':'\\ud83c\\udf7a',\n 'beers':'\\ud83c\\udf7b',\n 'beetle':'\\ud83d\\udc1e',\n 'beginner':'\\ud83d\\udd30',\n 'bell':'\\ud83d\\udd14',\n 'bellhop_bell':'\\ud83d\\udece',\n 'bento':'\\ud83c\\udf71',\n 'biking_man':'\\ud83d\\udeb4',\n 'bike':'\\ud83d\\udeb2',\n 'biking_woman':'\\ud83d\\udeb4‍\\u2640\\ufe0f',\n 'bikini':'\\ud83d\\udc59',\n 'biohazard':'\\u2623\\ufe0f',\n 'bird':'\\ud83d\\udc26',\n 'birthday':'\\ud83c\\udf82',\n 'black_circle':'\\u26ab\\ufe0f',\n 'black_flag':'\\ud83c\\udff4',\n 'black_heart':'\\ud83d\\udda4',\n 'black_joker':'\\ud83c\\udccf',\n 'black_large_square':'\\u2b1b\\ufe0f',\n 'black_medium_small_square':'\\u25fe\\ufe0f',\n 'black_medium_square':'\\u25fc\\ufe0f',\n 'black_nib':'\\u2712\\ufe0f',\n 'black_small_square':'\\u25aa\\ufe0f',\n 'black_square_button':'\\ud83d\\udd32',\n 'blonde_man':'\\ud83d\\udc71',\n 'blonde_woman':'\\ud83d\\udc71‍\\u2640\\ufe0f',\n 'blossom':'\\ud83c\\udf3c',\n 'blowfish':'\\ud83d\\udc21',\n 'blue_book':'\\ud83d\\udcd8',\n 'blue_car':'\\ud83d\\ude99',\n 'blue_heart':'\\ud83d\\udc99',\n 'blush':'\\ud83d\\ude0a',\n 'boar':'\\ud83d\\udc17',\n 'boat':'\\u26f5\\ufe0f',\n 'bomb':'\\ud83d\\udca3',\n 'book':'\\ud83d\\udcd6',\n 'bookmark':'\\ud83d\\udd16',\n 'bookmark_tabs':'\\ud83d\\udcd1',\n 'books':'\\ud83d\\udcda',\n 'boom':'\\ud83d\\udca5',\n 'boot':'\\ud83d\\udc62',\n 'bouquet':'\\ud83d\\udc90',\n 'bowing_man':'\\ud83d\\ude47',\n 'bow_and_arrow':'\\ud83c\\udff9',\n 'bowing_woman':'\\ud83d\\ude47‍\\u2640\\ufe0f',\n 'bowling':'\\ud83c\\udfb3',\n 'boxing_glove':'\\ud83e\\udd4a',\n 'boy':'\\ud83d\\udc66',\n 'bread':'\\ud83c\\udf5e',\n 'bride_with_veil':'\\ud83d\\udc70',\n 'bridge_at_night':'\\ud83c\\udf09',\n 'briefcase':'\\ud83d\\udcbc',\n 'broken_heart':'\\ud83d\\udc94',\n 'bug':'\\ud83d\\udc1b',\n 'building_construction':'\\ud83c\\udfd7',\n 'bulb':'\\ud83d\\udca1',\n 'bullettrain_front':'\\ud83d\\ude85',\n 'bullettrain_side':'\\ud83d\\ude84',\n 'burrito':'\\ud83c\\udf2f',\n 'bus':'\\ud83d\\ude8c',\n 'business_suit_levitating':'\\ud83d\\udd74',\n 'busstop':'\\ud83d\\ude8f',\n 'bust_in_silhouette':'\\ud83d\\udc64',\n 'busts_in_silhouette':'\\ud83d\\udc65',\n 'butterfly':'\\ud83e\\udd8b',\n 'cactus':'\\ud83c\\udf35',\n 'cake':'\\ud83c\\udf70',\n 'calendar':'\\ud83d\\udcc6',\n 'call_me_hand':'\\ud83e\\udd19',\n 'calling':'\\ud83d\\udcf2',\n 'camel':'\\ud83d\\udc2b',\n 'camera':'\\ud83d\\udcf7',\n 'camera_flash':'\\ud83d\\udcf8',\n 'camping':'\\ud83c\\udfd5',\n 'cancer':'\\u264b\\ufe0f',\n 'candle':'\\ud83d\\udd6f',\n 'candy':'\\ud83c\\udf6c',\n 'canoe':'\\ud83d\\udef6',\n 'capital_abcd':'\\ud83d\\udd20',\n 'capricorn':'\\u2651\\ufe0f',\n 'car':'\\ud83d\\ude97',\n 'card_file_box':'\\ud83d\\uddc3',\n 'card_index':'\\ud83d\\udcc7',\n 'card_index_dividers':'\\ud83d\\uddc2',\n 'carousel_horse':'\\ud83c\\udfa0',\n 'carrot':'\\ud83e\\udd55',\n 'cat':'\\ud83d\\udc31',\n 'cat2':'\\ud83d\\udc08',\n 'cd':'\\ud83d\\udcbf',\n 'chains':'\\u26d3',\n 'champagne':'\\ud83c\\udf7e',\n 'chart':'\\ud83d\\udcb9',\n 'chart_with_downwards_trend':'\\ud83d\\udcc9',\n 'chart_with_upwards_trend':'\\ud83d\\udcc8',\n 'checkered_flag':'\\ud83c\\udfc1',\n 'cheese':'\\ud83e\\uddc0',\n 'cherries':'\\ud83c\\udf52',\n 'cherry_blossom':'\\ud83c\\udf38',\n 'chestnut':'\\ud83c\\udf30',\n 'chicken':'\\ud83d\\udc14',\n 'children_crossing':'\\ud83d\\udeb8',\n 'chipmunk':'\\ud83d\\udc3f',\n 'chocolate_bar':'\\ud83c\\udf6b',\n 'christmas_tree':'\\ud83c\\udf84',\n 'church':'\\u26ea\\ufe0f',\n 'cinema':'\\ud83c\\udfa6',\n 'circus_tent':'\\ud83c\\udfaa',\n 'city_sunrise':'\\ud83c\\udf07',\n 'city_sunset':'\\ud83c\\udf06',\n 'cityscape':'\\ud83c\\udfd9',\n 'cl':'\\ud83c\\udd91',\n 'clamp':'\\ud83d\\udddc',\n 'clap':'\\ud83d\\udc4f',\n 'clapper':'\\ud83c\\udfac',\n 'classical_building':'\\ud83c\\udfdb',\n 'clinking_glasses':'\\ud83e\\udd42',\n 'clipboard':'\\ud83d\\udccb',\n 'clock1':'\\ud83d\\udd50',\n 'clock10':'\\ud83d\\udd59',\n 'clock1030':'\\ud83d\\udd65',\n 'clock11':'\\ud83d\\udd5a',\n 'clock1130':'\\ud83d\\udd66',\n 'clock12':'\\ud83d\\udd5b',\n 'clock1230':'\\ud83d\\udd67',\n 'clock130':'\\ud83d\\udd5c',\n 'clock2':'\\ud83d\\udd51',\n 'clock230':'\\ud83d\\udd5d',\n 'clock3':'\\ud83d\\udd52',\n 'clock330':'\\ud83d\\udd5e',\n 'clock4':'\\ud83d\\udd53',\n 'clock430':'\\ud83d\\udd5f',\n 'clock5':'\\ud83d\\udd54',\n 'clock530':'\\ud83d\\udd60',\n 'clock6':'\\ud83d\\udd55',\n 'clock630':'\\ud83d\\udd61',\n 'clock7':'\\ud83d\\udd56',\n 'clock730':'\\ud83d\\udd62',\n 'clock8':'\\ud83d\\udd57',\n 'clock830':'\\ud83d\\udd63',\n 'clock9':'\\ud83d\\udd58',\n 'clock930':'\\ud83d\\udd64',\n 'closed_book':'\\ud83d\\udcd5',\n 'closed_lock_with_key':'\\ud83d\\udd10',\n 'closed_umbrella':'\\ud83c\\udf02',\n 'cloud':'\\u2601\\ufe0f',\n 'cloud_with_lightning':'\\ud83c\\udf29',\n 'cloud_with_lightning_and_rain':'\\u26c8',\n 'cloud_with_rain':'\\ud83c\\udf27',\n 'cloud_with_snow':'\\ud83c\\udf28',\n 'clown_face':'\\ud83e\\udd21',\n 'clubs':'\\u2663\\ufe0f',\n 'cocktail':'\\ud83c\\udf78',\n 'coffee':'\\u2615\\ufe0f',\n 'coffin':'\\u26b0\\ufe0f',\n 'cold_sweat':'\\ud83d\\ude30',\n 'comet':'\\u2604\\ufe0f',\n 'computer':'\\ud83d\\udcbb',\n 'computer_mouse':'\\ud83d\\uddb1',\n 'confetti_ball':'\\ud83c\\udf8a',\n 'confounded':'\\ud83d\\ude16',\n 'confused':'\\ud83d\\ude15',\n 'congratulations':'\\u3297\\ufe0f',\n 'construction':'\\ud83d\\udea7',\n 'construction_worker_man':'\\ud83d\\udc77',\n 'construction_worker_woman':'\\ud83d\\udc77‍\\u2640\\ufe0f',\n 'control_knobs':'\\ud83c\\udf9b',\n 'convenience_store':'\\ud83c\\udfea',\n 'cookie':'\\ud83c\\udf6a',\n 'cool':'\\ud83c\\udd92',\n 'policeman':'\\ud83d\\udc6e',\n 'copyright':'\\u00a9\\ufe0f',\n 'corn':'\\ud83c\\udf3d',\n 'couch_and_lamp':'\\ud83d\\udecb',\n 'couple':'\\ud83d\\udc6b',\n 'couple_with_heart_woman_man':'\\ud83d\\udc91',\n 'couple_with_heart_man_man':'\\ud83d\\udc68‍\\u2764\\ufe0f‍\\ud83d\\udc68',\n 'couple_with_heart_woman_woman':'\\ud83d\\udc69‍\\u2764\\ufe0f‍\\ud83d\\udc69',\n 'couplekiss_man_man':'\\ud83d\\udc68‍\\u2764\\ufe0f‍\\ud83d\\udc8b‍\\ud83d\\udc68',\n 'couplekiss_man_woman':'\\ud83d\\udc8f',\n 'couplekiss_woman_woman':'\\ud83d\\udc69‍\\u2764\\ufe0f‍\\ud83d\\udc8b‍\\ud83d\\udc69',\n 'cow':'\\ud83d\\udc2e',\n 'cow2':'\\ud83d\\udc04',\n 'cowboy_hat_face':'\\ud83e\\udd20',\n 'crab':'\\ud83e\\udd80',\n 'crayon':'\\ud83d\\udd8d',\n 'credit_card':'\\ud83d\\udcb3',\n 'crescent_moon':'\\ud83c\\udf19',\n 'cricket':'\\ud83c\\udfcf',\n 'crocodile':'\\ud83d\\udc0a',\n 'croissant':'\\ud83e\\udd50',\n 'crossed_fingers':'\\ud83e\\udd1e',\n 'crossed_flags':'\\ud83c\\udf8c',\n 'crossed_swords':'\\u2694\\ufe0f',\n 'crown':'\\ud83d\\udc51',\n 'cry':'\\ud83d\\ude22',\n 'crying_cat_face':'\\ud83d\\ude3f',\n 'crystal_ball':'\\ud83d\\udd2e',\n 'cucumber':'\\ud83e\\udd52',\n 'cupid':'\\ud83d\\udc98',\n 'curly_loop':'\\u27b0',\n 'currency_exchange':'\\ud83d\\udcb1',\n 'curry':'\\ud83c\\udf5b',\n 'custard':'\\ud83c\\udf6e',\n 'customs':'\\ud83d\\udec3',\n 'cyclone':'\\ud83c\\udf00',\n 'dagger':'\\ud83d\\udde1',\n 'dancer':'\\ud83d\\udc83',\n 'dancing_women':'\\ud83d\\udc6f',\n 'dancing_men':'\\ud83d\\udc6f‍\\u2642\\ufe0f',\n 'dango':'\\ud83c\\udf61',\n 'dark_sunglasses':'\\ud83d\\udd76',\n 'dart':'\\ud83c\\udfaf',\n 'dash':'\\ud83d\\udca8',\n 'date':'\\ud83d\\udcc5',\n 'deciduous_tree':'\\ud83c\\udf33',\n 'deer':'\\ud83e\\udd8c',\n 'department_store':'\\ud83c\\udfec',\n 'derelict_house':'\\ud83c\\udfda',\n 'desert':'\\ud83c\\udfdc',\n 'desert_island':'\\ud83c\\udfdd',\n 'desktop_computer':'\\ud83d\\udda5',\n 'male_detective':'\\ud83d\\udd75\\ufe0f',\n 'diamond_shape_with_a_dot_inside':'\\ud83d\\udca0',\n 'diamonds':'\\u2666\\ufe0f',\n 'disappointed':'\\ud83d\\ude1e',\n 'disappointed_relieved':'\\ud83d\\ude25',\n 'dizzy':'\\ud83d\\udcab',\n 'dizzy_face':'\\ud83d\\ude35',\n 'do_not_litter':'\\ud83d\\udeaf',\n 'dog':'\\ud83d\\udc36',\n 'dog2':'\\ud83d\\udc15',\n 'dollar':'\\ud83d\\udcb5',\n 'dolls':'\\ud83c\\udf8e',\n 'dolphin':'\\ud83d\\udc2c',\n 'door':'\\ud83d\\udeaa',\n 'doughnut':'\\ud83c\\udf69',\n 'dove':'\\ud83d\\udd4a',\n 'dragon':'\\ud83d\\udc09',\n 'dragon_face':'\\ud83d\\udc32',\n 'dress':'\\ud83d\\udc57',\n 'dromedary_camel':'\\ud83d\\udc2a',\n 'drooling_face':'\\ud83e\\udd24',\n 'droplet':'\\ud83d\\udca7',\n 'drum':'\\ud83e\\udd41',\n 'duck':'\\ud83e\\udd86',\n 'dvd':'\\ud83d\\udcc0',\n 'e-mail':'\\ud83d\\udce7',\n 'eagle':'\\ud83e\\udd85',\n 'ear':'\\ud83d\\udc42',\n 'ear_of_rice':'\\ud83c\\udf3e',\n 'earth_africa':'\\ud83c\\udf0d',\n 'earth_americas':'\\ud83c\\udf0e',\n 'earth_asia':'\\ud83c\\udf0f',\n 'egg':'\\ud83e\\udd5a',\n 'eggplant':'\\ud83c\\udf46',\n 'eight_pointed_black_star':'\\u2734\\ufe0f',\n 'eight_spoked_asterisk':'\\u2733\\ufe0f',\n 'electric_plug':'\\ud83d\\udd0c',\n 'elephant':'\\ud83d\\udc18',\n 'email':'\\u2709\\ufe0f',\n 'end':'\\ud83d\\udd1a',\n 'envelope_with_arrow':'\\ud83d\\udce9',\n 'euro':'\\ud83d\\udcb6',\n 'european_castle':'\\ud83c\\udff0',\n 'european_post_office':'\\ud83c\\udfe4',\n 'evergreen_tree':'\\ud83c\\udf32',\n 'exclamation':'\\u2757\\ufe0f',\n 'expressionless':'\\ud83d\\ude11',\n 'eye':'\\ud83d\\udc41',\n 'eye_speech_bubble':'\\ud83d\\udc41‍\\ud83d\\udde8',\n 'eyeglasses':'\\ud83d\\udc53',\n 'eyes':'\\ud83d\\udc40',\n 'face_with_head_bandage':'\\ud83e\\udd15',\n 'face_with_thermometer':'\\ud83e\\udd12',\n 'fist_oncoming':'\\ud83d\\udc4a',\n 'factory':'\\ud83c\\udfed',\n 'fallen_leaf':'\\ud83c\\udf42',\n 'family_man_woman_boy':'\\ud83d\\udc6a',\n 'family_man_boy':'\\ud83d\\udc68‍\\ud83d\\udc66',\n 'family_man_boy_boy':'\\ud83d\\udc68‍\\ud83d\\udc66‍\\ud83d\\udc66',\n 'family_man_girl':'\\ud83d\\udc68‍\\ud83d\\udc67',\n 'family_man_girl_boy':'\\ud83d\\udc68‍\\ud83d\\udc67‍\\ud83d\\udc66',\n 'family_man_girl_girl':'\\ud83d\\udc68‍\\ud83d\\udc67‍\\ud83d\\udc67',\n 'family_man_man_boy':'\\ud83d\\udc68‍\\ud83d\\udc68‍\\ud83d\\udc66',\n 'family_man_man_boy_boy':'\\ud83d\\udc68‍\\ud83d\\udc68‍\\ud83d\\udc66‍\\ud83d\\udc66',\n 'family_man_man_girl':'\\ud83d\\udc68‍\\ud83d\\udc68‍\\ud83d\\udc67',\n 'family_man_man_girl_boy':'\\ud83d\\udc68‍\\ud83d\\udc68‍\\ud83d\\udc67‍\\ud83d\\udc66',\n 'family_man_man_girl_girl':'\\ud83d\\udc68‍\\ud83d\\udc68‍\\ud83d\\udc67‍\\ud83d\\udc67',\n 'family_man_woman_boy_boy':'\\ud83d\\udc68‍\\ud83d\\udc69‍\\ud83d\\udc66‍\\ud83d\\udc66',\n 'family_man_woman_girl':'\\ud83d\\udc68‍\\ud83d\\udc69‍\\ud83d\\udc67',\n 'family_man_woman_girl_boy':'\\ud83d\\udc68‍\\ud83d\\udc69‍\\ud83d\\udc67‍\\ud83d\\udc66',\n 'family_man_woman_girl_girl':'\\ud83d\\udc68‍\\ud83d\\udc69‍\\ud83d\\udc67‍\\ud83d\\udc67',\n 'family_woman_boy':'\\ud83d\\udc69‍\\ud83d\\udc66',\n 'family_woman_boy_boy':'\\ud83d\\udc69‍\\ud83d\\udc66‍\\ud83d\\udc66',\n 'family_woman_girl':'\\ud83d\\udc69‍\\ud83d\\udc67',\n 'family_woman_girl_boy':'\\ud83d\\udc69‍\\ud83d\\udc67‍\\ud83d\\udc66',\n 'family_woman_girl_girl':'\\ud83d\\udc69‍\\ud83d\\udc67‍\\ud83d\\udc67',\n 'family_woman_woman_boy':'\\ud83d\\udc69‍\\ud83d\\udc69‍\\ud83d\\udc66',\n 'family_woman_woman_boy_boy':'\\ud83d\\udc69‍\\ud83d\\udc69‍\\ud83d\\udc66‍\\ud83d\\udc66',\n 'family_woman_woman_girl':'\\ud83d\\udc69‍\\ud83d\\udc69‍\\ud83d\\udc67',\n 'family_woman_woman_girl_boy':'\\ud83d\\udc69‍\\ud83d\\udc69‍\\ud83d\\udc67‍\\ud83d\\udc66',\n 'family_woman_woman_girl_girl':'\\ud83d\\udc69‍\\ud83d\\udc69‍\\ud83d\\udc67‍\\ud83d\\udc67',\n 'fast_forward':'\\u23e9',\n 'fax':'\\ud83d\\udce0',\n 'fearful':'\\ud83d\\ude28',\n 'feet':'\\ud83d\\udc3e',\n 'female_detective':'\\ud83d\\udd75\\ufe0f‍\\u2640\\ufe0f',\n 'ferris_wheel':'\\ud83c\\udfa1',\n 'ferry':'\\u26f4',\n 'field_hockey':'\\ud83c\\udfd1',\n 'file_cabinet':'\\ud83d\\uddc4',\n 'file_folder':'\\ud83d\\udcc1',\n 'film_projector':'\\ud83d\\udcfd',\n 'film_strip':'\\ud83c\\udf9e',\n 'fire':'\\ud83d\\udd25',\n 'fire_engine':'\\ud83d\\ude92',\n 'fireworks':'\\ud83c\\udf86',\n 'first_quarter_moon':'\\ud83c\\udf13',\n 'first_quarter_moon_with_face':'\\ud83c\\udf1b',\n 'fish':'\\ud83d\\udc1f',\n 'fish_cake':'\\ud83c\\udf65',\n 'fishing_pole_and_fish':'\\ud83c\\udfa3',\n 'fist_raised':'\\u270a',\n 'fist_left':'\\ud83e\\udd1b',\n 'fist_right':'\\ud83e\\udd1c',\n 'flags':'\\ud83c\\udf8f',\n 'flashlight':'\\ud83d\\udd26',\n 'fleur_de_lis':'\\u269c\\ufe0f',\n 'flight_arrival':'\\ud83d\\udeec',\n 'flight_departure':'\\ud83d\\udeeb',\n 'floppy_disk':'\\ud83d\\udcbe',\n 'flower_playing_cards':'\\ud83c\\udfb4',\n 'flushed':'\\ud83d\\ude33',\n 'fog':'\\ud83c\\udf2b',\n 'foggy':'\\ud83c\\udf01',\n 'football':'\\ud83c\\udfc8',\n 'footprints':'\\ud83d\\udc63',\n 'fork_and_knife':'\\ud83c\\udf74',\n 'fountain':'\\u26f2\\ufe0f',\n 'fountain_pen':'\\ud83d\\udd8b',\n 'four_leaf_clover':'\\ud83c\\udf40',\n 'fox_face':'\\ud83e\\udd8a',\n 'framed_picture':'\\ud83d\\uddbc',\n 'free':'\\ud83c\\udd93',\n 'fried_egg':'\\ud83c\\udf73',\n 'fried_shrimp':'\\ud83c\\udf64',\n 'fries':'\\ud83c\\udf5f',\n 'frog':'\\ud83d\\udc38',\n 'frowning':'\\ud83d\\ude26',\n 'frowning_face':'\\u2639\\ufe0f',\n 'frowning_man':'\\ud83d\\ude4d‍\\u2642\\ufe0f',\n 'frowning_woman':'\\ud83d\\ude4d',\n 'middle_finger':'\\ud83d\\udd95',\n 'fuelpump':'\\u26fd\\ufe0f',\n 'full_moon':'\\ud83c\\udf15',\n 'full_moon_with_face':'\\ud83c\\udf1d',\n 'funeral_urn':'\\u26b1\\ufe0f',\n 'game_die':'\\ud83c\\udfb2',\n 'gear':'\\u2699\\ufe0f',\n 'gem':'\\ud83d\\udc8e',\n 'gemini':'\\u264a\\ufe0f',\n 'ghost':'\\ud83d\\udc7b',\n 'gift':'\\ud83c\\udf81',\n 'gift_heart':'\\ud83d\\udc9d',\n 'girl':'\\ud83d\\udc67',\n 'globe_with_meridians':'\\ud83c\\udf10',\n 'goal_net':'\\ud83e\\udd45',\n 'goat':'\\ud83d\\udc10',\n 'golf':'\\u26f3\\ufe0f',\n 'golfing_man':'\\ud83c\\udfcc\\ufe0f',\n 'golfing_woman':'\\ud83c\\udfcc\\ufe0f‍\\u2640\\ufe0f',\n 'gorilla':'\\ud83e\\udd8d',\n 'grapes':'\\ud83c\\udf47',\n 'green_apple':'\\ud83c\\udf4f',\n 'green_book':'\\ud83d\\udcd7',\n 'green_heart':'\\ud83d\\udc9a',\n 'green_salad':'\\ud83e\\udd57',\n 'grey_exclamation':'\\u2755',\n 'grey_question':'\\u2754',\n 'grimacing':'\\ud83d\\ude2c',\n 'grin':'\\ud83d\\ude01',\n 'grinning':'\\ud83d\\ude00',\n 'guardsman':'\\ud83d\\udc82',\n 'guardswoman':'\\ud83d\\udc82‍\\u2640\\ufe0f',\n 'guitar':'\\ud83c\\udfb8',\n 'gun':'\\ud83d\\udd2b',\n 'haircut_woman':'\\ud83d\\udc87',\n 'haircut_man':'\\ud83d\\udc87‍\\u2642\\ufe0f',\n 'hamburger':'\\ud83c\\udf54',\n 'hammer':'\\ud83d\\udd28',\n 'hammer_and_pick':'\\u2692',\n 'hammer_and_wrench':'\\ud83d\\udee0',\n 'hamster':'\\ud83d\\udc39',\n 'hand':'\\u270b',\n 'handbag':'\\ud83d\\udc5c',\n 'handshake':'\\ud83e\\udd1d',\n 'hankey':'\\ud83d\\udca9',\n 'hatched_chick':'\\ud83d\\udc25',\n 'hatching_chick':'\\ud83d\\udc23',\n 'headphones':'\\ud83c\\udfa7',\n 'hear_no_evil':'\\ud83d\\ude49',\n 'heart':'\\u2764\\ufe0f',\n 'heart_decoration':'\\ud83d\\udc9f',\n 'heart_eyes':'\\ud83d\\ude0d',\n 'heart_eyes_cat':'\\ud83d\\ude3b',\n 'heartbeat':'\\ud83d\\udc93',\n 'heartpulse':'\\ud83d\\udc97',\n 'hearts':'\\u2665\\ufe0f',\n 'heavy_check_mark':'\\u2714\\ufe0f',\n 'heavy_division_sign':'\\u2797',\n 'heavy_dollar_sign':'\\ud83d\\udcb2',\n 'heavy_heart_exclamation':'\\u2763\\ufe0f',\n 'heavy_minus_sign':'\\u2796',\n 'heavy_multiplication_x':'\\u2716\\ufe0f',\n 'heavy_plus_sign':'\\u2795',\n 'helicopter':'\\ud83d\\ude81',\n 'herb':'\\ud83c\\udf3f',\n 'hibiscus':'\\ud83c\\udf3a',\n 'high_brightness':'\\ud83d\\udd06',\n 'high_heel':'\\ud83d\\udc60',\n 'hocho':'\\ud83d\\udd2a',\n 'hole':'\\ud83d\\udd73',\n 'honey_pot':'\\ud83c\\udf6f',\n 'horse':'\\ud83d\\udc34',\n 'horse_racing':'\\ud83c\\udfc7',\n 'hospital':'\\ud83c\\udfe5',\n 'hot_pepper':'\\ud83c\\udf36',\n 'hotdog':'\\ud83c\\udf2d',\n 'hotel':'\\ud83c\\udfe8',\n 'hotsprings':'\\u2668\\ufe0f',\n 'hourglass':'\\u231b\\ufe0f',\n 'hourglass_flowing_sand':'\\u23f3',\n 'house':'\\ud83c\\udfe0',\n 'house_with_garden':'\\ud83c\\udfe1',\n 'houses':'\\ud83c\\udfd8',\n 'hugs':'\\ud83e\\udd17',\n 'hushed':'\\ud83d\\ude2f',\n 'ice_cream':'\\ud83c\\udf68',\n 'ice_hockey':'\\ud83c\\udfd2',\n 'ice_skate':'\\u26f8',\n 'icecream':'\\ud83c\\udf66',\n 'id':'\\ud83c\\udd94',\n 'ideograph_advantage':'\\ud83c\\ude50',\n 'imp':'\\ud83d\\udc7f',\n 'inbox_tray':'\\ud83d\\udce5',\n 'incoming_envelope':'\\ud83d\\udce8',\n 'tipping_hand_woman':'\\ud83d\\udc81',\n 'information_source':'\\u2139\\ufe0f',\n 'innocent':'\\ud83d\\ude07',\n 'interrobang':'\\u2049\\ufe0f',\n 'iphone':'\\ud83d\\udcf1',\n 'izakaya_lantern':'\\ud83c\\udfee',\n 'jack_o_lantern':'\\ud83c\\udf83',\n 'japan':'\\ud83d\\uddfe',\n 'japanese_castle':'\\ud83c\\udfef',\n 'japanese_goblin':'\\ud83d\\udc7a',\n 'japanese_ogre':'\\ud83d\\udc79',\n 'jeans':'\\ud83d\\udc56',\n 'joy':'\\ud83d\\ude02',\n 'joy_cat':'\\ud83d\\ude39',\n 'joystick':'\\ud83d\\udd79',\n 'kaaba':'\\ud83d\\udd4b',\n 'key':'\\ud83d\\udd11',\n 'keyboard':'\\u2328\\ufe0f',\n 'keycap_ten':'\\ud83d\\udd1f',\n 'kick_scooter':'\\ud83d\\udef4',\n 'kimono':'\\ud83d\\udc58',\n 'kiss':'\\ud83d\\udc8b',\n 'kissing':'\\ud83d\\ude17',\n 'kissing_cat':'\\ud83d\\ude3d',\n 'kissing_closed_eyes':'\\ud83d\\ude1a',\n 'kissing_heart':'\\ud83d\\ude18',\n 'kissing_smiling_eyes':'\\ud83d\\ude19',\n 'kiwi_fruit':'\\ud83e\\udd5d',\n 'koala':'\\ud83d\\udc28',\n 'koko':'\\ud83c\\ude01',\n 'label':'\\ud83c\\udff7',\n 'large_blue_circle':'\\ud83d\\udd35',\n 'large_blue_diamond':'\\ud83d\\udd37',\n 'large_orange_diamond':'\\ud83d\\udd36',\n 'last_quarter_moon':'\\ud83c\\udf17',\n 'last_quarter_moon_with_face':'\\ud83c\\udf1c',\n 'latin_cross':'\\u271d\\ufe0f',\n 'laughing':'\\ud83d\\ude06',\n 'leaves':'\\ud83c\\udf43',\n 'ledger':'\\ud83d\\udcd2',\n 'left_luggage':'\\ud83d\\udec5',\n 'left_right_arrow':'\\u2194\\ufe0f',\n 'leftwards_arrow_with_hook':'\\u21a9\\ufe0f',\n 'lemon':'\\ud83c\\udf4b',\n 'leo':'\\u264c\\ufe0f',\n 'leopard':'\\ud83d\\udc06',\n 'level_slider':'\\ud83c\\udf9a',\n 'libra':'\\u264e\\ufe0f',\n 'light_rail':'\\ud83d\\ude88',\n 'link':'\\ud83d\\udd17',\n 'lion':'\\ud83e\\udd81',\n 'lips':'\\ud83d\\udc44',\n 'lipstick':'\\ud83d\\udc84',\n 'lizard':'\\ud83e\\udd8e',\n 'lock':'\\ud83d\\udd12',\n 'lock_with_ink_pen':'\\ud83d\\udd0f',\n 'lollipop':'\\ud83c\\udf6d',\n 'loop':'\\u27bf',\n 'loud_sound':'\\ud83d\\udd0a',\n 'loudspeaker':'\\ud83d\\udce2',\n 'love_hotel':'\\ud83c\\udfe9',\n 'love_letter':'\\ud83d\\udc8c',\n 'low_brightness':'\\ud83d\\udd05',\n 'lying_face':'\\ud83e\\udd25',\n 'm':'\\u24c2\\ufe0f',\n 'mag':'\\ud83d\\udd0d',\n 'mag_right':'\\ud83d\\udd0e',\n 'mahjong':'\\ud83c\\udc04\\ufe0f',\n 'mailbox':'\\ud83d\\udceb',\n 'mailbox_closed':'\\ud83d\\udcea',\n 'mailbox_with_mail':'\\ud83d\\udcec',\n 'mailbox_with_no_mail':'\\ud83d\\udced',\n 'man':'\\ud83d\\udc68',\n 'man_artist':'\\ud83d\\udc68‍\\ud83c\\udfa8',\n 'man_astronaut':'\\ud83d\\udc68‍\\ud83d\\ude80',\n 'man_cartwheeling':'\\ud83e\\udd38‍\\u2642\\ufe0f',\n 'man_cook':'\\ud83d\\udc68‍\\ud83c\\udf73',\n 'man_dancing':'\\ud83d\\udd7a',\n 'man_facepalming':'\\ud83e\\udd26‍\\u2642\\ufe0f',\n 'man_factory_worker':'\\ud83d\\udc68‍\\ud83c\\udfed',\n 'man_farmer':'\\ud83d\\udc68‍\\ud83c\\udf3e',\n 'man_firefighter':'\\ud83d\\udc68‍\\ud83d\\ude92',\n 'man_health_worker':'\\ud83d\\udc68‍\\u2695\\ufe0f',\n 'man_in_tuxedo':'\\ud83e\\udd35',\n 'man_judge':'\\ud83d\\udc68‍\\u2696\\ufe0f',\n 'man_juggling':'\\ud83e\\udd39‍\\u2642\\ufe0f',\n 'man_mechanic':'\\ud83d\\udc68‍\\ud83d\\udd27',\n 'man_office_worker':'\\ud83d\\udc68‍\\ud83d\\udcbc',\n 'man_pilot':'\\ud83d\\udc68‍\\u2708\\ufe0f',\n 'man_playing_handball':'\\ud83e\\udd3e‍\\u2642\\ufe0f',\n 'man_playing_water_polo':'\\ud83e\\udd3d‍\\u2642\\ufe0f',\n 'man_scientist':'\\ud83d\\udc68‍\\ud83d\\udd2c',\n 'man_shrugging':'\\ud83e\\udd37‍\\u2642\\ufe0f',\n 'man_singer':'\\ud83d\\udc68‍\\ud83c\\udfa4',\n 'man_student':'\\ud83d\\udc68‍\\ud83c\\udf93',\n 'man_teacher':'\\ud83d\\udc68‍\\ud83c\\udfeb',\n 'man_technologist':'\\ud83d\\udc68‍\\ud83d\\udcbb',\n 'man_with_gua_pi_mao':'\\ud83d\\udc72',\n 'man_with_turban':'\\ud83d\\udc73',\n 'tangerine':'\\ud83c\\udf4a',\n 'mans_shoe':'\\ud83d\\udc5e',\n 'mantelpiece_clock':'\\ud83d\\udd70',\n 'maple_leaf':'\\ud83c\\udf41',\n 'martial_arts_uniform':'\\ud83e\\udd4b',\n 'mask':'\\ud83d\\ude37',\n 'massage_woman':'\\ud83d\\udc86',\n 'massage_man':'\\ud83d\\udc86‍\\u2642\\ufe0f',\n 'meat_on_bone':'\\ud83c\\udf56',\n 'medal_military':'\\ud83c\\udf96',\n 'medal_sports':'\\ud83c\\udfc5',\n 'mega':'\\ud83d\\udce3',\n 'melon':'\\ud83c\\udf48',\n 'memo':'\\ud83d\\udcdd',\n 'men_wrestling':'\\ud83e\\udd3c‍\\u2642\\ufe0f',\n 'menorah':'\\ud83d\\udd4e',\n 'mens':'\\ud83d\\udeb9',\n 'metal':'\\ud83e\\udd18',\n 'metro':'\\ud83d\\ude87',\n 'microphone':'\\ud83c\\udfa4',\n 'microscope':'\\ud83d\\udd2c',\n 'milk_glass':'\\ud83e\\udd5b',\n 'milky_way':'\\ud83c\\udf0c',\n 'minibus':'\\ud83d\\ude90',\n 'minidisc':'\\ud83d\\udcbd',\n 'mobile_phone_off':'\\ud83d\\udcf4',\n 'money_mouth_face':'\\ud83e\\udd11',\n 'money_with_wings':'\\ud83d\\udcb8',\n 'moneybag':'\\ud83d\\udcb0',\n 'monkey':'\\ud83d\\udc12',\n 'monkey_face':'\\ud83d\\udc35',\n 'monorail':'\\ud83d\\ude9d',\n 'moon':'\\ud83c\\udf14',\n 'mortar_board':'\\ud83c\\udf93',\n 'mosque':'\\ud83d\\udd4c',\n 'motor_boat':'\\ud83d\\udee5',\n 'motor_scooter':'\\ud83d\\udef5',\n 'motorcycle':'\\ud83c\\udfcd',\n 'motorway':'\\ud83d\\udee3',\n 'mount_fuji':'\\ud83d\\uddfb',\n 'mountain':'\\u26f0',\n 'mountain_biking_man':'\\ud83d\\udeb5',\n 'mountain_biking_woman':'\\ud83d\\udeb5‍\\u2640\\ufe0f',\n 'mountain_cableway':'\\ud83d\\udea0',\n 'mountain_railway':'\\ud83d\\ude9e',\n 'mountain_snow':'\\ud83c\\udfd4',\n 'mouse':'\\ud83d\\udc2d',\n 'mouse2':'\\ud83d\\udc01',\n 'movie_camera':'\\ud83c\\udfa5',\n 'moyai':'\\ud83d\\uddff',\n 'mrs_claus':'\\ud83e\\udd36',\n 'muscle':'\\ud83d\\udcaa',\n 'mushroom':'\\ud83c\\udf44',\n 'musical_keyboard':'\\ud83c\\udfb9',\n 'musical_note':'\\ud83c\\udfb5',\n 'musical_score':'\\ud83c\\udfbc',\n 'mute':'\\ud83d\\udd07',\n 'nail_care':'\\ud83d\\udc85',\n 'name_badge':'\\ud83d\\udcdb',\n 'national_park':'\\ud83c\\udfde',\n 'nauseated_face':'\\ud83e\\udd22',\n 'necktie':'\\ud83d\\udc54',\n 'negative_squared_cross_mark':'\\u274e',\n 'nerd_face':'\\ud83e\\udd13',\n 'neutral_face':'\\ud83d\\ude10',\n 'new':'\\ud83c\\udd95',\n 'new_moon':'\\ud83c\\udf11',\n 'new_moon_with_face':'\\ud83c\\udf1a',\n 'newspaper':'\\ud83d\\udcf0',\n 'newspaper_roll':'\\ud83d\\uddde',\n 'next_track_button':'\\u23ed',\n 'ng':'\\ud83c\\udd96',\n 'no_good_man':'\\ud83d\\ude45‍\\u2642\\ufe0f',\n 'no_good_woman':'\\ud83d\\ude45',\n 'night_with_stars':'\\ud83c\\udf03',\n 'no_bell':'\\ud83d\\udd15',\n 'no_bicycles':'\\ud83d\\udeb3',\n 'no_entry':'\\u26d4\\ufe0f',\n 'no_entry_sign':'\\ud83d\\udeab',\n 'no_mobile_phones':'\\ud83d\\udcf5',\n 'no_mouth':'\\ud83d\\ude36',\n 'no_pedestrians':'\\ud83d\\udeb7',\n 'no_smoking':'\\ud83d\\udead',\n 'non-potable_water':'\\ud83d\\udeb1',\n 'nose':'\\ud83d\\udc43',\n 'notebook':'\\ud83d\\udcd3',\n 'notebook_with_decorative_cover':'\\ud83d\\udcd4',\n 'notes':'\\ud83c\\udfb6',\n 'nut_and_bolt':'\\ud83d\\udd29',\n 'o':'\\u2b55\\ufe0f',\n 'o2':'\\ud83c\\udd7e\\ufe0f',\n 'ocean':'\\ud83c\\udf0a',\n 'octopus':'\\ud83d\\udc19',\n 'oden':'\\ud83c\\udf62',\n 'office':'\\ud83c\\udfe2',\n 'oil_drum':'\\ud83d\\udee2',\n 'ok':'\\ud83c\\udd97',\n 'ok_hand':'\\ud83d\\udc4c',\n 'ok_man':'\\ud83d\\ude46‍\\u2642\\ufe0f',\n 'ok_woman':'\\ud83d\\ude46',\n 'old_key':'\\ud83d\\udddd',\n 'older_man':'\\ud83d\\udc74',\n 'older_woman':'\\ud83d\\udc75',\n 'om':'\\ud83d\\udd49',\n 'on':'\\ud83d\\udd1b',\n 'oncoming_automobile':'\\ud83d\\ude98',\n 'oncoming_bus':'\\ud83d\\ude8d',\n 'oncoming_police_car':'\\ud83d\\ude94',\n 'oncoming_taxi':'\\ud83d\\ude96',\n 'open_file_folder':'\\ud83d\\udcc2',\n 'open_hands':'\\ud83d\\udc50',\n 'open_mouth':'\\ud83d\\ude2e',\n 'open_umbrella':'\\u2602\\ufe0f',\n 'ophiuchus':'\\u26ce',\n 'orange_book':'\\ud83d\\udcd9',\n 'orthodox_cross':'\\u2626\\ufe0f',\n 'outbox_tray':'\\ud83d\\udce4',\n 'owl':'\\ud83e\\udd89',\n 'ox':'\\ud83d\\udc02',\n 'package':'\\ud83d\\udce6',\n 'page_facing_up':'\\ud83d\\udcc4',\n 'page_with_curl':'\\ud83d\\udcc3',\n 'pager':'\\ud83d\\udcdf',\n 'paintbrush':'\\ud83d\\udd8c',\n 'palm_tree':'\\ud83c\\udf34',\n 'pancakes':'\\ud83e\\udd5e',\n 'panda_face':'\\ud83d\\udc3c',\n 'paperclip':'\\ud83d\\udcce',\n 'paperclips':'\\ud83d\\udd87',\n 'parasol_on_ground':'\\u26f1',\n 'parking':'\\ud83c\\udd7f\\ufe0f',\n 'part_alternation_mark':'\\u303d\\ufe0f',\n 'partly_sunny':'\\u26c5\\ufe0f',\n 'passenger_ship':'\\ud83d\\udef3',\n 'passport_control':'\\ud83d\\udec2',\n 'pause_button':'\\u23f8',\n 'peace_symbol':'\\u262e\\ufe0f',\n 'peach':'\\ud83c\\udf51',\n 'peanuts':'\\ud83e\\udd5c',\n 'pear':'\\ud83c\\udf50',\n 'pen':'\\ud83d\\udd8a',\n 'pencil2':'\\u270f\\ufe0f',\n 'penguin':'\\ud83d\\udc27',\n 'pensive':'\\ud83d\\ude14',\n 'performing_arts':'\\ud83c\\udfad',\n 'persevere':'\\ud83d\\ude23',\n 'person_fencing':'\\ud83e\\udd3a',\n 'pouting_woman':'\\ud83d\\ude4e',\n 'phone':'\\u260e\\ufe0f',\n 'pick':'\\u26cf',\n 'pig':'\\ud83d\\udc37',\n 'pig2':'\\ud83d\\udc16',\n 'pig_nose':'\\ud83d\\udc3d',\n 'pill':'\\ud83d\\udc8a',\n 'pineapple':'\\ud83c\\udf4d',\n 'ping_pong':'\\ud83c\\udfd3',\n 'pisces':'\\u2653\\ufe0f',\n 'pizza':'\\ud83c\\udf55',\n 'place_of_worship':'\\ud83d\\uded0',\n 'plate_with_cutlery':'\\ud83c\\udf7d',\n 'play_or_pause_button':'\\u23ef',\n 'point_down':'\\ud83d\\udc47',\n 'point_left':'\\ud83d\\udc48',\n 'point_right':'\\ud83d\\udc49',\n 'point_up':'\\u261d\\ufe0f',\n 'point_up_2':'\\ud83d\\udc46',\n 'police_car':'\\ud83d\\ude93',\n 'policewoman':'\\ud83d\\udc6e‍\\u2640\\ufe0f',\n 'poodle':'\\ud83d\\udc29',\n 'popcorn':'\\ud83c\\udf7f',\n 'post_office':'\\ud83c\\udfe3',\n 'postal_horn':'\\ud83d\\udcef',\n 'postbox':'\\ud83d\\udcee',\n 'potable_water':'\\ud83d\\udeb0',\n 'potato':'\\ud83e\\udd54',\n 'pouch':'\\ud83d\\udc5d',\n 'poultry_leg':'\\ud83c\\udf57',\n 'pound':'\\ud83d\\udcb7',\n 'rage':'\\ud83d\\ude21',\n 'pouting_cat':'\\ud83d\\ude3e',\n 'pouting_man':'\\ud83d\\ude4e‍\\u2642\\ufe0f',\n 'pray':'\\ud83d\\ude4f',\n 'prayer_beads':'\\ud83d\\udcff',\n 'pregnant_woman':'\\ud83e\\udd30',\n 'previous_track_button':'\\u23ee',\n 'prince':'\\ud83e\\udd34',\n 'princess':'\\ud83d\\udc78',\n 'printer':'\\ud83d\\udda8',\n 'purple_heart':'\\ud83d\\udc9c',\n 'purse':'\\ud83d\\udc5b',\n 'pushpin':'\\ud83d\\udccc',\n 'put_litter_in_its_place':'\\ud83d\\udeae',\n 'question':'\\u2753',\n 'rabbit':'\\ud83d\\udc30',\n 'rabbit2':'\\ud83d\\udc07',\n 'racehorse':'\\ud83d\\udc0e',\n 'racing_car':'\\ud83c\\udfce',\n 'radio':'\\ud83d\\udcfb',\n 'radio_button':'\\ud83d\\udd18',\n 'radioactive':'\\u2622\\ufe0f',\n 'railway_car':'\\ud83d\\ude83',\n 'railway_track':'\\ud83d\\udee4',\n 'rainbow':'\\ud83c\\udf08',\n 'rainbow_flag':'\\ud83c\\udff3\\ufe0f‍\\ud83c\\udf08',\n 'raised_back_of_hand':'\\ud83e\\udd1a',\n 'raised_hand_with_fingers_splayed':'\\ud83d\\udd90',\n 'raised_hands':'\\ud83d\\ude4c',\n 'raising_hand_woman':'\\ud83d\\ude4b',\n 'raising_hand_man':'\\ud83d\\ude4b‍\\u2642\\ufe0f',\n 'ram':'\\ud83d\\udc0f',\n 'ramen':'\\ud83c\\udf5c',\n 'rat':'\\ud83d\\udc00',\n 'record_button':'\\u23fa',\n 'recycle':'\\u267b\\ufe0f',\n 'red_circle':'\\ud83d\\udd34',\n 'registered':'\\u00ae\\ufe0f',\n 'relaxed':'\\u263a\\ufe0f',\n 'relieved':'\\ud83d\\ude0c',\n 'reminder_ribbon':'\\ud83c\\udf97',\n 'repeat':'\\ud83d\\udd01',\n 'repeat_one':'\\ud83d\\udd02',\n 'rescue_worker_helmet':'\\u26d1',\n 'restroom':'\\ud83d\\udebb',\n 'revolving_hearts':'\\ud83d\\udc9e',\n 'rewind':'\\u23ea',\n 'rhinoceros':'\\ud83e\\udd8f',\n 'ribbon':'\\ud83c\\udf80',\n 'rice':'\\ud83c\\udf5a',\n 'rice_ball':'\\ud83c\\udf59',\n 'rice_cracker':'\\ud83c\\udf58',\n 'rice_scene':'\\ud83c\\udf91',\n 'right_anger_bubble':'\\ud83d\\uddef',\n 'ring':'\\ud83d\\udc8d',\n 'robot':'\\ud83e\\udd16',\n 'rocket':'\\ud83d\\ude80',\n 'rofl':'\\ud83e\\udd23',\n 'roll_eyes':'\\ud83d\\ude44',\n 'roller_coaster':'\\ud83c\\udfa2',\n 'rooster':'\\ud83d\\udc13',\n 'rose':'\\ud83c\\udf39',\n 'rosette':'\\ud83c\\udff5',\n 'rotating_light':'\\ud83d\\udea8',\n 'round_pushpin':'\\ud83d\\udccd',\n 'rowing_man':'\\ud83d\\udea3',\n 'rowing_woman':'\\ud83d\\udea3‍\\u2640\\ufe0f',\n 'rugby_football':'\\ud83c\\udfc9',\n 'running_man':'\\ud83c\\udfc3',\n 'running_shirt_with_sash':'\\ud83c\\udfbd',\n 'running_woman':'\\ud83c\\udfc3‍\\u2640\\ufe0f',\n 'sa':'\\ud83c\\ude02\\ufe0f',\n 'sagittarius':'\\u2650\\ufe0f',\n 'sake':'\\ud83c\\udf76',\n 'sandal':'\\ud83d\\udc61',\n 'santa':'\\ud83c\\udf85',\n 'satellite':'\\ud83d\\udce1',\n 'saxophone':'\\ud83c\\udfb7',\n 'school':'\\ud83c\\udfeb',\n 'school_satchel':'\\ud83c\\udf92',\n 'scissors':'\\u2702\\ufe0f',\n 'scorpion':'\\ud83e\\udd82',\n 'scorpius':'\\u264f\\ufe0f',\n 'scream':'\\ud83d\\ude31',\n 'scream_cat':'\\ud83d\\ude40',\n 'scroll':'\\ud83d\\udcdc',\n 'seat':'\\ud83d\\udcba',\n 'secret':'\\u3299\\ufe0f',\n 'see_no_evil':'\\ud83d\\ude48',\n 'seedling':'\\ud83c\\udf31',\n 'selfie':'\\ud83e\\udd33',\n 'shallow_pan_of_food':'\\ud83e\\udd58',\n 'shamrock':'\\u2618\\ufe0f',\n 'shark':'\\ud83e\\udd88',\n 'shaved_ice':'\\ud83c\\udf67',\n 'sheep':'\\ud83d\\udc11',\n 'shell':'\\ud83d\\udc1a',\n 'shield':'\\ud83d\\udee1',\n 'shinto_shrine':'\\u26e9',\n 'ship':'\\ud83d\\udea2',\n 'shirt':'\\ud83d\\udc55',\n 'shopping':'\\ud83d\\udecd',\n 'shopping_cart':'\\ud83d\\uded2',\n 'shower':'\\ud83d\\udebf',\n 'shrimp':'\\ud83e\\udd90',\n 'signal_strength':'\\ud83d\\udcf6',\n 'six_pointed_star':'\\ud83d\\udd2f',\n 'ski':'\\ud83c\\udfbf',\n 'skier':'\\u26f7',\n 'skull':'\\ud83d\\udc80',\n 'skull_and_crossbones':'\\u2620\\ufe0f',\n 'sleeping':'\\ud83d\\ude34',\n 'sleeping_bed':'\\ud83d\\udecc',\n 'sleepy':'\\ud83d\\ude2a',\n 'slightly_frowning_face':'\\ud83d\\ude41',\n 'slightly_smiling_face':'\\ud83d\\ude42',\n 'slot_machine':'\\ud83c\\udfb0',\n 'small_airplane':'\\ud83d\\udee9',\n 'small_blue_diamond':'\\ud83d\\udd39',\n 'small_orange_diamond':'\\ud83d\\udd38',\n 'small_red_triangle':'\\ud83d\\udd3a',\n 'small_red_triangle_down':'\\ud83d\\udd3b',\n 'smile':'\\ud83d\\ude04',\n 'smile_cat':'\\ud83d\\ude38',\n 'smiley':'\\ud83d\\ude03',\n 'smiley_cat':'\\ud83d\\ude3a',\n 'smiling_imp':'\\ud83d\\ude08',\n 'smirk':'\\ud83d\\ude0f',\n 'smirk_cat':'\\ud83d\\ude3c',\n 'smoking':'\\ud83d\\udeac',\n 'snail':'\\ud83d\\udc0c',\n 'snake':'\\ud83d\\udc0d',\n 'sneezing_face':'\\ud83e\\udd27',\n 'snowboarder':'\\ud83c\\udfc2',\n 'snowflake':'\\u2744\\ufe0f',\n 'snowman':'\\u26c4\\ufe0f',\n 'snowman_with_snow':'\\u2603\\ufe0f',\n 'sob':'\\ud83d\\ude2d',\n 'soccer':'\\u26bd\\ufe0f',\n 'soon':'\\ud83d\\udd1c',\n 'sos':'\\ud83c\\udd98',\n 'sound':'\\ud83d\\udd09',\n 'space_invader':'\\ud83d\\udc7e',\n 'spades':'\\u2660\\ufe0f',\n 'spaghetti':'\\ud83c\\udf5d',\n 'sparkle':'\\u2747\\ufe0f',\n 'sparkler':'\\ud83c\\udf87',\n 'sparkles':'\\u2728',\n 'sparkling_heart':'\\ud83d\\udc96',\n 'speak_no_evil':'\\ud83d\\ude4a',\n 'speaker':'\\ud83d\\udd08',\n 'speaking_head':'\\ud83d\\udde3',\n 'speech_balloon':'\\ud83d\\udcac',\n 'speedboat':'\\ud83d\\udea4',\n 'spider':'\\ud83d\\udd77',\n 'spider_web':'\\ud83d\\udd78',\n 'spiral_calendar':'\\ud83d\\uddd3',\n 'spiral_notepad':'\\ud83d\\uddd2',\n 'spoon':'\\ud83e\\udd44',\n 'squid':'\\ud83e\\udd91',\n 'stadium':'\\ud83c\\udfdf',\n 'star':'\\u2b50\\ufe0f',\n 'star2':'\\ud83c\\udf1f',\n 'star_and_crescent':'\\u262a\\ufe0f',\n 'star_of_david':'\\u2721\\ufe0f',\n 'stars':'\\ud83c\\udf20',\n 'station':'\\ud83d\\ude89',\n 'statue_of_liberty':'\\ud83d\\uddfd',\n 'steam_locomotive':'\\ud83d\\ude82',\n 'stew':'\\ud83c\\udf72',\n 'stop_button':'\\u23f9',\n 'stop_sign':'\\ud83d\\uded1',\n 'stopwatch':'\\u23f1',\n 'straight_ruler':'\\ud83d\\udccf',\n 'strawberry':'\\ud83c\\udf53',\n 'stuck_out_tongue':'\\ud83d\\ude1b',\n 'stuck_out_tongue_closed_eyes':'\\ud83d\\ude1d',\n 'stuck_out_tongue_winking_eye':'\\ud83d\\ude1c',\n 'studio_microphone':'\\ud83c\\udf99',\n 'stuffed_flatbread':'\\ud83e\\udd59',\n 'sun_behind_large_cloud':'\\ud83c\\udf25',\n 'sun_behind_rain_cloud':'\\ud83c\\udf26',\n 'sun_behind_small_cloud':'\\ud83c\\udf24',\n 'sun_with_face':'\\ud83c\\udf1e',\n 'sunflower':'\\ud83c\\udf3b',\n 'sunglasses':'\\ud83d\\ude0e',\n 'sunny':'\\u2600\\ufe0f',\n 'sunrise':'\\ud83c\\udf05',\n 'sunrise_over_mountains':'\\ud83c\\udf04',\n 'surfing_man':'\\ud83c\\udfc4',\n 'surfing_woman':'\\ud83c\\udfc4‍\\u2640\\ufe0f',\n 'sushi':'\\ud83c\\udf63',\n 'suspension_railway':'\\ud83d\\ude9f',\n 'sweat':'\\ud83d\\ude13',\n 'sweat_drops':'\\ud83d\\udca6',\n 'sweat_smile':'\\ud83d\\ude05',\n 'sweet_potato':'\\ud83c\\udf60',\n 'swimming_man':'\\ud83c\\udfca',\n 'swimming_woman':'\\ud83c\\udfca‍\\u2640\\ufe0f',\n 'symbols':'\\ud83d\\udd23',\n 'synagogue':'\\ud83d\\udd4d',\n 'syringe':'\\ud83d\\udc89',\n 'taco':'\\ud83c\\udf2e',\n 'tada':'\\ud83c\\udf89',\n 'tanabata_tree':'\\ud83c\\udf8b',\n 'taurus':'\\u2649\\ufe0f',\n 'taxi':'\\ud83d\\ude95',\n 'tea':'\\ud83c\\udf75',\n 'telephone_receiver':'\\ud83d\\udcde',\n 'telescope':'\\ud83d\\udd2d',\n 'tennis':'\\ud83c\\udfbe',\n 'tent':'\\u26fa\\ufe0f',\n 'thermometer':'\\ud83c\\udf21',\n 'thinking':'\\ud83e\\udd14',\n 'thought_balloon':'\\ud83d\\udcad',\n 'ticket':'\\ud83c\\udfab',\n 'tickets':'\\ud83c\\udf9f',\n 'tiger':'\\ud83d\\udc2f',\n 'tiger2':'\\ud83d\\udc05',\n 'timer_clock':'\\u23f2',\n 'tipping_hand_man':'\\ud83d\\udc81‍\\u2642\\ufe0f',\n 'tired_face':'\\ud83d\\ude2b',\n 'tm':'\\u2122\\ufe0f',\n 'toilet':'\\ud83d\\udebd',\n 'tokyo_tower':'\\ud83d\\uddfc',\n 'tomato':'\\ud83c\\udf45',\n 'tongue':'\\ud83d\\udc45',\n 'top':'\\ud83d\\udd1d',\n 'tophat':'\\ud83c\\udfa9',\n 'tornado':'\\ud83c\\udf2a',\n 'trackball':'\\ud83d\\uddb2',\n 'tractor':'\\ud83d\\ude9c',\n 'traffic_light':'\\ud83d\\udea5',\n 'train':'\\ud83d\\ude8b',\n 'train2':'\\ud83d\\ude86',\n 'tram':'\\ud83d\\ude8a',\n 'triangular_flag_on_post':'\\ud83d\\udea9',\n 'triangular_ruler':'\\ud83d\\udcd0',\n 'trident':'\\ud83d\\udd31',\n 'triumph':'\\ud83d\\ude24',\n 'trolleybus':'\\ud83d\\ude8e',\n 'trophy':'\\ud83c\\udfc6',\n 'tropical_drink':'\\ud83c\\udf79',\n 'tropical_fish':'\\ud83d\\udc20',\n 'truck':'\\ud83d\\ude9a',\n 'trumpet':'\\ud83c\\udfba',\n 'tulip':'\\ud83c\\udf37',\n 'tumbler_glass':'\\ud83e\\udd43',\n 'turkey':'\\ud83e\\udd83',\n 'turtle':'\\ud83d\\udc22',\n 'tv':'\\ud83d\\udcfa',\n 'twisted_rightwards_arrows':'\\ud83d\\udd00',\n 'two_hearts':'\\ud83d\\udc95',\n 'two_men_holding_hands':'\\ud83d\\udc6c',\n 'two_women_holding_hands':'\\ud83d\\udc6d',\n 'u5272':'\\ud83c\\ude39',\n 'u5408':'\\ud83c\\ude34',\n 'u55b6':'\\ud83c\\ude3a',\n 'u6307':'\\ud83c\\ude2f\\ufe0f',\n 'u6708':'\\ud83c\\ude37\\ufe0f',\n 'u6709':'\\ud83c\\ude36',\n 'u6e80':'\\ud83c\\ude35',\n 'u7121':'\\ud83c\\ude1a\\ufe0f',\n 'u7533':'\\ud83c\\ude38',\n 'u7981':'\\ud83c\\ude32',\n 'u7a7a':'\\ud83c\\ude33',\n 'umbrella':'\\u2614\\ufe0f',\n 'unamused':'\\ud83d\\ude12',\n 'underage':'\\ud83d\\udd1e',\n 'unicorn':'\\ud83e\\udd84',\n 'unlock':'\\ud83d\\udd13',\n 'up':'\\ud83c\\udd99',\n 'upside_down_face':'\\ud83d\\ude43',\n 'v':'\\u270c\\ufe0f',\n 'vertical_traffic_light':'\\ud83d\\udea6',\n 'vhs':'\\ud83d\\udcfc',\n 'vibration_mode':'\\ud83d\\udcf3',\n 'video_camera':'\\ud83d\\udcf9',\n 'video_game':'\\ud83c\\udfae',\n 'violin':'\\ud83c\\udfbb',\n 'virgo':'\\u264d\\ufe0f',\n 'volcano':'\\ud83c\\udf0b',\n 'volleyball':'\\ud83c\\udfd0',\n 'vs':'\\ud83c\\udd9a',\n 'vulcan_salute':'\\ud83d\\udd96',\n 'walking_man':'\\ud83d\\udeb6',\n 'walking_woman':'\\ud83d\\udeb6‍\\u2640\\ufe0f',\n 'waning_crescent_moon':'\\ud83c\\udf18',\n 'waning_gibbous_moon':'\\ud83c\\udf16',\n 'warning':'\\u26a0\\ufe0f',\n 'wastebasket':'\\ud83d\\uddd1',\n 'watch':'\\u231a\\ufe0f',\n 'water_buffalo':'\\ud83d\\udc03',\n 'watermelon':'\\ud83c\\udf49',\n 'wave':'\\ud83d\\udc4b',\n 'wavy_dash':'\\u3030\\ufe0f',\n 'waxing_crescent_moon':'\\ud83c\\udf12',\n 'wc':'\\ud83d\\udebe',\n 'weary':'\\ud83d\\ude29',\n 'wedding':'\\ud83d\\udc92',\n 'weight_lifting_man':'\\ud83c\\udfcb\\ufe0f',\n 'weight_lifting_woman':'\\ud83c\\udfcb\\ufe0f‍\\u2640\\ufe0f',\n 'whale':'\\ud83d\\udc33',\n 'whale2':'\\ud83d\\udc0b',\n 'wheel_of_dharma':'\\u2638\\ufe0f',\n 'wheelchair':'\\u267f\\ufe0f',\n 'white_check_mark':'\\u2705',\n 'white_circle':'\\u26aa\\ufe0f',\n 'white_flag':'\\ud83c\\udff3\\ufe0f',\n 'white_flower':'\\ud83d\\udcae',\n 'white_large_square':'\\u2b1c\\ufe0f',\n 'white_medium_small_square':'\\u25fd\\ufe0f',\n 'white_medium_square':'\\u25fb\\ufe0f',\n 'white_small_square':'\\u25ab\\ufe0f',\n 'white_square_button':'\\ud83d\\udd33',\n 'wilted_flower':'\\ud83e\\udd40',\n 'wind_chime':'\\ud83c\\udf90',\n 'wind_face':'\\ud83c\\udf2c',\n 'wine_glass':'\\ud83c\\udf77',\n 'wink':'\\ud83d\\ude09',\n 'wolf':'\\ud83d\\udc3a',\n 'woman':'\\ud83d\\udc69',\n 'woman_artist':'\\ud83d\\udc69‍\\ud83c\\udfa8',\n 'woman_astronaut':'\\ud83d\\udc69‍\\ud83d\\ude80',\n 'woman_cartwheeling':'\\ud83e\\udd38‍\\u2640\\ufe0f',\n 'woman_cook':'\\ud83d\\udc69‍\\ud83c\\udf73',\n 'woman_facepalming':'\\ud83e\\udd26‍\\u2640\\ufe0f',\n 'woman_factory_worker':'\\ud83d\\udc69‍\\ud83c\\udfed',\n 'woman_farmer':'\\ud83d\\udc69‍\\ud83c\\udf3e',\n 'woman_firefighter':'\\ud83d\\udc69‍\\ud83d\\ude92',\n 'woman_health_worker':'\\ud83d\\udc69‍\\u2695\\ufe0f',\n 'woman_judge':'\\ud83d\\udc69‍\\u2696\\ufe0f',\n 'woman_juggling':'\\ud83e\\udd39‍\\u2640\\ufe0f',\n 'woman_mechanic':'\\ud83d\\udc69‍\\ud83d\\udd27',\n 'woman_office_worker':'\\ud83d\\udc69‍\\ud83d\\udcbc',\n 'woman_pilot':'\\ud83d\\udc69‍\\u2708\\ufe0f',\n 'woman_playing_handball':'\\ud83e\\udd3e‍\\u2640\\ufe0f',\n 'woman_playing_water_polo':'\\ud83e\\udd3d‍\\u2640\\ufe0f',\n 'woman_scientist':'\\ud83d\\udc69‍\\ud83d\\udd2c',\n 'woman_shrugging':'\\ud83e\\udd37‍\\u2640\\ufe0f',\n 'woman_singer':'\\ud83d\\udc69‍\\ud83c\\udfa4',\n 'woman_student':'\\ud83d\\udc69‍\\ud83c\\udf93',\n 'woman_teacher':'\\ud83d\\udc69‍\\ud83c\\udfeb',\n 'woman_technologist':'\\ud83d\\udc69‍\\ud83d\\udcbb',\n 'woman_with_turban':'\\ud83d\\udc73‍\\u2640\\ufe0f',\n 'womans_clothes':'\\ud83d\\udc5a',\n 'womans_hat':'\\ud83d\\udc52',\n 'women_wrestling':'\\ud83e\\udd3c‍\\u2640\\ufe0f',\n 'womens':'\\ud83d\\udeba',\n 'world_map':'\\ud83d\\uddfa',\n 'worried':'\\ud83d\\ude1f',\n 'wrench':'\\ud83d\\udd27',\n 'writing_hand':'\\u270d\\ufe0f',\n 'x':'\\u274c',\n 'yellow_heart':'\\ud83d\\udc9b',\n 'yen':'\\ud83d\\udcb4',\n 'yin_yang':'\\u262f\\ufe0f',\n 'yum':'\\ud83d\\ude0b',\n 'zap':'\\u26a1\\ufe0f',\n 'zipper_mouth_face':'\\ud83e\\udd10',\n 'zzz':'\\ud83d\\udca4',\n\n /* special emojis :P */\n 'octocat': '\":octocat:\"',\n 'showdown': 'S'\n};\n","/**\n * Created by Estevao on 31-05-2015.\n */\n\n/**\n * Showdown Converter class\n * @class\n * @param {object} [converterOptions]\n * @returns {Converter}\n */\nshowdown.Converter = function (converterOptions) {\n 'use strict';\n\n var\n /**\n * Options used by this converter\n * @private\n * @type {{}}\n */\n options = {},\n\n /**\n * Language extensions used by this converter\n * @private\n * @type {Array}\n */\n langExtensions = [],\n\n /**\n * Output modifiers extensions used by this converter\n * @private\n * @type {Array}\n */\n outputModifiers = [],\n\n /**\n * Event listeners\n * @private\n * @type {{}}\n */\n listeners = {},\n\n /**\n * The flavor set in this converter\n */\n setConvFlavor = setFlavor,\n\n /**\n * Metadata of the document\n * @type {{parsed: {}, raw: string, format: string}}\n */\n metadata = {\n parsed: {},\n raw: '',\n format: ''\n };\n\n _constructor();\n\n /**\n * Converter constructor\n * @private\n */\n function _constructor () {\n converterOptions = converterOptions || {};\n\n for (var gOpt in globalOptions) {\n if (globalOptions.hasOwnProperty(gOpt)) {\n options[gOpt] = globalOptions[gOpt];\n }\n }\n\n // Merge options\n if (typeof converterOptions === 'object') {\n for (var opt in converterOptions) {\n if (converterOptions.hasOwnProperty(opt)) {\n options[opt] = converterOptions[opt];\n }\n }\n } else {\n throw Error('Converter expects the passed parameter to be an object, but ' + typeof converterOptions +\n ' was passed instead.');\n }\n\n if (options.extensions) {\n showdown.helper.forEach(options.extensions, _parseExtension);\n }\n }\n\n /**\n * Parse extension\n * @param {*} ext\n * @param {string} [name='']\n * @private\n */\n function _parseExtension (ext, name) {\n\n name = name || null;\n // If it's a string, the extension was previously loaded\n if (showdown.helper.isString(ext)) {\n ext = showdown.helper.stdExtName(ext);\n name = ext;\n\n // LEGACY_SUPPORT CODE\n if (showdown.extensions[ext]) {\n console.warn('DEPRECATION WARNING: ' + ext + ' is an old extension that uses a deprecated loading method.' +\n 'Please inform the developer that the extension should be updated!');\n legacyExtensionLoading(showdown.extensions[ext], ext);\n return;\n // END LEGACY SUPPORT CODE\n\n } else if (!showdown.helper.isUndefined(extensions[ext])) {\n ext = extensions[ext];\n\n } else {\n throw Error('Extension \"' + ext + '\" could not be loaded. It was either not found or is not a valid extension.');\n }\n }\n\n if (typeof ext === 'function') {\n ext = ext();\n }\n\n if (!showdown.helper.isArray(ext)) {\n ext = [ext];\n }\n\n var validExt = validate(ext, name);\n if (!validExt.valid) {\n throw Error(validExt.error);\n }\n\n for (var i = 0; i < ext.length; ++i) {\n switch (ext[i].type) {\n\n case 'lang':\n langExtensions.push(ext[i]);\n break;\n\n case 'output':\n outputModifiers.push(ext[i]);\n break;\n }\n if (ext[i].hasOwnProperty('listeners')) {\n for (var ln in ext[i].listeners) {\n if (ext[i].listeners.hasOwnProperty(ln)) {\n listen(ln, ext[i].listeners[ln]);\n }\n }\n }\n }\n\n }\n\n /**\n * LEGACY_SUPPORT\n * @param {*} ext\n * @param {string} name\n */\n function legacyExtensionLoading (ext, name) {\n if (typeof ext === 'function') {\n ext = ext(new showdown.Converter());\n }\n if (!showdown.helper.isArray(ext)) {\n ext = [ext];\n }\n var valid = validate(ext, name);\n\n if (!valid.valid) {\n throw Error(valid.error);\n }\n\n for (var i = 0; i < ext.length; ++i) {\n switch (ext[i].type) {\n case 'lang':\n langExtensions.push(ext[i]);\n break;\n case 'output':\n outputModifiers.push(ext[i]);\n break;\n default:// should never reach here\n throw Error('Extension loader error: Type unrecognized!!!');\n }\n }\n }\n\n /**\n * Listen to an event\n * @param {string} name\n * @param {function} callback\n */\n function listen (name, callback) {\n if (!showdown.helper.isString(name)) {\n throw Error('Invalid argument in converter.listen() method: name must be a string, but ' + typeof name + ' given');\n }\n\n if (typeof callback !== 'function') {\n throw Error('Invalid argument in converter.listen() method: callback must be a function, but ' + typeof callback + ' given');\n }\n\n if (!listeners.hasOwnProperty(name)) {\n listeners[name] = [];\n }\n listeners[name].push(callback);\n }\n\n function rTrimInputText (text) {\n var rsp = text.match(/^\\s*/)[0].length,\n rgx = new RegExp('^\\\\s{0,' + rsp + '}', 'gm');\n return text.replace(rgx, '');\n }\n\n /**\n * Dispatch an event\n * @private\n * @param {string} evtName Event name\n * @param {string} text Text\n * @param {{}} options Converter Options\n * @param {{}} globals\n * @returns {string}\n */\n this._dispatch = function dispatch (evtName, text, options, globals) {\n if (listeners.hasOwnProperty(evtName)) {\n for (var ei = 0; ei < listeners[evtName].length; ++ei) {\n var nText = listeners[evtName][ei](evtName, text, this, options, globals);\n if (nText && typeof nText !== 'undefined') {\n text = nText;\n }\n }\n }\n return text;\n };\n\n /**\n * Listen to an event\n * @param {string} name\n * @param {function} callback\n * @returns {showdown.Converter}\n */\n this.listen = function (name, callback) {\n listen(name, callback);\n return this;\n };\n\n /**\n * Converts a markdown string into HTML\n * @param {string} text\n * @returns {*}\n */\n this.makeHtml = function (text) {\n //check if text is not falsy\n if (!text) {\n return text;\n }\n\n var globals = {\n gHtmlBlocks: [],\n gHtmlMdBlocks: [],\n gHtmlSpans: [],\n gUrls: {},\n gTitles: {},\n gDimensions: {},\n gListLevel: 0,\n hashLinkCounts: {},\n langExtensions: langExtensions,\n outputModifiers: outputModifiers,\n converter: this,\n ghCodeBlocks: [],\n metadata: {\n parsed: {},\n raw: '',\n format: ''\n }\n };\n\n // This lets us use ¨ trema as an escape char to avoid md5 hashes\n // The choice of character is arbitrary; anything that isn't\n // magic in Markdown will work.\n text = text.replace(/¨/g, '¨T');\n\n // Replace $ with ¨D\n // RegExp interprets $ as a special character\n // when it's in a replacement string\n text = text.replace(/\\$/g, '¨D');\n\n // Standardize line endings\n text = text.replace(/\\r\\n/g, '\\n'); // DOS to Unix\n text = text.replace(/\\r/g, '\\n'); // Mac to Unix\n\n // Stardardize line spaces\n text = text.replace(/\\u00A0/g, ' ');\n\n if (options.smartIndentationFix) {\n text = rTrimInputText(text);\n }\n\n // Make sure text begins and ends with a couple of newlines:\n text = '\\n\\n' + text + '\\n\\n';\n\n // detab\n text = showdown.subParser('detab')(text, options, globals);\n\n /**\n * Strip any lines consisting only of spaces and tabs.\n * This makes subsequent regexs easier to write, because we can\n * match consecutive blank lines with /\\n+/ instead of something\n * contorted like /[ \\t]*\\n+/\n */\n text = text.replace(/^[ \\t]+$/mg, '');\n\n //run languageExtensions\n showdown.helper.forEach(langExtensions, function (ext) {\n text = showdown.subParser('runExtension')(ext, text, options, globals);\n });\n\n // run the sub parsers\n text = showdown.subParser('metadata')(text, options, globals);\n text = showdown.subParser('hashPreCodeTags')(text, options, globals);\n text = showdown.subParser('githubCodeBlocks')(text, options, globals);\n text = showdown.subParser('hashHTMLBlocks')(text, options, globals);\n text = showdown.subParser('hashCodeTags')(text, options, globals);\n text = showdown.subParser('stripLinkDefinitions')(text, options, globals);\n text = showdown.subParser('blockGamut')(text, options, globals);\n text = showdown.subParser('unhashHTMLSpans')(text, options, globals);\n text = showdown.subParser('unescapeSpecialChars')(text, options, globals);\n\n // attacklab: Restore dollar signs\n text = text.replace(/¨D/g, '$$');\n\n // attacklab: Restore tremas\n text = text.replace(/¨T/g, '¨');\n\n // render a complete html document instead of a partial if the option is enabled\n text = showdown.subParser('completeHTMLDocument')(text, options, globals);\n\n // Run output modifiers\n showdown.helper.forEach(outputModifiers, function (ext) {\n text = showdown.subParser('runExtension')(ext, text, options, globals);\n });\n\n // update metadata\n metadata = globals.metadata;\n return text;\n };\n\n /**\n * Converts an HTML string into a markdown string\n * @param src\n * @param [HTMLParser] A WHATWG DOM and HTML parser, such as JSDOM. If none is supplied, window.document will be used.\n * @returns {string}\n */\n this.makeMarkdown = this.makeMd = function (src, HTMLParser) {\n\n // replace \\r\\n with \\n\n src = src.replace(/\\r\\n/g, '\\n');\n src = src.replace(/\\r/g, '\\n'); // old macs\n\n // due to an edge case, we need to find this: > <\n // to prevent removing of non silent white spaces\n // ex: this is sparta\n src = src.replace(/>[ \\t]+¨NBSP;<');\n\n if (!HTMLParser) {\n if (window && window.document) {\n HTMLParser = window.document;\n } else {\n throw new Error('HTMLParser is undefined. If in a webworker or nodejs environment, you need to provide a WHATWG DOM and HTML such as JSDOM');\n }\n }\n\n var doc = HTMLParser.createElement('div');\n doc.innerHTML = src;\n\n var globals = {\n preList: substitutePreCodeTags(doc)\n };\n\n // remove all newlines and collapse spaces\n clean(doc);\n\n // some stuff, like accidental reference links must now be escaped\n // TODO\n // doc.innerHTML = doc.innerHTML.replace(/\\[[\\S\\t ]]/);\n\n var nodes = doc.childNodes,\n mdDoc = '';\n\n for (var i = 0; i < nodes.length; i++) {\n mdDoc += showdown.subParser('makeMarkdown.node')(nodes[i], globals);\n }\n\n function clean (node) {\n for (var n = 0; n < node.childNodes.length; ++n) {\n var child = node.childNodes[n];\n if (child.nodeType === 3) {\n if (!/\\S/.test(child.nodeValue)) {\n node.removeChild(child);\n --n;\n } else {\n child.nodeValue = child.nodeValue.split('\\n').join(' ');\n child.nodeValue = child.nodeValue.replace(/(\\s)+/g, '$1');\n }\n } else if (child.nodeType === 1) {\n clean(child);\n }\n }\n }\n\n // find all pre tags and replace contents with placeholder\n // we need this so that we can remove all indentation from html\n // to ease up parsing\n function substitutePreCodeTags (doc) {\n\n var pres = doc.querySelectorAll('pre'),\n presPH = [];\n\n for (var i = 0; i < pres.length; ++i) {\n\n if (pres[i].childElementCount === 1 && pres[i].firstChild.tagName.toLowerCase() === 'code') {\n var content = pres[i].firstChild.innerHTML.trim(),\n language = pres[i].firstChild.getAttribute('data-language') || '';\n\n // if data-language attribute is not defined, then we look for class language-*\n if (language === '') {\n var classes = pres[i].firstChild.className.split(' ');\n for (var c = 0; c < classes.length; ++c) {\n var matches = classes[c].match(/^language-(.+)$/);\n if (matches !== null) {\n language = matches[1];\n break;\n }\n }\n }\n\n // unescape html entities in content\n content = showdown.helper.unescapeHTMLEntities(content);\n\n presPH.push(content);\n pres[i].outerHTML = '';\n } else {\n presPH.push(pres[i].innerHTML);\n pres[i].innerHTML = '';\n pres[i].setAttribute('prenum', i.toString());\n }\n }\n return presPH;\n }\n\n return mdDoc;\n };\n\n /**\n * Set an option of this Converter instance\n * @param {string} key\n * @param {*} value\n */\n this.setOption = function (key, value) {\n options[key] = value;\n };\n\n /**\n * Get the option of this Converter instance\n * @param {string} key\n * @returns {*}\n */\n this.getOption = function (key) {\n return options[key];\n };\n\n /**\n * Get the options of this Converter instance\n * @returns {{}}\n */\n this.getOptions = function () {\n return options;\n };\n\n /**\n * Add extension to THIS converter\n * @param {{}} extension\n * @param {string} [name=null]\n */\n this.addExtension = function (extension, name) {\n name = name || null;\n _parseExtension(extension, name);\n };\n\n /**\n * Use a global registered extension with THIS converter\n * @param {string} extensionName Name of the previously registered extension\n */\n this.useExtension = function (extensionName) {\n _parseExtension(extensionName);\n };\n\n /**\n * Set the flavor THIS converter should use\n * @param {string} name\n */\n this.setFlavor = function (name) {\n if (!flavor.hasOwnProperty(name)) {\n throw Error(name + ' flavor was not found');\n }\n var preset = flavor[name];\n setConvFlavor = name;\n for (var option in preset) {\n if (preset.hasOwnProperty(option)) {\n options[option] = preset[option];\n }\n }\n };\n\n /**\n * Get the currently set flavor of this converter\n * @returns {string}\n */\n this.getFlavor = function () {\n return setConvFlavor;\n };\n\n /**\n * Remove an extension from THIS converter.\n * Note: This is a costly operation. It's better to initialize a new converter\n * and specify the extensions you wish to use\n * @param {Array} extension\n */\n this.removeExtension = function (extension) {\n if (!showdown.helper.isArray(extension)) {\n extension = [extension];\n }\n for (var a = 0; a < extension.length; ++a) {\n var ext = extension[a];\n for (var i = 0; i < langExtensions.length; ++i) {\n if (langExtensions[i] === ext) {\n langExtensions[i].splice(i, 1);\n }\n }\n for (var ii = 0; ii < outputModifiers.length; ++i) {\n if (outputModifiers[ii] === ext) {\n outputModifiers[ii].splice(i, 1);\n }\n }\n }\n };\n\n /**\n * Get all extension of THIS converter\n * @returns {{language: Array, output: Array}}\n */\n this.getAllExtensions = function () {\n return {\n language: langExtensions,\n output: outputModifiers\n };\n };\n\n /**\n * Get the metadata of the previously parsed document\n * @param raw\n * @returns {string|{}}\n */\n this.getMetadata = function (raw) {\n if (raw) {\n return metadata.raw;\n } else {\n return metadata.parsed;\n }\n };\n\n /**\n * Get the metadata format of the previously parsed document\n * @returns {string}\n */\n this.getMetadataFormat = function () {\n return metadata.format;\n };\n\n /**\n * Private: set a single key, value metadata pair\n * @param {string} key\n * @param {string} value\n */\n this._setMetadataPair = function (key, value) {\n metadata.parsed[key] = value;\n };\n\n /**\n * Private: set metadata format\n * @param {string} format\n */\n this._setMetadataFormat = function (format) {\n metadata.format = format;\n };\n\n /**\n * Private: set metadata raw text\n * @param {string} raw\n */\n this._setMetadataRaw = function (raw) {\n metadata.raw = raw;\n };\n};\n","/**\n * Turn Markdown link shortcuts into XHTML tags.\n */\nshowdown.subParser('anchors', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('anchors.before', text, options, globals);\n\n var writeAnchorTag = function (wholeMatch, linkText, linkId, url, m5, m6, title) {\n if (showdown.helper.isUndefined(title)) {\n title = '';\n }\n linkId = linkId.toLowerCase();\n\n // Special case for explicit empty url\n if (wholeMatch.search(/\\(? ?(['\"].*['\"])?\\)$/m) > -1) {\n url = '';\n } else if (!url) {\n if (!linkId) {\n // lower-case and turn embedded newlines into spaces\n linkId = linkText.toLowerCase().replace(/ ?\\n/g, ' ');\n }\n url = '#' + linkId;\n\n if (!showdown.helper.isUndefined(globals.gUrls[linkId])) {\n url = globals.gUrls[linkId];\n if (!showdown.helper.isUndefined(globals.gTitles[linkId])) {\n title = globals.gTitles[linkId];\n }\n } else {\n return wholeMatch;\n }\n }\n\n //url = showdown.helper.escapeCharacters(url, '*_', false); // replaced line to improve performance\n url = url.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);\n\n var result = '';\n\n return result;\n };\n\n // First, handle reference-style links: [link text] [id]\n text = text.replace(/\\[((?:\\[[^\\]]*]|[^\\[\\]])*)] ?(?:\\n *)?\\[(.*?)]()()()()/g, writeAnchorTag);\n\n // Next, inline-style links: [link text](url \"optional title\")\n // cases with crazy urls like ./image/cat1).png\n text = text.replace(/\\[((?:\\[[^\\]]*]|[^\\[\\]])*)]()[ \\t]*\\([ \\t]?<([^>]*)>(?:[ \\t]*(([\"'])([^\"]*?)\\5))?[ \\t]?\\)/g,\n writeAnchorTag);\n\n // normal cases\n text = text.replace(/\\[((?:\\[[^\\]]*]|[^\\[\\]])*)]()[ \\t]*\\([ \\t]??(?:[ \\t]*(([\"'])([^\"]*?)\\5))?[ \\t]?\\)/g,\n writeAnchorTag);\n\n // handle reference-style shortcuts: [link text]\n // These must come last in case you've also got [link test][1]\n // or [link test](/foo)\n text = text.replace(/\\[([^\\[\\]]+)]()()()()()/g, writeAnchorTag);\n\n // Lastly handle GithubMentions if option is enabled\n if (options.ghMentions) {\n text = text.replace(/(^|\\s)(\\\\)?(@([a-z\\d]+(?:[a-z\\d.-]+?[a-z\\d]+)*))/gmi, function (wm, st, escape, mentions, username) {\n if (escape === '\\\\') {\n return st + mentions;\n }\n\n //check if options.ghMentionsLink is a string\n if (!showdown.helper.isString(options.ghMentionsLink)) {\n throw new Error('ghMentionsLink option must be a string');\n }\n var lnk = options.ghMentionsLink.replace(/\\{u}/g, username),\n target = '';\n if (options.openLinksInNewWindow) {\n target = ' rel=\"noopener noreferrer\" target=\"¨E95Eblank\"';\n }\n return st + '' + mentions + '';\n });\n }\n\n text = globals.converter._dispatch('anchors.after', text, options, globals);\n return text;\n});\n","// url allowed chars [a-z\\d_.~:/?#[]@!$&'()*+,;=-]\n\nvar simpleURLRegex = /([*~_]+|\\b)(((https?|ftp|dict):\\/\\/|www\\.)[^'\">\\s]+?\\.[^'\">\\s]+?)()(\\1)?(?=\\s|$)(?![\"<>])/gi,\n simpleURLRegex2 = /([*~_]+|\\b)(((https?|ftp|dict):\\/\\/|www\\.)[^'\">\\s]+\\.[^'\">\\s]+?)([.!?,()\\[\\]])?(\\1)?(?=\\s|$)(?![\"<>])/gi,\n delimUrlRegex = /()<(((https?|ftp|dict):\\/\\/|www\\.)[^'\">\\s]+)()>()/gi,\n simpleMailRegex = /(^|\\s)(?:mailto:)?([A-Za-z0-9!#$%&'*+-/=?^_`{|}~.]+@[-a-z0-9]+(\\.[-a-z0-9]+)*\\.[a-z]+)(?=$|\\s)/gmi,\n delimMailRegex = /<()(?:mailto:)?([-.\\w]+@[-a-z0-9]+(\\.[-a-z0-9]+)*\\.[a-z]+)>/gi,\n\n replaceLink = function (options) {\n 'use strict';\n return function (wm, leadingMagicChars, link, m2, m3, trailingPunctuation, trailingMagicChars) {\n link = link.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);\n var lnkTxt = link,\n append = '',\n target = '',\n lmc = leadingMagicChars || '',\n tmc = trailingMagicChars || '';\n if (/^www\\./i.test(link)) {\n link = link.replace(/^www\\./i, 'http://www.');\n }\n if (options.excludeTrailingPunctuationFromURLs && trailingPunctuation) {\n append = trailingPunctuation;\n }\n if (options.openLinksInNewWindow) {\n target = ' rel=\"noopener noreferrer\" target=\"¨E95Eblank\"';\n }\n return lmc + '' + lnkTxt + '' + append + tmc;\n };\n },\n\n replaceMail = function (options, globals) {\n 'use strict';\n return function (wholeMatch, b, mail) {\n var href = 'mailto:';\n b = b || '';\n mail = showdown.subParser('unescapeSpecialChars')(mail, options, globals);\n if (options.encodeEmails) {\n href = showdown.helper.encodeEmailAddress(href + mail);\n mail = showdown.helper.encodeEmailAddress(mail);\n } else {\n href = href + mail;\n }\n return b + '' + mail + '';\n };\n };\n\nshowdown.subParser('autoLinks', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('autoLinks.before', text, options, globals);\n\n text = text.replace(delimUrlRegex, replaceLink(options));\n text = text.replace(delimMailRegex, replaceMail(options, globals));\n\n text = globals.converter._dispatch('autoLinks.after', text, options, globals);\n\n return text;\n});\n\nshowdown.subParser('simplifiedAutoLinks', function (text, options, globals) {\n 'use strict';\n\n if (!options.simplifiedAutoLink) {\n return text;\n }\n\n text = globals.converter._dispatch('simplifiedAutoLinks.before', text, options, globals);\n\n if (options.excludeTrailingPunctuationFromURLs) {\n text = text.replace(simpleURLRegex2, replaceLink(options));\n } else {\n text = text.replace(simpleURLRegex, replaceLink(options));\n }\n text = text.replace(simpleMailRegex, replaceMail(options, globals));\n\n text = globals.converter._dispatch('simplifiedAutoLinks.after', text, options, globals);\n\n return text;\n});\n","/**\n * These are all the transformations that form block-level\n * tags like paragraphs, headers, and list items.\n */\nshowdown.subParser('blockGamut', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('blockGamut.before', text, options, globals);\n\n // we parse blockquotes first so that we can have headings and hrs\n // inside blockquotes\n text = showdown.subParser('blockQuotes')(text, options, globals);\n text = showdown.subParser('headers')(text, options, globals);\n\n // Do Horizontal Rules:\n text = showdown.subParser('horizontalRule')(text, options, globals);\n\n text = showdown.subParser('lists')(text, options, globals);\n text = showdown.subParser('codeBlocks')(text, options, globals);\n text = showdown.subParser('tables')(text, options, globals);\n\n // We already ran _HashHTMLBlocks() before, in Markdown(), but that\n // was to escape raw HTML in the original Markdown source. This time,\n // we're escaping the markup we've just created, so that we don't wrap\n //

tags around block-level tags.\n text = showdown.subParser('hashHTMLBlocks')(text, options, globals);\n text = showdown.subParser('paragraphs')(text, options, globals);\n\n text = globals.converter._dispatch('blockGamut.after', text, options, globals);\n\n return text;\n});\n","showdown.subParser('blockQuotes', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('blockQuotes.before', text, options, globals);\n\n // add a couple extra lines after the text and endtext mark\n text = text + '\\n\\n';\n\n var rgx = /(^ {0,3}>[ \\t]?.+\\n(.+\\n)*\\n*)+/gm;\n\n if (options.splitAdjacentBlockquotes) {\n rgx = /^ {0,3}>[\\s\\S]*?(?:\\n\\n)/gm;\n }\n\n text = text.replace(rgx, function (bq) {\n // attacklab: hack around Konqueror 3.5.4 bug:\n // \"----------bug\".replace(/^-/g,\"\") == \"bug\"\n bq = bq.replace(/^[ \\t]*>[ \\t]?/gm, ''); // trim one level of quoting\n\n // attacklab: clean up hack\n bq = bq.replace(/¨0/g, '');\n\n bq = bq.replace(/^[ \\t]+$/gm, ''); // trim whitespace-only lines\n bq = showdown.subParser('githubCodeBlocks')(bq, options, globals);\n bq = showdown.subParser('blockGamut')(bq, options, globals); // recurse\n\n bq = bq.replace(/(^|\\n)/g, '$1 ');\n // These leading spaces screw with

 content, so we need to fix that:\n    bq = bq.replace(/(\\s*
[^\\r]+?<\\/pre>)/gm, function (wholeMatch, m1) {\n      var pre = m1;\n      // attacklab: hack around Konqueror 3.5.4 bug:\n      pre = pre.replace(/^  /mg, '¨0');\n      pre = pre.replace(/¨0/g, '');\n      return pre;\n    });\n\n    return showdown.subParser('hashBlock')('
\\n' + bq + '\\n
', options, globals);\n });\n\n text = globals.converter._dispatch('blockQuotes.after', text, options, globals);\n return text;\n});\n","/**\n * Process Markdown `
` blocks.\n */\nshowdown.subParser('codeBlocks', function (text, options, globals) {\n  'use strict';\n\n  text = globals.converter._dispatch('codeBlocks.before', text, options, globals);\n\n  // sentinel workarounds for lack of \\A and \\Z, safari\\khtml bug\n  text += '¨0';\n\n  var pattern = /(?:\\n\\n|^)((?:(?:[ ]{4}|\\t).*\\n+)+)(\\n*[ ]{0,3}[^ \\t\\n]|(?=¨0))/g;\n  text = text.replace(pattern, function (wholeMatch, m1, m2) {\n    var codeblock = m1,\n        nextChar = m2,\n        end = '\\n';\n\n    codeblock = showdown.subParser('outdent')(codeblock, options, globals);\n    codeblock = showdown.subParser('encodeCode')(codeblock, options, globals);\n    codeblock = showdown.subParser('detab')(codeblock, options, globals);\n    codeblock = codeblock.replace(/^\\n+/g, ''); // trim leading newlines\n    codeblock = codeblock.replace(/\\n+$/g, ''); // trim trailing newlines\n\n    if (options.omitExtraWLInCodeBlocks) {\n      end = '';\n    }\n\n    codeblock = '
' + codeblock + end + '
';\n\n return showdown.subParser('hashBlock')(codeblock, options, globals) + nextChar;\n });\n\n // strip sentinel\n text = text.replace(/¨0/, '');\n\n text = globals.converter._dispatch('codeBlocks.after', text, options, globals);\n return text;\n});\n","/**\n *\n * * Backtick quotes are used for spans.\n *\n * * You can use multiple backticks as the delimiters if you want to\n * include literal backticks in the code span. So, this input:\n *\n * Just type ``foo `bar` baz`` at the prompt.\n *\n * Will translate to:\n *\n *

Just type foo `bar` baz at the prompt.

\n *\n * There's no arbitrary limit to the number of backticks you\n * can use as delimters. If you need three consecutive backticks\n * in your code, use four for delimiters, etc.\n *\n * * You can use spaces to get literal backticks at the edges:\n *\n * ... type `` `bar` `` ...\n *\n * Turns to:\n *\n * ... type `bar` ...\n */\nshowdown.subParser('codeSpans', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('codeSpans.before', text, options, globals);\n\n if (typeof text === 'undefined') {\n text = '';\n }\n text = text.replace(/(^|[^\\\\])(`+)([^\\r]*?[^`])\\2(?!`)/gm,\n function (wholeMatch, m1, m2, m3) {\n var c = m3;\n c = c.replace(/^([ \\t]*)/g, '');\t// leading whitespace\n c = c.replace(/[ \\t]*$/g, '');\t// trailing whitespace\n c = showdown.subParser('encodeCode')(c, options, globals);\n c = m1 + '' + c + '';\n c = showdown.subParser('hashHTMLSpans')(c, options, globals);\n return c;\n }\n );\n\n text = globals.converter._dispatch('codeSpans.after', text, options, globals);\n return text;\n});\n","/**\n * Create a full HTML document from the processed markdown\n */\nshowdown.subParser('completeHTMLDocument', function (text, options, globals) {\n 'use strict';\n\n if (!options.completeHTMLDocument) {\n return text;\n }\n\n text = globals.converter._dispatch('completeHTMLDocument.before', text, options, globals);\n\n var doctype = 'html',\n doctypeParsed = '\\n',\n title = '',\n charset = '\\n',\n lang = '',\n metadata = '';\n\n if (typeof globals.metadata.parsed.doctype !== 'undefined') {\n doctypeParsed = '\\n';\n doctype = globals.metadata.parsed.doctype.toString().toLowerCase();\n if (doctype === 'html' || doctype === 'html5') {\n charset = '';\n }\n }\n\n for (var meta in globals.metadata.parsed) {\n if (globals.metadata.parsed.hasOwnProperty(meta)) {\n switch (meta.toLowerCase()) {\n case 'doctype':\n break;\n\n case 'title':\n title = '' + globals.metadata.parsed.title + '\\n';\n break;\n\n case 'charset':\n if (doctype === 'html' || doctype === 'html5') {\n charset = '\\n';\n } else {\n charset = '\\n';\n }\n break;\n\n case 'language':\n case 'lang':\n lang = ' lang=\"' + globals.metadata.parsed[meta] + '\"';\n metadata += '\\n';\n break;\n\n default:\n metadata += '\\n';\n }\n }\n }\n\n text = doctypeParsed + '\\n\\n' + title + charset + metadata + '\\n\\n' + text.trim() + '\\n\\n';\n\n text = globals.converter._dispatch('completeHTMLDocument.after', text, options, globals);\n return text;\n});\n","/**\n * Convert all tabs to spaces\n */\nshowdown.subParser('detab', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('detab.before', text, options, globals);\n\n // expand first n-1 tabs\n text = text.replace(/\\t(?=\\t)/g, ' '); // g_tab_width\n\n // replace the nth with two sentinels\n text = text.replace(/\\t/g, '¨A¨B');\n\n // use the sentinel to anchor our regex so it doesn't explode\n text = text.replace(/¨B(.+?)¨A/g, function (wholeMatch, m1) {\n var leadingText = m1,\n numSpaces = 4 - leadingText.length % 4; // g_tab_width\n\n // there *must* be a better way to do this:\n for (var i = 0; i < numSpaces; i++) {\n leadingText += ' ';\n }\n\n return leadingText;\n });\n\n // clean up sentinels\n text = text.replace(/¨A/g, ' '); // g_tab_width\n text = text.replace(/¨B/g, '');\n\n text = globals.converter._dispatch('detab.after', text, options, globals);\n return text;\n});\n","showdown.subParser('ellipsis', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('ellipsis.before', text, options, globals);\n\n text = text.replace(/\\.\\.\\./g, '…');\n\n text = globals.converter._dispatch('ellipsis.after', text, options, globals);\n\n return text;\n});\n","/**\n * Turn emoji codes into emojis\n *\n * List of supported emojis: https://github.com/showdownjs/showdown/wiki/Emojis\n */\nshowdown.subParser('emoji', function (text, options, globals) {\n 'use strict';\n\n if (!options.emoji) {\n return text;\n }\n\n text = globals.converter._dispatch('emoji.before', text, options, globals);\n\n var emojiRgx = /:([\\S]+?):/g;\n\n text = text.replace(emojiRgx, function (wm, emojiCode) {\n if (showdown.helper.emojis.hasOwnProperty(emojiCode)) {\n return showdown.helper.emojis[emojiCode];\n }\n return wm;\n });\n\n text = globals.converter._dispatch('emoji.after', text, options, globals);\n\n return text;\n});\n","/**\n * Smart processing for ampersands and angle brackets that need to be encoded.\n */\nshowdown.subParser('encodeAmpsAndAngles', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('encodeAmpsAndAngles.before', text, options, globals);\n\n // Ampersand-encoding based entirely on Nat Irons's Amputator MT plugin:\n // http://bumppo.net/projects/amputator/\n text = text.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\\w+);)/g, '&');\n\n // Encode naked <'s\n text = text.replace(/<(?![a-z\\/?$!])/gi, '<');\n\n // Encode <\n text = text.replace(/\n text = text.replace(/>/g, '>');\n\n text = globals.converter._dispatch('encodeAmpsAndAngles.after', text, options, globals);\n return text;\n});\n","/**\n * Returns the string, with after processing the following backslash escape sequences.\n *\n * attacklab: The polite way to do this is with the new escapeCharacters() function:\n *\n * text = escapeCharacters(text,\"\\\\\",true);\n * text = escapeCharacters(text,\"`*_{}[]()>#+-.!\",true);\n *\n * ...but we're sidestepping its use of the (slow) RegExp constructor\n * as an optimization for Firefox. This function gets called a LOT.\n */\nshowdown.subParser('encodeBackslashEscapes', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('encodeBackslashEscapes.before', text, options, globals);\n\n text = text.replace(/\\\\(\\\\)/g, showdown.helper.escapeCharactersCallback);\n text = text.replace(/\\\\([`*_{}\\[\\]()>#+.!~=|-])/g, showdown.helper.escapeCharactersCallback);\n\n text = globals.converter._dispatch('encodeBackslashEscapes.after', text, options, globals);\n return text;\n});\n","/**\n * Encode/escape certain characters inside Markdown code runs.\n * The point is that in code, these characters are literals,\n * and lose their special Markdown meanings.\n */\nshowdown.subParser('encodeCode', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('encodeCode.before', text, options, globals);\n\n // Encode all ampersands; HTML entities are not\n // entities within a Markdown code span.\n text = text\n .replace(/&/g, '&')\n // Do the angle bracket song and dance:\n .replace(//g, '>')\n // Now, escape characters that are magic in Markdown:\n .replace(/([*_{}\\[\\]\\\\=~-])/g, showdown.helper.escapeCharactersCallback);\n\n text = globals.converter._dispatch('encodeCode.after', text, options, globals);\n return text;\n});\n","/**\n * Within tags -- meaning between < and > -- encode [\\ ` * _ ~ =] so they\n * don't conflict with their use in Markdown for code, italics and strong.\n */\nshowdown.subParser('escapeSpecialCharsWithinTagAttributes', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('escapeSpecialCharsWithinTagAttributes.before', text, options, globals);\n\n // Build a regex to find HTML tags.\n var tags = /<\\/?[a-z\\d_:-]+(?:[\\s]+[\\s\\S]+?)?>/gi,\n comments = /-]|-[^>])(?:[^-]|-[^-])*)--)>/gi;\n\n text = text.replace(tags, function (wholeMatch) {\n return wholeMatch\n .replace(/(.)<\\/?code>(?=.)/g, '$1`')\n .replace(/([\\\\`*_~=|])/g, showdown.helper.escapeCharactersCallback);\n });\n\n text = text.replace(comments, function (wholeMatch) {\n return wholeMatch\n .replace(/([\\\\`*_~=|])/g, showdown.helper.escapeCharactersCallback);\n });\n\n text = globals.converter._dispatch('escapeSpecialCharsWithinTagAttributes.after', text, options, globals);\n return text;\n});\n","/**\n * Handle github codeblocks prior to running HashHTML so that\n * HTML contained within the codeblock gets escaped properly\n * Example:\n * ```ruby\n * def hello_world(x)\n * puts \"Hello, #{x}\"\n * end\n * ```\n */\nshowdown.subParser('githubCodeBlocks', function (text, options, globals) {\n 'use strict';\n\n // early exit if option is not enabled\n if (!options.ghCodeBlocks) {\n return text;\n }\n\n text = globals.converter._dispatch('githubCodeBlocks.before', text, options, globals);\n\n text += '¨0';\n\n text = text.replace(/(?:^|\\n)(?: {0,3})(```+|~~~+)(?: *)([^\\s`~]*)\\n([\\s\\S]*?)\\n(?: {0,3})\\1/g, function (wholeMatch, delim, language, codeblock) {\n var end = (options.omitExtraWLInCodeBlocks) ? '' : '\\n';\n\n // First parse the github code block\n codeblock = showdown.subParser('encodeCode')(codeblock, options, globals);\n codeblock = showdown.subParser('detab')(codeblock, options, globals);\n codeblock = codeblock.replace(/^\\n+/g, ''); // trim leading newlines\n codeblock = codeblock.replace(/\\n+$/g, ''); // trim trailing whitespace\n\n codeblock = '
' + codeblock + end + '
';\n\n codeblock = showdown.subParser('hashBlock')(codeblock, options, globals);\n\n // Since GHCodeblocks can be false positives, we need to\n // store the primitive text and the parsed text in a global var,\n // and then return a token\n return '\\n\\n¨G' + (globals.ghCodeBlocks.push({text: wholeMatch, codeblock: codeblock}) - 1) + 'G\\n\\n';\n });\n\n // attacklab: strip sentinel\n text = text.replace(/¨0/, '');\n\n return globals.converter._dispatch('githubCodeBlocks.after', text, options, globals);\n});\n","showdown.subParser('hashBlock', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('hashBlock.before', text, options, globals);\n text = text.replace(/(^\\n+|\\n+$)/g, '');\n text = '\\n\\n¨K' + (globals.gHtmlBlocks.push(text) - 1) + 'K\\n\\n';\n text = globals.converter._dispatch('hashBlock.after', text, options, globals);\n return text;\n});\n","/**\n * Hash and escape elements that should not be parsed as markdown\n */\nshowdown.subParser('hashCodeTags', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('hashCodeTags.before', text, options, globals);\n\n var repFunc = function (wholeMatch, match, left, right) {\n var codeblock = left + showdown.subParser('encodeCode')(match, options, globals) + right;\n return '¨C' + (globals.gHtmlSpans.push(codeblock) - 1) + 'C';\n };\n\n // Hash naked \n text = showdown.helper.replaceRecursiveRegExp(text, repFunc, ']*>', '', 'gim');\n\n text = globals.converter._dispatch('hashCodeTags.after', text, options, globals);\n return text;\n});\n","showdown.subParser('hashElement', function (text, options, globals) {\n 'use strict';\n\n return function (wholeMatch, m1) {\n var blockText = m1;\n\n // Undo double lines\n blockText = blockText.replace(/\\n\\n/g, '\\n');\n blockText = blockText.replace(/^\\n/, '');\n\n // strip trailing blank lines\n blockText = blockText.replace(/\\n+$/g, '');\n\n // Replace the element text with a marker (\"¨KxK\" where x is its key)\n blockText = '\\n\\n¨K' + (globals.gHtmlBlocks.push(blockText) - 1) + 'K\\n\\n';\n\n return blockText;\n };\n});\n","showdown.subParser('hashHTMLBlocks', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('hashHTMLBlocks.before', text, options, globals);\n\n var blockTags = [\n 'pre',\n 'div',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'table',\n 'dl',\n 'ol',\n 'ul',\n 'script',\n 'noscript',\n 'form',\n 'fieldset',\n 'iframe',\n 'math',\n 'style',\n 'section',\n 'header',\n 'footer',\n 'nav',\n 'article',\n 'aside',\n 'address',\n 'audio',\n 'canvas',\n 'figure',\n 'hgroup',\n 'output',\n 'video',\n 'p'\n ],\n repFunc = function (wholeMatch, match, left, right) {\n var txt = wholeMatch;\n // check if this html element is marked as markdown\n // if so, it's contents should be parsed as markdown\n if (left.search(/\\bmarkdown\\b/) !== -1) {\n txt = left + globals.converter.makeHtml(match) + right;\n }\n return '\\n\\n¨K' + (globals.gHtmlBlocks.push(txt) - 1) + 'K\\n\\n';\n };\n\n if (options.backslashEscapesHTMLTags) {\n // encode backslash escaped HTML tags\n text = text.replace(/\\\\<(\\/?[^>]+?)>/g, function (wm, inside) {\n return '<' + inside + '>';\n });\n }\n\n // hash HTML Blocks\n for (var i = 0; i < blockTags.length; ++i) {\n\n var opTagPos,\n rgx1 = new RegExp('^ {0,3}(<' + blockTags[i] + '\\\\b[^>]*>)', 'im'),\n patLeft = '<' + blockTags[i] + '\\\\b[^>]*>',\n patRight = '';\n // 1. Look for the first position of the first opening HTML tag in the text\n while ((opTagPos = showdown.helper.regexIndexOf(text, rgx1)) !== -1) {\n\n // if the HTML tag is \\ escaped, we need to escape it and break\n\n\n //2. Split the text in that position\n var subTexts = showdown.helper.splitAtIndex(text, opTagPos),\n //3. Match recursively\n newSubText1 = showdown.helper.replaceRecursiveRegExp(subTexts[1], repFunc, patLeft, patRight, 'im');\n\n // prevent an infinite loop\n if (newSubText1 === subTexts[1]) {\n break;\n }\n text = subTexts[0].concat(newSubText1);\n }\n }\n // HR SPECIAL CASE\n text = text.replace(/(\\n {0,3}(<(hr)\\b([^<>])*?\\/?>)[ \\t]*(?=\\n{2,}))/g,\n showdown.subParser('hashElement')(text, options, globals));\n\n // Special case for standalone HTML comments\n text = showdown.helper.replaceRecursiveRegExp(text, function (txt) {\n return '\\n\\n¨K' + (globals.gHtmlBlocks.push(txt) - 1) + 'K\\n\\n';\n }, '^ {0,3}', 'gm');\n\n // PHP and ASP-style processor instructions ( and <%...%>)\n text = text.replace(/(?:\\n\\n)( {0,3}(?:<([?%])[^\\r]*?\\2>)[ \\t]*(?=\\n{2,}))/g,\n showdown.subParser('hashElement')(text, options, globals));\n\n text = globals.converter._dispatch('hashHTMLBlocks.after', text, options, globals);\n return text;\n});\n","/**\n * Hash span elements that should not be parsed as markdown\n */\nshowdown.subParser('hashHTMLSpans', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('hashHTMLSpans.before', text, options, globals);\n\n function hashHTMLSpan (html) {\n return '¨C' + (globals.gHtmlSpans.push(html) - 1) + 'C';\n }\n\n // Hash Self Closing tags\n text = text.replace(/<[^>]+?\\/>/gi, function (wm) {\n return hashHTMLSpan(wm);\n });\n\n // Hash tags without properties\n text = text.replace(/<([^>]+?)>[\\s\\S]*?<\\/\\1>/g, function (wm) {\n return hashHTMLSpan(wm);\n });\n\n // Hash tags with properties\n text = text.replace(/<([^>]+?)\\s[^>]+?>[\\s\\S]*?<\\/\\1>/g, function (wm) {\n return hashHTMLSpan(wm);\n });\n\n // Hash self closing tags without />\n text = text.replace(/<[^>]+?>/gi, function (wm) {\n return hashHTMLSpan(wm);\n });\n\n /*showdown.helper.matchRecursiveRegExp(text, ']*>', '', 'gi');*/\n\n text = globals.converter._dispatch('hashHTMLSpans.after', text, options, globals);\n return text;\n});\n\n/**\n * Unhash HTML spans\n */\nshowdown.subParser('unhashHTMLSpans', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('unhashHTMLSpans.before', text, options, globals);\n\n for (var i = 0; i < globals.gHtmlSpans.length; ++i) {\n var repText = globals.gHtmlSpans[i],\n // limiter to prevent infinite loop (assume 10 as limit for recurse)\n limit = 0;\n\n while (/¨C(\\d+)C/.test(repText)) {\n var num = RegExp.$1;\n repText = repText.replace('¨C' + num + 'C', globals.gHtmlSpans[num]);\n if (limit === 10) {\n console.error('maximum nesting of 10 spans reached!!!');\n break;\n }\n ++limit;\n }\n text = text.replace('¨C' + i + 'C', repText);\n }\n\n text = globals.converter._dispatch('unhashHTMLSpans.after', text, options, globals);\n return text;\n});\n","/**\n * Hash and escape
 elements that should not be parsed as markdown\n */\nshowdown.subParser('hashPreCodeTags', function (text, options, globals) {\n  'use strict';\n  text = globals.converter._dispatch('hashPreCodeTags.before', text, options, globals);\n\n  var repFunc = function (wholeMatch, match, left, right) {\n    // encode html entities\n    var codeblock = left + showdown.subParser('encodeCode')(match, options, globals) + right;\n    return '\\n\\n¨G' + (globals.ghCodeBlocks.push({text: wholeMatch, codeblock: codeblock}) - 1) + 'G\\n\\n';\n  };\n\n  // Hash 
\n  text = showdown.helper.replaceRecursiveRegExp(text, repFunc, '^ {0,3}]*>\\\\s*]*>', '^ {0,3}\\\\s*
', 'gim');\n\n text = globals.converter._dispatch('hashPreCodeTags.after', text, options, globals);\n return text;\n});\n","showdown.subParser('headers', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('headers.before', text, options, globals);\n\n var headerLevelStart = (isNaN(parseInt(options.headerLevelStart))) ? 1 : parseInt(options.headerLevelStart),\n\n // Set text-style headers:\n //\tHeader 1\n //\t========\n //\n //\tHeader 2\n //\t--------\n //\n setextRegexH1 = (options.smoothLivePreview) ? /^(.+)[ \\t]*\\n={2,}[ \\t]*\\n+/gm : /^(.+)[ \\t]*\\n=+[ \\t]*\\n+/gm,\n setextRegexH2 = (options.smoothLivePreview) ? /^(.+)[ \\t]*\\n-{2,}[ \\t]*\\n+/gm : /^(.+)[ \\t]*\\n-+[ \\t]*\\n+/gm;\n\n text = text.replace(setextRegexH1, function (wholeMatch, m1) {\n\n var spanGamut = showdown.subParser('spanGamut')(m1, options, globals),\n hID = (options.noHeaderId) ? '' : ' id=\"' + headerId(m1) + '\"',\n hLevel = headerLevelStart,\n hashBlock = '' + spanGamut + '';\n return showdown.subParser('hashBlock')(hashBlock, options, globals);\n });\n\n text = text.replace(setextRegexH2, function (matchFound, m1) {\n var spanGamut = showdown.subParser('spanGamut')(m1, options, globals),\n hID = (options.noHeaderId) ? '' : ' id=\"' + headerId(m1) + '\"',\n hLevel = headerLevelStart + 1,\n hashBlock = '' + spanGamut + '';\n return showdown.subParser('hashBlock')(hashBlock, options, globals);\n });\n\n // atx-style headers:\n // # Header 1\n // ## Header 2\n // ## Header 2 with closing hashes ##\n // ...\n // ###### Header 6\n //\n var atxStyle = (options.requireSpaceBeforeHeadingText) ? /^(#{1,6})[ \\t]+(.+?)[ \\t]*#*\\n+/gm : /^(#{1,6})[ \\t]*(.+?)[ \\t]*#*\\n+/gm;\n\n text = text.replace(atxStyle, function (wholeMatch, m1, m2) {\n var hText = m2;\n if (options.customizedHeaderId) {\n hText = m2.replace(/\\s?\\{([^{]+?)}\\s*$/, '');\n }\n\n var span = showdown.subParser('spanGamut')(hText, options, globals),\n hID = (options.noHeaderId) ? '' : ' id=\"' + headerId(m2) + '\"',\n hLevel = headerLevelStart - 1 + m1.length,\n header = '' + span + '';\n\n return showdown.subParser('hashBlock')(header, options, globals);\n });\n\n function headerId (m) {\n var title,\n prefix;\n\n // It is separate from other options to allow combining prefix and customized\n if (options.customizedHeaderId) {\n var match = m.match(/\\{([^{]+?)}\\s*$/);\n if (match && match[1]) {\n m = match[1];\n }\n }\n\n title = m;\n\n // Prefix id to prevent causing inadvertent pre-existing style matches.\n if (showdown.helper.isString(options.prefixHeaderId)) {\n prefix = options.prefixHeaderId;\n } else if (options.prefixHeaderId === true) {\n prefix = 'section-';\n } else {\n prefix = '';\n }\n\n if (!options.rawPrefixHeaderId) {\n title = prefix + title;\n }\n\n if (options.ghCompatibleHeaderId) {\n title = title\n .replace(/ /g, '-')\n // replace previously escaped chars (&, ¨ and $)\n .replace(/&/g, '')\n .replace(/¨T/g, '')\n .replace(/¨D/g, '')\n // replace rest of the chars (&~$ are repeated as they might have been escaped)\n // borrowed from github's redcarpet (some they should produce similar results)\n .replace(/[&+$,\\/:;=?@\"#{}|^¨~\\[\\]`\\\\*)(%.!'<>]/g, '')\n .toLowerCase();\n } else if (options.rawHeaderId) {\n title = title\n .replace(/ /g, '-')\n // replace previously escaped chars (&, ¨ and $)\n .replace(/&/g, '&')\n .replace(/¨T/g, '¨')\n .replace(/¨D/g, '$')\n // replace \" and '\n .replace(/[\"']/g, '-')\n .toLowerCase();\n } else {\n title = title\n .replace(/[^\\w]/g, '')\n .toLowerCase();\n }\n\n if (options.rawPrefixHeaderId) {\n title = prefix + title;\n }\n\n if (globals.hashLinkCounts[title]) {\n title = title + '-' + (globals.hashLinkCounts[title]++);\n } else {\n globals.hashLinkCounts[title] = 1;\n }\n return title;\n }\n\n text = globals.converter._dispatch('headers.after', text, options, globals);\n return text;\n});\n","/**\n * Turn Markdown link shortcuts into XHTML tags.\n */\nshowdown.subParser('horizontalRule', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('horizontalRule.before', text, options, globals);\n\n var key = showdown.subParser('hashBlock')('
', options, globals);\n text = text.replace(/^ {0,2}( ?-){3,}[ \\t]*$/gm, key);\n text = text.replace(/^ {0,2}( ?\\*){3,}[ \\t]*$/gm, key);\n text = text.replace(/^ {0,2}( ?_){3,}[ \\t]*$/gm, key);\n\n text = globals.converter._dispatch('horizontalRule.after', text, options, globals);\n return text;\n});\n","/**\n * Turn Markdown image shortcuts into tags.\n */\nshowdown.subParser('images', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('images.before', text, options, globals);\n\n var inlineRegExp = /!\\[([^\\]]*?)][ \\t]*()\\([ \\t]??(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*(?:([\"'])([^\"]*?)\\6)?[ \\t]?\\)/g,\n crazyRegExp = /!\\[([^\\]]*?)][ \\t]*()\\([ \\t]?<([^>]*)>(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*(?:(?:([\"'])([^\"]*?)\\6))?[ \\t]?\\)/g,\n base64RegExp = /!\\[([^\\]]*?)][ \\t]*()\\([ \\t]??(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*(?:([\"'])([^\"]*?)\\6)?[ \\t]?\\)/g,\n referenceRegExp = /!\\[([^\\]]*?)] ?(?:\\n *)?\\[([\\s\\S]*?)]()()()()()/g,\n refShortcutRegExp = /!\\[([^\\[\\]]+)]()()()()()/g;\n\n function writeImageTagBase64 (wholeMatch, altText, linkId, url, width, height, m5, title) {\n url = url.replace(/\\s/g, '');\n return writeImageTag (wholeMatch, altText, linkId, url, width, height, m5, title);\n }\n\n function writeImageTag (wholeMatch, altText, linkId, url, width, height, m5, title) {\n\n var gUrls = globals.gUrls,\n gTitles = globals.gTitles,\n gDims = globals.gDimensions;\n\n linkId = linkId.toLowerCase();\n\n if (!title) {\n title = '';\n }\n // Special case for explicit empty url\n if (wholeMatch.search(/\\(? ?(['\"].*['\"])?\\)$/m) > -1) {\n url = '';\n\n } else if (url === '' || url === null) {\n if (linkId === '' || linkId === null) {\n // lower-case and turn embedded newlines into spaces\n linkId = altText.toLowerCase().replace(/ ?\\n/g, ' ');\n }\n url = '#' + linkId;\n\n if (!showdown.helper.isUndefined(gUrls[linkId])) {\n url = gUrls[linkId];\n if (!showdown.helper.isUndefined(gTitles[linkId])) {\n title = gTitles[linkId];\n }\n if (!showdown.helper.isUndefined(gDims[linkId])) {\n width = gDims[linkId].width;\n height = gDims[linkId].height;\n }\n } else {\n return wholeMatch;\n }\n }\n\n altText = altText\n .replace(/\"/g, '"')\n //altText = showdown.helper.escapeCharacters(altText, '*_', false);\n .replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);\n //url = showdown.helper.escapeCharacters(url, '*_', false);\n url = url.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);\n var result = '\"'x \"optional title\")\n\n // base64 encoded images\n text = text.replace(base64RegExp, writeImageTagBase64);\n\n // cases with crazy urls like ./image/cat1).png\n text = text.replace(crazyRegExp, writeImageTag);\n\n // normal cases\n text = text.replace(inlineRegExp, writeImageTag);\n\n // handle reference-style shortcuts: ![img text]\n text = text.replace(refShortcutRegExp, writeImageTag);\n\n text = globals.converter._dispatch('images.after', text, options, globals);\n return text;\n});\n","showdown.subParser('italicsAndBold', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('italicsAndBold.before', text, options, globals);\n\n // it's faster to have 3 separate regexes for each case than have just one\n // because of backtracing, in some cases, it could lead to an exponential effect\n // called \"catastrophic backtrace\". Ominous!\n\n function parseInside (txt, left, right) {\n /*\n if (options.simplifiedAutoLink) {\n txt = showdown.subParser('simplifiedAutoLinks')(txt, options, globals);\n }\n */\n return left + txt + right;\n }\n\n // Parse underscores\n if (options.literalMidWordUnderscores) {\n text = text.replace(/\\b___(\\S[\\s\\S]*?)___\\b/g, function (wm, txt) {\n return parseInside (txt, '', '');\n });\n text = text.replace(/\\b__(\\S[\\s\\S]*?)__\\b/g, function (wm, txt) {\n return parseInside (txt, '', '');\n });\n text = text.replace(/\\b_(\\S[\\s\\S]*?)_\\b/g, function (wm, txt) {\n return parseInside (txt, '', '');\n });\n } else {\n text = text.replace(/___(\\S[\\s\\S]*?)___/g, function (wm, m) {\n return (/\\S$/.test(m)) ? parseInside (m, '', '') : wm;\n });\n text = text.replace(/__(\\S[\\s\\S]*?)__/g, function (wm, m) {\n return (/\\S$/.test(m)) ? parseInside (m, '', '') : wm;\n });\n text = text.replace(/_([^\\s_][\\s\\S]*?)_/g, function (wm, m) {\n // !/^_[^_]/.test(m) - test if it doesn't start with __ (since it seems redundant, we removed it)\n return (/\\S$/.test(m)) ? parseInside (m, '', '') : wm;\n });\n }\n\n // Now parse asterisks\n if (options.literalMidWordAsterisks) {\n text = text.replace(/([^*]|^)\\B\\*\\*\\*(\\S[\\s\\S]*?)\\*\\*\\*\\B(?!\\*)/g, function (wm, lead, txt) {\n return parseInside (txt, lead + '', '');\n });\n text = text.replace(/([^*]|^)\\B\\*\\*(\\S[\\s\\S]*?)\\*\\*\\B(?!\\*)/g, function (wm, lead, txt) {\n return parseInside (txt, lead + '', '');\n });\n text = text.replace(/([^*]|^)\\B\\*(\\S[\\s\\S]*?)\\*\\B(?!\\*)/g, function (wm, lead, txt) {\n return parseInside (txt, lead + '', '');\n });\n } else {\n text = text.replace(/\\*\\*\\*(\\S[\\s\\S]*?)\\*\\*\\*/g, function (wm, m) {\n return (/\\S$/.test(m)) ? parseInside (m, '', '') : wm;\n });\n text = text.replace(/\\*\\*(\\S[\\s\\S]*?)\\*\\*/g, function (wm, m) {\n return (/\\S$/.test(m)) ? parseInside (m, '', '') : wm;\n });\n text = text.replace(/\\*([^\\s*][\\s\\S]*?)\\*/g, function (wm, m) {\n // !/^\\*[^*]/.test(m) - test if it doesn't start with ** (since it seems redundant, we removed it)\n return (/\\S$/.test(m)) ? parseInside (m, '', '') : wm;\n });\n }\n\n\n text = globals.converter._dispatch('italicsAndBold.after', text, options, globals);\n return text;\n});\n","/**\n * Form HTML ordered (numbered) and unordered (bulleted) lists.\n */\nshowdown.subParser('lists', function (text, options, globals) {\n 'use strict';\n\n /**\n * Process the contents of a single ordered or unordered list, splitting it\n * into individual list items.\n * @param {string} listStr\n * @param {boolean} trimTrailing\n * @returns {string}\n */\n function processListItems (listStr, trimTrailing) {\n // The $g_list_level global keeps track of when we're inside a list.\n // Each time we enter a list, we increment it; when we leave a list,\n // we decrement. If it's zero, we're not in a list anymore.\n //\n // We do this because when we're not inside a list, we want to treat\n // something like this:\n //\n // I recommend upgrading to version\n // 8. Oops, now this line is treated\n // as a sub-list.\n //\n // As a single paragraph, despite the fact that the second line starts\n // with a digit-period-space sequence.\n //\n // Whereas when we're inside a list (or sub-list), that line will be\n // treated as the start of a sub-list. What a kludge, huh? This is\n // an aspect of Markdown's syntax that's hard to parse perfectly\n // without resorting to mind-reading. Perhaps the solution is to\n // change the syntax rules such that sub-lists must start with a\n // starting cardinal number; e.g. \"1.\" or \"a.\".\n globals.gListLevel++;\n\n // trim trailing blank lines:\n listStr = listStr.replace(/\\n{2,}$/, '\\n');\n\n // attacklab: add sentinel to emulate \\z\n listStr += '¨0';\n\n var rgx = /(\\n)?(^ {0,3})([*+-]|\\d+[.])[ \\t]+((\\[(x|X| )?])?[ \\t]*[^\\r]+?(\\n{1,2}))(?=\\n*(¨0| {0,3}([*+-]|\\d+[.])[ \\t]+))/gm,\n isParagraphed = (/\\n[ \\t]*\\n(?!¨0)/.test(listStr));\n\n // Since version 1.5, nesting sublists requires 4 spaces (or 1 tab) indentation,\n // which is a syntax breaking change\n // activating this option reverts to old behavior\n if (options.disableForced4SpacesIndentedSublists) {\n rgx = /(\\n)?(^ {0,3})([*+-]|\\d+[.])[ \\t]+((\\[(x|X| )?])?[ \\t]*[^\\r]+?(\\n{1,2}))(?=\\n*(¨0|\\2([*+-]|\\d+[.])[ \\t]+))/gm;\n }\n\n listStr = listStr.replace(rgx, function (wholeMatch, m1, m2, m3, m4, taskbtn, checked) {\n checked = (checked && checked.trim() !== '');\n\n var item = showdown.subParser('outdent')(m4, options, globals),\n bulletStyle = '';\n\n // Support for github tasklists\n if (taskbtn && options.tasklists) {\n bulletStyle = ' class=\"task-list-item\" style=\"list-style-type: none;\"';\n item = item.replace(/^[ \\t]*\\[(x|X| )?]/m, function () {\n var otp = '
  • a
  • \n // instead of:\n //
    • - - a
    \n // So, to prevent it, we will put a marker (¨A)in the beginning of the line\n // Kind of hackish/monkey patching, but seems more effective than overcomplicating the list parser\n item = item.replace(/^([-*+]|\\d\\.)[ \\t]+[\\S\\n ]*/g, function (wm2) {\n return '¨A' + wm2;\n });\n\n // m1 - Leading line or\n // Has a double return (multi paragraph) or\n // Has sublist\n if (m1 || (item.search(/\\n{2,}/) > -1)) {\n item = showdown.subParser('githubCodeBlocks')(item, options, globals);\n item = showdown.subParser('blockGamut')(item, options, globals);\n } else {\n // Recursion for sub-lists:\n item = showdown.subParser('lists')(item, options, globals);\n item = item.replace(/\\n$/, ''); // chomp(item)\n item = showdown.subParser('hashHTMLBlocks')(item, options, globals);\n\n // Colapse double linebreaks\n item = item.replace(/\\n\\n+/g, '\\n\\n');\n if (isParagraphed) {\n item = showdown.subParser('paragraphs')(item, options, globals);\n } else {\n item = showdown.subParser('spanGamut')(item, options, globals);\n }\n }\n\n // now we need to remove the marker (¨A)\n item = item.replace('¨A', '');\n // we can finally wrap the line in list item tags\n item = '' + item + '\\n';\n\n return item;\n });\n\n // attacklab: strip sentinel\n listStr = listStr.replace(/¨0/g, '');\n\n globals.gListLevel--;\n\n if (trimTrailing) {\n listStr = listStr.replace(/\\s+$/, '');\n }\n\n return listStr;\n }\n\n function styleStartNumber (list, listType) {\n // check if ol and starts by a number different than 1\n if (listType === 'ol') {\n var res = list.match(/^ *(\\d+)\\./);\n if (res && res[1] !== '1') {\n return ' start=\"' + res[1] + '\"';\n }\n }\n return '';\n }\n\n /**\n * Check and parse consecutive lists (better fix for issue #142)\n * @param {string} list\n * @param {string} listType\n * @param {boolean} trimTrailing\n * @returns {string}\n */\n function parseConsecutiveLists (list, listType, trimTrailing) {\n // check if we caught 2 or more consecutive lists by mistake\n // we use the counterRgx, meaning if listType is UL we look for OL and vice versa\n var olRgx = (options.disableForced4SpacesIndentedSublists) ? /^ ?\\d+\\.[ \\t]/gm : /^ {0,3}\\d+\\.[ \\t]/gm,\n ulRgx = (options.disableForced4SpacesIndentedSublists) ? /^ ?[*+-][ \\t]/gm : /^ {0,3}[*+-][ \\t]/gm,\n counterRxg = (listType === 'ul') ? olRgx : ulRgx,\n result = '';\n\n if (list.search(counterRxg) !== -1) {\n (function parseCL (txt) {\n var pos = txt.search(counterRxg),\n style = styleStartNumber(list, listType);\n if (pos !== -1) {\n // slice\n result += '\\n\\n<' + listType + style + '>\\n' + processListItems(txt.slice(0, pos), !!trimTrailing) + '\\n';\n\n // invert counterType and listType\n listType = (listType === 'ul') ? 'ol' : 'ul';\n counterRxg = (listType === 'ul') ? olRgx : ulRgx;\n\n //recurse\n parseCL(txt.slice(pos));\n } else {\n result += '\\n\\n<' + listType + style + '>\\n' + processListItems(txt, !!trimTrailing) + '\\n';\n }\n })(list);\n } else {\n var style = styleStartNumber(list, listType);\n result = '\\n\\n<' + listType + style + '>\\n' + processListItems(list, !!trimTrailing) + '\\n';\n }\n\n return result;\n }\n\n /** Start of list parsing **/\n text = globals.converter._dispatch('lists.before', text, options, globals);\n // add sentinel to hack around khtml/safari bug:\n // http://bugs.webkit.org/show_bug.cgi?id=11231\n text += '¨0';\n\n if (globals.gListLevel) {\n text = text.replace(/^(( {0,3}([*+-]|\\d+[.])[ \\t]+)[^\\r]+?(¨0|\\n{2,}(?=\\S)(?![ \\t]*(?:[*+-]|\\d+[.])[ \\t]+)))/gm,\n function (wholeMatch, list, m2) {\n var listType = (m2.search(/[*+-]/g) > -1) ? 'ul' : 'ol';\n return parseConsecutiveLists(list, listType, true);\n }\n );\n } else {\n text = text.replace(/(\\n\\n|^\\n?)(( {0,3}([*+-]|\\d+[.])[ \\t]+)[^\\r]+?(¨0|\\n{2,}(?=\\S)(?![ \\t]*(?:[*+-]|\\d+[.])[ \\t]+)))/gm,\n function (wholeMatch, m1, list, m3) {\n var listType = (m3.search(/[*+-]/g) > -1) ? 'ul' : 'ol';\n return parseConsecutiveLists(list, listType, false);\n }\n );\n }\n\n // strip sentinel\n text = text.replace(/¨0/, '');\n text = globals.converter._dispatch('lists.after', text, options, globals);\n return text;\n});\n","/**\n * Parse metadata at the top of the document\n */\nshowdown.subParser('metadata', function (text, options, globals) {\n 'use strict';\n\n if (!options.metadata) {\n return text;\n }\n\n text = globals.converter._dispatch('metadata.before', text, options, globals);\n\n function parseMetadataContents (content) {\n // raw is raw so it's not changed in any way\n globals.metadata.raw = content;\n\n // escape chars forbidden in html attributes\n // double quotes\n content = content\n // ampersand first\n .replace(/&/g, '&')\n // double quotes\n .replace(/\"/g, '"');\n\n content = content.replace(/\\n {4}/g, ' ');\n content.replace(/^([\\S ]+): +([\\s\\S]+?)$/gm, function (wm, key, value) {\n globals.metadata.parsed[key] = value;\n return '';\n });\n }\n\n text = text.replace(/^\\s*«««+(\\S*?)\\n([\\s\\S]+?)\\n»»»+\\n/, function (wholematch, format, content) {\n parseMetadataContents(content);\n return '¨M';\n });\n\n text = text.replace(/^\\s*---+(\\S*?)\\n([\\s\\S]+?)\\n---+\\n/, function (wholematch, format, content) {\n if (format) {\n globals.metadata.format = format;\n }\n parseMetadataContents(content);\n return '¨M';\n });\n\n text = text.replace(/¨M/g, '');\n\n text = globals.converter._dispatch('metadata.after', text, options, globals);\n return text;\n});\n","/**\n * Remove one level of line-leading tabs or spaces\n */\nshowdown.subParser('outdent', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('outdent.before', text, options, globals);\n\n // attacklab: hack around Konqueror 3.5.4 bug:\n // \"----------bug\".replace(/^-/g,\"\") == \"bug\"\n text = text.replace(/^(\\t|[ ]{1,4})/gm, '¨0'); // attacklab: g_tab_width\n\n // attacklab: clean up hack\n text = text.replace(/¨0/g, '');\n\n text = globals.converter._dispatch('outdent.after', text, options, globals);\n return text;\n});\n","/**\n *\n */\nshowdown.subParser('paragraphs', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('paragraphs.before', text, options, globals);\n // Strip leading and trailing lines:\n text = text.replace(/^\\n+/g, '');\n text = text.replace(/\\n+$/g, '');\n\n var grafs = text.split(/\\n{2,}/g),\n grafsOut = [],\n end = grafs.length; // Wrap

    tags\n\n for (var i = 0; i < end; i++) {\n var str = grafs[i];\n // if this is an HTML marker, copy it\n if (str.search(/¨(K|G)(\\d+)\\1/g) >= 0) {\n grafsOut.push(str);\n\n // test for presence of characters to prevent empty lines being parsed\n // as paragraphs (resulting in undesired extra empty paragraphs)\n } else if (str.search(/\\S/) >= 0) {\n str = showdown.subParser('spanGamut')(str, options, globals);\n str = str.replace(/^([ \\t]*)/g, '

    ');\n str += '

    ';\n grafsOut.push(str);\n }\n }\n\n /** Unhashify HTML blocks */\n end = grafsOut.length;\n for (i = 0; i < end; i++) {\n var blockText = '',\n grafsOutIt = grafsOut[i],\n codeFlag = false;\n // if this is a marker for an html block...\n // use RegExp.test instead of string.search because of QML bug\n while (/¨(K|G)(\\d+)\\1/.test(grafsOutIt)) {\n var delim = RegExp.$1,\n num = RegExp.$2;\n\n if (delim === 'K') {\n blockText = globals.gHtmlBlocks[num];\n } else {\n // we need to check if ghBlock is a false positive\n if (codeFlag) {\n // use encoded version of all text\n blockText = showdown.subParser('encodeCode')(globals.ghCodeBlocks[num].text, options, globals);\n } else {\n blockText = globals.ghCodeBlocks[num].codeblock;\n }\n }\n blockText = blockText.replace(/\\$/g, '$$$$'); // Escape any dollar signs\n\n grafsOutIt = grafsOutIt.replace(/(\\n\\n)?¨(K|G)\\d+\\2(\\n\\n)?/, blockText);\n // Check if grafsOutIt is a pre->code\n if (/^]*>\\s*]*>/.test(grafsOutIt)) {\n codeFlag = true;\n }\n }\n grafsOut[i] = grafsOutIt;\n }\n text = grafsOut.join('\\n');\n // Strip leading and trailing lines:\n text = text.replace(/^\\n+/g, '');\n text = text.replace(/\\n+$/g, '');\n return globals.converter._dispatch('paragraphs.after', text, options, globals);\n});\n","/**\n * Run extension\n */\nshowdown.subParser('runExtension', function (ext, text, options, globals) {\n 'use strict';\n\n if (ext.filter) {\n text = ext.filter(text, globals.converter, options);\n\n } else if (ext.regex) {\n // TODO remove this when old extension loading mechanism is deprecated\n var re = ext.regex;\n if (!(re instanceof RegExp)) {\n re = new RegExp(re, 'g');\n }\n text = text.replace(re, ext.replace);\n }\n\n return text;\n});\n","/**\n * These are all the transformations that occur *within* block-level\n * tags like paragraphs, headers, and list items.\n */\nshowdown.subParser('spanGamut', function (text, options, globals) {\n 'use strict';\n\n text = globals.converter._dispatch('spanGamut.before', text, options, globals);\n text = showdown.subParser('codeSpans')(text, options, globals);\n text = showdown.subParser('escapeSpecialCharsWithinTagAttributes')(text, options, globals);\n text = showdown.subParser('encodeBackslashEscapes')(text, options, globals);\n\n // Process anchor and image tags. Images must come first,\n // because ![foo][f] looks like an anchor.\n text = showdown.subParser('images')(text, options, globals);\n text = showdown.subParser('anchors')(text, options, globals);\n\n // Make links out of things like ``\n // Must come after anchors, because you can use < and >\n // delimiters in inline links like [this]().\n text = showdown.subParser('autoLinks')(text, options, globals);\n text = showdown.subParser('simplifiedAutoLinks')(text, options, globals);\n text = showdown.subParser('emoji')(text, options, globals);\n text = showdown.subParser('underline')(text, options, globals);\n text = showdown.subParser('italicsAndBold')(text, options, globals);\n text = showdown.subParser('strikethrough')(text, options, globals);\n text = showdown.subParser('ellipsis')(text, options, globals);\n\n // we need to hash HTML tags inside spans\n text = showdown.subParser('hashHTMLSpans')(text, options, globals);\n\n // now we encode amps and angles\n text = showdown.subParser('encodeAmpsAndAngles')(text, options, globals);\n\n // Do hard breaks\n if (options.simpleLineBreaks) {\n // GFM style hard breaks\n // only add line breaks if the text does not contain a block (special case for lists)\n if (!/\\n\\n¨K/.test(text)) {\n text = text.replace(/\\n+/g, '
    \\n');\n }\n } else {\n // Vanilla hard breaks\n text = text.replace(/ +\\n/g, '
    \\n');\n }\n\n text = globals.converter._dispatch('spanGamut.after', text, options, globals);\n return text;\n});\n","showdown.subParser('strikethrough', function (text, options, globals) {\n 'use strict';\n\n function parseInside (txt) {\n if (options.simplifiedAutoLink) {\n txt = showdown.subParser('simplifiedAutoLinks')(txt, options, globals);\n }\n return '' + txt + '';\n }\n\n if (options.strikethrough) {\n text = globals.converter._dispatch('strikethrough.before', text, options, globals);\n text = text.replace(/(?:~){2}([\\s\\S]+?)(?:~){2}/g, function (wm, txt) { return parseInside(txt); });\n text = globals.converter._dispatch('strikethrough.after', text, options, globals);\n }\n\n return text;\n});\n","/**\n * Strips link definitions from text, stores the URLs and titles in\n * hash references.\n * Link defs are in the form: ^[id]: url \"optional title\"\n */\nshowdown.subParser('stripLinkDefinitions', function (text, options, globals) {\n 'use strict';\n\n var regex = /^ {0,3}\\[(.+)]:[ \\t]*\\n?[ \\t]*\\s]+)>?(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*\\n?[ \\t]*(?:(\\n*)[\"|'(](.+?)[\"|')][ \\t]*)?(?:\\n+|(?=¨0))/gm,\n base64Regex = /^ {0,3}\\[(.+)]:[ \\t]*\\n?[ \\t]*?(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*\\n?[ \\t]*(?:(\\n*)[\"|'(](.+?)[\"|')][ \\t]*)?(?:\\n\\n|(?=¨0)|(?=\\n\\[))/gm;\n\n // attacklab: sentinel workarounds for lack of \\A and \\Z, safari\\khtml bug\n text += '¨0';\n\n var replaceFunc = function (wholeMatch, linkId, url, width, height, blankLines, title) {\n linkId = linkId.toLowerCase();\n if (url.match(/^data:.+?\\/.+?;base64,/)) {\n // remove newlines\n globals.gUrls[linkId] = url.replace(/\\s/g, '');\n } else {\n globals.gUrls[linkId] = showdown.subParser('encodeAmpsAndAngles')(url, options, globals); // Link IDs are case-insensitive\n }\n\n if (blankLines) {\n // Oops, found blank lines, so it's not a title.\n // Put back the parenthetical statement we stole.\n return blankLines + title;\n\n } else {\n if (title) {\n globals.gTitles[linkId] = title.replace(/\"|'/g, '"');\n }\n if (options.parseImgDimensions && width && height) {\n globals.gDimensions[linkId] = {\n width: width,\n height: height\n };\n }\n }\n // Completely remove the definition from the text\n return '';\n };\n\n // first we try to find base64 link references\n text = text.replace(base64Regex, replaceFunc);\n\n text = text.replace(regex, replaceFunc);\n\n // attacklab: strip sentinel\n text = text.replace(/¨0/, '');\n\n return text;\n});\n","showdown.subParser('tables', function (text, options, globals) {\n 'use strict';\n\n if (!options.tables) {\n return text;\n }\n\n var tableRgx = /^ {0,3}\\|?.+\\|.+\\n {0,3}\\|?[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[\\s\\S]+?(?:\\n\\n|¨0)/gm,\n //singeColTblRgx = /^ {0,3}\\|.+\\|\\n {0,3}\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*\\n(?: {0,3}\\|.+\\|\\n)+(?:\\n\\n|¨0)/gm;\n singeColTblRgx = /^ {0,3}\\|.+\\|[ \\t]*\\n {0,3}\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*\\n( {0,3}\\|.+\\|[ \\t]*\\n)*(?:\\n|¨0)/gm;\n\n function parseStyles (sLine) {\n if (/^:[ \\t]*--*$/.test(sLine)) {\n return ' style=\"text-align:left;\"';\n } else if (/^--*[ \\t]*:[ \\t]*$/.test(sLine)) {\n return ' style=\"text-align:right;\"';\n } else if (/^:[ \\t]*--*[ \\t]*:$/.test(sLine)) {\n return ' style=\"text-align:center;\"';\n } else {\n return '';\n }\n }\n\n function parseHeaders (header, style) {\n var id = '';\n header = header.trim();\n // support both tablesHeaderId and tableHeaderId due to error in documentation so we don't break backwards compatibility\n if (options.tablesHeaderId || options.tableHeaderId) {\n id = ' id=\"' + header.replace(/ /g, '_').toLowerCase() + '\"';\n }\n header = showdown.subParser('spanGamut')(header, options, globals);\n\n return '' + header + '\\n';\n }\n\n function parseCells (cell, style) {\n var subText = showdown.subParser('spanGamut')(cell, options, globals);\n return '' + subText + '\\n';\n }\n\n function buildTable (headers, cells) {\n var tb = '\\n\\n\\n',\n tblLgn = headers.length;\n\n for (var i = 0; i < tblLgn; ++i) {\n tb += headers[i];\n }\n tb += '\\n\\n\\n';\n\n for (i = 0; i < cells.length; ++i) {\n tb += '\\n';\n for (var ii = 0; ii < tblLgn; ++ii) {\n tb += cells[i][ii];\n }\n tb += '\\n';\n }\n tb += '\\n
    \\n';\n return tb;\n }\n\n function parseTable (rawTable) {\n var i, tableLines = rawTable.split('\\n');\n\n for (i = 0; i < tableLines.length; ++i) {\n // strip wrong first and last column if wrapped tables are used\n if (/^ {0,3}\\|/.test(tableLines[i])) {\n tableLines[i] = tableLines[i].replace(/^ {0,3}\\|/, '');\n }\n if (/\\|[ \\t]*$/.test(tableLines[i])) {\n tableLines[i] = tableLines[i].replace(/\\|[ \\t]*$/, '');\n }\n // parse code spans first, but we only support one line code spans\n tableLines[i] = showdown.subParser('codeSpans')(tableLines[i], options, globals);\n }\n\n var rawHeaders = tableLines[0].split('|').map(function (s) { return s.trim();}),\n rawStyles = tableLines[1].split('|').map(function (s) { return s.trim();}),\n rawCells = [],\n headers = [],\n styles = [],\n cells = [];\n\n tableLines.shift();\n tableLines.shift();\n\n for (i = 0; i < tableLines.length; ++i) {\n if (tableLines[i].trim() === '') {\n continue;\n }\n rawCells.push(\n tableLines[i]\n .split('|')\n .map(function (s) {\n return s.trim();\n })\n );\n }\n\n if (rawHeaders.length < rawStyles.length) {\n return rawTable;\n }\n\n for (i = 0; i < rawStyles.length; ++i) {\n styles.push(parseStyles(rawStyles[i]));\n }\n\n for (i = 0; i < rawHeaders.length; ++i) {\n if (showdown.helper.isUndefined(styles[i])) {\n styles[i] = '';\n }\n headers.push(parseHeaders(rawHeaders[i], styles[i]));\n }\n\n for (i = 0; i < rawCells.length; ++i) {\n var row = [];\n for (var ii = 0; ii < headers.length; ++ii) {\n if (showdown.helper.isUndefined(rawCells[i][ii])) {\n\n }\n row.push(parseCells(rawCells[i][ii], styles[ii]));\n }\n cells.push(row);\n }\n\n return buildTable(headers, cells);\n }\n\n text = globals.converter._dispatch('tables.before', text, options, globals);\n\n // find escaped pipe characters\n text = text.replace(/\\\\(\\|)/g, showdown.helper.escapeCharactersCallback);\n\n // parse multi column tables\n text = text.replace(tableRgx, parseTable);\n\n // parse one column tables\n text = text.replace(singeColTblRgx, parseTable);\n\n text = globals.converter._dispatch('tables.after', text, options, globals);\n\n return text;\n});\n","showdown.subParser('underline', function (text, options, globals) {\n 'use strict';\n\n if (!options.underline) {\n return text;\n }\n\n text = globals.converter._dispatch('underline.before', text, options, globals);\n\n if (options.literalMidWordUnderscores) {\n text = text.replace(/\\b___(\\S[\\s\\S]*?)___\\b/g, function (wm, txt) {\n return '' + txt + '';\n });\n text = text.replace(/\\b__(\\S[\\s\\S]*?)__\\b/g, function (wm, txt) {\n return '' + txt + '';\n });\n } else {\n text = text.replace(/___(\\S[\\s\\S]*?)___/g, function (wm, m) {\n return (/\\S$/.test(m)) ? '' + m + '' : wm;\n });\n text = text.replace(/__(\\S[\\s\\S]*?)__/g, function (wm, m) {\n return (/\\S$/.test(m)) ? '' + m + '' : wm;\n });\n }\n\n // escape remaining underscores to prevent them being parsed by italic and bold\n text = text.replace(/(_)/g, showdown.helper.escapeCharactersCallback);\n\n text = globals.converter._dispatch('underline.after', text, options, globals);\n\n return text;\n});\n","/**\n * Swap back in all the special characters we've hidden.\n */\nshowdown.subParser('unescapeSpecialChars', function (text, options, globals) {\n 'use strict';\n text = globals.converter._dispatch('unescapeSpecialChars.before', text, options, globals);\n\n text = text.replace(/¨E(\\d+)E/g, function (wholeMatch, m1) {\n var charCodeToReplace = parseInt(m1);\n return String.fromCharCode(charCodeToReplace);\n });\n\n text = globals.converter._dispatch('unescapeSpecialChars.after', text, options, globals);\n return text;\n});\n","showdown.subParser('makeMarkdown.blockquote', function (node, globals) {\n 'use strict';\n\n var txt = '';\n if (node.hasChildNodes()) {\n var children = node.childNodes,\n childrenLength = children.length;\n\n for (var i = 0; i < childrenLength; ++i) {\n var innerTxt = showdown.subParser('makeMarkdown.node')(children[i], globals);\n\n if (innerTxt === '') {\n continue;\n }\n txt += innerTxt;\n }\n }\n // cleanup\n txt = txt.trim();\n txt = '> ' + txt.split('\\n').join('\\n> ');\n return txt;\n});\n","showdown.subParser('makeMarkdown.codeBlock', function (node, globals) {\n 'use strict';\n\n var lang = node.getAttribute('language'),\n num = node.getAttribute('precodenum');\n return '```' + lang + '\\n' + globals.preList[num] + '\\n```';\n});\n","showdown.subParser('makeMarkdown.codeSpan', function (node) {\n 'use strict';\n\n return '`' + node.innerHTML + '`';\n});\n","showdown.subParser('makeMarkdown.emphasis', function (node, globals) {\n 'use strict';\n\n var txt = '';\n if (node.hasChildNodes()) {\n txt += '*';\n var children = node.childNodes,\n childrenLength = children.length;\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n txt += '*';\n }\n return txt;\n});\n","showdown.subParser('makeMarkdown.header', function (node, globals, headerLevel) {\n 'use strict';\n\n var headerMark = new Array(headerLevel + 1).join('#'),\n txt = '';\n\n if (node.hasChildNodes()) {\n txt = headerMark + ' ';\n var children = node.childNodes,\n childrenLength = children.length;\n\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n }\n return txt;\n});\n","showdown.subParser('makeMarkdown.hr', function () {\n 'use strict';\n\n return '---';\n});\n","showdown.subParser('makeMarkdown.image', function (node) {\n 'use strict';\n\n var txt = '';\n if (node.hasAttribute('src')) {\n txt += '![' + node.getAttribute('alt') + '](';\n txt += '<' + node.getAttribute('src') + '>';\n if (node.hasAttribute('width') && node.hasAttribute('height')) {\n txt += ' =' + node.getAttribute('width') + 'x' + node.getAttribute('height');\n }\n\n if (node.hasAttribute('title')) {\n txt += ' \"' + node.getAttribute('title') + '\"';\n }\n txt += ')';\n }\n return txt;\n});\n","showdown.subParser('makeMarkdown.links', function (node, globals) {\n 'use strict';\n\n var txt = '';\n if (node.hasChildNodes() && node.hasAttribute('href')) {\n var children = node.childNodes,\n childrenLength = children.length;\n txt = '[';\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n txt += '](';\n txt += '<' + node.getAttribute('href') + '>';\n if (node.hasAttribute('title')) {\n txt += ' \"' + node.getAttribute('title') + '\"';\n }\n txt += ')';\n }\n return txt;\n});\n","showdown.subParser('makeMarkdown.list', function (node, globals, type) {\n 'use strict';\n\n var txt = '';\n if (!node.hasChildNodes()) {\n return '';\n }\n var listItems = node.childNodes,\n listItemsLenght = listItems.length,\n listNum = node.getAttribute('start') || 1;\n\n for (var i = 0; i < listItemsLenght; ++i) {\n if (typeof listItems[i].tagName === 'undefined' || listItems[i].tagName.toLowerCase() !== 'li') {\n continue;\n }\n\n // define the bullet to use in list\n var bullet = '';\n if (type === 'ol') {\n bullet = listNum.toString() + '. ';\n } else {\n bullet = '- ';\n }\n\n // parse list item\n txt += bullet + showdown.subParser('makeMarkdown.listItem')(listItems[i], globals);\n ++listNum;\n }\n\n // add comment at the end to prevent consecutive lists to be parsed as one\n txt += '\\n\\n';\n return txt.trim();\n});\n","showdown.subParser('makeMarkdown.listItem', function (node, globals) {\n 'use strict';\n\n var listItemTxt = '';\n\n var children = node.childNodes,\n childrenLenght = children.length;\n\n for (var i = 0; i < childrenLenght; ++i) {\n listItemTxt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n // if it's only one liner, we need to add a newline at the end\n if (!/\\n$/.test(listItemTxt)) {\n listItemTxt += '\\n';\n } else {\n // it's multiparagraph, so we need to indent\n listItemTxt = listItemTxt\n .split('\\n')\n .join('\\n ')\n .replace(/^ {4}$/gm, '')\n .replace(/\\n\\n+/g, '\\n\\n');\n }\n\n return listItemTxt;\n});\n","\n\nshowdown.subParser('makeMarkdown.node', function (node, globals, spansOnly) {\n 'use strict';\n\n spansOnly = spansOnly || false;\n\n var txt = '';\n\n // edge case of text without wrapper paragraph\n if (node.nodeType === 3) {\n return showdown.subParser('makeMarkdown.txt')(node, globals);\n }\n\n // HTML comment\n if (node.nodeType === 8) {\n return '\\n\\n';\n }\n\n // process only node elements\n if (node.nodeType !== 1) {\n return '';\n }\n\n var tagName = node.tagName.toLowerCase();\n\n switch (tagName) {\n\n //\n // BLOCKS\n //\n case 'h1':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 1) + '\\n\\n'; }\n break;\n case 'h2':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 2) + '\\n\\n'; }\n break;\n case 'h3':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 3) + '\\n\\n'; }\n break;\n case 'h4':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 4) + '\\n\\n'; }\n break;\n case 'h5':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 5) + '\\n\\n'; }\n break;\n case 'h6':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 6) + '\\n\\n'; }\n break;\n\n case 'p':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.paragraph')(node, globals) + '\\n\\n'; }\n break;\n\n case 'blockquote':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.blockquote')(node, globals) + '\\n\\n'; }\n break;\n\n case 'hr':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.hr')(node, globals) + '\\n\\n'; }\n break;\n\n case 'ol':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.list')(node, globals, 'ol') + '\\n\\n'; }\n break;\n\n case 'ul':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.list')(node, globals, 'ul') + '\\n\\n'; }\n break;\n\n case 'precode':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.codeBlock')(node, globals) + '\\n\\n'; }\n break;\n\n case 'pre':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.pre')(node, globals) + '\\n\\n'; }\n break;\n\n case 'table':\n if (!spansOnly) { txt = showdown.subParser('makeMarkdown.table')(node, globals) + '\\n\\n'; }\n break;\n\n //\n // SPANS\n //\n case 'code':\n txt = showdown.subParser('makeMarkdown.codeSpan')(node, globals);\n break;\n\n case 'em':\n case 'i':\n txt = showdown.subParser('makeMarkdown.emphasis')(node, globals);\n break;\n\n case 'strong':\n case 'b':\n txt = showdown.subParser('makeMarkdown.strong')(node, globals);\n break;\n\n case 'del':\n txt = showdown.subParser('makeMarkdown.strikethrough')(node, globals);\n break;\n\n case 'a':\n txt = showdown.subParser('makeMarkdown.links')(node, globals);\n break;\n\n case 'img':\n txt = showdown.subParser('makeMarkdown.image')(node, globals);\n break;\n\n default:\n txt = node.outerHTML + '\\n\\n';\n }\n\n // common normalization\n // TODO eventually\n\n return txt;\n});\n","showdown.subParser('makeMarkdown.paragraph', function (node, globals) {\n 'use strict';\n\n var txt = '';\n if (node.hasChildNodes()) {\n var children = node.childNodes,\n childrenLength = children.length;\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n }\n\n // some text normalization\n txt = txt.trim();\n\n return txt;\n});\n","showdown.subParser('makeMarkdown.pre', function (node, globals) {\n 'use strict';\n\n var num = node.getAttribute('prenum');\n return '
    ' + globals.preList[num] + '
    ';\n});\n","showdown.subParser('makeMarkdown.strikethrough', function (node, globals) {\n 'use strict';\n\n var txt = '';\n if (node.hasChildNodes()) {\n txt += '~~';\n var children = node.childNodes,\n childrenLength = children.length;\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n txt += '~~';\n }\n return txt;\n});\n","showdown.subParser('makeMarkdown.strong', function (node, globals) {\n 'use strict';\n\n var txt = '';\n if (node.hasChildNodes()) {\n txt += '**';\n var children = node.childNodes,\n childrenLength = children.length;\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals);\n }\n txt += '**';\n }\n return txt;\n});\n","showdown.subParser('makeMarkdown.table', function (node, globals) {\n 'use strict';\n\n var txt = '',\n tableArray = [[], []],\n headings = node.querySelectorAll('thead>tr>th'),\n rows = node.querySelectorAll('tbody>tr'),\n i, ii;\n for (i = 0; i < headings.length; ++i) {\n var headContent = showdown.subParser('makeMarkdown.tableCell')(headings[i], globals),\n allign = '---';\n\n if (headings[i].hasAttribute('style')) {\n var style = headings[i].getAttribute('style').toLowerCase().replace(/\\s/g, '');\n switch (style) {\n case 'text-align:left;':\n allign = ':---';\n break;\n case 'text-align:right;':\n allign = '---:';\n break;\n case 'text-align:center;':\n allign = ':---:';\n break;\n }\n }\n tableArray[0][i] = headContent.trim();\n tableArray[1][i] = allign;\n }\n\n for (i = 0; i < rows.length; ++i) {\n var r = tableArray.push([]) - 1,\n cols = rows[i].getElementsByTagName('td');\n\n for (ii = 0; ii < headings.length; ++ii) {\n var cellContent = ' ';\n if (typeof cols[ii] !== 'undefined') {\n cellContent = showdown.subParser('makeMarkdown.tableCell')(cols[ii], globals);\n }\n tableArray[r].push(cellContent);\n }\n }\n\n var cellSpacesCount = 3;\n for (i = 0; i < tableArray.length; ++i) {\n for (ii = 0; ii < tableArray[i].length; ++ii) {\n var strLen = tableArray[i][ii].length;\n if (strLen > cellSpacesCount) {\n cellSpacesCount = strLen;\n }\n }\n }\n\n for (i = 0; i < tableArray.length; ++i) {\n for (ii = 0; ii < tableArray[i].length; ++ii) {\n if (i === 1) {\n if (tableArray[i][ii].slice(-1) === ':') {\n tableArray[i][ii] = showdown.helper.padEnd(tableArray[i][ii].slice(-1), cellSpacesCount - 1, '-') + ':';\n } else {\n tableArray[i][ii] = showdown.helper.padEnd(tableArray[i][ii], cellSpacesCount, '-');\n }\n } else {\n tableArray[i][ii] = showdown.helper.padEnd(tableArray[i][ii], cellSpacesCount);\n }\n }\n txt += '| ' + tableArray[i].join(' | ') + ' |\\n';\n }\n\n return txt.trim();\n});\n","showdown.subParser('makeMarkdown.tableCell', function (node, globals) {\n 'use strict';\n\n var txt = '';\n if (!node.hasChildNodes()) {\n return '';\n }\n var children = node.childNodes,\n childrenLength = children.length;\n\n for (var i = 0; i < childrenLength; ++i) {\n txt += showdown.subParser('makeMarkdown.node')(children[i], globals, true);\n }\n return txt.trim();\n});\n","showdown.subParser('makeMarkdown.txt', function (node) {\n 'use strict';\n\n var txt = node.nodeValue;\n\n // multiple spaces are collapsed\n txt = txt.replace(/ +/g, ' ');\n\n // replace the custom ¨NBSP; with a space\n txt = txt.replace(/¨NBSP;/g, ' ');\n\n // \", <, > and & should replace escaped html entities\n txt = showdown.helper.unescapeHTMLEntities(txt);\n\n // escape markdown magic characters\n // emphasis, strong and strikethrough - can appear everywhere\n // we also escape pipe (|) because of tables\n // and escape ` because of code blocks and spans\n txt = txt.replace(/([*_~|`])/g, '\\\\$1');\n\n // escape > because of blockquotes\n txt = txt.replace(/^(\\s*)>/g, '\\\\$1>');\n\n // hash character, only troublesome at the beginning of a line because of headers\n txt = txt.replace(/^#/gm, '\\\\#');\n\n // horizontal rules\n txt = txt.replace(/^(\\s*)([-=]{3,})(\\s*)$/, '$1\\\\$2$3');\n\n // dot, because of ordered lists, only troublesome at the beginning of a line when preceded by an integer\n txt = txt.replace(/^( {0,3}\\d+)\\./gm, '$1\\\\.');\n\n // +, * and -, at the beginning of a line becomes a list, so we need to escape them also (asterisk was already escaped)\n txt = txt.replace(/^( {0,3})([+-])/gm, '$1\\\\$2');\n\n // images and links, ] followed by ( is problematic, so we escape it\n txt = txt.replace(/]([\\s]*)\\(/g, '\\\\]$1\\\\(');\n\n // reference URIs must also be escaped\n txt = txt.replace(/^ {0,3}\\[([\\S \\t]*?)]:/gm, '\\\\[$1]:');\n\n return txt;\n});\n","var root = this;\n\n// AMD Loader\nif (typeof define === 'function' && define.amd) {\n define(function () {\n 'use strict';\n return showdown;\n });\n\n// CommonJS/nodeJS Loader\n} else if (typeof module !== 'undefined' && module.exports) {\n module.exports = showdown;\n\n// Regular Browser loader\n} else {\n root.showdown = showdown;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"data\"];","var __WEBPACK_NAMESPACE_OBJECT__ = window[\"lodash\"];","var __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"i18n\"];","/**\n * External dependencies\n */\nimport {\n\tfilter,\n\tfind,\n\tget,\n\tisEmpty,\n\tkeyBy,\n\tmap,\n\tmapValues,\n\tomit,\n\tuniqBy,\n} from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { combineReducers } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * @typedef {Object} WPBlockCategory\n *\n * @property {string} slug Unique category slug.\n * @property {string} title Category label, for display in user interface.\n */\n\n/**\n * Default set of categories.\n *\n * @type {WPBlockCategory[]}\n */\nexport const DEFAULT_CATEGORIES = [\n\t{ slug: 'text', title: __( 'Text' ) },\n\t{ slug: 'media', title: __( 'Media' ) },\n\t{ slug: 'design', title: __( 'Design' ) },\n\t{ slug: 'widgets', title: __( 'Widgets' ) },\n\t{ slug: 'theme', title: __( 'Theme' ) },\n\t{ slug: 'embed', title: __( 'Embeds' ) },\n\t{ slug: 'reusable', title: __( 'Reusable blocks' ) },\n];\n\n/**\n * Reducer managing the unprocessed block types in a form passed when registering the by block.\n * It's for internal use only. It allows recomputing the processed block types on-demand after block type filters\n * get added or removed.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function unprocessedBlockTypes( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'ADD_UNPROCESSED_BLOCK_TYPE':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.blockType.name ]: action.blockType,\n\t\t\t};\n\t\tcase 'REMOVE_BLOCK_TYPES':\n\t\t\treturn omit( state, action.names );\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the processed block types with all filters applied.\n * The state is derived from the `unprocessedBlockTypes` reducer.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function blockTypes( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'ADD_BLOCK_TYPES':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t...keyBy( action.blockTypes, 'name' ),\n\t\t\t};\n\t\tcase 'REMOVE_BLOCK_TYPES':\n\t\t\treturn omit( state, action.names );\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the block style variations.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function blockStyles( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'ADD_BLOCK_TYPES':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t...mapValues(\n\t\t\t\t\tkeyBy( action.blockTypes, 'name' ),\n\t\t\t\t\t( blockType ) => {\n\t\t\t\t\t\treturn uniqBy(\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t...get( blockType, [ 'styles' ], [] ).map(\n\t\t\t\t\t\t\t\t\t( style ) => ( {\n\t\t\t\t\t\t\t\t\t\t...style,\n\t\t\t\t\t\t\t\t\t\tsource: 'block',\n\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t...get( state, [ blockType.name ], [] ).filter(\n\t\t\t\t\t\t\t\t\t( { source } ) => 'block' !== source\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t( style ) => style.name\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t),\n\t\t\t};\n\t\tcase 'ADD_BLOCK_STYLES':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.blockName ]: uniqBy(\n\t\t\t\t\t[\n\t\t\t\t\t\t...get( state, [ action.blockName ], [] ),\n\t\t\t\t\t\t...action.styles,\n\t\t\t\t\t],\n\t\t\t\t\t( style ) => style.name\n\t\t\t\t),\n\t\t\t};\n\t\tcase 'REMOVE_BLOCK_STYLES':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.blockName ]: filter(\n\t\t\t\t\tget( state, [ action.blockName ], [] ),\n\t\t\t\t\t( style ) => action.styleNames.indexOf( style.name ) === -1\n\t\t\t\t),\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer managing the block variations.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function blockVariations( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'ADD_BLOCK_TYPES':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t...mapValues(\n\t\t\t\t\tkeyBy( action.blockTypes, 'name' ),\n\t\t\t\t\t( blockType ) => {\n\t\t\t\t\t\treturn uniqBy(\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t...get( blockType, [ 'variations' ], [] ).map(\n\t\t\t\t\t\t\t\t\t( variation ) => ( {\n\t\t\t\t\t\t\t\t\t\t...variation,\n\t\t\t\t\t\t\t\t\t\tsource: 'block',\n\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t...get( state, [ blockType.name ], [] ).filter(\n\t\t\t\t\t\t\t\t\t( { source } ) => 'block' !== source\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t( variation ) => variation.name\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t),\n\t\t\t};\n\t\tcase 'ADD_BLOCK_VARIATIONS':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.blockName ]: uniqBy(\n\t\t\t\t\t[\n\t\t\t\t\t\t...get( state, [ action.blockName ], [] ),\n\t\t\t\t\t\t...action.variations,\n\t\t\t\t\t],\n\t\t\t\t\t( variation ) => variation.name\n\t\t\t\t),\n\t\t\t};\n\t\tcase 'REMOVE_BLOCK_VARIATIONS':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.blockName ]: filter(\n\t\t\t\t\tget( state, [ action.blockName ], [] ),\n\t\t\t\t\t( variation ) =>\n\t\t\t\t\t\taction.variationNames.indexOf( variation.name ) === -1\n\t\t\t\t),\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Higher-order Reducer creating a reducer keeping track of given block name.\n *\n * @param {string} setActionType Action type.\n *\n * @return {Function} Reducer.\n */\nexport function createBlockNameSetterReducer( setActionType ) {\n\treturn ( state = null, action ) => {\n\t\tswitch ( action.type ) {\n\t\t\tcase 'REMOVE_BLOCK_TYPES':\n\t\t\t\tif ( action.names.indexOf( state ) !== -1 ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\treturn state;\n\n\t\t\tcase setActionType:\n\t\t\t\treturn action.name || null;\n\t\t}\n\n\t\treturn state;\n\t};\n}\n\nexport const defaultBlockName = createBlockNameSetterReducer(\n\t'SET_DEFAULT_BLOCK_NAME'\n);\nexport const freeformFallbackBlockName = createBlockNameSetterReducer(\n\t'SET_FREEFORM_FALLBACK_BLOCK_NAME'\n);\nexport const unregisteredFallbackBlockName = createBlockNameSetterReducer(\n\t'SET_UNREGISTERED_FALLBACK_BLOCK_NAME'\n);\nexport const groupingBlockName = createBlockNameSetterReducer(\n\t'SET_GROUPING_BLOCK_NAME'\n);\n\n/**\n * Reducer managing the categories\n *\n * @param {WPBlockCategory[]} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {WPBlockCategory[]} Updated state.\n */\nexport function categories( state = DEFAULT_CATEGORIES, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_CATEGORIES':\n\t\t\treturn action.categories || [];\n\t\tcase 'UPDATE_CATEGORY': {\n\t\t\tif ( ! action.category || isEmpty( action.category ) ) {\n\t\t\t\treturn state;\n\t\t\t}\n\t\t\tconst categoryToChange = find( state, [ 'slug', action.slug ] );\n\t\t\tif ( categoryToChange ) {\n\t\t\t\treturn map( state, ( category ) => {\n\t\t\t\t\tif ( category.slug === action.slug ) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...category,\n\t\t\t\t\t\t\t...action.category,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn category;\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t}\n\treturn state;\n}\n\nexport function collections( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'ADD_BLOCK_COLLECTION':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ action.namespace ]: {\n\t\t\t\t\ttitle: action.title,\n\t\t\t\t\ticon: action.icon,\n\t\t\t\t},\n\t\t\t};\n\t\tcase 'REMOVE_BLOCK_COLLECTION':\n\t\t\treturn omit( state, action.namespace );\n\t}\n\treturn state;\n}\n\nexport default combineReducers( {\n\tunprocessedBlockTypes,\n\tblockTypes,\n\tblockStyles,\n\tblockVariations,\n\tdefaultBlockName,\n\tfreeformFallbackBlockName,\n\tunregisteredFallbackBlockName,\n\tgroupingBlockName,\n\tcategories,\n\tcollections,\n} );\n","'use strict';\n\nvar LEAF_KEY, hasWeakMap;\n\n/**\n * Arbitrary value used as key for referencing cache object in WeakMap tree.\n *\n * @type {Object}\n */\nLEAF_KEY = {};\n\n/**\n * Whether environment supports WeakMap.\n *\n * @type {boolean}\n */\nhasWeakMap = typeof WeakMap !== 'undefined';\n\n/**\n * Returns the first argument as the sole entry in an array.\n *\n * @param {*} value Value to return.\n *\n * @return {Array} Value returned as entry in array.\n */\nfunction arrayOf( value ) {\n\treturn [ value ];\n}\n\n/**\n * Returns true if the value passed is object-like, or false otherwise. A value\n * is object-like if it can support property assignment, e.g. object or array.\n *\n * @param {*} value Value to test.\n *\n * @return {boolean} Whether value is object-like.\n */\nfunction isObjectLike( value ) {\n\treturn !! value && 'object' === typeof value;\n}\n\n/**\n * Creates and returns a new cache object.\n *\n * @return {Object} Cache object.\n */\nfunction createCache() {\n\tvar cache = {\n\t\tclear: function() {\n\t\t\tcache.head = null;\n\t\t},\n\t};\n\n\treturn cache;\n}\n\n/**\n * Returns true if entries within the two arrays are strictly equal by\n * reference from a starting index.\n *\n * @param {Array} a First array.\n * @param {Array} b Second array.\n * @param {number} fromIndex Index from which to start comparison.\n *\n * @return {boolean} Whether arrays are shallowly equal.\n */\nfunction isShallowEqual( a, b, fromIndex ) {\n\tvar i;\n\n\tif ( a.length !== b.length ) {\n\t\treturn false;\n\t}\n\n\tfor ( i = fromIndex; i < a.length; i++ ) {\n\t\tif ( a[ i ] !== b[ i ] ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\n/**\n * Returns a memoized selector function. The getDependants function argument is\n * called before the memoized selector and is expected to return an immutable\n * reference or array of references on which the selector depends for computing\n * its own return value. The memoize cache is preserved only as long as those\n * dependant references remain the same. If getDependants returns a different\n * reference(s), the cache is cleared and the selector value regenerated.\n *\n * @param {Function} selector Selector function.\n * @param {Function} getDependants Dependant getter returning an immutable\n * reference or array of reference used in\n * cache bust consideration.\n *\n * @return {Function} Memoized selector.\n */\nexport default function( selector, getDependants ) {\n\tvar rootCache, getCache;\n\n\t// Use object source as dependant if getter not provided\n\tif ( ! getDependants ) {\n\t\tgetDependants = arrayOf;\n\t}\n\n\t/**\n\t * Returns the root cache. If WeakMap is supported, this is assigned to the\n\t * root WeakMap cache set, otherwise it is a shared instance of the default\n\t * cache object.\n\t *\n\t * @return {(WeakMap|Object)} Root cache object.\n\t */\n\tfunction getRootCache() {\n\t\treturn rootCache;\n\t}\n\n\t/**\n\t * Returns the cache for a given dependants array. When possible, a WeakMap\n\t * will be used to create a unique cache for each set of dependants. This\n\t * is feasible due to the nature of WeakMap in allowing garbage collection\n\t * to occur on entries where the key object is no longer referenced. Since\n\t * WeakMap requires the key to be an object, this is only possible when the\n\t * dependant is object-like. The root cache is created as a hierarchy where\n\t * each top-level key is the first entry in a dependants set, the value a\n\t * WeakMap where each key is the next dependant, and so on. This continues\n\t * so long as the dependants are object-like. If no dependants are object-\n\t * like, then the cache is shared across all invocations.\n\t *\n\t * @see isObjectLike\n\t *\n\t * @param {Array} dependants Selector dependants.\n\t *\n\t * @return {Object} Cache object.\n\t */\n\tfunction getWeakMapCache( dependants ) {\n\t\tvar caches = rootCache,\n\t\t\tisUniqueByDependants = true,\n\t\t\ti, dependant, map, cache;\n\n\t\tfor ( i = 0; i < dependants.length; i++ ) {\n\t\t\tdependant = dependants[ i ];\n\n\t\t\t// Can only compose WeakMap from object-like key.\n\t\t\tif ( ! isObjectLike( dependant ) ) {\n\t\t\t\tisUniqueByDependants = false;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Does current segment of cache already have a WeakMap?\n\t\t\tif ( caches.has( dependant ) ) {\n\t\t\t\t// Traverse into nested WeakMap.\n\t\t\t\tcaches = caches.get( dependant );\n\t\t\t} else {\n\t\t\t\t// Create, set, and traverse into a new one.\n\t\t\t\tmap = new WeakMap();\n\t\t\t\tcaches.set( dependant, map );\n\t\t\t\tcaches = map;\n\t\t\t}\n\t\t}\n\n\t\t// We use an arbitrary (but consistent) object as key for the last item\n\t\t// in the WeakMap to serve as our running cache.\n\t\tif ( ! caches.has( LEAF_KEY ) ) {\n\t\t\tcache = createCache();\n\t\t\tcache.isUniqueByDependants = isUniqueByDependants;\n\t\t\tcaches.set( LEAF_KEY, cache );\n\t\t}\n\n\t\treturn caches.get( LEAF_KEY );\n\t}\n\n\t// Assign cache handler by availability of WeakMap\n\tgetCache = hasWeakMap ? getWeakMapCache : getRootCache;\n\n\t/**\n\t * Resets root memoization cache.\n\t */\n\tfunction clear() {\n\t\trootCache = hasWeakMap ? new WeakMap() : createCache();\n\t}\n\n\t// eslint-disable-next-line jsdoc/check-param-names\n\t/**\n\t * The augmented selector call, considering first whether dependants have\n\t * changed before passing it to underlying memoize function.\n\t *\n\t * @param {Object} source Source object for derivation.\n\t * @param {...*} extraArgs Additional arguments to pass to selector.\n\t *\n\t * @return {*} Selector result.\n\t */\n\tfunction callSelector( /* source, ...extraArgs */ ) {\n\t\tvar len = arguments.length,\n\t\t\tcache, node, i, args, dependants;\n\n\t\t// Create copy of arguments (avoid leaking deoptimization).\n\t\targs = new Array( len );\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tdependants = getDependants.apply( null, args );\n\t\tcache = getCache( dependants );\n\n\t\t// If not guaranteed uniqueness by dependants (primitive type or lack\n\t\t// of WeakMap support), shallow compare against last dependants and, if\n\t\t// references have changed, destroy cache to recalculate result.\n\t\tif ( ! cache.isUniqueByDependants ) {\n\t\t\tif ( cache.lastDependants && ! isShallowEqual( dependants, cache.lastDependants, 0 ) ) {\n\t\t\t\tcache.clear();\n\t\t\t}\n\n\t\t\tcache.lastDependants = dependants;\n\t\t}\n\n\t\tnode = cache.head;\n\t\twhile ( node ) {\n\t\t\t// Check whether node arguments match arguments\n\t\t\tif ( ! isShallowEqual( node.args, args, 1 ) ) {\n\t\t\t\tnode = node.next;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// At this point we can assume we've found a match\n\n\t\t\t// Surface matched node to head if not already\n\t\t\tif ( node !== cache.head ) {\n\t\t\t\t// Adjust siblings to point to each other.\n\t\t\t\tnode.prev.next = node.next;\n\t\t\t\tif ( node.next ) {\n\t\t\t\t\tnode.next.prev = node.prev;\n\t\t\t\t}\n\n\t\t\t\tnode.next = cache.head;\n\t\t\t\tnode.prev = null;\n\t\t\t\tcache.head.prev = node;\n\t\t\t\tcache.head = node;\n\t\t\t}\n\n\t\t\t// Return immediately\n\t\t\treturn node.val;\n\t\t}\n\n\t\t// No cached value found. Continue to insertion phase:\n\n\t\tnode = {\n\t\t\t// Generate the result from original function\n\t\t\tval: selector.apply( null, args ),\n\t\t};\n\n\t\t// Avoid including the source object in the cache.\n\t\targs[ 0 ] = null;\n\t\tnode.args = args;\n\n\t\t// Don't need to check whether node is already head, since it would\n\t\t// have been returned above already if it was\n\n\t\t// Shift existing head down list\n\t\tif ( cache.head ) {\n\t\t\tcache.head.prev = node;\n\t\t\tnode.next = cache.head;\n\t\t}\n\n\t\tcache.head = node;\n\n\t\treturn node.val;\n\t}\n\n\tcallSelector.getDependants = getDependants;\n\tcallSelector.clear = clear;\n\tclear();\n\n\treturn callSelector;\n}\n","/**\n * External dependencies\n */\nimport createSelector from 'rememo';\nimport {\n\tdeburr,\n\tfilter,\n\tfindLast,\n\tfirst,\n\tflow,\n\tget,\n\tincludes,\n\tmap,\n\tsome,\n} from 'lodash';\n\n/** @typedef {import('../api/registration').WPBlockVariation} WPBlockVariation */\n/** @typedef {import('../api/registration').WPBlockVariationScope} WPBlockVariationScope */\n/** @typedef {import('./reducer').WPBlockCategory} WPBlockCategory */\n\n/**\n * Given a block name or block type object, returns the corresponding\n * normalized block type object.\n *\n * @param {Object} state Blocks state.\n * @param {(string|Object)} nameOrType Block name or type object\n *\n * @return {Object} Block type object.\n */\nconst getNormalizedBlockType = ( state, nameOrType ) =>\n\t'string' === typeof nameOrType\n\t\t? getBlockType( state, nameOrType )\n\t\t: nameOrType;\n\n/**\n * Returns all the unprocessed block types as passed during the registration.\n *\n * @param {Object} state Data state.\n *\n * @return {Array} Unprocessed block types.\n */\nexport function __experimentalGetUnprocessedBlockTypes( state ) {\n\treturn state.unprocessedBlockTypes;\n}\n\n/**\n * Returns all the available block types.\n *\n * @param {Object} state Data state.\n *\n * @return {Array} Block Types.\n */\nexport const getBlockTypes = createSelector(\n\t( state ) => Object.values( state.blockTypes ),\n\t( state ) => [ state.blockTypes ]\n);\n\n/**\n * Returns a block type by name.\n *\n * @param {Object} state Data state.\n * @param {string} name Block type name.\n *\n * @return {Object?} Block Type.\n */\nexport function getBlockType( state, name ) {\n\treturn state.blockTypes[ name ];\n}\n\n/**\n * Returns block styles by block name.\n *\n * @param {Object} state Data state.\n * @param {string} name Block type name.\n *\n * @return {Array?} Block Styles.\n */\nexport function getBlockStyles( state, name ) {\n\treturn state.blockStyles[ name ];\n}\n\n/**\n * Returns block variations by block name.\n *\n * @param {Object} state Data state.\n * @param {string} blockName Block type name.\n * @param {WPBlockVariationScope} [scope] Block variation scope name.\n *\n * @return {(WPBlockVariation[]|void)} Block variations.\n */\nexport const getBlockVariations = createSelector(\n\t( state, blockName, scope ) => {\n\t\tconst variations = state.blockVariations[ blockName ];\n\t\tif ( ! variations || ! scope ) {\n\t\t\treturn variations;\n\t\t}\n\t\treturn variations.filter( ( variation ) => {\n\t\t\t// For backward compatibility reasons, variation's scope defaults to\n\t\t\t// `block` and `inserter` when not set.\n\t\t\treturn ( variation.scope || [ 'block', 'inserter' ] ).includes(\n\t\t\t\tscope\n\t\t\t);\n\t\t} );\n\t},\n\t( state, blockName ) => [ state.blockVariations[ blockName ] ]\n);\n\n/**\n * Returns the active block variation for a given block based on its attributes.\n * Variations are determined by their `isActive` property.\n * Which is either an array of block attribute keys or a function.\n *\n * In case of an array of block attribute keys, the `attributes` are compared\n * to the variation's attributes using strict equality check.\n *\n * In case of function type, the function should accept a block's attributes\n * and the variation's attributes and determines if a variation is active.\n * A function that accepts a block's attributes and the variation's attributes and determines if a variation is active.\n *\n * @param {Object} state Data state.\n * @param {string} blockName Name of block (example: “core/columns”).\n * @param {Object} attributes Block attributes used to determine active variation.\n * @param {WPBlockVariationScope} [scope] Block variation scope name.\n *\n * @return {(WPBlockVariation|undefined)} Active block variation.\n */\nexport function getActiveBlockVariation( state, blockName, attributes, scope ) {\n\tconst variations = getBlockVariations( state, blockName, scope );\n\n\tconst match = variations?.find( ( variation ) => {\n\t\tif ( Array.isArray( variation.isActive ) ) {\n\t\t\tconst blockType = getBlockType( state, blockName );\n\t\t\tconst attributeKeys = Object.keys( blockType?.attributes || {} );\n\t\t\tconst definedAttributes = variation.isActive.filter(\n\t\t\t\t( attribute ) => attributeKeys.includes( attribute )\n\t\t\t);\n\t\t\tif ( definedAttributes.length === 0 ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn definedAttributes.every(\n\t\t\t\t( attribute ) =>\n\t\t\t\t\tattributes[ attribute ] ===\n\t\t\t\t\tvariation.attributes[ attribute ]\n\t\t\t);\n\t\t}\n\n\t\treturn variation.isActive?.( attributes, variation.attributes );\n\t} );\n\n\treturn match;\n}\n\n/**\n * Returns the default block variation for the given block type.\n * When there are multiple variations annotated as the default one,\n * the last added item is picked. This simplifies registering overrides.\n * When there is no default variation set, it returns the first item.\n *\n * @param {Object} state Data state.\n * @param {string} blockName Block type name.\n * @param {WPBlockVariationScope} [scope] Block variation scope name.\n *\n * @return {?WPBlockVariation} The default block variation.\n */\nexport function getDefaultBlockVariation( state, blockName, scope ) {\n\tconst variations = getBlockVariations( state, blockName, scope );\n\n\treturn findLast( variations, 'isDefault' ) || first( variations );\n}\n\n/**\n * Returns all the available categories.\n *\n * @param {Object} state Data state.\n *\n * @return {WPBlockCategory[]} Categories list.\n */\nexport function getCategories( state ) {\n\treturn state.categories;\n}\n\n/**\n * Returns all the available collections.\n *\n * @param {Object} state Data state.\n *\n * @return {Object} Collections list.\n */\nexport function getCollections( state ) {\n\treturn state.collections;\n}\n\n/**\n * Returns the name of the default block name.\n *\n * @param {Object} state Data state.\n *\n * @return {string?} Default block name.\n */\nexport function getDefaultBlockName( state ) {\n\treturn state.defaultBlockName;\n}\n\n/**\n * Returns the name of the block for handling non-block content.\n *\n * @param {Object} state Data state.\n *\n * @return {string?} Name of the block for handling non-block content.\n */\nexport function getFreeformFallbackBlockName( state ) {\n\treturn state.freeformFallbackBlockName;\n}\n\n/**\n * Returns the name of the block for handling unregistered blocks.\n *\n * @param {Object} state Data state.\n *\n * @return {string?} Name of the block for handling unregistered blocks.\n */\nexport function getUnregisteredFallbackBlockName( state ) {\n\treturn state.unregisteredFallbackBlockName;\n}\n\n/**\n * Returns the name of the block for handling unregistered blocks.\n *\n * @param {Object} state Data state.\n *\n * @return {string?} Name of the block for handling unregistered blocks.\n */\nexport function getGroupingBlockName( state ) {\n\treturn state.groupingBlockName;\n}\n\n/**\n * Returns an array with the child blocks of a given block.\n *\n * @param {Object} state Data state.\n * @param {string} blockName Block type name.\n *\n * @return {Array} Array of child block names.\n */\nexport const getChildBlockNames = createSelector(\n\t( state, blockName ) => {\n\t\treturn map(\n\t\t\tfilter( state.blockTypes, ( blockType ) => {\n\t\t\t\treturn includes( blockType.parent, blockName );\n\t\t\t} ),\n\t\t\t( { name } ) => name\n\t\t);\n\t},\n\t( state ) => [ state.blockTypes ]\n);\n\n/**\n * Returns the block support value for a feature, if defined.\n *\n * @param {Object} state Data state.\n * @param {(string|Object)} nameOrType Block name or type object\n * @param {Array|string} feature Feature to retrieve\n * @param {*} defaultSupports Default value to return if not\n * explicitly defined\n *\n * @return {?*} Block support value\n */\nexport const getBlockSupport = (\n\tstate,\n\tnameOrType,\n\tfeature,\n\tdefaultSupports\n) => {\n\tconst blockType = getNormalizedBlockType( state, nameOrType );\n\tif ( ! blockType?.supports ) {\n\t\treturn defaultSupports;\n\t}\n\n\treturn get( blockType.supports, feature, defaultSupports );\n};\n\n/**\n * Returns true if the block defines support for a feature, or false otherwise.\n *\n * @param {Object} state Data state.\n * @param {(string|Object)} nameOrType Block name or type object.\n * @param {string} feature Feature to test.\n * @param {boolean} defaultSupports Whether feature is supported by\n * default if not explicitly defined.\n *\n * @return {boolean} Whether block supports feature.\n */\nexport function hasBlockSupport( state, nameOrType, feature, defaultSupports ) {\n\treturn !! getBlockSupport( state, nameOrType, feature, defaultSupports );\n}\n\n/**\n * Returns true if the block type by the given name or object value matches a\n * search term, or false otherwise.\n *\n * @param {Object} state Blocks state.\n * @param {(string|Object)} nameOrType Block name or type object.\n * @param {string} searchTerm Search term by which to filter.\n *\n * @return {Object[]} Whether block type matches search term.\n */\nexport function isMatchingSearchTerm( state, nameOrType, searchTerm ) {\n\tconst blockType = getNormalizedBlockType( state, nameOrType );\n\n\tconst getNormalizedSearchTerm = flow( [\n\t\t// Disregard diacritics.\n\t\t// Input: \"média\"\n\t\tdeburr,\n\n\t\t// Lowercase.\n\t\t// Input: \"MEDIA\"\n\t\t( term ) => term.toLowerCase(),\n\n\t\t// Strip leading and trailing whitespace.\n\t\t// Input: \" media \"\n\t\t( term ) => term.trim(),\n\t] );\n\n\tconst normalizedSearchTerm = getNormalizedSearchTerm( searchTerm );\n\n\tconst isSearchMatch = flow( [\n\t\tgetNormalizedSearchTerm,\n\t\t( normalizedCandidate ) =>\n\t\t\tincludes( normalizedCandidate, normalizedSearchTerm ),\n\t] );\n\n\treturn (\n\t\tisSearchMatch( blockType.title ) ||\n\t\tsome( blockType.keywords, isSearchMatch ) ||\n\t\tisSearchMatch( blockType.category )\n\t);\n}\n\n/**\n * Returns a boolean indicating if a block has child blocks or not.\n *\n * @param {Object} state Data state.\n * @param {string} blockName Block type name.\n *\n * @return {boolean} True if a block contains child blocks and false otherwise.\n */\nexport const hasChildBlocks = ( state, blockName ) => {\n\treturn getChildBlockNames( state, blockName ).length > 0;\n};\n\n/**\n * Returns a boolean indicating if a block has at least one child block with inserter support.\n *\n * @param {Object} state Data state.\n * @param {string} blockName Block type name.\n *\n * @return {boolean} True if a block contains at least one child blocks with inserter support\n * and false otherwise.\n */\nexport const hasChildBlocksWithInserterSupport = ( state, blockName ) => {\n\treturn some( getChildBlockNames( state, blockName ), ( childBlockName ) => {\n\t\treturn hasBlockSupport( state, childBlockName, 'inserter', true );\n\t} );\n};\n","var __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"hooks\"];","var r={grad:.9,turn:360,rad:360/(2*Math.PI)},t=function(r){return\"string\"==typeof r?r.length>0:\"number\"==typeof r},n=function(r,t,n){return void 0===t&&(t=0),void 0===n&&(n=Math.pow(10,t)),Math.round(n*r)/n+0},e=function(r,t,n){return void 0===t&&(t=0),void 0===n&&(n=1),r>n?n:r>t?r:t},u=function(r){return(r=isFinite(r)?r%360:0)>0?r:r+360},a=function(r){return{r:e(r.r,0,255),g:e(r.g,0,255),b:e(r.b,0,255),a:e(r.a)}},o=function(r){return{r:n(r.r),g:n(r.g),b:n(r.b),a:n(r.a,3)}},i=/^#([0-9a-f]{3,8})$/i,s=function(r){var t=r.toString(16);return t.length<2?\"0\"+t:t},h=function(r){var t=r.r,n=r.g,e=r.b,u=r.a,a=Math.max(t,n,e),o=a-Math.min(t,n,e),i=o?a===t?(n-e)/o:a===n?2+(e-t)/o:4+(t-n)/o:0;return{h:60*(i<0?i+6:i),s:a?o/a*100:0,v:a/255*100,a:u}},b=function(r){var t=r.h,n=r.s,e=r.v,u=r.a;t=t/360*6,n/=100,e/=100;var a=Math.floor(t),o=e*(1-n),i=e*(1-(t-a)*n),s=e*(1-(1-t+a)*n),h=a%6;return{r:255*[e,i,o,o,s,e][h],g:255*[s,e,e,i,o,o][h],b:255*[o,o,s,e,e,i][h],a:u}},g=function(r){return{h:u(r.h),s:e(r.s,0,100),l:e(r.l,0,100),a:e(r.a)}},d=function(r){return{h:n(r.h),s:n(r.s),l:n(r.l),a:n(r.a,3)}},f=function(r){return b((n=(t=r).s,{h:t.h,s:(n*=((e=t.l)<50?e:100-e)/100)>0?2*n/(e+n)*100:0,v:e+n,a:t.a}));var t,n,e},c=function(r){return{h:(t=h(r)).h,s:(u=(200-(n=t.s))*(e=t.v)/100)>0&&u<200?n*e/100/(u<=100?u:200-u)*100:0,l:u/2,a:t.a};var t,n,e,u},l=/^hsla?\\(\\s*([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s*,\\s*([+-]?\\d*\\.?\\d+)%\\s*,\\s*([+-]?\\d*\\.?\\d+)%\\s*(?:,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,p=/^hsla?\\(\\s*([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s+([+-]?\\d*\\.?\\d+)%\\s+([+-]?\\d*\\.?\\d+)%\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,v=/^rgba?\\(\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*(?:,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,m=/^rgba?\\(\\s*([+-]?\\d*\\.?\\d+)(%)?\\s+([+-]?\\d*\\.?\\d+)(%)?\\s+([+-]?\\d*\\.?\\d+)(%)?\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,y={string:[[function(r){var t=i.exec(r);return t?(r=t[1]).length<=4?{r:parseInt(r[0]+r[0],16),g:parseInt(r[1]+r[1],16),b:parseInt(r[2]+r[2],16),a:4===r.length?n(parseInt(r[3]+r[3],16)/255,2):1}:6===r.length||8===r.length?{r:parseInt(r.substr(0,2),16),g:parseInt(r.substr(2,2),16),b:parseInt(r.substr(4,2),16),a:8===r.length?n(parseInt(r.substr(6,2),16)/255,2):1}:null:null},\"hex\"],[function(r){var t=v.exec(r)||m.exec(r);return t?t[2]!==t[4]||t[4]!==t[6]?null:a({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:void 0===t[7]?1:Number(t[7])/(t[8]?100:1)}):null},\"rgb\"],[function(t){var n=l.exec(t)||p.exec(t);if(!n)return null;var e,u,a=g({h:(e=n[1],u=n[2],void 0===u&&(u=\"deg\"),Number(e)*(r[u]||1)),s:Number(n[3]),l:Number(n[4]),a:void 0===n[5]?1:Number(n[5])/(n[6]?100:1)});return f(a)},\"hsl\"]],object:[[function(r){var n=r.r,e=r.g,u=r.b,o=r.a,i=void 0===o?1:o;return t(n)&&t(e)&&t(u)?a({r:Number(n),g:Number(e),b:Number(u),a:Number(i)}):null},\"rgb\"],[function(r){var n=r.h,e=r.s,u=r.l,a=r.a,o=void 0===a?1:a;if(!t(n)||!t(e)||!t(u))return null;var i=g({h:Number(n),s:Number(e),l:Number(u),a:Number(o)});return f(i)},\"hsl\"],[function(r){var n=r.h,a=r.s,o=r.v,i=r.a,s=void 0===i?1:i;if(!t(n)||!t(a)||!t(o))return null;var h=function(r){return{h:u(r.h),s:e(r.s,0,100),v:e(r.v,0,100),a:e(r.a)}}({h:Number(n),s:Number(a),v:Number(o),a:Number(s)});return b(h)},\"hsv\"]]},N=function(r,t){for(var n=0;n=.5},r.prototype.toHex=function(){return r=o(this.rgba),t=r.r,e=r.g,u=r.b,i=(a=r.a)<1?s(n(255*a)):\"\",\"#\"+s(t)+s(e)+s(u)+i;var r,t,e,u,a,i},r.prototype.toRgb=function(){return o(this.rgba)},r.prototype.toRgbString=function(){return r=o(this.rgba),t=r.r,n=r.g,e=r.b,(u=r.a)<1?\"rgba(\"+t+\", \"+n+\", \"+e+\", \"+u+\")\":\"rgb(\"+t+\", \"+n+\", \"+e+\")\";var r,t,n,e,u},r.prototype.toHsl=function(){return d(c(this.rgba))},r.prototype.toHslString=function(){return r=d(c(this.rgba)),t=r.h,n=r.s,e=r.l,(u=r.a)<1?\"hsla(\"+t+\", \"+n+\"%, \"+e+\"%, \"+u+\")\":\"hsl(\"+t+\", \"+n+\"%, \"+e+\"%)\";var r,t,n,e,u},r.prototype.toHsv=function(){return r=h(this.rgba),{h:n(r.h),s:n(r.s),v:n(r.v),a:n(r.a,3)};var r},r.prototype.invert=function(){return w({r:255-(r=this.rgba).r,g:255-r.g,b:255-r.b,a:r.a});var r},r.prototype.saturate=function(r){return void 0===r&&(r=.1),w(M(this.rgba,r))},r.prototype.desaturate=function(r){return void 0===r&&(r=.1),w(M(this.rgba,-r))},r.prototype.grayscale=function(){return w(M(this.rgba,-1))},r.prototype.lighten=function(r){return void 0===r&&(r=.1),w($(this.rgba,r))},r.prototype.darken=function(r){return void 0===r&&(r=.1),w($(this.rgba,-r))},r.prototype.rotate=function(r){return void 0===r&&(r=15),this.hue(this.hue()+r)},r.prototype.alpha=function(r){return\"number\"==typeof r?w({r:(t=this.rgba).r,g:t.g,b:t.b,a:r}):n(this.rgba.a,3);var t},r.prototype.hue=function(r){var t=c(this.rgba);return\"number\"==typeof r?w({h:r,s:t.s,l:t.l,a:t.a}):n(t.h)},r.prototype.isEqual=function(r){return this.toHex()===w(r).toHex()},r}(),w=function(r){return r instanceof j?r:new j(r)},S=[],k=function(r){r.forEach(function(r){S.indexOf(r)<0&&(r(j,y),S.push(r))})},E=function(){return new j({r:255*Math.random(),g:255*Math.random(),b:255*Math.random()})};export{j as Colord,w as colord,k as extend,I as getFormat,E as random};\n","var o=function(o){var t=o/255;return t<.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)},t=function(t){return.2126*o(t.r)+.7152*o(t.g)+.0722*o(t.b)};export default function(o){o.prototype.luminance=function(){return o=t(this.rgba),void 0===(r=2)&&(r=0),void 0===n&&(n=Math.pow(10,r)),Math.round(n*o)/n+0;var o,r,n},o.prototype.contrast=function(r){void 0===r&&(r=\"#FFF\");var n,a,i,e,v,u,d,c=r instanceof o?r:new o(r);return e=this.rgba,v=c.toRgb(),u=t(e),d=t(v),n=u>d?(u+.05)/(d+.05):(d+.05)/(u+.05),void 0===(a=2)&&(a=0),void 0===i&&(i=Math.pow(10,a)),Math.floor(i*n)/i+0},o.prototype.isReadable=function(o,t){return void 0===o&&(o=\"#FFF\"),void 0===t&&(t={}),this.contrast(o)>=(e=void 0===(i=(r=t).size)?\"normal\":i,\"AAA\"===(a=void 0===(n=r.level)?\"AA\":n)&&\"normal\"===e?7:\"AA\"===a&&\"large\"===e?3:4.5);var r,n,a,i,e}}\n","var __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"element\"];","var __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"dom\"];","export const BLOCK_ICON_DEFAULT = 'block-default';\n\n/**\n * Array of valid keys in a block type settings deprecation object.\n *\n * @type {string[]}\n */\nexport const DEPRECATED_ENTRY_KEYS = [\n\t'attributes',\n\t'supports',\n\t'save',\n\t'migrate',\n\t'isEligible',\n\t'apiVersion',\n];\n\nexport const __EXPERIMENTAL_STYLE_PROPERTY = {\n\t// Kept for back-compatibility purposes.\n\t'--wp--style--color--link': {\n\t\tvalue: [ 'color', 'link' ],\n\t\tsupport: [ 'color', 'link' ],\n\t},\n\tbackground: {\n\t\tvalue: [ 'color', 'gradient' ],\n\t\tsupport: [ 'color', 'gradients' ],\n\t},\n\tbackgroundColor: {\n\t\tvalue: [ 'color', 'background' ],\n\t\tsupport: [ 'color', 'background' ],\n\t\trequiresOptOut: true,\n\t},\n\tborderColor: {\n\t\tvalue: [ 'border', 'color' ],\n\t\tsupport: [ '__experimentalBorder', 'color' ],\n\t},\n\tborderRadius: {\n\t\tvalue: [ 'border', 'radius' ],\n\t\tsupport: [ '__experimentalBorder', 'radius' ],\n\t\tproperties: {\n\t\t\tborderTopLeftRadius: 'topLeft',\n\t\t\tborderTopRightRadius: 'topRight',\n\t\t\tborderBottomLeftRadius: 'bottomLeft',\n\t\t\tborderBottomRightRadius: 'bottomRight',\n\t\t},\n\t},\n\tborderStyle: {\n\t\tvalue: [ 'border', 'style' ],\n\t\tsupport: [ '__experimentalBorder', 'style' ],\n\t},\n\tborderWidth: {\n\t\tvalue: [ 'border', 'width' ],\n\t\tsupport: [ '__experimentalBorder', 'width' ],\n\t},\n\tcolor: {\n\t\tvalue: [ 'color', 'text' ],\n\t\tsupport: [ 'color', 'text' ],\n\t\trequiresOptOut: true,\n\t},\n\tlinkColor: {\n\t\tvalue: [ 'elements', 'link', 'color', 'text' ],\n\t\tsupport: [ 'color', 'link' ],\n\t},\n\tfontFamily: {\n\t\tvalue: [ 'typography', 'fontFamily' ],\n\t\tsupport: [ 'typography', '__experimentalFontFamily' ],\n\t},\n\tfontSize: {\n\t\tvalue: [ 'typography', 'fontSize' ],\n\t\tsupport: [ 'typography', 'fontSize' ],\n\t},\n\tfontStyle: {\n\t\tvalue: [ 'typography', 'fontStyle' ],\n\t\tsupport: [ 'typography', '__experimentalFontStyle' ],\n\t},\n\tfontWeight: {\n\t\tvalue: [ 'typography', 'fontWeight' ],\n\t\tsupport: [ 'typography', '__experimentalFontWeight' ],\n\t},\n\tlineHeight: {\n\t\tvalue: [ 'typography', 'lineHeight' ],\n\t\tsupport: [ 'typography', 'lineHeight' ],\n\t},\n\tmargin: {\n\t\tvalue: [ 'spacing', 'margin' ],\n\t\tsupport: [ 'spacing', 'margin' ],\n\t\tproperties: {\n\t\t\tmarginTop: 'top',\n\t\t\tmarginRight: 'right',\n\t\t\tmarginBottom: 'bottom',\n\t\t\tmarginLeft: 'left',\n\t\t},\n\t},\n\tpadding: {\n\t\tvalue: [ 'spacing', 'padding' ],\n\t\tsupport: [ 'spacing', 'padding' ],\n\t\tproperties: {\n\t\t\tpaddingTop: 'top',\n\t\t\tpaddingRight: 'right',\n\t\t\tpaddingBottom: 'bottom',\n\t\t\tpaddingLeft: 'left',\n\t\t},\n\t\tuseEngine: true,\n\t},\n\ttextDecoration: {\n\t\tvalue: [ 'typography', 'textDecoration' ],\n\t\tsupport: [ 'typography', '__experimentalTextDecoration' ],\n\t},\n\ttextTransform: {\n\t\tvalue: [ 'typography', 'textTransform' ],\n\t\tsupport: [ 'typography', '__experimentalTextTransform' ],\n\t},\n\tletterSpacing: {\n\t\tvalue: [ 'typography', 'letterSpacing' ],\n\t\tsupport: [ 'typography', '__experimentalLetterSpacing' ],\n\t},\n\t'--wp--style--block-gap': {\n\t\tvalue: [ 'spacing', 'blockGap' ],\n\t\tsupport: [ 'spacing', 'blockGap' ],\n\t},\n};\n\nexport const __EXPERIMENTAL_ELEMENTS = {\n\tlink: 'a',\n\th1: 'h1',\n\th2: 'h2',\n\th3: 'h3',\n\th4: 'h4',\n\th5: 'h5',\n\th6: 'h6',\n};\n\nexport const __EXPERIMENTAL_PATHS_WITH_MERGE = {\n\t'color.duotone': true,\n\t'color.gradients': true,\n\t'color.palette': true,\n\t'typography.fontFamilies': true,\n\t'typography.fontSizes': true,\n};\n","/* eslint no-console: [ 'error', { allow: [ 'error', 'warn' ] } ] */\n\n/**\n * External dependencies\n */\nimport {\n\tcamelCase,\n\tisArray,\n\tisEmpty,\n\tisNil,\n\tisObject,\n\tisString,\n\tmapKeys,\n\tpick,\n\tpickBy,\n} from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { select, dispatch } from '@wordpress/data';\nimport { _x } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport i18nBlockSchema from './i18n-block.json';\nimport { BLOCK_ICON_DEFAULT } from './constants';\nimport { store as blocksStore } from '../store';\n\n/**\n * An icon type definition. One of a Dashicon slug, an element,\n * or a component.\n *\n * @typedef {(string|WPElement|WPComponent)} WPIcon\n *\n * @see https://developer.wordpress.org/resource/dashicons/\n */\n\n/**\n * Render behavior of a block type icon; one of a Dashicon slug, an element,\n * or a component.\n *\n * @typedef {WPIcon} WPBlockTypeIconRender\n */\n\n/**\n * An object describing a normalized block type icon.\n *\n * @typedef {Object} WPBlockTypeIconDescriptor\n *\n * @property {WPBlockTypeIconRender} src Render behavior of the icon,\n * one of a Dashicon slug, an\n * element, or a component.\n * @property {string} background Optimal background hex string\n * color when displaying icon.\n * @property {string} foreground Optimal foreground hex string\n * color when displaying icon.\n * @property {string} shadowColor Optimal shadow hex string\n * color when displaying icon.\n */\n\n/**\n * Value to use to render the icon for a block type in an editor interface,\n * either a Dashicon slug, an element, a component, or an object describing\n * the icon.\n *\n * @typedef {(WPBlockTypeIconDescriptor|WPBlockTypeIconRender)} WPBlockTypeIcon\n */\n\n/**\n * Named block variation scopes.\n *\n * @typedef {'block'|'inserter'|'transform'} WPBlockVariationScope\n */\n\n/**\n * An object describing a variation defined for the block type.\n *\n * @typedef {Object} WPBlockVariation\n *\n * @property {string} name The unique and machine-readable name.\n * @property {string} title A human-readable variation title.\n * @property {string} [description] A detailed variation description.\n * @property {string} [category] Block type category classification,\n * used in search interfaces to arrange\n * block types by category.\n * @property {WPIcon} [icon] An icon helping to visualize the variation.\n * @property {boolean} [isDefault] Indicates whether the current variation is\n * the default one. Defaults to `false`.\n * @property {Object} [attributes] Values which override block attributes.\n * @property {Array[]} [innerBlocks] Initial configuration of nested blocks.\n * @property {Object} [example] Example provides structured data for\n * the block preview. You can set to\n * `undefined` to disable the preview shown\n * for the block type.\n * @property {WPBlockVariationScope[]} [scope] The list of scopes where the variation\n * is applicable. When not provided, it\n * assumes all available scopes.\n * @property {string[]} [keywords] An array of terms (which can be translated)\n * that help users discover the variation\n * while searching.\n * @property {Function|string[]} [isActive] This can be a function or an array of block attributes.\n * Function that accepts a block's attributes and the\n * variation's attributes and determines if a variation is active.\n * This function doesn't try to find a match dynamically based\n * on all block's attributes, as in many cases some attributes are irrelevant.\n * An example would be for `embed` block where we only care\n * about `providerNameSlug` attribute's value.\n * We can also use a `string[]` to tell which attributes\n * should be compared as a shorthand. Each attributes will\n * be matched and the variation will be active if all of them are matching.\n */\n\n/**\n * Defined behavior of a block type.\n *\n * @typedef {Object} WPBlockType\n *\n * @property {string} name Block type's namespaced name.\n * @property {string} title Human-readable block type label.\n * @property {string} [description] A detailed block type description.\n * @property {string} [category] Block type category classification,\n * used in search interfaces to arrange\n * block types by category.\n * @property {WPBlockTypeIcon} [icon] Block type icon.\n * @property {string[]} [keywords] Additional keywords to produce block\n * type as result in search interfaces.\n * @property {Object} [attributes] Block type attributes.\n * @property {WPComponent} [save] Optional component describing\n * serialized markup structure of a\n * block type.\n * @property {WPComponent} edit Component rendering an element to\n * manipulate the attributes of a block\n * in the context of an editor.\n * @property {WPBlockVariation[]} [variations] The list of block variations.\n * @property {Object} [example] Example provides structured data for\n * the block preview. When not defined\n * then no preview is shown.\n */\n\nexport const serverSideBlockDefinitions = {};\n\n/**\n * Sets the server side block definition of blocks.\n *\n * @param {Object} definitions Server-side block definitions\n */\n// eslint-disable-next-line camelcase\nexport function unstable__bootstrapServerSideBlockDefinitions( definitions ) {\n\tfor ( const blockName of Object.keys( definitions ) ) {\n\t\t// Don't overwrite if already set. It covers the case when metadata\n\t\t// was initialized from the server.\n\t\tif ( serverSideBlockDefinitions[ blockName ] ) {\n\t\t\t// We still need to polyfill `apiVersion` for WordPress version\n\t\t\t// lower than 5.7. If it isn't present in the definition shared\n\t\t\t// from the server, we try to fallback to the definition passed.\n\t\t\t// @see https://github.com/WordPress/gutenberg/pull/29279\n\t\t\tif (\n\t\t\t\tserverSideBlockDefinitions[ blockName ].apiVersion ===\n\t\t\t\t\tundefined &&\n\t\t\t\tdefinitions[ blockName ].apiVersion\n\t\t\t) {\n\t\t\t\tserverSideBlockDefinitions[ blockName ].apiVersion =\n\t\t\t\t\tdefinitions[ blockName ].apiVersion;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tserverSideBlockDefinitions[ blockName ] = mapKeys(\n\t\t\tpickBy( definitions[ blockName ], ( value ) => ! isNil( value ) ),\n\t\t\t( value, key ) => camelCase( key )\n\t\t);\n\t}\n}\n\n/**\n * Gets block settings from metadata loaded from `block.json` file.\n *\n * @param {Object} metadata Block metadata loaded from `block.json`.\n * @param {string} metadata.textdomain Textdomain to use with translations.\n *\n * @return {Object} Block settings.\n */\nfunction getBlockSettingsFromMetadata( { textdomain, ...metadata } ) {\n\tconst allowedFields = [\n\t\t'apiVersion',\n\t\t'title',\n\t\t'category',\n\t\t'parent',\n\t\t'icon',\n\t\t'description',\n\t\t'keywords',\n\t\t'attributes',\n\t\t'providesContext',\n\t\t'usesContext',\n\t\t'supports',\n\t\t'styles',\n\t\t'example',\n\t\t'variations',\n\t];\n\n\tconst settings = pick( metadata, allowedFields );\n\n\tif ( textdomain ) {\n\t\tObject.keys( i18nBlockSchema ).forEach( ( key ) => {\n\t\t\tif ( ! settings[ key ] ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettings[ key ] = translateBlockSettingUsingI18nSchema(\n\t\t\t\ti18nBlockSchema[ key ],\n\t\t\t\tsettings[ key ],\n\t\t\t\ttextdomain\n\t\t\t);\n\t\t} );\n\t}\n\n\treturn settings;\n}\n\n/**\n * Registers a new block provided a unique name and an object defining its\n * behavior. Once registered, the block is made available as an option to any\n * editor interface where blocks are implemented.\n *\n * @param {string|Object} blockNameOrMetadata Block type name or its metadata.\n * @param {Object} settings Block settings.\n *\n * @return {?WPBlockType} The block, if it has been successfully registered;\n * otherwise `undefined`.\n */\nexport function registerBlockType( blockNameOrMetadata, settings ) {\n\tconst name = isObject( blockNameOrMetadata )\n\t\t? blockNameOrMetadata.name\n\t\t: blockNameOrMetadata;\n\n\tif ( typeof name !== 'string' ) {\n\t\tconsole.error( 'Block names must be strings.' );\n\t\treturn;\n\t}\n\n\tif ( ! /^[a-z][a-z0-9-]*\\/[a-z][a-z0-9-]*$/.test( name ) ) {\n\t\tconsole.error(\n\t\t\t'Block names must contain a namespace prefix, include only lowercase alphanumeric characters or dashes, and start with a letter. Example: my-plugin/my-custom-block'\n\t\t);\n\t\treturn;\n\t}\n\tif ( select( blocksStore ).getBlockType( name ) ) {\n\t\tconsole.error( 'Block \"' + name + '\" is already registered.' );\n\t\treturn;\n\t}\n\n\tif ( isObject( blockNameOrMetadata ) ) {\n\t\tunstable__bootstrapServerSideBlockDefinitions( {\n\t\t\t[ name ]: getBlockSettingsFromMetadata( blockNameOrMetadata ),\n\t\t} );\n\t}\n\n\tconst blockType = {\n\t\tname,\n\t\ticon: BLOCK_ICON_DEFAULT,\n\t\tkeywords: [],\n\t\tattributes: {},\n\t\tprovidesContext: {},\n\t\tusesContext: [],\n\t\tsupports: {},\n\t\tstyles: [],\n\t\tvariations: [],\n\t\tsave: () => null,\n\t\t...serverSideBlockDefinitions?.[ name ],\n\t\t...settings,\n\t};\n\n\tdispatch( blocksStore ).__experimentalRegisterBlockType( blockType );\n\n\treturn select( blocksStore ).getBlockType( name );\n}\n\n/**\n * Translates block settings provided with metadata using the i18n schema.\n *\n * @param {string|string[]|Object[]} i18nSchema I18n schema for the block setting.\n * @param {string|string[]|Object[]} settingValue Value for the block setting.\n * @param {string} textdomain Textdomain to use with translations.\n *\n * @return {string|string[]|Object[]} Translated setting.\n */\nfunction translateBlockSettingUsingI18nSchema(\n\ti18nSchema,\n\tsettingValue,\n\ttextdomain\n) {\n\tif ( isString( i18nSchema ) && isString( settingValue ) ) {\n\t\t// eslint-disable-next-line @wordpress/i18n-no-variables, @wordpress/i18n-text-domain\n\t\treturn _x( settingValue, i18nSchema, textdomain );\n\t}\n\tif (\n\t\tisArray( i18nSchema ) &&\n\t\t! isEmpty( i18nSchema ) &&\n\t\tisArray( settingValue )\n\t) {\n\t\treturn settingValue.map( ( value ) =>\n\t\t\ttranslateBlockSettingUsingI18nSchema(\n\t\t\t\ti18nSchema[ 0 ],\n\t\t\t\tvalue,\n\t\t\t\ttextdomain\n\t\t\t)\n\t\t);\n\t}\n\tif (\n\t\tisObject( i18nSchema ) &&\n\t\t! isEmpty( i18nSchema ) &&\n\t\tisObject( settingValue )\n\t) {\n\t\treturn Object.keys( settingValue ).reduce( ( accumulator, key ) => {\n\t\t\tif ( ! i18nSchema[ key ] ) {\n\t\t\t\taccumulator[ key ] = settingValue[ key ];\n\t\t\t\treturn accumulator;\n\t\t\t}\n\t\t\taccumulator[ key ] = translateBlockSettingUsingI18nSchema(\n\t\t\t\ti18nSchema[ key ],\n\t\t\t\tsettingValue[ key ],\n\t\t\t\ttextdomain\n\t\t\t);\n\t\t\treturn accumulator;\n\t\t}, {} );\n\t}\n\treturn settingValue;\n}\n\n/**\n * Registers a new block collection to group blocks in the same namespace in the inserter.\n *\n * @param {string} namespace The namespace to group blocks by in the inserter; corresponds to the block namespace.\n * @param {Object} settings The block collection settings.\n * @param {string} settings.title The title to display in the block inserter.\n * @param {Object} [settings.icon] The icon to display in the block inserter.\n */\nexport function registerBlockCollection( namespace, { title, icon } ) {\n\tdispatch( blocksStore ).addBlockCollection( namespace, title, icon );\n}\n\n/**\n * Unregisters a block collection\n *\n * @param {string} namespace The namespace to group blocks by in the inserter; corresponds to the block namespace\n *\n */\nexport function unregisterBlockCollection( namespace ) {\n\tdispatch( blocksStore ).removeBlockCollection( namespace );\n}\n\n/**\n * Unregisters a block.\n *\n * @param {string} name Block name.\n *\n * @return {?WPBlockType} The previous block value, if it has been successfully\n * unregistered; otherwise `undefined`.\n */\nexport function unregisterBlockType( name ) {\n\tconst oldBlock = select( blocksStore ).getBlockType( name );\n\tif ( ! oldBlock ) {\n\t\tconsole.error( 'Block \"' + name + '\" is not registered.' );\n\t\treturn;\n\t}\n\tdispatch( blocksStore ).removeBlockTypes( name );\n\treturn oldBlock;\n}\n\n/**\n * Assigns name of block for handling non-block content.\n *\n * @param {string} blockName Block name.\n */\nexport function setFreeformContentHandlerName( blockName ) {\n\tdispatch( blocksStore ).setFreeformFallbackBlockName( blockName );\n}\n\n/**\n * Retrieves name of block handling non-block content, or undefined if no\n * handler has been defined.\n *\n * @return {?string} Block name.\n */\nexport function getFreeformContentHandlerName() {\n\treturn select( blocksStore ).getFreeformFallbackBlockName();\n}\n\n/**\n * Retrieves name of block used for handling grouping interactions.\n *\n * @return {?string} Block name.\n */\nexport function getGroupingBlockName() {\n\treturn select( blocksStore ).getGroupingBlockName();\n}\n\n/**\n * Assigns name of block handling unregistered block types.\n *\n * @param {string} blockName Block name.\n */\nexport function setUnregisteredTypeHandlerName( blockName ) {\n\tdispatch( blocksStore ).setUnregisteredFallbackBlockName( blockName );\n}\n\n/**\n * Retrieves name of block handling unregistered block types, or undefined if no\n * handler has been defined.\n *\n * @return {?string} Block name.\n */\nexport function getUnregisteredTypeHandlerName() {\n\treturn select( blocksStore ).getUnregisteredFallbackBlockName();\n}\n\n/**\n * Assigns the default block name.\n *\n * @param {string} name Block name.\n */\nexport function setDefaultBlockName( name ) {\n\tdispatch( blocksStore ).setDefaultBlockName( name );\n}\n\n/**\n * Assigns name of block for handling block grouping interactions.\n *\n * @param {string} name Block name.\n */\nexport function setGroupingBlockName( name ) {\n\tdispatch( blocksStore ).setGroupingBlockName( name );\n}\n\n/**\n * Retrieves the default block name.\n *\n * @return {?string} Block name.\n */\nexport function getDefaultBlockName() {\n\treturn select( blocksStore ).getDefaultBlockName();\n}\n\n/**\n * Returns a registered block type.\n *\n * @param {string} name Block name.\n *\n * @return {?Object} Block type.\n */\nexport function getBlockType( name ) {\n\treturn select( blocksStore )?.getBlockType( name );\n}\n\n/**\n * Returns all registered blocks.\n *\n * @return {Array} Block settings.\n */\nexport function getBlockTypes() {\n\treturn select( blocksStore ).getBlockTypes();\n}\n\n/**\n * Returns the block support value for a feature, if defined.\n *\n * @param {(string|Object)} nameOrType Block name or type object\n * @param {string} feature Feature to retrieve\n * @param {*} defaultSupports Default value to return if not\n * explicitly defined\n *\n * @return {?*} Block support value\n */\nexport function getBlockSupport( nameOrType, feature, defaultSupports ) {\n\treturn select( blocksStore ).getBlockSupport(\n\t\tnameOrType,\n\t\tfeature,\n\t\tdefaultSupports\n\t);\n}\n\n/**\n * Returns true if the block defines support for a feature, or false otherwise.\n *\n * @param {(string|Object)} nameOrType Block name or type object.\n * @param {string} feature Feature to test.\n * @param {boolean} defaultSupports Whether feature is supported by\n * default if not explicitly defined.\n *\n * @return {boolean} Whether block supports feature.\n */\nexport function hasBlockSupport( nameOrType, feature, defaultSupports ) {\n\treturn select( blocksStore ).hasBlockSupport(\n\t\tnameOrType,\n\t\tfeature,\n\t\tdefaultSupports\n\t);\n}\n\n/**\n * Determines whether or not the given block is a reusable block. This is a\n * special block type that is used to point to a global block stored via the\n * API.\n *\n * @param {Object} blockOrType Block or Block Type to test.\n *\n * @return {boolean} Whether the given block is a reusable block.\n */\nexport function isReusableBlock( blockOrType ) {\n\treturn blockOrType?.name === 'core/block';\n}\n\n/**\n * Determines whether or not the given block is a template part. This is a\n * special block type that allows composing a page template out of reusable\n * design elements.\n *\n * @param {Object} blockOrType Block or Block Type to test.\n *\n * @return {boolean} Whether the given block is a template part.\n */\nexport function isTemplatePart( blockOrType ) {\n\treturn blockOrType.name === 'core/template-part';\n}\n\n/**\n * Returns an array with the child blocks of a given block.\n *\n * @param {string} blockName Name of block (example: “latest-posts”).\n *\n * @return {Array} Array of child block names.\n */\nexport const getChildBlockNames = ( blockName ) => {\n\treturn select( blocksStore ).getChildBlockNames( blockName );\n};\n\n/**\n * Returns a boolean indicating if a block has child blocks or not.\n *\n * @param {string} blockName Name of block (example: “latest-posts”).\n *\n * @return {boolean} True if a block contains child blocks and false otherwise.\n */\nexport const hasChildBlocks = ( blockName ) => {\n\treturn select( blocksStore ).hasChildBlocks( blockName );\n};\n\n/**\n * Returns a boolean indicating if a block has at least one child block with inserter support.\n *\n * @param {string} blockName Block type name.\n *\n * @return {boolean} True if a block contains at least one child blocks with inserter support\n * and false otherwise.\n */\nexport const hasChildBlocksWithInserterSupport = ( blockName ) => {\n\treturn select( blocksStore ).hasChildBlocksWithInserterSupport( blockName );\n};\n\n/**\n * Registers a new block style variation for the given block.\n *\n * @param {string} blockName Name of block (example: “core/latest-posts”).\n * @param {Object} styleVariation Object containing `name` which is the class name applied to the block and `label` which identifies the variation to the user.\n */\nexport const registerBlockStyle = ( blockName, styleVariation ) => {\n\tdispatch( blocksStore ).addBlockStyles( blockName, styleVariation );\n};\n\n/**\n * Unregisters a block style variation for the given block.\n *\n * @param {string} blockName Name of block (example: “core/latest-posts”).\n * @param {string} styleVariationName Name of class applied to the block.\n */\nexport const unregisterBlockStyle = ( blockName, styleVariationName ) => {\n\tdispatch( blocksStore ).removeBlockStyles( blockName, styleVariationName );\n};\n\n/**\n * Returns an array with the variations of a given block type.\n *\n * @param {string} blockName Name of block (example: “core/columns”).\n * @param {WPBlockVariationScope} [scope] Block variation scope name.\n *\n * @return {(WPBlockVariation[]|void)} Block variations.\n */\nexport const getBlockVariations = ( blockName, scope ) => {\n\treturn select( blocksStore ).getBlockVariations( blockName, scope );\n};\n\n/**\n * Registers a new block variation for the given block type.\n *\n * @param {string} blockName Name of the block (example: “core/columns”).\n * @param {WPBlockVariation} variation Object describing a block variation.\n */\nexport const registerBlockVariation = ( blockName, variation ) => {\n\tdispatch( blocksStore ).addBlockVariations( blockName, variation );\n};\n\n/**\n * Unregisters a block variation defined for the given block type.\n *\n * @param {string} blockName Name of the block (example: “core/columns”).\n * @param {string} variationName Name of the variation defined for the block.\n */\nexport const unregisterBlockVariation = ( blockName, variationName ) => {\n\tdispatch( blocksStore ).removeBlockVariations( blockName, variationName );\n};\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n// find the complete implementation of crypto (msCrypto) on IE11.\nvar getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n\n return getRandomValues(rnds8);\n}","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","/**\n * External dependencies\n */\nimport { v4 as uuid } from 'uuid';\nimport {\n\tevery,\n\tcastArray,\n\tsome,\n\tisObjectLike,\n\tfilter,\n\tfirst,\n\tflatMap,\n\thas,\n\tuniq,\n\tisFunction,\n\tisEmpty,\n\tmap,\n} from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { createHooks, applyFilters } from '@wordpress/hooks';\n\n/**\n * Internal dependencies\n */\nimport {\n\tgetBlockType,\n\tgetBlockTypes,\n\tgetGroupingBlockName,\n} from './registration';\nimport {\n\tnormalizeBlockType,\n\t__experimentalSanitizeBlockAttributes,\n} from './utils';\n\n/**\n * Returns a block object given its type and attributes.\n *\n * @param {string} name Block name.\n * @param {Object} attributes Block attributes.\n * @param {?Array} innerBlocks Nested blocks.\n *\n * @return {Object} Block object.\n */\nexport function createBlock( name, attributes = {}, innerBlocks = [] ) {\n\tconst sanitizedAttributes = __experimentalSanitizeBlockAttributes(\n\t\tname,\n\t\tattributes\n\t);\n\n\tconst clientId = uuid();\n\n\t// Blocks are stored with a unique ID, the assigned type name, the block\n\t// attributes, and their inner blocks.\n\treturn {\n\t\tclientId,\n\t\tname,\n\t\tisValid: true,\n\t\tattributes: sanitizedAttributes,\n\t\tinnerBlocks,\n\t};\n}\n\n/**\n * Given an array of InnerBlocks templates or Block Objects,\n * returns an array of created Blocks from them.\n * It handles the case of having InnerBlocks as Blocks by\n * converting them to the proper format to continue recursively.\n *\n * @param {Array} innerBlocksOrTemplate Nested blocks or InnerBlocks templates.\n *\n * @return {Object[]} Array of Block objects.\n */\nexport function createBlocksFromInnerBlocksTemplate(\n\tinnerBlocksOrTemplate = []\n) {\n\treturn innerBlocksOrTemplate.map( ( innerBlock ) => {\n\t\tconst innerBlockTemplate = Array.isArray( innerBlock )\n\t\t\t? innerBlock\n\t\t\t: [\n\t\t\t\t\tinnerBlock.name,\n\t\t\t\t\tinnerBlock.attributes,\n\t\t\t\t\tinnerBlock.innerBlocks,\n\t\t\t ];\n\t\tconst [ name, attributes, innerBlocks = [] ] = innerBlockTemplate;\n\t\treturn createBlock(\n\t\t\tname,\n\t\t\tattributes,\n\t\t\tcreateBlocksFromInnerBlocksTemplate( innerBlocks )\n\t\t);\n\t} );\n}\n\n/**\n * Given a block object, returns a copy of the block object while sanitizing its attributes,\n * optionally merging new attributes and/or replacing its inner blocks.\n *\n * @param {Object} block Block instance.\n * @param {Object} mergeAttributes Block attributes.\n * @param {?Array} newInnerBlocks Nested blocks.\n *\n * @return {Object} A cloned block.\n */\nexport function __experimentalCloneSanitizedBlock(\n\tblock,\n\tmergeAttributes = {},\n\tnewInnerBlocks\n) {\n\tconst clientId = uuid();\n\n\tconst sanitizedAttributes = __experimentalSanitizeBlockAttributes(\n\t\tblock.name,\n\t\t{\n\t\t\t...block.attributes,\n\t\t\t...mergeAttributes,\n\t\t}\n\t);\n\n\treturn {\n\t\t...block,\n\t\tclientId,\n\t\tattributes: sanitizedAttributes,\n\t\tinnerBlocks:\n\t\t\tnewInnerBlocks ||\n\t\t\tblock.innerBlocks.map( ( innerBlock ) =>\n\t\t\t\t__experimentalCloneSanitizedBlock( innerBlock )\n\t\t\t),\n\t};\n}\n\n/**\n * Given a block object, returns a copy of the block object,\n * optionally merging new attributes and/or replacing its inner blocks.\n *\n * @param {Object} block Block instance.\n * @param {Object} mergeAttributes Block attributes.\n * @param {?Array} newInnerBlocks Nested blocks.\n *\n * @return {Object} A cloned block.\n */\nexport function cloneBlock( block, mergeAttributes = {}, newInnerBlocks ) {\n\tconst clientId = uuid();\n\n\treturn {\n\t\t...block,\n\t\tclientId,\n\t\tattributes: {\n\t\t\t...block.attributes,\n\t\t\t...mergeAttributes,\n\t\t},\n\t\tinnerBlocks:\n\t\t\tnewInnerBlocks ||\n\t\t\tblock.innerBlocks.map( ( innerBlock ) => cloneBlock( innerBlock ) ),\n\t};\n}\n\n/**\n * Returns a boolean indicating whether a transform is possible based on\n * various bits of context.\n *\n * @param {Object} transform The transform object to validate.\n * @param {string} direction Is this a 'from' or 'to' transform.\n * @param {Array} blocks The blocks to transform from.\n *\n * @return {boolean} Is the transform possible?\n */\nconst isPossibleTransformForSource = ( transform, direction, blocks ) => {\n\tif ( isEmpty( blocks ) ) {\n\t\treturn false;\n\t}\n\n\t// If multiple blocks are selected, only multi block transforms\n\t// or wildcard transforms are allowed.\n\tconst isMultiBlock = blocks.length > 1;\n\tconst firstBlockName = first( blocks ).name;\n\tconst isValidForMultiBlocks =\n\t\tisWildcardBlockTransform( transform ) ||\n\t\t! isMultiBlock ||\n\t\ttransform.isMultiBlock;\n\tif ( ! isValidForMultiBlocks ) {\n\t\treturn false;\n\t}\n\n\t// Check non-wildcard transforms to ensure that transform is valid\n\t// for a block selection of multiple blocks of different types.\n\tif (\n\t\t! isWildcardBlockTransform( transform ) &&\n\t\t! every( blocks, { name: firstBlockName } )\n\t) {\n\t\treturn false;\n\t}\n\n\t// Only consider 'block' type transforms as valid.\n\tconst isBlockType = transform.type === 'block';\n\tif ( ! isBlockType ) {\n\t\treturn false;\n\t}\n\n\t// Check if the transform's block name matches the source block (or is a wildcard)\n\t// only if this is a transform 'from'.\n\tconst sourceBlock = first( blocks );\n\tconst hasMatchingName =\n\t\tdirection !== 'from' ||\n\t\ttransform.blocks.indexOf( sourceBlock.name ) !== -1 ||\n\t\tisWildcardBlockTransform( transform );\n\tif ( ! hasMatchingName ) {\n\t\treturn false;\n\t}\n\n\t// Don't allow single Grouping blocks to be transformed into\n\t// a Grouping block.\n\tif (\n\t\t! isMultiBlock &&\n\t\tisContainerGroupBlock( sourceBlock.name ) &&\n\t\tisContainerGroupBlock( transform.blockName )\n\t) {\n\t\treturn false;\n\t}\n\n\t// If the transform has a `isMatch` function specified, check that it returns true.\n\tif ( isFunction( transform.isMatch ) ) {\n\t\tconst attributes = transform.isMultiBlock\n\t\t\t? blocks.map( ( block ) => block.attributes )\n\t\t\t: sourceBlock.attributes;\n\t\tconst block = transform.isMultiBlock ? blocks : sourceBlock;\n\t\tif ( ! transform.isMatch( attributes, block ) ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (\n\t\ttransform.usingMobileTransformations &&\n\t\tisWildcardBlockTransform( transform ) &&\n\t\t! isContainerGroupBlock( sourceBlock.name )\n\t) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n\n/**\n * Returns block types that the 'blocks' can be transformed into, based on\n * 'from' transforms on other blocks.\n *\n * @param {Array} blocks The blocks to transform from.\n *\n * @return {Array} Block types that the blocks can be transformed into.\n */\nconst getBlockTypesForPossibleFromTransforms = ( blocks ) => {\n\tif ( isEmpty( blocks ) ) {\n\t\treturn [];\n\t}\n\n\tconst allBlockTypes = getBlockTypes();\n\n\t// filter all blocks to find those with a 'from' transform.\n\tconst blockTypesWithPossibleFromTransforms = filter(\n\t\tallBlockTypes,\n\t\t( blockType ) => {\n\t\t\tconst fromTransforms = getBlockTransforms( 'from', blockType.name );\n\t\t\treturn !! findTransform( fromTransforms, ( transform ) => {\n\t\t\t\treturn isPossibleTransformForSource(\n\t\t\t\t\ttransform,\n\t\t\t\t\t'from',\n\t\t\t\t\tblocks\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\t);\n\n\treturn blockTypesWithPossibleFromTransforms;\n};\n\n/**\n * Returns block types that the 'blocks' can be transformed into, based on\n * the source block's own 'to' transforms.\n *\n * @param {Array} blocks The blocks to transform from.\n *\n * @return {Array} Block types that the source can be transformed into.\n */\nconst getBlockTypesForPossibleToTransforms = ( blocks ) => {\n\tif ( isEmpty( blocks ) ) {\n\t\treturn [];\n\t}\n\n\tconst sourceBlock = first( blocks );\n\tconst blockType = getBlockType( sourceBlock.name );\n\tconst transformsTo = blockType\n\t\t? getBlockTransforms( 'to', blockType.name )\n\t\t: [];\n\n\t// filter all 'to' transforms to find those that are possible.\n\tconst possibleTransforms = filter( transformsTo, ( transform ) => {\n\t\treturn (\n\t\t\ttransform && isPossibleTransformForSource( transform, 'to', blocks )\n\t\t);\n\t} );\n\n\t// Build a list of block names using the possible 'to' transforms.\n\tconst blockNames = flatMap(\n\t\tpossibleTransforms,\n\t\t( transformation ) => transformation.blocks\n\t);\n\n\t// Map block names to block types.\n\treturn blockNames.map( ( name ) => getBlockType( name ) );\n};\n\n/**\n * Determines whether transform is a \"block\" type\n * and if so whether it is a \"wildcard\" transform\n * ie: targets \"any\" block type\n *\n * @param {Object} t the Block transform object\n *\n * @return {boolean} whether transform is a wildcard transform\n */\nexport const isWildcardBlockTransform = ( t ) =>\n\tt &&\n\tt.type === 'block' &&\n\tArray.isArray( t.blocks ) &&\n\tt.blocks.includes( '*' );\n\n/**\n * Determines whether the given Block is the core Block which\n * acts as a container Block for other Blocks as part of the\n * Grouping mechanics\n *\n * @param {string} name the name of the Block to test against\n *\n * @return {boolean} whether or not the Block is the container Block type\n */\nexport const isContainerGroupBlock = ( name ) =>\n\tname === getGroupingBlockName();\n\n/**\n * Returns an array of block types that the set of blocks received as argument\n * can be transformed into.\n *\n * @param {Array} blocks Blocks array.\n *\n * @return {Array} Block types that the blocks argument can be transformed to.\n */\nexport function getPossibleBlockTransformations( blocks ) {\n\tif ( isEmpty( blocks ) ) {\n\t\treturn [];\n\t}\n\n\tconst blockTypesForFromTransforms = getBlockTypesForPossibleFromTransforms(\n\t\tblocks\n\t);\n\tconst blockTypesForToTransforms = getBlockTypesForPossibleToTransforms(\n\t\tblocks\n\t);\n\n\treturn uniq( [\n\t\t...blockTypesForFromTransforms,\n\t\t...blockTypesForToTransforms,\n\t] );\n}\n\n/**\n * Given an array of transforms, returns the highest-priority transform where\n * the predicate function returns a truthy value. A higher-priority transform\n * is one with a lower priority value (i.e. first in priority order). Returns\n * null if the transforms set is empty or the predicate function returns a\n * falsey value for all entries.\n *\n * @param {Object[]} transforms Transforms to search.\n * @param {Function} predicate Function returning true on matching transform.\n *\n * @return {?Object} Highest-priority transform candidate.\n */\nexport function findTransform( transforms, predicate ) {\n\t// The hooks library already has built-in mechanisms for managing priority\n\t// queue, so leverage via locally-defined instance.\n\tconst hooks = createHooks();\n\n\tfor ( let i = 0; i < transforms.length; i++ ) {\n\t\tconst candidate = transforms[ i ];\n\t\tif ( predicate( candidate ) ) {\n\t\t\thooks.addFilter(\n\t\t\t\t'transform',\n\t\t\t\t'transform/' + i.toString(),\n\t\t\t\t( result ) => ( result ? result : candidate ),\n\t\t\t\tcandidate.priority\n\t\t\t);\n\t\t}\n\t}\n\n\t// Filter name is arbitrarily chosen but consistent with above aggregation.\n\treturn hooks.applyFilters( 'transform', null );\n}\n\n/**\n * Returns normal block transforms for a given transform direction, optionally\n * for a specific block by name, or an empty array if there are no transforms.\n * If no block name is provided, returns transforms for all blocks. A normal\n * transform object includes `blockName` as a property.\n *\n * @param {string} direction Transform direction (\"to\", \"from\").\n * @param {string|Object} blockTypeOrName Block type or name.\n *\n * @return {Array} Block transforms for direction.\n */\nexport function getBlockTransforms( direction, blockTypeOrName ) {\n\t// When retrieving transforms for all block types, recurse into self.\n\tif ( blockTypeOrName === undefined ) {\n\t\treturn flatMap( getBlockTypes(), ( { name } ) =>\n\t\t\tgetBlockTransforms( direction, name )\n\t\t);\n\t}\n\n\t// Validate that block type exists and has array of direction.\n\tconst blockType = normalizeBlockType( blockTypeOrName );\n\tconst { name: blockName, transforms } = blockType || {};\n\tif ( ! transforms || ! Array.isArray( transforms[ direction ] ) ) {\n\t\treturn [];\n\t}\n\n\tconst usingMobileTransformations =\n\t\ttransforms.supportedMobileTransforms &&\n\t\tArray.isArray( transforms.supportedMobileTransforms );\n\tconst filteredTransforms = usingMobileTransformations\n\t\t? filter( transforms[ direction ], ( t ) => {\n\t\t\t\tif ( t.type === 'raw' ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tif ( ! t.blocks || ! t.blocks.length ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif ( isWildcardBlockTransform( t ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn every( t.blocks, ( transformBlockName ) =>\n\t\t\t\t\ttransforms.supportedMobileTransforms.includes(\n\t\t\t\t\t\ttransformBlockName\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t } )\n\t\t: transforms[ direction ];\n\n\t// Map transforms to normal form.\n\treturn filteredTransforms.map( ( transform ) => ( {\n\t\t...transform,\n\t\tblockName,\n\t\tusingMobileTransformations,\n\t} ) );\n}\n\n/**\n * Switch one or more blocks into one or more blocks of the new block type.\n *\n * @param {Array|Object} blocks Blocks array or block object.\n * @param {string} name Block name.\n *\n * @return {?Array} Array of blocks or null.\n */\nexport function switchToBlockType( blocks, name ) {\n\tconst blocksArray = castArray( blocks );\n\tconst isMultiBlock = blocksArray.length > 1;\n\tconst firstBlock = blocksArray[ 0 ];\n\tconst sourceName = firstBlock.name;\n\n\t// Find the right transformation by giving priority to the \"to\"\n\t// transformation.\n\tconst transformationsFrom = getBlockTransforms( 'from', name );\n\tconst transformationsTo = getBlockTransforms( 'to', sourceName );\n\n\tconst transformation =\n\t\tfindTransform(\n\t\t\ttransformationsTo,\n\t\t\t( t ) =>\n\t\t\t\tt.type === 'block' &&\n\t\t\t\t( isWildcardBlockTransform( t ) ||\n\t\t\t\t\tt.blocks.indexOf( name ) !== -1 ) &&\n\t\t\t\t( ! isMultiBlock || t.isMultiBlock )\n\t\t) ||\n\t\tfindTransform(\n\t\t\ttransformationsFrom,\n\t\t\t( t ) =>\n\t\t\t\tt.type === 'block' &&\n\t\t\t\t( isWildcardBlockTransform( t ) ||\n\t\t\t\t\tt.blocks.indexOf( sourceName ) !== -1 ) &&\n\t\t\t\t( ! isMultiBlock || t.isMultiBlock )\n\t\t);\n\n\t// Stop if there is no valid transformation.\n\tif ( ! transformation ) {\n\t\treturn null;\n\t}\n\n\tlet transformationResults;\n\n\tif ( transformation.isMultiBlock ) {\n\t\tif ( has( transformation, '__experimentalConvert' ) ) {\n\t\t\ttransformationResults = transformation.__experimentalConvert(\n\t\t\t\tblocksArray\n\t\t\t);\n\t\t} else {\n\t\t\ttransformationResults = transformation.transform(\n\t\t\t\tblocksArray.map( ( currentBlock ) => currentBlock.attributes ),\n\t\t\t\tblocksArray.map( ( currentBlock ) => currentBlock.innerBlocks )\n\t\t\t);\n\t\t}\n\t} else if ( has( transformation, '__experimentalConvert' ) ) {\n\t\ttransformationResults = transformation.__experimentalConvert(\n\t\t\tfirstBlock\n\t\t);\n\t} else {\n\t\ttransformationResults = transformation.transform(\n\t\t\tfirstBlock.attributes,\n\t\t\tfirstBlock.innerBlocks\n\t\t);\n\t}\n\n\t// Ensure that the transformation function returned an object or an array\n\t// of objects.\n\tif ( ! isObjectLike( transformationResults ) ) {\n\t\treturn null;\n\t}\n\n\t// If the transformation function returned a single object, we want to work\n\t// with an array instead.\n\ttransformationResults = castArray( transformationResults );\n\n\t// Ensure that every block object returned by the transformation has a\n\t// valid block type.\n\tif (\n\t\ttransformationResults.some(\n\t\t\t( result ) => ! getBlockType( result.name )\n\t\t)\n\t) {\n\t\treturn null;\n\t}\n\n\tconst hasSwitchedBlock = some(\n\t\ttransformationResults,\n\t\t( result ) => result.name === name\n\t);\n\n\t// Ensure that at least one block object returned by the transformation has\n\t// the expected \"destination\" block type.\n\tif ( ! hasSwitchedBlock ) {\n\t\treturn null;\n\t}\n\n\tconst ret = transformationResults.map( ( result, index, results ) => {\n\t\t/**\n\t\t * Filters an individual transform result from block transformation.\n\t\t * All of the original blocks are passed, since transformations are\n\t\t * many-to-many, not one-to-one.\n\t\t *\n\t\t * @param {Object} transformedBlock The transformed block.\n\t\t * @param {Object[]} blocks Original blocks transformed.\n\t\t * @param {Object[]} index Index of the transformed block on the array of results.\n\t\t * @param {Object[]} results An array all the blocks that resulted from the transformation.\n\t\t */\n\t\treturn applyFilters(\n\t\t\t'blocks.switchToBlockType.transformedBlock',\n\t\t\tresult,\n\t\t\tblocks,\n\t\t\tindex,\n\t\t\tresults\n\t\t);\n\t} );\n\n\treturn ret;\n}\n\n/**\n * Create a block object from the example API.\n *\n * @param {string} name\n * @param {Object} example\n *\n * @return {Object} block.\n */\nexport const getBlockFromExample = ( name, example ) => {\n\treturn createBlock(\n\t\tname,\n\t\texample.attributes,\n\t\tmap( example.innerBlocks, ( innerBlock ) =>\n\t\t\tgetBlockFromExample( innerBlock.name, innerBlock )\n\t\t)\n\t);\n};\n","/**\n * External dependencies\n */\nimport { every, has, isFunction, isString, reduce, maxBy } from 'lodash';\nimport { colord, extend } from 'colord';\nimport namesPlugin from 'colord/plugins/names';\nimport a11yPlugin from 'colord/plugins/a11y';\n\n/**\n * WordPress dependencies\n */\nimport { Component, isValidElement } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\n\n/**\n * Internal dependencies\n */\nimport { BLOCK_ICON_DEFAULT } from './constants';\nimport { getBlockType, getDefaultBlockName } from './registration';\nimport { createBlock } from './factory';\n\nextend( [ namesPlugin, a11yPlugin ] );\n\n/**\n * Array of icon colors containing a color to be used if the icon color\n * was not explicitly set but the icon background color was.\n *\n * @type {Object}\n */\nconst ICON_COLORS = [ '#191e23', '#f8f9f9' ];\n\n/**\n * Determines whether the block is a default block\n * and its attributes are equal to the default attributes\n * which means the block is unmodified.\n *\n * @param {WPBlock} block Block Object\n *\n * @return {boolean} Whether the block is an unmodified default block\n */\nexport function isUnmodifiedDefaultBlock( block ) {\n\tconst defaultBlockName = getDefaultBlockName();\n\tif ( block.name !== defaultBlockName ) {\n\t\treturn false;\n\t}\n\n\t// Cache a created default block if no cache exists or the default block\n\t// name changed.\n\tif (\n\t\t! isUnmodifiedDefaultBlock.block ||\n\t\tisUnmodifiedDefaultBlock.block.name !== defaultBlockName\n\t) {\n\t\tisUnmodifiedDefaultBlock.block = createBlock( defaultBlockName );\n\t}\n\n\tconst newDefaultBlock = isUnmodifiedDefaultBlock.block;\n\tconst blockType = getBlockType( defaultBlockName );\n\n\treturn every(\n\t\tblockType?.attributes,\n\t\t( value, key ) =>\n\t\t\tnewDefaultBlock.attributes[ key ] === block.attributes[ key ]\n\t);\n}\n\n/**\n * Function that checks if the parameter is a valid icon.\n *\n * @param {*} icon Parameter to be checked.\n *\n * @return {boolean} True if the parameter is a valid icon and false otherwise.\n */\n\nexport function isValidIcon( icon ) {\n\treturn (\n\t\t!! icon &&\n\t\t( isString( icon ) ||\n\t\t\tisValidElement( icon ) ||\n\t\t\tisFunction( icon ) ||\n\t\t\ticon instanceof Component )\n\t);\n}\n\n/**\n * Function that receives an icon as set by the blocks during the registration\n * and returns a new icon object that is normalized so we can rely on just on possible icon structure\n * in the codebase.\n *\n * @param {WPBlockTypeIconRender} icon Render behavior of a block type icon;\n * one of a Dashicon slug, an element, or a\n * component.\n *\n * @return {WPBlockTypeIconDescriptor} Object describing the icon.\n */\nexport function normalizeIconObject( icon ) {\n\ticon = icon || BLOCK_ICON_DEFAULT;\n\tif ( isValidIcon( icon ) ) {\n\t\treturn { src: icon };\n\t}\n\n\tif ( has( icon, [ 'background' ] ) ) {\n\t\tconst colordBgColor = colord( icon.background );\n\n\t\treturn {\n\t\t\t...icon,\n\t\t\tforeground: icon.foreground\n\t\t\t\t? icon.foreground\n\t\t\t\t: maxBy( ICON_COLORS, ( iconColor ) =>\n\t\t\t\t\t\tcolordBgColor.contrast( iconColor )\n\t\t\t\t ),\n\t\t\tshadowColor: colordBgColor.alpha( 0.3 ).toRgbString(),\n\t\t};\n\t}\n\n\treturn icon;\n}\n\n/**\n * Normalizes block type passed as param. When string is passed then\n * it converts it to the matching block type object.\n * It passes the original object otherwise.\n *\n * @param {string|Object} blockTypeOrName Block type or name.\n *\n * @return {?Object} Block type.\n */\nexport function normalizeBlockType( blockTypeOrName ) {\n\tif ( isString( blockTypeOrName ) ) {\n\t\treturn getBlockType( blockTypeOrName );\n\t}\n\n\treturn blockTypeOrName;\n}\n\n/**\n * Get the label for the block, usually this is either the block title,\n * or the value of the block's `label` function when that's specified.\n *\n * @param {Object} blockType The block type.\n * @param {Object} attributes The values of the block's attributes.\n * @param {Object} context The intended use for the label.\n *\n * @return {string} The block label.\n */\nexport function getBlockLabel( blockType, attributes, context = 'visual' ) {\n\tconst { __experimentalLabel: getLabel, title } = blockType;\n\n\tconst label = getLabel && getLabel( attributes, { context } );\n\n\tif ( ! label ) {\n\t\treturn title;\n\t}\n\n\t// Strip any HTML (i.e. RichText formatting) before returning.\n\treturn stripHTML( label );\n}\n\n/**\n * Get a label for the block for use by screenreaders, this is more descriptive\n * than the visual label and includes the block title and the value of the\n * `getLabel` function if it's specified.\n *\n * @param {Object} blockType The block type.\n * @param {Object} attributes The values of the block's attributes.\n * @param {?number} position The position of the block in the block list.\n * @param {string} [direction='vertical'] The direction of the block layout.\n *\n * @return {string} The block label.\n */\nexport function getAccessibleBlockLabel(\n\tblockType,\n\tattributes,\n\tposition,\n\tdirection = 'vertical'\n) {\n\t// `title` is already localized, `label` is a user-supplied value.\n\tconst title = blockType?.title;\n\tconst label = blockType\n\t\t? getBlockLabel( blockType, attributes, 'accessibility' )\n\t\t: '';\n\tconst hasPosition = position !== undefined;\n\n\t// getBlockLabel returns the block title as a fallback when there's no label,\n\t// if it did return the title, this function needs to avoid adding the\n\t// title twice within the accessible label. Use this `hasLabel` boolean to\n\t// handle that.\n\tconst hasLabel = label && label !== title;\n\n\tif ( hasPosition && direction === 'vertical' ) {\n\t\tif ( hasLabel ) {\n\t\t\treturn sprintf(\n\t\t\t\t/* translators: accessibility text. 1: The block title. 2: The block row number. 3: The block label.. */\n\t\t\t\t__( '%1$s Block. Row %2$d. %3$s' ),\n\t\t\t\ttitle,\n\t\t\t\tposition,\n\t\t\t\tlabel\n\t\t\t);\n\t\t}\n\n\t\treturn sprintf(\n\t\t\t/* translators: accessibility text. 1: The block title. 2: The block row number. */\n\t\t\t__( '%1$s Block. Row %2$d' ),\n\t\t\ttitle,\n\t\t\tposition\n\t\t);\n\t} else if ( hasPosition && direction === 'horizontal' ) {\n\t\tif ( hasLabel ) {\n\t\t\treturn sprintf(\n\t\t\t\t/* translators: accessibility text. 1: The block title. 2: The block column number. 3: The block label.. */\n\t\t\t\t__( '%1$s Block. Column %2$d. %3$s' ),\n\t\t\t\ttitle,\n\t\t\t\tposition,\n\t\t\t\tlabel\n\t\t\t);\n\t\t}\n\n\t\treturn sprintf(\n\t\t\t/* translators: accessibility text. 1: The block title. 2: The block column number. */\n\t\t\t__( '%1$s Block. Column %2$d' ),\n\t\t\ttitle,\n\t\t\tposition\n\t\t);\n\t}\n\n\tif ( hasLabel ) {\n\t\treturn sprintf(\n\t\t\t/* translators: accessibility text. %1: The block title. %2: The block label. */\n\t\t\t__( '%1$s Block. %2$s' ),\n\t\t\ttitle,\n\t\t\tlabel\n\t\t);\n\t}\n\n\treturn sprintf(\n\t\t/* translators: accessibility text. %s: The block title. */\n\t\t__( '%s Block' ),\n\t\ttitle\n\t);\n}\n\n/**\n * Ensure attributes contains only values defined by block type, and merge\n * default values for missing attributes.\n *\n * @param {string} name The block's name.\n * @param {Object} attributes The block's attributes.\n * @return {Object} The sanitized attributes.\n */\nexport function __experimentalSanitizeBlockAttributes( name, attributes ) {\n\t// Get the type definition associated with a registered block.\n\tconst blockType = getBlockType( name );\n\n\tif ( undefined === blockType ) {\n\t\tthrow new Error( `Block type '${ name }' is not registered.` );\n\t}\n\n\treturn reduce(\n\t\tblockType.attributes,\n\t\t( accumulator, schema, key ) => {\n\t\t\tconst value = attributes[ key ];\n\n\t\t\tif ( undefined !== value ) {\n\t\t\t\taccumulator[ key ] = value;\n\t\t\t} else if ( schema.hasOwnProperty( 'default' ) ) {\n\t\t\t\taccumulator[ key ] = schema.default;\n\t\t\t}\n\n\t\t\tif ( [ 'node', 'children' ].indexOf( schema.source ) !== -1 ) {\n\t\t\t\t// Ensure value passed is always an array, which we're expecting in\n\t\t\t\t// the RichText component to handle the deprecated value.\n\t\t\t\tif ( typeof accumulator[ key ] === 'string' ) {\n\t\t\t\t\taccumulator[ key ] = [ accumulator[ key ] ];\n\t\t\t\t} else if ( ! Array.isArray( accumulator[ key ] ) ) {\n\t\t\t\t\taccumulator[ key ] = [];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn accumulator;\n\t\t},\n\t\t{}\n\t);\n}\n\n/**\n * Filter block attributes by `role` and return their names.\n *\n * @param {string} name Block attribute's name.\n * @param {string} role The role of a block attribute.\n *\n * @return {string[]} The attribute names that have the provided role.\n */\nexport function __experimentalGetBlockAttributesNamesByRole( name, role ) {\n\tconst attributes = getBlockType( name )?.attributes;\n\tif ( ! attributes ) return [];\n\tconst attributesNames = Object.keys( attributes );\n\tif ( ! role ) return attributesNames;\n\treturn attributesNames.filter(\n\t\t( attributeName ) =>\n\t\t\tattributes[ attributeName ]?.__experimentalRole === role\n\t);\n}\n","export default function(e,f){var a={white:\"#ffffff\",bisque:\"#ffe4c4\",blue:\"#0000ff\",cadetblue:\"#5f9ea0\",chartreuse:\"#7fff00\",chocolate:\"#d2691e\",coral:\"#ff7f50\",antiquewhite:\"#faebd7\",aqua:\"#00ffff\",azure:\"#f0ffff\",whitesmoke:\"#f5f5f5\",papayawhip:\"#ffefd5\",plum:\"#dda0dd\",blanchedalmond:\"#ffebcd\",black:\"#000000\",gold:\"#ffd700\",goldenrod:\"#daa520\",gainsboro:\"#dcdcdc\",cornsilk:\"#fff8dc\",cornflowerblue:\"#6495ed\",burlywood:\"#deb887\",aquamarine:\"#7fffd4\",beige:\"#f5f5dc\",crimson:\"#dc143c\",cyan:\"#00ffff\",darkblue:\"#00008b\",darkcyan:\"#008b8b\",darkgoldenrod:\"#b8860b\",darkkhaki:\"#bdb76b\",darkgray:\"#a9a9a9\",darkgreen:\"#006400\",darkgrey:\"#a9a9a9\",peachpuff:\"#ffdab9\",darkmagenta:\"#8b008b\",darkred:\"#8b0000\",darkorchid:\"#9932cc\",darkorange:\"#ff8c00\",darkslateblue:\"#483d8b\",gray:\"#808080\",darkslategray:\"#2f4f4f\",darkslategrey:\"#2f4f4f\",deeppink:\"#ff1493\",deepskyblue:\"#00bfff\",wheat:\"#f5deb3\",firebrick:\"#b22222\",floralwhite:\"#fffaf0\",ghostwhite:\"#f8f8ff\",darkviolet:\"#9400d3\",magenta:\"#ff00ff\",green:\"#008000\",dodgerblue:\"#1e90ff\",grey:\"#808080\",honeydew:\"#f0fff0\",hotpink:\"#ff69b4\",blueviolet:\"#8a2be2\",forestgreen:\"#228b22\",lawngreen:\"#7cfc00\",indianred:\"#cd5c5c\",indigo:\"#4b0082\",fuchsia:\"#ff00ff\",brown:\"#a52a2a\",maroon:\"#800000\",mediumblue:\"#0000cd\",lightcoral:\"#f08080\",darkturquoise:\"#00ced1\",lightcyan:\"#e0ffff\",ivory:\"#fffff0\",lightyellow:\"#ffffe0\",lightsalmon:\"#ffa07a\",lightseagreen:\"#20b2aa\",linen:\"#faf0e6\",mediumaquamarine:\"#66cdaa\",lemonchiffon:\"#fffacd\",lime:\"#00ff00\",khaki:\"#f0e68c\",mediumseagreen:\"#3cb371\",limegreen:\"#32cd32\",mediumspringgreen:\"#00fa9a\",lightskyblue:\"#87cefa\",lightblue:\"#add8e6\",midnightblue:\"#191970\",lightpink:\"#ffb6c1\",mistyrose:\"#ffe4e1\",moccasin:\"#ffe4b5\",mintcream:\"#f5fffa\",lightslategray:\"#778899\",lightslategrey:\"#778899\",navajowhite:\"#ffdead\",navy:\"#000080\",mediumvioletred:\"#c71585\",powderblue:\"#b0e0e6\",palegoldenrod:\"#eee8aa\",oldlace:\"#fdf5e6\",paleturquoise:\"#afeeee\",mediumturquoise:\"#48d1cc\",mediumorchid:\"#ba55d3\",rebeccapurple:\"#663399\",lightsteelblue:\"#b0c4de\",mediumslateblue:\"#7b68ee\",thistle:\"#d8bfd8\",tan:\"#d2b48c\",orchid:\"#da70d6\",mediumpurple:\"#9370db\",purple:\"#800080\",pink:\"#ffc0cb\",skyblue:\"#87ceeb\",springgreen:\"#00ff7f\",palegreen:\"#98fb98\",red:\"#ff0000\",yellow:\"#ffff00\",slateblue:\"#6a5acd\",lavenderblush:\"#fff0f5\",peru:\"#cd853f\",palevioletred:\"#db7093\",violet:\"#ee82ee\",teal:\"#008080\",slategray:\"#708090\",slategrey:\"#708090\",aliceblue:\"#f0f8ff\",darkseagreen:\"#8fbc8f\",darkolivegreen:\"#556b2f\",greenyellow:\"#adff2f\",seagreen:\"#2e8b57\",seashell:\"#fff5ee\",tomato:\"#ff6347\",silver:\"#c0c0c0\",sienna:\"#a0522d\",lavender:\"#e6e6fa\",lightgreen:\"#90ee90\",orange:\"#ffa500\",orangered:\"#ff4500\",steelblue:\"#4682b4\",royalblue:\"#4169e1\",turquoise:\"#40e0d0\",yellowgreen:\"#9acd32\",salmon:\"#fa8072\",saddlebrown:\"#8b4513\",sandybrown:\"#f4a460\",rosybrown:\"#bc8f8f\",darksalmon:\"#e9967a\",lightgoldenrodyellow:\"#fafad2\",snow:\"#fffafa\",lightgrey:\"#d3d3d3\",lightgray:\"#d3d3d3\",dimgray:\"#696969\",dimgrey:\"#696969\",olivedrab:\"#6b8e23\",olive:\"#808000\"},r={};for(var d in a)r[a[d]]=d;var l={};e.prototype.toName=function(f){if(!(this.rgba.a||this.rgba.r||this.rgba.g||this.rgba.b))return\"transparent\";var d,i,n=r[this.toHex()];if(n)return n;if(null==f?void 0:f.closest){var o=this.toRgb(),t=1/0,b=\"black\";if(!l.length)for(var c in a)l[c]=new e(a[c]).toRgb();for(var g in a){var u=(d=o,i=l[g],Math.pow(d.r-i.r,2)+Math.pow(d.g-i.g,2)+Math.pow(d.b-i.b,2));u}\n */\nconst LEGACY_CATEGORY_MAPPING = {\n\tcommon: 'text',\n\tformatting: 'text',\n\tlayout: 'design',\n};\n\n/**\n * Takes the unprocessed block type data and applies all the existing filters for the registered block type.\n * Next, it validates all the settings and performs additional processing to the block type definition.\n *\n * @param {WPBlockType} blockType Unprocessed block type settings.\n * @param {Object} thunkArgs Argument object for the thunk middleware.\n * @param {Function} thunkArgs.select Function to select from the store.\n *\n * @return {?WPBlockType} The block, if it has been successfully registered; otherwise `undefined`.\n */\nconst processBlockType = ( blockType, { select } ) => {\n\tconst { name } = blockType;\n\n\tconst settings = applyFilters(\n\t\t'blocks.registerBlockType',\n\t\t{ ...blockType },\n\t\tname\n\t);\n\n\tif ( settings.deprecated ) {\n\t\tsettings.deprecated = settings.deprecated.map( ( deprecation ) =>\n\t\t\tpick(\n\t\t\t\t// Only keep valid deprecation keys.\n\t\t\t\tapplyFilters(\n\t\t\t\t\t'blocks.registerBlockType',\n\t\t\t\t\t// Merge deprecation keys with pre-filter settings\n\t\t\t\t\t// so that filters that depend on specific keys being\n\t\t\t\t\t// present don't fail.\n\t\t\t\t\t{\n\t\t\t\t\t\t// Omit deprecation keys here so that deprecations\n\t\t\t\t\t\t// can opt out of specific keys like \"supports\".\n\t\t\t\t\t\t...omit( blockType, DEPRECATED_ENTRY_KEYS ),\n\t\t\t\t\t\t...deprecation,\n\t\t\t\t\t},\n\t\t\t\t\tname\n\t\t\t\t),\n\t\t\t\tDEPRECATED_ENTRY_KEYS\n\t\t\t)\n\t\t);\n\t}\n\n\tif ( ! isPlainObject( settings ) ) {\n\t\terror( 'Block settings must be a valid object.' );\n\t\treturn;\n\t}\n\n\tif ( ! isFunction( settings.save ) ) {\n\t\terror( 'The \"save\" property must be a valid function.' );\n\t\treturn;\n\t}\n\tif ( 'edit' in settings && ! isFunction( settings.edit ) ) {\n\t\terror( 'The \"edit\" property must be a valid function.' );\n\t\treturn;\n\t}\n\n\t// Canonicalize legacy categories to equivalent fallback.\n\tif ( LEGACY_CATEGORY_MAPPING.hasOwnProperty( settings.category ) ) {\n\t\tsettings.category = LEGACY_CATEGORY_MAPPING[ settings.category ];\n\t}\n\n\tif (\n\t\t'category' in settings &&\n\t\t! some( select.getCategories(), {\n\t\t\tslug: settings.category,\n\t\t} )\n\t) {\n\t\twarn(\n\t\t\t'The block \"' +\n\t\t\t\tname +\n\t\t\t\t'\" is registered with an invalid category \"' +\n\t\t\t\tsettings.category +\n\t\t\t\t'\".'\n\t\t);\n\t\tdelete settings.category;\n\t}\n\n\tif ( ! ( 'title' in settings ) || settings.title === '' ) {\n\t\terror( 'The block \"' + name + '\" must have a title.' );\n\t\treturn;\n\t}\n\tif ( typeof settings.title !== 'string' ) {\n\t\terror( 'Block titles must be strings.' );\n\t\treturn;\n\t}\n\n\tsettings.icon = normalizeIconObject( settings.icon );\n\tif ( ! isValidIcon( settings.icon.src ) ) {\n\t\terror(\n\t\t\t'The icon passed is invalid. ' +\n\t\t\t\t'The icon should be a string, an element, a function, or an object following the specifications documented in https://developer.wordpress.org/block-editor/developers/block-api/block-registration/#icon-optional'\n\t\t);\n\t\treturn;\n\t}\n\n\treturn settings;\n};\n\n/**\n * Returns an action object used in signalling that block types have been added.\n *\n * @param {Array|Object} blockTypes Block types received.\n *\n * @return {Object} Action object.\n */\nexport function addBlockTypes( blockTypes ) {\n\treturn {\n\t\ttype: 'ADD_BLOCK_TYPES',\n\t\tblockTypes: castArray( blockTypes ),\n\t};\n}\n\n/**\n * Signals that the passed block type's settings should be stored in the state.\n *\n * @param {WPBlockType} blockType Unprocessed block type settings.\n */\nexport const __experimentalRegisterBlockType = ( blockType ) => ( {\n\tdispatch,\n\tselect,\n} ) => {\n\tdispatch( {\n\t\ttype: 'ADD_UNPROCESSED_BLOCK_TYPE',\n\t\tblockType,\n\t} );\n\n\tconst processedBlockType = processBlockType( blockType, { select } );\n\tif ( ! processedBlockType ) {\n\t\treturn;\n\t}\n\tdispatch.addBlockTypes( processedBlockType );\n};\n\n/**\n * Signals that all block types should be computed again.\n * It uses stored unprocessed block types and all the most recent list of registered filters.\n *\n * It addresses the issue where third party block filters get registered after third party blocks. A sample sequence:\n * 1. Filter A.\n * 2. Block B.\n * 3. Block C.\n * 4. Filter D.\n * 5. Filter E.\n * 6. Block F.\n * 7. Filter G.\n * In this scenario some filters would not get applied for all blocks because they are registered too late.\n */\nexport const __experimentalReapplyBlockTypeFilters = () => ( {\n\tdispatch,\n\tselect,\n} ) => {\n\tconst unprocessedBlockTypes = select.__experimentalGetUnprocessedBlockTypes();\n\n\tconst processedBlockTypes = Object.keys( unprocessedBlockTypes ).reduce(\n\t\t( accumulator, blockName ) => {\n\t\t\tconst result = processBlockType(\n\t\t\t\tunprocessedBlockTypes[ blockName ],\n\t\t\t\t{ select }\n\t\t\t);\n\t\t\tif ( result ) {\n\t\t\t\taccumulator.push( result );\n\t\t\t}\n\t\t\treturn accumulator;\n\t\t},\n\t\t[]\n\t);\n\n\tif ( ! processedBlockTypes.length ) {\n\t\treturn;\n\t}\n\n\tdispatch.addBlockTypes( processedBlockTypes );\n};\n\n/**\n * Returns an action object used to remove a registered block type.\n *\n * @param {string|Array} names Block name.\n *\n * @return {Object} Action object.\n */\nexport function removeBlockTypes( names ) {\n\treturn {\n\t\ttype: 'REMOVE_BLOCK_TYPES',\n\t\tnames: castArray( names ),\n\t};\n}\n\n/**\n * Returns an action object used in signalling that new block styles have been added.\n *\n * @param {string} blockName Block name.\n * @param {Array|Object} styles Block styles.\n *\n * @return {Object} Action object.\n */\nexport function addBlockStyles( blockName, styles ) {\n\treturn {\n\t\ttype: 'ADD_BLOCK_STYLES',\n\t\tstyles: castArray( styles ),\n\t\tblockName,\n\t};\n}\n\n/**\n * Returns an action object used in signalling that block styles have been removed.\n *\n * @param {string} blockName Block name.\n * @param {Array|string} styleNames Block style names.\n *\n * @return {Object} Action object.\n */\nexport function removeBlockStyles( blockName, styleNames ) {\n\treturn {\n\t\ttype: 'REMOVE_BLOCK_STYLES',\n\t\tstyleNames: castArray( styleNames ),\n\t\tblockName,\n\t};\n}\n\n/**\n * Returns an action object used in signalling that new block variations have been added.\n *\n * @param {string} blockName Block name.\n * @param {WPBlockVariation|WPBlockVariation[]} variations Block variations.\n *\n * @return {Object} Action object.\n */\nexport function addBlockVariations( blockName, variations ) {\n\treturn {\n\t\ttype: 'ADD_BLOCK_VARIATIONS',\n\t\tvariations: castArray( variations ),\n\t\tblockName,\n\t};\n}\n\n/**\n * Returns an action object used in signalling that block variations have been removed.\n *\n * @param {string} blockName Block name.\n * @param {string|string[]} variationNames Block variation names.\n *\n * @return {Object} Action object.\n */\nexport function removeBlockVariations( blockName, variationNames ) {\n\treturn {\n\t\ttype: 'REMOVE_BLOCK_VARIATIONS',\n\t\tvariationNames: castArray( variationNames ),\n\t\tblockName,\n\t};\n}\n\n/**\n * Returns an action object used to set the default block name.\n *\n * @param {string} name Block name.\n *\n * @return {Object} Action object.\n */\nexport function setDefaultBlockName( name ) {\n\treturn {\n\t\ttype: 'SET_DEFAULT_BLOCK_NAME',\n\t\tname,\n\t};\n}\n\n/**\n * Returns an action object used to set the name of the block used as a fallback\n * for non-block content.\n *\n * @param {string} name Block name.\n *\n * @return {Object} Action object.\n */\nexport function setFreeformFallbackBlockName( name ) {\n\treturn {\n\t\ttype: 'SET_FREEFORM_FALLBACK_BLOCK_NAME',\n\t\tname,\n\t};\n}\n\n/**\n * Returns an action object used to set the name of the block used as a fallback\n * for unregistered blocks.\n *\n * @param {string} name Block name.\n *\n * @return {Object} Action object.\n */\nexport function setUnregisteredFallbackBlockName( name ) {\n\treturn {\n\t\ttype: 'SET_UNREGISTERED_FALLBACK_BLOCK_NAME',\n\t\tname,\n\t};\n}\n\n/**\n * Returns an action object used to set the name of the block used\n * when grouping other blocks\n * eg: in \"Group/Ungroup\" interactions\n *\n * @param {string} name Block name.\n *\n * @return {Object} Action object.\n */\nexport function setGroupingBlockName( name ) {\n\treturn {\n\t\ttype: 'SET_GROUPING_BLOCK_NAME',\n\t\tname,\n\t};\n}\n\n/**\n * Returns an action object used to set block categories.\n *\n * @param {Object[]} categories Block categories.\n *\n * @return {Object} Action object.\n */\nexport function setCategories( categories ) {\n\treturn {\n\t\ttype: 'SET_CATEGORIES',\n\t\tcategories,\n\t};\n}\n\n/**\n * Returns an action object used to update a category.\n *\n * @param {string} slug Block category slug.\n * @param {Object} category Object containing the category properties that should be updated.\n *\n * @return {Object} Action object.\n */\nexport function updateCategory( slug, category ) {\n\treturn {\n\t\ttype: 'UPDATE_CATEGORY',\n\t\tslug,\n\t\tcategory,\n\t};\n}\n\n/**\n * Returns an action object used to add block collections\n *\n * @param {string} namespace The namespace of the blocks to put in the collection\n * @param {string} title The title to display in the block inserter\n * @param {Object} icon (optional) The icon to display in the block inserter\n *\n * @return {Object} Action object.\n */\nexport function addBlockCollection( namespace, title, icon ) {\n\treturn {\n\t\ttype: 'ADD_BLOCK_COLLECTION',\n\t\tnamespace,\n\t\ttitle,\n\t\ticon,\n\t};\n}\n\n/**\n * Returns an action object used to remove block collections\n *\n * @param {string} namespace The namespace of the blocks to put in the collection\n *\n * @return {Object} Action object.\n */\nexport function removeBlockCollection( namespace ) {\n\treturn {\n\t\ttype: 'REMOVE_BLOCK_COLLECTION',\n\t\tnamespace,\n\t};\n}\n","export const STORE_NAME = 'core/blocks';\n","/**\n * WordPress dependencies\n */\nimport { createReduxStore, register } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport reducer from './reducer';\nimport * as selectors from './selectors';\nimport * as actions from './actions';\nimport { STORE_NAME } from './constants';\n\n/**\n * Store definition for the blocks namespace.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore\n *\n * @type {Object}\n */\nexport const store = createReduxStore( STORE_NAME, {\n\treducer,\n\tselectors,\n\tactions,\n} );\n\nregister( store );\n","var __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"blockSerializationDefaultParser\"];","var __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"autop\"];","var __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"isShallowEqual\"];","/**\n * External dependencies\n */\nimport { isEmpty, reduce, isObject, castArray, startsWith } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tComponent,\n\tcloneElement,\n\trenderToString,\n\tRawHTML,\n} from '@wordpress/element';\nimport { hasFilter, applyFilters } from '@wordpress/hooks';\nimport isShallowEqual from '@wordpress/is-shallow-equal';\nimport { removep } from '@wordpress/autop';\n\n/**\n * Internal dependencies\n */\nimport {\n\tgetBlockType,\n\tgetFreeformContentHandlerName,\n\tgetUnregisteredTypeHandlerName,\n} from './registration';\nimport { isUnmodifiedDefaultBlock, normalizeBlockType } from './utils';\n\n/**\n * @typedef {Object} WPBlockSerializationOptions Serialization Options.\n *\n * @property {boolean} isInnerBlocks Whether we are serializing inner blocks.\n */\n\n/**\n * Returns the block's default classname from its name.\n *\n * @param {string} blockName The block name.\n *\n * @return {string} The block's default class.\n */\nexport function getBlockDefaultClassName( blockName ) {\n\t// Generated HTML classes for blocks follow the `wp-block-{name}` nomenclature.\n\t// Blocks provided by WordPress drop the prefixes 'core/' or 'core-' (historically used in 'core-embed/').\n\tconst className =\n\t\t'wp-block-' + blockName.replace( /\\//, '-' ).replace( /^core-/, '' );\n\n\treturn applyFilters(\n\t\t'blocks.getBlockDefaultClassName',\n\t\tclassName,\n\t\tblockName\n\t);\n}\n\n/**\n * Returns the block's default menu item classname from its name.\n *\n * @param {string} blockName The block name.\n *\n * @return {string} The block's default menu item class.\n */\nexport function getBlockMenuDefaultClassName( blockName ) {\n\t// Generated HTML classes for blocks follow the `editor-block-list-item-{name}` nomenclature.\n\t// Blocks provided by WordPress drop the prefixes 'core/' or 'core-' (historically used in 'core-embed/').\n\tconst className =\n\t\t'editor-block-list-item-' +\n\t\tblockName.replace( /\\//, '-' ).replace( /^core-/, '' );\n\n\treturn applyFilters(\n\t\t'blocks.getBlockMenuDefaultClassName',\n\t\tclassName,\n\t\tblockName\n\t);\n}\n\nconst blockPropsProvider = {};\nconst innerBlocksPropsProvider = {};\n\n/**\n * Call within a save function to get the props for the block wrapper.\n *\n * @param {Object} props Optional. Props to pass to the element.\n */\nexport function getBlockProps( props = {} ) {\n\tconst { blockType, attributes } = blockPropsProvider;\n\treturn applyFilters(\n\t\t'blocks.getSaveContent.extraProps',\n\t\t{ ...props },\n\t\tblockType,\n\t\tattributes\n\t);\n}\n\n/**\n * Call within a save function to get the props for the inner blocks wrapper.\n *\n * @param {Object} props Optional. Props to pass to the element.\n */\nexport function getInnerBlocksProps( props = {} ) {\n\tconst { innerBlocks } = innerBlocksPropsProvider;\n\t// Value is an array of blocks, so defer to block serializer.\n\tconst html = serialize( innerBlocks, { isInnerBlocks: true } );\n\t// Use special-cased raw HTML tag to avoid default escaping.\n\tconst children = { html };\n\n\treturn { ...props, children };\n}\n\n/**\n * Given a block type containing a save render implementation and attributes, returns the\n * enhanced element to be saved or string when raw HTML expected.\n *\n * @param {string|Object} blockTypeOrName Block type or name.\n * @param {Object} attributes Block attributes.\n * @param {?Array} innerBlocks Nested blocks.\n *\n * @return {Object|string} Save element or raw HTML string.\n */\nexport function getSaveElement(\n\tblockTypeOrName,\n\tattributes,\n\tinnerBlocks = []\n) {\n\tconst blockType = normalizeBlockType( blockTypeOrName );\n\tlet { save } = blockType;\n\n\t// Component classes are unsupported for save since serialization must\n\t// occur synchronously. For improved interoperability with higher-order\n\t// components which often return component class, emulate basic support.\n\tif ( save.prototype instanceof Component ) {\n\t\tconst instance = new save( { attributes } );\n\t\tsave = instance.render.bind( instance );\n\t}\n\n\tblockPropsProvider.blockType = blockType;\n\tblockPropsProvider.attributes = attributes;\n\tinnerBlocksPropsProvider.innerBlocks = innerBlocks;\n\n\tlet element = save( { attributes, innerBlocks } );\n\n\tif (\n\t\tisObject( element ) &&\n\t\thasFilter( 'blocks.getSaveContent.extraProps' ) &&\n\t\t! ( blockType.apiVersion > 1 )\n\t) {\n\t\t/**\n\t\t * Filters the props applied to the block save result element.\n\t\t *\n\t\t * @param {Object} props Props applied to save element.\n\t\t * @param {WPBlock} blockType Block type definition.\n\t\t * @param {Object} attributes Block attributes.\n\t\t */\n\t\tconst props = applyFilters(\n\t\t\t'blocks.getSaveContent.extraProps',\n\t\t\t{ ...element.props },\n\t\t\tblockType,\n\t\t\tattributes\n\t\t);\n\n\t\tif ( ! isShallowEqual( props, element.props ) ) {\n\t\t\telement = cloneElement( element, props );\n\t\t}\n\t}\n\n\t/**\n\t * Filters the save result of a block during serialization.\n\t *\n\t * @param {WPElement} element Block save result.\n\t * @param {WPBlock} blockType Block type definition.\n\t * @param {Object} attributes Block attributes.\n\t */\n\treturn applyFilters(\n\t\t'blocks.getSaveElement',\n\t\telement,\n\t\tblockType,\n\t\tattributes\n\t);\n}\n\n/**\n * Given a block type containing a save render implementation and attributes, returns the\n * static markup to be saved.\n *\n * @param {string|Object} blockTypeOrName Block type or name.\n * @param {Object} attributes Block attributes.\n * @param {?Array} innerBlocks Nested blocks.\n *\n * @return {string} Save content.\n */\nexport function getSaveContent( blockTypeOrName, attributes, innerBlocks ) {\n\tconst blockType = normalizeBlockType( blockTypeOrName );\n\n\treturn renderToString(\n\t\tgetSaveElement( blockType, attributes, innerBlocks )\n\t);\n}\n\n/**\n * Returns attributes which are to be saved and serialized into the block\n * comment delimiter.\n *\n * When a block exists in memory it contains as its attributes both those\n * parsed the block comment delimiter _and_ those which matched from the\n * contents of the block.\n *\n * This function returns only those attributes which are needed to persist and\n * which cannot be matched from the block content.\n *\n * @param {Object} blockType Block type.\n * @param {Object} attributes Attributes from in-memory block data.\n *\n * @return {Object} Subset of attributes for comment serialization.\n */\nexport function getCommentAttributes( blockType, attributes ) {\n\treturn reduce(\n\t\tblockType.attributes,\n\t\t( accumulator, attributeSchema, key ) => {\n\t\t\tconst value = attributes[ key ];\n\t\t\t// Ignore undefined values.\n\t\t\tif ( undefined === value ) {\n\t\t\t\treturn accumulator;\n\t\t\t}\n\n\t\t\t// Ignore all attributes but the ones with an \"undefined\" source\n\t\t\t// \"undefined\" source refers to attributes saved in the block comment.\n\t\t\tif ( attributeSchema.source !== undefined ) {\n\t\t\t\treturn accumulator;\n\t\t\t}\n\n\t\t\t// Ignore default value.\n\t\t\tif (\n\t\t\t\t'default' in attributeSchema &&\n\t\t\t\tattributeSchema.default === value\n\t\t\t) {\n\t\t\t\treturn accumulator;\n\t\t\t}\n\n\t\t\t// Otherwise, include in comment set.\n\t\t\taccumulator[ key ] = value;\n\t\t\treturn accumulator;\n\t\t},\n\t\t{}\n\t);\n}\n\n/**\n * Given an attributes object, returns a string in the serialized attributes\n * format prepared for post content.\n *\n * @param {Object} attributes Attributes object.\n *\n * @return {string} Serialized attributes.\n */\nexport function serializeAttributes( attributes ) {\n\treturn (\n\t\tJSON.stringify( attributes )\n\t\t\t// Don't break HTML comments.\n\t\t\t.replace( /--/g, '\\\\u002d\\\\u002d' )\n\n\t\t\t// Don't break non-standard-compliant tools.\n\t\t\t.replace( //g, '\\\\u003e' )\n\t\t\t.replace( /&/g, '\\\\u0026' )\n\n\t\t\t// Bypass server stripslashes behavior which would unescape stringify's\n\t\t\t// escaping of quotation mark.\n\t\t\t//\n\t\t\t// See: https://developer.wordpress.org/reference/functions/wp_kses_stripslashes/\n\t\t\t.replace( /\\\\\"/g, '\\\\u0022' )\n\t);\n}\n\n/**\n * Given a block object, returns the Block's Inner HTML markup.\n *\n * @param {Object} block Block instance.\n *\n * @return {string} HTML.\n */\nexport function getBlockInnerHTML( block ) {\n\t// If block was parsed as invalid or encounters an error while generating\n\t// save content, use original content instead to avoid content loss. If a\n\t// block contains nested content, exempt it from this condition because we\n\t// otherwise have no access to its original content and content loss would\n\t// still occur.\n\tlet saveContent = block.originalContent;\n\tif ( block.isValid || block.innerBlocks.length ) {\n\t\ttry {\n\t\t\tsaveContent = getSaveContent(\n\t\t\t\tblock.name,\n\t\t\t\tblock.attributes,\n\t\t\t\tblock.innerBlocks\n\t\t\t);\n\t\t} catch ( error ) {}\n\t}\n\n\treturn saveContent;\n}\n\n/**\n * Returns the content of a block, including comment delimiters.\n *\n * @param {string} rawBlockName Block name.\n * @param {Object} attributes Block attributes.\n * @param {string} content Block save content.\n *\n * @return {string} Comment-delimited block content.\n */\nexport function getCommentDelimitedContent(\n\trawBlockName,\n\tattributes,\n\tcontent\n) {\n\tconst serializedAttributes = ! isEmpty( attributes )\n\t\t? serializeAttributes( attributes ) + ' '\n\t\t: '';\n\n\t// Strip core blocks of their namespace prefix.\n\tconst blockName = startsWith( rawBlockName, 'core/' )\n\t\t? rawBlockName.slice( 5 )\n\t\t: rawBlockName;\n\n\t// @todo make the `wp:` prefix potentially configurable.\n\n\tif ( ! content ) {\n\t\treturn ``;\n\t}\n\n\treturn (\n\t\t`\\n` +\n\t\tcontent +\n\t\t`\\n`\n\t);\n}\n\n/**\n * Returns the content of a block, including comment delimiters, determining\n * serialized attributes and content form from the current state of the block.\n *\n * @param {Object} block Block instance.\n * @param {WPBlockSerializationOptions} options Serialization options.\n *\n * @return {string} Serialized block.\n */\nexport function serializeBlock( block, { isInnerBlocks = false } = {} ) {\n\tconst blockName = block.name;\n\tconst saveContent = getBlockInnerHTML( block );\n\n\tif (\n\t\tblockName === getUnregisteredTypeHandlerName() ||\n\t\t( ! isInnerBlocks && blockName === getFreeformContentHandlerName() )\n\t) {\n\t\treturn saveContent;\n\t}\n\n\tconst blockType = getBlockType( blockName );\n\tconst saveAttributes = getCommentAttributes( blockType, block.attributes );\n\treturn getCommentDelimitedContent( blockName, saveAttributes, saveContent );\n}\n\nexport function __unstableSerializeAndClean( blocks ) {\n\t// A single unmodified default block is assumed to\n\t// be equivalent to an empty post.\n\tif ( blocks.length === 1 && isUnmodifiedDefaultBlock( blocks[ 0 ] ) ) {\n\t\tblocks = [];\n\t}\n\n\tlet content = serialize( blocks );\n\n\t// For compatibility, treat a post consisting of a\n\t// single freeform block as legacy content and apply\n\t// pre-block-editor removep'd content formatting.\n\tif (\n\t\tblocks.length === 1 &&\n\t\tblocks[ 0 ].name === getFreeformContentHandlerName()\n\t) {\n\t\tcontent = removep( content );\n\t}\n\n\treturn content;\n}\n\n/**\n * Takes a block or set of blocks and returns the serialized post content.\n *\n * @param {Array} blocks Block(s) to serialize.\n * @param {WPBlockSerializationOptions} options Serialization options.\n *\n * @return {string} The post content.\n */\nexport default function serialize( blocks, options ) {\n\treturn castArray( blocks )\n\t\t.map( ( block ) => serializeBlock( block, options ) )\n\t\t.join( '\\n\\n' );\n}\n","/**\n * generated from https://raw.githubusercontent.com/w3c/html/26b5126f96f736f796b9e29718138919dd513744/entities.json\n * do not edit\n */\nexport default {\nAacute:\"Á\",aacute:\"á\",Abreve:\"Ă\",abreve:\"ă\",ac:\"∾\",acd:\"∿\",acE:\"∾̳\",Acirc:\"Â\",acirc:\"â\",acute:\"´\",Acy:\"А\",acy:\"а\",AElig:\"Æ\",aelig:\"æ\",af:\"\\u2061\",Afr:\"𝔄\",afr:\"𝔞\",Agrave:\"À\",agrave:\"à\",alefsym:\"ℵ\",aleph:\"ℵ\",Alpha:\"Α\",alpha:\"α\",Amacr:\"Ā\",amacr:\"ā\",amalg:\"⨿\",amp:\"&\",AMP:\"&\",andand:\"⩕\",And:\"⩓\",and:\"∧\",andd:\"⩜\",andslope:\"⩘\",andv:\"⩚\",ang:\"∠\",ange:\"⦤\",angle:\"∠\",angmsdaa:\"⦨\",angmsdab:\"⦩\",angmsdac:\"⦪\",angmsdad:\"⦫\",angmsdae:\"⦬\",angmsdaf:\"⦭\",angmsdag:\"⦮\",angmsdah:\"⦯\",angmsd:\"∡\",angrt:\"∟\",angrtvb:\"⊾\",angrtvbd:\"⦝\",angsph:\"∢\",angst:\"Å\",angzarr:\"⍼\",Aogon:\"Ą\",aogon:\"ą\",Aopf:\"𝔸\",aopf:\"𝕒\",apacir:\"⩯\",ap:\"≈\",apE:\"⩰\",ape:\"≊\",apid:\"≋\",apos:\"'\",ApplyFunction:\"\\u2061\",approx:\"≈\",approxeq:\"≊\",Aring:\"Å\",aring:\"å\",Ascr:\"𝒜\",ascr:\"𝒶\",Assign:\"≔\",ast:\"*\",asymp:\"≈\",asympeq:\"≍\",Atilde:\"Ã\",atilde:\"ã\",Auml:\"Ä\",auml:\"ä\",awconint:\"∳\",awint:\"⨑\",backcong:\"≌\",backepsilon:\"϶\",backprime:\"‵\",backsim:\"∽\",backsimeq:\"⋍\",Backslash:\"∖\",Barv:\"⫧\",barvee:\"⊽\",barwed:\"⌅\",Barwed:\"⌆\",barwedge:\"⌅\",bbrk:\"⎵\",bbrktbrk:\"⎶\",bcong:\"≌\",Bcy:\"Б\",bcy:\"б\",bdquo:\"„\",becaus:\"∵\",because:\"∵\",Because:\"∵\",bemptyv:\"⦰\",bepsi:\"϶\",bernou:\"ℬ\",Bernoullis:\"ℬ\",Beta:\"Β\",beta:\"β\",beth:\"ℶ\",between:\"≬\",Bfr:\"𝔅\",bfr:\"𝔟\",bigcap:\"⋂\",bigcirc:\"◯\",bigcup:\"⋃\",bigodot:\"⨀\",bigoplus:\"⨁\",bigotimes:\"⨂\",bigsqcup:\"⨆\",bigstar:\"★\",bigtriangledown:\"▽\",bigtriangleup:\"△\",biguplus:\"⨄\",bigvee:\"⋁\",bigwedge:\"⋀\",bkarow:\"⤍\",blacklozenge:\"⧫\",blacksquare:\"▪\",blacktriangle:\"▴\",blacktriangledown:\"▾\",blacktriangleleft:\"◂\",blacktriangleright:\"▸\",blank:\"␣\",blk12:\"▒\",blk14:\"░\",blk34:\"▓\",block:\"█\",bne:\"=⃥\",bnequiv:\"≡⃥\",bNot:\"⫭\",bnot:\"⌐\",Bopf:\"𝔹\",bopf:\"𝕓\",bot:\"⊥\",bottom:\"⊥\",bowtie:\"⋈\",boxbox:\"⧉\",boxdl:\"┐\",boxdL:\"╕\",boxDl:\"╖\",boxDL:\"╗\",boxdr:\"┌\",boxdR:\"╒\",boxDr:\"╓\",boxDR:\"╔\",boxh:\"─\",boxH:\"═\",boxhd:\"┬\",boxHd:\"╤\",boxhD:\"╥\",boxHD:\"╦\",boxhu:\"┴\",boxHu:\"╧\",boxhU:\"╨\",boxHU:\"╩\",boxminus:\"⊟\",boxplus:\"⊞\",boxtimes:\"⊠\",boxul:\"┘\",boxuL:\"╛\",boxUl:\"╜\",boxUL:\"╝\",boxur:\"└\",boxuR:\"╘\",boxUr:\"╙\",boxUR:\"╚\",boxv:\"│\",boxV:\"║\",boxvh:\"┼\",boxvH:\"╪\",boxVh:\"╫\",boxVH:\"╬\",boxvl:\"┤\",boxvL:\"╡\",boxVl:\"╢\",boxVL:\"╣\",boxvr:\"├\",boxvR:\"╞\",boxVr:\"╟\",boxVR:\"╠\",bprime:\"‵\",breve:\"˘\",Breve:\"˘\",brvbar:\"¦\",bscr:\"𝒷\",Bscr:\"ℬ\",bsemi:\"⁏\",bsim:\"∽\",bsime:\"⋍\",bsolb:\"⧅\",bsol:\"\\\\\",bsolhsub:\"⟈\",bull:\"•\",bullet:\"•\",bump:\"≎\",bumpE:\"⪮\",bumpe:\"≏\",Bumpeq:\"≎\",bumpeq:\"≏\",Cacute:\"Ć\",cacute:\"ć\",capand:\"⩄\",capbrcup:\"⩉\",capcap:\"⩋\",cap:\"∩\",Cap:\"⋒\",capcup:\"⩇\",capdot:\"⩀\",CapitalDifferentialD:\"ⅅ\",caps:\"∩︀\",caret:\"⁁\",caron:\"ˇ\",Cayleys:\"ℭ\",ccaps:\"⩍\",Ccaron:\"Č\",ccaron:\"č\",Ccedil:\"Ç\",ccedil:\"ç\",Ccirc:\"Ĉ\",ccirc:\"ĉ\",Cconint:\"∰\",ccups:\"⩌\",ccupssm:\"⩐\",Cdot:\"Ċ\",cdot:\"ċ\",cedil:\"¸\",Cedilla:\"¸\",cemptyv:\"⦲\",cent:\"¢\",centerdot:\"·\",CenterDot:\"·\",cfr:\"𝔠\",Cfr:\"ℭ\",CHcy:\"Ч\",chcy:\"ч\",check:\"✓\",checkmark:\"✓\",Chi:\"Χ\",chi:\"χ\",circ:\"ˆ\",circeq:\"≗\",circlearrowleft:\"↺\",circlearrowright:\"↻\",circledast:\"⊛\",circledcirc:\"⊚\",circleddash:\"⊝\",CircleDot:\"⊙\",circledR:\"®\",circledS:\"Ⓢ\",CircleMinus:\"⊖\",CirclePlus:\"⊕\",CircleTimes:\"⊗\",cir:\"○\",cirE:\"⧃\",cire:\"≗\",cirfnint:\"⨐\",cirmid:\"⫯\",cirscir:\"⧂\",ClockwiseContourIntegral:\"∲\",CloseCurlyDoubleQuote:\"”\",CloseCurlyQuote:\"’\",clubs:\"♣\",clubsuit:\"♣\",colon:\":\",Colon:\"∷\",Colone:\"⩴\",colone:\"≔\",coloneq:\"≔\",comma:\",\",commat:\"@\",comp:\"∁\",compfn:\"∘\",complement:\"∁\",complexes:\"ℂ\",cong:\"≅\",congdot:\"⩭\",Congruent:\"≡\",conint:\"∮\",Conint:\"∯\",ContourIntegral:\"∮\",copf:\"𝕔\",Copf:\"ℂ\",coprod:\"∐\",Coproduct:\"∐\",copy:\"©\",COPY:\"©\",copysr:\"℗\",CounterClockwiseContourIntegral:\"∳\",crarr:\"↵\",cross:\"✗\",Cross:\"⨯\",Cscr:\"𝒞\",cscr:\"𝒸\",csub:\"⫏\",csube:\"⫑\",csup:\"⫐\",csupe:\"⫒\",ctdot:\"⋯\",cudarrl:\"⤸\",cudarrr:\"⤵\",cuepr:\"⋞\",cuesc:\"⋟\",cularr:\"↶\",cularrp:\"⤽\",cupbrcap:\"⩈\",cupcap:\"⩆\",CupCap:\"≍\",cup:\"∪\",Cup:\"⋓\",cupcup:\"⩊\",cupdot:\"⊍\",cupor:\"⩅\",cups:\"∪︀\",curarr:\"↷\",curarrm:\"⤼\",curlyeqprec:\"⋞\",curlyeqsucc:\"⋟\",curlyvee:\"⋎\",curlywedge:\"⋏\",curren:\"¤\",curvearrowleft:\"↶\",curvearrowright:\"↷\",cuvee:\"⋎\",cuwed:\"⋏\",cwconint:\"∲\",cwint:\"∱\",cylcty:\"⌭\",dagger:\"†\",Dagger:\"‡\",daleth:\"ℸ\",darr:\"↓\",Darr:\"↡\",dArr:\"⇓\",dash:\"‐\",Dashv:\"⫤\",dashv:\"⊣\",dbkarow:\"⤏\",dblac:\"˝\",Dcaron:\"Ď\",dcaron:\"ď\",Dcy:\"Д\",dcy:\"д\",ddagger:\"‡\",ddarr:\"⇊\",DD:\"ⅅ\",dd:\"ⅆ\",DDotrahd:\"⤑\",ddotseq:\"⩷\",deg:\"°\",Del:\"∇\",Delta:\"Δ\",delta:\"δ\",demptyv:\"⦱\",dfisht:\"⥿\",Dfr:\"𝔇\",dfr:\"𝔡\",dHar:\"⥥\",dharl:\"⇃\",dharr:\"⇂\",DiacriticalAcute:\"´\",DiacriticalDot:\"˙\",DiacriticalDoubleAcute:\"˝\",DiacriticalGrave:\"`\",DiacriticalTilde:\"˜\",diam:\"⋄\",diamond:\"⋄\",Diamond:\"⋄\",diamondsuit:\"♦\",diams:\"♦\",die:\"¨\",DifferentialD:\"ⅆ\",digamma:\"ϝ\",disin:\"⋲\",div:\"÷\",divide:\"÷\",divideontimes:\"⋇\",divonx:\"⋇\",DJcy:\"Ђ\",djcy:\"ђ\",dlcorn:\"⌞\",dlcrop:\"⌍\",dollar:\"$\",Dopf:\"𝔻\",dopf:\"𝕕\",Dot:\"¨\",dot:\"˙\",DotDot:\"⃜\",doteq:\"≐\",doteqdot:\"≑\",DotEqual:\"≐\",dotminus:\"∸\",dotplus:\"∔\",dotsquare:\"⊡\",doublebarwedge:\"⌆\",DoubleContourIntegral:\"∯\",DoubleDot:\"¨\",DoubleDownArrow:\"⇓\",DoubleLeftArrow:\"⇐\",DoubleLeftRightArrow:\"⇔\",DoubleLeftTee:\"⫤\",DoubleLongLeftArrow:\"⟸\",DoubleLongLeftRightArrow:\"⟺\",DoubleLongRightArrow:\"⟹\",DoubleRightArrow:\"⇒\",DoubleRightTee:\"⊨\",DoubleUpArrow:\"⇑\",DoubleUpDownArrow:\"⇕\",DoubleVerticalBar:\"∥\",DownArrowBar:\"⤓\",downarrow:\"↓\",DownArrow:\"↓\",Downarrow:\"⇓\",DownArrowUpArrow:\"⇵\",DownBreve:\"̑\",downdownarrows:\"⇊\",downharpoonleft:\"⇃\",downharpoonright:\"⇂\",DownLeftRightVector:\"⥐\",DownLeftTeeVector:\"⥞\",DownLeftVectorBar:\"⥖\",DownLeftVector:\"↽\",DownRightTeeVector:\"⥟\",DownRightVectorBar:\"⥗\",DownRightVector:\"⇁\",DownTeeArrow:\"↧\",DownTee:\"⊤\",drbkarow:\"⤐\",drcorn:\"⌟\",drcrop:\"⌌\",Dscr:\"𝒟\",dscr:\"𝒹\",DScy:\"Ѕ\",dscy:\"ѕ\",dsol:\"⧶\",Dstrok:\"Đ\",dstrok:\"đ\",dtdot:\"⋱\",dtri:\"▿\",dtrif:\"▾\",duarr:\"⇵\",duhar:\"⥯\",dwangle:\"⦦\",DZcy:\"Џ\",dzcy:\"џ\",dzigrarr:\"⟿\",Eacute:\"É\",eacute:\"é\",easter:\"⩮\",Ecaron:\"Ě\",ecaron:\"ě\",Ecirc:\"Ê\",ecirc:\"ê\",ecir:\"≖\",ecolon:\"≕\",Ecy:\"Э\",ecy:\"э\",eDDot:\"⩷\",Edot:\"Ė\",edot:\"ė\",eDot:\"≑\",ee:\"ⅇ\",efDot:\"≒\",Efr:\"𝔈\",efr:\"𝔢\",eg:\"⪚\",Egrave:\"È\",egrave:\"è\",egs:\"⪖\",egsdot:\"⪘\",el:\"⪙\",Element:\"∈\",elinters:\"⏧\",ell:\"ℓ\",els:\"⪕\",elsdot:\"⪗\",Emacr:\"Ē\",emacr:\"ē\",empty:\"∅\",emptyset:\"∅\",EmptySmallSquare:\"◻\",emptyv:\"∅\",EmptyVerySmallSquare:\"▫\",emsp13:\" \",emsp14:\" \",emsp:\" \",ENG:\"Ŋ\",eng:\"ŋ\",ensp:\" \",Eogon:\"Ę\",eogon:\"ę\",Eopf:\"𝔼\",eopf:\"𝕖\",epar:\"⋕\",eparsl:\"⧣\",eplus:\"⩱\",epsi:\"ε\",Epsilon:\"Ε\",epsilon:\"ε\",epsiv:\"ϵ\",eqcirc:\"≖\",eqcolon:\"≕\",eqsim:\"≂\",eqslantgtr:\"⪖\",eqslantless:\"⪕\",Equal:\"⩵\",equals:\"=\",EqualTilde:\"≂\",equest:\"≟\",Equilibrium:\"⇌\",equiv:\"≡\",equivDD:\"⩸\",eqvparsl:\"⧥\",erarr:\"⥱\",erDot:\"≓\",escr:\"ℯ\",Escr:\"ℰ\",esdot:\"≐\",Esim:\"⩳\",esim:\"≂\",Eta:\"Η\",eta:\"η\",ETH:\"Ð\",eth:\"ð\",Euml:\"Ë\",euml:\"ë\",euro:\"€\",excl:\"!\",exist:\"∃\",Exists:\"∃\",expectation:\"ℰ\",exponentiale:\"ⅇ\",ExponentialE:\"ⅇ\",fallingdotseq:\"≒\",Fcy:\"Ф\",fcy:\"ф\",female:\"♀\",ffilig:\"ffi\",fflig:\"ff\",ffllig:\"ffl\",Ffr:\"𝔉\",ffr:\"𝔣\",filig:\"fi\",FilledSmallSquare:\"◼\",FilledVerySmallSquare:\"▪\",fjlig:\"fj\",flat:\"♭\",fllig:\"fl\",fltns:\"▱\",fnof:\"ƒ\",Fopf:\"𝔽\",fopf:\"𝕗\",forall:\"∀\",ForAll:\"∀\",fork:\"⋔\",forkv:\"⫙\",Fouriertrf:\"ℱ\",fpartint:\"⨍\",frac12:\"½\",frac13:\"⅓\",frac14:\"¼\",frac15:\"⅕\",frac16:\"⅙\",frac18:\"⅛\",frac23:\"⅔\",frac25:\"⅖\",frac34:\"¾\",frac35:\"⅗\",frac38:\"⅜\",frac45:\"⅘\",frac56:\"⅚\",frac58:\"⅝\",frac78:\"⅞\",frasl:\"⁄\",frown:\"⌢\",fscr:\"𝒻\",Fscr:\"ℱ\",gacute:\"ǵ\",Gamma:\"Γ\",gamma:\"γ\",Gammad:\"Ϝ\",gammad:\"ϝ\",gap:\"⪆\",Gbreve:\"Ğ\",gbreve:\"ğ\",Gcedil:\"Ģ\",Gcirc:\"Ĝ\",gcirc:\"ĝ\",Gcy:\"Г\",gcy:\"г\",Gdot:\"Ġ\",gdot:\"ġ\",ge:\"≥\",gE:\"≧\",gEl:\"⪌\",gel:\"⋛\",geq:\"≥\",geqq:\"≧\",geqslant:\"⩾\",gescc:\"⪩\",ges:\"⩾\",gesdot:\"⪀\",gesdoto:\"⪂\",gesdotol:\"⪄\",gesl:\"⋛︀\",gesles:\"⪔\",Gfr:\"𝔊\",gfr:\"𝔤\",gg:\"≫\",Gg:\"⋙\",ggg:\"⋙\",gimel:\"ℷ\",GJcy:\"Ѓ\",gjcy:\"ѓ\",gla:\"⪥\",gl:\"≷\",glE:\"⪒\",glj:\"⪤\",gnap:\"⪊\",gnapprox:\"⪊\",gne:\"⪈\",gnE:\"≩\",gneq:\"⪈\",gneqq:\"≩\",gnsim:\"⋧\",Gopf:\"𝔾\",gopf:\"𝕘\",grave:\"`\",GreaterEqual:\"≥\",GreaterEqualLess:\"⋛\",GreaterFullEqual:\"≧\",GreaterGreater:\"⪢\",GreaterLess:\"≷\",GreaterSlantEqual:\"⩾\",GreaterTilde:\"≳\",Gscr:\"𝒢\",gscr:\"ℊ\",gsim:\"≳\",gsime:\"⪎\",gsiml:\"⪐\",gtcc:\"⪧\",gtcir:\"⩺\",gt:\">\",GT:\">\",Gt:\"≫\",gtdot:\"⋗\",gtlPar:\"⦕\",gtquest:\"⩼\",gtrapprox:\"⪆\",gtrarr:\"⥸\",gtrdot:\"⋗\",gtreqless:\"⋛\",gtreqqless:\"⪌\",gtrless:\"≷\",gtrsim:\"≳\",gvertneqq:\"≩︀\",gvnE:\"≩︀\",Hacek:\"ˇ\",hairsp:\" \",half:\"½\",hamilt:\"ℋ\",HARDcy:\"Ъ\",hardcy:\"ъ\",harrcir:\"⥈\",harr:\"↔\",hArr:\"⇔\",harrw:\"↭\",Hat:\"^\",hbar:\"ℏ\",Hcirc:\"Ĥ\",hcirc:\"ĥ\",hearts:\"♥\",heartsuit:\"♥\",hellip:\"…\",hercon:\"⊹\",hfr:\"𝔥\",Hfr:\"ℌ\",HilbertSpace:\"ℋ\",hksearow:\"⤥\",hkswarow:\"⤦\",hoarr:\"⇿\",homtht:\"∻\",hookleftarrow:\"↩\",hookrightarrow:\"↪\",hopf:\"𝕙\",Hopf:\"ℍ\",horbar:\"―\",HorizontalLine:\"─\",hscr:\"𝒽\",Hscr:\"ℋ\",hslash:\"ℏ\",Hstrok:\"Ħ\",hstrok:\"ħ\",HumpDownHump:\"≎\",HumpEqual:\"≏\",hybull:\"⁃\",hyphen:\"‐\",Iacute:\"Í\",iacute:\"í\",ic:\"\\u2063\",Icirc:\"Î\",icirc:\"î\",Icy:\"И\",icy:\"и\",Idot:\"İ\",IEcy:\"Е\",iecy:\"е\",iexcl:\"¡\",iff:\"⇔\",ifr:\"𝔦\",Ifr:\"ℑ\",Igrave:\"Ì\",igrave:\"ì\",ii:\"ⅈ\",iiiint:\"⨌\",iiint:\"∭\",iinfin:\"⧜\",iiota:\"℩\",IJlig:\"IJ\",ijlig:\"ij\",Imacr:\"Ī\",imacr:\"ī\",image:\"ℑ\",ImaginaryI:\"ⅈ\",imagline:\"ℐ\",imagpart:\"ℑ\",imath:\"ı\",Im:\"ℑ\",imof:\"⊷\",imped:\"Ƶ\",Implies:\"⇒\",incare:\"℅\",in:\"∈\",infin:\"∞\",infintie:\"⧝\",inodot:\"ı\",intcal:\"⊺\",int:\"∫\",Int:\"∬\",integers:\"ℤ\",Integral:\"∫\",intercal:\"⊺\",Intersection:\"⋂\",intlarhk:\"⨗\",intprod:\"⨼\",InvisibleComma:\"\\u2063\",InvisibleTimes:\"\\u2062\",IOcy:\"Ё\",iocy:\"ё\",Iogon:\"Į\",iogon:\"į\",Iopf:\"𝕀\",iopf:\"𝕚\",Iota:\"Ι\",iota:\"ι\",iprod:\"⨼\",iquest:\"¿\",iscr:\"𝒾\",Iscr:\"ℐ\",isin:\"∈\",isindot:\"⋵\",isinE:\"⋹\",isins:\"⋴\",isinsv:\"⋳\",isinv:\"∈\",it:\"\\u2062\",Itilde:\"Ĩ\",itilde:\"ĩ\",Iukcy:\"І\",iukcy:\"і\",Iuml:\"Ï\",iuml:\"ï\",Jcirc:\"Ĵ\",jcirc:\"ĵ\",Jcy:\"Й\",jcy:\"й\",Jfr:\"𝔍\",jfr:\"𝔧\",jmath:\"ȷ\",Jopf:\"𝕁\",jopf:\"𝕛\",Jscr:\"𝒥\",jscr:\"𝒿\",Jsercy:\"Ј\",jsercy:\"ј\",Jukcy:\"Є\",jukcy:\"є\",Kappa:\"Κ\",kappa:\"κ\",kappav:\"ϰ\",Kcedil:\"Ķ\",kcedil:\"ķ\",Kcy:\"К\",kcy:\"к\",Kfr:\"𝔎\",kfr:\"𝔨\",kgreen:\"ĸ\",KHcy:\"Х\",khcy:\"х\",KJcy:\"Ќ\",kjcy:\"ќ\",Kopf:\"𝕂\",kopf:\"𝕜\",Kscr:\"𝒦\",kscr:\"𝓀\",lAarr:\"⇚\",Lacute:\"Ĺ\",lacute:\"ĺ\",laemptyv:\"⦴\",lagran:\"ℒ\",Lambda:\"Λ\",lambda:\"λ\",lang:\"⟨\",Lang:\"⟪\",langd:\"⦑\",langle:\"⟨\",lap:\"⪅\",Laplacetrf:\"ℒ\",laquo:\"«\",larrb:\"⇤\",larrbfs:\"⤟\",larr:\"←\",Larr:\"↞\",lArr:\"⇐\",larrfs:\"⤝\",larrhk:\"↩\",larrlp:\"↫\",larrpl:\"⤹\",larrsim:\"⥳\",larrtl:\"↢\",latail:\"⤙\",lAtail:\"⤛\",lat:\"⪫\",late:\"⪭\",lates:\"⪭︀\",lbarr:\"⤌\",lBarr:\"⤎\",lbbrk:\"❲\",lbrace:\"{\",lbrack:\"[\",lbrke:\"⦋\",lbrksld:\"⦏\",lbrkslu:\"⦍\",Lcaron:\"Ľ\",lcaron:\"ľ\",Lcedil:\"Ļ\",lcedil:\"ļ\",lceil:\"⌈\",lcub:\"{\",Lcy:\"Л\",lcy:\"л\",ldca:\"⤶\",ldquo:\"“\",ldquor:\"„\",ldrdhar:\"⥧\",ldrushar:\"⥋\",ldsh:\"↲\",le:\"≤\",lE:\"≦\",LeftAngleBracket:\"⟨\",LeftArrowBar:\"⇤\",leftarrow:\"←\",LeftArrow:\"←\",Leftarrow:\"⇐\",LeftArrowRightArrow:\"⇆\",leftarrowtail:\"↢\",LeftCeiling:\"⌈\",LeftDoubleBracket:\"⟦\",LeftDownTeeVector:\"⥡\",LeftDownVectorBar:\"⥙\",LeftDownVector:\"⇃\",LeftFloor:\"⌊\",leftharpoondown:\"↽\",leftharpoonup:\"↼\",leftleftarrows:\"⇇\",leftrightarrow:\"↔\",LeftRightArrow:\"↔\",Leftrightarrow:\"⇔\",leftrightarrows:\"⇆\",leftrightharpoons:\"⇋\",leftrightsquigarrow:\"↭\",LeftRightVector:\"⥎\",LeftTeeArrow:\"↤\",LeftTee:\"⊣\",LeftTeeVector:\"⥚\",leftthreetimes:\"⋋\",LeftTriangleBar:\"⧏\",LeftTriangle:\"⊲\",LeftTriangleEqual:\"⊴\",LeftUpDownVector:\"⥑\",LeftUpTeeVector:\"⥠\",LeftUpVectorBar:\"⥘\",LeftUpVector:\"↿\",LeftVectorBar:\"⥒\",LeftVector:\"↼\",lEg:\"⪋\",leg:\"⋚\",leq:\"≤\",leqq:\"≦\",leqslant:\"⩽\",lescc:\"⪨\",les:\"⩽\",lesdot:\"⩿\",lesdoto:\"⪁\",lesdotor:\"⪃\",lesg:\"⋚︀\",lesges:\"⪓\",lessapprox:\"⪅\",lessdot:\"⋖\",lesseqgtr:\"⋚\",lesseqqgtr:\"⪋\",LessEqualGreater:\"⋚\",LessFullEqual:\"≦\",LessGreater:\"≶\",lessgtr:\"≶\",LessLess:\"⪡\",lesssim:\"≲\",LessSlantEqual:\"⩽\",LessTilde:\"≲\",lfisht:\"⥼\",lfloor:\"⌊\",Lfr:\"𝔏\",lfr:\"𝔩\",lg:\"≶\",lgE:\"⪑\",lHar:\"⥢\",lhard:\"↽\",lharu:\"↼\",lharul:\"⥪\",lhblk:\"▄\",LJcy:\"Љ\",ljcy:\"љ\",llarr:\"⇇\",ll:\"≪\",Ll:\"⋘\",llcorner:\"⌞\",Lleftarrow:\"⇚\",llhard:\"⥫\",lltri:\"◺\",Lmidot:\"Ŀ\",lmidot:\"ŀ\",lmoustache:\"⎰\",lmoust:\"⎰\",lnap:\"⪉\",lnapprox:\"⪉\",lne:\"⪇\",lnE:\"≨\",lneq:\"⪇\",lneqq:\"≨\",lnsim:\"⋦\",loang:\"⟬\",loarr:\"⇽\",lobrk:\"⟦\",longleftarrow:\"⟵\",LongLeftArrow:\"⟵\",Longleftarrow:\"⟸\",longleftrightarrow:\"⟷\",LongLeftRightArrow:\"⟷\",Longleftrightarrow:\"⟺\",longmapsto:\"⟼\",longrightarrow:\"⟶\",LongRightArrow:\"⟶\",Longrightarrow:\"⟹\",looparrowleft:\"↫\",looparrowright:\"↬\",lopar:\"⦅\",Lopf:\"𝕃\",lopf:\"𝕝\",loplus:\"⨭\",lotimes:\"⨴\",lowast:\"∗\",lowbar:\"_\",LowerLeftArrow:\"↙\",LowerRightArrow:\"↘\",loz:\"◊\",lozenge:\"◊\",lozf:\"⧫\",lpar:\"(\",lparlt:\"⦓\",lrarr:\"⇆\",lrcorner:\"⌟\",lrhar:\"⇋\",lrhard:\"⥭\",lrm:\"\\u200e\",lrtri:\"⊿\",lsaquo:\"‹\",lscr:\"𝓁\",Lscr:\"ℒ\",lsh:\"↰\",Lsh:\"↰\",lsim:\"≲\",lsime:\"⪍\",lsimg:\"⪏\",lsqb:\"[\",lsquo:\"‘\",lsquor:\"‚\",Lstrok:\"Ł\",lstrok:\"ł\",ltcc:\"⪦\",ltcir:\"⩹\",lt:\"<\",LT:\"<\",Lt:\"≪\",ltdot:\"⋖\",lthree:\"⋋\",ltimes:\"⋉\",ltlarr:\"⥶\",ltquest:\"⩻\",ltri:\"◃\",ltrie:\"⊴\",ltrif:\"◂\",ltrPar:\"⦖\",lurdshar:\"⥊\",luruhar:\"⥦\",lvertneqq:\"≨︀\",lvnE:\"≨︀\",macr:\"¯\",male:\"♂\",malt:\"✠\",maltese:\"✠\",Map:\"⤅\",map:\"↦\",mapsto:\"↦\",mapstodown:\"↧\",mapstoleft:\"↤\",mapstoup:\"↥\",marker:\"▮\",mcomma:\"⨩\",Mcy:\"М\",mcy:\"м\",mdash:\"—\",mDDot:\"∺\",measuredangle:\"∡\",MediumSpace:\" \",Mellintrf:\"ℳ\",Mfr:\"𝔐\",mfr:\"𝔪\",mho:\"℧\",micro:\"µ\",midast:\"*\",midcir:\"⫰\",mid:\"∣\",middot:\"·\",minusb:\"⊟\",minus:\"−\",minusd:\"∸\",minusdu:\"⨪\",MinusPlus:\"∓\",mlcp:\"⫛\",mldr:\"…\",mnplus:\"∓\",models:\"⊧\",Mopf:\"𝕄\",mopf:\"𝕞\",mp:\"∓\",mscr:\"𝓂\",Mscr:\"ℳ\",mstpos:\"∾\",Mu:\"Μ\",mu:\"μ\",multimap:\"⊸\",mumap:\"⊸\",nabla:\"∇\",Nacute:\"Ń\",nacute:\"ń\",nang:\"∠⃒\",nap:\"≉\",napE:\"⩰̸\",napid:\"≋̸\",napos:\"ʼn\",napprox:\"≉\",natural:\"♮\",naturals:\"ℕ\",natur:\"♮\",nbsp:\" \",nbump:\"≎̸\",nbumpe:\"≏̸\",ncap:\"⩃\",Ncaron:\"Ň\",ncaron:\"ň\",Ncedil:\"Ņ\",ncedil:\"ņ\",ncong:\"≇\",ncongdot:\"⩭̸\",ncup:\"⩂\",Ncy:\"Н\",ncy:\"н\",ndash:\"–\",nearhk:\"⤤\",nearr:\"↗\",neArr:\"⇗\",nearrow:\"↗\",ne:\"≠\",nedot:\"≐̸\",NegativeMediumSpace:\"​\",NegativeThickSpace:\"​\",NegativeThinSpace:\"​\",NegativeVeryThinSpace:\"​\",nequiv:\"≢\",nesear:\"⤨\",nesim:\"≂̸\",NestedGreaterGreater:\"≫\",NestedLessLess:\"≪\",NewLine:\"\\u000a\",nexist:\"∄\",nexists:\"∄\",Nfr:\"𝔑\",nfr:\"𝔫\",ngE:\"≧̸\",nge:\"≱\",ngeq:\"≱\",ngeqq:\"≧̸\",ngeqslant:\"⩾̸\",nges:\"⩾̸\",nGg:\"⋙̸\",ngsim:\"≵\",nGt:\"≫⃒\",ngt:\"≯\",ngtr:\"≯\",nGtv:\"≫̸\",nharr:\"↮\",nhArr:\"⇎\",nhpar:\"⫲\",ni:\"∋\",nis:\"⋼\",nisd:\"⋺\",niv:\"∋\",NJcy:\"Њ\",njcy:\"њ\",nlarr:\"↚\",nlArr:\"⇍\",nldr:\"‥\",nlE:\"≦̸\",nle:\"≰\",nleftarrow:\"↚\",nLeftarrow:\"⇍\",nleftrightarrow:\"↮\",nLeftrightarrow:\"⇎\",nleq:\"≰\",nleqq:\"≦̸\",nleqslant:\"⩽̸\",nles:\"⩽̸\",nless:\"≮\",nLl:\"⋘̸\",nlsim:\"≴\",nLt:\"≪⃒\",nlt:\"≮\",nltri:\"⋪\",nltrie:\"⋬\",nLtv:\"≪̸\",nmid:\"∤\",NoBreak:\"\\u2060\",NonBreakingSpace:\" \",nopf:\"𝕟\",Nopf:\"ℕ\",Not:\"⫬\",not:\"¬\",NotCongruent:\"≢\",NotCupCap:\"≭\",NotDoubleVerticalBar:\"∦\",NotElement:\"∉\",NotEqual:\"≠\",NotEqualTilde:\"≂̸\",NotExists:\"∄\",NotGreater:\"≯\",NotGreaterEqual:\"≱\",NotGreaterFullEqual:\"≧̸\",NotGreaterGreater:\"≫̸\",NotGreaterLess:\"≹\",NotGreaterSlantEqual:\"⩾̸\",NotGreaterTilde:\"≵\",NotHumpDownHump:\"≎̸\",NotHumpEqual:\"≏̸\",notin:\"∉\",notindot:\"⋵̸\",notinE:\"⋹̸\",notinva:\"∉\",notinvb:\"⋷\",notinvc:\"⋶\",NotLeftTriangleBar:\"⧏̸\",NotLeftTriangle:\"⋪\",NotLeftTriangleEqual:\"⋬\",NotLess:\"≮\",NotLessEqual:\"≰\",NotLessGreater:\"≸\",NotLessLess:\"≪̸\",NotLessSlantEqual:\"⩽̸\",NotLessTilde:\"≴\",NotNestedGreaterGreater:\"⪢̸\",NotNestedLessLess:\"⪡̸\",notni:\"∌\",notniva:\"∌\",notnivb:\"⋾\",notnivc:\"⋽\",NotPrecedes:\"⊀\",NotPrecedesEqual:\"⪯̸\",NotPrecedesSlantEqual:\"⋠\",NotReverseElement:\"∌\",NotRightTriangleBar:\"⧐̸\",NotRightTriangle:\"⋫\",NotRightTriangleEqual:\"⋭\",NotSquareSubset:\"⊏̸\",NotSquareSubsetEqual:\"⋢\",NotSquareSuperset:\"⊐̸\",NotSquareSupersetEqual:\"⋣\",NotSubset:\"⊂⃒\",NotSubsetEqual:\"⊈\",NotSucceeds:\"⊁\",NotSucceedsEqual:\"⪰̸\",NotSucceedsSlantEqual:\"⋡\",NotSucceedsTilde:\"≿̸\",NotSuperset:\"⊃⃒\",NotSupersetEqual:\"⊉\",NotTilde:\"≁\",NotTildeEqual:\"≄\",NotTildeFullEqual:\"≇\",NotTildeTilde:\"≉\",NotVerticalBar:\"∤\",nparallel:\"∦\",npar:\"∦\",nparsl:\"⫽⃥\",npart:\"∂̸\",npolint:\"⨔\",npr:\"⊀\",nprcue:\"⋠\",nprec:\"⊀\",npreceq:\"⪯̸\",npre:\"⪯̸\",nrarrc:\"⤳̸\",nrarr:\"↛\",nrArr:\"⇏\",nrarrw:\"↝̸\",nrightarrow:\"↛\",nRightarrow:\"⇏\",nrtri:\"⋫\",nrtrie:\"⋭\",nsc:\"⊁\",nsccue:\"⋡\",nsce:\"⪰̸\",Nscr:\"𝒩\",nscr:\"𝓃\",nshortmid:\"∤\",nshortparallel:\"∦\",nsim:\"≁\",nsime:\"≄\",nsimeq:\"≄\",nsmid:\"∤\",nspar:\"∦\",nsqsube:\"⋢\",nsqsupe:\"⋣\",nsub:\"⊄\",nsubE:\"⫅̸\",nsube:\"⊈\",nsubset:\"⊂⃒\",nsubseteq:\"⊈\",nsubseteqq:\"⫅̸\",nsucc:\"⊁\",nsucceq:\"⪰̸\",nsup:\"⊅\",nsupE:\"⫆̸\",nsupe:\"⊉\",nsupset:\"⊃⃒\",nsupseteq:\"⊉\",nsupseteqq:\"⫆̸\",ntgl:\"≹\",Ntilde:\"Ñ\",ntilde:\"ñ\",ntlg:\"≸\",ntriangleleft:\"⋪\",ntrianglelefteq:\"⋬\",ntriangleright:\"⋫\",ntrianglerighteq:\"⋭\",Nu:\"Ν\",nu:\"ν\",num:\"#\",numero:\"№\",numsp:\" \",nvap:\"≍⃒\",nvdash:\"⊬\",nvDash:\"⊭\",nVdash:\"⊮\",nVDash:\"⊯\",nvge:\"≥⃒\",nvgt:\">⃒\",nvHarr:\"⤄\",nvinfin:\"⧞\",nvlArr:\"⤂\",nvle:\"≤⃒\",nvlt:\"<⃒\",nvltrie:\"⊴⃒\",nvrArr:\"⤃\",nvrtrie:\"⊵⃒\",nvsim:\"∼⃒\",nwarhk:\"⤣\",nwarr:\"↖\",nwArr:\"⇖\",nwarrow:\"↖\",nwnear:\"⤧\",Oacute:\"Ó\",oacute:\"ó\",oast:\"⊛\",Ocirc:\"Ô\",ocirc:\"ô\",ocir:\"⊚\",Ocy:\"О\",ocy:\"о\",odash:\"⊝\",Odblac:\"Ő\",odblac:\"ő\",odiv:\"⨸\",odot:\"⊙\",odsold:\"⦼\",OElig:\"Œ\",oelig:\"œ\",ofcir:\"⦿\",Ofr:\"𝔒\",ofr:\"𝔬\",ogon:\"˛\",Ograve:\"Ò\",ograve:\"ò\",ogt:\"⧁\",ohbar:\"⦵\",ohm:\"Ω\",oint:\"∮\",olarr:\"↺\",olcir:\"⦾\",olcross:\"⦻\",oline:\"‾\",olt:\"⧀\",Omacr:\"Ō\",omacr:\"ō\",Omega:\"Ω\",omega:\"ω\",Omicron:\"Ο\",omicron:\"ο\",omid:\"⦶\",ominus:\"⊖\",Oopf:\"𝕆\",oopf:\"𝕠\",opar:\"⦷\",OpenCurlyDoubleQuote:\"“\",OpenCurlyQuote:\"‘\",operp:\"⦹\",oplus:\"⊕\",orarr:\"↻\",Or:\"⩔\",or:\"∨\",ord:\"⩝\",order:\"ℴ\",orderof:\"ℴ\",ordf:\"ª\",ordm:\"º\",origof:\"⊶\",oror:\"⩖\",orslope:\"⩗\",orv:\"⩛\",oS:\"Ⓢ\",Oscr:\"𝒪\",oscr:\"ℴ\",Oslash:\"Ø\",oslash:\"ø\",osol:\"⊘\",Otilde:\"Õ\",otilde:\"õ\",otimesas:\"⨶\",Otimes:\"⨷\",otimes:\"⊗\",Ouml:\"Ö\",ouml:\"ö\",ovbar:\"⌽\",OverBar:\"‾\",OverBrace:\"⏞\",OverBracket:\"⎴\",OverParenthesis:\"⏜\",para:\"¶\",parallel:\"∥\",par:\"∥\",parsim:\"⫳\",parsl:\"⫽\",part:\"∂\",PartialD:\"∂\",Pcy:\"П\",pcy:\"п\",percnt:\"%\",period:\".\",permil:\"‰\",perp:\"⊥\",pertenk:\"‱\",Pfr:\"𝔓\",pfr:\"𝔭\",Phi:\"Φ\",phi:\"φ\",phiv:\"ϕ\",phmmat:\"ℳ\",phone:\"☎\",Pi:\"Π\",pi:\"π\",pitchfork:\"⋔\",piv:\"ϖ\",planck:\"ℏ\",planckh:\"ℎ\",plankv:\"ℏ\",plusacir:\"⨣\",plusb:\"⊞\",pluscir:\"⨢\",plus:\"+\",plusdo:\"∔\",plusdu:\"⨥\",pluse:\"⩲\",PlusMinus:\"±\",plusmn:\"±\",plussim:\"⨦\",plustwo:\"⨧\",pm:\"±\",Poincareplane:\"ℌ\",pointint:\"⨕\",popf:\"𝕡\",Popf:\"ℙ\",pound:\"£\",prap:\"⪷\",Pr:\"⪻\",pr:\"≺\",prcue:\"≼\",precapprox:\"⪷\",prec:\"≺\",preccurlyeq:\"≼\",Precedes:\"≺\",PrecedesEqual:\"⪯\",PrecedesSlantEqual:\"≼\",PrecedesTilde:\"≾\",preceq:\"⪯\",precnapprox:\"⪹\",precneqq:\"⪵\",precnsim:\"⋨\",pre:\"⪯\",prE:\"⪳\",precsim:\"≾\",prime:\"′\",Prime:\"″\",primes:\"ℙ\",prnap:\"⪹\",prnE:\"⪵\",prnsim:\"⋨\",prod:\"∏\",Product:\"∏\",profalar:\"⌮\",profline:\"⌒\",profsurf:\"⌓\",prop:\"∝\",Proportional:\"∝\",Proportion:\"∷\",propto:\"∝\",prsim:\"≾\",prurel:\"⊰\",Pscr:\"𝒫\",pscr:\"𝓅\",Psi:\"Ψ\",psi:\"ψ\",puncsp:\" \",Qfr:\"𝔔\",qfr:\"𝔮\",qint:\"⨌\",qopf:\"𝕢\",Qopf:\"ℚ\",qprime:\"⁗\",Qscr:\"𝒬\",qscr:\"𝓆\",quaternions:\"ℍ\",quatint:\"⨖\",quest:\"?\",questeq:\"≟\",quot:\"\\\"\",QUOT:\"\\\"\",rAarr:\"⇛\",race:\"∽̱\",Racute:\"Ŕ\",racute:\"ŕ\",radic:\"√\",raemptyv:\"⦳\",rang:\"⟩\",Rang:\"⟫\",rangd:\"⦒\",range:\"⦥\",rangle:\"⟩\",raquo:\"»\",rarrap:\"⥵\",rarrb:\"⇥\",rarrbfs:\"⤠\",rarrc:\"⤳\",rarr:\"→\",Rarr:\"↠\",rArr:\"⇒\",rarrfs:\"⤞\",rarrhk:\"↪\",rarrlp:\"↬\",rarrpl:\"⥅\",rarrsim:\"⥴\",Rarrtl:\"⤖\",rarrtl:\"↣\",rarrw:\"↝\",ratail:\"⤚\",rAtail:\"⤜\",ratio:\"∶\",rationals:\"ℚ\",rbarr:\"⤍\",rBarr:\"⤏\",RBarr:\"⤐\",rbbrk:\"❳\",rbrace:\"}\",rbrack:\"]\",rbrke:\"⦌\",rbrksld:\"⦎\",rbrkslu:\"⦐\",Rcaron:\"Ř\",rcaron:\"ř\",Rcedil:\"Ŗ\",rcedil:\"ŗ\",rceil:\"⌉\",rcub:\"}\",Rcy:\"Р\",rcy:\"р\",rdca:\"⤷\",rdldhar:\"⥩\",rdquo:\"”\",rdquor:\"”\",rdsh:\"↳\",real:\"ℜ\",realine:\"ℛ\",realpart:\"ℜ\",reals:\"ℝ\",Re:\"ℜ\",rect:\"▭\",reg:\"®\",REG:\"®\",ReverseElement:\"∋\",ReverseEquilibrium:\"⇋\",ReverseUpEquilibrium:\"⥯\",rfisht:\"⥽\",rfloor:\"⌋\",rfr:\"𝔯\",Rfr:\"ℜ\",rHar:\"⥤\",rhard:\"⇁\",rharu:\"⇀\",rharul:\"⥬\",Rho:\"Ρ\",rho:\"ρ\",rhov:\"ϱ\",RightAngleBracket:\"⟩\",RightArrowBar:\"⇥\",rightarrow:\"→\",RightArrow:\"→\",Rightarrow:\"⇒\",RightArrowLeftArrow:\"⇄\",rightarrowtail:\"↣\",RightCeiling:\"⌉\",RightDoubleBracket:\"⟧\",RightDownTeeVector:\"⥝\",RightDownVectorBar:\"⥕\",RightDownVector:\"⇂\",RightFloor:\"⌋\",rightharpoondown:\"⇁\",rightharpoonup:\"⇀\",rightleftarrows:\"⇄\",rightleftharpoons:\"⇌\",rightrightarrows:\"⇉\",rightsquigarrow:\"↝\",RightTeeArrow:\"↦\",RightTee:\"⊢\",RightTeeVector:\"⥛\",rightthreetimes:\"⋌\",RightTriangleBar:\"⧐\",RightTriangle:\"⊳\",RightTriangleEqual:\"⊵\",RightUpDownVector:\"⥏\",RightUpTeeVector:\"⥜\",RightUpVectorBar:\"⥔\",RightUpVector:\"↾\",RightVectorBar:\"⥓\",RightVector:\"⇀\",ring:\"˚\",risingdotseq:\"≓\",rlarr:\"⇄\",rlhar:\"⇌\",rlm:\"\\u200f\",rmoustache:\"⎱\",rmoust:\"⎱\",rnmid:\"⫮\",roang:\"⟭\",roarr:\"⇾\",robrk:\"⟧\",ropar:\"⦆\",ropf:\"𝕣\",Ropf:\"ℝ\",roplus:\"⨮\",rotimes:\"⨵\",RoundImplies:\"⥰\",rpar:\")\",rpargt:\"⦔\",rppolint:\"⨒\",rrarr:\"⇉\",Rrightarrow:\"⇛\",rsaquo:\"›\",rscr:\"𝓇\",Rscr:\"ℛ\",rsh:\"↱\",Rsh:\"↱\",rsqb:\"]\",rsquo:\"’\",rsquor:\"’\",rthree:\"⋌\",rtimes:\"⋊\",rtri:\"▹\",rtrie:\"⊵\",rtrif:\"▸\",rtriltri:\"⧎\",RuleDelayed:\"⧴\",ruluhar:\"⥨\",rx:\"℞\",Sacute:\"Ś\",sacute:\"ś\",sbquo:\"‚\",scap:\"⪸\",Scaron:\"Š\",scaron:\"š\",Sc:\"⪼\",sc:\"≻\",sccue:\"≽\",sce:\"⪰\",scE:\"⪴\",Scedil:\"Ş\",scedil:\"ş\",Scirc:\"Ŝ\",scirc:\"ŝ\",scnap:\"⪺\",scnE:\"⪶\",scnsim:\"⋩\",scpolint:\"⨓\",scsim:\"≿\",Scy:\"С\",scy:\"с\",sdotb:\"⊡\",sdot:\"⋅\",sdote:\"⩦\",searhk:\"⤥\",searr:\"↘\",seArr:\"⇘\",searrow:\"↘\",sect:\"§\",semi:\";\",seswar:\"⤩\",setminus:\"∖\",setmn:\"∖\",sext:\"✶\",Sfr:\"𝔖\",sfr:\"𝔰\",sfrown:\"⌢\",sharp:\"♯\",SHCHcy:\"Щ\",shchcy:\"щ\",SHcy:\"Ш\",shcy:\"ш\",ShortDownArrow:\"↓\",ShortLeftArrow:\"←\",shortmid:\"∣\",shortparallel:\"∥\",ShortRightArrow:\"→\",ShortUpArrow:\"↑\",shy:\"\\u00ad\",Sigma:\"Σ\",sigma:\"σ\",sigmaf:\"ς\",sigmav:\"ς\",sim:\"∼\",simdot:\"⩪\",sime:\"≃\",simeq:\"≃\",simg:\"⪞\",simgE:\"⪠\",siml:\"⪝\",simlE:\"⪟\",simne:\"≆\",simplus:\"⨤\",simrarr:\"⥲\",slarr:\"←\",SmallCircle:\"∘\",smallsetminus:\"∖\",smashp:\"⨳\",smeparsl:\"⧤\",smid:\"∣\",smile:\"⌣\",smt:\"⪪\",smte:\"⪬\",smtes:\"⪬︀\",SOFTcy:\"Ь\",softcy:\"ь\",solbar:\"⌿\",solb:\"⧄\",sol:\"/\",Sopf:\"𝕊\",sopf:\"𝕤\",spades:\"♠\",spadesuit:\"♠\",spar:\"∥\",sqcap:\"⊓\",sqcaps:\"⊓︀\",sqcup:\"⊔\",sqcups:\"⊔︀\",Sqrt:\"√\",sqsub:\"⊏\",sqsube:\"⊑\",sqsubset:\"⊏\",sqsubseteq:\"⊑\",sqsup:\"⊐\",sqsupe:\"⊒\",sqsupset:\"⊐\",sqsupseteq:\"⊒\",square:\"□\",Square:\"□\",SquareIntersection:\"⊓\",SquareSubset:\"⊏\",SquareSubsetEqual:\"⊑\",SquareSuperset:\"⊐\",SquareSupersetEqual:\"⊒\",SquareUnion:\"⊔\",squarf:\"▪\",squ:\"□\",squf:\"▪\",srarr:\"→\",Sscr:\"𝒮\",sscr:\"𝓈\",ssetmn:\"∖\",ssmile:\"⌣\",sstarf:\"⋆\",Star:\"⋆\",star:\"☆\",starf:\"★\",straightepsilon:\"ϵ\",straightphi:\"ϕ\",strns:\"¯\",sub:\"⊂\",Sub:\"⋐\",subdot:\"⪽\",subE:\"⫅\",sube:\"⊆\",subedot:\"⫃\",submult:\"⫁\",subnE:\"⫋\",subne:\"⊊\",subplus:\"⪿\",subrarr:\"⥹\",subset:\"⊂\",Subset:\"⋐\",subseteq:\"⊆\",subseteqq:\"⫅\",SubsetEqual:\"⊆\",subsetneq:\"⊊\",subsetneqq:\"⫋\",subsim:\"⫇\",subsub:\"⫕\",subsup:\"⫓\",succapprox:\"⪸\",succ:\"≻\",succcurlyeq:\"≽\",Succeeds:\"≻\",SucceedsEqual:\"⪰\",SucceedsSlantEqual:\"≽\",SucceedsTilde:\"≿\",succeq:\"⪰\",succnapprox:\"⪺\",succneqq:\"⪶\",succnsim:\"⋩\",succsim:\"≿\",SuchThat:\"∋\",sum:\"∑\",Sum:\"∑\",sung:\"♪\",sup1:\"¹\",sup2:\"²\",sup3:\"³\",sup:\"⊃\",Sup:\"⋑\",supdot:\"⪾\",supdsub:\"⫘\",supE:\"⫆\",supe:\"⊇\",supedot:\"⫄\",Superset:\"⊃\",SupersetEqual:\"⊇\",suphsol:\"⟉\",suphsub:\"⫗\",suplarr:\"⥻\",supmult:\"⫂\",supnE:\"⫌\",supne:\"⊋\",supplus:\"⫀\",supset:\"⊃\",Supset:\"⋑\",supseteq:\"⊇\",supseteqq:\"⫆\",supsetneq:\"⊋\",supsetneqq:\"⫌\",supsim:\"⫈\",supsub:\"⫔\",supsup:\"⫖\",swarhk:\"⤦\",swarr:\"↙\",swArr:\"⇙\",swarrow:\"↙\",swnwar:\"⤪\",szlig:\"ß\",Tab:\"\\u0009\",target:\"⌖\",Tau:\"Τ\",tau:\"τ\",tbrk:\"⎴\",Tcaron:\"Ť\",tcaron:\"ť\",Tcedil:\"Ţ\",tcedil:\"ţ\",Tcy:\"Т\",tcy:\"т\",tdot:\"⃛\",telrec:\"⌕\",Tfr:\"𝔗\",tfr:\"𝔱\",there4:\"∴\",therefore:\"∴\",Therefore:\"∴\",Theta:\"Θ\",theta:\"θ\",thetasym:\"ϑ\",thetav:\"ϑ\",thickapprox:\"≈\",thicksim:\"∼\",ThickSpace:\"  \",ThinSpace:\" \",thinsp:\" \",thkap:\"≈\",thksim:\"∼\",THORN:\"Þ\",thorn:\"þ\",tilde:\"˜\",Tilde:\"∼\",TildeEqual:\"≃\",TildeFullEqual:\"≅\",TildeTilde:\"≈\",timesbar:\"⨱\",timesb:\"⊠\",times:\"×\",timesd:\"⨰\",tint:\"∭\",toea:\"⤨\",topbot:\"⌶\",topcir:\"⫱\",top:\"⊤\",Topf:\"𝕋\",topf:\"𝕥\",topfork:\"⫚\",tosa:\"⤩\",tprime:\"‴\",trade:\"™\",TRADE:\"™\",triangle:\"▵\",triangledown:\"▿\",triangleleft:\"◃\",trianglelefteq:\"⊴\",triangleq:\"≜\",triangleright:\"▹\",trianglerighteq:\"⊵\",tridot:\"◬\",trie:\"≜\",triminus:\"⨺\",TripleDot:\"⃛\",triplus:\"⨹\",trisb:\"⧍\",tritime:\"⨻\",trpezium:\"⏢\",Tscr:\"𝒯\",tscr:\"𝓉\",TScy:\"Ц\",tscy:\"ц\",TSHcy:\"Ћ\",tshcy:\"ћ\",Tstrok:\"Ŧ\",tstrok:\"ŧ\",twixt:\"≬\",twoheadleftarrow:\"↞\",twoheadrightarrow:\"↠\",Uacute:\"Ú\",uacute:\"ú\",uarr:\"↑\",Uarr:\"↟\",uArr:\"⇑\",Uarrocir:\"⥉\",Ubrcy:\"Ў\",ubrcy:\"ў\",Ubreve:\"Ŭ\",ubreve:\"ŭ\",Ucirc:\"Û\",ucirc:\"û\",Ucy:\"У\",ucy:\"у\",udarr:\"⇅\",Udblac:\"Ű\",udblac:\"ű\",udhar:\"⥮\",ufisht:\"⥾\",Ufr:\"𝔘\",ufr:\"𝔲\",Ugrave:\"Ù\",ugrave:\"ù\",uHar:\"⥣\",uharl:\"↿\",uharr:\"↾\",uhblk:\"▀\",ulcorn:\"⌜\",ulcorner:\"⌜\",ulcrop:\"⌏\",ultri:\"◸\",Umacr:\"Ū\",umacr:\"ū\",uml:\"¨\",UnderBar:\"_\",UnderBrace:\"⏟\",UnderBracket:\"⎵\",UnderParenthesis:\"⏝\",Union:\"⋃\",UnionPlus:\"⊎\",Uogon:\"Ų\",uogon:\"ų\",Uopf:\"𝕌\",uopf:\"𝕦\",UpArrowBar:\"⤒\",uparrow:\"↑\",UpArrow:\"↑\",Uparrow:\"⇑\",UpArrowDownArrow:\"⇅\",updownarrow:\"↕\",UpDownArrow:\"↕\",Updownarrow:\"⇕\",UpEquilibrium:\"⥮\",upharpoonleft:\"↿\",upharpoonright:\"↾\",uplus:\"⊎\",UpperLeftArrow:\"↖\",UpperRightArrow:\"↗\",upsi:\"υ\",Upsi:\"ϒ\",upsih:\"ϒ\",Upsilon:\"Υ\",upsilon:\"υ\",UpTeeArrow:\"↥\",UpTee:\"⊥\",upuparrows:\"⇈\",urcorn:\"⌝\",urcorner:\"⌝\",urcrop:\"⌎\",Uring:\"Ů\",uring:\"ů\",urtri:\"◹\",Uscr:\"𝒰\",uscr:\"𝓊\",utdot:\"⋰\",Utilde:\"Ũ\",utilde:\"ũ\",utri:\"▵\",utrif:\"▴\",uuarr:\"⇈\",Uuml:\"Ü\",uuml:\"ü\",uwangle:\"⦧\",vangrt:\"⦜\",varepsilon:\"ϵ\",varkappa:\"ϰ\",varnothing:\"∅\",varphi:\"ϕ\",varpi:\"ϖ\",varpropto:\"∝\",varr:\"↕\",vArr:\"⇕\",varrho:\"ϱ\",varsigma:\"ς\",varsubsetneq:\"⊊︀\",varsubsetneqq:\"⫋︀\",varsupsetneq:\"⊋︀\",varsupsetneqq:\"⫌︀\",vartheta:\"ϑ\",vartriangleleft:\"⊲\",vartriangleright:\"⊳\",vBar:\"⫨\",Vbar:\"⫫\",vBarv:\"⫩\",Vcy:\"В\",vcy:\"в\",vdash:\"⊢\",vDash:\"⊨\",Vdash:\"⊩\",VDash:\"⊫\",Vdashl:\"⫦\",veebar:\"⊻\",vee:\"∨\",Vee:\"⋁\",veeeq:\"≚\",vellip:\"⋮\",verbar:\"|\",Verbar:\"‖\",vert:\"|\",Vert:\"‖\",VerticalBar:\"∣\",VerticalLine:\"|\",VerticalSeparator:\"❘\",VerticalTilde:\"≀\",VeryThinSpace:\" \",Vfr:\"𝔙\",vfr:\"𝔳\",vltri:\"⊲\",vnsub:\"⊂⃒\",vnsup:\"⊃⃒\",Vopf:\"𝕍\",vopf:\"𝕧\",vprop:\"∝\",vrtri:\"⊳\",Vscr:\"𝒱\",vscr:\"𝓋\",vsubnE:\"⫋︀\",vsubne:\"⊊︀\",vsupnE:\"⫌︀\",vsupne:\"⊋︀\",Vvdash:\"⊪\",vzigzag:\"⦚\",Wcirc:\"Ŵ\",wcirc:\"ŵ\",wedbar:\"⩟\",wedge:\"∧\",Wedge:\"⋀\",wedgeq:\"≙\",weierp:\"℘\",Wfr:\"𝔚\",wfr:\"𝔴\",Wopf:\"𝕎\",wopf:\"𝕨\",wp:\"℘\",wr:\"≀\",wreath:\"≀\",Wscr:\"𝒲\",wscr:\"𝓌\",xcap:\"⋂\",xcirc:\"◯\",xcup:\"⋃\",xdtri:\"▽\",Xfr:\"𝔛\",xfr:\"𝔵\",xharr:\"⟷\",xhArr:\"⟺\",Xi:\"Ξ\",xi:\"ξ\",xlarr:\"⟵\",xlArr:\"⟸\",xmap:\"⟼\",xnis:\"⋻\",xodot:\"⨀\",Xopf:\"𝕏\",xopf:\"𝕩\",xoplus:\"⨁\",xotime:\"⨂\",xrarr:\"⟶\",xrArr:\"⟹\",Xscr:\"𝒳\",xscr:\"𝓍\",xsqcup:\"⨆\",xuplus:\"⨄\",xutri:\"△\",xvee:\"⋁\",xwedge:\"⋀\",Yacute:\"Ý\",yacute:\"ý\",YAcy:\"Я\",yacy:\"я\",Ycirc:\"Ŷ\",ycirc:\"ŷ\",Ycy:\"Ы\",ycy:\"ы\",yen:\"¥\",Yfr:\"𝔜\",yfr:\"𝔶\",YIcy:\"Ї\",yicy:\"ї\",Yopf:\"𝕐\",yopf:\"𝕪\",Yscr:\"𝒴\",yscr:\"𝓎\",YUcy:\"Ю\",yucy:\"ю\",yuml:\"ÿ\",Yuml:\"Ÿ\",Zacute:\"Ź\",zacute:\"ź\",Zcaron:\"Ž\",zcaron:\"ž\",Zcy:\"З\",zcy:\"з\",Zdot:\"Ż\",zdot:\"ż\",zeetrf:\"ℨ\",ZeroWidthSpace:\"​\",Zeta:\"Ζ\",zeta:\"ζ\",zfr:\"𝔷\",Zfr:\"ℨ\",ZHcy:\"Ж\",zhcy:\"ж\",zigrarr:\"⇝\",zopf:\"𝕫\",Zopf:\"ℤ\",Zscr:\"𝒵\",zscr:\"𝓏\",zwj:\"\\u200d\",zwnj:\"\\u200c\"\n};\n","const WSP = /[\\t\\n\\f ]/;\nconst ALPHA = /[A-Za-z]/;\nconst CRLF = /\\r\\n?/g;\n\nexport function isSpace(char: string): boolean {\n return WSP.test(char);\n}\n\nexport function isAlpha(char: string): boolean {\n return ALPHA.test(char);\n}\n\nexport function preprocessInput(input: string): string {\n return input.replace(CRLF, '\\n');\n}\n","import { preprocessInput, isAlpha, isSpace } from './utils';\nimport { EntityParser, TokenizerDelegate, TokenizerState } from './types';\n\nexport default class EventedTokenizer {\n public state: TokenizerState = TokenizerState.beforeData;\n\n public line = -1;\n public column = -1;\n\n private input = '';\n private index = -1;\n\n private tagNameBuffer = '';\n\n constructor(\n private delegate: TokenizerDelegate,\n private entityParser: EntityParser\n ) {\n this.reset();\n }\n\n reset() {\n this.transitionTo(TokenizerState.beforeData);\n this.input = '';\n\n this.index = 0;\n this.line = 1;\n this.column = 0;\n\n this.delegate.reset();\n }\n\n transitionTo(state: TokenizerState) {\n this.state = state;\n }\n\n tokenize(input: string) {\n this.reset();\n this.tokenizePart(input);\n this.tokenizeEOF();\n }\n\n tokenizePart(input: string) {\n this.input += preprocessInput(input);\n\n while (this.index < this.input.length) {\n let handler = this.states[this.state];\n if (handler !== undefined) {\n handler.call(this);\n } else {\n throw new Error(`unhandled state ${this.state}`);\n }\n }\n }\n\n tokenizeEOF() {\n this.flushData();\n }\n\n flushData() {\n if (this.state === 'data') {\n this.delegate.finishData();\n this.transitionTo(TokenizerState.beforeData);\n }\n }\n\n peek() {\n return this.input.charAt(this.index);\n }\n\n consume() {\n let char = this.peek();\n\n this.index++;\n\n if (char === '\\n') {\n this.line++;\n this.column = 0;\n } else {\n this.column++;\n }\n\n return char;\n }\n\n consumeCharRef() {\n let endIndex = this.input.indexOf(';', this.index);\n if (endIndex === -1) {\n return;\n }\n let entity = this.input.slice(this.index, endIndex);\n let chars = this.entityParser.parse(entity);\n if (chars) {\n let count = entity.length;\n // consume the entity chars\n while (count) {\n this.consume();\n count--;\n }\n // consume the `;`\n this.consume();\n\n return chars;\n }\n }\n\n markTagStart() {\n this.delegate.tagOpen();\n }\n\n private appendToTagName(char: string) : void {\n this.tagNameBuffer += char;\n this.delegate.appendToTagName(char);\n }\n\n states: { [k in TokenizerState]?: (this: EventedTokenizer) => void } = {\n beforeData() {\n let char = this.peek();\n\n if (char === '<') {\n this.transitionTo(TokenizerState.tagOpen);\n this.markTagStart();\n this.consume();\n } else {\n if (char === '\\n') {\n let tag = this.tagNameBuffer.toLowerCase();\n if (tag === 'pre' || tag === 'textarea') {\n this.consume();\n }\n }\n this.transitionTo(TokenizerState.data);\n this.delegate.beginData();\n }\n },\n\n data() {\n let char = this.peek();\n\n if (char === '<') {\n this.delegate.finishData();\n this.transitionTo(TokenizerState.tagOpen);\n this.markTagStart();\n this.consume();\n } else if (char === '&') {\n this.consume();\n this.delegate.appendToData(this.consumeCharRef() || '&');\n } else {\n this.consume();\n this.delegate.appendToData(char);\n }\n },\n\n tagOpen() {\n let char = this.consume();\n\n if (char === '!') {\n this.transitionTo(TokenizerState.markupDeclarationOpen);\n } else if (char === '/') {\n this.transitionTo(TokenizerState.endTagOpen);\n } else if (char === '@' || char === ':' || isAlpha(char)) {\n this.transitionTo(TokenizerState.tagName);\n this.tagNameBuffer = '';\n this.delegate.beginStartTag();\n this.appendToTagName(char);\n }\n },\n\n markupDeclarationOpen() {\n let char = this.consume();\n\n if (char === '-' && this.input.charAt(this.index) === '-') {\n this.consume();\n this.transitionTo(TokenizerState.commentStart);\n this.delegate.beginComment();\n }\n },\n\n commentStart() {\n let char = this.consume();\n\n if (char === '-') {\n this.transitionTo(TokenizerState.commentStartDash);\n } else if (char === '>') {\n this.delegate.finishComment();\n this.transitionTo(TokenizerState.beforeData);\n } else {\n this.delegate.appendToCommentData(char);\n this.transitionTo(TokenizerState.comment);\n }\n },\n\n commentStartDash() {\n let char = this.consume();\n\n if (char === '-') {\n this.transitionTo(TokenizerState.commentEnd);\n } else if (char === '>') {\n this.delegate.finishComment();\n this.transitionTo(TokenizerState.beforeData);\n } else {\n this.delegate.appendToCommentData('-');\n this.transitionTo(TokenizerState.comment);\n }\n },\n\n comment() {\n let char = this.consume();\n\n if (char === '-') {\n this.transitionTo(TokenizerState.commentEndDash);\n } else {\n this.delegate.appendToCommentData(char);\n }\n },\n\n commentEndDash() {\n let char = this.consume();\n\n if (char === '-') {\n this.transitionTo(TokenizerState.commentEnd);\n } else {\n this.delegate.appendToCommentData('-' + char);\n this.transitionTo(TokenizerState.comment);\n }\n },\n\n commentEnd() {\n let char = this.consume();\n\n if (char === '>') {\n this.delegate.finishComment();\n this.transitionTo(TokenizerState.beforeData);\n } else {\n this.delegate.appendToCommentData('--' + char);\n this.transitionTo(TokenizerState.comment);\n }\n },\n\n tagName() {\n let char = this.consume();\n\n if (isSpace(char)) {\n this.transitionTo(TokenizerState.beforeAttributeName);\n } else if (char === '/') {\n this.transitionTo(TokenizerState.selfClosingStartTag);\n } else if (char === '>') {\n this.delegate.finishTag();\n this.transitionTo(TokenizerState.beforeData);\n } else {\n this.appendToTagName(char);\n }\n },\n\n beforeAttributeName() {\n let char = this.peek();\n\n if (isSpace(char)) {\n this.consume();\n return;\n } else if (char === '/') {\n this.transitionTo(TokenizerState.selfClosingStartTag);\n this.consume();\n } else if (char === '>') {\n this.consume();\n this.delegate.finishTag();\n this.transitionTo(TokenizerState.beforeData);\n } else if (char === '=') {\n this.delegate.reportSyntaxError(\n 'attribute name cannot start with equals sign'\n );\n this.transitionTo(TokenizerState.attributeName);\n this.delegate.beginAttribute();\n this.consume();\n this.delegate.appendToAttributeName(char);\n } else {\n this.transitionTo(TokenizerState.attributeName);\n this.delegate.beginAttribute();\n }\n },\n\n attributeName() {\n let char = this.peek();\n\n if (isSpace(char)) {\n this.transitionTo(TokenizerState.afterAttributeName);\n this.consume();\n } else if (char === '/') {\n this.delegate.beginAttributeValue(false);\n this.delegate.finishAttributeValue();\n this.consume();\n this.transitionTo(TokenizerState.selfClosingStartTag);\n } else if (char === '=') {\n this.transitionTo(TokenizerState.beforeAttributeValue);\n this.consume();\n } else if (char === '>') {\n this.delegate.beginAttributeValue(false);\n this.delegate.finishAttributeValue();\n this.consume();\n this.delegate.finishTag();\n this.transitionTo(TokenizerState.beforeData);\n } else if (char === '\"' || char === \"'\" || char === '<') {\n this.delegate.reportSyntaxError(\n char + ' is not a valid character within attribute names'\n );\n this.consume();\n this.delegate.appendToAttributeName(char);\n } else {\n this.consume();\n this.delegate.appendToAttributeName(char);\n }\n },\n\n afterAttributeName() {\n let char = this.peek();\n\n if (isSpace(char)) {\n this.consume();\n return;\n } else if (char === '/') {\n this.delegate.beginAttributeValue(false);\n this.delegate.finishAttributeValue();\n this.consume();\n this.transitionTo(TokenizerState.selfClosingStartTag);\n } else if (char === '=') {\n this.consume();\n this.transitionTo(TokenizerState.beforeAttributeValue);\n } else if (char === '>') {\n this.delegate.beginAttributeValue(false);\n this.delegate.finishAttributeValue();\n this.consume();\n this.delegate.finishTag();\n this.transitionTo(TokenizerState.beforeData);\n } else {\n this.delegate.beginAttributeValue(false);\n this.delegate.finishAttributeValue();\n this.transitionTo(TokenizerState.attributeName);\n this.delegate.beginAttribute();\n this.consume();\n this.delegate.appendToAttributeName(char);\n }\n },\n\n beforeAttributeValue() {\n let char = this.peek();\n\n if (isSpace(char)) {\n this.consume();\n } else if (char === '\"') {\n this.transitionTo(TokenizerState.attributeValueDoubleQuoted);\n this.delegate.beginAttributeValue(true);\n this.consume();\n } else if (char === \"'\") {\n this.transitionTo(TokenizerState.attributeValueSingleQuoted);\n this.delegate.beginAttributeValue(true);\n this.consume();\n } else if (char === '>') {\n this.delegate.beginAttributeValue(false);\n this.delegate.finishAttributeValue();\n this.consume();\n this.delegate.finishTag();\n this.transitionTo(TokenizerState.beforeData);\n } else {\n this.transitionTo(TokenizerState.attributeValueUnquoted);\n this.delegate.beginAttributeValue(false);\n this.consume();\n this.delegate.appendToAttributeValue(char);\n }\n },\n\n attributeValueDoubleQuoted() {\n let char = this.consume();\n\n if (char === '\"') {\n this.delegate.finishAttributeValue();\n this.transitionTo(TokenizerState.afterAttributeValueQuoted);\n } else if (char === '&') {\n this.delegate.appendToAttributeValue(this.consumeCharRef() || '&');\n } else {\n this.delegate.appendToAttributeValue(char);\n }\n },\n\n attributeValueSingleQuoted() {\n let char = this.consume();\n\n if (char === \"'\") {\n this.delegate.finishAttributeValue();\n this.transitionTo(TokenizerState.afterAttributeValueQuoted);\n } else if (char === '&') {\n this.delegate.appendToAttributeValue(this.consumeCharRef() || '&');\n } else {\n this.delegate.appendToAttributeValue(char);\n }\n },\n\n attributeValueUnquoted() {\n let char = this.peek();\n\n if (isSpace(char)) {\n this.delegate.finishAttributeValue();\n this.consume();\n this.transitionTo(TokenizerState.beforeAttributeName);\n } else if (char === '/') {\n this.delegate.finishAttributeValue();\n this.consume();\n this.transitionTo(TokenizerState.selfClosingStartTag);\n } else if (char === '&') {\n this.consume();\n this.delegate.appendToAttributeValue(this.consumeCharRef() || '&');\n } else if (char === '>') {\n this.delegate.finishAttributeValue();\n this.consume();\n this.delegate.finishTag();\n this.transitionTo(TokenizerState.beforeData);\n } else {\n this.consume();\n this.delegate.appendToAttributeValue(char);\n }\n },\n\n afterAttributeValueQuoted() {\n let char = this.peek();\n\n if (isSpace(char)) {\n this.consume();\n this.transitionTo(TokenizerState.beforeAttributeName);\n } else if (char === '/') {\n this.consume();\n this.transitionTo(TokenizerState.selfClosingStartTag);\n } else if (char === '>') {\n this.consume();\n this.delegate.finishTag();\n this.transitionTo(TokenizerState.beforeData);\n } else {\n this.transitionTo(TokenizerState.beforeAttributeName);\n }\n },\n\n selfClosingStartTag() {\n let char = this.peek();\n\n if (char === '>') {\n this.consume();\n this.delegate.markTagAsSelfClosing();\n this.delegate.finishTag();\n this.transitionTo(TokenizerState.beforeData);\n } else {\n this.transitionTo(TokenizerState.beforeAttributeName);\n }\n },\n\n endTagOpen() {\n let char = this.consume();\n\n if (char === '@' || char === ':' || isAlpha(char)) {\n this.transitionTo(TokenizerState.tagName);\n this.tagNameBuffer = '';\n this.delegate.beginEndTag();\n this.appendToTagName(char);\n }\n }\n };\n}\n","import EventedTokenizer from './evented-tokenizer';\nimport {\n Attribute,\n EntityParser,\n Token,\n TokenizerDelegate,\n TokenMap,\n TokenType,\n TokenizerOptions\n} from './types';\n\nexport default class Tokenizer implements TokenizerDelegate {\n private token: Token | null = null;\n private startLine = 1;\n private startColumn = 0;\n private tokenizer: EventedTokenizer;\n private tokens: Token[] = [];\n private _currentAttribute?: Attribute;\n\n constructor(\n entityParser: EntityParser,\n private options: TokenizerOptions = {}\n ) {\n this.tokenizer = new EventedTokenizer(this, entityParser);\n this._currentAttribute = undefined;\n }\n\n tokenize(input: string) {\n this.tokens = [];\n this.tokenizer.tokenize(input);\n return this.tokens;\n }\n\n tokenizePart(input: string) {\n this.tokens = [];\n this.tokenizer.tokenizePart(input);\n return this.tokens;\n }\n\n tokenizeEOF() {\n this.tokens = [];\n this.tokenizer.tokenizeEOF();\n return this.tokens[0];\n }\n\n reset() {\n this.token = null;\n this.startLine = 1;\n this.startColumn = 0;\n }\n\n current(\n type1: T,\n type2: U\n ): TokenMap[T] | TokenMap[U];\n current(type: T): TokenMap[T];\n current(): Token;\n current(): Token {\n const token = this.token;\n if (token === null) {\n throw new Error('token was unexpectedly null');\n }\n if (arguments.length === 0) {\n return token;\n }\n for (let i = 0; i < arguments.length; i++) {\n if (token.type === arguments[i]) {\n return token;\n }\n }\n throw new Error(`token type was unexpectedly ${token.type}`);\n }\n\n push(token: Token) {\n this.token = token;\n this.tokens.push(token);\n }\n\n currentAttribute() {\n return this._currentAttribute;\n }\n\n addLocInfo() {\n if (this.options.loc) {\n this.current().loc = {\n start: {\n line: this.startLine,\n column: this.startColumn\n },\n end: {\n line: this.tokenizer.line,\n column: this.tokenizer.column\n }\n };\n }\n this.startLine = this.tokenizer.line;\n this.startColumn = this.tokenizer.column;\n }\n\n // Data\n\n beginData() {\n this.push({\n type: TokenType.Chars,\n chars: ''\n });\n }\n\n appendToData(char: string) {\n this.current(TokenType.Chars).chars += char;\n }\n\n finishData() {\n this.addLocInfo();\n }\n\n // Comment\n\n beginComment() {\n this.push({\n type: TokenType.Comment,\n chars: ''\n });\n }\n\n appendToCommentData(char: string) {\n this.current(TokenType.Comment).chars += char;\n }\n\n finishComment() {\n this.addLocInfo();\n }\n\n // Tags - basic\n\n tagOpen() {}\n\n beginStartTag() {\n this.push({\n type: TokenType.StartTag,\n tagName: '',\n attributes: [],\n selfClosing: false\n });\n }\n\n beginEndTag() {\n this.push({\n type: TokenType.EndTag,\n tagName: ''\n });\n }\n\n finishTag() {\n this.addLocInfo();\n }\n\n markTagAsSelfClosing() {\n this.current(TokenType.StartTag).selfClosing = true;\n }\n\n // Tags - name\n appendToTagName(char: string) {\n this.current(TokenType.StartTag, TokenType.EndTag).tagName += char;\n }\n\n // Tags - attributes\n\n beginAttribute() {\n this._currentAttribute = ['', '', false];\n }\n\n appendToAttributeName(char: string) {\n this.currentAttribute()![0] += char;\n }\n\n beginAttributeValue(isQuoted: boolean) {\n this.currentAttribute()![2] = isQuoted;\n }\n\n appendToAttributeValue(char: string) {\n this.currentAttribute()![1] += char;\n }\n\n finishAttributeValue() {\n this.current(TokenType.StartTag).attributes.push(this._currentAttribute!);\n }\n\n reportSyntaxError(message: string) {\n this.current().syntaxError = message;\n }\n}\n","var __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"htmlEntities\"];","export function createLogger() {\n\t/**\n\t * Creates a log handler with block validation prefix.\n\t *\n\t * @param {Function} logger Original logger function.\n\t *\n\t * @return {Function} Augmented logger function.\n\t */\n\tfunction createLogHandler( logger ) {\n\t\tlet log = ( message, ...args ) =>\n\t\t\tlogger( 'Block validation: ' + message, ...args );\n\n\t\t// In test environments, pre-process string substitutions to improve\n\t\t// readability of error messages. We'd prefer to avoid pulling in this\n\t\t// dependency in runtime environments, and it can be dropped by a combo\n\t\t// of Webpack env substitution + UglifyJS dead code elimination.\n\t\tif ( process.env.NODE_ENV === 'test' ) {\n\t\t\tlog = ( ...args ) => logger( require( 'util' ).format( ...args ) );\n\t\t}\n\n\t\treturn log;\n\t}\n\n\treturn {\n\t\t// eslint-disable-next-line no-console\n\t\terror: createLogHandler( console.error ),\n\t\t// eslint-disable-next-line no-console\n\t\twarning: createLogHandler( console.warn ),\n\t\tgetItems() {\n\t\t\treturn [];\n\t\t},\n\t};\n}\n\nexport function createQueuedLogger() {\n\t/**\n\t * The list of enqueued log actions to print.\n\t *\n\t * @type {Array}\n\t */\n\tconst queue = [];\n\n\tconst logger = createLogger();\n\n\treturn {\n\t\terror( ...args ) {\n\t\t\tqueue.push( { log: logger.error, args } );\n\t\t},\n\t\twarning( ...args ) {\n\t\t\tqueue.push( { log: logger.warning, args } );\n\t\t},\n\t\tgetItems() {\n\t\t\treturn queue;\n\t\t},\n\t};\n}\n","/**\n * External dependencies\n */\nimport { Tokenizer } from 'simple-html-tokenizer';\nimport { identity, xor, fromPairs, isEqual, includes, stubTrue } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { decodeEntities } from '@wordpress/html-entities';\n\n/**\n * Internal dependencies\n */\nimport { createLogger, createQueuedLogger } from './logger';\nimport { getSaveContent } from '../serializer';\nimport {\n\tgetFreeformContentHandlerName,\n\tgetUnregisteredTypeHandlerName,\n} from '../registration';\nimport { normalizeBlockType } from '../utils';\n\n/**\n * Globally matches any consecutive whitespace\n *\n * @type {RegExp}\n */\nconst REGEXP_WHITESPACE = /[\\t\\n\\r\\v\\f ]+/g;\n\n/**\n * Matches a string containing only whitespace\n *\n * @type {RegExp}\n */\nconst REGEXP_ONLY_WHITESPACE = /^[\\t\\n\\r\\v\\f ]*$/;\n\n/**\n * Matches a CSS URL type value\n *\n * @type {RegExp}\n */\nconst REGEXP_STYLE_URL_TYPE = /^url\\s*\\(['\"\\s]*(.*?)['\"\\s]*\\)$/;\n\n/**\n * Boolean attributes are attributes whose presence as being assigned is\n * meaningful, even if only empty.\n *\n * See: https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#boolean-attributes\n * Extracted from: https://html.spec.whatwg.org/multipage/indices.html#attributes-3\n *\n * Object.keys( Array.from( document.querySelectorAll( '#attributes-1 > tbody > tr' ) )\n * .filter( ( tr ) => tr.lastChild.textContent.indexOf( 'Boolean attribute' ) !== -1 )\n * .reduce( ( result, tr ) => Object.assign( result, {\n * [ tr.firstChild.textContent.trim() ]: true\n * } ), {} ) ).sort();\n *\n * @type {Array}\n */\nconst BOOLEAN_ATTRIBUTES = [\n\t'allowfullscreen',\n\t'allowpaymentrequest',\n\t'allowusermedia',\n\t'async',\n\t'autofocus',\n\t'autoplay',\n\t'checked',\n\t'controls',\n\t'default',\n\t'defer',\n\t'disabled',\n\t'download',\n\t'formnovalidate',\n\t'hidden',\n\t'ismap',\n\t'itemscope',\n\t'loop',\n\t'multiple',\n\t'muted',\n\t'nomodule',\n\t'novalidate',\n\t'open',\n\t'playsinline',\n\t'readonly',\n\t'required',\n\t'reversed',\n\t'selected',\n\t'typemustmatch',\n];\n\n/**\n * Enumerated attributes are attributes which must be of a specific value form.\n * Like boolean attributes, these are meaningful if specified, even if not of a\n * valid enumerated value.\n *\n * See: https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#enumerated-attribute\n * Extracted from: https://html.spec.whatwg.org/multipage/indices.html#attributes-3\n *\n * Object.keys( Array.from( document.querySelectorAll( '#attributes-1 > tbody > tr' ) )\n * .filter( ( tr ) => /^(\"(.+?)\";?\\s*)+/.test( tr.lastChild.textContent.trim() ) )\n * .reduce( ( result, tr ) => Object.assign( result, {\n * [ tr.firstChild.textContent.trim() ]: true\n * } ), {} ) ).sort();\n *\n * @type {Array}\n */\nconst ENUMERATED_ATTRIBUTES = [\n\t'autocapitalize',\n\t'autocomplete',\n\t'charset',\n\t'contenteditable',\n\t'crossorigin',\n\t'decoding',\n\t'dir',\n\t'draggable',\n\t'enctype',\n\t'formenctype',\n\t'formmethod',\n\t'http-equiv',\n\t'inputmode',\n\t'kind',\n\t'method',\n\t'preload',\n\t'scope',\n\t'shape',\n\t'spellcheck',\n\t'translate',\n\t'type',\n\t'wrap',\n];\n\n/**\n * Meaningful attributes are those who cannot be safely ignored when omitted in\n * one HTML markup string and not another.\n *\n * @type {Array}\n */\nconst MEANINGFUL_ATTRIBUTES = [\n\t...BOOLEAN_ATTRIBUTES,\n\t...ENUMERATED_ATTRIBUTES,\n];\n\n/**\n * Array of functions which receive a text string on which to apply normalizing\n * behavior for consideration in text token equivalence, carefully ordered from\n * least-to-most expensive operations.\n *\n * @type {Array}\n */\nconst TEXT_NORMALIZATIONS = [ identity, getTextWithCollapsedWhitespace ];\n\n/**\n * Regular expression matching a named character reference. In lieu of bundling\n * a full set of references, the pattern covers the minimal necessary to test\n * positively against the full set.\n *\n * \"The ampersand must be followed by one of the names given in the named\n * character references section, using the same case.\"\n *\n * Tested aginst \"12.5 Named character references\":\n *\n * ```\n * const references = Array.from( document.querySelectorAll(\n * '#named-character-references-table tr[id^=entity-] td:first-child'\n * ) ).map( ( code ) => code.textContent )\n * references.every( ( reference ) => /^[\\da-z]+$/i.test( reference ) )\n * ```\n *\n * @see https://html.spec.whatwg.org/multipage/syntax.html#character-references\n * @see https://html.spec.whatwg.org/multipage/named-characters.html#named-character-references\n *\n * @type {RegExp}\n */\nconst REGEXP_NAMED_CHARACTER_REFERENCE = /^[\\da-z]+$/i;\n\n/**\n * Regular expression matching a decimal character reference.\n *\n * \"The ampersand must be followed by a U+0023 NUMBER SIGN character (#),\n * followed by one or more ASCII digits, representing a base-ten integer\"\n *\n * @see https://html.spec.whatwg.org/multipage/syntax.html#character-references\n *\n * @type {RegExp}\n */\nconst REGEXP_DECIMAL_CHARACTER_REFERENCE = /^#\\d+$/;\n\n/**\n * Regular expression matching a hexadecimal character reference.\n *\n * \"The ampersand must be followed by a U+0023 NUMBER SIGN character (#), which\n * must be followed by either a U+0078 LATIN SMALL LETTER X character (x) or a\n * U+0058 LATIN CAPITAL LETTER X character (X), which must then be followed by\n * one or more ASCII hex digits, representing a hexadecimal integer\"\n *\n * @see https://html.spec.whatwg.org/multipage/syntax.html#character-references\n *\n * @type {RegExp}\n */\nconst REGEXP_HEXADECIMAL_CHARACTER_REFERENCE = /^#x[\\da-f]+$/i;\n\n/**\n * Returns true if the given string is a valid character reference segment, or\n * false otherwise. The text should be stripped of `&` and `;` demarcations.\n *\n * @param {string} text Text to test.\n *\n * @return {boolean} Whether text is valid character reference.\n */\nexport function isValidCharacterReference( text ) {\n\treturn (\n\t\tREGEXP_NAMED_CHARACTER_REFERENCE.test( text ) ||\n\t\tREGEXP_DECIMAL_CHARACTER_REFERENCE.test( text ) ||\n\t\tREGEXP_HEXADECIMAL_CHARACTER_REFERENCE.test( text )\n\t);\n}\n\n/**\n * Subsitute EntityParser class for `simple-html-tokenizer` which uses the\n * implementation of `decodeEntities` from `html-entities`, in order to avoid\n * bundling a massive named character reference.\n *\n * @see https://github.com/tildeio/simple-html-tokenizer/tree/HEAD/src/entity-parser.ts\n */\nexport class DecodeEntityParser {\n\t/**\n\t * Returns a substitute string for an entity string sequence between `&`\n\t * and `;`, or undefined if no substitution should occur.\n\t *\n\t * @param {string} entity Entity fragment discovered in HTML.\n\t *\n\t * @return {?string} Entity substitute value.\n\t */\n\tparse( entity ) {\n\t\tif ( isValidCharacterReference( entity ) ) {\n\t\t\treturn decodeEntities( '&' + entity + ';' );\n\t\t}\n\t}\n}\n\n/**\n * Given a specified string, returns an array of strings split by consecutive\n * whitespace, ignoring leading or trailing whitespace.\n *\n * @param {string} text Original text.\n *\n * @return {string[]} Text pieces split on whitespace.\n */\nexport function getTextPiecesSplitOnWhitespace( text ) {\n\treturn text.trim().split( REGEXP_WHITESPACE );\n}\n\n/**\n * Given a specified string, returns a new trimmed string where all consecutive\n * whitespace is collapsed to a single space.\n *\n * @param {string} text Original text.\n *\n * @return {string} Trimmed text with consecutive whitespace collapsed.\n */\nexport function getTextWithCollapsedWhitespace( text ) {\n\t// This is an overly simplified whitespace comparison. The specification is\n\t// more prescriptive of whitespace behavior in inline and block contexts.\n\t//\n\t// See: https://medium.com/@patrickbrosset/when-does-white-space-matter-in-html-b90e8a7cdd33\n\treturn getTextPiecesSplitOnWhitespace( text ).join( ' ' );\n}\n\n/**\n * Returns attribute pairs of the given StartTag token, including only pairs\n * where the value is non-empty or the attribute is a boolean attribute, an\n * enumerated attribute, or a custom data- attribute.\n *\n * @see MEANINGFUL_ATTRIBUTES\n *\n * @param {Object} token StartTag token.\n *\n * @return {Array[]} Attribute pairs.\n */\nexport function getMeaningfulAttributePairs( token ) {\n\treturn token.attributes.filter( ( pair ) => {\n\t\tconst [ key, value ] = pair;\n\t\treturn (\n\t\t\tvalue ||\n\t\t\tkey.indexOf( 'data-' ) === 0 ||\n\t\t\tincludes( MEANINGFUL_ATTRIBUTES, key )\n\t\t);\n\t} );\n}\n\n/**\n * Returns true if two text tokens (with `chars` property) are equivalent, or\n * false otherwise.\n *\n * @param {Object} actual Actual token.\n * @param {Object} expected Expected token.\n * @param {Object} logger Validation logger object.\n *\n * @return {boolean} Whether two text tokens are equivalent.\n */\nexport function isEquivalentTextTokens(\n\tactual,\n\texpected,\n\tlogger = createLogger()\n) {\n\t// This function is intentionally written as syntactically \"ugly\" as a hot\n\t// path optimization. Text is progressively normalized in order from least-\n\t// to-most operationally expensive, until the earliest point at which text\n\t// can be confidently inferred as being equal.\n\tlet actualChars = actual.chars;\n\tlet expectedChars = expected.chars;\n\n\tfor ( let i = 0; i < TEXT_NORMALIZATIONS.length; i++ ) {\n\t\tconst normalize = TEXT_NORMALIZATIONS[ i ];\n\n\t\tactualChars = normalize( actualChars );\n\t\texpectedChars = normalize( expectedChars );\n\n\t\tif ( actualChars === expectedChars ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tlogger.warning(\n\t\t'Expected text `%s`, saw `%s`.',\n\t\texpected.chars,\n\t\tactual.chars\n\t);\n\n\treturn false;\n}\n\n/**\n * Given a CSS length value, returns a normalized CSS length value for strict equality\n * comparison.\n *\n * @param {string} value CSS length value.\n *\n * @return {string} Normalized CSS length value.\n */\nexport function getNormalizedLength( value ) {\n\tif ( 0 === parseFloat( value ) ) {\n\t\treturn '0';\n\t}\n\t// Normalize strings with floats to always include a leading zero.\n\tif ( value.indexOf( '.' ) === 0 ) {\n\t\treturn '0' + value;\n\t}\n\n\treturn value;\n}\n\n/**\n * Given a style value, returns a normalized style value for strict equality\n * comparison.\n *\n * @param {string} value Style value.\n *\n * @return {string} Normalized style value.\n */\nexport function getNormalizedStyleValue( value ) {\n\tconst textPieces = getTextPiecesSplitOnWhitespace( value );\n\tconst normalizedPieces = textPieces.map( getNormalizedLength );\n\tconst result = normalizedPieces.join( ' ' );\n\n\treturn (\n\t\tresult\n\t\t\t// Normalize URL type to omit whitespace or quotes.\n\t\t\t.replace( REGEXP_STYLE_URL_TYPE, 'url($1)' )\n\t);\n}\n\n/**\n * Given a style attribute string, returns an object of style properties.\n *\n * @param {string} text Style attribute.\n *\n * @return {Object} Style properties.\n */\nexport function getStyleProperties( text ) {\n\tconst pairs = text\n\t\t// Trim ending semicolon (avoid including in split)\n\t\t.replace( /;?\\s*$/, '' )\n\t\t// Split on property assignment.\n\t\t.split( ';' )\n\t\t// For each property assignment...\n\t\t.map( ( style ) => {\n\t\t\t// ...split further into key-value pairs.\n\t\t\tconst [ key, ...valueParts ] = style.split( ':' );\n\t\t\tconst value = valueParts.join( ':' );\n\n\t\t\treturn [ key.trim(), getNormalizedStyleValue( value.trim() ) ];\n\t\t} );\n\n\treturn fromPairs( pairs );\n}\n\n/**\n * Attribute-specific equality handlers\n *\n * @type {Object}\n */\nexport const isEqualAttributesOfName = {\n\tclass: ( actual, expected ) => {\n\t\t// Class matches if members are the same, even if out of order or\n\t\t// superfluous whitespace between.\n\t\treturn ! xor(\n\t\t\t...[ actual, expected ].map( getTextPiecesSplitOnWhitespace )\n\t\t).length;\n\t},\n\tstyle: ( actual, expected ) => {\n\t\treturn isEqual( ...[ actual, expected ].map( getStyleProperties ) );\n\t},\n\t// For each boolean attribute, mere presence of attribute in both is enough\n\t// to assume equivalence.\n\t...fromPairs(\n\t\tBOOLEAN_ATTRIBUTES.map( ( attribute ) => [ attribute, stubTrue ] )\n\t),\n};\n\n/**\n * Given two sets of attribute tuples, returns true if the attribute sets are\n * equivalent.\n *\n * @param {Array[]} actual Actual attributes tuples.\n * @param {Array[]} expected Expected attributes tuples.\n * @param {Object} logger Validation logger object.\n *\n * @return {boolean} Whether attributes are equivalent.\n */\nexport function isEqualTagAttributePairs(\n\tactual,\n\texpected,\n\tlogger = createLogger()\n) {\n\t// Attributes is tokenized as tuples. Their lengths should match. This also\n\t// avoids us needing to check both attributes sets, since if A has any keys\n\t// which do not exist in B, we know the sets to be different.\n\tif ( actual.length !== expected.length ) {\n\t\tlogger.warning(\n\t\t\t'Expected attributes %o, instead saw %o.',\n\t\t\texpected,\n\t\t\tactual\n\t\t);\n\t\treturn false;\n\t}\n\n\t// Attributes are not guaranteed to occur in the same order. For validating\n\t// actual attributes, first convert the set of expected attribute values to\n\t// an object, for lookup by key.\n\tconst expectedAttributes = {};\n\tfor ( let i = 0; i < expected.length; i++ ) {\n\t\texpectedAttributes[ expected[ i ][ 0 ].toLowerCase() ] =\n\t\t\texpected[ i ][ 1 ];\n\t}\n\n\tfor ( let i = 0; i < actual.length; i++ ) {\n\t\tconst [ name, actualValue ] = actual[ i ];\n\t\tconst nameLower = name.toLowerCase();\n\n\t\t// As noted above, if missing member in B, assume different.\n\t\tif ( ! expectedAttributes.hasOwnProperty( nameLower ) ) {\n\t\t\tlogger.warning( 'Encountered unexpected attribute `%s`.', name );\n\t\t\treturn false;\n\t\t}\n\n\t\tconst expectedValue = expectedAttributes[ nameLower ];\n\t\tconst isEqualAttributes = isEqualAttributesOfName[ nameLower ];\n\n\t\tif ( isEqualAttributes ) {\n\t\t\t// Defer custom attribute equality handling.\n\t\t\tif ( ! isEqualAttributes( actualValue, expectedValue ) ) {\n\t\t\t\tlogger.warning(\n\t\t\t\t\t'Expected attribute `%s` of value `%s`, saw `%s`.',\n\t\t\t\t\tname,\n\t\t\t\t\texpectedValue,\n\t\t\t\t\tactualValue\n\t\t\t\t);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else if ( actualValue !== expectedValue ) {\n\t\t\t// Otherwise strict inequality should bail.\n\t\t\tlogger.warning(\n\t\t\t\t'Expected attribute `%s` of value `%s`, saw `%s`.',\n\t\t\t\tname,\n\t\t\t\texpectedValue,\n\t\t\t\tactualValue\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\n/**\n * Token-type-specific equality handlers\n *\n * @type {Object}\n */\nexport const isEqualTokensOfType = {\n\tStartTag: ( actual, expected, logger = createLogger() ) => {\n\t\tif (\n\t\t\tactual.tagName !== expected.tagName &&\n\t\t\t// Optimization: Use short-circuit evaluation to defer case-\n\t\t\t// insensitive check on the assumption that the majority case will\n\t\t\t// have exactly equal tag names.\n\t\t\tactual.tagName.toLowerCase() !== expected.tagName.toLowerCase()\n\t\t) {\n\t\t\tlogger.warning(\n\t\t\t\t'Expected tag name `%s`, instead saw `%s`.',\n\t\t\t\texpected.tagName,\n\t\t\t\tactual.tagName\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\n\t\treturn isEqualTagAttributePairs(\n\t\t\t...[ actual, expected ].map( getMeaningfulAttributePairs ),\n\t\t\tlogger\n\t\t);\n\t},\n\tChars: isEquivalentTextTokens,\n\tComment: isEquivalentTextTokens,\n};\n\n/**\n * Given an array of tokens, returns the first token which is not purely\n * whitespace.\n *\n * Mutates the tokens array.\n *\n * @param {Object[]} tokens Set of tokens to search.\n *\n * @return {Object} Next non-whitespace token.\n */\nexport function getNextNonWhitespaceToken( tokens ) {\n\tlet token;\n\twhile ( ( token = tokens.shift() ) ) {\n\t\tif ( token.type !== 'Chars' ) {\n\t\t\treturn token;\n\t\t}\n\n\t\tif ( ! REGEXP_ONLY_WHITESPACE.test( token.chars ) ) {\n\t\t\treturn token;\n\t\t}\n\t}\n}\n\n/**\n * Tokenize an HTML string, gracefully handling any errors thrown during\n * underlying tokenization.\n *\n * @param {string} html HTML string to tokenize.\n * @param {Object} logger Validation logger object.\n *\n * @return {Object[]|null} Array of valid tokenized HTML elements, or null on error\n */\nfunction getHTMLTokens( html, logger = createLogger() ) {\n\ttry {\n\t\treturn new Tokenizer( new DecodeEntityParser() ).tokenize( html );\n\t} catch ( e ) {\n\t\tlogger.warning( 'Malformed HTML detected: %s', html );\n\t}\n\n\treturn null;\n}\n\n/**\n * Returns true if the next HTML token closes the current token.\n *\n * @param {Object} currentToken Current token to compare with.\n * @param {Object|undefined} nextToken Next token to compare against.\n *\n * @return {boolean} true if `nextToken` closes `currentToken`, false otherwise\n */\nexport function isClosedByToken( currentToken, nextToken ) {\n\t// Ensure this is a self closed token.\n\tif ( ! currentToken.selfClosing ) {\n\t\treturn false;\n\t}\n\n\t// Check token names and determine if nextToken is the closing tag for currentToken.\n\tif (\n\t\tnextToken &&\n\t\tnextToken.tagName === currentToken.tagName &&\n\t\tnextToken.type === 'EndTag'\n\t) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\n/**\n * Returns true if the given HTML strings are effectively equivalent, or\n * false otherwise. Invalid HTML is not considered equivalent, even if the\n * strings directly match.\n *\n * @param {string} actual Actual HTML string.\n * @param {string} expected Expected HTML string.\n * @param {Object} logger Validation logger object.\n *\n * @return {boolean} Whether HTML strings are equivalent.\n */\nexport function isEquivalentHTML( actual, expected, logger = createLogger() ) {\n\t// Short-circuit if markup is identical.\n\tif ( actual === expected ) {\n\t\treturn true;\n\t}\n\n\t// Tokenize input content and reserialized save content.\n\tconst [ actualTokens, expectedTokens ] = [\n\t\tactual,\n\t\texpected,\n\t].map( ( html ) => getHTMLTokens( html, logger ) );\n\n\t// If either is malformed then stop comparing - the strings are not equivalent.\n\tif ( ! actualTokens || ! expectedTokens ) {\n\t\treturn false;\n\t}\n\n\tlet actualToken, expectedToken;\n\twhile ( ( actualToken = getNextNonWhitespaceToken( actualTokens ) ) ) {\n\t\texpectedToken = getNextNonWhitespaceToken( expectedTokens );\n\n\t\t// Inequal if exhausted all expected tokens.\n\t\tif ( ! expectedToken ) {\n\t\t\tlogger.warning(\n\t\t\t\t'Expected end of content, instead saw %o.',\n\t\t\t\tactualToken\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\n\t\t// Inequal if next non-whitespace token of each set are not same type.\n\t\tif ( actualToken.type !== expectedToken.type ) {\n\t\t\tlogger.warning(\n\t\t\t\t'Expected token of type `%s` (%o), instead saw `%s` (%o).',\n\t\t\t\texpectedToken.type,\n\t\t\t\texpectedToken,\n\t\t\t\tactualToken.type,\n\t\t\t\tactualToken\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\n\t\t// Defer custom token type equality handling, otherwise continue and\n\t\t// assume as equal.\n\t\tconst isEqualTokens = isEqualTokensOfType[ actualToken.type ];\n\t\tif (\n\t\t\tisEqualTokens &&\n\t\t\t! isEqualTokens( actualToken, expectedToken, logger )\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Peek at the next tokens (actual and expected) to see if they close\n\t\t// a self-closing tag.\n\t\tif ( isClosedByToken( actualToken, expectedTokens[ 0 ] ) ) {\n\t\t\t// Consume the next expected token that closes the current actual\n\t\t\t// self-closing token.\n\t\t\tgetNextNonWhitespaceToken( expectedTokens );\n\t\t} else if ( isClosedByToken( expectedToken, actualTokens[ 0 ] ) ) {\n\t\t\t// Consume the next actual token that closes the current expected\n\t\t\t// self-closing token.\n\t\t\tgetNextNonWhitespaceToken( actualTokens );\n\t\t}\n\t}\n\n\tif ( ( expectedToken = getNextNonWhitespaceToken( expectedTokens ) ) ) {\n\t\t// If any non-whitespace tokens remain in expected token set, this\n\t\t// indicates inequality.\n\t\tlogger.warning(\n\t\t\t'Expected %o, instead saw end of content.',\n\t\t\texpectedToken\n\t\t);\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\n/**\n * Returns an object with `isValid` property set to `true` if the parsed block\n * is valid given the input content. A block is considered valid if, when serialized\n * with assumed attributes, the content matches the original value. If block is\n * invalid, this function returns all validations issues as well.\n *\n * @param {string|Object} blockTypeOrName Block type.\n * @param {Object} attributes Parsed block attributes.\n * @param {string} originalBlockContent Original block content.\n * @param {Object} logger Validation logger object.\n *\n * @return {Object} Whether block is valid and contains validation messages.\n */\n\n/**\n * Returns an object with `isValid` property set to `true` if the parsed block\n * is valid given the input content. A block is considered valid if, when serialized\n * with assumed attributes, the content matches the original value. If block is\n * invalid, this function returns all validations issues as well.\n *\n * @param {import('../parser').WPBlock} block block object.\n * @param {import('../registration').WPBlockType} blockTypeOrName Block type or name.\n *\n * @return {[boolean,Object]} validation results.\n */\nexport function validateBlock( block, blockTypeOrName ) {\n\tconst isFallbackBlock =\n\t\tblock.name === getFreeformContentHandlerName() ||\n\t\tblock.name === getUnregisteredTypeHandlerName();\n\n\t// Shortcut to avoid costly validation.\n\tif ( isFallbackBlock ) {\n\t\treturn [ true ];\n\t}\n\n\tconst logger = createQueuedLogger();\n\tconst blockType = normalizeBlockType( blockTypeOrName );\n\tlet generatedBlockContent;\n\ttry {\n\t\tgeneratedBlockContent = getSaveContent( blockType, block.attributes );\n\t} catch ( error ) {\n\t\tlogger.error(\n\t\t\t'Block validation failed because an error occurred while generating block content:\\n\\n%s',\n\t\t\terror.toString()\n\t\t);\n\n\t\treturn [ false, logger.getItems() ];\n\t}\n\n\tconst isValid = isEquivalentHTML(\n\t\tblock.originalContent,\n\t\tgeneratedBlockContent,\n\t\tlogger\n\t);\n\n\tif ( ! isValid ) {\n\t\tlogger.error(\n\t\t\t'Block validation failed for `%s` (%o).\\n\\nContent generated by `save` function:\\n\\n%s\\n\\nContent retrieved from post body:\\n\\n%s',\n\t\t\tblockType.name,\n\t\t\tblockType,\n\t\t\tgeneratedBlockContent,\n\t\t\tblock.originalContent\n\t\t);\n\t}\n\n\treturn [ isValid, logger.getItems() ];\n}\n\n/**\n * Returns true if the parsed block is valid given the input content. A block\n * is considered valid if, when serialized with assumed attributes, the content\n * matches the original value.\n *\n * Logs to console in development environments when invalid.\n *\n * @param {string|Object} blockTypeOrName Block type.\n * @param {Object} attributes Parsed block attributes.\n * @param {string} originalBlockContent Original block content.\n *\n * @return {boolean} Whether block is valid.\n */\nexport function isValidBlockContent(\n\tblockTypeOrName,\n\tattributes,\n\toriginalBlockContent\n) {\n\tconst blockType = normalizeBlockType( blockTypeOrName );\n\tconst block = {\n\t\tname: blockType.name,\n\t\tattributes,\n\t\tinnerBlocks: [],\n\t\toriginalContent: originalBlockContent,\n\t};\n\tconst [ isValid ] = validateBlock( block, blockType );\n\n\treturn isValid;\n}\n","/**\n * Convert legacy blocks to their canonical form. This function is used\n * both in the parser level for previous content and to convert such blocks\n * used in Custom Post Types templates.\n *\n * @param {string} name The block's name\n * @param {Object} attributes The block's attributes\n *\n * @return {[string, Object]} The block's name and attributes, changed accordingly if a match was found\n */\nexport function convertLegacyBlockNameAndAttributes( name, attributes ) {\n\tconst newAttributes = { ...attributes };\n\t// Convert 'core/cover-image' block in existing content to 'core/cover'.\n\tif ( 'core/cover-image' === name ) {\n\t\tname = 'core/cover';\n\t}\n\n\t// Convert 'core/text' blocks in existing content to 'core/paragraph'.\n\tif ( 'core/text' === name || 'core/cover-text' === name ) {\n\t\tname = 'core/paragraph';\n\t}\n\n\t// Convert derivative blocks such as 'core/social-link-wordpress' to the\n\t// canonical form 'core/social-link'.\n\tif ( name && name.indexOf( 'core/social-link-' ) === 0 ) {\n\t\t// Capture `social-link-wordpress` into `{\"service\":\"wordpress\"}`\n\t\tnewAttributes.service = name.substring( 17 );\n\t\tname = 'core/social-link';\n\t}\n\n\t// Convert derivative blocks such as 'core-embed/instagram' to the\n\t// canonical form 'core/embed'.\n\tif ( name && name.indexOf( 'core-embed/' ) === 0 ) {\n\t\t// Capture `core-embed/instagram` into `{\"providerNameSlug\":\"instagram\"}`\n\t\tconst providerSlug = name.substring( 11 );\n\t\tconst deprecated = {\n\t\t\tspeaker: 'speaker-deck',\n\t\t\tpolldaddy: 'crowdsignal',\n\t\t};\n\t\tnewAttributes.providerNameSlug =\n\t\t\tproviderSlug in deprecated\n\t\t\t\t? deprecated[ providerSlug ]\n\t\t\t\t: providerSlug;\n\t\t// This is needed as the `responsive` attribute was passed\n\t\t// in a different way before the refactoring to block variations.\n\t\tif ( ! [ 'amazon-kindle', 'wordpress' ].includes( providerSlug ) ) {\n\t\t\tnewAttributes.responsive = true;\n\t\t}\n\t\tname = 'core/embed';\n\t}\n\n\t// Convert 'core/query-loop' blocks in existing content to 'core/post-template'.\n\t// TODO: Remove this check when WordPress 5.9 is released.\n\tif ( name === 'core/query-loop' ) {\n\t\tname = 'core/post-template';\n\t}\n\n\t// Convert Post Comment blocks in existing content to Comment blocks.\n\t// TODO: Remove these checks when WordPress 6.0 is released.\n\tif ( name === 'core/post-comment-author' ) {\n\t\tname = 'core/comment-author-name';\n\t}\n\tif ( name === 'core/post-comment-content' ) {\n\t\tname = 'core/comment-content';\n\t}\n\tif ( name === 'core/post-comment-date' ) {\n\t\tname = 'core/comment-date';\n\t}\n\n\treturn [ name, newAttributes ];\n}\n","/**\n * Internal dependencies\n */\nimport { getCommentDelimitedContent } from '../serializer';\n\n/**\n * Serializes a block node into the native HTML-comment-powered block format.\n * CAVEAT: This function is intended for reserializing blocks as parsed by\n * valid parsers and skips any validation steps. This is NOT a generic\n * serialization function for in-memory blocks. For most purposes, see the\n * following functions available in the `@wordpress/blocks` package:\n *\n * @see serializeBlock\n * @see serialize\n *\n * For more on the format of block nodes as returned by valid parsers:\n *\n * @see `@wordpress/block-serialization-default-parser` package\n * @see `@wordpress/block-serialization-spec-parser` package\n *\n * @param {import(\".\").WPRawBlock} rawBlock A block node as returned by a valid parser.\n * @param {?Object} options Serialization options.\n * @param {?boolean} options.isCommentDelimited Whether to output HTML comments around blocks.\n *\n * @return {string} An HTML string representing a block.\n */\nexport function serializeRawBlock( rawBlock, options = {} ) {\n\tconst { isCommentDelimited = true } = options;\n\tconst {\n\t\tblockName,\n\t\tattrs = {},\n\t\tinnerBlocks = [],\n\t\tinnerContent = [],\n\t} = rawBlock;\n\n\tlet childIndex = 0;\n\tconst content = innerContent\n\t\t.map( ( item ) =>\n\t\t\t// `null` denotes a nested block, otherwise we have an HTML fragment.\n\t\t\titem !== null\n\t\t\t\t? item\n\t\t\t\t: serializeRawBlock( innerBlocks[ childIndex++ ], options )\n\t\t)\n\t\t.join( '\\n' )\n\t\t.replace( /\\n+/g, '\\n' )\n\t\t.trim();\n\n\treturn isCommentDelimited\n\t\t? getCommentDelimitedContent( blockName, attrs, content )\n\t\t: content;\n}\n","/**\n * Given object and string of dot-delimited path segments, returns value at\n * path or undefined if path cannot be resolved.\n *\n * @param {Object} object Lookup object\n * @param {string} path Path to resolve\n * @return {?*} Resolved value\n */\nexport default function getPath(object, path) {\n var segments = path.split('.');\n var segment;\n\n while (segment = segments.shift()) {\n if (!(segment in object)) {\n return;\n }\n\n object = object[segment];\n }\n\n return object;\n}","/**\n * Internal dependencies\n */\nimport getPath from './get-path';\n/**\n * Function returning a DOM document created by `createHTMLDocument`. The same\n * document is returned between invocations.\n *\n * @return {Document} DOM document.\n */\n\nvar getDocument = function () {\n var doc;\n return function () {\n if (!doc) {\n doc = document.implementation.createHTMLDocument('');\n }\n\n return doc;\n };\n}();\n/**\n * Given a markup string or DOM element, creates an object aligning with the\n * shape of the matchers object, or the value returned by the matcher.\n *\n * @param {(string|Element)} source Source content\n * @param {(Object|Function)} matchers Matcher function or object of matchers\n * @return {(Object|*)} Matched value(s), shaped by object\n */\n\n\nexport function parse(source, matchers) {\n if (!matchers) {\n return;\n } // Coerce to element\n\n\n if ('string' === typeof source) {\n var doc = getDocument();\n doc.body.innerHTML = source;\n source = doc.body;\n } // Return singular value\n\n\n if ('function' === typeof matchers) {\n return matchers(source);\n } // Bail if we can't handle matchers\n\n\n if (Object !== matchers.constructor) {\n return;\n } // Shape result by matcher object\n\n\n return Object.keys(matchers).reduce(function (memo, key) {\n memo[key] = parse(source, matchers[key]);\n return memo;\n }, {});\n}\n/**\n * Generates a function which matches node of type selector, returning an\n * attribute by property if the attribute exists. If no selector is passed,\n * returns property of the query element.\n *\n * @param {?string} selector Optional selector\n * @param {string} name Property name\n * @return {*} Property value\n */\n\nexport function prop(selector, name) {\n if (1 === arguments.length) {\n name = selector;\n selector = undefined;\n }\n\n return function (node) {\n var match = node;\n\n if (selector) {\n match = node.querySelector(selector);\n }\n\n if (match) {\n return getPath(match, name);\n }\n };\n}\n/**\n * Generates a function which matches node of type selector, returning an\n * attribute by name if the attribute exists. If no selector is passed,\n * returns attribute of the query element.\n *\n * @param {?string} selector Optional selector\n * @param {string} name Attribute name\n * @return {?string} Attribute value\n */\n\nexport function attr(selector, name) {\n if (1 === arguments.length) {\n name = selector;\n selector = undefined;\n }\n\n return function (node) {\n var attributes = prop(selector, 'attributes')(node);\n\n if (attributes && attributes.hasOwnProperty(name)) {\n return attributes[name].value;\n }\n };\n}\n/**\n * Convenience for `prop( selector, 'innerHTML' )`.\n *\n * @see prop()\n *\n * @param {?string} selector Optional selector\n * @return {string} Inner HTML\n */\n\nexport function html(selector) {\n return prop(selector, 'innerHTML');\n}\n/**\n * Convenience for `prop( selector, 'textContent' )`.\n *\n * @see prop()\n *\n * @param {?string} selector Optional selector\n * @return {string} Text content\n */\n\nexport function text(selector) {\n return prop(selector, 'textContent');\n}\n/**\n * Creates a new matching context by first finding elements matching selector\n * using querySelectorAll before then running another `parse` on `matchers`\n * scoped to the matched elements.\n *\n * @see parse()\n *\n * @param {string} selector Selector to match\n * @param {(Object|Function)} matchers Matcher function or object of matchers\n * @return {Array.<*,Object>} Array of matched value(s)\n */\n\nexport function query(selector, matchers) {\n return function (node) {\n var matches = node.querySelectorAll(selector);\n return [].map.call(matches, function (match) {\n return parse(match, matchers);\n });\n };\n}","/**\n * Internal dependencies\n */\nimport * as children from './children';\n\n/**\n * A representation of a single node within a block's rich text value. If\n * representing a text node, the value is simply a string of the node value.\n * As representing an element node, it is an object of:\n *\n * 1. `type` (string): Tag name.\n * 2. `props` (object): Attributes and children array of WPBlockNode.\n *\n * @typedef {string|Object} WPBlockNode\n */\n\n/**\n * Given a single node and a node type (e.g. `'br'`), returns true if the node\n * corresponds to that type, false otherwise.\n *\n * @param {WPBlockNode} node Block node to test\n * @param {string} type Node to type to test against.\n *\n * @return {boolean} Whether node is of intended type.\n */\nfunction isNodeOfType( node, type ) {\n\treturn node && node.type === type;\n}\n\n/**\n * Given an object implementing the NamedNodeMap interface, returns a plain\n * object equivalent value of name, value key-value pairs.\n *\n * @see https://dom.spec.whatwg.org/#interface-namednodemap\n *\n * @param {NamedNodeMap} nodeMap NamedNodeMap to convert to object.\n *\n * @return {Object} Object equivalent value of NamedNodeMap.\n */\nexport function getNamedNodeMapAsObject( nodeMap ) {\n\tconst result = {};\n\tfor ( let i = 0; i < nodeMap.length; i++ ) {\n\t\tconst { name, value } = nodeMap[ i ];\n\t\tresult[ name ] = value;\n\t}\n\n\treturn result;\n}\n\n/**\n * Given a DOM Element or Text node, returns an equivalent block node. Throws\n * if passed any node type other than element or text.\n *\n * @throws {TypeError} If non-element/text node is passed.\n *\n * @param {Node} domNode DOM node to convert.\n *\n * @return {WPBlockNode} Block node equivalent to DOM node.\n */\nexport function fromDOM( domNode ) {\n\tif ( domNode.nodeType === domNode.TEXT_NODE ) {\n\t\treturn domNode.nodeValue;\n\t}\n\n\tif ( domNode.nodeType !== domNode.ELEMENT_NODE ) {\n\t\tthrow new TypeError(\n\t\t\t'A block node can only be created from a node of type text or ' +\n\t\t\t\t'element.'\n\t\t);\n\t}\n\n\treturn {\n\t\ttype: domNode.nodeName.toLowerCase(),\n\t\tprops: {\n\t\t\t...getNamedNodeMapAsObject( domNode.attributes ),\n\t\t\tchildren: children.fromDOM( domNode.childNodes ),\n\t\t},\n\t};\n}\n\n/**\n * Given a block node, returns its HTML string representation.\n *\n * @param {WPBlockNode} node Block node to convert to string.\n *\n * @return {string} String HTML representation of block node.\n */\nexport function toHTML( node ) {\n\treturn children.toHTML( [ node ] );\n}\n\n/**\n * Given a selector, returns an hpq matcher generating a WPBlockNode value\n * matching the selector result.\n *\n * @param {string} selector DOM selector.\n *\n * @return {Function} hpq matcher.\n */\nexport function matcher( selector ) {\n\treturn ( domNode ) => {\n\t\tlet match = domNode;\n\n\t\tif ( selector ) {\n\t\t\tmatch = domNode.querySelector( selector );\n\t\t}\n\n\t\ttry {\n\t\t\treturn fromDOM( match );\n\t\t} catch ( error ) {\n\t\t\treturn null;\n\t\t}\n\t};\n}\n\n/**\n * Object of utility functions used in managing block attribute values of\n * source `node`.\n *\n * @see https://github.com/WordPress/gutenberg/pull/10439\n *\n * @deprecated since 4.0. The `node` source should not be used, and can be\n * replaced by the `html` source.\n *\n * @private\n */\nexport default {\n\tisNodeOfType,\n\tfromDOM,\n\ttoHTML,\n\tmatcher,\n};\n","/**\n * External dependencies\n */\nimport { castArray } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { renderToString } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport * as node from './node';\n\n/**\n * A representation of a block's rich text value.\n *\n * @typedef {WPBlockNode[]} WPBlockChildren\n */\n\n/**\n * Given block children, returns a serialize-capable WordPress element.\n *\n * @param {WPBlockChildren} children Block children object to convert.\n *\n * @return {WPElement} A serialize-capable element.\n */\nexport function getSerializeCapableElement( children ) {\n\t// The fact that block children are compatible with the element serializer is\n\t// merely an implementation detail that currently serves to be true, but\n\t// should not be mistaken as being a guarantee on the external API. The\n\t// public API only offers guarantees to work with strings (toHTML) and DOM\n\t// elements (fromDOM), and should provide utilities to manipulate the value\n\t// rather than expect consumers to inspect or construct its shape (concat).\n\treturn children;\n}\n\n/**\n * Given block children, returns an array of block nodes.\n *\n * @param {WPBlockChildren} children Block children object to convert.\n *\n * @return {Array} An array of individual block nodes.\n */\nfunction getChildrenArray( children ) {\n\t// The fact that block children are compatible with the element serializer\n\t// is merely an implementation detail that currently serves to be true, but\n\t// should not be mistaken as being a guarantee on the external API.\n\treturn children;\n}\n\n/**\n * Given two or more block nodes, returns a new block node representing a\n * concatenation of its values.\n *\n * @param {...WPBlockChildren} blockNodes Block nodes to concatenate.\n *\n * @return {WPBlockChildren} Concatenated block node.\n */\nexport function concat( ...blockNodes ) {\n\tconst result = [];\n\tfor ( let i = 0; i < blockNodes.length; i++ ) {\n\t\tconst blockNode = castArray( blockNodes[ i ] );\n\t\tfor ( let j = 0; j < blockNode.length; j++ ) {\n\t\t\tconst child = blockNode[ j ];\n\t\t\tconst canConcatToPreviousString =\n\t\t\t\ttypeof child === 'string' &&\n\t\t\t\ttypeof result[ result.length - 1 ] === 'string';\n\n\t\t\tif ( canConcatToPreviousString ) {\n\t\t\t\tresult[ result.length - 1 ] += child;\n\t\t\t} else {\n\t\t\t\tresult.push( child );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * Given an iterable set of DOM nodes, returns equivalent block children.\n * Ignores any non-element/text nodes included in set.\n *\n * @param {Iterable.} domNodes Iterable set of DOM nodes to convert.\n *\n * @return {WPBlockChildren} Block children equivalent to DOM nodes.\n */\nexport function fromDOM( domNodes ) {\n\tconst result = [];\n\tfor ( let i = 0; i < domNodes.length; i++ ) {\n\t\ttry {\n\t\t\tresult.push( node.fromDOM( domNodes[ i ] ) );\n\t\t} catch ( error ) {\n\t\t\t// Simply ignore if DOM node could not be converted.\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * Given a block node, returns its HTML string representation.\n *\n * @param {WPBlockChildren} children Block node(s) to convert to string.\n *\n * @return {string} String HTML representation of block node.\n */\nexport function toHTML( children ) {\n\tconst element = getSerializeCapableElement( children );\n\n\treturn renderToString( element );\n}\n\n/**\n * Given a selector, returns an hpq matcher generating a WPBlockChildren value\n * matching the selector result.\n *\n * @param {string} selector DOM selector.\n *\n * @return {Function} hpq matcher.\n */\nexport function matcher( selector ) {\n\treturn ( domNode ) => {\n\t\tlet match = domNode;\n\n\t\tif ( selector ) {\n\t\t\tmatch = domNode.querySelector( selector );\n\t\t}\n\n\t\tif ( match ) {\n\t\t\treturn fromDOM( match.childNodes );\n\t\t}\n\n\t\treturn [];\n\t};\n}\n\n/**\n * Object of utility functions used in managing block attribute values of\n * source `children`.\n *\n * @see https://github.com/WordPress/gutenberg/pull/10439\n *\n * @deprecated since 4.0. The `children` source should not be used, and can be\n * replaced by the `html` source.\n *\n * @private\n */\nexport default {\n\tconcat,\n\tgetChildrenArray,\n\tfromDOM,\n\ttoHTML,\n\tmatcher,\n};\n","/**\n * External dependencies\n */\nimport { parse as hpqParse } from 'hpq';\nimport { flow, mapValues, castArray } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { applyFilters } from '@wordpress/hooks';\n\n/**\n * Internal dependencies\n */\nimport { attr, html, text, query, node, children, prop } from '../matchers';\nimport { normalizeBlockType } from '../utils';\n\n/**\n * Higher-order hpq matcher which enhances an attribute matcher to return true\n * or false depending on whether the original matcher returns undefined. This\n * is useful for boolean attributes (e.g. disabled) whose attribute values may\n * be technically falsey (empty string), though their mere presence should be\n * enough to infer as true.\n *\n * @param {Function} matcher Original hpq matcher.\n *\n * @return {Function} Enhanced hpq matcher.\n */\nexport const toBooleanAttributeMatcher = ( matcher ) =>\n\tflow( [\n\t\tmatcher,\n\t\t// Expected values from `attr( 'disabled' )`:\n\t\t//\n\t\t// \n\t\t// - Value: `undefined`\n\t\t// - Transformed: `false`\n\t\t//\n\t\t// \n\t\t// - Value: `''`\n\t\t// - Transformed: `true`\n\t\t//\n\t\t// \n\t\t// - Value: `'disabled'`\n\t\t// - Transformed: `true`\n\t\t( value ) => value !== undefined,\n\t] );\n\n/**\n * Returns true if value is of the given JSON schema type, or false otherwise.\n *\n * @see http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.25\n *\n * @param {*} value Value to test.\n * @param {string} type Type to test.\n *\n * @return {boolean} Whether value is of type.\n */\nexport function isOfType( value, type ) {\n\tswitch ( type ) {\n\t\tcase 'string':\n\t\t\treturn typeof value === 'string';\n\n\t\tcase 'boolean':\n\t\t\treturn typeof value === 'boolean';\n\n\t\tcase 'object':\n\t\t\treturn !! value && value.constructor === Object;\n\n\t\tcase 'null':\n\t\t\treturn value === null;\n\n\t\tcase 'array':\n\t\t\treturn Array.isArray( value );\n\n\t\tcase 'integer':\n\t\tcase 'number':\n\t\t\treturn typeof value === 'number';\n\t}\n\n\treturn true;\n}\n\n/**\n * Returns true if value is of an array of given JSON schema types, or false\n * otherwise.\n *\n * @see http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.25\n *\n * @param {*} value Value to test.\n * @param {string[]} types Types to test.\n *\n * @return {boolean} Whether value is of types.\n */\nexport function isOfTypes( value, types ) {\n\treturn types.some( ( type ) => isOfType( value, type ) );\n}\n\n/**\n * Given an attribute key, an attribute's schema, a block's raw content and the\n * commentAttributes returns the attribute value depending on its source\n * definition of the given attribute key.\n *\n * @param {string} attributeKey Attribute key.\n * @param {Object} attributeSchema Attribute's schema.\n * @param {string} innerHTML Block's raw content.\n * @param {Object} commentAttributes Block's comment attributes.\n *\n * @return {*} Attribute value.\n */\nexport function getBlockAttribute(\n\tattributeKey,\n\tattributeSchema,\n\tinnerHTML,\n\tcommentAttributes\n) {\n\tconst { type, enum: enumSet } = attributeSchema;\n\tlet value;\n\n\tswitch ( attributeSchema.source ) {\n\t\t// An undefined source means that it's an attribute serialized to the\n\t\t// block's \"comment\".\n\t\tcase undefined:\n\t\t\tvalue = commentAttributes\n\t\t\t\t? commentAttributes[ attributeKey ]\n\t\t\t\t: undefined;\n\t\t\tbreak;\n\t\tcase 'attribute':\n\t\tcase 'property':\n\t\tcase 'html':\n\t\tcase 'text':\n\t\tcase 'children':\n\t\tcase 'node':\n\t\tcase 'query':\n\t\tcase 'tag':\n\t\t\tvalue = parseWithAttributeSchema( innerHTML, attributeSchema );\n\t\t\tbreak;\n\t}\n\n\tif ( ! isValidByType( value, type ) || ! isValidByEnum( value, enumSet ) ) {\n\t\t// Reject the value if it is not valid. Reverting to the undefined\n\t\t// value ensures the default is respected, if applicable.\n\t\tvalue = undefined;\n\t}\n\n\tif ( value === undefined ) {\n\t\treturn attributeSchema.default;\n\t}\n\n\treturn value;\n}\n\n/**\n * Returns true if value is valid per the given block attribute schema type\n * definition, or false otherwise.\n *\n * @see https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.1.1\n *\n * @param {*} value Value to test.\n * @param {?(Array|string)} type Block attribute schema type.\n *\n * @return {boolean} Whether value is valid.\n */\nexport function isValidByType( value, type ) {\n\treturn type === undefined || isOfTypes( value, castArray( type ) );\n}\n\n/**\n * Returns true if value is valid per the given block attribute schema enum\n * definition, or false otherwise.\n *\n * @see https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.1.2\n *\n * @param {*} value Value to test.\n * @param {?Array} enumSet Block attribute schema enum.\n *\n * @return {boolean} Whether value is valid.\n */\nexport function isValidByEnum( value, enumSet ) {\n\treturn ! Array.isArray( enumSet ) || enumSet.includes( value );\n}\n\n/**\n * Returns an hpq matcher given a source object.\n *\n * @param {Object} sourceConfig Attribute Source object.\n *\n * @return {Function} A hpq Matcher.\n */\nexport function matcherFromSource( sourceConfig ) {\n\tswitch ( sourceConfig.source ) {\n\t\tcase 'attribute':\n\t\t\tlet matcher = attr( sourceConfig.selector, sourceConfig.attribute );\n\t\t\tif ( sourceConfig.type === 'boolean' ) {\n\t\t\t\tmatcher = toBooleanAttributeMatcher( matcher );\n\t\t\t}\n\n\t\t\treturn matcher;\n\t\tcase 'html':\n\t\t\treturn html( sourceConfig.selector, sourceConfig.multiline );\n\t\tcase 'text':\n\t\t\treturn text( sourceConfig.selector );\n\t\tcase 'children':\n\t\t\treturn children( sourceConfig.selector );\n\t\tcase 'node':\n\t\t\treturn node( sourceConfig.selector );\n\t\tcase 'query':\n\t\t\tconst subMatchers = mapValues(\n\t\t\t\tsourceConfig.query,\n\t\t\t\tmatcherFromSource\n\t\t\t);\n\t\t\treturn query( sourceConfig.selector, subMatchers );\n\t\tcase 'tag':\n\t\t\treturn flow( [\n\t\t\t\tprop( sourceConfig.selector, 'nodeName' ),\n\t\t\t\t( nodeName ) =>\n\t\t\t\t\tnodeName ? nodeName.toLowerCase() : undefined,\n\t\t\t] );\n\t\tdefault:\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error( `Unknown source type \"${ sourceConfig.source }\"` );\n\t}\n}\n\n/**\n * Given a block's raw content and an attribute's schema returns the attribute's\n * value depending on its source.\n *\n * @param {string} innerHTML Block's raw content.\n * @param {Object} attributeSchema Attribute's schema.\n *\n * @return {*} Attribute value.\n */\nexport function parseWithAttributeSchema( innerHTML, attributeSchema ) {\n\treturn hpqParse( innerHTML, matcherFromSource( attributeSchema ) );\n}\n\n/**\n * Returns the block attributes of a registered block node given its type.\n *\n * @param {string|Object} blockTypeOrName Block type or name.\n * @param {string} innerHTML Raw block content.\n * @param {?Object} attributes Known block attributes (from delimiters).\n *\n * @return {Object} All block attributes.\n */\nexport function getBlockAttributes(\n\tblockTypeOrName,\n\tinnerHTML,\n\tattributes = {}\n) {\n\tconst blockType = normalizeBlockType( blockTypeOrName );\n\tconst blockAttributes = mapValues(\n\t\tblockType.attributes,\n\t\t( attributeSchema, attributeKey ) => {\n\t\t\treturn getBlockAttribute(\n\t\t\t\tattributeKey,\n\t\t\t\tattributeSchema,\n\t\t\t\tinnerHTML,\n\t\t\t\tattributes\n\t\t\t);\n\t\t}\n\t);\n\n\treturn applyFilters(\n\t\t'blocks.getBlockAttributes',\n\t\tblockAttributes,\n\t\tblockType,\n\t\tinnerHTML,\n\t\tattributes\n\t);\n}\n","/**\n * External dependencies\n */\nexport { attr, prop, text, query } from 'hpq';\n\n/**\n * Internal dependencies\n */\nexport { matcher as node } from './node';\nexport { matcher as children } from './children';\n\nexport function html( selector, multilineTag ) {\n\treturn ( domNode ) => {\n\t\tlet match = domNode;\n\n\t\tif ( selector ) {\n\t\t\tmatch = domNode.querySelector( selector );\n\t\t}\n\n\t\tif ( ! match ) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif ( multilineTag ) {\n\t\t\tlet value = '';\n\t\t\tconst length = match.children.length;\n\n\t\t\tfor ( let index = 0; index < length; index++ ) {\n\t\t\t\tconst child = match.children[ index ];\n\n\t\t\t\tif ( child.nodeName.toLowerCase() !== multilineTag ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tvalue += child.outerHTML;\n\t\t\t}\n\n\t\t\treturn value;\n\t\t}\n\n\t\treturn match.innerHTML;\n\t};\n}\n","/**\n * External dependencies\n */\nimport { difference, omit } from 'lodash';\n\n/**\n * Internal dependencies\n */\nimport { hasBlockSupport } from '../registration';\nimport { getSaveContent } from '../serializer';\nimport { parseWithAttributeSchema } from './get-block-attributes';\n\n/**\n * Given an HTML string, returns an array of class names assigned to the root\n * element in the markup.\n *\n * @param {string} innerHTML Markup string from which to extract classes.\n *\n * @return {string[]} Array of class names assigned to the root element.\n */\nexport function getHTMLRootElementClasses( innerHTML ) {\n\tinnerHTML = `
    ${ innerHTML }
    `;\n\n\tconst parsed = parseWithAttributeSchema( innerHTML, {\n\t\ttype: 'string',\n\t\tsource: 'attribute',\n\t\tselector: '[data-custom-class-name] > *',\n\t\tattribute: 'class',\n\t} );\n\n\treturn parsed ? parsed.trim().split( /\\s+/ ) : [];\n}\n\n/**\n * Given a parsed set of block attributes, if the block supports custom class\n * names and an unknown class (per the block's serialization behavior) is\n * found, the unknown classes are treated as custom classes. This prevents the\n * block from being considered as invalid.\n *\n * @param {Object} blockAttributes Original block attributes.\n * @param {Object} blockType Block type settings.\n * @param {string} innerHTML Original block markup.\n *\n * @return {Object} Filtered block attributes.\n */\nexport function fixCustomClassname( blockAttributes, blockType, innerHTML ) {\n\tif ( hasBlockSupport( blockType, 'customClassName', true ) ) {\n\t\t// To determine difference, serialize block given the known set of\n\t\t// attributes, with the exception of `className`. This will determine\n\t\t// the default set of classes. From there, any difference in innerHTML\n\t\t// can be considered as custom classes.\n\t\tconst attributesSansClassName = omit( blockAttributes, [\n\t\t\t'className',\n\t\t] );\n\t\tconst serialized = getSaveContent( blockType, attributesSansClassName );\n\t\tconst defaultClasses = getHTMLRootElementClasses( serialized );\n\t\tconst actualClasses = getHTMLRootElementClasses( innerHTML );\n\t\tconst customClasses = difference( actualClasses, defaultClasses );\n\n\t\tif ( customClasses.length ) {\n\t\t\tblockAttributes.className = customClasses.join( ' ' );\n\t\t} else if ( serialized ) {\n\t\t\tdelete blockAttributes.className;\n\t\t}\n\t}\n\n\treturn blockAttributes;\n}\n","/**\n * Internal dependencies\n */\nimport { fixCustomClassname } from './fix-custom-classname';\n\n/**\n * Attempts to fix block invalidation by applying build-in validation fixes\n * like moving all extra classNames to the className attribute.\n *\n * @param {WPBlock} block block object.\n * @param {import('../registration').WPBlockType} blockType Block type. This is normalize not necessary and\n * can be inferred from the block name,\n * but it's here for performance reasons.\n *\n * @return {WPBlock} Fixed block object\n */\nexport function applyBuiltInValidationFixes( block, blockType ) {\n\tconst updatedBlockAttributes = fixCustomClassname(\n\t\tblock.attributes,\n\t\tblockType,\n\t\tblock.originalContent\n\t);\n\treturn {\n\t\t...block,\n\t\tattributes: updatedBlockAttributes,\n\t};\n}\n","/**\n * WordPress dependencies\n */\nimport { parse as grammarParse } from '@wordpress/block-serialization-default-parser';\nimport { autop } from '@wordpress/autop';\n\n/**\n * Internal dependencies\n */\nimport {\n\tgetFreeformContentHandlerName,\n\tgetUnregisteredTypeHandlerName,\n\tgetBlockType,\n} from '../registration';\nimport { getSaveContent } from '../serializer';\nimport { validateBlock } from '../validation';\nimport { createBlock } from '../factory';\nimport { convertLegacyBlockNameAndAttributes } from './convert-legacy-block';\nimport { serializeRawBlock } from './serialize-raw-block';\nimport { getBlockAttributes } from './get-block-attributes';\nimport { applyBlockDeprecatedVersions } from './apply-block-deprecated-versions';\nimport { applyBuiltInValidationFixes } from './apply-built-in-validation-fixes';\n\n/**\n * The raw structure of a block includes its attributes, inner\n * blocks, and inner HTML. It is important to distinguish inner blocks from\n * the HTML content of the block as only the latter is relevant for block\n * validation and edit operations.\n *\n * @typedef WPRawBlock\n *\n * @property {string=} blockName Block name\n * @property {Object=} attrs Block raw or comment attributes.\n * @property {string} innerHTML HTML content of the block.\n * @property {(string|null)[]} innerContent Content without inner blocks.\n * @property {WPRawBlock[]} innerBlocks Inner Blocks.\n */\n\n/**\n * Fully parsed block object.\n *\n * @typedef WPBlock\n *\n * @property {string} name Block name\n * @property {Object } attributes Block raw or comment attributes.\n * @property {WPBlock[]} innerBlocks Inner Blocks.\n * @property {string} originalContent Original content of the block before validation fixes.\n * @property {boolean} isValid Whether the block is valid.\n * @property {Object[]} validationIssues Validation issues.\n */\n\n/**\n * Convert legacy blocks to their canonical form. This function is used\n * both in the parser level for previous content and to convert such blocks\n * used in Custom Post Types templates.\n *\n * @param {WPRawBlock} rawBlock\n *\n * @return {WPRawBlock} The block's name and attributes, changed accordingly if a match was found\n */\nfunction convertLegacyBlocks( rawBlock ) {\n\tconst [\n\t\tcorrectName,\n\t\tcorrectedAttributes,\n\t] = convertLegacyBlockNameAndAttributes(\n\t\trawBlock.blockName,\n\t\trawBlock.attrs\n\t);\n\treturn {\n\t\t...rawBlock,\n\t\tblockName: correctName,\n\t\tattrs: correctedAttributes,\n\t};\n}\n\n/**\n * Normalize the raw block by applying the fallback block name if none given,\n * sanitize the parsed HTML...\n *\n * @param {WPRawBlock} rawBlock The raw block object.\n *\n * @return {WPRawBlock} The normalized block object.\n */\nexport function normalizeRawBlock( rawBlock ) {\n\tconst fallbackBlockName = getFreeformContentHandlerName();\n\n\t// If the grammar parsing don't produce any block name, use the freeform block.\n\tconst rawBlockName = rawBlock.blockName || getFreeformContentHandlerName();\n\tconst rawAttributes = rawBlock.attrs || {};\n\tconst rawInnerBlocks = rawBlock.innerBlocks || [];\n\tlet rawInnerHTML = rawBlock.innerHTML.trim();\n\n\t// Fallback content may be upgraded from classic content expecting implicit\n\t// automatic paragraphs, so preserve them. Assumes wpautop is idempotent,\n\t// meaning there are no negative consequences to repeated autop calls.\n\tif ( rawBlockName === fallbackBlockName ) {\n\t\trawInnerHTML = autop( rawInnerHTML ).trim();\n\t}\n\n\treturn {\n\t\t...rawBlock,\n\t\tblockName: rawBlockName,\n\t\tattrs: rawAttributes,\n\t\tinnerHTML: rawInnerHTML,\n\t\tinnerBlocks: rawInnerBlocks,\n\t};\n}\n\n/**\n * Uses the \"unregistered blockType\" to create a block object.\n *\n * @param {WPRawBlock} rawBlock block.\n *\n * @return {WPRawBlock} The unregistered block object.\n */\nfunction createMissingBlockType( rawBlock ) {\n\tconst unregisteredFallbackBlock =\n\t\tgetUnregisteredTypeHandlerName() || getFreeformContentHandlerName();\n\n\t// Preserve undelimited content for use by the unregistered type\n\t// handler. A block node's `innerHTML` isn't enough, as that field only\n\t// carries the block's own HTML and not its nested blocks.\n\tconst originalUndelimitedContent = serializeRawBlock( rawBlock, {\n\t\tisCommentDelimited: false,\n\t} );\n\n\t// Preserve full block content for use by the unregistered type\n\t// handler, block boundaries included.\n\tconst originalContent = serializeRawBlock( rawBlock, {\n\t\tisCommentDelimited: true,\n\t} );\n\n\treturn {\n\t\tblockName: unregisteredFallbackBlock,\n\t\tattrs: {\n\t\t\toriginalName: rawBlock.blockName,\n\t\t\toriginalContent,\n\t\t\toriginalUndelimitedContent,\n\t\t},\n\t\tinnerHTML: rawBlock.blockName ? originalContent : rawBlock.innerHTML,\n\t\tinnerBlocks: rawBlock.innerBlocks,\n\t\tinnerContent: rawBlock.innerContent,\n\t};\n}\n\n/**\n * Validates a block and wraps with validation meta.\n *\n * The name here is regrettable but `validateBlock` is already taken.\n *\n * @param {WPBlock} unvalidatedBlock\n * @param {import('../registration').WPBlockType} blockType\n * @return {WPBlock} validated block, with auto-fixes if initially invalid\n */\nfunction applyBlockValidation( unvalidatedBlock, blockType ) {\n\t// Attempt to validate the block.\n\tconst [ isValid ] = validateBlock( unvalidatedBlock, blockType );\n\n\tif ( isValid ) {\n\t\treturn { ...unvalidatedBlock, isValid, validationIssues: [] };\n\t}\n\n\t// If the block is invalid, attempt some built-in fixes\n\t// like custom classNames handling.\n\tconst fixedBlock = applyBuiltInValidationFixes(\n\t\tunvalidatedBlock,\n\t\tblockType\n\t);\n\t// Attempt to validate the block once again after the built-in fixes.\n\tconst [ isFixedValid, validationIssues ] = validateBlock(\n\t\tunvalidatedBlock,\n\t\tblockType\n\t);\n\n\treturn { ...fixedBlock, isValid: isFixedValid, validationIssues };\n}\n\n/**\n * Given a raw block returned by grammar parsing, returns a fully parsed block.\n *\n * @param {WPRawBlock} rawBlock The raw block object.\n *\n * @return {WPBlock} Fully parsed block.\n */\nexport function parseRawBlock( rawBlock ) {\n\tlet normalizedBlock = normalizeRawBlock( rawBlock );\n\n\t// During the lifecycle of the project, we renamed some old blocks\n\t// and transformed others to new blocks. To avoid breaking existing content,\n\t// we added this function to properly parse the old content.\n\tnormalizedBlock = convertLegacyBlocks( normalizedBlock );\n\n\t// Try finding the type for known block name.\n\tlet blockType = getBlockType( normalizedBlock.blockName );\n\n\t// If not blockType is found for the specified name, fallback to the \"unregistedBlockType\".\n\tif ( ! blockType ) {\n\t\tnormalizedBlock = createMissingBlockType( normalizedBlock );\n\t\tblockType = getBlockType( normalizedBlock.blockName );\n\t}\n\n\t// If it's an empty freeform block or there's no blockType (no missing block handler)\n\t// Then, just ignore the block.\n\t// It might be a good idea to throw a warning here.\n\t// TODO: I'm unsure about the unregisteredFallbackBlock check,\n\t// it might ignore some dynamic unregistered third party blocks wrongly.\n\tconst isFallbackBlock =\n\t\tnormalizedBlock.blockName === getFreeformContentHandlerName() ||\n\t\tnormalizedBlock.blockName === getUnregisteredTypeHandlerName();\n\tif ( ! blockType || ( ! normalizedBlock.innerHTML && isFallbackBlock ) ) {\n\t\treturn;\n\t}\n\n\t// Parse inner blocks recursively.\n\tconst parsedInnerBlocks = normalizedBlock.innerBlocks\n\t\t.map( parseRawBlock )\n\t\t// See https://github.com/WordPress/gutenberg/pull/17164.\n\t\t.filter( ( innerBlock ) => !! innerBlock );\n\n\t// Get the fully parsed block.\n\tconst parsedBlock = createBlock(\n\t\tnormalizedBlock.blockName,\n\t\tgetBlockAttributes(\n\t\t\tblockType,\n\t\t\tnormalizedBlock.innerHTML,\n\t\t\tnormalizedBlock.attrs\n\t\t),\n\t\tparsedInnerBlocks\n\t);\n\tparsedBlock.originalContent = normalizedBlock.innerHTML;\n\n\tconst validatedBlock = applyBlockValidation( parsedBlock, blockType );\n\tconst { validationIssues } = validatedBlock;\n\n\t// Run the block deprecation and migrations.\n\t// This is performed on both invalid and valid blocks because\n\t// migration using the `migrate` functions should run even\n\t// if the output is deemed valid.\n\tconst updatedBlock = applyBlockDeprecatedVersions(\n\t\tvalidatedBlock,\n\t\tnormalizedBlock,\n\t\tblockType\n\t);\n\n\tif ( ! validatedBlock.isValid && updatedBlock.isValid ) {\n\t\t/* eslint-disable no-console */\n\t\tconsole.groupCollapsed( 'Updated Block: %s', blockType.name );\n\t\tconsole.info(\n\t\t\t'Block successfully updated for `%s` (%o).\\n\\nNew content generated by `save` function:\\n\\n%s\\n\\nContent retrieved from post body:\\n\\n%s',\n\t\t\tblockType.name,\n\t\t\tblockType,\n\t\t\tgetSaveContent( blockType, updatedBlock.attributes ),\n\t\t\tupdatedBlock.originalContent\n\t\t);\n\t\tconsole.groupEnd();\n\t\t/* eslint-enable no-console */\n\t} else if ( ! validatedBlock.isValid && ! updatedBlock.isValid ) {\n\t\tvalidationIssues.forEach( ( { log, args } ) => log( ...args ) );\n\t}\n\n\treturn updatedBlock;\n}\n\n/**\n * Utilizes an optimized token-driven parser based on the Gutenberg grammar spec\n * defined through a parsing expression grammar to take advantage of the regular\n * cadence provided by block delimiters -- composed syntactically through HTML\n * comments -- which, given a general HTML document as an input, returns a block\n * list array representation.\n *\n * This is a recursive-descent parser that scans linearly once through the input\n * document. Instead of directly recursing it utilizes a trampoline mechanism to\n * prevent stack overflow. This initial pass is mainly interested in separating\n * and isolating the blocks serialized in the document and manifestly not in the\n * content within the blocks.\n *\n * @see\n * https://developer.wordpress.org/block-editor/packages/packages-block-serialization-default-parser/\n *\n * @param {string} content The post content.\n *\n * @return {Array} Block list.\n */\nexport default function parse( content ) {\n\treturn grammarParse( content ).reduce( ( accumulator, rawBlock ) => {\n\t\tconst block = parseRawBlock( rawBlock );\n\t\tif ( block ) {\n\t\t\taccumulator.push( block );\n\t\t}\n\t\treturn accumulator;\n\t}, [] );\n}\n","/**\n * External dependencies\n */\nimport { omit, stubFalse, castArray } from 'lodash';\n\n/**\n * Internal dependencies\n */\nimport { DEPRECATED_ENTRY_KEYS } from '../constants';\nimport { validateBlock } from '../validation';\nimport { getBlockAttributes } from './get-block-attributes';\nimport { applyBuiltInValidationFixes } from './apply-built-in-validation-fixes';\n\n/**\n * Given a block object, returns a new copy of the block with any applicable\n * deprecated migrations applied, or the original block if it was both valid\n * and no eligible migrations exist.\n *\n * @param {import(\".\").WPBlock} block Parsed and invalid block object.\n * @param {import(\".\").WPRawBlock} rawBlock Raw block object.\n * @param {import('../registration').WPBlockType} blockType Block type. This is normalize not necessary and\n * can be inferred from the block name,\n * but it's here for performance reasons.\n *\n * @return {import(\".\").WPBlock} Migrated block object.\n */\nexport function applyBlockDeprecatedVersions( block, rawBlock, blockType ) {\n\tconst parsedAttributes = rawBlock.attrs;\n\tconst { deprecated: deprecatedDefinitions } = blockType;\n\t// Bail early if there are no registered deprecations to be handled.\n\tif ( ! deprecatedDefinitions || ! deprecatedDefinitions.length ) {\n\t\treturn block;\n\t}\n\n\t// By design, blocks lack any sort of version tracking. Instead, to process\n\t// outdated content the system operates a queue out of all the defined\n\t// attribute shapes and tries each definition until the input produces a\n\t// valid result. This mechanism seeks to avoid polluting the user-space with\n\t// machine-specific code. An invalid block is thus a block that could not be\n\t// matched successfully with any of the registered deprecation definitions.\n\tfor ( let i = 0; i < deprecatedDefinitions.length; i++ ) {\n\t\t// A block can opt into a migration even if the block is valid by\n\t\t// defining `isEligible` on its deprecation. If the block is both valid\n\t\t// and does not opt to migrate, skip.\n\t\tconst { isEligible = stubFalse } = deprecatedDefinitions[ i ];\n\t\tif (\n\t\t\tblock.isValid &&\n\t\t\t! isEligible( parsedAttributes, block.innerBlocks )\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Block type properties which could impact either serialization or\n\t\t// parsing are not considered in the deprecated block type by default,\n\t\t// and must be explicitly provided.\n\t\tconst deprecatedBlockType = Object.assign(\n\t\t\tomit( blockType, DEPRECATED_ENTRY_KEYS ),\n\t\t\tdeprecatedDefinitions[ i ]\n\t\t);\n\n\t\tlet migratedBlock = {\n\t\t\t...block,\n\t\t\tattributes: getBlockAttributes(\n\t\t\t\tdeprecatedBlockType,\n\t\t\t\tblock.originalContent,\n\t\t\t\tparsedAttributes\n\t\t\t),\n\t\t};\n\n\t\t// Ignore the deprecation if it produces a block which is not valid.\n\t\tlet [ isValid ] = validateBlock( migratedBlock, deprecatedBlockType );\n\n\t\t// If the migrated block is not valid initially, try the built-in fixes.\n\t\tif ( ! isValid ) {\n\t\t\tmigratedBlock = applyBuiltInValidationFixes(\n\t\t\t\tmigratedBlock,\n\t\t\t\tdeprecatedBlockType\n\t\t\t);\n\t\t\t[ isValid ] = validateBlock( migratedBlock, deprecatedBlockType );\n\t\t}\n\n\t\t// An invalid block does not imply incorrect HTML but the fact block\n\t\t// source information could be lost on re-serialization.\n\t\tif ( ! isValid ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet migratedInnerBlocks = migratedBlock.innerBlocks;\n\t\tlet migratedAttributes = migratedBlock.attributes;\n\n\t\t// A block may provide custom behavior to assign new attributes and/or\n\t\t// inner blocks.\n\t\tconst { migrate } = deprecatedBlockType;\n\t\tif ( migrate ) {\n\t\t\t[\n\t\t\t\tmigratedAttributes = parsedAttributes,\n\t\t\t\tmigratedInnerBlocks = block.innerBlocks,\n\t\t\t] = castArray( migrate( migratedAttributes, block.innerBlocks ) );\n\t\t}\n\n\t\tblock = {\n\t\t\t...block,\n\t\t\tattributes: migratedAttributes,\n\t\t\tinnerBlocks: migratedInnerBlocks,\n\t\t\tisValid: true,\n\t\t\tvalidationIssues: [],\n\t\t};\n\t}\n\n\treturn block;\n}\n","var __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"deprecated\"];","/**\n * External dependencies\n */\nimport { filter } from 'lodash';\n\n/**\n * Internal dependencies\n */\nimport { getBlockTransforms } from '../factory';\n\nexport function getRawTransforms() {\n\treturn filter( getBlockTransforms( 'from' ), { type: 'raw' } ).map(\n\t\t( transform ) => {\n\t\t\treturn transform.isMatch\n\t\t\t\t? transform\n\t\t\t\t: {\n\t\t\t\t\t\t...transform,\n\t\t\t\t\t\tisMatch: ( node ) =>\n\t\t\t\t\t\t\ttransform.selector &&\n\t\t\t\t\t\t\tnode.matches( transform.selector ),\n\t\t\t\t };\n\t\t}\n\t);\n}\n","/**\n * Internal dependencies\n */\nimport { createBlock, findTransform } from '../factory';\nimport { getBlockAttributes } from '../parser/get-block-attributes';\nimport { getRawTransforms } from './get-raw-transforms';\n\n/**\n * Converts HTML directly to blocks. Looks for a matching transform for each\n * top-level tag. The HTML should be filtered to not have any text between\n * top-level tags and formatted in a way that blocks can handle the HTML.\n *\n * @param {string} html HTML to convert.\n *\n * @return {Array} An array of blocks.\n */\nexport function htmlToBlocks( html ) {\n\tconst doc = document.implementation.createHTMLDocument( '' );\n\n\tdoc.body.innerHTML = html;\n\n\treturn Array.from( doc.body.children ).flatMap( ( node ) => {\n\t\tconst rawTransform = findTransform(\n\t\t\tgetRawTransforms(),\n\t\t\t( { isMatch } ) => isMatch( node )\n\t\t);\n\n\t\tif ( ! rawTransform ) {\n\t\t\treturn createBlock(\n\t\t\t\t// Should not be hardcoded.\n\t\t\t\t'core/html',\n\t\t\t\tgetBlockAttributes( 'core/html', node.outerHTML )\n\t\t\t);\n\t\t}\n\n\t\tconst { transform, blockName } = rawTransform;\n\n\t\tif ( transform ) {\n\t\t\treturn transform( node );\n\t\t}\n\n\t\treturn createBlock(\n\t\t\tblockName,\n\t\t\tgetBlockAttributes( blockName, node.outerHTML )\n\t\t);\n\t} );\n}\n","/**\n * WordPress dependencies\n */\nimport { isEmpty, isPhrasingContent } from '@wordpress/dom';\n\nexport default function normaliseBlocks( HTML ) {\n\tconst decuDoc = document.implementation.createHTMLDocument( '' );\n\tconst accuDoc = document.implementation.createHTMLDocument( '' );\n\n\tconst decu = decuDoc.body;\n\tconst accu = accuDoc.body;\n\n\tdecu.innerHTML = HTML;\n\n\twhile ( decu.firstChild ) {\n\t\tconst node = decu.firstChild;\n\n\t\t// Text nodes: wrap in a paragraph, or append to previous.\n\t\tif ( node.nodeType === node.TEXT_NODE ) {\n\t\t\tif ( isEmpty( node ) ) {\n\t\t\t\tdecu.removeChild( node );\n\t\t\t} else {\n\t\t\t\tif ( ! accu.lastChild || accu.lastChild.nodeName !== 'P' ) {\n\t\t\t\t\taccu.appendChild( accuDoc.createElement( 'P' ) );\n\t\t\t\t}\n\n\t\t\t\taccu.lastChild.appendChild( node );\n\t\t\t}\n\t\t\t// Element nodes.\n\t\t} else if ( node.nodeType === node.ELEMENT_NODE ) {\n\t\t\t// BR nodes: create a new paragraph on double, or append to previous.\n\t\t\tif ( node.nodeName === 'BR' ) {\n\t\t\t\tif ( node.nextSibling && node.nextSibling.nodeName === 'BR' ) {\n\t\t\t\t\taccu.appendChild( accuDoc.createElement( 'P' ) );\n\t\t\t\t\tdecu.removeChild( node.nextSibling );\n\t\t\t\t}\n\n\t\t\t\t// Don't append to an empty paragraph.\n\t\t\t\tif (\n\t\t\t\t\taccu.lastChild &&\n\t\t\t\t\taccu.lastChild.nodeName === 'P' &&\n\t\t\t\t\taccu.lastChild.hasChildNodes()\n\t\t\t\t) {\n\t\t\t\t\taccu.lastChild.appendChild( node );\n\t\t\t\t} else {\n\t\t\t\t\tdecu.removeChild( node );\n\t\t\t\t}\n\t\t\t} else if ( node.nodeName === 'P' ) {\n\t\t\t\t// Only append non-empty paragraph nodes.\n\t\t\t\tif ( isEmpty( node ) ) {\n\t\t\t\t\tdecu.removeChild( node );\n\t\t\t\t} else {\n\t\t\t\t\taccu.appendChild( node );\n\t\t\t\t}\n\t\t\t} else if ( isPhrasingContent( node ) ) {\n\t\t\t\tif ( ! accu.lastChild || accu.lastChild.nodeName !== 'P' ) {\n\t\t\t\t\taccu.appendChild( accuDoc.createElement( 'P' ) );\n\t\t\t\t}\n\t\t\t\taccu.lastChild.appendChild( node );\n\t\t\t} else {\n\t\t\t\taccu.appendChild( node );\n\t\t\t}\n\t\t} else {\n\t\t\tdecu.removeChild( node );\n\t\t}\n\t}\n\n\treturn accu.innerHTML;\n}\n","/**\n * WordPress dependencies\n */\nimport { remove, replace } from '@wordpress/dom';\n\n/**\n * Looks for `` and `` comments, as well as the\n * `` variant and its `` companion,\n * and replaces them with a custom element representing a future block.\n *\n * The custom element is a way to bypass the rest of the `raw-handling`\n * transforms, which would eliminate other kinds of node with which to carry\n * ``'s data: nodes with `data` attributes, empty paragraphs, etc.\n *\n * The custom element is then expected to be recognized by any registered\n * block's `raw` transform.\n *\n * @param {Node} node The node to be processed.\n * @param {Document} doc The document of the node.\n * @return {void}\n */\nexport default function specialCommentConverter( node, doc ) {\n\tif ( node.nodeType !== node.COMMENT_NODE ) {\n\t\treturn;\n\t}\n\n\tif ( node.nodeValue === 'nextpage' ) {\n\t\treplace( node, createNextpage( doc ) );\n\t\treturn;\n\t}\n\n\tif ( node.nodeValue.indexOf( 'more' ) === 0 ) {\n\t\t// Grab any custom text in the comment.\n\t\tconst customText = node.nodeValue.slice( 4 ).trim();\n\n\t\t/*\n\t\t * When a `` comment is found, we need to look for any\n\t\t * `` sibling, but it may not be a direct sibling\n\t\t * (whitespace typically lies in between)\n\t\t */\n\t\tlet sibling = node;\n\t\tlet noTeaser = false;\n\t\twhile ( ( sibling = sibling.nextSibling ) ) {\n\t\t\tif (\n\t\t\t\tsibling.nodeType === sibling.COMMENT_NODE &&\n\t\t\t\tsibling.nodeValue === 'noteaser'\n\t\t\t) {\n\t\t\t\tnoTeaser = true;\n\t\t\t\tremove( sibling );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treplace( node, createMore( customText, noTeaser, doc ) );\n\t}\n}\n\nfunction createMore( customText, noTeaser, doc ) {\n\tconst node = doc.createElement( 'wp-block' );\n\tnode.dataset.block = 'core/more';\n\tif ( customText ) {\n\t\tnode.dataset.customText = customText;\n\t}\n\tif ( noTeaser ) {\n\t\t// \"Boolean\" data attribute.\n\t\tnode.dataset.noTeaser = '';\n\t}\n\treturn node;\n}\n\nfunction createNextpage( doc ) {\n\tconst node = doc.createElement( 'wp-block' );\n\tnode.dataset.block = 'core/nextpage';\n\n\treturn node;\n}\n","/**\n * WordPress dependencies\n */\nimport { unwrap } from '@wordpress/dom';\n\nfunction isList( node ) {\n\treturn node.nodeName === 'OL' || node.nodeName === 'UL';\n}\n\nfunction shallowTextContent( element ) {\n\treturn Array.from( element.childNodes )\n\t\t.map( ( { nodeValue = '' } ) => nodeValue )\n\t\t.join( '' );\n}\n\nexport default function listReducer( node ) {\n\tif ( ! isList( node ) ) {\n\t\treturn;\n\t}\n\n\tconst list = node;\n\tconst prevElement = node.previousElementSibling;\n\n\t// Merge with previous list if:\n\t// * There is a previous list of the same type.\n\t// * There is only one list item.\n\tif (\n\t\tprevElement &&\n\t\tprevElement.nodeName === node.nodeName &&\n\t\tlist.children.length === 1\n\t) {\n\t\t// Move all child nodes, including any text nodes, if any.\n\t\twhile ( list.firstChild ) {\n\t\t\tprevElement.appendChild( list.firstChild );\n\t\t}\n\n\t\tlist.parentNode.removeChild( list );\n\t}\n\n\tconst parentElement = node.parentNode;\n\n\t// Nested list with empty parent item.\n\tif (\n\t\tparentElement &&\n\t\tparentElement.nodeName === 'LI' &&\n\t\tparentElement.children.length === 1 &&\n\t\t! /\\S/.test( shallowTextContent( parentElement ) )\n\t) {\n\t\tconst parentListItem = parentElement;\n\t\tconst prevListItem = parentListItem.previousElementSibling;\n\t\tconst parentList = parentListItem.parentNode;\n\n\t\tif ( prevListItem ) {\n\t\t\tprevListItem.appendChild( list );\n\t\t\tparentList.removeChild( parentListItem );\n\t\t} else {\n\t\t\tparentList.parentNode.insertBefore( list, parentList );\n\t\t\tparentList.parentNode.removeChild( parentList );\n\t\t}\n\t}\n\n\t// Invalid: OL/UL > OL/UL.\n\tif ( parentElement && isList( parentElement ) ) {\n\t\tconst prevListItem = node.previousElementSibling;\n\n\t\tif ( prevListItem ) {\n\t\t\tprevListItem.appendChild( node );\n\t\t} else {\n\t\t\tunwrap( node );\n\t\t}\n\t}\n}\n","/**\n * Internal dependencies\n */\nimport normaliseBlocks from './normalise-blocks';\n\nexport default function blockquoteNormaliser( node ) {\n\tif ( node.nodeName !== 'BLOCKQUOTE' ) {\n\t\treturn;\n\t}\n\n\tnode.innerHTML = normaliseBlocks( node.innerHTML );\n}\n","/**\n * External dependencies\n */\nimport { has } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { isTextContent } from '@wordpress/dom';\n\n/**\n * Whether or not the given node is figure content.\n *\n * @param {Node} node The node to check.\n * @param {Object} schema The schema to use.\n *\n * @return {boolean} True if figure content, false if not.\n */\nfunction isFigureContent( node, schema ) {\n\tconst tag = node.nodeName.toLowerCase();\n\n\t// We are looking for tags that can be a child of the figure tag, excluding\n\t// `figcaption` and any phrasing content.\n\tif ( tag === 'figcaption' || isTextContent( node ) ) {\n\t\treturn false;\n\t}\n\n\treturn has( schema, [ 'figure', 'children', tag ] );\n}\n\n/**\n * Whether or not the given node can have an anchor.\n *\n * @param {Node} node The node to check.\n * @param {Object} schema The schema to use.\n *\n * @return {boolean} True if it can, false if not.\n */\nfunction canHaveAnchor( node, schema ) {\n\tconst tag = node.nodeName.toLowerCase();\n\n\treturn has( schema, [ 'figure', 'children', 'a', 'children', tag ] );\n}\n\n/**\n * Wraps the given element in a figure element.\n *\n * @param {Element} element The element to wrap.\n * @param {Element} beforeElement The element before which to place the figure.\n */\nfunction wrapFigureContent( element, beforeElement = element ) {\n\tconst figure = element.ownerDocument.createElement( 'figure' );\n\tbeforeElement.parentNode.insertBefore( figure, beforeElement );\n\tfigure.appendChild( element );\n}\n\n/**\n * This filter takes figure content out of paragraphs, wraps it in a figure\n * element, and moves any anchors with it if needed.\n *\n * @param {Node} node The node to filter.\n * @param {Document} doc The document of the node.\n * @param {Object} schema The schema to use.\n *\n * @return {void}\n */\nexport default function figureContentReducer( node, doc, schema ) {\n\tif ( ! isFigureContent( node, schema ) ) {\n\t\treturn;\n\t}\n\n\tlet nodeToInsert = node;\n\tconst parentNode = node.parentNode;\n\n\t// If the figure content can have an anchor and its parent is an anchor with\n\t// only the figure content, take the anchor out instead of just the content.\n\tif (\n\t\tcanHaveAnchor( node, schema ) &&\n\t\tparentNode.nodeName === 'A' &&\n\t\tparentNode.childNodes.length === 1\n\t) {\n\t\tnodeToInsert = node.parentNode;\n\t}\n\n\tconst wrapper = nodeToInsert.closest( 'p,div' );\n\n\t// If wrapped in a paragraph or div, only extract if it's aligned or if\n\t// there is no text content.\n\t// Otherwise, if directly at the root, wrap in a figure element.\n\tif ( wrapper ) {\n\t\t// In jsdom-jscore, 'node.classList' can be undefined.\n\t\t// In this case, default to extract as it offers a better UI experience on mobile.\n\t\tif ( ! node.classList ) {\n\t\t\twrapFigureContent( nodeToInsert, wrapper );\n\t\t} else if (\n\t\t\tnode.classList.contains( 'alignright' ) ||\n\t\t\tnode.classList.contains( 'alignleft' ) ||\n\t\t\tnode.classList.contains( 'aligncenter' ) ||\n\t\t\t! wrapper.textContent.trim()\n\t\t) {\n\t\t\twrapFigureContent( nodeToInsert, wrapper );\n\t\t}\n\t} else if ( nodeToInsert.parentNode.nodeName === 'BODY' ) {\n\t\twrapFigureContent( nodeToInsert );\n\t}\n}\n","var __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"shortcode\"];","/**\n * External dependencies\n */\nimport { some, castArray, find, mapValues, pickBy, includes } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { regexp, next } from '@wordpress/shortcode';\n\n/**\n * Internal dependencies\n */\nimport { createBlock, getBlockTransforms, findTransform } from '../factory';\nimport { getBlockType } from '../registration';\nimport { getBlockAttributes } from '../parser/get-block-attributes';\nimport { applyBuiltInValidationFixes } from '../parser/apply-built-in-validation-fixes';\n\nfunction segmentHTMLToShortcodeBlock(\n\tHTML,\n\tlastIndex = 0,\n\texcludedBlockNames = []\n) {\n\t// Get all matches.\n\tconst transformsFrom = getBlockTransforms( 'from' );\n\n\tconst transformation = findTransform(\n\t\ttransformsFrom,\n\t\t( transform ) =>\n\t\t\texcludedBlockNames.indexOf( transform.blockName ) === -1 &&\n\t\t\ttransform.type === 'shortcode' &&\n\t\t\tsome( castArray( transform.tag ), ( tag ) =>\n\t\t\t\tregexp( tag ).test( HTML )\n\t\t\t)\n\t);\n\n\tif ( ! transformation ) {\n\t\treturn [ HTML ];\n\t}\n\n\tconst transformTags = castArray( transformation.tag );\n\tconst transformTag = find( transformTags, ( tag ) =>\n\t\tregexp( tag ).test( HTML )\n\t);\n\n\tlet match;\n\tconst previousIndex = lastIndex;\n\n\tif ( ( match = next( transformTag, HTML, lastIndex ) ) ) {\n\t\tlastIndex = match.index + match.content.length;\n\t\tconst beforeHTML = HTML.substr( 0, match.index );\n\t\tconst afterHTML = HTML.substr( lastIndex );\n\n\t\t// If the shortcode content does not contain HTML and the shortcode is\n\t\t// not on a new line (or in paragraph from Markdown converter),\n\t\t// consider the shortcode as inline text, and thus skip conversion for\n\t\t// this segment.\n\t\tif (\n\t\t\t! includes( match.shortcode.content || '', '<' ) &&\n\t\t\t! (\n\t\t\t\t/(\\n|

    )\\s*$/.test( beforeHTML ) &&\n\t\t\t\t/^\\s*(\\n|<\\/p>)/.test( afterHTML )\n\t\t\t)\n\t\t) {\n\t\t\treturn segmentHTMLToShortcodeBlock( HTML, lastIndex );\n\t\t}\n\n\t\t// If a transformation's `isMatch` predicate fails for the inbound\n\t\t// shortcode, try again by excluding the current block type.\n\t\t//\n\t\t// This is the only call to `segmentHTMLToShortcodeBlock` that should\n\t\t// ever carry over `excludedBlockNames`. Other calls in the module\n\t\t// should skip that argument as a way to reset the exclusion state, so\n\t\t// that one `isMatch` fail in an HTML fragment doesn't prevent any\n\t\t// valid matches in subsequent fragments.\n\t\tif (\n\t\t\ttransformation.isMatch &&\n\t\t\t! transformation.isMatch( match.shortcode.attrs )\n\t\t) {\n\t\t\treturn segmentHTMLToShortcodeBlock( HTML, previousIndex, [\n\t\t\t\t...excludedBlockNames,\n\t\t\t\ttransformation.blockName,\n\t\t\t] );\n\t\t}\n\n\t\tconst attributes = mapValues(\n\t\t\tpickBy( transformation.attributes, ( schema ) => schema.shortcode ),\n\t\t\t// Passing all of `match` as second argument is intentionally broad\n\t\t\t// but shouldn't be too relied upon.\n\t\t\t//\n\t\t\t// See: https://github.com/WordPress/gutenberg/pull/3610#discussion_r152546926\n\t\t\t( schema ) => schema.shortcode( match.shortcode.attrs, match )\n\t\t);\n\n\t\tconst transformationBlockType = {\n\t\t\t...getBlockType( transformation.blockName ),\n\t\t\tattributes: transformation.attributes,\n\t\t};\n\n\t\tlet block = createBlock(\n\t\t\ttransformation.blockName,\n\t\t\tgetBlockAttributes(\n\t\t\t\ttransformationBlockType,\n\t\t\t\tmatch.shortcode.content,\n\t\t\t\tattributes\n\t\t\t)\n\t\t);\n\t\tblock.originalContent = match.shortcode.content;\n\t\t// Applying the built-in fixes can enhance the attributes with missing content like \"className\".\n\t\tblock = applyBuiltInValidationFixes( block, transformationBlockType );\n\n\t\treturn [\n\t\t\t...segmentHTMLToShortcodeBlock( beforeHTML ),\n\t\t\tblock,\n\t\t\t...segmentHTMLToShortcodeBlock( afterHTML ),\n\t\t];\n\t}\n\n\treturn [ HTML ];\n}\n\nexport default segmentHTMLToShortcodeBlock;\n","/**\n * External dependencies\n */\nimport { mapValues, mergeWith, isFunction } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { isPhrasingContent, getPhrasingContentSchema } from '@wordpress/dom';\n\n/**\n * Internal dependencies\n */\nimport { hasBlockSupport } from '..';\nimport { getRawTransforms } from './get-raw-transforms';\n\nexport function getBlockContentSchemaFromTransforms( transforms, context ) {\n\tconst phrasingContentSchema = getPhrasingContentSchema( context );\n\tconst schemaArgs = { phrasingContentSchema, isPaste: context === 'paste' };\n\tconst schemas = transforms.map( ( { isMatch, blockName, schema } ) => {\n\t\tconst hasAnchorSupport = hasBlockSupport( blockName, 'anchor' );\n\n\t\tschema = isFunction( schema ) ? schema( schemaArgs ) : schema;\n\n\t\t// If the block does not has anchor support and the transform does not\n\t\t// provides an isMatch we can return the schema right away.\n\t\tif ( ! hasAnchorSupport && ! isMatch ) {\n\t\t\treturn schema;\n\t\t}\n\n\t\treturn mapValues( schema, ( value ) => {\n\t\t\tlet attributes = value.attributes || [];\n\t\t\t// If the block supports the \"anchor\" functionality, it needs to keep its ID attribute.\n\t\t\tif ( hasAnchorSupport ) {\n\t\t\t\tattributes = [ ...attributes, 'id' ];\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t...value,\n\t\t\t\tattributes,\n\t\t\t\tisMatch: isMatch ? isMatch : undefined,\n\t\t\t};\n\t\t} );\n\t} );\n\n\treturn mergeWith( {}, ...schemas, ( objValue, srcValue, key ) => {\n\t\tswitch ( key ) {\n\t\t\tcase 'children': {\n\t\t\t\tif ( objValue === '*' || srcValue === '*' ) {\n\t\t\t\t\treturn '*';\n\t\t\t\t}\n\n\t\t\t\treturn { ...objValue, ...srcValue };\n\t\t\t}\n\t\t\tcase 'attributes':\n\t\t\tcase 'require': {\n\t\t\t\treturn [ ...( objValue || [] ), ...( srcValue || [] ) ];\n\t\t\t}\n\t\t\tcase 'isMatch': {\n\t\t\t\t// If one of the values being merge is undefined (matches everything),\n\t\t\t\t// the result of the merge will be undefined.\n\t\t\t\tif ( ! objValue || ! srcValue ) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\t// When merging two isMatch functions, the result is a new function\n\t\t\t\t// that returns if one of the source functions returns true.\n\t\t\t\treturn ( ...args ) => {\n\t\t\t\t\treturn objValue( ...args ) || srcValue( ...args );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t} );\n}\n\n/**\n * Gets the block content schema, which is extracted and merged from all\n * registered blocks with raw transfroms.\n *\n * @param {string} context Set to \"paste\" when in paste context, where the\n * schema is more strict.\n *\n * @return {Object} A complete block content schema.\n */\nexport function getBlockContentSchema( context ) {\n\treturn getBlockContentSchemaFromTransforms( getRawTransforms(), context );\n}\n\n/**\n * Checks whether HTML can be considered plain text. That is, it does not contain\n * any elements that are not line breaks.\n *\n * @param {string} HTML The HTML to check.\n *\n * @return {boolean} Whether the HTML can be considered plain text.\n */\nexport function isPlain( HTML ) {\n\treturn ! /<(?!br[ />])/i.test( HTML );\n}\n\n/**\n * Given node filters, deeply filters and mutates a NodeList.\n *\n * @param {NodeList} nodeList The nodeList to filter.\n * @param {Array} filters An array of functions that can mutate with the provided node.\n * @param {Document} doc The document of the nodeList.\n * @param {Object} schema The schema to use.\n */\nexport function deepFilterNodeList( nodeList, filters, doc, schema ) {\n\tArray.from( nodeList ).forEach( ( node ) => {\n\t\tdeepFilterNodeList( node.childNodes, filters, doc, schema );\n\n\t\tfilters.forEach( ( item ) => {\n\t\t\t// Make sure the node is still attached to the document.\n\t\t\tif ( ! doc.contains( node ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\titem( node, doc, schema );\n\t\t} );\n\t} );\n}\n\n/**\n * Given node filters, deeply filters HTML tags.\n * Filters from the deepest nodes to the top.\n *\n * @param {string} HTML The HTML to filter.\n * @param {Array} filters An array of functions that can mutate with the provided node.\n * @param {Object} schema The schema to use.\n *\n * @return {string} The filtered HTML.\n */\nexport function deepFilterHTML( HTML, filters = [], schema ) {\n\tconst doc = document.implementation.createHTMLDocument( '' );\n\n\tdoc.body.innerHTML = HTML;\n\n\tdeepFilterNodeList( doc.body.childNodes, filters, doc, schema );\n\n\treturn doc.body.innerHTML;\n}\n\n/**\n * Gets a sibling within text-level context.\n *\n * @param {Element} node The subject node.\n * @param {string} which \"next\" or \"previous\".\n */\nexport function getSibling( node, which ) {\n\tconst sibling = node[ `${ which }Sibling` ];\n\n\tif ( sibling && isPhrasingContent( sibling ) ) {\n\t\treturn sibling;\n\t}\n\n\tconst { parentNode } = node;\n\n\tif ( ! parentNode || ! isPhrasingContent( parentNode ) ) {\n\t\treturn;\n\t}\n\n\treturn getSibling( parentNode, which );\n}\n","/**\n * External dependencies\n */\nimport { flatMap, compact } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport deprecated from '@wordpress/deprecated';\nimport { getPhrasingContentSchema } from '@wordpress/dom';\n\n/**\n * Internal dependencies\n */\nimport { htmlToBlocks } from './html-to-blocks';\nimport parse from '../parser';\nimport normaliseBlocks from './normalise-blocks';\nimport specialCommentConverter from './special-comment-converter';\nimport listReducer from './list-reducer';\nimport blockquoteNormaliser from './blockquote-normaliser';\nimport figureContentReducer from './figure-content-reducer';\nimport shortcodeConverter from './shortcode-converter';\nimport { deepFilterHTML, getBlockContentSchema } from './utils';\n\nexport { pasteHandler } from './paste-handler';\n\nexport function deprecatedGetPhrasingContentSchema( context ) {\n\tdeprecated( 'wp.blocks.getPhrasingContentSchema', {\n\t\tsince: '5.6',\n\t\talternative: 'wp.dom.getPhrasingContentSchema',\n\t} );\n\treturn getPhrasingContentSchema( context );\n}\n\n/**\n * Converts an HTML string to known blocks.\n *\n * @param {Object} $1\n * @param {string} $1.HTML The HTML to convert.\n *\n * @return {Array} A list of blocks.\n */\nexport function rawHandler( { HTML = '' } ) {\n\t// If we detect block delimiters, parse entirely as blocks.\n\tif ( HTML.indexOf( ')?/i,\n\t\t''\n\t);\n\tHTML = HTML.replace(\n\t\t/(?:\\s*)?<\\/body>\\s*<\\/html>\\s*$/i,\n\t\t''\n\t);\n\n\t// If we detect block delimiters in HTML, parse entirely as blocks.\n\tif ( mode !== 'INLINE' ) {\n\t\t// Check plain text if there is no HTML.\n\t\tconst content = HTML ? HTML : plainText;\n\n\t\tif ( content.indexOf( '