openc3-cosmos-tool-cmdsender 5.13.0 → 5.14.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +0,0 @@
1
- {"version":3,"file":"js/398.js","mappings":"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AG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,IAAK,GAAI,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,KAAM,GAAI,EAAG,GAAI,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,KAAM,GAAI,MAAO,GAAI,KAAM,GAAI,GAAI,EAAG,IAAK,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,MAAO,GAAI,GAAI,EAAG,GAAI,KAAM,IAAK,EAAG,GAAI,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,IAAK,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC7xFC,EAAO,EACP75C,EAAM,GACDrM,EAAI,EAAGA,EAAIimD,EAAU7jD,OAAQpC,GAAK,EACvCqM,EAAIpK,KAAKikD,GAAQD,EAAUjmD,IACvBimD,EAAUjmD,EAAI,IACdqM,EAAIpK,KAAK,GAAIikD,GAAQD,EAAUjmD,EAAI,IAE3CmI,EAAQ89C,UAAYz6C,OAAO4Z,aAAalc,MAAM,KAAMmD,EAEpD,IAEA3M,IAAIC,OAAO,gBAAgB,CAAC,UAAU,UAAU,SAAS,aAAa,gBAAgB,gCAAgC,4BAA4B,cAAc,eAAe,qBAAqB,cAAc,SAASuI,EAASC,EAASvD,GAAQ,aACrP,IAQIkC,EARA4Z,EAASxY,EAAQ,aACjBm2C,EAAYn2C,EAAQ,gBAAgBm2C,UACpCp+C,EAAqBiI,EAAQ,0BAA0BjI,mBACvD4iD,EAAkB36C,EAAQ,sBAAsB26C,gBAChD7D,EAAU92C,EAAQ,cAClB+V,EAAO/V,EAAQ,eACfzD,EAAgByD,EAAQ,qBAAqBzD,cAC7Cf,EAAQwE,EAAQ,YAAYxE,MAEhCoD,EAAO,WACHrF,KAAKsF,eAAiB9G,CAC1B,EACA,WACIwB,KAAKyF,kBAAoB,IAAI27C,EAC7BphD,KAAK+6C,QAAU,IAAIv2C,OAAO,KAAO+4C,EAAQiH,UAAY,SAAU,KAC/DxkD,KAAK86C,WAAa,IAAIt2C,OAAO,SAAW+4C,EAAQiH,UAAY,eAAgB,KAC5ExkD,KAAK6F,aAAe,WAKhB,OAJK7F,KAAK0kD,aACN1kD,KAAK2kD,gBAAkB3kD,KAAK2kD,iBAAmB,IAAI3kD,KAAKsF,eAAetF,KAAK4kD,sBAC5E5kD,KAAK0kD,WAAa,IAAI9H,EAAU58C,KAAK2kD,gBAAgB1F,aAElDj/C,KAAK0kD,UAChB,EACA1kD,KAAK2F,iBAAmB,GACxB3F,KAAK6kD,aAAe,GACpB7kD,KAAK8kD,mBAAqB,SAAUze,EAAOnkB,EAASjC,EAAUE,GAC1D,IAAIjc,EAAMge,EAAQhe,IACd6gD,GAAmB,EACnBC,GAAe,EACfC,EAAYC,IACZpL,EAAU53B,EAAQ83B,aAClBmL,GAAkB,EACtB,GAAKnlD,KAAK2F,iBAgCL,CACD,GAAI6F,MAAMmB,QAAQ3M,KAAK2F,kBACfy/C,EAAcplD,KAAK2F,iBAAiB2F,IAAIkR,EAAK1O,cAAclF,KAAK,KAChEjD,EAAmB3F,KAAK2F,iBAAiB,QAGzCy/C,EAAc5oC,EAAK1O,aAAa9N,KAAK2F,kBACrCA,EAAmB3F,KAAK2F,iBAEhCy/C,EAAc,IAAI5gD,OAAO,aAAe4gD,EAAc,OACtDD,EAAkBjjC,EAAQmjC,iBACtBC,EAAY,SAAUl2C,EAAM7Q,GAC5B,IAAIsG,EAAIuK,EAAK9M,MAAM8iD,GACnB,GAAKvgD,EAAL,CAEA,IAAIvE,EAAQuE,EAAE,GAAGlE,OAAQgD,EAAMkB,EAAE,GAAGlE,OAC/B4kD,EAAkBn2C,EAAM9O,EAAOqD,IAAyB,KAAjBkB,EAAE,GAAGlB,EAAM,IACnDA,IACJO,EAAIkxC,aAAa72C,EAAG+B,EAAOqD,EAJjB,CAKd,EARA,IASI6hD,EAAmB7/C,EAAmB,IAYtC4/C,GAXAjkD,EAAU,SAAU8N,EAAM7Q,GACrBwmD,IAAoB,KAAK5iD,KAAKiN,KAC3Bm2C,EAAkBn2C,EAAM61C,EAAWA,GACnC/gD,EAAIuhD,aAAa,CAAEjjD,IAAKjE,EAAGkE,OAAQwiD,GAAaO,GAEhDthD,EAAIuhD,aAAa,CAAEjjD,IAAKjE,EAAGkE,OAAQwiD,GAAat/C,GAE5D,EACI+/C,EAAa,SAAUt2C,EAAM7Q,GAC7B,OAAO6mD,EAAYjjD,KAAKiN,EAC5B,EACwB,SAAUA,EAAMu2C,EAAQC,GAC5C,IAAIC,EAAS,EACb,MAAOF,KAAmC,KAAvBv2C,EAAK1G,OAAOi9C,GAC3BE,IACJ,GAAIA,EAAS/L,GAAW,EACpB,OAAO,EACP+L,EAAS,EACb,MAA+B,KAAxBz2C,EAAK1G,OAAOk9C,KACfC,IACJ,OAAI/L,EAAU,EACH+L,EAAS/L,GAAWA,EAAU,EAE9B+L,EAAS/L,GAAW,CACnC,EACJ,KA9E4B,CACxB,IAAK95C,KAAK6kD,aACN,OAAO,EACX,IAAIl/C,EAAmB3F,KAAK6kD,aAAavkD,MACrCwlD,EAAiB9lD,KAAK6kD,aAAalhD,IACnCyhD,EAAc,IAAI5gD,OAAO,aAAegY,EAAK1O,aAAanI,GAAoB,KAC9EogD,EAAY,IAAIvhD,OAAO,MAAQgY,EAAK1O,aAAag4C,GAAkB,UACnExkD,EAAU,SAAU8N,EAAM7Q,GACtBmnD,EAAWt2C,EAAM7Q,IAEhBwmD,IAAoB,KAAK5iD,KAAKiN,KAC/BlL,EAAIuhD,aAAa,CAAEjjD,IAAKjE,EAAGkE,OAAQ2M,EAAKzO,QAAUmlD,GAClD5hD,EAAIuhD,aAAa,CAAEjjD,IAAKjE,EAAGkE,OAAQwiD,GAAat/C,GAExD,EACI2/C,EAAY,SAAUl2C,EAAM7Q,GAC5B,IAAIsG,GACAA,EAAIuK,EAAK9M,MAAMyjD,KACf7hD,EAAIkxC,aAAa72C,EAAG6Q,EAAKzO,OAASkE,EAAE,GAAGlE,OAAQyO,EAAKzO,SACpDkE,EAAIuK,EAAK9M,MAAM8iD,KACflhD,EAAIkxC,aAAa72C,EAAGsG,EAAE,GAAGlE,OAAQkE,EAAE,GAAGlE,OAC9C,EACI+kD,EAAa,SAAUt2C,EAAM5M,GAC7B,GAAI4iD,EAAYjjD,KAAKiN,GACjB,OAAO,EAEX,IADA,IAAIrJ,EAASmc,EAAQ6+B,UAAUv+C,GACtBjE,EAAI,EAAGA,EAAIwH,EAAOpF,OAAQpC,IAC/B,GAAuB,YAAnBwH,EAAOxH,GAAGyC,KACV,OAAO,CAEnB,CACJ,CAgDA,SAASglD,EAAKC,GACV,IAAK,IAAI1nD,EAAI0hB,EAAU1hB,GAAK4hB,EAAQ5hB,IAChC0nD,EAAI/hD,EAAI7B,QAAQ9D,GAAIA,EAC5B,CACA,IAAI2nD,EAAiBhB,IACrBc,GAAK,SAAU52C,EAAM7Q,GACjB,IAAIw1C,EAAS3kC,EAAKurC,OAAO,OACT,IAAZ5G,GACIA,EAASkR,IACTA,EAAYlR,GACZiR,IAAiBU,EAAWt2C,EAAM7Q,KAClCymD,GAAe,IAEdkB,EAAiB92C,EAAKzO,SAC3BulD,EAAiB92C,EAAKzO,OAE9B,IACIskD,GAAaC,MACbD,EAAYiB,EACZnB,GAAmB,EACnBC,GAAe,GAEfG,GAAmBF,EAAYnL,GAAW,IAC1CmL,EAAY94C,KAAKg6C,MAAMlB,EAAYnL,GAAWA,GAClDkM,EAAKhB,EAAeM,EAAYhkD,EACpC,EACAtB,KAAKomD,mBAAqB,SAAU/f,EAAOnkB,EAAS5B,EAAOmL,GACvD,IAAInqB,EAAUtB,KAAK6kD,aACnB,GAAKvjD,EAAL,EAEKA,EAAQhB,OAASgB,EAAQ,KAC1BA,EAAUA,EAAQ,IACtB,IAII2e,EAAUomC,EAJVtuB,EAAW,IAAI/0B,EAAckf,EAASuJ,EAAOjpB,IAAKipB,EAAOhpB,QACzD9D,EAAQo5B,EAASxzB,kBAEjB+hD,GADMpkC,EAAQ7b,UACC6b,EAAQ7b,UAAUk9B,mBAErC,GAAI5kC,GAAS,UAAUwD,KAAKxD,EAAMqC,MAAO,CACrC,IAAIulD,EAAYC,EAChB,MAAO7nD,GAAS,UAAUwD,KAAKxD,EAAMqC,MAAO,CACxC,IAAIzC,EAAII,EAAMsC,MAAMuH,QAAQlH,EAAQhB,OACpC,IAAU,GAAN/B,EAAS,CACT,IAAIiE,EAAMu1B,EAAShzB,qBACftC,EAASs1B,EAASipB,wBAA0BziD,EAChDgoD,EAAa,IAAItkD,EAAMO,EAAKC,EAAQD,EAAKC,EAASnB,EAAQhB,MAAMK,QAChE,KACJ,CACAhC,EAAQo5B,EAASpzB,cACrB,CACIozB,EAAW,IAAI/0B,EAAckf,EAASuJ,EAAOjpB,IAAKipB,EAAOhpB,QACzD9D,EAAQo5B,EAASxzB,kBACrB,MAAO5F,GAAS,UAAUwD,KAAKxD,EAAMqC,MAAO,CACpCzC,EAAII,EAAMsC,MAAMuH,QAAQlH,EAAQqC,KACpC,IAAU,GAANpF,EAAS,CACLiE,EAAMu1B,EAAShzB,qBACftC,EAASs1B,EAASipB,wBAA0BziD,EAChDioD,EAAW,IAAIvkD,EAAMO,EAAKC,EAAQD,EAAKC,EAASnB,EAAQqC,IAAIhD,QAC5D,KACJ,CACAhC,EAAQo5B,EAASnzB,aACrB,CACI4hD,GACAtkC,EAAQhc,OAAOsgD,GACfD,IACArkC,EAAQhc,OAAOqgD,GACftmC,EAAWsmC,EAAWjmD,MAAMkC,IAC5B6jD,GAAW/kD,EAAQhB,MAAMK,OAEjC,MAEI0lD,EAAU/kD,EAAQhB,MAAMK,OACxBsf,EAAWK,EAAMhgB,MAAMkC,IACvB0f,EAAQqjB,OAAOjlB,EAAM3c,IAAKrC,EAAQqC,KAClCue,EAAQqjB,OAAOjlB,EAAMhgB,MAAOgB,EAAQhB,OAEpCgmD,EAAahmD,MAAMkC,KAAOyd,IAC1BqmC,EAAahmD,MAAMmC,QAAU4jD,GAC7BC,EAAa3iD,IAAInB,KAAOyd,IACxBqmC,EAAa3iD,IAAIlB,QAAU4jD,GAC/BnkC,EAAQ7b,UAAU09B,kBAAkBuiB,EAlD1B,CAmDd,EACAtmD,KAAK4F,kBAAoB,SAAUygC,EAAOj3B,EAAMq3C,GAC5C,OAAOzmD,KAAK0C,WAAW0M,EAC3B,EACApP,KAAKkC,aAAe,SAAUmkC,EAAOj3B,EAAMs3C,GACvC,OAAO,CACX,EACA1mD,KAAKoC,YAAc,SAAUikC,EAAOniC,EAAK1B,GACzC,EACAxC,KAAK0C,WAAa,SAAU0M,GACxB,OAAOA,EAAK9M,MAAM,QAAQ,EAC9B,EACAtC,KAAK2mD,aAAe,SAAUzkC,GAC1B,OAAO,IACX,EACAliB,KAAK4mD,oBAAsB,SAAU1J,GAGjC,IAAK,IAAI3+C,KAFTyB,KAAKq/C,QAAU,GACfr/C,KAAKod,OAAS,CAAC,EACD8/B,EACV,GAAIA,EAAQ3+C,GAAI,CACZ,IAAI8G,EAAO63C,EAAQ3+C,GACfwK,EAAK1D,EAAKxC,UAAU0D,IACpB0gC,EAAOhoB,EAAO7B,OAAOrU,GACpBk+B,IACDhoB,EAAO7B,OAAOrU,GAAMk+B,EAAO,IAAI5hC,GAC9B4Z,EAAO7B,OAAO7e,KACf0gB,EAAO7B,OAAO7e,GAAK0oC,GACvBjnC,KAAKq/C,QAAQ7+C,KAAKjC,GAClByB,KAAKod,OAAO7e,GAAK0oC,CACrB,CAEJ,IAAI4f,EAAc,CAAC,qBAAsB,qBAAsB,oBAC3D,eAAgB,cAAe,kBAAmB,kBAClDC,EAAU,SAAUvoD,IACnB,SAAUwoD,GACP,IAAIC,EAAeH,EAAYtoD,GAC3B2a,EAAiB6tC,EAAMC,GAC3BD,EAAMF,EAAYtoD,IACd,WACI,OAAOyB,KAAKinD,WAAWD,EAAc3/C,UAAW6R,EACpD,CACR,EAPA,CAOEguC,EACN,EACIA,EAASlnD,KACb,IAASzB,EAAI,EAAGA,EAAIsoD,EAAYlmD,OAAQpC,IACpCuoD,EAAQvoD,EAEhB,EACAyB,KAAKinD,WAAa,SAAUE,EAAQha,EAAMj0B,GACtC,IAAImtB,EAAQ8G,EAAK,IAAM,QACvB,GAAoB,iBAAT9G,EAAmB,CAC1B,GAAI76B,MAAMmB,QAAQ05B,EAAM,IAAK,CACzB,IAAI+gB,EAAW/gB,EAAM,GAAGA,EAAM,GAAG1lC,OAAS,GACtCsmC,EAAOjnC,KAAKod,OAAOgqC,GACvB,GAAIngB,EACA,OAAOA,EAAKkgB,GAAQ1/C,MAAMw/B,EAAM,CAACZ,EAAM,IAAI7F,OAAO,GAAGv6B,MAAMrD,KAAKuqC,EAAM,IAC9E,CACA9G,EAAQA,EAAM,IAAM,OACxB,CACA,IAAK,IAAI9nC,EAAI,EAAGA,EAAIyB,KAAKq/C,QAAQ1+C,OAAQpC,IACrC,GAAKyB,KAAKod,OAAOpd,KAAKq/C,QAAQ9gD,IAA9B,CAEA,IAAIuC,EAAQulC,EAAMvlC,MAAMd,KAAKq/C,QAAQ9gD,IACrC,IAAKuC,EAAM,IAAMA,EAAM,GAAI,CACvBqsC,EAAK,GAAKrsC,EAAM,GACZmmC,EAAOjnC,KAAKod,OAAOpd,KAAKq/C,QAAQ9gD,IACpC,OAAO0oC,EAAKkgB,GAAQ1/C,MAAMw/B,EAAMkG,EACpC,CANY,CAQhB,IAAIxqB,EAAMzJ,EAAezR,MAAMzH,KAAMmtC,GACrC,OAAOj0B,EAAiByJ,OAAMvc,CAClC,EACApG,KAAKqnD,gBAAkB,SAAUhhB,EAAOuB,EAAQtU,EAAQpR,EAASolC,GAC7D,GAAItnD,KAAKwF,WAAY,CACjB,IAAIg7C,EAAaxgD,KAAKwF,WAAWk7C,gBACjC,IAAK,IAAIt1C,KAAOo1C,EACZ,GAAIA,EAAWp1C,GAAKw8B,GAAS,CACzB,IAAIjlB,EAAM69B,EAAWp1C,GAAKw8B,GAAQngC,MAAMzH,KAAMqH,WAC9C,GAAIsb,EACA,OAAOA,CAEf,CAER,CACJ,EACA3iB,KAAKogD,YAAc,SAAUhB,GACzB,IAAKp/C,KAAKunD,mBAAoB,CAC1B,IAAIrmD,EAAQlB,KAAK0kD,WAAW,SACxB6C,EAAqB,GACzB,IAAK,IAAIlK,KAAQn8C,EAEb,IADA,IAAIsmD,EAAUtmD,EAAMm8C,GACX/+C,EAAI,EAAGiB,EAAIioD,EAAQ7mD,OAAQrC,EAAIiB,EAAGjB,IACvC,GAAgC,kBAArBkpD,EAAQlpD,GAAGK,MACd,0BAA0BwD,KAAKqlD,EAAQlpD,GAAGK,QAC1C4oD,EAAmB/mD,KAAKgnD,EAAQlpD,GAAGM,YAEtC,GAAgC,kBAArB4oD,EAAQlpD,GAAGK,MACvB,IAAK,IAAIS,EAAI,EAAGqoD,EAAUD,EAAQlpD,GAAGK,MAAMgC,OAAQvB,EAAIqoD,EAASroD,IAC5D,GAAI,0BAA0B+C,KAAKqlD,EAAQlpD,GAAGK,MAAMS,IAAK,CACjDi+C,EAAOmK,EAAQlpD,GAAGM,MAAM0D,MAAM,YAAYlD,GAC9CmoD,EAAmB/mD,KAAK68C,EAAKhJ,OAAO,EAAGgJ,EAAK18C,OAAS,GACzD,CAKhBX,KAAKunD,mBAAqBA,CAC9B,CACA,OAAKnI,EAEEmI,EAAmB/mB,OAAOxgC,KAAKigD,cAAgB,IAD3CjgD,KAAKigD,YAEpB,EACAjgD,KAAK0nD,mBAAqB,WAGtB,OAFK1nD,KAAK2kD,iBACN3kD,KAAK6F,eACF7F,KAAKigD,aAAejgD,KAAK2kD,gBAAgB1E,cAAgB,EACpE,EACAjgD,KAAK2nD,eAAiB,SAAUthB,EAAOnkB,EAAS6R,EAAKgrB,GACjD,IAAIiB,EAAWhgD,KAAKigD,cAAgBjgD,KAAK0nD,qBACzC,OAAO1H,EAAS10C,KAAI,SAAU60C,GAC1B,MAAO,CACH12C,KAAM02C,EACNl/C,MAAOk/C,EACPyH,MAAO,EACPC,KAAM,UAEd,GACJ,EACA7nD,KAAKuG,IAAM,eACd,EAAE3D,KAAKyC,EAAKxC,WACb6D,EAAQrB,KAAOA,CAEf,IAEApH,IAAIC,OAAO,kBAAkB,CAAC,UAAU,UAAU,WAAW,SAASuI,EAASC,EAASvD,GAAQ,aA2BhGuD,EAAQohD,WAAa,SAAUC,EAAU9U,EAAO+U,GAC5C,IAAIxlD,EAAMywC,EAAM3yC,MAAMkC,IAClB0d,EAAc+yB,EAAM3yC,MAAMmC,OAC1B2M,EAAO24C,EAASvlD,IAAQ,GAC5B,OAAQywC,EAAMrL,QACV,IAAK,SACD,IAAIra,EAAQ0lB,EAAM1lB,MAClB,GAAqB,IAAjBA,EAAM5sB,OACNonD,EAASvlD,GAAO4M,EAAK4kC,UAAU,EAAG9zB,GAAe+yB,EAAM1lB,MAAM,GAAKne,EAAK4kC,UAAU9zB,OAEhF,CACD,IAAIitB,EAAO,CAAC3qC,EAAK,GAAGg+B,OAAOyS,EAAM1lB,OACjCw6B,EAASl6C,OAAOpG,MAAMsgD,EAAU5a,GAChC4a,EAASvlD,GAAO4M,EAAK4kC,UAAU,EAAG9zB,GAAe6nC,EAASvlD,GAC1DulD,EAASvlD,EAAMywC,EAAM1lB,MAAM5sB,OAAS,IAAMyO,EAAK4kC,UAAU9zB,EAC7D,CACA,MACJ,IAAK,SACD,IAAIE,EAAY6yB,EAAMtvC,IAAIlB,OACtB0d,EAAS8yB,EAAMtvC,IAAInB,IACnBA,IAAQ2d,EACR4nC,EAASvlD,GAAO4M,EAAK4kC,UAAU,EAAG9zB,GAAe9Q,EAAK4kC,UAAU5zB,GAGhE2nC,EAASl6C,OAAOrL,EAAK2d,EAAS3d,EAAM,EAAG4M,EAAK4kC,UAAU,EAAG9zB,GAAe6nC,EAAS5nC,GAAQ6zB,UAAU5zB,IAEvG,MAEZ,CAEA,IAEAniB,IAAIC,OAAO,aAAa,CAAC,UAAU,UAAU,SAAS,cAAc,0BAA0B,SAASuI,EAASC,EAASvD,GAAQ,aACjI,IAAIwX,EAAMlU,EAAQ,aACd8R,EAAe9R,EAAQ,uBAAuB8R,aAC9C0vC,EAAwB,WACxB,SAASA,EAAO/jD,EAAK1B,EAAKC,GACtBzC,KAAKkoD,UAAYloD,KAAKgzC,SAASvqB,KAAKzoB,MACpCA,KAAK4sC,OAAO1oC,GACM,iBAAP1B,EACPxC,KAAK04B,YAAYl2B,EAAIA,IAAKA,EAAIC,QAE9BzC,KAAK04B,YAAYl2B,EAAKC,EAC9B,CAgEA,OA/DAwlD,EAAOplD,UAAUq0C,YAAc,WAC3B,OAAOl3C,KAAKmoD,wBAAwBnoD,KAAKwC,IAAKxC,KAAKyC,OACvD,EACAwlD,EAAOplD,UAAU4zC,YAAc,WAC3B,OAAOz2C,KAAK8R,QAChB,EACAm2C,EAAOplD,UAAUmwC,SAAW,SAAUC,GAClC,IAAIA,EAAM3yC,MAAMkC,KAAOywC,EAAMtvC,IAAInB,KAAOywC,EAAM3yC,MAAMkC,KAAOxC,KAAKwC,QAE5DywC,EAAM3yC,MAAMkC,IAAMxC,KAAKwC,KAA3B,CAEA,IAAI4lD,EAAQC,EAAqBpV,EAAO,CAAEzwC,IAAKxC,KAAKwC,IAAKC,OAAQzC,KAAKyC,QAAUzC,KAAKsoD,cACrFtoD,KAAK04B,YAAY0vB,EAAM5lD,IAAK4lD,EAAM3lD,QAAQ,EAFhC,CAGd,EACAwlD,EAAOplD,UAAU61B,YAAc,SAAUl2B,EAAKC,EAAQ8lD,GAClD,IAAIx0B,EAUJ,GARIA,EADAw0B,EACM,CACF/lD,IAAKA,EACLC,OAAQA,GAINzC,KAAKmoD,wBAAwB3lD,EAAKC,GAExCzC,KAAKwC,KAAOuxB,EAAIvxB,KAAOxC,KAAKyC,QAAUsxB,EAAItxB,OAA9C,CAEA,IAAIoX,EAAM,CACNrX,IAAKxC,KAAKwC,IACVC,OAAQzC,KAAKyC,QAEjBzC,KAAKwC,IAAMuxB,EAAIvxB,IACfxC,KAAKyC,OAASsxB,EAAItxB,OAClBzC,KAAKmZ,QAAQ,SAAU,CACnBU,IAAKA,EACL5Y,MAAO8yB,GATD,CAWd,EACAk0B,EAAOplD,UAAUgqC,OAAS,WACtB7sC,KAAK8R,SAASyH,IAAI,SAAUvZ,KAAKkoD,UACrC,EACAD,EAAOplD,UAAU+pC,OAAS,SAAU1oC,GAChClE,KAAK8R,SAAW5N,GAAOlE,KAAK8R,SAC5B9R,KAAK8R,SAASuH,GAAG,SAAUrZ,KAAKkoD,UACpC,EACAD,EAAOplD,UAAUslD,wBAA0B,SAAU3lD,EAAKC,GACtD,IAAIsxB,EAAM,CAAC,EAeX,OAdIvxB,GAAOxC,KAAK8R,SAASusB,aACrBtK,EAAIvxB,IAAM2J,KAAKC,IAAI,EAAGpM,KAAK8R,SAASusB,YAAc,GAClDtK,EAAItxB,OAASzC,KAAK8R,SAASzP,QAAQ0xB,EAAIvxB,KAAK7B,QAEvC6B,EAAM,GACXuxB,EAAIvxB,IAAM,EACVuxB,EAAItxB,OAAS,IAGbsxB,EAAIvxB,IAAMA,EACVuxB,EAAItxB,OAAS0J,KAAKE,IAAIrM,KAAK8R,SAASzP,QAAQ0xB,EAAIvxB,KAAK7B,OAAQwL,KAAKC,IAAI,EAAG3J,KAEzEA,EAAS,IACTsxB,EAAItxB,OAAS,GACVsxB,CACX,EACOk0B,CACX,CAzE2B,GA4E3B,SAASO,EAAeC,EAAQC,EAAQC,GACpC,IAAIC,EAAcD,EAAqBF,EAAOhmD,QAAUimD,EAAOjmD,OAASgmD,EAAOhmD,OAASimD,EAAOjmD,OAC/F,OAAQgmD,EAAOjmD,IAAMkmD,EAAOlmD,KAASimD,EAAOjmD,KAAOkmD,EAAOlmD,KAAOomD,CACrE,CACA,SAASP,EAAqBpV,EAAOmV,EAAOS,GACxC,IAAIC,EAAgC,UAAhB7V,EAAMrL,OACtBmhB,GAAiBD,EAAgB,GAAK,IAAM7V,EAAMtvC,IAAInB,IAAMywC,EAAM3yC,MAAMkC,KACxEwmD,GAAiBF,EAAgB,GAAK,IAAM7V,EAAMtvC,IAAIlB,OAASwwC,EAAM3yC,MAAMmC,QAC3EwmD,EAAahW,EAAM3yC,MACnB4oD,EAAWJ,EAAgBG,EAAahW,EAAMtvC,IAClD,OAAI6kD,EAAeJ,EAAOa,EAAYJ,GAC3B,CACHrmD,IAAK4lD,EAAM5lD,IACXC,OAAQ2lD,EAAM3lD,QAGlB+lD,EAAeU,EAAUd,GAAQS,GAC1B,CACHrmD,IAAK4lD,EAAM5lD,IAAMumD,EACjBtmD,OAAQ2lD,EAAM3lD,QAAU2lD,EAAM5lD,KAAO0mD,EAAS1mD,IAAMwmD,EAAgB,IAGrE,CACHxmD,IAAKymD,EAAWzmD,IAChBC,OAAQwmD,EAAWxmD,OAE3B,CA5BAwlD,EAAOplD,UAAUylD,cAAe,EAChC3tC,EAAItC,UAAU4vC,EAAOplD,UAAW0V,GA4BhC7R,EAAQuhD,OAASA,CAEjB,IAEAhqD,IAAIC,OAAO,eAAe,CAAC,UAAU,UAAU,SAAS,cAAc,kBAAkB,wBAAwB,YAAY,eAAe,SAASuI,EAASC,EAASvD,GAAQ,aAC9K,IAAIwX,EAAMlU,EAAQ,aACdqhD,EAAarhD,EAAQ,iBAAiBqhD,WACtCvvC,EAAe9R,EAAQ,uBAAuB8R,aAC9CtW,EAAQwE,EAAQ,WAAWxE,MAC3BgmD,EAASxhD,EAAQ,YAAYwhD,OAC7BkB,EAA0B,WAC1B,SAASA,EAASC,GACdppD,KAAK++B,OAAS,CAAC,IACY,IAAvBqqB,EAAYzoD,OACZX,KAAK++B,OAAS,CAAC,IAEVvzB,MAAMmB,QAAQy8C,GACnBppD,KAAKqpD,kBAAkB,CAAE7mD,IAAK,EAAGC,OAAQ,GAAK2mD,GAG9CppD,KAAKulC,OAAO,CAAE/iC,IAAK,EAAGC,OAAQ,GAAK2mD,EAE3C,CAsTA,OArTAD,EAAStmD,UAAUymD,SAAW,SAAU3/B,GACpC,IAAIhe,EAAM3L,KAAKq+B,YAAc,EAC7Br+B,KAAKkG,OAAO,IAAIjE,EAAM,EAAG,EAAG0J,EAAK3L,KAAKqC,QAAQsJ,GAAKhL,SACnDX,KAAKulC,OAAO,CAAE/iC,IAAK,EAAGC,OAAQ,GAAKknB,GAAQ,GAC/C,EACAw/B,EAAStmD,UAAU6vC,SAAW,WAC1B,OAAO1yC,KAAKupD,cAAc3gD,KAAK5I,KAAKwpD,sBACxC,EACAL,EAAStmD,UAAU6zC,aAAe,SAAUl0C,EAAKC,GAC7C,OAAO,IAAIwlD,EAAOjoD,KAAMwC,EAAKC,EACjC,EACA0mD,EAAStmD,UAAU4mD,eAAiB,SAAU9/B,GAC1C,IAAIrnB,EAAQqnB,EAAKrnB,MAAM,qBACvBtC,KAAK0pD,aAAepnD,EAAQA,EAAM,GAAK,KACvCtC,KAAKmZ,QAAQ,oBACjB,EACAgwC,EAAStmD,UAAU2mD,oBAAsB,WACrC,OAAQxpD,KAAK2pD,cACT,IAAK,UACD,MAAO,OACX,IAAK,OACD,MAAO,KACX,QACI,OAAO3pD,KAAK0pD,cAAgB,KAExC,EACAP,EAAStmD,UAAU+mD,eAAiB,SAAUC,GACtC7pD,KAAK2pD,eAAiBE,IAE1B7pD,KAAK2pD,aAAeE,EACpB7pD,KAAKmZ,QAAQ,qBACjB,EACAgwC,EAAStmD,UAAUinD,eAAiB,WAChC,OAAO9pD,KAAK2pD,YAChB,EACAR,EAAStmD,UAAUknD,UAAY,SAAUpgC,GACrC,MAAgB,QAARA,GAA0B,MAARA,GAAwB,MAARA,CAC9C,EACAw/B,EAAStmD,UAAUR,QAAU,SAAUG,GACnC,OAAOxC,KAAK++B,OAAOv8B,IAAQ,EAC/B,EACA2mD,EAAStmD,UAAUmnD,SAAW,SAAUtoC,EAAUC,GAC9C,OAAO3hB,KAAK++B,OAAO94B,MAAMyb,EAAUC,EAAU,EACjD,EACAwnC,EAAStmD,UAAU0mD,YAAc,WAC7B,OAAOvpD,KAAKgqD,SAAS,EAAGhqD,KAAKq+B,YACjC,EACA8qB,EAAStmD,UAAUw7B,UAAY,WAC3B,OAAOr+B,KAAK++B,OAAOp+B,MACvB,EACAwoD,EAAStmD,UAAU6hC,aAAe,SAAUpkB,GACxC,OAAOtgB,KAAKiqD,iBAAiB3pC,GAAO1X,KAAK5I,KAAKwpD,sBAClD,EACAL,EAAStmD,UAAUonD,iBAAmB,SAAU3pC,GAC5C,IAAIiN,EACJ,GAAIjN,EAAMhgB,MAAMkC,MAAQ8d,EAAM3c,IAAInB,IAC9B+qB,EAAQ,CAACvtB,KAAKqC,QAAQie,EAAMhgB,MAAMkC,KAAKwxC,UAAU1zB,EAAMhgB,MAAMmC,OAAQ6d,EAAM3c,IAAIlB,aAE9E,CACD8qB,EAAQvtB,KAAKgqD,SAAS1pC,EAAMhgB,MAAMkC,IAAK8d,EAAM3c,IAAInB,KACjD+qB,EAAM,IAAMA,EAAM,IAAM,IAAIymB,UAAU1zB,EAAMhgB,MAAMmC,QAClD,IAAIlD,EAAIguB,EAAM5sB,OAAS,EACnB2f,EAAM3c,IAAInB,IAAM8d,EAAMhgB,MAAMkC,KAAOjD,IACnCguB,EAAMhuB,GAAKguB,EAAMhuB,GAAGy0C,UAAU,EAAG1zB,EAAM3c,IAAIlB,QACnD,CACA,OAAO8qB,CACX,EACA47B,EAAStmD,UAAUqnD,YAAc,SAAU1nD,EAAK+qB,GAE5C,OADA7lB,QAAQ6T,KAAK,sFACNvb,KAAKmqD,gBAAgB3nD,EAAK+qB,EACrC,EACA47B,EAAStmD,UAAUunD,YAAc,SAAU1oC,EAAUC,GAEjD,OADAja,QAAQ6T,KAAK,sFACNvb,KAAKqqD,gBAAgB3oC,EAAUC,EAC1C,EACAwnC,EAAStmD,UAAUynD,cAAgB,SAAUpgD,GAEzC,OADAxC,QAAQ6T,KAAK,mGACNvb,KAAKqpD,kBAAkBn/C,EAAU,CAAC,GAAI,IACjD,EACAi/C,EAAStmD,UAAU0iC,OAAS,SAAUr7B,EAAUyf,GAG5C,OAFI3pB,KAAKq+B,aAAe,GACpBr+B,KAAKypD,eAAe9/B,GACjB3pB,KAAKqpD,kBAAkBn/C,EAAUlK,KAAKuqD,OAAO5gC,GACxD,EACAw/B,EAAStmD,UAAU4iD,aAAe,SAAUv7C,EAAUyf,GAClD,IAAIrpB,EAAQN,KAAKm8B,WAAWjyB,EAAS1H,IAAK0H,EAASzH,QAC/CkB,EAAM3D,KAAK+zB,IAAI7pB,EAAS1H,IAAK0H,EAASzH,OAASknB,EAAKhpB,QAOxD,OANAX,KAAK8nD,WAAW,CACZxnD,MAAOA,EACPqD,IAAKA,EACLikC,OAAQ,SACRra,MAAO,CAAC5D,KACT,GACI3pB,KAAKwqD,SAAS7mD,EACzB,EACAwlD,EAAStmD,UAAUs5B,WAAa,SAAU35B,EAAKC,GAC3C,IAAI9B,EAASX,KAAKq+B,iBACNj4B,IAAR5D,EACAA,EAAM7B,EAED6B,EAAM,EACXA,EAAM,EAEDA,GAAO7B,IACZ6B,EAAM7B,EAAS,EACf8B,OAAS2D,GAEb,IAAIgJ,EAAOpP,KAAKqC,QAAQG,GAIxB,YAHc4D,GAAV3D,IACAA,EAAS2M,EAAKzO,QAClB8B,EAAS0J,KAAKE,IAAIF,KAAKC,IAAI3J,EAAQ,GAAI2M,EAAKzO,QACrC,CAAE6B,IAAKA,EAAKC,OAAQA,EAC/B,EACA0mD,EAAStmD,UAAU2nD,SAAW,SAAUz2B,GACpC,MAAO,CAAEvxB,IAAKuxB,EAAIvxB,IAAKC,OAAQsxB,EAAItxB,OACvC,EACA0mD,EAAStmD,UAAUkxB,IAAM,SAAUvxB,EAAKC,GACpC,MAAO,CAAED,IAAKA,EAAKC,OAAQA,EAC/B,EACA0mD,EAAStmD,UAAU4nD,cAAgB,SAAUvgD,GACzC,IAAIvJ,EAASX,KAAKq+B,YASlB,OARIn0B,EAAS1H,KAAO7B,GAChBuJ,EAAS1H,IAAM2J,KAAKC,IAAI,EAAGzL,EAAS,GACpCuJ,EAASzH,OAASzC,KAAKqC,QAAQ1B,EAAS,GAAGA,SAG3CuJ,EAAS1H,IAAM2J,KAAKC,IAAI,EAAGlC,EAAS1H,KACpC0H,EAASzH,OAAS0J,KAAKE,IAAIF,KAAKC,IAAIlC,EAASzH,OAAQ,GAAIzC,KAAKqC,QAAQ6H,EAAS1H,KAAK7B,SAEjFuJ,CACX,EACAi/C,EAAStmD,UAAUsnD,gBAAkB,SAAU3nD,EAAK+qB,GAChD/qB,EAAM2J,KAAKE,IAAIF,KAAKC,IAAI5J,EAAK,GAAIxC,KAAKq+B,aACtC,IAAI57B,EAAS,EACTD,EAAMxC,KAAKq+B,aACX9Q,EAAQA,EAAMiT,OAAO,CAAC,KACtB/9B,EAAS,IAGT8qB,EAAQ,CAAC,IAAIiT,OAAOjT,GACpB/qB,IACAC,EAASzC,KAAK++B,OAAOv8B,GAAK7B,QAE9BX,KAAKqpD,kBAAkB,CAAE7mD,IAAKA,EAAKC,OAAQA,GAAU8qB,EACzD,EACA47B,EAAStmD,UAAUwmD,kBAAoB,SAAUn/C,EAAUqjB,GACvD,IAAIjtB,EAAQN,KAAKm8B,WAAWjyB,EAAS1H,IAAK0H,EAASzH,QAC/CkB,EAAM,CACNnB,IAAKlC,EAAMkC,IAAM+qB,EAAM5sB,OAAS,EAChC8B,QAAyB,GAAhB8qB,EAAM5sB,OAAcL,EAAMmC,OAAS,GAAK8qB,EAAMA,EAAM5sB,OAAS,GAAGA,QAQ7E,OANAX,KAAK8nD,WAAW,CACZxnD,MAAOA,EACPqD,IAAKA,EACLikC,OAAQ,SACRra,MAAOA,IAEJvtB,KAAKwqD,SAAS7mD,EACzB,EACAwlD,EAAStmD,UAAUqD,OAAS,SAAUoa,GAClC,IAAIhgB,EAAQN,KAAKm8B,WAAW7b,EAAMhgB,MAAMkC,IAAK8d,EAAMhgB,MAAMmC,QACrDkB,EAAM3D,KAAKm8B,WAAW7b,EAAM3c,IAAInB,IAAK8d,EAAM3c,IAAIlB,QAOnD,OANAzC,KAAK8nD,WAAW,CACZxnD,MAAOA,EACPqD,IAAKA,EACLikC,OAAQ,SACRra,MAAOvtB,KAAKiqD,iBAAiB,CAAE3pD,MAAOA,EAAOqD,IAAKA,MAE/C3D,KAAKwqD,SAASlqD,EACzB,EACA6oD,EAAStmD,UAAUuyC,aAAe,SAAU5yC,EAAK0d,EAAaE,GAC1D,IAAI9f,EAAQN,KAAKm8B,WAAW35B,EAAK0d,GAC7Bvc,EAAM3D,KAAKm8B,WAAW35B,EAAK4d,GAO/B,OANApgB,KAAK8nD,WAAW,CACZxnD,MAAOA,EACPqD,IAAKA,EACLikC,OAAQ,SACRra,MAAOvtB,KAAKiqD,iBAAiB,CAAE3pD,MAAOA,EAAOqD,IAAKA,MACnD,GACI3D,KAAKwqD,SAASlqD,EACzB,EACA6oD,EAAStmD,UAAUwnD,gBAAkB,SAAU3oC,EAAUC,GACrDD,EAAWvV,KAAKE,IAAIF,KAAKC,IAAI,EAAGsV,GAAW1hB,KAAKq+B,YAAc,GAC9D1c,EAAUxV,KAAKE,IAAIF,KAAKC,IAAI,EAAGuV,GAAU3hB,KAAKq+B,YAAc,GAC5D,IAAIqsB,EAAqB/oC,GAAW3hB,KAAKq+B,YAAc,GAAK3c,EAAW,EACnEipC,EAAoBhpC,EAAU3hB,KAAKq+B,YAAc,EACjDpe,EAAYyqC,EAAqBhpC,EAAW,EAAIA,EAChDk0B,EAAY8U,EAAqB1qD,KAAKqC,QAAQ4d,GAAUtf,OAAS,EACjEwf,EAAUwqC,EAAoBhpC,EAAU,EAAIA,EAC5Ck0B,EAAU8U,EAAoB,EAAI3qD,KAAKqC,QAAQ8d,GAAQxf,OACvD2f,EAAQ,IAAIre,EAAMge,EAAU21B,EAAUz1B,EAAQ01B,GAC9C+U,EAAe5qD,KAAK++B,OAAO94B,MAAMyb,EAAUC,EAAU,GAOzD,OANA3hB,KAAK8nD,WAAW,CACZxnD,MAAOggB,EAAMhgB,MACbqD,IAAK2c,EAAM3c,IACXikC,OAAQ,SACRra,MAAOvtB,KAAKiqD,iBAAiB3pC,KAE1BsqC,CACX,EACAzB,EAAStmD,UAAUgoD,cAAgB,SAAUroD,GACrCA,EAAMxC,KAAKq+B,YAAc,GAAK77B,GAAO,GACrCxC,KAAK8nD,WAAW,CACZxnD,MAAON,KAAK+zB,IAAIvxB,EAAKxC,KAAKqC,QAAQG,GAAK7B,QACvCgD,IAAK3D,KAAK+zB,IAAIvxB,EAAM,EAAG,GACvBolC,OAAQ,SACRra,MAAO,CAAC,GAAI,KAGxB,EACA47B,EAAStmD,UAAUF,QAAU,SAAU2d,EAAOqJ,GAG1C,OAFMrJ,aAAiBre,IACnBqe,EAAQre,EAAM2f,WAAWtB,EAAMhgB,MAAOggB,EAAM3c,MAC5B,IAAhBgmB,EAAKhpB,QAAgB2f,EAAMwB,UACpBxB,EAAMhgB,MACbqpB,GAAQ3pB,KAAK0kC,aAAapkB,GACnBA,EAAM3c,KACjB3D,KAAKkG,OAAOoa,GAGR3c,EADAgmB,EACM3pB,KAAKulC,OAAOjlB,EAAMhgB,MAAOqpB,GAGzBrJ,EAAMhgB,MAETqD,GAPP,IAAIA,CAQR,EACAwlD,EAAStmD,UAAUioD,YAAc,SAAUC,GACvC,IAAK,IAAIxsD,EAAI,EAAGA,EAAIwsD,EAAOpqD,OAAQpC,IAC/ByB,KAAK8nD,WAAWiD,EAAOxsD,GAE/B,EACA4qD,EAAStmD,UAAUmoD,aAAe,SAAUD,GACxC,IAAK,IAAIxsD,EAAIwsD,EAAOpqD,OAAS,EAAGpC,GAAK,EAAGA,IACpCyB,KAAKirD,YAAYF,EAAOxsD,GAEhC,EACA4qD,EAAStmD,UAAUilD,WAAa,SAAU7U,EAAO+U,GAC7C,IAAIkD,EAA2B,UAAhBjY,EAAMrL,QACjBsjB,EAAWjY,EAAM1lB,MAAM5sB,QAAU,IAAMsyC,EAAM1lB,MAAM,IAChDtrB,EAAMsgB,cAAc0wB,EAAM3yC,MAAO2yC,EAAMtvC,QAG1CunD,GAAYjY,EAAM1lB,MAAM5sB,OAAS,IACjCX,KAAKmrD,yBAAyBlY,EAAO,MAGrC6U,EAAW9nD,KAAK++B,OAAQkU,EAAO+U,GAC/BhoD,KAAKmZ,QAAQ,SAAU85B,IAE/B,EACAkW,EAAStmD,UAAUuoD,gBAAkB,SAAUnY,GAC3C,IAAIoY,EAAYrrD,KAAK++B,OAAOp+B,QACR,UAAhBsyC,EAAMrL,QAAsBqL,EAAM3yC,MAAMkC,IAAM6oD,GAAapY,EAAMtvC,IAAInB,IAAM6oD,GACxD,UAAhBpY,EAAMrL,QAAsBqL,EAAM3yC,MAAMkC,KAAO6oD,IAClDrrD,KAAK8nD,WAAW7U,EAExB,EACAkW,EAAStmD,UAAUsoD,yBAA2B,SAAUlY,EAAOqY,GAK3D,IAJA,IAAI/9B,EAAQ0lB,EAAM1lB,MACdhuB,EAAIguB,EAAM5sB,OAAS2qD,EAAM,EACzB9oD,EAAMywC,EAAM3yC,MAAMkC,IAClBC,EAASwwC,EAAM3yC,MAAMmC,OAChBu9B,EAAO,EAAGurB,EAAK,EAAGvrB,EAAOzgC,EAAGygC,EAAOurB,EAAI,CAC5CA,GAAMD,EAAM,EACZ,IAAIE,EAAQj+B,EAAMtnB,MAAM+5B,EAAMurB,GAC9BC,EAAMhrD,KAAK,IACXR,KAAK8nD,WAAW,CACZxnD,MAAON,KAAK+zB,IAAIvxB,EAAMw9B,EAAMv9B,GAC5BkB,IAAK3D,KAAK+zB,IAAIvxB,EAAM+oD,EAAI9oD,EAAS,GACjCmlC,OAAQqL,EAAMrL,OACdra,MAAOi+B,IACR,EACP,CACAvY,EAAM1lB,MAAQA,EAAMtnB,MAAM+5B,GAC1BiT,EAAM3yC,MAAMkC,IAAMA,EAAMw9B,EACxBiT,EAAM3yC,MAAMmC,OAASA,EACrBzC,KAAK8nD,WAAW7U,GAAO,EAC3B,EACAkW,EAAStmD,UAAUooD,YAAc,SAAUhY,GACvCjzC,KAAKorD,gBAAgB,CACjB9qD,MAAON,KAAKwqD,SAASvX,EAAM3yC,OAC3BqD,IAAK3D,KAAKwqD,SAASvX,EAAMtvC,KACzBikC,OAAyB,UAAhBqL,EAAMrL,OAAqB,SAAW,SAC/Cra,MAAO0lB,EAAM1lB,MAAMtnB,SAE3B,EACAkjD,EAAStmD,UAAU4oD,gBAAkB,SAAUznD,EAAOic,GAGlD,IAFA,IAAIsN,EAAQvtB,KAAK++B,QAAU/+B,KAAKupD,cAC5BmC,EAAgB1rD,KAAKwpD,sBAAsB7oD,OACtCpC,EAAI0hB,GAAY,EAAG1gB,EAAIguB,EAAM5sB,OAAQpC,EAAIgB,EAAGhB,IAEjD,GADAyF,GAASupB,EAAMhvB,GAAGoC,OAAS+qD,EACvB1nD,EAAQ,EACR,MAAO,CAAExB,IAAKjE,EAAGkE,OAAQuB,EAAQupB,EAAMhvB,GAAGoC,OAAS+qD,GAE3D,MAAO,CAAElpD,IAAKjD,EAAI,EAAGkD,OAAQuB,EAAQupB,EAAMhuB,EAAI,GAAGoB,OAAS+qD,EAC/D,EACAvC,EAAStmD,UAAU8oD,gBAAkB,SAAU53B,EAAK9T,GAKhD,IAJA,IAAIsN,EAAQvtB,KAAK++B,QAAU/+B,KAAKupD,cAC5BmC,EAAgB1rD,KAAKwpD,sBAAsB7oD,OAC3CqD,EAAQ,EACRxB,EAAM2J,KAAKE,IAAI0nB,EAAIvxB,IAAK+qB,EAAM5sB,QACzBpC,EAAI0hB,GAAY,EAAG1hB,EAAIiE,IAAOjE,EACnCyF,GAASupB,EAAMhvB,GAAGoC,OAAS+qD,EAC/B,OAAO1nD,EAAQ+vB,EAAItxB,MACvB,EACA0mD,EAAStmD,UAAU0nD,OAAS,SAAU5gC,GAClC,OAAOA,EAAK7oB,MAAM,aACtB,EACOqoD,CACX,CAnU6B,GAoU7BA,EAAStmD,UAAU6mD,aAAe,GAClCP,EAAStmD,UAAU8mD,aAAe,OAClChvC,EAAItC,UAAU8wC,EAAStmD,UAAW0V,GAClC7R,EAAQyiD,SAAWA,CAEnB,IAEAlrD,IAAIC,OAAO,2BAA2B,CAAC,UAAU,UAAU,SAAS,cAAc,0BAA0B,SAASuI,EAASC,EAASvD,GAAQ,aAC/I,IAAIwX,EAAMlU,EAAQ,aACd8R,EAAe9R,EAAQ,uBAAuB8R,aAC9CqzC,EAAqC,WACrC,SAASA,EAAoBC,EAAW3pC,GACpCliB,KAAK8rD,SAAU,EACf9rD,KAAKutB,MAAQ,GACbvtB,KAAK68C,OAAS,GACd78C,KAAK+rD,YAAc,EACnB/rD,KAAK6rD,UAAYA,EACjB,IAAIznB,EAAOpkC,KACXA,KAAKgsD,QAAU,WACX,GAAK5nB,EAAK0nB,QAAV,CAGA,IAAIG,EAAc,IAAIpjC,KAClBkjC,EAAc3nB,EAAK2nB,YACnBG,GAAW,EACXhoD,EAAMkgC,EAAKlgC,IACXioD,EAAYJ,EAChB,MAAO3nB,EAAK7W,MAAMw+B,GACdA,IACJ,IAAIpgD,EAAMzH,EAAIm6B,YACV+tB,EAAiB,EACrBhoB,EAAK0nB,SAAU,EACf,MAAOC,EAAcpgD,EAAK,CACtBy4B,EAAKioB,aAAaN,GAClBG,EAAUH,EACV,GACIA,UACK3nB,EAAK7W,MAAMw+B,IAEpB,GADAK,IACKA,EAAiB,IAAM,GAAO,IAAIvjC,KAASojC,EAAe,GAAI,CAC/D7nB,EAAK0nB,QAAUp9C,WAAW01B,EAAK4nB,QAAS,IACxC,KACJ,CACJ,CACA5nB,EAAK2nB,YAAcA,GACH,GAAZG,IACAA,EAAUH,GACVI,GAAaD,GACb9nB,EAAKkoB,gBAAgBH,EAAWD,EA3BpC,CA4BJ,CACJ,CAqFA,OApFAN,EAAoB/oD,UAAU0pD,aAAe,SAAUV,GACnD7rD,KAAK6rD,UAAYA,EACjB7rD,KAAKutB,MAAQ,GACbvtB,KAAK68C,OAAS,GACd78C,KAAKM,MAAM,EACf,EACAsrD,EAAoB/oD,UAAU2pD,YAAc,SAAUtoD,GAClDlE,KAAKkE,IAAMA,EACXlE,KAAKutB,MAAQ,GACbvtB,KAAK68C,OAAS,GACd78C,KAAK22B,MACT,EACAi1B,EAAoB/oD,UAAUypD,gBAAkB,SAAU5qC,EAAUC,GAChE,IAAInH,EAAO,CACPiyC,MAAO/qC,EACP9U,KAAM+U,GAEV3hB,KAAKmZ,QAAQ,SAAU,CAAEqB,KAAMA,GACnC,EACAoxC,EAAoB/oD,UAAUvC,MAAQ,SAAU2f,GAC5CjgB,KAAK+rD,YAAc5/C,KAAKE,IAAI4T,GAAY,EAAGjgB,KAAK+rD,YAAa/rD,KAAKkE,IAAIm6B,aACtEr+B,KAAKutB,MAAM1f,OAAO7N,KAAK+rD,YAAa/rD,KAAKutB,MAAM5sB,QAC/CX,KAAK68C,OAAOhvC,OAAO7N,KAAK+rD,YAAa/rD,KAAK68C,OAAOl8C,QACjDX,KAAK22B,OACL32B,KAAK8rD,QAAUp9C,WAAW1O,KAAKgsD,QAAS,IAC5C,EACAJ,EAAoB/oD,UAAU6pD,cAAgB,WACrC1sD,KAAK8rD,UACN9rD,KAAK8rD,QAAUp9C,WAAW1O,KAAKgsD,QAAS,KAChD,EACAJ,EAAoB/oD,UAAU8pD,gBAAkB,SAAU1Z,GACtD,IAAIhzB,EAAWgzB,EAAM3yC,MAAMkC,IACvBmJ,EAAMsnC,EAAMtvC,IAAInB,IAAMyd,EAC1B,GAAY,IAARtU,EACA3L,KAAKutB,MAAMtN,GAAY,UAEtB,GAAoB,UAAhBgzB,EAAMrL,OACX5nC,KAAKutB,MAAM1f,OAAOoS,EAAUtU,EAAM,EAAG,MACrC3L,KAAK68C,OAAOhvC,OAAOoS,EAAUtU,EAAM,EAAG,UAErC,CACD,IAAIwhC,EAAO3hC,MAAMG,EAAM,GACvBwhC,EAAKvsC,QAAQqf,EAAU,GACvBjgB,KAAKutB,MAAM1f,OAAOpG,MAAMzH,KAAKutB,MAAO4f,GACpCntC,KAAK68C,OAAOhvC,OAAOpG,MAAMzH,KAAK68C,OAAQ1P,EAC1C,CACAntC,KAAK+rD,YAAc5/C,KAAKE,IAAI4T,EAAUjgB,KAAK+rD,YAAa/rD,KAAKkE,IAAIm6B,aACjEr+B,KAAK22B,MACT,EACAi1B,EAAoB/oD,UAAU8zB,KAAO,WAC7B32B,KAAK8rD,SACLl9C,aAAa5O,KAAK8rD,SACtB9rD,KAAK8rD,SAAU,CACnB,EACAF,EAAoB/oD,UAAUk+C,UAAY,SAAUv+C,GAChD,OAAOxC,KAAKutB,MAAM/qB,IAAQxC,KAAKqsD,aAAa7pD,EAChD,EACAopD,EAAoB/oD,UAAU+pD,SAAW,SAAUpqD,GAG/C,OAFIxC,KAAK+rD,aAAevpD,GACpBxC,KAAKqsD,aAAa7pD,GACfxC,KAAK68C,OAAOr6C,IAAQ,OAC/B,EACAopD,EAAoB/oD,UAAUwpD,aAAe,SAAU7pD,GACnD,IAAI4M,EAAOpP,KAAKkE,IAAI7B,QAAQG,GACxB6jC,EAAQrmC,KAAK68C,OAAOr6C,EAAM,GAC1BgY,EAAOxa,KAAK6rD,UAAU/lD,cAAcsJ,EAAMi3B,EAAO7jC,GAUrD,OATIxC,KAAK68C,OAAOr6C,GAAO,KAAOgY,EAAK6rB,MAAQ,IACvCrmC,KAAK68C,OAAOr6C,GAAOgY,EAAK6rB,MACxBrmC,KAAKutB,MAAM/qB,EAAM,GAAK,KAClBxC,KAAK+rD,YAAcvpD,EAAM,IACzBxC,KAAK+rD,YAAcvpD,EAAM,IAExBxC,KAAK+rD,aAAevpD,IACzBxC,KAAK+rD,YAAcvpD,EAAM,GAEtBxC,KAAKutB,MAAM/qB,GAAOgY,EAAKzU,MAClC,EACA6lD,EAAoB/oD,UAAUgqD,QAAU,WACpC7sD,KAAK8rD,SAAU,EACf9rD,KAAKutB,MAAQ,GACbvtB,KAAK68C,OAAS,GACd78C,KAAK+rD,YAAc,EACnB/rD,KAAKqa,oBACT,EACOuxC,CACX,CA9HwC,GA+HxCjxC,EAAItC,UAAUuzC,EAAoB/oD,UAAW0V,GAC7C7R,EAAQklD,oBAAsBA,CAE9B,IAEA3tD,IAAIC,OAAO,uBAAuB,CAAC,UAAU,UAAU,SAAS,eAAe,cAAc,SAASuI,EAASC,EAASvD,GAAQ,aAChI,IAAIqZ,EAAO/V,EAAQ,cACfxE,EAAQwE,EAAQ,WAAWxE,MAC3B6qD,EAAiC,WACjC,SAASA,EAAgB7+C,EAAQ8+C,EAAO/rD,QACvB,IAATA,IAAmBA,EAAO,QAC9BhB,KAAKgtD,UAAU/+C,GACfjO,KAAK+sD,MAAQA,EACb/sD,KAAKgB,KAAOA,CAChB,CAiCA,OAhCA8rD,EAAgBjqD,UAAUmqD,UAAY,SAAU/+C,GACxCjO,KAAKiO,OAAS,IAAMA,EAAS,KAEjCjO,KAAKiO,OAASA,EACdjO,KAAKsU,MAAQ,GACjB,EACAw4C,EAAgBjqD,UAAUoqD,OAAS,SAAUx0B,EAAMy0B,EAAahrC,EAASjD,GACrE,GAAKjf,KAAKiO,OAIV,IAFA,IAAI3N,EAAQ2e,EAAOyC,SAAU/d,EAAMsb,EAAO0C,QACtCwrC,EAAuB,CAAC,EACnB5uD,EAAI+B,EAAO/B,GAAKoF,EAAKpF,IAAK,CAC/B,IAAI89C,EAASr8C,KAAKsU,MAAM/V,GACV,MAAV89C,IACAA,EAAS7/B,EAAKxO,gBAAgBkU,EAAQ7f,QAAQ9D,GAAIyB,KAAKiO,QACnDouC,EAAO17C,OAASX,KAAKotD,aACrB/Q,EAASA,EAAOp2C,MAAM,EAAGjG,KAAKotD,aAClC/Q,EAASA,EAAO/wC,KAAI,SAAUhJ,GAC1B,OAAO,IAAIL,EAAM1D,EAAG+D,EAAM6L,OAAQ5P,EAAG+D,EAAM6L,OAAS7L,EAAM3B,OAC9D,IACAX,KAAKsU,MAAM/V,GAAK89C,EAAO17C,OAAS07C,EAAS,IAE7C,IAAK,IAAIz8B,EAAIy8B,EAAO17C,OAAQif,KAAM,CAC9B,IAAIytC,EAAqBhR,EAAOz8B,GAAGqC,cAAcC,GAC7CorC,EAAgBD,EAAmBnlD,WACnCilD,EAAqBG,KAEzBH,EAAqBG,IAAiB,EACtCJ,EAAYK,qBAAqB90B,EAAM40B,EAAoBrtD,KAAK+sD,MAAO9tC,GAC3E,CACJ,CACJ,EACO6tC,CACX,CAxCoC,GAyCpCA,EAAgBjqD,UAAUuqD,WAAa,IACvC1mD,EAAQomD,gBAAkBA,CAE1B,IAEA7uD,IAAIC,OAAO,kBAAkB,CAAC,UAAU,UAAU,SAAS,cAAc,SAASuI,EAASC,EAASvD,GAAQ,aAC5G,IAAIqqD,EAA6B,WAC7B,SAASA,IACLxtD,KAAKytD,eACLztD,KAAK0tD,QAAU,EACf1tD,KAAK2tD,WAAY,EACjB3tD,KAAK4tD,WAAa1I,IAClBllD,KAAK6tD,OACT,CA+KA,OA9KAL,EAAY3qD,UAAUirD,WAAa,SAAU5rC,GACzCliB,KAAK6gD,SAAW3+B,CACpB,EACAsrC,EAAY3qD,UAAU+Q,IAAM,SAAUq/B,EAAO8a,EAAY7rC,GACrD,IAAIliB,KAAK2tD,WAEL1a,GAASjzC,KAAKguD,WAAlB,CAIA,GAFKhuD,KAAKytD,iBACNztD,KAAKiuD,WAAWttD,OAAS,IACV,IAAfotD,IAAyB/tD,KAAKkuD,WAAY,CAC1CluD,KAAKkuD,WAAa,GAClB,IAAIC,EAAkBnuD,KAAKouD,WAAWztD,OAClCwtD,EAAkBnuD,KAAK4tD,WAAa,GACpC5tD,KAAKouD,WAAWvgD,OAAO,EAAGsgD,EAAkBnuD,KAAK4tD,WAAa,GAElE5tD,KAAKouD,WAAW5tD,KAAKR,KAAKkuD,YAC1Bjb,EAAMlqC,GAAK/I,KAAKquD,OAASruD,KAAK0tD,OAClC,CACoB,UAAhBza,EAAMrL,QAAsC,UAAhBqL,EAAMrL,SAClC5nC,KAAKguD,WAAa/a,GACtBjzC,KAAKkuD,WAAW1tD,KAAKyyC,EAdX,CAed,EACAua,EAAY3qD,UAAUyrD,aAAe,SAAUjoD,EAAWkoD,GACtDvuD,KAAK+1C,WAAWv1C,KAAK,CACjBS,MAAOoF,EACPkoD,IAAKA,GAAOvuD,KAAKquD,MAEzB,EACAb,EAAY3qD,UAAU2rD,cAAgB,WAElC,OADAxuD,KAAKkuD,WAAa,KACXluD,KAAKquD,IAChB,EACAb,EAAY3qD,UAAU4rD,YAAc,SAAUzuB,EAAMurB,GACtC,MAANA,IACAA,EAAKvrD,KAAKquD,KAAO,GAErB,IADA,IAAInQ,EAAQl+C,KAAKouD,WACR7vD,EAAI2/C,EAAMv9C,OAAQpC,KAAM,CAC7B,IAAI00C,EAAQiL,EAAM3/C,GAAG,GACrB,GAAI00C,EAAMlqC,IAAMi3B,EACZ,MACAiT,EAAMlqC,GAAKwiD,IACXtY,EAAMyb,QAAS,EACvB,CACA1uD,KAAKkuD,WAAa,IACtB,EACAV,EAAY3qD,UAAU8rD,aAAe,SAAUJ,EAAK3I,GAEhD,IADA,IAAI1H,EAAQl+C,KAAK+1C,WACRx3C,EAAI2/C,EAAMv9C,OAAQpC,KAAM,CAC7B,IAAI8H,EAAY63C,EAAM3/C,GACtB,GAAI8H,EAAUkoD,IAAMA,EAGhB,OAFI3I,IACAv/C,EAAY63C,EAAM3/C,EAAI,IACnB8H,CAEf,CACJ,EACAmnD,EAAY3qD,UAAU+rD,YAAc,WAChC,OAAO5uD,KAAKquD,IAChB,EACAb,EAAY3qD,UAAUgsD,UAAY,SAAU7uB,EAAMurB,GACpC,MAANA,IACAA,EAAKvrD,KAAKquD,KAAO,GAGrB,IAFA,IAAInQ,EAAQl+C,KAAKouD,WACbzqD,EAAM,KAAMrD,EAAQ,EACf/B,EAAI2/C,EAAMv9C,OAAQpC,KAAM,CAC7B,IAAI00C,EAAQiL,EAAM3/C,GAAG,GAGrB,GAFI00C,EAAMlqC,GAAKwiD,IAAO5nD,IAClBA,EAAMpF,EAAI,GACV00C,EAAMlqC,IAAMi3B,EAAM,CAClB1/B,EAAQ/B,EAAI,EACZ,KACJ,CACJ,CACA,OAAO2/C,EAAMj4C,MAAM3F,EAAOqD,EAC9B,EACA6pD,EAAY3qD,UAAUisD,iBAAmB,SAAU9uB,EAAMurB,GAC3C,MAANA,IACAA,EAAKvrD,KAAKquD,KAAO,EACzB,EACAb,EAAY3qD,UAAUksD,gBAAkB,SAAU/uB,EAAMurB,GAC1C,MAANA,IACAA,EAAKvrD,KAAKquD,KAAO,EACzB,EACAb,EAAY3qD,UAAUmsD,KAAO,SAAU9sC,EAAS+sC,GAC5CjvD,KAAKkuD,WAAa,KAClB,IAAIhQ,EAAQl+C,KAAKouD,WACjB,GAAKc,EAAmBhR,EAAOA,EAAMv9C,QAArC,CAEKuhB,IACDA,EAAUliB,KAAK6gD,UACf7gD,KAAKmvD,oBAAsBnvD,KAAKquD,MAAQruD,KAAKiuD,WAAWttD,SACxDX,KAAKiuD,WAAa,IACtBjuD,KAAK2tD,WAAY,EACjB,IAAIyB,EAAWlR,EAAMlkC,MACjBq1C,EAAqB,KAOzB,OANID,IACAC,EAAqBntC,EAAQotC,YAAYF,EAAUH,GACnDjvD,KAAKiuD,WAAWztD,KAAK4uD,GACrBpvD,KAAKuvD,YAETvvD,KAAK2tD,WAAY,EACV0B,CAdG,CAed,EACA7B,EAAY3qD,UAAU2sD,KAAO,SAAUttC,EAAS+sC,GAK5C,GAJAjvD,KAAKkuD,WAAa,KACbhsC,IACDA,EAAUliB,KAAK6gD,UACnB7gD,KAAK2tD,WAAY,EACb3tD,KAAKmvD,mBAAqBnvD,KAAKquD,KAAM,CACrC,IAAIoB,EAAOzvD,KAAK6uD,UAAU7uD,KAAKmvD,kBAAmBnvD,KAAKquD,KAAO,GAC9DqB,EAAgB1vD,KAAKiuD,WAAYwB,GACjCzvD,KAAKmvD,kBAAoBnvD,KAAKquD,KAC9BruD,KAAKiuD,WAAW9iD,SAAQ,SAAUoY,GAC9BA,EAAE,GAAGxa,KAAO/I,KAAK0tD,OACrB,GAAG1tD,KACP,CACA,IAAIovD,EAAWpvD,KAAKiuD,WAAWj0C,MAC3B21C,EAAqB,KAOzB,OANIP,IACAO,EAAqBztC,EAAQ0tC,YAAYR,EAAUH,GACnDjvD,KAAKouD,WAAW5tD,KAAK4uD,GACrBpvD,KAAKuvD,YAETvvD,KAAK2tD,WAAY,EACVgC,CACX,EACAnC,EAAY3qD,UAAU0sD,SAAW,WAC7B,IAAIrR,EAAQl+C,KAAKouD,WACbyB,EAAY3R,EAAMA,EAAMv9C,OAAS,GACjCoI,EAAK8mD,GAAaA,EAAU,GAAG9mD,IAAM,EACzC/I,KAAKmvD,kBAAoBpmD,EACzB/I,KAAKquD,KAAOtlD,CAChB,EACAykD,EAAY3qD,UAAUgrD,MAAQ,WAC1B7tD,KAAKkuD,WAAa,KAClBluD,KAAKguD,WAAa,KAClBhuD,KAAKouD,WAAa,GAClBpuD,KAAKiuD,WAAa,GAClBjuD,KAAKquD,KAAO,EACZruD,KAAK8vD,KAAO,EACZ9vD,KAAKmvD,kBAAoBnvD,KAAKquD,KAC9BruD,KAAK+1C,WAAa,EACtB,EACAyX,EAAY3qD,UAAUktD,QAAU,WAC5B,OAAO/vD,KAAKouD,WAAWztD,OAAS,CACpC,EACA6sD,EAAY3qD,UAAUmtD,QAAU,WAC5B,OAAOhwD,KAAKiuD,WAAWttD,OAAS,CACpC,EACA6sD,EAAY3qD,UAAUotD,SAAW,SAAU1B,QAC5BnoD,GAAPmoD,IACAA,EAAMvuD,KAAKquD,MACfruD,KAAK8vD,KAAOvB,CAChB,EACAf,EAAY3qD,UAAUqtD,aAAe,WACjC,OAAOlwD,KAAKquD,OAASruD,KAAK8vD,IAC9B,EACAtC,EAAY3qD,UAAUs5C,OAAS,WAC3B,MAAO,CACH8R,WAAYjuD,KAAKiuD,WACjBG,WAAYpuD,KAAKouD,WAEzB,EACAZ,EAAY3qD,UAAU05C,SAAW,SAAU4T,GACvCnwD,KAAK6tD,QACL7tD,KAAKouD,WAAa+B,EAAK/B,WACvBpuD,KAAKiuD,WAAakC,EAAKlC,UAC3B,EACAT,EAAY3qD,UAAUutD,aAAe,SAAUnd,GAC3C,OAAIA,EACOod,EAAepd,GACnBod,EAAerwD,KAAKouD,YAAc,UAAYiC,EAAerwD,KAAKiuD,WAC7E,EACOT,CACX,CAvLgC,GA4LhC,SAAS0B,EAAmBhR,EAAOnqB,GAC/B,IAAK,IAAIx1B,EAAIw1B,EAAKx1B,KAAM,CACpB,IAAI6wD,EAAWlR,EAAM3/C,GACrB,GAAI6wD,IAAaA,EAAS,GAAGV,OAAQ,CACjC,MAAOnwD,EAAIw1B,EAAM,EAAG,CAChB,IAAIu8B,EAAUC,EAAWrS,EAAM3/C,GAAI2/C,EAAM3/C,EAAI,IAC7C2/C,EAAM3/C,GAAK+xD,EAAQ,GACnBpS,EAAM3/C,EAAI,GAAK+xD,EAAQ,GACvB/xD,GACJ,CACA,OAAO,CACX,CACJ,CACJ,CAjBAivD,EAAY3qD,UAAU2kC,QAAUgmB,EAAY3qD,UAAUktD,QACtDvC,EAAY3qD,UAAU2tD,QAAUhD,EAAY3qD,UAAUmtD,QACtDxC,EAAY3qD,UAAU4tD,QAAUjD,EAAY3qD,UAAUqtD,aACtD1C,EAAY3qD,UAAU6tD,UAAYlD,EAAY3qD,UAAUotD,SAexD,IAAIhuD,EAAQwE,EAAQ,WAAWxE,MAC3Bye,EAAMze,EAAMsgB,cACItgB,EAAMsgB,cAwC1B,SAASioC,EAASz2B,GACd,MAAO,CAAEvxB,IAAKuxB,EAAIvxB,IAAKC,OAAQsxB,EAAItxB,OACvC,CACA,SAASkuD,EAAW5wD,GAChB,MAAO,CACHO,MAAOkqD,EAASzqD,EAAEO,OAClBqD,IAAK6mD,EAASzqD,EAAE4D,KAChBikC,OAAQ7nC,EAAE6nC,OACVra,MAAOxtB,EAAEwtB,MAAMtnB,QAEvB,CACA,SAASoqD,EAAetwD,GAEpB,GADAA,EAAIA,GAAKC,KACLwL,MAAMmB,QAAQ5M,GACd,OAAOA,EAAEuL,IAAI+kD,GAAgBznD,KAAK,MAEtC,IAAI5H,EAAO,GAmBX,OAlBIjB,EAAE6nC,QACF5mC,EAAmB,UAAZjB,EAAE6nC,OAAqB,IAAM,IACpC5mC,GAAQ,IAAMjB,EAAEwtB,MAAQ,KAEnBxtB,EAAEkB,QAEHD,EADAwK,MAAMmB,QAAQ5M,EAAEkB,OACTlB,EAAEkB,MAAMqK,IAAIslD,GAAgBhoD,KAAK,MAGjCgoD,EAAe7wD,EAAEkB,QAG5BlB,EAAEO,QACFU,GAAQ4vD,EAAe7wD,KAEvBA,EAAEgJ,IAAMhJ,EAAEwuD,OACVvtD,GAAQ,OAASjB,EAAEgJ,IAAMhJ,EAAEwuD,KAAO,KAE/BvtD,CACX,CACA,SAAS4vD,EAAetyD,GACpB,OAAOA,EAAEgC,MAAMkC,IAAM,IAAMlE,EAAEgC,MAAMmC,OAC7B,KAAOnE,EAAEqF,IAAInB,IAAM,IAAMlE,EAAEqF,IAAIlB,MACzC,CACA,SAASouD,EAAKC,EAAIC,GACd,IAAIC,EAAkB,UAAbF,EAAGlpB,OACRqpB,EAAkB,UAAbF,EAAGnpB,OACZ,GAAIopB,GAAMC,EACN,GAAIvwC,EAAIqwC,EAAGzwD,MAAOwwD,EAAGntD,MAAQ,EACzBvC,EAAM2vD,EAAID,GAAK,OAEd,MAAIpwC,EAAIqwC,EAAGzwD,MAAOwwD,EAAGxwD,QAAU,GAIhC,OAAO,KAHPc,EAAM0vD,EAAIC,EAAI,EAIlB,MAEC,GAAIC,IAAOC,EACZ,GAAIvwC,EAAIqwC,EAAGzwD,MAAOwwD,EAAGntD,MAAQ,EACzBvC,EAAM2vD,EAAID,GAAK,OAEd,MAAIpwC,EAAIqwC,EAAGptD,IAAKmtD,EAAGxwD,QAAU,GAI9B,OAAO,KAHPc,EAAM0vD,EAAIC,GAAK,EAInB,MAEC,IAAKC,GAAMC,EACZ,GAAIvwC,EAAIqwC,EAAGzwD,MAAOwwD,EAAGxwD,QAAU,EAC3Bc,EAAM2vD,EAAID,EAAI,OAEb,MAAIpwC,EAAIqwC,EAAGzwD,MAAOwwD,EAAGxwD,QAAU,GAIhC,OAAO,KAHPc,EAAM0vD,EAAIC,EAAI,EAIlB,MAEC,IAAKC,IAAOC,EACb,GAAIvwC,EAAIqwC,EAAGzwD,MAAOwwD,EAAGxwD,QAAU,EAC3Bc,EAAM2vD,EAAID,EAAI,OAEb,MAAIpwC,EAAIqwC,EAAGptD,IAAKmtD,EAAGxwD,QAAU,GAI9B,OAAO,KAHPc,EAAM0vD,EAAIC,GAAK,EAInB,CAEJ,MAAO,CAACA,EAAID,EAChB,CACA,SAASP,EAAWW,EAAKC,GACrB,IAAK,IAAI5yD,EAAI2yD,EAAIvwD,OAAQpC,KACrB,IAAK,IAAIqhB,EAAI,EAAGA,EAAIuxC,EAAIxwD,OAAQif,IAC5B,IAAKixC,EAAKK,EAAI3yD,GAAI4yD,EAAIvxC,IAAK,CACvB,MAAOrhB,EAAI2yD,EAAIvwD,OAAQ,CACnB,MAAOif,IACHixC,EAAKM,EAAIvxC,GAAIsxC,EAAI3yD,IAErBqhB,EAAIuxC,EAAIxwD,OACRpC,GACJ,CACA,MAAO,CAAC2yD,EAAKC,EACjB,CAKR,OAFAD,EAAIE,gBAAkBD,EAAIC,gBACtBF,EAAIG,eAAiBF,EAAIE,eAAiB,KACvC,CAACF,EAAKD,EACjB,CACA,SAASI,EAAMR,EAAIS,GACf,IAAIP,EAAkB,UAAbF,EAAGlpB,OACRqpB,EAAkB,UAAbM,EAAG3pB,OACZ,GAAIopB,GAAMC,EACFvwC,EAAIowC,EAAGxwD,MAAOixD,EAAGjxD,OAAS,EAC1Bc,EAAMmwD,EAAIT,EAAI,GAGd1vD,EAAM0vD,EAAIS,EAAI,QAGjB,GAAIP,IAAOC,EACRvwC,EAAIowC,EAAGxwD,MAAOixD,EAAG5tD,MAAQ,EACzBvC,EAAM0vD,EAAIS,GAAK,IAEV7wC,EAAIowC,EAAGxwD,MAAOixD,EAAGjxD,QAAU,GAIhCc,EAAM0vD,EAAI7uD,EAAM2f,WAAW2vC,EAAGjxD,MAAOwwD,EAAGxwD,QAAS,GAHjDc,EAAMmwD,EAAIT,EAAI,SAOjB,IAAKE,GAAMC,EACRvwC,EAAI6wC,EAAGjxD,MAAOwwD,EAAGntD,MAAQ,EACzBvC,EAAMmwD,EAAIT,GAAK,IAEVpwC,EAAI6wC,EAAGjxD,MAAOwwD,EAAGxwD,QAAU,GAIhCc,EAAMmwD,EAAItvD,EAAM2f,WAAWkvC,EAAGxwD,MAAOixD,EAAGjxD,QAAS,GAHjDc,EAAM0vD,EAAIS,EAAI,SAOjB,IAAKP,IAAOC,EACb,GAAIvwC,EAAI6wC,EAAGjxD,MAAOwwD,EAAGntD,MAAQ,EACzBvC,EAAMmwD,EAAIT,GAAK,OAEd,CAID,IAAInL,EAAQC,EAJX,KAAIllC,EAAI6wC,EAAG5tD,IAAKmtD,EAAGxwD,QAAU,GAmB9B,OAdIogB,EAAIowC,EAAGxwD,MAAOixD,EAAGjxD,OAAS,IAC1BqlD,EAASmL,EACTA,EAAKU,EAAWV,EAAIS,EAAGjxD,QAEvBogB,EAAIowC,EAAGntD,IAAK4tD,EAAG5tD,KAAO,IACtBiiD,EAAQ4L,EAAWV,EAAIS,EAAG5tD,MAE9B8tD,EAASF,EAAG5tD,IAAKmtD,EAAGxwD,MAAOwwD,EAAGntD,KAAM,GAChCiiD,IAAUD,IACVmL,EAAGvjC,MAAQq4B,EAAMr4B,MACjBujC,EAAGxwD,MAAQslD,EAAMtlD,MACjBwwD,EAAGntD,IAAMiiD,EAAMjiD,IACfiiD,EAAQkL,GAEL,CAACS,EAAI5L,EAAQC,GAAOzqC,OAAOgvB,SAlBlC/oC,EAAM0vD,EAAIS,GAAK,EAmBnB,CAEJ,MAAO,CAACA,EAAIT,EAChB,CACA,SAAS1vD,EAAM0vD,EAAIC,EAAI3jB,GACnBqkB,EAASX,EAAGxwD,MAAOywD,EAAGzwD,MAAOywD,EAAGptD,IAAKypC,GACrCqkB,EAASX,EAAGntD,IAAKotD,EAAGzwD,MAAOywD,EAAGptD,IAAKypC,EACvC,CACA,SAASqkB,EAAS19B,EAAKzzB,EAAOqD,EAAKypC,GAC3BrZ,EAAIvxB,MAAe,GAAP4qC,EAAW9sC,EAAQqD,GAAKnB,MACpCuxB,EAAItxB,QAAU2qC,GAAOzpC,EAAIlB,OAASnC,EAAMmC,SAE5CsxB,EAAIvxB,KAAO4qC,GAAOzpC,EAAInB,IAAMlC,EAAMkC,IACtC,CACA,SAASgvD,EAAW/xD,EAAGs0B,GACnB,IAAIxG,EAAQ9tB,EAAE8tB,MACV5pB,EAAMlE,EAAEkE,IACZlE,EAAEkE,IAAM6mD,EAASz2B,GACjB,IAAI29B,EAAajyD,EAAEkE,IAAInB,IAAM/C,EAAEa,MAAMkC,IACjCmvD,EAAapkC,EAAM1f,OAAO6jD,EAAYnkC,EAAM5sB,QAC5C20C,EAAMoc,EAAa39B,EAAItxB,OAASsxB,EAAItxB,OAAShD,EAAEa,MAAMmC,OACzD8qB,EAAM/sB,KAAKmxD,EAAW,GAAG3d,UAAU,EAAGsB,IACtCqc,EAAW,GAAKA,EAAW,GAAGtd,OAAOiB,GACrC,IAAIsc,EAAO,CACPtxD,MAAOkqD,EAASz2B,GAChBpwB,IAAKA,EACL4pB,MAAOokC,EACP/pB,OAAQnoC,EAAEmoC,QAEd,OAAOgqB,CACX,CACA,SAASC,EAAgBC,EAAW/xD,GAChCA,EAAI4wD,EAAW5wD,GACf,IAAK,IAAI6f,EAAIkyC,EAAUnxD,OAAQif,KAAM,CAEjC,IADA,IAAIwvC,EAAW0C,EAAUlyC,GAChBrhB,EAAI,EAAGA,EAAI6wD,EAASzuD,OAAQpC,IAAK,CACtC,IAAIglB,EAAI6rC,EAAS7wD,GACbwzD,EAAUT,EAAM/tC,EAAGxjB,GACvBA,EAAIgyD,EAAQ,GACU,GAAlBA,EAAQpxD,SACJoxD,EAAQ,IACR3C,EAASvhD,OAAOtP,EAAI,EAAG,EAAGwzD,EAAQ,GAAIA,EAAQ,IAC9CxzD,KAEMwzD,EAAQ,KACd3C,EAASvhD,OAAOtP,EAAG,GACnBA,KAGZ,CACK6wD,EAASzuD,QACVmxD,EAAUjkD,OAAO+R,EAAG,EAE5B,CACA,OAAOkyC,CACX,CACA,SAASpC,EAAgBoC,EAAWE,GAChC,IAAK,IAAIzzD,EAAI,EAAGA,EAAIyzD,EAAUrxD,OAAQpC,IAElC,IADA,IAAIwsD,EAASiH,EAAUzzD,GACdqhB,EAAI,EAAGA,EAAImrC,EAAOpqD,OAAQif,IAC/BiyC,EAAgBC,EAAW/G,EAAOnrC,GAG9C,CACAlZ,EAAQ8mD,YAAcA,CAEtB,IAEAvvD,IAAIC,OAAO,6BAA6B,CAAC,UAAU,UAAU,SAAS,cAAc,SAASuI,EAASC,EAASvD,GAAQ,aACvH,IAAIlB,EAAQwE,EAAQ,YAAYxE,MAC5BgwD,EAA0B,WAC1B,SAASA,EAASC,EAAUC,GACxBnyD,KAAKkyD,SAAWA,EACZ1mD,MAAMmB,QAAQwlD,GACdnyD,KAAKmyD,MAAQA,EAGbA,EAAQnyD,KAAKmyD,MAAQ,CAACA,GAE1B,IAAIvlD,EAAOulD,EAAMA,EAAMxxD,OAAS,GAChCX,KAAKsgB,MAAQ,IAAIre,EAAMkwD,EAAM,GAAG7xD,MAAMkC,IAAK2vD,EAAM,GAAG7xD,MAAMmC,OAAQmK,EAAKjJ,IAAInB,IAAKoK,EAAKjJ,IAAIlB,QACzFzC,KAAKM,MAAQN,KAAKsgB,MAAMhgB,MACxBN,KAAK2D,IAAM3D,KAAKsgB,MAAM3c,IACtB3D,KAAKmyD,MAAMhnD,SAAQ,SAAU80B,GACzBA,EAAKmyB,YAAYpyD,KACrB,GAAGA,KACP,CAyKA,OAxKAiyD,EAASpvD,UAAUwvD,SAAW,SAAUjxD,GACpCpB,KAAKM,MAAMkC,KAAOpB,EAClBpB,KAAK2D,IAAInB,KAAOpB,EAChBpB,KAAKmyD,MAAMhnD,SAAQ,SAAU80B,GACzBA,EAAK3/B,MAAMkC,KAAOpB,EAClB6+B,EAAKt8B,IAAInB,KAAOpB,CACpB,GACJ,EACA6wD,EAASpvD,UAAUmpC,QAAU,SAAU/L,GACnC,GAAIA,EAAKqyB,QAAS,CACd,GAAIryB,EAAK3/B,MAAMkC,IAAMxC,KAAKigB,UAAYggB,EAAK9f,OAASngB,KAAKmgB,OACrD,MAAM,IAAI1F,MAAM,6DAEpBza,KAAKmyD,MAAM3xD,KAAKy/B,GAChBjgC,KAAKmyD,MAAMt4B,MAAK,SAAUz6B,EAAG8F,GACzB,OAAQ9F,EAAEkhB,MAAMiB,WAAWrc,EAAE5E,MAAMkC,IAAK0C,EAAE5E,MAAMmC,OACpD,IACIzC,KAAKsgB,MAAMiB,WAAW0e,EAAK3/B,MAAMkC,IAAKy9B,EAAK3/B,MAAMmC,QAAU,GAC3DzC,KAAK2D,IAAInB,IAAMy9B,EAAKt8B,IAAInB,IACxBxC,KAAK2D,IAAIlB,OAASw9B,EAAKt8B,IAAIlB,QAEtBzC,KAAKsgB,MAAMgB,aAAa2e,EAAKt8B,IAAInB,IAAKy9B,EAAKt8B,IAAIlB,QAAU,IAC9DzC,KAAKM,MAAMkC,IAAMy9B,EAAK3/B,MAAMkC,IAC5BxC,KAAKM,MAAMmC,OAASw9B,EAAK3/B,MAAMmC,OAEvC,MACK,GAAIw9B,EAAK3/B,MAAMkC,KAAOxC,KAAK2D,IAAInB,IAChCxC,KAAKmyD,MAAM3xD,KAAKy/B,GAChBjgC,KAAK2D,IAAInB,IAAMy9B,EAAKt8B,IAAInB,IACxBxC,KAAK2D,IAAIlB,OAASw9B,EAAKt8B,IAAIlB,WAE1B,IAAIw9B,EAAKt8B,IAAInB,KAAOxC,KAAKM,MAAMkC,IAMhC,MAAM,IAAIiY,MAAM,kEALhBza,KAAKmyD,MAAMvxD,QAAQq/B,GACnBjgC,KAAKM,MAAMkC,IAAMy9B,EAAK3/B,MAAMkC,IAC5BxC,KAAKM,MAAMmC,OAASw9B,EAAK3/B,MAAMmC,MAInC,CACAw9B,EAAKyZ,SAAW15C,IACpB,EACAiyD,EAASpvD,UAAU0vD,YAAc,SAAU/vD,GACvC,OAAOA,GAAOxC,KAAKM,MAAMkC,KAAOA,GAAOxC,KAAK2D,IAAInB,GACpD,EACAyvD,EAASpvD,UAAU2vD,KAAO,SAAUzqD,EAAUoY,EAAQC,GAClD,IAAqC6f,EAAMvf,EAAKiW,EAA5C87B,EAAU,EAAGN,EAAQnyD,KAAKmyD,MAAwBO,GAAW,EACnD,MAAVvyC,IACAA,EAASngB,KAAK2D,IAAInB,IAClB4d,EAAYpgB,KAAK2D,IAAIlB,QAEzB,IAAK,IAAIlE,EAAI,EAAGA,EAAI4zD,EAAMxxD,OAAQpC,IAAK,CAGnC,GAFA0hC,EAAOkyB,EAAM5zD,GACbmiB,EAAMuf,EAAK3f,MAAMgB,aAAanB,EAAQC,IAC1B,GAARM,EAEA,YADA3Y,EAAS,KAAMoY,EAAQC,EAAWqyC,EAASC,GAK/C,GAFA/7B,EAAO5uB,EAAS,KAAMk4B,EAAK3/B,MAAMkC,IAAKy9B,EAAK3/B,MAAMmC,OAAQgwD,EAASC,GAClE/7B,GAAQA,GAAQ5uB,EAASk4B,EAAK0yB,YAAa1yB,EAAK3/B,MAAMkC,IAAKy9B,EAAK3/B,MAAMmC,OAAQgwD,GAC1E97B,GAAgB,IAARjW,EACR,OAEJgyC,GAAYzyB,EAAKqyB,QACjBG,EAAUxyB,EAAKt8B,IAAIlB,MACvB,CACAsF,EAAS,KAAMoY,EAAQC,EAAWqyC,EAASC,EAC/C,EACAT,EAASpvD,UAAU+vD,cAAgB,SAAUpwD,EAAKC,GAE9C,IADA,IAAIw9B,EAAMvf,EACDniB,EAAI,EAAGA,EAAIyB,KAAKmyD,MAAMxxD,OAAQpC,IAAK,CAGxC,GAFA0hC,EAAOjgC,KAAKmyD,MAAM5zD,GAClBmiB,EAAMuf,EAAK3f,MAAMiB,WAAW/e,EAAKC,IACrB,GAARie,EACA,MAAO,CACHuf,KAAMA,EACN4yB,KAAM,SAGT,GAAY,IAARnyC,EACL,MAAO,CACHuf,KAAMA,EACN4yB,KAAM,SAGlB,CACA,OAAO,IACX,EACAZ,EAASpvD,UAAUiwD,eAAiB,SAAUtwD,EAAKC,EAAQkJ,GACvD,IAA2Cs0B,EAAMkyB,EAA7CxvC,EAAM3iB,KAAK4yD,cAAcpwD,EAAKC,GAClC,GAAIkgB,EAEA,GADAsd,EAAOtd,EAAIsd,KACK,UAAZtd,EAAIkwC,MACD5yB,EAAK3/B,MAAMmC,QAAUA,GACrBw9B,EAAK3/B,MAAMkC,KAAOA,EACrByE,OAAOS,SAAWT,OAAOS,QAAQqrD,IAAIvwD,EAAKC,EAAQw9B,QAEjD,GAAIA,EAAK3/B,MAAMkC,KAAOA,EAAK,CAC5B2vD,EAAQnyD,KAAKmyD,MACb,IAAI5zD,EAAI4zD,EAAM3pD,QAAQy3B,GAItB,IAHU,IAAN1hC,IACAyB,KAAKM,MAAMmC,QAAUkJ,GAEpBpN,EAAGA,EAAI4zD,EAAMxxD,OAAQpC,IAAK,CAG3B,GAFA0hC,EAAOkyB,EAAM5zD,GACb0hC,EAAK3/B,MAAMmC,QAAUkJ,GAChBs0B,EAAKqyB,QACN,OAEJryB,EAAKt8B,IAAIlB,QAAUkJ,CACvB,CACA3L,KAAK2D,IAAIlB,QAAUkJ,CACvB,CAER,EACAsmD,EAASpvD,UAAU/B,MAAQ,SAAU0B,EAAKC,GACtC,IAAIsxB,EAAM/zB,KAAK4yD,cAAcpwD,EAAKC,GAClC,IAAKsxB,GAAmB,UAAZA,EAAI8+B,KACZ,OAAO,KACX,IAAI5yB,EAAOlM,EAAIkM,KACXkyB,EAAQnyD,KAAKmyD,MACbD,EAAWlyD,KAAKkyD,SAChB3zD,EAAI4zD,EAAM3pD,QAAQy3B,GAClB+yB,EAAab,EAAM5zD,EAAI,GAC3ByB,KAAK2D,IAAInB,IAAMwwD,EAAWrvD,IAAInB,IAC9BxC,KAAK2D,IAAIlB,OAASuwD,EAAWrvD,IAAIlB,OACjC0vD,EAAQA,EAAMtkD,OAAOtP,EAAG4zD,EAAMxxD,OAASpC,GACvC,IAAI00D,EAAc,IAAIhB,EAASC,EAAUC,GAEzC,OADAD,EAASrkD,OAAOqkD,EAAS1pD,QAAQxI,MAAQ,EAAG,EAAGizD,GACxCA,CACX,EACAhB,EAASpvD,UAAUg8C,MAAQ,SAAUqU,GAEjC,IADA,IAAIf,EAAQe,EAAaf,MAChB5zD,EAAI,EAAGA,EAAI4zD,EAAMxxD,OAAQpC,IAC9ByB,KAAKgsC,QAAQmmB,EAAM5zD,IAEvB,IAAI2zD,EAAWlyD,KAAKkyD,SACpBA,EAASrkD,OAAOqkD,EAAS1pD,QAAQ0qD,GAAe,EACpD,EACAjB,EAASpvD,UAAUqF,SAAW,WAC1B,IAAIya,EAAM,CAAC3iB,KAAKsgB,MAAMpY,WAAa,OAKnC,OAJAlI,KAAKmyD,MAAMhnD,SAAQ,SAAU80B,GACzBtd,EAAIniB,KAAK,KAAOy/B,EAAK/3B,WACzB,IACAya,EAAIniB,KAAK,KACFmiB,EAAI/Z,KAAK,KACpB,EACAqpD,EAASpvD,UAAUswD,cAAgB,SAAUC,GAEzC,IADA,IAAIC,EAAoB,EACf90D,EAAI,EAAGA,EAAIyB,KAAKmyD,MAAMxxD,OAAQpC,IAAK,CACxC,IAAI0hC,EAAOjgC,KAAKmyD,MAAM5zD,GAEtB,GADA60D,GAAOnzB,EAAK3/B,MAAMmC,OAAS4wD,EACvBD,EAAM,EACN,MAAO,CACH5wD,IAAKy9B,EAAK3/B,MAAMkC,IAChBC,OAAQw9B,EAAK3/B,MAAMmC,OAAS2wD,GAIpC,GADAA,GAAOnzB,EAAK0yB,YAAYhyD,OACpByyD,EAAM,EACN,OAAOnzB,EAAK3/B,MAEhB+yD,EAAoBpzB,EAAKt8B,IAAIlB,MACjC,CACA,MAAO,CACHD,IAAKxC,KAAK2D,IAAInB,IACdC,OAAQzC,KAAK2D,IAAIlB,OAAS2wD,EAElC,EACOnB,CACX,CA1L6B,GA2L7BvrD,EAAQurD,SAAWA,CAEnB,IAEAh0D,IAAIC,OAAO,iBAAiB,CAAC,UAAU,UAAU,SAAS,cAAc,SAASuI,EAASC,EAASvD,GAAQ,aAC3G,IAAIlB,EAAQwE,EAAQ,WAAWxE,MAC3BsgB,EAAgBtgB,EAAMsgB,cACtB+wC,EAA2B,WAC3B,SAASA,IACLtzD,KAAKq8C,OAAS,GACdr8C,KAAKuzD,MAAQ,CACjB,CAiNA,OAhNAD,EAAUzwD,UAAU2wD,WAAa,SAAUz/B,EAAK0/B,EAAcC,GAE1D,IADA,IAAIxT,EAAOlgD,KAAKq8C,OACP99C,EAAIm1D,GAAc,EAAGn1D,EAAI2hD,EAAKv/C,OAAQpC,IAAK,CAChD,IAAI+hB,EAAQ4/B,EAAK3hD,GACb+2B,EAAS/S,EAAcwR,EAAKzT,EAAM3c,KACtC,KAAI2xB,EAAS,GAAb,CAEA,IAAID,EAAW9S,EAAcwR,EAAKzT,EAAMhgB,OACxC,OAAe,IAAXg1B,EACOm+B,GAA6B,IAAbp+B,GAAkB92B,EAAI,EAAIA,EACjD82B,EAAW,GAAmB,IAAbA,IAAmBo+B,EAC7Bl1D,GACHA,EAAI,CANA,CAOhB,CACA,OAAQA,EAAI,CAChB,EACA+0D,EAAUzwD,UAAU+Q,IAAM,SAAU0M,GAChC,IAAImzC,GAAgBnzC,EAAMwB,UACtB4xC,EAAa1zD,KAAKwzD,WAAWlzC,EAAMhgB,MAAOmzD,GAC1CC,EAAa,IACbA,GAAcA,EAAa,GAC/B,IAAIllC,EAAWxuB,KAAKwzD,WAAWlzC,EAAM3c,IAAK8vD,EAAcC,GAKxD,OAJIllC,EAAW,EACXA,GAAYA,EAAW,EAEvBA,IACGxuB,KAAKq8C,OAAOxuC,OAAO6lD,EAAYllC,EAAWklC,EAAYpzC,EACjE,EACAgzC,EAAUzwD,UAAU8wD,QAAU,SAAUzT,GAEpC,IADA,IAAI0T,EAAU,GACLr1D,EAAI2hD,EAAKv/C,OAAQpC,KACtBq1D,EAAQpzD,KAAKiH,MAAMmsD,EAAS5zD,KAAK4T,IAAIssC,EAAK3hD,KAE9C,OAAOq1D,CACX,EACAN,EAAUzwD,UAAUgxD,eAAiB,SAAU9/B,GAC3C,IAAIx1B,EAAIyB,KAAKwzD,WAAWz/B,GACxB,GAAIx1B,GAAK,EACL,OAAOyB,KAAKq8C,OAAOxuC,OAAOtP,EAAG,EACrC,EACA+0D,EAAUzwD,UAAUg8C,MAAQ,WACxB,IAAI+U,EAAU,GACV1T,EAAOlgD,KAAKq8C,OAChB6D,EAAOA,EAAKrmB,MAAK,SAAUz6B,EAAG8F,GAC1B,OAAOqd,EAAcnjB,EAAEkB,MAAO4E,EAAE5E,MACpC,IAEA,IADA,IAAoBggB,EAAhB/f,EAAO2/C,EAAK,GACP3hD,EAAI,EAAGA,EAAI2hD,EAAKv/C,OAAQpC,IAAK,CAClC+hB,EAAQ/f,EACRA,EAAO2/C,EAAK3hD,GACZ,IAAImiB,EAAM6B,EAAcjC,EAAM3c,IAAKpD,EAAKD,OACpCogB,EAAM,IAEC,GAAPA,GAAaJ,EAAMwB,WAAcvhB,EAAKuhB,aAEtCS,EAAcjC,EAAM3c,IAAKpD,EAAKoD,KAAO,IACrC2c,EAAM3c,IAAInB,IAAMjC,EAAKoD,IAAInB,IACzB8d,EAAM3c,IAAIlB,OAASlC,EAAKoD,IAAIlB,QAEhCy9C,EAAKryC,OAAOtP,EAAG,GACfq1D,EAAQpzD,KAAKD,GACbA,EAAO+f,EACP/hB,IACJ,CAEA,OADAyB,KAAKq8C,OAAS6D,EACP0T,CACX,EACAN,EAAUzwD,UAAU0d,SAAW,SAAU/d,EAAKC,GAC1C,OAAOzC,KAAKwzD,WAAW,CAAEhxD,IAAKA,EAAKC,OAAQA,KAAa,CAC5D,EACA6wD,EAAUzwD,UAAUixD,cAAgB,SAAU//B,GAC1C,OAAO/zB,KAAKwzD,WAAWz/B,IAAQ,CACnC,EACAu/B,EAAUzwD,UAAUkxD,aAAe,SAAUhgC,GACzC,IAAIx1B,EAAIyB,KAAKwzD,WAAWz/B,GACxB,GAAIx1B,GAAK,EACL,OAAOyB,KAAKq8C,OAAO99C,EAC3B,EACA+0D,EAAUzwD,UAAU4e,SAAW,SAAUxB,EAAUE,GAC/C,IAAI+/B,EAAOlgD,KAAKq8C,OAChB,GAAI6D,EAAK,GAAG5/C,MAAMkC,IAAM2d,GAAU+/B,EAAKA,EAAKv/C,OAAS,GAAGL,MAAMkC,IAAMyd,EAChE,MAAO,GACX,IAAIyzC,EAAa1zD,KAAKwzD,WAAW,CAAEhxD,IAAKyd,EAAUxd,OAAQ,IACtDixD,EAAa,IACbA,GAAcA,EAAa,GAC/B,IAAIllC,EAAWxuB,KAAKwzD,WAAW,CAAEhxD,IAAK2d,EAAQ1d,OAAQ,GAAKixD,GACvDllC,EAAW,IACXA,GAAYA,EAAW,GAE3B,IADA,IAAIwlC,EAAU,GACLz1D,EAAIm1D,EAAYn1D,EAAIiwB,EAAUjwB,IACnCy1D,EAAQxzD,KAAK0/C,EAAK3hD,IAEtB,OAAOy1D,CACX,EACAV,EAAUzwD,UAAUoxD,UAAY,WAC5B,OAAOj0D,KAAKq8C,OAAOxuC,OAAO,EAAG7N,KAAKq8C,OAAO17C,OAC7C,EACA2yD,EAAUzwD,UAAU+pC,OAAS,SAAU1qB,GAC/BliB,KAAKkiB,SACLliB,KAAK6sC,SACT7sC,KAAKkiB,QAAUA,EACfliB,KAAKgzC,SAAWhzC,KAAKkoD,UAAUz/B,KAAKzoB,MACpCA,KAAKkiB,QAAQ7I,GAAG,SAAUrZ,KAAKgzC,SACnC,EACAsgB,EAAUzwD,UAAUgqC,OAAS,WACpB7sC,KAAKkiB,UAEVliB,KAAKkiB,QAAQ/H,eAAe,SAAUna,KAAKgzC,UAC3ChzC,KAAKkiB,QAAU,KACnB,EACAoxC,EAAUzwD,UAAUqlD,UAAY,SAAUjV,GAMtC,IALA,IAAI3yC,EAAQ2yC,EAAM3yC,MACdqD,EAAMsvC,EAAMtvC,IACZsc,EAAW3f,EAAMkC,IACjB2d,EAASxc,EAAInB,IACb65C,EAASr8C,KAAKq8C,OACT99C,EAAI,EAAGF,EAAIg+C,EAAO17C,OAAQpC,EAAIF,EAAGE,IAAK,CAC3C,IAAID,EAAI+9C,EAAO99C,GACf,GAAID,EAAEqF,IAAInB,KAAOyd,EACb,KACR,CACA,GAAoB,UAAhBgzB,EAAMrL,OAGN,IAFA,IAAIssB,EAAU/zC,EAASF,EACnBomC,GAAW/lD,EAAMmC,OAASkB,EAAIlB,OAC3BlE,EAAIF,EAAGE,IAAK,CACXD,EAAI+9C,EAAO99C,GACf,GAAID,EAAEgC,MAAMkC,IAAMyd,EACd,MASJ,GARI3hB,EAAEgC,MAAMkC,KAAOyd,GAAY3hB,EAAEgC,MAAMmC,QAAUnC,EAAMmC,SAC/CnE,EAAEgC,MAAMmC,QAAUnC,EAAMmC,QAAUzC,KAAKuzD,OAAS,IAGhDj1D,EAAEgC,MAAMmC,QAAU4jD,EAClB/nD,EAAEgC,MAAMkC,KAAO0xD,IAGnB51D,EAAEqF,IAAInB,KAAOyd,GAAY3hB,EAAEqF,IAAIlB,QAAUnC,EAAMmC,OAAQ,CACvD,GAAInE,EAAEqF,IAAIlB,QAAUnC,EAAMmC,QAAUzC,KAAKuzD,MAAQ,EAC7C,SAEAj1D,EAAEqF,IAAIlB,QAAUnC,EAAMmC,QAAU4jD,EAAU,GAAK9nD,EAAIF,EAAI,GACnDC,EAAEqF,IAAIlB,OAASnE,EAAEgC,MAAMmC,QAAUnE,EAAEqF,IAAIlB,QAAU45C,EAAO99C,EAAI,GAAG+B,MAAMmC,SACrEnE,EAAEqF,IAAIlB,QAAU4jD,GAExB/nD,EAAEqF,IAAIlB,QAAU4jD,EAChB/nD,EAAEqF,IAAInB,KAAO0xD,CACjB,CACJ,MAKA,IAFIA,EAAUj0C,EAAWE,EACrBkmC,EAAU/lD,EAAMmC,OAASkB,EAAIlB,OAC1BlE,EAAIF,EAAGE,IAAK,CACXD,EAAI+9C,EAAO99C,GACf,GAAID,EAAEgC,MAAMkC,IAAM2d,EACd,MACA7hB,EAAEqF,IAAInB,IAAM2d,IACRF,EAAW3hB,EAAEqF,IAAInB,KACdyd,GAAY3hB,EAAEqF,IAAInB,KAAOlC,EAAMmC,OAASnE,EAAEqF,IAAIlB,SACrDnE,EAAEqF,IAAInB,IAAMyd,EACZ3hB,EAAEqF,IAAIlB,OAASnC,EAAMmC,QAEhBnE,EAAEqF,IAAInB,KAAO2d,EACd7hB,EAAEqF,IAAIlB,QAAUkB,EAAIlB,QAChByxD,GAAW51D,EAAEqF,IAAIlB,OAASnC,EAAMmC,UAChCnE,EAAEqF,IAAIlB,OAASnC,EAAMmC,OACrBnE,EAAEqF,IAAInB,IAAMlC,EAAMkC,MAItBlE,EAAEqF,IAAIlB,QAAU4jD,EAChB/nD,EAAEqF,IAAInB,KAAO0xD,GAGZ51D,EAAEqF,IAAInB,IAAM2d,IACjB7hB,EAAEqF,IAAInB,KAAO0xD,GAEb51D,EAAEgC,MAAMkC,IAAM2d,IACVF,EAAW3hB,EAAEgC,MAAMkC,KAChByd,GAAY3hB,EAAEgC,MAAMkC,KAAOlC,EAAMmC,OAASnE,EAAEgC,MAAMmC,SACzDnE,EAAEgC,MAAMkC,IAAMyd,EACd3hB,EAAEgC,MAAMmC,OAASnC,EAAMmC,QAElBnE,EAAEgC,MAAMkC,KAAO2d,EAChB7hB,EAAEgC,MAAMmC,QAAUkB,EAAIlB,QAClByxD,GAAW51D,EAAEgC,MAAMmC,OAASnC,EAAMmC,UAClCnE,EAAEgC,MAAMmC,OAASnC,EAAMmC,OACvBnE,EAAEgC,MAAMkC,IAAMlC,EAAMkC,MAIxBlE,EAAEgC,MAAMmC,QAAU4jD,EAClB/nD,EAAEgC,MAAMkC,KAAO0xD,GAGd51D,EAAEgC,MAAMkC,IAAM2d,IACnB7hB,EAAEgC,MAAMkC,KAAO0xD,EAEvB,CAEJ,GAAe,GAAXA,GAAgB31D,EAAIF,EACpB,KAAOE,EAAIF,EAAGE,IAAK,CACXD,EAAI+9C,EAAO99C,GACfD,EAAEgC,MAAMkC,KAAO0xD,EACf51D,EAAEqF,IAAInB,KAAO0xD,CACjB,CAER,EACOZ,CACX,CAtN8B,GAuN9BA,EAAUzwD,UAAU0f,cAAgBA,EACpC7b,EAAQ4sD,UAAYA,CAEpB,IAEAr1D,IAAIC,OAAO,wBAAwB,CAAC,UAAU,UAAU,SAAS,mBAAmB,SAASuI,EAASC,EAASvD,GAAQ,aACvH,IAAIq0B,EAAax3B,MAAQA,KAAKw3B,WAAc,WACxC,IAAIC,EAAgB,SAAU13B,EAAGmF,GAI7B,OAHAuyB,EAAgBxvB,OAAOyvB,gBAClB,CAAEC,UAAW,cAAgBnsB,OAAS,SAAUzL,EAAGmF,GAAKnF,EAAE43B,UAAYzyB,CAAG,GAC1E,SAAUnF,EAAGmF,GAAK,IAAK,IAAIrF,KAAKqF,EAAO+C,OAAOpF,UAAUqa,eAAeta,KAAKsC,EAAGrF,KAAIE,EAAEF,GAAKqF,EAAErF,GAAI,EAC7F43B,EAAc13B,EAAGmF,EAC5B,EACA,OAAO,SAAUnF,EAAGmF,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6F,UAAU,uBAAyBhB,OAAO7E,GAAK,iCAE7D,SAAS0yB,IAAO53B,KAAKmY,YAAcpY,CAAG,CADtC03B,EAAc13B,EAAGmF,GAEjBnF,EAAE8C,UAAkB,OAANqC,EAAa+C,OAAO0F,OAAOzI,IAAM0yB,EAAG/0B,UAAYqC,EAAErC,UAAW,IAAI+0B,EACnF,CACH,CAd2C,GAexC07B,EAAY7sD,EAAQ,iBAAiB6sD,UACrCa,EAAsB,SAAUn5B,GAEhC,SAASm5B,EAAK7zC,EAAOqyC,GACjB,IAAI13B,EAAQD,EAAOp4B,KAAK5C,OAASA,KAQjC,OAPAi7B,EAAMye,SAAW,KACjBze,EAAM03B,YAAcA,EACpB13B,EAAM3a,MAAQA,EACd2a,EAAM36B,MAAQggB,EAAMhgB,MACpB26B,EAAMt3B,IAAM2c,EAAM3c,IAClBs3B,EAAMq3B,QAAUhyC,EAAMhgB,MAAMkC,KAAO8d,EAAM3c,IAAInB,IAC7Cy4B,EAAMm5B,SAAWn5B,EAAMohB,OAAS,GACzBphB,CACX,CAwDA,OAnEAzD,EAAU28B,EAAMn5B,GAYhBm5B,EAAKtxD,UAAUqF,SAAW,WACtB,MAAO,IAAMlI,KAAK2yD,YAAc,KAAO3yD,KAAKsgB,MAAMpY,UACtD,EACAisD,EAAKtxD,UAAUuvD,YAAc,SAAU1Y,GACnC15C,KAAK05C,SAAWA,EAChB15C,KAAKo0D,SAASjpD,SAAQ,SAAU80B,GAC5BA,EAAKmyB,YAAY1Y,EACrB,GACJ,EACAya,EAAKtxD,UAAUkf,MAAQ,WACnB,IAAIzB,EAAQtgB,KAAKsgB,MAAMyB,QACnBke,EAAO,IAAIk0B,EAAK7zC,EAAOtgB,KAAK2yD,aAKhC,OAJA3yD,KAAKo0D,SAASjpD,SAAQ,SAAUkpD,GAC5Bp0B,EAAKm0B,SAAS5zD,KAAK6zD,EAAQtyC,QAC/B,IACAke,EAAKq0B,iBAAmBt0D,KAAKs0D,iBACtBr0B,CACX,EACAk0B,EAAKtxD,UAAU0xD,WAAa,SAAUt0B,GAClC,IAAIjgC,KAAKsgB,MAAMD,QAAQ4f,GAAvB,CAEAu0B,EAAav0B,EAAMjgC,KAAKM,OAExB,IADA,IAAIkC,EAAMy9B,EAAK3/B,MAAMkC,IAAKC,EAASw9B,EAAK3/B,MAAMmC,OACrClE,EAAI,EAAGmiB,GAAO,EAAGniB,EAAIyB,KAAKo0D,SAASzzD,OAAQpC,IAEhD,GADAmiB,EAAM1gB,KAAKo0D,SAAS71D,GAAG+hB,MAAME,QAAQhe,EAAKC,GAC/B,GAAPie,EACA,MAER,IAAI+zC,EAAaz0D,KAAKo0D,SAAS71D,GAC3Bm2D,EAAgB,EACpB,GAAW,GAAPh0C,EAAU,CACV,GAAI+zC,EAAWn0C,MAAMM,cAAcqf,GAC/B,OAAOw0B,EAAWF,WAAWt0B,GAE7By0B,EAAgB,CACxB,CACIlyD,EAAMy9B,EAAK3f,MAAM3c,IAAInB,IAAKC,EAASw9B,EAAK3f,MAAM3c,IAAIlB,OAAtD,IACSmd,EAAIrhB,EAAb,IAAgBmiB,GAAO,EAAGd,EAAI5f,KAAKo0D,SAASzzD,OAAQif,IAEhD,GADAc,EAAM1gB,KAAKo0D,SAASx0C,GAAGU,MAAME,QAAQhe,EAAKC,GAC/B,GAAPie,EACA,MAEG,GAAPA,GACAd,IAGJ,IAFA,IAAI+0C,EAAgB30D,KAAKo0D,SAASvmD,OAAOtP,EAAGqhB,EAAIrhB,EAAG0hC,GAC/CrzB,EAAc,GAAP8T,EAAWi0C,EAAch0D,OAAS,EAAIg0D,EAAch0D,OACtD4K,EAAImpD,EAAenpD,EAAIqB,EAAMrB,IAClC00B,EAAKs0B,WAAWI,EAAcppD,IAGlC,OADA00B,EAAKmyB,YAAYpyD,KAAK05C,UACfzZ,CA9BG,CA+Bd,EACAk0B,EAAKtxD,UAAU+xD,aAAe,SAAUt0C,GACpC,OAAOs0C,EAAat0C,EAAOtgB,KAAKM,MACpC,EACO6zD,CACX,CArEyB,CAqEvBb,GACF,SAASuB,EAAazM,EAAOrzB,GACzBqzB,EAAM5lD,KAAOuyB,EAAOvyB,IACH,GAAb4lD,EAAM5lD,MACN4lD,EAAM3lD,QAAUsyB,EAAOtyB,OAC/B,CACA,SAAS+xD,EAAal0C,EAAOyU,GACzB8/B,EAAav0C,EAAMhgB,MAAOy0B,GAC1B8/B,EAAav0C,EAAM3c,IAAKoxB,EAC5B,CACA,SAAS+/B,EAAa1M,EAAOrzB,GACR,GAAbqzB,EAAM5lD,MACN4lD,EAAM3lD,QAAUsyB,EAAOtyB,QAC3B2lD,EAAM5lD,KAAOuyB,EAAOvyB,GACxB,CACA,SAASoyD,EAAat0C,EAAOyU,GACzB+/B,EAAax0C,EAAMhgB,MAAOy0B,GAC1B+/B,EAAax0C,EAAM3c,IAAKoxB,EAC5B,CACAruB,EAAQytD,KAAOA,CAEf,IAEAl2D,IAAIC,OAAO,2BAA2B,CAAC,UAAU,UAAU,SAAS,YAAY,6BAA6B,wBAAwB,qBAAqB,0BAA0B,SAASuI,EAASC,EAASvD,GAC/M,aACA,IAAIlB,EAAQwE,EAAQ,YAAYxE,MAC5BgwD,EAAWxrD,EAAQ,eAAewrD,SAClCkC,EAAO1tD,EAAQ,UAAU0tD,KACzBnxD,EAAgByD,EAAQ,qBAAqBzD,cAC7Cq+B,EAAa56B,EAAQ,wBAAwB46B,WACjD,SAAS0zB,IACL/0D,KAAKwrC,UAAY,SAAUhpC,EAAKC,EAAQuyD,GACpC,IAAItb,EAAW15C,KAAKkgC,YAAY19B,GAChC,IAAKk3C,EACD,OAAO,KAEX,IADA,IAAIyY,EAAQzY,EAASyY,MACZ5zD,EAAI,EAAGA,EAAI4zD,EAAMxxD,OAAQpC,IAAK,CACnC,IAAI+hB,EAAQ6xC,EAAM5zD,GAAG+hB,MACrB,GAAIA,EAAMC,SAAS/d,EAAKC,GAAS,CAC7B,GAAY,GAARuyD,GAAa10C,EAAMQ,MAAMte,EAAKC,KAAY6d,EAAMwB,UAChD,SAEC,IAAa,GAATkzC,GAAc10C,EAAMS,QAAQve,EAAKC,KAAY6d,EAAMwB,UACxD,SAEJ,OAAOqwC,EAAM5zD,EACjB,CACJ,CACJ,EACAyB,KAAKi1D,gBAAkB,SAAU30C,GAC7B,IAAIhgB,EAAQggB,EAAMhgB,MACdqD,EAAM2c,EAAM3c,IACZuxD,EAAYl1D,KAAKm1D,UACjBC,EAAa,GACjB90D,EAAMmC,QAAU,EAChBkB,EAAIlB,QAAU,EACd,IAAK,IAAIlE,EAAI,EAAGA,EAAI22D,EAAUv0D,OAAQpC,IAAK,CACvC,IAAImiB,EAAMw0C,EAAU32D,GAAG+hB,MAAMG,aAAaH,GAC1C,GAAW,GAAPI,EAAJ,CAGK,IAAY,GAARA,EACL,MAGJ,IADA,IAAIyxC,EAAQ+C,EAAU32D,GAAG4zD,MAChBvyC,EAAI,EAAGA,EAAIuyC,EAAMxxD,OAAQif,IAAK,CACnC,IAAIqgB,EAAOkyB,EAAMvyC,GAEjB,GADAc,EAAMuf,EAAK3f,MAAMG,aAAaH,IAClB,GAARI,EACA,MAEC,GAAW,GAAPA,EAAJ,CAIL,GAAW,IAAPA,EACA,MAEJ00C,EAAW50D,KAAKy/B,EADhB,CAEJ,CAhBA,CAiBJ,CAGA,OAFA3/B,EAAMmC,QAAU,EAChBkB,EAAIlB,QAAU,EACP2yD,CACX,EACAp1D,KAAKq1D,oBAAsB,SAAUhZ,GACjC,GAAI7wC,MAAMmB,QAAQ0vC,GAAS,CACvB,IAAI8V,EAAQ,GACZ9V,EAAOlxC,SAAQ,SAAUmV,GACrB6xC,EAAQA,EAAM3xB,OAAOxgC,KAAKi1D,gBAAgB30C,GAC9C,GAAGtgB,KACP,MAEQmyD,EAAQnyD,KAAKi1D,gBAAgB5Y,GAErC,OAAO8V,CACX,EACAnyD,KAAKs1D,YAAc,WAGf,IAFA,IAAInD,EAAQ,GACR+C,EAAYl1D,KAAKm1D,UACZ52D,EAAI,EAAGA,EAAI22D,EAAUv0D,OAAQpC,IAClC,IAAK,IAAIqhB,EAAI,EAAGA,EAAIs1C,EAAU32D,GAAG4zD,MAAMxxD,OAAQif,IAC3CuyC,EAAM3xD,KAAK00D,EAAU32D,GAAG4zD,MAAMvyC,IACtC,OAAOuyC,CACX,EACAnyD,KAAKi7C,gBAAkB,SAAUz4C,EAAKC,EAAQ8yD,EAAM7b,GAEhD,GADAA,EAAWA,GAAY15C,KAAKkgC,YAAY19B,IACnCk3C,EACD,OAAO,KAKX,IAJA,IAGI9uC,EAAKq1B,EAHLu1B,EAAW,CACX7xD,IAAK,CAAElB,OAAQ,IAGVlE,EAAI,EAAGA,EAAIm7C,EAASyY,MAAMxxD,OAAQpC,IAAK,CAC5C0hC,EAAOyZ,EAASyY,MAAM5zD,GACtB,IAAImiB,EAAMuf,EAAK3f,MAAMiB,WAAW/e,EAAKC,GACrC,IAAY,GAARie,EAAW,CACX9V,EAAM5K,KACDqC,QAAQ49B,EAAK3/B,MAAMkC,KACnBwxC,UAAUwhB,EAAS7xD,IAAIlB,OAAQw9B,EAAK3/B,MAAMmC,QAC/C,KACJ,CACK,GAAY,IAARie,EACL,OAAO,KAEX80C,EAAWv1B,CACf,CAGA,OAFKr1B,IACDA,EAAM5K,KAAKqC,QAAQ49B,EAAK3/B,MAAMkC,KAAKwxC,UAAUwhB,EAAS7xD,IAAIlB,UACjD,GAAT8yD,EACO3qD,EAAIopC,UAAU,EAAGvxC,EAAS+yD,EAAS7xD,IAAIlB,QACjC,GAAR8yD,EACE3qD,EAAIopC,UAAUvxC,EAAS+yD,EAAS7xD,IAAIlB,QAEpCmI,CACf,EACA5K,KAAKkgC,YAAc,SAAU0S,EAAQ6iB,GACjC,IAAIvD,EAAWlyD,KAAKm1D,UAChB52D,EAAI,EAKR,IAJIk3D,IACAl3D,EAAI2zD,EAAS1pD,QAAQitD,KACf,GAANl3D,IACAA,EAAI,GACHA,EAAGA,EAAI2zD,EAASvxD,OAAQpC,IAAK,CAC9B,IAAIm7C,EAAWwY,EAAS3zD,GACxB,GAAIm7C,EAASp5C,MAAMkC,KAAOowC,GAAU8G,EAAS/1C,IAAInB,KAAOowC,EACpD,OAAO8G,EAEN,GAAIA,EAAS/1C,IAAInB,IAAMowC,EACxB,OAAO,IAEf,CACA,OAAO,IACX,EACA5yC,KAAK01D,gBAAkB,SAAU9iB,EAAQ6iB,GACrC,IAAIvD,EAAWlyD,KAAKm1D,UAChB52D,EAAI,EAKR,IAJIk3D,IACAl3D,EAAI2zD,EAAS1pD,QAAQitD,KACf,GAANl3D,IACAA,EAAI,GACHA,EAAGA,EAAI2zD,EAASvxD,OAAQpC,IAAK,CAC9B,IAAIm7C,EAAWwY,EAAS3zD,GACxB,GAAIm7C,EAAS/1C,IAAInB,KAAOowC,EACpB,OAAO8G,CAEf,CACA,OAAO,IACX,EACA15C,KAAK21D,kBAAoB,SAAUlJ,EAAO7/C,GAEtC,IADA,IAAIslD,EAAWlyD,KAAKm1D,UAAWtZ,EAAWjvC,EAAO6/C,EAAQ,EAChDluD,EAAI,EAAGA,EAAI2zD,EAASvxD,OAAQpC,IAAK,CACtC,IAAIm7C,EAAWwY,EAAS3zD,GAAIoF,EAAM+1C,EAAS/1C,IAAInB,IAAKlC,EAAQo5C,EAASp5C,MAAMkC,IAC3E,GAAImB,GAAOiJ,EAAM,CACTtM,EAAQsM,IACJtM,GAASmsD,EACT5Q,GAAYjvC,EAAOtM,EAEnBu7C,EAAW,GAEnB,KACJ,CACSl4C,GAAO8oD,IAER5Q,GADAv7C,GAASmsD,EACG9oD,EAAMrD,EAENqD,EAAM8oD,EAAQ,EAEtC,CACA,OAAO5Q,CACX,EACA77C,KAAK41D,aAAe,SAAUlc,GAK1B,OAJA15C,KAAKm1D,UAAU30D,KAAKk5C,GACpB15C,KAAKm1D,UAAUt7B,MAAK,SAAUz6B,EAAG8F,GAC7B,OAAO9F,EAAEkB,MAAMkC,IAAM0C,EAAE5E,MAAMkC,GACjC,IACOk3C,CACX,EACA15C,KAAKgsC,QAAU,SAAU2mB,EAAaryC,GAClC,IAEI2f,EAFAiyB,EAAWlyD,KAAKm1D,UAChBU,GAAQ,EAERlD,aAAuBwB,EACvBl0B,EAAO0yB,GAEP1yB,EAAO,IAAIk0B,EAAK7zC,EAAOqyC,GACvB1yB,EAAKq0B,iBAAmBh0C,EAAMg0C,kBAElCt0D,KAAK81D,qBAAqB71B,EAAK3f,OAC/B,IAAIL,EAAWggB,EAAK3/B,MAAMkC,IACtB0d,EAAc+f,EAAK3/B,MAAMmC,OACzB0d,EAAS8f,EAAKt8B,IAAInB,IAClB4d,EAAY6f,EAAKt8B,IAAIlB,OACrBszD,EAAY/1D,KAAKwrC,UAAUvrB,EAAUC,EAAa,GAClD81C,EAAUh2D,KAAKwrC,UAAUrrB,EAAQC,GAAY,GACjD,GAAI21C,GAAaC,GAAWD,EACxB,OAAOA,EAAUxB,WAAWt0B,GAC5B81B,IAAcA,EAAUz1C,MAAMS,QAAQd,EAAUC,IAChDlgB,KAAKyrC,WAAWsqB,GAChBC,IAAYA,EAAQ11C,MAAMQ,MAAMX,EAAQC,IACxCpgB,KAAKyrC,WAAWuqB,GACpB,IAAI7D,EAAQnyD,KAAKi1D,gBAAgBh1B,EAAK3f,OAClC6xC,EAAMxxD,OAAS,IACfX,KAAKi2D,YAAY9D,GACZlyB,EAAKq0B,kBACNnC,EAAMhnD,SAAQ,SAAUkpD,GACpBp0B,EAAKs0B,WAAWF,EACpB,KAGR,IAAK,IAAI91D,EAAI,EAAGA,EAAI2zD,EAASvxD,OAAQpC,IAAK,CACtC,IAAIm7C,EAAWwY,EAAS3zD,GACxB,GAAI4hB,GAAUu5B,EAASp5C,MAAMkC,IAAK,CAC9Bk3C,EAAS1N,QAAQ/L,GACjB41B,GAAQ,EACR,KACJ,CACK,GAAI51C,GAAYy5B,EAAS/1C,IAAInB,IAAK,CAGnC,GAFAk3C,EAAS1N,QAAQ/L,GACjB41B,GAAQ,GACH51B,EAAKqyB,QAAS,CACf,IAAIY,EAAehB,EAAS3zD,EAAI,GAChC,GAAI20D,GAAgBA,EAAa5yD,MAAMkC,KAAO2d,EAAQ,CAClDu5B,EAASmF,MAAMqU,GACf,KACJ,CACJ,CACA,KACJ,CACK,GAAI/yC,GAAUu5B,EAASp5C,MAAMkC,IAC9B,KAER,CASA,OARKqzD,IACDnc,EAAW15C,KAAK41D,aAAa,IAAI3D,EAASjyD,KAAKm1D,UAAWl1B,KAC1DjgC,KAAK4zC,aACL5zC,KAAKk2D,gBAAgBxc,EAASp5C,MAAMkC,IAAKk3C,EAASp5C,MAAMkC,KAExDxC,KAAKm2D,sBAAsBzc,EAASp5C,MAAMkC,IAAKk3C,EAASp5C,MAAMkC,KAClExC,KAAKo2D,WAAY,EACjBp2D,KAAKmZ,QAAQ,aAAc,CAAEqB,KAAMylB,EAAM2H,OAAQ,QAC1C3H,CACX,EACAjgC,KAAKq2D,SAAW,SAAUlE,GACtBA,EAAMhnD,SAAQ,SAAU80B,GACpBjgC,KAAKgsC,QAAQ/L,EACjB,GAAGjgC,KACP,EACAA,KAAKyrC,WAAa,SAAUxL,GACxB,IAAIyZ,EAAWzZ,EAAKyZ,SAChBz5B,EAAWy5B,EAASp5C,MAAMkC,IAC1B2d,EAASu5B,EAAS/1C,IAAInB,IACtB0yD,EAAYl1D,KAAKm1D,UACjBhD,EAAQzY,EAASyY,MACrB,GAAoB,GAAhBA,EAAMxxD,OACNu0D,EAAUrnD,OAAOqnD,EAAU1sD,QAAQkxC,GAAW,QAGlD,GAAIA,EAASp5B,MAAMQ,MAAMmf,EAAKt8B,IAAInB,IAAKy9B,EAAKt8B,IAAIlB,QAC5C0vD,EAAMn4C,MACN0/B,EAAS/1C,IAAInB,IAAM2vD,EAAMA,EAAMxxD,OAAS,GAAGgD,IAAInB,IAC/Ck3C,EAAS/1C,IAAIlB,OAAS0vD,EAAMA,EAAMxxD,OAAS,GAAGgD,IAAIlB,YAGtD,GAAIi3C,EAASp5B,MAAMS,QAAQkf,EAAK3/B,MAAMkC,IAAKy9B,EAAK3/B,MAAMmC,QAClD0vD,EAAM/wD,QACNs4C,EAASp5C,MAAMkC,IAAM2vD,EAAM,GAAG7xD,MAAMkC,IACpCk3C,EAASp5C,MAAMmC,OAAS0vD,EAAM,GAAG7xD,MAAMmC,YAG3C,GAAIw9B,EAAKqyB,QACLH,EAAMtkD,OAAOskD,EAAM3pD,QAAQy3B,GAAO,OAGtC,CACI,IAAIgzB,EAAcvZ,EAAS54C,MAAMm/B,EAAK3/B,MAAMkC,IAAKy9B,EAAK3/B,MAAMmC,QAC5D0vD,EAAQc,EAAYd,MACpBA,EAAM/wD,QACN6xD,EAAY3yD,MAAMkC,IAAM2vD,EAAM,GAAG7xD,MAAMkC,IACvCywD,EAAY3yD,MAAMmC,OAAS0vD,EAAM,GAAG7xD,MAAMmC,MAC9C,CACKzC,KAAKs2D,YACFt2D,KAAK4zC,aACL5zC,KAAKk2D,gBAAgBj2C,EAAUE,GAE/BngB,KAAKm2D,sBAAsBl2C,EAAUE,IAE7CngB,KAAKo2D,WAAY,EACjBp2D,KAAKmZ,QAAQ,aAAc,CAAEqB,KAAMylB,EAAM2H,OAAQ,UACrD,EACA5nC,KAAKi2D,YAAc,SAAU9D,GAEzB,IADA,IAAIoE,EAAa,GACRh4D,EAAI,EAAGA,EAAI4zD,EAAMxxD,OAAQpC,IAC9Bg4D,EAAW/1D,KAAK2xD,EAAM5zD,IAE1Bg4D,EAAWprD,SAAQ,SAAU80B,GACzBjgC,KAAKyrC,WAAWxL,EACpB,GAAGjgC,MACHA,KAAKo2D,WAAY,CACrB,EACAp2D,KAAK0rC,WAAa,SAAUzL,GACxBjgC,KAAKyrC,WAAWxL,GAChBA,EAAKm0B,SAASjpD,SAAQ,SAAUkpD,GAC5Bp0B,EAAK20B,aAAaP,GAClBr0D,KAAKgsC,QAAQqoB,EACjB,GAAGr0D,MACCigC,EAAKq0B,iBAAmB,GACxBt0D,KAAKw2D,QAAQv2B,EAAK3/B,MAAMkC,IAAM,EAAGy9B,EAAKt8B,IAAInB,IAAKy9B,EAAKq0B,iBAAmB,GAE3Er0B,EAAKm0B,SAAW,EACpB,EACAp0D,KAAKy2D,YAAc,SAAUtE,GACzBA,EAAMhnD,SAAQ,SAAU80B,GACpBjgC,KAAK0rC,WAAWzL,EACpB,GAAGjgC,KACP,EACAA,KAAK02D,OAAS,SAAUtvC,EAAUuvC,GAC9B,IAAIr2C,EAAO6xC,EACX,GAAgB,MAAZ/qC,EACA9G,EAAQ,IAAIre,EAAM,EAAG,EAAGjC,KAAKq+B,YAAa,GACvB,MAAfs4B,IACAA,GAAc,QAEjB,GAAuB,iBAAZvvC,EACZ9G,EAAQ,IAAIre,EAAMmlB,EAAU,EAAGA,EAAUpnB,KAAKqC,QAAQ+kB,GAAUzmB,aAE/D,GAAI,QAASymB,EACd9G,EAAQre,EAAM2f,WAAWwF,EAAUA,OAElC,IAAI5b,MAAMmB,QAAQya,GAKnB,OAJA+qC,EAAQ,GACR/qC,EAASjc,SAAQ,SAAUmV,GACvB6xC,EAAQA,EAAM3xB,OAAOxgC,KAAK02D,OAAOp2C,GACrC,GAAGtgB,MACImyD,EAGP7xC,EAAQ8G,CACZ,CACA+qC,EAAQnyD,KAAKq1D,oBAAoB/0C,GACjC,IAAIs2C,EAAiBzE,EACrB,MAAuB,GAAhBA,EAAMxxD,QACNsB,EAAMsgB,cAAc4vC,EAAM,GAAG7xD,MAAOggB,EAAMhgB,OAAS,GACnD2B,EAAMsgB,cAAc4vC,EAAM,GAAGxuD,IAAK2c,EAAM3c,KAAO,EAClD3D,KAAKy2D,YAAYtE,GACjBA,EAAQnyD,KAAKq1D,oBAAoB/0C,GAQrC,GANmB,GAAfq2C,EACA32D,KAAKi2D,YAAY9D,GAGjBnyD,KAAKy2D,YAAYtE,GAEjByE,EAAej2D,OACf,OAAOi2D,CACf,EACA52D,KAAK62D,YAAc,SAAUjkB,EAAQkkB,GACjC,QAAS92D,KAAKkgC,YAAY0S,EAAQkkB,EACtC,EACA92D,KAAK+2D,cAAgB,SAAUnkB,EAAQkkB,GACnC,IAAIpd,EAAW15C,KAAKkgC,YAAY0S,EAAQkkB,GACxC,OAAOpd,EAAWA,EAAS/1C,IAAInB,IAAMowC,CACzC,EACA5yC,KAAKg3D,gBAAkB,SAAUpkB,EAAQkkB,GACrC,IAAIpd,EAAW15C,KAAKkgC,YAAY0S,EAAQkkB,GACxC,OAAOpd,EAAWA,EAASp5C,MAAMkC,IAAMowC,CAC3C,EACA5yC,KAAKi3D,mBAAqB,SAAUvd,EAAUv5B,EAAQC,EAAWH,EAAUC,GACvD,MAAZD,IACAA,EAAWy5B,EAASp5C,MAAMkC,KACX,MAAf0d,IACAA,EAAc,GACJ,MAAVC,IACAA,EAASu5B,EAAS/1C,IAAInB,KACT,MAAb4d,IACAA,EAAYpgB,KAAKqC,QAAQ8d,GAAQxf,QACrC,IAAIuD,EAAMlE,KAAKkE,IACXgzD,EAAW,GAgBf,OAfAxd,EAAS8Y,MAAK,SAAUG,EAAanwD,EAAKC,EAAQ00D,GAC9C,KAAI30D,EAAMyd,GAAV,CAEA,GAAIzd,GAAOyd,EAAU,CACjB,GAAIxd,EAASyd,EACT,OACJi3C,EAAahrD,KAAKC,IAAI8T,EAAai3C,EACvC,CAEID,GADe,MAAfvE,EACYA,EAGAzuD,EAAI7B,QAAQG,GAAKwxC,UAAUmjB,EAAY10D,EAV7C,CAYd,GAAG0d,EAAQC,GACJ82C,CACX,EACAl3D,KAAKq6C,eAAiB,SAAU73C,EAAK4d,EAAWH,EAAUC,GACtD,IAEQ9Q,EAFJsqC,EAAW15C,KAAKkgC,YAAY19B,GAChC,OAAKk3C,EAMM15C,KAAKi3D,mBAAmBvd,EAAUl3C,EAAK4d,EAAWH,EAAUC,IAJnE9Q,EAAOpP,KAAKkE,IAAI7B,QAAQG,GACjB4M,EAAK4kC,UAAU9zB,GAAe,EAAGE,GAAahR,EAAKzO,QAKlE,EACAX,KAAKo3D,eAAiB,WAClB,IAAIC,EAAK,GAOT,OANAA,EAAKr3D,KAAKm1D,UAAU7pD,KAAI,SAAUouC,GAC9B,IAAIyY,EAAQzY,EAASyY,MAAM7mD,KAAI,SAAU20B,GACrC,OAAOA,EAAKle,OAChB,IACA,OAAO,IAAIkwC,EAASoF,EAAIlF,EAC5B,IACOkF,CACX,EACAr3D,KAAKs3D,WAAa,SAAUC,GACxB,IAEIt3B,EACAu3B,EAHAnxD,EAAYrG,KAAKqG,UACjBia,EAAQja,EAAUinB,WAGtB,GAAIhN,EAAMwB,UAAW,CACjB,IAAI2J,EAASnL,EAAMhgB,MAEnB,GADA2/B,EAAOjgC,KAAKwrC,UAAU/f,EAAOjpB,IAAKipB,EAAOhpB,QACrCw9B,EAEA,YADAjgC,KAAK0rC,WAAWzL,IAGXu3B,EAAax3D,KAAKuC,oBAAoBkpB,IACL,GAAlCnL,EAAMK,aAAa62C,GACnBl3C,EAAM3c,IAAM6zD,GAGZl3C,EAAMhgB,MAAQk3D,EACdl3C,EAAMhgB,MAAMmC,SACZ6d,EAAM3c,IAAIlB,WAGT+0D,EAAax3D,KAAKuC,oBAAoB,CAAEC,IAAKipB,EAAOjpB,IAAKC,OAAQgpB,EAAOhpB,OAAS,MAChD,GAAlC6d,EAAMK,aAAa62C,GACnBl3C,EAAM3c,IAAM6zD,EAEZl3C,EAAMhgB,MAAQk3D,EAClBl3C,EAAMhgB,MAAMmC,UAGZ6d,EAAQtgB,KAAKy3D,oBAAoBhsC,EAAOjpB,IAAKipB,EAAOhpB,SAAW6d,CAEvE,KACK,CACD,IAAI6xC,EAAQnyD,KAAKi1D,gBAAgB30C,GACjC,GAAIi3C,GAAepF,EAAMxxD,OAErB,YADAX,KAAKy2D,YAAYtE,GAGI,GAAhBA,EAAMxxD,SACXs/B,EAAOkyB,EAAM,GAErB,CAGA,GAFKlyB,IACDA,EAAOjgC,KAAKwrC,UAAUlrB,EAAMhgB,MAAMkC,IAAK8d,EAAMhgB,MAAMmC,SACnDw9B,GAAQA,EAAK3f,MAAMpY,YAAcoY,EAAMpY,WACvClI,KAAK0rC,WAAWzL,OADpB,CAIA,IAAI0yB,EAAc,MAClB,IAAKryC,EAAMe,cAAe,CAEtB,GADAsxC,EAAc3yD,KAAK0kC,aAAapkB,GAC5BqyC,EAAYhyD,OAAS,EACrB,OACJgyD,EAAcA,EAAY4C,OAAOvhB,UAAU,EAAG,GAAK,IACvD,CACAh0C,KAAKgsC,QAAQ2mB,EAAaryC,EAR1B,CASJ,EACAtgB,KAAKy3D,oBAAsB,SAAUj1D,EAAKC,EAAQ2qC,GAC9C,IAAIrV,EAAW,IAAI/0B,EAAchD,KAAMwC,EAAKC,GACxC9D,EAAQo5B,EAASxzB,kBACjBvD,EAAOrC,GAASA,EAAMqC,KAC1B,GAAIrC,GAAS,kBAAkBwD,KAAKnB,GAAO,CACvCA,EAAOA,EAAKsB,MAAM,kBAAkB,GACxB,WAARtB,IACAA,GAAQ,qBACZ,IAAIyc,EAAK,IAAIjZ,OAAOxD,GAChBsf,EAAQ,IAAIre,EAChB,GAAW,GAAPmrC,EAAU,CACV,GACIzuC,EAAQo5B,EAASpzB,qBACZhG,GAAS8e,EAAGtb,KAAKxD,EAAMqC,QAAU,eAAemB,KAAKxD,EAAMqC,OACpErC,EAAQo5B,EAASnzB,aACrB,CAIA,GAHA0b,EAAMhgB,MAAMkC,IAAMu1B,EAAShzB,qBAC3Bub,EAAMhgB,MAAMmC,OAASs1B,EAASipB,yBAA2B,iBAAiB7+C,KAAKxD,EAAMqC,MAAQrC,EAAMsC,MAAMN,OAAS,GAClHo3B,EAAW,IAAI/0B,EAAchD,KAAMwC,EAAKC,IAC5B,GAAR2qC,EAAW,CACX,IAAIzrB,GAAW,EACf,GAEI,GADAhjB,EAAQo5B,EAASnzB,eACD,GAAZ+c,EAAe,CACf,IAAI0kB,EAAQrmC,KAAK4sD,SAAS70B,EAAS+oB,MAC9BrjC,EAAGtb,KAAKkkC,KACT1kB,EAAUoW,EAAS+oB,KAC3B,MACK,GAAI/oB,EAAS+oB,KAAOn/B,EACrB,YAEChjB,GAAS8e,EAAGtb,KAAKxD,EAAMqC,QAAU,iBAAiBmB,KAAKxD,EAAMqC,OACtErC,EAAQo5B,EAASpzB,cACrB,MAEIhG,EAAQo5B,EAASxzB,kBAMrB,OALA+b,EAAM3c,IAAInB,IAAMu1B,EAAShzB,qBACzBub,EAAM3c,IAAIlB,OAASs1B,EAASipB,wBACvB,eAAe7+C,KAAKxD,EAAMqC,QAC3Bsf,EAAM3c,IAAIlB,QAAU9D,EAAMsC,MAAMN,OAAS,GAEtC2f,CACX,CACJ,EACAtgB,KAAKw2D,QAAU,SAAUv2C,EAAUE,EAAQu3C,EAAOv1D,QACjCiE,GAATsxD,IACAA,EAAQ,KACZ,IAAI9rB,EAAc5rC,KAAK4rC,YACvB,GAAKA,EAAL,CAEAzrB,EAASA,GAAUngB,KAAKq+B,YACxBpe,EAAWA,GAAY,EACvB,IAAK,IAAIzd,EAAMyd,EAAUzd,EAAM2d,EAAQ3d,IAGnC,GAFwB,MAApBopC,EAAYppC,KACZopC,EAAYppC,GAAOxC,KAAK8D,cAActB,IAClB,SAApBopC,EAAYppC,MAEZL,GAASA,EAAKK,IAAlB,CAEA,IAAI8d,EAAQtgB,KAAKiE,mBAAmBzB,GAChC8d,GAASA,EAAMe,eACZf,EAAM3c,IAAInB,KAAO2d,GACjBG,EAAMhgB,MAAMkC,KAAOyd,IACtBzd,EAAM8d,EAAM3c,IAAInB,IAChB8d,EAAMg0C,iBAAmBoD,EACzB13D,KAAKgsC,QAAQ,MAAO1rB,GAPZ,CATN,CAmBd,EACAtgB,KAAK23D,YAAc,SAAU7hB,GACzB91C,KAAKw2D,UACL,MAAO1gB,KAAU,EACb91C,KAAK02D,OAAO,MAAM,EAC1B,EACA12D,KAAK43D,gBAAkB,WACnB,IAAI11C,EAAUliB,KACdA,KAAKw2D,QAAQ,KAAM,KAAM,MAAM,SAAUh0D,GAErC,IADA,IAAIuD,EAASmc,EAAQ6+B,UAAUv+C,GACtBjE,EAAI,EAAGA,EAAIwH,EAAOpF,OAAQpC,IAAK,CACpC,IAAII,EAAQoH,EAAOxH,GACnB,GAAkB,QAAdI,EAAMqC,OAAkB,QAAQmB,KAAKxD,EAAMsC,OAE/C,QAAI,UAAUkB,KAAKxD,EAAMqC,KAG7B,CACJ,GACJ,EACAhB,KAAK63D,YAAc,CACf,OAAU,EACV,UAAa,EACb,aAAgB,GAEpB73D,KAAK83D,WAAa,YAClB93D,KAAK+3D,aAAe,SAAUvlD,GAC1B,IAAKxS,KAAK63D,YAAYrlD,GAClB,MAAM,IAAIiI,MAAM,uBAAyBjI,EAAQ,IAAMvK,OAAOiD,KAAKlL,KAAK63D,aAAajvD,KAAK,MAAQ,KACtG,GAAI5I,KAAK83D,YAActlD,EAAvB,CAEAxS,KAAK83D,WAAatlD,EACL,UAATA,GACAxS,KAAK02D,SACT,IAAIzvB,EAAOjnC,KAAKg4D,UAChBh4D,KAAKi4D,YAAY,MACjBj4D,KAAKi4D,YAAYhxB,EANP,CAOd,EACAjnC,KAAKi4D,YAAc,SAAUC,GACrBl4D,KAAKg4D,WAAaE,IAEtBl4D,KAAKg4D,UAAYE,EACjBl4D,KAAKuZ,IAAI,SAAUvZ,KAAKm4D,oBACxBn4D,KAAKuZ,IAAI,kBAAmBvZ,KAAKo4D,6BACjCp4D,KAAKmZ,QAAQ,oBACR++C,GAA+B,UAAnBl4D,KAAK83D,YAItB93D,KAAK4rC,YAAc,GACnB5rC,KAAK8D,cAAgBo0D,EAASp0D,cAAc2kB,KAAKyvC,EAAUl4D,KAAMA,KAAK83D,YACtE93D,KAAKiE,mBAAqBi0D,EAASj0D,mBAAmBwkB,KAAKyvC,EAAUl4D,KAAMA,KAAK83D,YAChF93D,KAAKm4D,mBAAqBn4D,KAAKq4D,kBAAkB5vC,KAAKzoB,MACtDA,KAAKo4D,4BAA8Bp4D,KAAKs4D,2BAA2B7vC,KAAKzoB,MACxEA,KAAKqZ,GAAG,SAAUrZ,KAAKm4D,oBACvBn4D,KAAKqZ,GAAG,kBAAmBrZ,KAAKo4D,8BAT5Bp4D,KAAK4rC,YAAc,KAU3B,EACA5rC,KAAK8rC,uBAAyB,SAAUtpC,EAAK+1D,GACzC,IAAIC,EAAKx4D,KAAK4rC,YACd,IAAK4sB,GAAOD,GAAiBC,EAAGh2D,GAC5B,MAAO,CAAC,EACZ,IAAiBupC,EAAbxtC,EAAIiE,EAAM,EACd,MAAOjE,GAAK,EAAG,CACX,IAAIkB,EAAI+4D,EAAGj6D,GAGX,GAFS,MAALkB,IACAA,EAAI+4D,EAAGj6D,GAAKyB,KAAK8D,cAAcvF,IAC1B,SAALkB,EAAc,CACd,IAAI6gB,EAAQtgB,KAAKiE,mBAAmB1F,GAGpC,GAFKwtC,IACDA,EAAazrB,GACbA,GAASA,EAAM3c,IAAInB,KAAOA,EAC1B,KACR,CACAjE,GACJ,CACA,MAAO,CACH+hB,OAAc,IAAP/hB,GAAY+hB,EACnByrB,WAAYA,EAEpB,EACA/rC,KAAK6rC,kBAAoB,SAAUrpC,EAAKrE,GAChCA,aAAakjC,IACbljC,EAAIA,EAAEgzB,UACV,IAAI9e,EAAU,CACVomD,SAAUt6D,EAAE0mB,SACZ1H,IAAKhf,EAAEwmB,SAAWxmB,EAAE4oB,QACpB2xC,SAAUv6D,EAAEymB,QAEZtE,EAAQtgB,KAAK24D,kBAAkBn2D,EAAK6P,GACxC,IAAKiO,EAAO,CACR,IAAInO,EAAMhU,EAAE2M,QAAU3M,EAAEkhC,WACpBltB,GAAM,kBAAkBhQ,KAAKgQ,EAAGI,aAChCJ,EAAGI,WAAa,eACxB,CACJ,EACAvS,KAAK24D,kBAAoB,SAAUn2D,EAAK6P,GACpC,GAAKrS,KAAK8D,cAAV,CAEA,IAAI9C,EAAOhB,KAAK8D,cAActB,GAC1B4M,EAAOpP,KAAKqC,QAAQG,GACpB4qC,EAAe,QAATpsC,GAAkB,EAAI,EAC5Bi/B,EAAOjgC,KAAKwrC,UAAUhpC,GAAc,IAAT4qC,EAAa,EAAIh+B,EAAKzO,OAAQysC,GAC7D,GAAInN,EAKA,OAJI5tB,EAAQomD,UAAYpmD,EAAQ8K,IAC5Bnd,KAAKyrC,WAAWxL,GAEhBjgC,KAAK0rC,WAAWzL,GACbA,EAEX,IAAI3f,EAAQtgB,KAAKiE,mBAAmBzB,GAAK,GACzC,GAAI8d,IAAUA,EAAMe,gBAChB4e,EAAOjgC,KAAKwrC,UAAUlrB,EAAMhgB,MAAMkC,IAAK8d,EAAMhgB,MAAMmC,OAAQ,GACvDw9B,GAAQ3f,EAAMD,QAAQ4f,EAAK3f,QAE3B,OADAtgB,KAAKyrC,WAAWxL,GACTA,EAGf,GAAI5tB,EAAQqmD,SAAU,CAClB,IAAIl+C,EAAOxa,KAAK8rC,uBAAuBtpC,GACvC,GAAIgY,EAAK8F,MACL,IAAIL,EAAWzF,EAAK8F,MAAMhgB,MAAMkC,IAAM,EAClC2d,EAAS3F,EAAK8F,MAAM3c,IAAInB,IAEhCxC,KAAKw2D,QAAQv2C,EAAUE,EAAQ9N,EAAQ8K,IAAM,IAAQ,EACzD,MACS9K,EAAQomD,UACbt4C,EAASG,EAAQA,EAAM3c,IAAInB,IAAMxC,KAAKq+B,YACtCr+B,KAAKw2D,QAAQh0D,EAAM,EAAG2d,EAAQ9N,EAAQ8K,IAAM,IAAQ,IAE/CmD,IACDjO,EAAQ8K,MACRmD,EAAMg0C,iBAAmB,KAC7Bt0D,KAAKgsC,QAAQ,MAAO1rB,IAExB,OAAOA,CArCG,CAsCd,EACAtgB,KAAK44D,iBAAmB,SAAUC,GAC9B,IAAIr2D,EAAMxC,KAAKqG,UAAU4wC,YAAYz0C,IACrCA,EAAMxC,KAAKg3D,gBAAgBx0D,GAC3B,IAAI8d,EAAQtgB,KAAK24D,kBAAkBn2D,EAAK,CAAC,GACzC,IAAI8d,EAAJ,CAEA,IAAI9F,EAAOxa,KAAK8rC,uBAAuBtpC,GAAK,GAE5C,GADA8d,EAAQ9F,EAAK8F,OAAS9F,EAAKuxB,WACvBzrB,EAAO,CACP9d,EAAM8d,EAAMhgB,MAAMkC,IAClB,IAAIy9B,EAAOjgC,KAAKwrC,UAAUhpC,EAAKxC,KAAKqC,QAAQG,GAAK7B,OAAQ,GACrDs/B,EACAjgC,KAAKyrC,WAAWxL,GAGhBjgC,KAAKgsC,QAAQ,MAAO1rB,EAE5B,CAZU,CAad,EACAtgB,KAAKq4D,kBAAoB,SAAUplB,GAC/B,IAAIvxB,EAAWuxB,EAAM3yC,MAAMkC,IACvBmJ,EAAMsnC,EAAMtvC,IAAInB,IAAMkf,EAC1B,GAAY,IAAR/V,EACA3L,KAAK4rC,YAAYlqB,GAAY,UAE5B,GAAoB,UAAhBuxB,EAAMrL,OACX5nC,KAAK4rC,YAAY/9B,OAAO6T,EAAU/V,EAAM,EAAG,UAE1C,CACD,IAAIwhC,EAAO3hC,MAAMG,EAAM,GACvBwhC,EAAKvsC,QAAQ8gB,EAAU,GACvB1hB,KAAK4rC,YAAY/9B,OAAOpG,MAAMzH,KAAK4rC,YAAauB,EACpD,CACJ,EACAntC,KAAKs4D,2BAA6B,SAAUn6D,GACxC,IAAIq9C,EAAOr9C,EAAEqc,KACTghC,EAAKiR,OAASjR,EAAK5uC,MACf5M,KAAK4rC,YAAYjrC,OAAS66C,EAAKiR,OAC/BzsD,KAAK4rC,YAAY/9B,OAAO2tC,EAAKiR,MAAOzsD,KAAK4rC,YAAYjrC,OAEjE,CACJ,CACA+F,EAAQquD,QAAUA,CAElB,IAEA92D,IAAIC,OAAO,iCAAiC,CAAC,UAAU,UAAU,SAAS,qBAAqB,cAAc,SAASuI,EAASC,EAASvD,GAAQ,aAChJ,IAAIH,EAAgByD,EAAQ,qBAAqBzD,cAC7Cf,EAAQwE,EAAQ,YAAYxE,MAChC,SAAS62D,IACL94D,KAAKuC,oBAAsB,SAAU2H,EAAU6uD,GAC3C,GAAuB,GAAnB7uD,EAASzH,OACT,OAAO,KACX,IAAIu2D,EAAmBD,GAAO/4D,KAAKqC,QAAQ6H,EAAS1H,KAAKkG,OAAOwB,EAASzH,OAAS,GAClF,GAAwB,IAApBu2D,EACA,OAAO,KACX,IAAI12D,EAAQ02D,EAAiB12D,MAAM,yBACnC,OAAKA,EAEDA,EAAM,GACCtC,KAAKi5D,oBAAoB32D,EAAM,GAAI4H,GAEnClK,KAAK6iD,oBAAoBvgD,EAAM,GAAI4H,GAJnC,IAKf,EACAlK,KAAK41B,gBAAkB,SAAU7B,GAC7B,IACmBzT,EADflR,EAAOpP,KAAKqC,QAAQ0xB,EAAIvxB,KACxBmjD,GAAS,EACToT,EAAM3pD,EAAK1G,OAAOqrB,EAAItxB,OAAS,GAC/BH,EAAQy2D,GAAOA,EAAIz2D,MAAM,yBAO7B,GANKA,IACDy2D,EAAM3pD,EAAK1G,OAAOqrB,EAAItxB,QACtBsxB,EAAM,CAAEvxB,IAAKuxB,EAAIvxB,IAAKC,OAAQsxB,EAAItxB,OAAS,GAC3CH,EAAQy2D,GAAOA,EAAIz2D,MAAM,yBACzBqjD,GAAS,IAERrjD,EACD,OAAO,KACX,GAAIA,EAAM,GAAI,CACV,IAAIk1D,EAAax3D,KAAKi5D,oBAAoB32D,EAAM,GAAIyxB,GACpD,IAAKyjC,EACD,OAAO,KACXl3C,EAAQre,EAAM2f,WAAWmS,EAAKyjC,GACzB7R,IACDrlC,EAAM3c,IAAIlB,SACV6d,EAAMhgB,MAAMmC,UAEhB6d,EAAMmL,OAASnL,EAAM3c,GACzB,KACK,CACG6zD,EAAax3D,KAAK6iD,oBAAoBvgD,EAAM,GAAIyxB,GACpD,IAAKyjC,EACD,OAAO,KACXl3C,EAAQre,EAAM2f,WAAW41C,EAAYzjC,GAChC4xB,IACDrlC,EAAMhgB,MAAMmC,SACZ6d,EAAM3c,IAAIlB,UAEd6d,EAAMmL,OAASnL,EAAMhgB,KACzB,CACA,OAAOggB,CACX,EACAtgB,KAAKk5D,yBAA2B,SAAUnlC,EAAKujB,GAC3C,IAAIloC,EAAOpP,KAAKqC,QAAQ0xB,EAAIvxB,KACxB22D,EAAiB,wBACjBJ,GAAOzhB,GAAeloC,EAAK1G,OAAOqrB,EAAItxB,OAAS,GAC/CH,EAAQy2D,GAAOA,EAAIz2D,MAAM62D,GAS7B,GARK72D,IACDy2D,QAAuB3yD,IAAhBkxC,GAA6BA,IAAgBloC,EAAK1G,OAAOqrB,EAAItxB,QACpEsxB,EAAM,CACFvxB,IAAKuxB,EAAIvxB,IACTC,OAAQsxB,EAAItxB,OAAS,GAEzBH,EAAQy2D,GAAOA,EAAIz2D,MAAM62D,KAExB72D,EACD,OAAO,KACX,IAAIikD,EAAa,IAAItkD,EAAM8xB,EAAIvxB,IAAKuxB,EAAItxB,OAAS,EAAGsxB,EAAIvxB,IAAKuxB,EAAItxB,QAC7D+0D,EAAal1D,EAAM,GAAKtC,KAAKi5D,oBAAoB32D,EAAM,GAAIyxB,GACzD/zB,KAAK6iD,oBAAoBvgD,EAAM,GAAIyxB,GACzC,IAAKyjC,EACD,MAAO,CAACjR,GACZ,IAAIC,EAAW,IAAIvkD,EAAMu1D,EAAWh1D,IAAKg1D,EAAW/0D,OAAQ+0D,EAAWh1D,IAAKg1D,EAAW/0D,OAAS,GAChG,MAAO,CAAC8jD,EAAYC,EACxB,EACAxmD,KAAKo5D,UAAY,CACb,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KAETp5D,KAAK6iD,oBAAsB,SAAU0B,EAASr6C,EAAUmvD,GACpD,IAAIC,EAAct5D,KAAKo5D,UAAU7U,GAC7BmT,EAAQ,EACR3/B,EAAW,IAAI/0B,EAAchD,KAAMkK,EAAS1H,IAAK0H,EAASzH,QAC1D9D,EAAQo5B,EAASxzB,kBAGrB,GAFK5F,IACDA,EAAQo5B,EAASnzB,eAChBjG,EAAL,CAEK06D,IACDA,EAAS,IAAI70D,OAAO,QAChB7F,EAAMqC,KAAK2B,QAAQ,IAAK,OAAOA,QAAQ,SAAU,UAC5CA,QAAQ,cAAe,uBACvBA,QAAQ,WAAY,iBACvB,OAEV,IAAI42D,EAAarvD,EAASzH,OAASs1B,EAASipB,wBAA0B,EAClE//C,EAAQtC,EAAMsC,MAClB,MAAO,EAAM,CACT,MAAOs4D,GAAc,EAAG,CACpB,IAAIR,EAAM93D,EAAMyH,OAAO6wD,GACvB,GAAIR,GAAOO,GAEP,GADA5B,GAAS,EACI,GAATA,EACA,MAAO,CAAEl1D,IAAKu1B,EAAShzB,qBACnBtC,OAAQ82D,EAAaxhC,EAASipB,8BAGjC+X,GAAOxU,IACZmT,GAAS,GAEb6B,GAAc,CAClB,CACA,GACI56D,EAAQo5B,EAASpzB,qBACZhG,IAAU06D,EAAOl3D,KAAKxD,EAAMqC,OACrC,GAAa,MAATrC,EACA,MACJsC,EAAQtC,EAAMsC,MACds4D,EAAat4D,EAAMN,OAAS,CAChC,CACA,OAAO,IAjCG,CAkCd,EACAX,KAAKi5D,oBAAsB,SAAU1U,EAASr6C,EAAUmvD,GACpD,IAAIG,EAAiBx5D,KAAKo5D,UAAU7U,GAChCmT,EAAQ,EACR3/B,EAAW,IAAI/0B,EAAchD,KAAMkK,EAAS1H,IAAK0H,EAASzH,QAC1D9D,EAAQo5B,EAASxzB,kBAGrB,GAFK5F,IACDA,EAAQo5B,EAASnzB,eAChBjG,EAAL,CAEK06D,IACDA,EAAS,IAAI70D,OAAO,QAChB7F,EAAMqC,KAAK2B,QAAQ,IAAK,OAAOA,QAAQ,SAAU,UAC5CA,QAAQ,sBAAuB,uBAC/BA,QAAQ,UAAW,iBACtB,OAEV,IAAI42D,EAAarvD,EAASzH,OAASs1B,EAASipB,wBAC5C,MAAO,EAAM,CACT,IAAI//C,EAAQtC,EAAMsC,MACdw4D,EAAcx4D,EAAMN,OACxB,MAAO44D,EAAaE,EAAa,CAC7B,IAAIV,EAAM93D,EAAMyH,OAAO6wD,GACvB,GAAIR,GAAOS,GAEP,GADA9B,GAAS,EACI,GAATA,EACA,MAAO,CAAEl1D,IAAKu1B,EAAShzB,qBACnBtC,OAAQ82D,EAAaxhC,EAASipB,8BAGjC+X,GAAOxU,IACZmT,GAAS,GAEb6B,GAAc,CAClB,CACA,GACI56D,EAAQo5B,EAASnzB,oBACZjG,IAAU06D,EAAOl3D,KAAKxD,EAAMqC,OACrC,GAAa,MAATrC,EACA,MACJ46D,EAAa,CACjB,CACA,OAAO,IAjCG,CAkCd,EACAv5D,KAAK05D,gBAAkB,SAAU3lC,GAC7B,IAAIgE,EAAW,IAAI/0B,EAAchD,KAAM+zB,EAAIvxB,IAAKuxB,EAAItxB,QAChD9D,EAAQqB,KAAK25D,aAAa5hC,GAC9B,GAAKp5B,EAAL,CAEA,IAAIi7D,EAAY7hC,EAASpzB,eACzB,MAAwB,MAApBi1D,EAAU34D,MACHjB,KAAK65D,gBAAgB9hC,EAAUp5B,GAG/BqB,KAAK85D,gBAAgB/hC,EAAUp5B,EANhC,CAQd,EACAqB,KAAK25D,aAAe,SAAU5hC,GAC1B,IAAIp5B,EAAQo5B,EAASxzB,kBACjBw1D,GAAQ,EACRC,GAAW,EACf,GAAIr7D,IAA6C,IAApCA,EAAMqC,KAAKwH,QAAQ,YAC5B,GAEQ7J,EADAq7D,EACQjiC,EAASpzB,eAETozB,EAASnzB,cACjBjG,IACoB,OAAhBA,EAAMsC,MACN+4D,GAAW,GAE8B,IAApCr7D,EAAMqC,KAAKwH,QAAQ,cACxBuxD,GAAQ,UAGXp7D,IAAUo7D,GAEvB,OAAOp7D,CACX,EACAqB,KAAK65D,gBAAkB,SAAU9hC,EAAUp5B,GACvC,IAAIi7D,EACAK,EAAat7D,EAAMsC,MACnB6R,EAAMnU,EAAMsC,MACZy2D,EAAQ,EACRwC,EAAe,IAAIj4D,EAAM81B,EAAShzB,qBAAsBgzB,EAASipB,wBAAyBjpB,EAAShzB,qBAAsBgzB,EAASipB,wBAA0B,GAChKriD,EAAQo5B,EAASnzB,cACjB,IAAIu1D,EAAc,IAAIl4D,EAAM81B,EAAShzB,qBAAsBgzB,EAASipB,wBAAyBjpB,EAAShzB,qBAAsBgzB,EAASipB,wBAA0BriD,EAAMsC,MAAMN,QACvKy5D,GAAkB,EACtB,GAGI,GAFAR,EAAYj7D,EACZA,EAAQo5B,EAASnzB,cACbjG,EAAO,CACP,GAAoB,MAAhBA,EAAMsC,QAAkBm5D,EAAiB,CACzC,IAAIC,EAAa,IAAIp4D,EAAM81B,EAAShzB,qBAAsBgzB,EAASipB,wBAAyBjpB,EAAShzB,qBAAsBgzB,EAASipB,wBAA0B,GAC9JoZ,GAAkB,CACtB,CACA,IAAwC,IAApCz7D,EAAMqC,KAAKwH,QAAQ,aAEnB,GADAyxD,EAAat7D,EAAMsC,MACf6R,IAAQmnD,EACR,GAAwB,MAApBL,EAAU34D,MACVy2D,SAEC,GAAwB,OAApBkC,EAAU34D,QACfy2D,IACIA,EAAQ,GAAG,CACX3/B,EAASpzB,eACT,IAAI21D,EAAgB,IAAIr4D,EAAM81B,EAAShzB,qBAAsBgzB,EAASipB,wBAAyBjpB,EAAShzB,qBAAsBgzB,EAASipB,wBAA0B,GACjKriD,EAAQo5B,EAASnzB,cACjB,IAAI21D,EAAe,IAAIt4D,EAAM81B,EAAShzB,qBAAsBgzB,EAASipB,wBAAyBjpB,EAAShzB,qBAAsBgzB,EAASipB,wBAA0BriD,EAAMsC,MAAMN,QAE5K,GADAhC,EAAQo5B,EAASnzB,eACbjG,GAAyB,MAAhBA,EAAMsC,MAIf,OAHA,IAAIu5D,EAAc,IAAIv4D,EAAM81B,EAAShzB,qBAAsBgzB,EAASipB,wBAAyBjpB,EAAShzB,qBAAsBgzB,EAASipB,wBAA0B,EAKvK,OAIP,GAAIluC,IAAQmnD,GAA8B,OAAhBt7D,EAAMsC,QACjCy2D,IACIA,EAAQ,GACJ4C,EAAgB,IAAIr4D,EAAM81B,EAAShzB,qBAAsBgzB,EAASipB,wBAAyBjpB,EAAShzB,qBAAsBgzB,EAASipB,wBAA0B,GAC7JuZ,EAAeD,EACfE,EAAcD,EACdF,EAAa,IAAIp4D,EAAMk4D,EAAYx2D,IAAInB,IAAK23D,EAAYx2D,IAAIlB,OAAQ03D,EAAYx2D,IAAInB,IAAK23D,EAAYx2D,IAAIlB,OAAS,EAGlI,QACK9D,GAAS+4D,GAAS,GAC3B,GAAIwC,GAAgBG,GAAcC,GAAiBE,GAAeL,GAAeI,EAC7E,MAAO,CACHE,QAAS,IAAIx4D,EAAMi4D,EAAa55D,MAAMkC,IAAK03D,EAAa55D,MAAMmC,OAAQ43D,EAAW12D,IAAInB,IAAK63D,EAAW12D,IAAIlB,QACzGi4D,SAAU,IAAIz4D,EAAMq4D,EAAch6D,MAAMkC,IAAK83D,EAAch6D,MAAMmC,OAAQ+3D,EAAY72D,IAAInB,IAAKg4D,EAAY72D,IAAIlB,QAC9G03D,YAAaA,EACbI,aAAcA,EAG1B,EACAv6D,KAAK85D,gBAAkB,SAAU/hC,EAAUp5B,GACvC,IAAIi7D,EAAY7hC,EAASxzB,kBACrBuO,EAAMnU,EAAMsC,MACZy2D,EAAQ,EACRz3C,EAAW8X,EAAShzB,qBACpBmb,EAAc6X,EAASipB,wBACvB5gC,EAAYF,EAAc,EAC1Bo6C,EAAgB,IAAIr4D,EAAMge,EAAUC,EAAaD,EAAUG,GAC/D2X,EAASnzB,cACT,IAAI21D,EAAe,IAAIt4D,EAAM81B,EAAShzB,qBAAsBgzB,EAASipB,wBAAyBjpB,EAAShzB,qBAAsBgzB,EAASipB,wBAA0BriD,EAAMsC,MAAMN,QAE5K,GADAhC,EAAQo5B,EAASnzB,cACZjG,GAAyB,MAAhBA,EAAMsC,MAApB,CAEA,IAAIu5D,EAAc,IAAIv4D,EAAM81B,EAAShzB,qBAAsBgzB,EAASipB,wBAAyBjpB,EAAShzB,qBAAsBgzB,EAASipB,wBAA0B,GAC/JjpB,EAASpzB,eACTozB,EAASpzB,eACT,GAMI,GALAhG,EAAQi7D,EACR35C,EAAW8X,EAAShzB,qBACpBmb,EAAc6X,EAASipB,wBACvB5gC,EAAYF,EAAcvhB,EAAMsC,MAAMN,OACtCi5D,EAAY7hC,EAASpzB,eACjBhG,EACA,IAAwC,IAApCA,EAAMqC,KAAKwH,QAAQ,aACnB,GAAIsK,IAAQnU,EAAMsC,MACd,GAAwB,MAApB24D,EAAU34D,OAEV,GADAy2D,IACIA,EAAQ,EAAG,CACX,IAAIyC,EAAc,IAAIl4D,EAAMge,EAAUC,EAAaD,EAAUG,GACzD85C,EAAe,IAAIj4D,EAAM81B,EAAShzB,qBAAsBgzB,EAASipB,wBAAyBjpB,EAAShzB,qBAAsBgzB,EAASipB,wBAA0B,GAChK,GACIriD,EAAQo5B,EAASnzB,oBACZjG,GAAyB,MAAhBA,EAAMsC,OACxB,IAAIo5D,EAAa,IAAIp4D,EAAM81B,EAAShzB,qBAAsBgzB,EAASipB,wBAAyBjpB,EAAShzB,qBAAsBgzB,EAASipB,wBAA0B,EAClK,MAEyB,OAApB4Y,EAAU34D,OACfy2D,SAIP,GAAoB,OAAhB/4D,EAAMsC,MAAgB,CAC3B,IAAI05D,EAAY,EACZC,EAAWhB,EACf,MAAOgB,EAAU,CACb,IAA2C,IAAvCA,EAAS55D,KAAKwH,QAAQ,aAAsBoyD,EAAS35D,QAAU6R,EAAK,CACpE4kD,IACA,KACJ,CACK,GAAuB,MAAnBkD,EAAS35D,MACd,MAEJ25D,EAAW7iC,EAASpzB,eACpBg2D,GACJ,CACA,IAAK,IAAIp8D,EAAI,EAAGA,EAAIo8D,EAAWp8D,IAC3Bw5B,EAASnzB,aAEjB,QAECg1D,GAAalC,GAAS,GAC/B,OAAIwC,GAAgBG,GAAcC,GAAiBE,GAAeL,GAAeI,EACtE,CACHE,QAAS,IAAIx4D,EAAMi4D,EAAa55D,MAAMkC,IAAK03D,EAAa55D,MAAMmC,OAAQ43D,EAAW12D,IAAInB,IAAK63D,EAAW12D,IAAIlB,QACzGi4D,SAAU,IAAIz4D,EAAMq4D,EAAch6D,MAAMkC,IAAK83D,EAAch6D,MAAMmC,OAAQ+3D,EAAY72D,IAAInB,IAAKg4D,EAAY72D,IAAIlB,QAC9G03D,YAAaA,EACbI,aAAcA,QALtB,CAjDU,CAyDd,CACJ,CACA7zD,EAAQoyD,aAAeA,CAEvB,IAEA76D,IAAIC,OAAO,mBAAmB,CAAC,UAAU,UAAU,SAAS,cAAc,eAAe,kBAAkB,aAAa,wBAAwB,gBAAgB,gBAAgB,YAAY,eAAe,2BAA2B,uBAAuB,kBAAkB,2BAA2B,mCAAmC,SAASuI,EAASC,EAASvD,GAAQ,aAChX,IAAIwX,EAAMlU,EAAQ,aACd+V,EAAO/V,EAAQ,cACfirC,EAAcjrC,EAAQ,iBAAiBirC,YACvCzyB,EAASxY,EAAQ,YACjB8R,EAAe9R,EAAQ,uBAAuB8R,aAC9Ci+B,EAAY/vC,EAAQ,eAAe+vC,UACnCqkB,EAAWp0D,EAAQ,eAAepB,KAClCpD,EAAQwE,EAAQ,WAAWxE,MAC3BknD,EAAW1iD,EAAQ,cAAc0iD,SACjCyC,EAAsBnlD,EAAQ,0BAA0BmlD,oBACxDkB,EAAkBrmD,EAAQ,sBAAsBqmD,gBAChDU,EAAc/mD,EAAQ,iBAAiB+mD,YACvCsN,EAA6B,WAC7B,SAASA,EAAYnxC,EAAMsd,GAAQjnC,KAAKkE,IACpClE,KAAK+6D,aAAe,GACpB/6D,KAAKg7D,aAAe,GACpBh7D,KAAKi7D,cAAgB,CAAC,EACtBj7D,KAAKk7D,aAAe,CAAC,EACrBl7D,KAAKm7D,UAAY,EACjBn7D,KAAKo7D,aAAc,EACnBp7D,KAAKm1D,UAAY,GACjBn1D,KAAK+I,GAAK,aAAe+xD,EAAYO,KACrCr7D,KAAKm1D,UAAUjtD,SAAW,WACtB,OAAOlI,KAAK4I,KAAK,KACrB,EACA5I,KAAKs7D,YAAc,IAAI1P,GAAoB,IAAKiP,GAAYh1D,eAAgB7F,MAC5E,IAAIgP,EAAQhP,KACZA,KAAKs7D,YAAYjiD,GAAG,UAAU,SAAUlb,GACpC6Q,EAAMmK,QAAQ,kBAAmBhb,EACrC,IACA6B,KAAKqZ,GAAG,aAAcrZ,KAAKu7D,aAAa9yC,KAAKzoB,OAC7CA,KAAKkoD,UAAYloD,KAAKgzC,SAASvqB,KAAKzoB,MACjB,iBAAR2pB,GAAqBA,EAAKtnB,UACjCsnB,EAAO,IAAIw/B,EAA4B,IAC3CnpD,KAAKwsD,YAAY7iC,GACjB3pB,KAAKqG,UAAY,IAAImwC,EAAUx2C,MAC/BA,KAAKm1C,aAAe,IAAIzD,EAAY1xC,MACpCif,EAAOjD,aAAahc,MACpBA,KAAKw7D,QAAQv0B,GACbhoB,EAAO9F,QAAQ,UAAWnZ,MAC1BA,KAAKy7D,WAAY,CACrB,CAq4CA,OAp4CAX,EAAYj4D,UAAU2pD,YAAc,SAAUtoD,GACtClE,KAAKkE,KACLlE,KAAKkE,IAAIqV,IAAI,SAAUvZ,KAAKkoD,WAChCloD,KAAKkE,IAAMA,EACXA,EAAImV,GAAG,SAAUrZ,KAAKkoD,WAAW,GACjCloD,KAAKs7D,YAAY9O,YAAYxsD,KAAKy2C,eAClCz2C,KAAK07D,aACT,EACAZ,EAAYj4D,UAAU4zC,YAAc,WAChC,OAAOz2C,KAAKkE,GAChB,EACA42D,EAAYj4D,UAAU84D,eAAiB,SAAU/oB,GAC7C,IAAKA,EAGD,OAFA5yC,KAAKszC,aAAe,QACpBtzC,KAAKozC,gBAAkB,IAG3B,IAAI7zC,EAAIS,KAAKszC,aAAa3yC,OACtBpC,EAAIyB,KAAKqzC,kBAAkBrzC,KAAKszC,aAAcV,GAAU,EACxDrzC,EAAIhB,IACJyB,KAAKszC,aAAazlC,OAAOtP,EAAGgB,GAC5BS,KAAKozC,gBAAgBvlC,OAAOtP,EAAGgB,GAEvC,EACAu7D,EAAYj4D,UAAUwwC,kBAAoB,SAAUuoB,EAAYlyD,GAC5D,IAAImyD,EAAM,EACNzrB,EAAKwrB,EAAWj7D,OAAS,EAC7B,MAAOk7D,GAAOzrB,EAAI,CACd,IAAI0rB,EAAOD,EAAMzrB,GAAO,EACpB3wC,EAAIm8D,EAAWE,GACnB,GAAIpyD,EAAMjK,EACNo8D,EAAMC,EAAM,MACX,MAAIpyD,EAAMjK,GAGX,OAAOq8D,EAFP1rB,EAAK0rB,EAAM,CAED,CAClB,CACA,OAAOD,EAAM,CACjB,EACAf,EAAYj4D,UAAU64D,YAAc,WAChC17D,KAAKo2D,WAAY,EACjBp2D,KAAK8zC,UAAY,GACjB9zC,KAAK+7D,gBAAkB,GACvB/7D,KAAK27D,eAAe,GACf37D,KAAKy7D,WACNz7D,KAAKs7D,YAAYh7D,MAAM,EAC/B,EACAw6D,EAAYj4D,UAAU04D,aAAe,SAAUp9D,GAC3C,IAAI8hC,EAAO9hC,EAAEqc,KACbxa,KAAK27D,eAAe17B,EAAK3/B,MAAMkC,IACnC,EACAs4D,EAAYj4D,UAAUmwC,SAAW,SAAUC,GACvCjzC,KAAKo2D,WAAY,EACjBp2D,KAAKm1C,aAAanC,SAASC,GAC3BjzC,KAAK27D,eAAe1oB,EAAM3yC,MAAMkC,KAChC,IAAIw5D,EAAeh8D,KAAKi8D,4BAA4BhpB,IAC/CjzC,KAAK2tD,WAAa3tD,KAAKk8D,eACpBF,GAAgBA,EAAar7D,SAC7BX,KAAKk8D,aAAatoD,IAAI,CAClBg0B,OAAQ,cACRuqB,MAAO6J,GACRh8D,KAAKm8D,iBACRn8D,KAAKm8D,iBAAkB,GAE3Bn8D,KAAKk8D,aAAatoD,IAAIq/B,EAAOjzC,KAAKm8D,iBAClCn8D,KAAKm8D,iBAAkB,EACvBn8D,KAAKo8D,mBAAmBztD,YAE5B3O,KAAKs7D,YAAY3O,gBAAgB1Z,GACjCjzC,KAAKmZ,QAAQ,SAAU85B,EAC3B,EACA6nB,EAAYj4D,UAAUymD,SAAW,SAAU3/B,GACvC3pB,KAAKkE,IAAIolD,SAAS3/B,GAClB3pB,KAAKqG,UAAU6xC,OAAO,EAAG,GACzBl4C,KAAK27D,eAAe,GACpB37D,KAAKq8D,eAAer8D,KAAKk8D,cACzBl8D,KAAKynC,iBAAiBomB,OAC1B,EACAiN,EAAYve,SAAW,SAAUr6B,GACP,iBAAXA,IACPA,EAAUo6C,KAAKC,MAAMr6C,IACzB,IAAIs6C,EAAc,IAAIhP,EACtBgP,EAAYpO,WAAalsC,EAAQu6C,QAAQzN,KACzCwN,EAAYvO,WAAa/rC,EAAQu6C,QAAQjN,KACzCgN,EAAY1M,KAAO5tC,EAAQu6C,QAAQ3M,KACnC0M,EAAYnO,KAAOnsC,EAAQu6C,QAAQlO,IACnC,IAAImO,EAAc,IAAI5B,EAAY54C,EAAQjhB,OAW1C,OAVAihB,EAAQiwC,MAAMhnD,SAAQ,SAAU80B,GAC5By8B,EAAY1wB,QAAQ,MAAO/pC,EAAM2f,WAAWqe,EAAK3/B,MAAO2/B,EAAKt8B,KACjE,IACA+4D,EAAYC,eAAez6C,EAAQ6e,aACnC27B,EAAYE,eAAe16C,EAAQ26C,aACnCH,EAAYlB,QAAQt5C,EAAQ+kB,MAC5By1B,EAAYI,cAAc56C,EAAQomB,YAClCo0B,EAAYK,aAAa76C,EAAQ86C,WACjCN,EAAYL,eAAeG,GAC3BE,EAAYr2D,UAAUk2C,SAASr6B,EAAQ7b,WAChCq2D,CACX,EACA5B,EAAYj4D,UAAUs5C,OAAS,WAC3B,MAAO,CACHpb,YAAa/gC,KAAK+/B,aAClB88B,YAAa78D,KAAK+6D,aAClB5I,MAAOnyD,KAAKs1D,cAAchqD,KAAI,SAAU20B,GACpC,OAAOA,EAAK3f,KAChB,IACAm8C,QAASz8D,KAAKynC,iBACdR,KAAMjnC,KAAKqjD,MAAM98C,IACjB+hC,WAAYtoC,KAAKi9D,YACjBD,UAAWh9D,KAAKk9D,WAChB72D,UAAWrG,KAAKqG,UAAU81C,SAC1Bl7C,MAAOjB,KAAKkE,IAAIwuC,WAExB,EACAooB,EAAYj4D,UAAUqF,SAAW,WAC7B,OAAOlI,KAAKkE,IAAIwuC,UACpB,EACAooB,EAAYj4D,UAAU8rD,aAAe,WACjC,OAAO3uD,KAAKqG,SAChB,EACAy0D,EAAYj4D,UAAU+pD,SAAW,SAAUpqD,GACvC,OAAOxC,KAAKs7D,YAAY1O,SAASpqD,EACrC,EACAs4D,EAAYj4D,UAAUk+C,UAAY,SAAUv+C,GACxC,OAAOxC,KAAKs7D,YAAYva,UAAUv+C,EACtC,EACAs4D,EAAYj4D,UAAUkB,WAAa,SAAUvB,EAAKC,GAC9C,IACI9D,EADAoH,EAAS/F,KAAKs7D,YAAYva,UAAUv+C,GAC7B/C,EAAI,EACf,GAAc,MAAVgD,EAAgB,CAChB,IAAIlE,EAAIwH,EAAOpF,OAAS,EACxBlB,EAAIO,KAAKqC,QAAQG,GAAK7B,MAC1B,MAEI,IAASpC,EAAI,EAAGA,EAAIwH,EAAOpF,OAAQpC,IAE/B,GADAkB,GAAKsG,EAAOxH,GAAG0C,MAAMN,OACjBlB,GAAKgD,EACL,MAIZ,OADA9D,EAAQoH,EAAOxH,GACVI,GAELA,EAAMqF,MAAQzF,EACdI,EAAM2B,MAAQb,EAAId,EAAMsC,MAAMN,OACvBhC,GAHI,IAIf,EACAm8D,EAAYj4D,UAAUw5D,eAAiB,SAAUG,GAI7C,GAHAx8D,KAAKk8D,aAAeM,EAChBx8D,KAAKo8D,oBACLp8D,KAAKo8D,mBAAmB3tD,SACxB+tD,EAAa,CACb,IAAIp4B,EAAOpkC,KACXw8D,EAAY1O,WAAW9tD,MACvBA,KAAKm9D,uBAAyB,WAC1B/4B,EAAKg4B,mBAAmB3tD,SACxB21B,EAAK+3B,iBAAkB,CAC3B,EACAn8D,KAAKo8D,mBAAqB5/C,EAAK1N,YAAY9O,KAAKm9D,uBACpD,MAEIn9D,KAAKm9D,uBAAyB,WAAc,CAEpD,EACArC,EAAYj4D,UAAUu6D,cAAgB,WAC9Bp9D,KAAKm9D,wBACLn9D,KAAKm9D,wBACb,EACArC,EAAYj4D,UAAU4kC,eAAiB,WACnC,OAAOznC,KAAKk8D,cAAgBl8D,KAAKq9D,mBACrC,EACAvC,EAAYj4D,UAAUmD,aAAe,WACjC,OAAIhG,KAAKqlD,iBACE7oC,EAAKzP,aAAa,IAAK/M,KAAKg6C,cAG5B,IAEf,EACA8gB,EAAYj4D,UAAUy6D,eAAiB,SAAU5zD,GAC7C1J,KAAK+a,UAAU,cAAerR,EAClC,EACAoxD,EAAYj4D,UAAUwiD,eAAiB,WACnC,OAAOrlD,KAAKu9D,eAAiBv9D,KAAKqjD,MAAMma,eAC5C,EACA1C,EAAYj4D,UAAU46D,WAAa,SAAU3jB,GACzC95C,KAAK+a,UAAU,UAAW++B,EAC9B,EACAghB,EAAYj4D,UAAUm3C,WAAa,WAC/B,OAAOh6C,KAAK09D,QAChB,EACA5C,EAAYj4D,UAAUk3C,UAAY,SAAU7vC,GACxC,OAAOlK,KAAKu9D,cAAiBrzD,EAASzH,OAASzC,KAAK09D,WAAa,CACrE,EACA5C,EAAYj4D,UAAU86D,0BAA4B,SAAUC,GACxD59D,KAAK+a,UAAU,yBAA0B6iD,EAC7C,EACA9C,EAAYj4D,UAAUo3C,0BAA4B,WAC9C,OAAOj6C,KAAK69D,uBAChB,EACA/C,EAAYj4D,UAAUi7D,aAAe,SAAUC,GAC3C/9D,KAAK+a,UAAU,YAAagjD,EAChC,EACAjD,EAAYj4D,UAAU4yC,aAAe,WACjC,OAAOz1C,KAAKg+D,UAChB,EACAlD,EAAYj4D,UAAUo7D,gBAAkB,WACpCj+D,KAAK89D,cAAc99D,KAAKg+D,WAC5B,EACAlD,EAAYj4D,UAAUq7D,oBAAsB,SAAU17D,EAAK+P,GAClDvS,KAAKg7D,aAAax4D,KACnBxC,KAAKg7D,aAAax4D,GAAO,IAC7BxC,KAAKg7D,aAAax4D,IAAQ,IAAM+P,EAChCvS,KAAKmZ,QAAQ,mBAAoB,CAAC,EACtC,EACA2hD,EAAYj4D,UAAUs7D,uBAAyB,SAAU37D,EAAK+P,GAC1DvS,KAAKg7D,aAAax4D,IAAQxC,KAAKg7D,aAAax4D,IAAQ,IAAIG,QAAQ,IAAM4P,EAAW,IACjFvS,KAAKmZ,QAAQ,mBAAoB,CAAC,EACtC,EACA2hD,EAAYj4D,UAAUu7D,eAAiB,WACnC,OAAOp+D,KAAK+6D,YAChB,EACAD,EAAYj4D,UAAU+5D,eAAiB,SAAUphB,GAC7Cx7C,KAAK+6D,aAAe,GACpB,IAAK,IAAIx8D,EAAI,EAAGA,EAAIi9C,EAAK76C,OAAQpC,IAC7ByB,KAAK+6D,aAAavf,EAAKj9C,IAAM,iBAEjCyB,KAAKmZ,QAAQ,mBAAoB,CAAC,EACtC,EACA2hD,EAAYj4D,UAAUw7D,iBAAmB,WACrCr+D,KAAK+6D,aAAe,GACpB/6D,KAAKmZ,QAAQ,mBAAoB,CAAC,EACtC,EACA2hD,EAAYj4D,UAAUy7D,cAAgB,SAAU97D,EAAK+P,QAC/BnM,IAAdmM,IACAA,EAAY,kBACZA,EACAvS,KAAK+6D,aAAav4D,GAAO+P,SAElBvS,KAAK+6D,aAAav4D,GAC7BxC,KAAKmZ,QAAQ,mBAAoB,CAAC,EACtC,EACA2hD,EAAYj4D,UAAU07D,gBAAkB,SAAU/7D,UACvCxC,KAAK+6D,aAAav4D,GACzBxC,KAAKmZ,QAAQ,mBAAoB,CAAC,EACtC,EACA2hD,EAAYj4D,UAAU65B,UAAY,SAAUpc,EAAOysC,EAAO/rD,EAAMw9D,GAC5D,IAAIz1D,EAAK/I,KAAKm7D,YACV79B,EAAS,CACThd,MAAOA,EACPtf,KAAMA,GAAQ,OACdgrB,SAAyB,mBAARhrB,EAAqBA,EAAO,KAC7C+rD,MAAOA,EACPyR,UAAWA,EACXz1D,GAAIA,GAUR,OARIy1D,GACAx+D,KAAKi7D,cAAclyD,GAAMu0B,EACzBt9B,KAAKmZ,QAAQ,uBAGbnZ,KAAKk7D,aAAanyD,GAAMu0B,EACxBt9B,KAAKmZ,QAAQ,qBAEVpQ,CACX,EACA+xD,EAAYj4D,UAAU47D,iBAAmB,SAAUnhC,EAAQkhC,GACvD,GAAKlhC,EAAO2vB,OAAZ,CAEA,IAAIlkD,EAAK/I,KAAKm7D,YAWd,OAVA79B,EAAOv0B,GAAKA,EACZu0B,EAAOkhC,UAAYA,EACfA,GACAx+D,KAAKi7D,cAAclyD,GAAMu0B,EACzBt9B,KAAKmZ,QAAQ,uBAGbnZ,KAAKk7D,aAAanyD,GAAMu0B,EACxBt9B,KAAKmZ,QAAQ,qBAEVmkB,CAZG,CAad,EACAw9B,EAAYj4D,UAAU26B,aAAe,SAAUkhC,GAC3C,IAAIphC,EAASt9B,KAAKi7D,cAAcyD,IAAa1+D,KAAKk7D,aAAawD,GAC/D,GAAKphC,EAAL,CAEA,IAAIqhC,EAAUrhC,EAAOkhC,QAAUx+D,KAAKi7D,cAAgBj7D,KAAKk7D,oBACjDyD,EAAQD,GAChB1+D,KAAKmZ,QAAQmkB,EAAOkhC,QAAU,oBAAsB,mBAH1C,CAId,EACA1D,EAAYj4D,UAAU+7D,WAAa,SAAUJ,GACzC,OAAOA,EAAUx+D,KAAKi7D,cAAgBj7D,KAAKk7D,YAC/C,EACAJ,EAAYj4D,UAAUg8D,UAAY,SAAUphD,GACxC,IAAKzd,KAAK8+D,iBAAkB,CACxB,IAAID,EAAY,IAAI/R,EAAgB,KAAM,oBAAqB,QAC/D9sD,KAAK8+D,iBAAmB9+D,KAAKy+D,iBAAiBI,EAClD,CACA7+D,KAAK8+D,iBAAiB9R,UAAUvvC,EACpC,EACAq9C,EAAYj4D,UAAUk8D,eAAiB,SAAU9+C,EAAUE,EAAQ4sC,EAAOyR,GACjD,iBAAVr+C,IACP4sC,EAAQ5sC,EACRA,EAASF,GAER8sC,IACDA,EAAQ,YACZ,IAAIzsC,EAAQ,IAAIre,EAAMge,EAAU,EAAGE,EAAQ+kC,KAE3C,OADA5kC,EAAMvX,GAAK/I,KAAK08B,UAAUpc,EAAOysC,EAAO,WAAYyR,GAC7Cl+C,CACX,EACAw6C,EAAYj4D,UAAU85D,eAAiB,SAAU57B,GAC7C/gC,KAAK+/B,aAAegB,EACpB/gC,KAAKmZ,QAAQ,mBAAoB,CAAC,EACtC,EACA2hD,EAAYj4D,UAAUm8D,eAAiB,WACnC,OAAOh/D,KAAK+/B,cAAgB,EAChC,EACA+6B,EAAYj4D,UAAUo8D,iBAAmB,WACrCj/D,KAAK28D,eAAe,GACxB,EACA7B,EAAYj4D,UAAU4mD,eAAiB,SAAU9/B,GAC7C,IAAIrnB,EAAQqnB,EAAKrnB,MAAM,gBAEnBtC,KAAK0pD,aADLpnD,EACoBA,EAAM,GAGN,IAE5B,EACAw4D,EAAYj4D,UAAUgzB,aAAe,SAAUrzB,EAAKC,GAChD,IAAI2M,EAAOpP,KAAKqC,QAAQG,GACpB08D,GAAU,EAKd,GAJIz8D,EAAS,IACTy8D,IAAY9vD,EAAK1G,OAAOjG,EAAS,GAAGH,MAAMtC,KAAK+6C,UAC9CmkB,IACDA,IAAY9vD,EAAK1G,OAAOjG,GAAQH,MAAMtC,KAAK+6C,UAC3CmkB,EACA,IAAIzhD,EAAKzd,KAAK+6C,aACb,GAAI,QAAQ54C,KAAKiN,EAAKnJ,MAAMxD,EAAS,EAAGA,EAAS,IAC9Cgb,EAAK,UAELA,EAAKzd,KAAK86C,WAClB,IAAIx6C,EAAQmC,EACZ,GAAInC,EAAQ,EAAG,CACX,GACIA,UACKA,GAAS,GAAK8O,EAAK1G,OAAOpI,GAAOgC,MAAMmb,IAChDnd,GACJ,CACA,IAAIqD,EAAMlB,EACV,MAAOkB,EAAMyL,EAAKzO,QAAUyO,EAAK1G,OAAO/E,GAAKrB,MAAMmb,GAC/C9Z,IAEJ,OAAO,IAAI1B,EAAMO,EAAKlC,EAAOkC,EAAKmB,EACtC,EACAm3D,EAAYj4D,UAAU22C,cAAgB,SAAUh3C,EAAKC,GACjD,IAAI08D,EAAYn/D,KAAK61B,aAAarzB,EAAKC,GACnC2M,EAAOpP,KAAKqC,QAAQ88D,EAAUx7D,IAAInB,KACtC,MAAO4M,EAAK1G,OAAOy2D,EAAUx7D,IAAIlB,QAAQH,MAAM,SAC3C68D,EAAUx7D,IAAIlB,QAAU,EAE5B,OAAO08D,CACX,EACArE,EAAYj4D,UAAU+mD,eAAiB,SAAUC,GAC7C7pD,KAAKkE,IAAI0lD,eAAeC,EAC5B,EACAiR,EAAYj4D,UAAUinD,eAAiB,WACnC,OAAO9pD,KAAKkE,IAAI4lD,gBACpB,EACAgR,EAAYj4D,UAAUu8D,aAAe,SAAUC,GAAar/D,KAAK+a,UAAU,YAAaskD,EAAY,EACpGvE,EAAYj4D,UAAUy8D,aAAe,WAAc,OAAOt/D,KAAKu/D,UAAY,EAC3EzE,EAAYj4D,UAAU28D,kBAAoB,SAAUrhE,GAChD,IAAIq9C,EAAOr9C,EAAEqc,KACbxa,KAAKs7D,YAAYh7D,MAAMk7C,EAAKiR,OAC5BzsD,KAAKmZ,QAAQ,kBAAmBhb,EACpC,EACA28D,EAAYj4D,UAAU24D,QAAU,SAAUv0B,EAAMnpB,GAC5C,GAAImpB,GAAwB,kBAATA,EAAmB,CAClC,GAAIA,EAAKphC,aACL,OAAO7F,KAAKy/D,cAAcx4B,GAC9B,IAAI50B,EAAU40B,EACVvvB,EAAOrF,EAAQqF,IACvB,MAEIA,EAA0B,GAAU,gBAIxC,GAFK1X,KAAKod,OAAO,mBACbpd,KAAKod,OAAO,iBAAmB,IAAIy9C,GACnC76D,KAAKod,OAAO1F,KAAUrF,EAGtB,OAFArS,KAAKy/D,cAAcz/D,KAAKod,OAAO1F,SAC/BoG,GAAMA,KAGV9d,KAAK0/D,QAAUhoD,EACfuH,EAAOd,WAAW,CAAC,OAAQzG,GAAO,SAAU7S,GACxC,GAAI7E,KAAK0/D,UAAYhoD,EACjB,OAAOoG,GAAMA,IACb9d,KAAKod,OAAO1F,KAAUrF,EACtBrS,KAAKy/D,cAAcz/D,KAAKod,OAAO1F,IAE1B7S,GAAKA,EAAEQ,OACZR,EAAI,IAAIA,EAAEQ,KAAKgN,GACVA,IACDrS,KAAKod,OAAO1F,GAAQ7S,EACpBA,EAAE0B,IAAMmR,GAEZ1X,KAAKy/D,cAAc56D,IAEvBiZ,GAAMA,GACV,EAAE2K,KAAKzoB,OACFA,KAAKqjD,OACNrjD,KAAKy/D,cAAcz/D,KAAKod,OAAO,kBAAkB,EACzD,EACA09C,EAAYj4D,UAAU48D,cAAgB,SAAUx4B,EAAM04B,GAGlD,GAFKA,IACD3/D,KAAK0/D,QAAUz4B,EAAK1gC,KACpBvG,KAAKqjD,QAAUpc,EAAnB,CAEA,IAAI24B,EAAU5/D,KAAKqjD,MACnBrjD,KAAKqjD,MAAQpc,EACbjnC,KAAK6/D,cACD7/D,KAAKu/D,YACLv/D,KAAK8/D,eACT,IAAIjU,EAAY5kB,EAAKphC,eACrB,QAAqBO,IAAjBylD,EAAUxyC,GAAkB,CAC5B,IAAImmD,EAAoBx/D,KAAKw/D,kBAAkB/2C,KAAKzoB,MACpD6rD,EAAUxyC,GAAG,SAAUmmD,EAC3B,CACAx/D,KAAKs7D,YAAY/O,aAAaV,GAC9B7rD,KAAKs7D,YAAY9O,YAAYxsD,KAAKy2C,eAClCz2C,KAAK+6C,QAAU9T,EAAK8T,QACpB/6C,KAAK86C,WAAa7T,EAAK6T,WAClB6kB,IACG14B,EAAK84B,iBACL94B,EAAK84B,gBAAgB//D,MACzBA,KAAKkb,SAAS8kD,WAAWtkD,IAAI9Y,KAAK5C,KAAMA,KAAKigE,aAC7CjgE,KAAKi4D,YAAYhxB,EAAKvhC,cACtB1F,KAAKs7D,YAAYh7D,MAAM,GACvBN,KAAK4Y,MAAM,aAAc,CAAEgnD,QAASA,EAAS34B,KAAMA,IArB7C,CAuBd,EACA6zB,EAAYj4D,UAAUg9D,YAAc,WAC5B7/D,KAAKgsD,UACLhsD,KAAKgsD,QAAQkU,YACblgE,KAAKgsD,QAAU,KAEvB,EACA8O,EAAYj4D,UAAUi9D,aAAe,WACjC,IACI9/D,KAAKgsD,QAAUhsD,KAAKqjD,MAAMsD,aAAa3mD,KAC3C,CACA,MAAO7B,GACH8gB,EAAO1D,KAAK,wBAAyBpd,GACrC6B,KAAKgsD,QAAU,IACnB,CACJ,EACA8O,EAAYj4D,UAAUs9D,QAAU,WAC5B,OAAOngE,KAAKqjD,KAChB,EACAyX,EAAYj4D,UAAUk6D,aAAe,SAAUC,GACvCh9D,KAAKk9D,aAAeF,GAAaoD,MAAMpD,KAE3Ch9D,KAAKk9D,WAAaF,EAClBh9D,KAAKmZ,QAAQ,kBAAmB6jD,GACpC,EACAlC,EAAYj4D,UAAUimC,aAAe,WACjC,OAAO9oC,KAAKk9D,UAChB,EACApC,EAAYj4D,UAAUi6D,cAAgB,SAAUx0B,GACxCtoC,KAAKi9D,cAAgB30B,GAAc83B,MAAM93B,KAE7CtoC,KAAKi9D,YAAc30B,EACnBtoC,KAAKmZ,QAAQ,mBAAoBmvB,GACrC,EACAwyB,EAAYj4D,UAAUw9D,cAAgB,WAClC,OAAOrgE,KAAKi9D,WAChB,EACAnC,EAAYj4D,UAAUy9D,eAAiB,WAEnC,OADAtgE,KAAKugE,gBACDvgE,KAAK07C,YACEvvC,KAAKC,IAAIpM,KAAKwgE,wBAAyBxgE,KAAKygE,aAChDzgE,KAAKygE,WAChB,EACA3F,EAAYj4D,UAAU29D,sBAAwB,WAC1C,GAA6B,MAAzBxgE,KAAK0gE,iBACL,OAAO1gE,KAAK0gE,iBAChB,IAAIzrD,EAAQ,EAKZ,OAJAjV,KAAK07C,YAAYvwC,SAAQ,SAAU/F,GAC3BA,GAAKA,EAAEq7D,YAAcxrD,IACrBA,EAAQ7P,EAAEq7D,YAClB,IACOzgE,KAAK2gE,gBAAkB1rD,CAClC,EACA6lD,EAAYj4D,UAAU09D,cAAgB,SAAUK,GAC5C,GAAI5gE,KAAKo2D,WAAawK,EAAO,CAEzB,GADA5gE,KAAKo2D,WAAY,EACbp2D,KAAK4zC,aACL,OAAO5zC,KAAKygE,YAAczgE,KAAK6gE,WAQnC,IAPA,IAAItzC,EAAQvtB,KAAKkE,IAAIqlD,cACjBj1C,EAAQtU,KAAK+7D,gBACb+E,EAAoB,EACpBC,EAAY,EACZrnB,EAAW15C,KAAKm1D,UAAU4L,GAC1BC,EAAYtnB,EAAWA,EAASp5C,MAAMkC,IAAM0iD,IAC5Cv5C,EAAM4hB,EAAM5sB,OACPpC,EAAI,EAAGA,EAAIoN,EAAKpN,IAAK,CAC1B,GAAIA,EAAIyiE,EAAW,CAEf,GADAziE,EAAIm7C,EAAS/1C,IAAInB,IAAM,EACnBjE,GAAKoN,EACL,MACJ+tC,EAAW15C,KAAKm1D,UAAU4L,KAC1BC,EAAYtnB,EAAWA,EAASp5C,MAAMkC,IAAM0iD,GAChD,CACgB,MAAZ5wC,EAAM/V,KACN+V,EAAM/V,GAAKyB,KAAKihE,sBAAsB1zC,EAAMhvB,IAAI,IAChD+V,EAAM/V,GAAKuiE,IACXA,EAAoBxsD,EAAM/V,GAClC,CACAyB,KAAKygE,YAAcK,CACvB,CACJ,EACAhG,EAAYj4D,UAAUR,QAAU,SAAUG,GACtC,OAAOxC,KAAKkE,IAAI7B,QAAQG,EAC5B,EACAs4D,EAAYj4D,UAAUmnD,SAAW,SAAUtoC,EAAUC,GACjD,OAAO3hB,KAAKkE,IAAI8lD,SAAStoC,EAAUC,EACvC,EACAm5C,EAAYj4D,UAAUw7B,UAAY,WAC9B,OAAOr+B,KAAKkE,IAAIm6B,WACpB,EACAy8B,EAAYj4D,UAAU6hC,aAAe,SAAUpkB,GAC3C,OAAOtgB,KAAKkE,IAAIwgC,aAAapkB,GAAStgB,KAAKqG,UAAUinB,WACzD,EACAwtC,EAAYj4D,UAAU0iC,OAAS,SAAUr7B,EAAUyf,GAC/C,OAAO3pB,KAAKkE,IAAIqhC,OAAOr7B,EAAUyf,EACrC,EACAmxC,EAAYj4D,UAAUqD,OAAS,SAAUoa,GACrC,OAAOtgB,KAAKkE,IAAIgC,OAAOoa,EAC3B,EACAw6C,EAAYj4D,UAAUwnD,gBAAkB,SAAU3oC,EAAUC,GACxD,OAAO3hB,KAAKkE,IAAImmD,gBAAgB3oC,EAAUC,EAC9C,EACAm5C,EAAYj4D,UAAUysD,YAAc,SAAUvE,EAAQkE,GAClD,GAAKlE,EAAOpqD,OAAZ,CAEAX,KAAK2tD,WAAY,EACjB,IAAK,IAAIpvD,EAAIwsD,EAAOpqD,OAAS,GAAS,GAANpC,EAASA,IAAK,CAC1C,IAAI00C,EAAQ8X,EAAOxsD,GACC,UAAhB00C,EAAMrL,QAAsC,UAAhBqL,EAAMrL,OAClC5nC,KAAKkE,IAAI+mD,YAAYhY,GAEhBA,EAAMkf,OACXnyD,KAAKq2D,SAASpjB,EAAMkf,MAE5B,EACKlD,GAAcjvD,KAAKo7D,cAChBrQ,EAAOqG,gBACPpxD,KAAKqG,UAAUk2C,SAASwO,EAAOqG,iBAE/BpxD,KAAKqG,UAAUsiC,SAAS3oC,KAAKkhE,kBAAkBnW,GAAQ,KAE/D/qD,KAAK2tD,WAAY,CAjBP,CAkBd,EACAmN,EAAYj4D,UAAU+sD,YAAc,SAAU7E,EAAQkE,GAClD,GAAKlE,EAAOpqD,OAAZ,CAEAX,KAAK2tD,WAAY,EACjB,IAAK,IAAIpvD,EAAI,EAAGA,EAAIwsD,EAAOpqD,OAAQpC,IAAK,CACpC,IAAI00C,EAAQ8X,EAAOxsD,GACC,UAAhB00C,EAAMrL,QAAsC,UAAhBqL,EAAMrL,QAClC5nC,KAAKkE,IAAIknD,gBAAgBnY,EAEjC,EACKgc,GAAcjvD,KAAKo7D,cAChBrQ,EAAOsG,eACPrxD,KAAKqG,UAAUk2C,SAASwO,EAAOsG,gBAE/BrxD,KAAKqG,UAAUsiC,SAAS3oC,KAAKkhE,kBAAkBnW,GAAQ,KAE/D/qD,KAAK2tD,WAAY,CAdP,CAed,EACAmN,EAAYj4D,UAAUs+D,cAAgB,SAAUC,GAC5CphE,KAAKo7D,YAAcgG,CACvB,EACAtG,EAAYj4D,UAAUq+D,kBAAoB,SAAUnW,EAAQsW,GACxD,SAASnW,EAASjY,GACd,OAAOouB,EAA0B,WAAjBpuB,EAAMrL,OAAuC,WAAjBqL,EAAMrL,MACtD,CAEA,IADA,IAAItnB,EAAO8nC,EACF7pD,EAAI,EAAGA,EAAIwsD,EAAOpqD,OAAQpC,IAAK,CACpC,IAAI00C,EAAQ8X,EAAOxsD,GACd00C,EAAM3yC,QAENggB,EASD4qC,EAASjY,IACTmV,EAAQnV,EAAM3yC,OACiC,GAA3CggB,EAAME,QAAQ4nC,EAAM5lD,IAAK4lD,EAAM3lD,SAC/B6d,EAAMU,SAASonC,GAEnBA,EAAQnV,EAAMtvC,IACgC,GAA1C2c,EAAME,QAAQ4nC,EAAM5lD,IAAK4lD,EAAM3lD,SAC/B6d,EAAMW,OAAOmnC,KAIjBA,EAAQnV,EAAM3yC,OACiC,GAA3CggB,EAAME,QAAQ4nC,EAAM5lD,IAAK4lD,EAAM3lD,UAC/B6d,EAAQre,EAAM2f,WAAWqxB,EAAM3yC,MAAO2yC,EAAM3yC,SApB5CggB,EADA4qC,EAASjY,GACDhxC,EAAM2f,WAAWqxB,EAAM3yC,MAAO2yC,EAAMtvC,KAGpC1B,EAAM2f,WAAWqxB,EAAM3yC,MAAO2yC,EAAM3yC,OAoBxD,CACA,OAAOggB,CACX,EACAw6C,EAAYj4D,UAAUF,QAAU,SAAU2d,EAAOqJ,GAC7C,OAAO3pB,KAAKkE,IAAIvB,QAAQ2d,EAAOqJ,EACnC,EACAmxC,EAAYj4D,UAAUwiC,SAAW,SAAUi8B,EAAWC,EAAY70D,GAC9D,IAAIid,EAAO3pB,KAAK0kC,aAAa48B,GACzBnP,EAAQnyD,KAAKi1D,gBAAgBqM,GAC7BE,EAAUv/D,EAAM2f,WAAW2/C,EAAYA,GAC3C,IAAK70D,EAAM,CACP1M,KAAKkG,OAAOo7D,GACZ,IAAIjf,EAAUif,EAAUhhE,MAAMkC,IAAM8+D,EAAU39D,IAAInB,IAC9Ci/D,EAAWpf,GAAWif,EAAU39D,IAAIlB,OAAS6+D,EAAUhhE,MAAMmC,OAAS6+D,EAAU39D,IAAIlB,OACpFg/D,IACID,EAAQlhE,MAAMkC,KAAO8+D,EAAU39D,IAAInB,KAAOg/D,EAAQlhE,MAAMmC,OAAS6+D,EAAU39D,IAAIlB,SAC/E++D,EAAQlhE,MAAMmC,QAAUg/D,GACxBD,EAAQ79D,IAAInB,KAAO8+D,EAAU39D,IAAInB,KAAOg/D,EAAQ79D,IAAIlB,OAAS6+D,EAAU39D,IAAIlB,SAC3E++D,EAAQ79D,IAAIlB,QAAUg/D,IAE1Bpf,GAAWmf,EAAQlhE,MAAMkC,KAAO8+D,EAAU39D,IAAInB,MAC9Cg/D,EAAQlhE,MAAMkC,KAAO6/C,EACrBmf,EAAQ79D,IAAInB,KAAO6/C,EAE3B,CAEA,GADAmf,EAAQ79D,IAAM3D,KAAKulC,OAAOi8B,EAAQlhE,MAAOqpB,GACrCwoC,EAAMxxD,OAAQ,CACd,IAAI+gE,EAAWJ,EAAUhhE,MACrBqhE,EAAWH,EAAQlhE,MACnB+hD,EAAUsf,EAASn/D,IAAMk/D,EAASl/D,IAClCi/D,EAAWE,EAASl/D,OAASi/D,EAASj/D,OAC1CzC,KAAKq2D,SAASlE,EAAM7mD,KAAI,SAAUiY,GAQ9B,OAPAA,EAAIA,EAAExB,QACFwB,EAAEjjB,MAAMkC,KAAOk/D,EAASl/D,MACxB+gB,EAAEjjB,MAAMmC,QAAUg/D,GAClBl+C,EAAE5f,IAAInB,KAAOk/D,EAASl/D,MACtB+gB,EAAE5f,IAAIlB,QAAUg/D,GACpBl+C,EAAEjjB,MAAMkC,KAAO6/C,EACf9+B,EAAE5f,IAAInB,KAAO6/C,EACN9+B,CACX,IACJ,CACA,OAAOi+C,CACX,EACA1G,EAAYj4D,UAAU++D,WAAa,SAAU3hD,EAAUE,EAAQ0hD,GAC3DA,EAAeA,EAAal/D,QAAQ,MAAO3C,KAAKgG,gBAChD,IAAK,IAAIxD,EAAMyd,EAAUzd,GAAO2d,EAAQ3d,IACpCxC,KAAKkE,IAAIuhD,aAAa,CAAEjjD,IAAKA,EAAKC,OAAQ,GAAKo/D,EACvD,EACA/G,EAAYj4D,UAAUi/D,YAAc,SAAUxhD,GAI1C,IAHA,IAAIyhD,EAAWzhD,EAAM0B,eACjBggD,EAAc,IAAI//D,EAAM,EAAG,EAAG,EAAG,GACjCgyC,EAAOj0C,KAAKg6C,aACPz7C,EAAIwjE,EAASzhE,MAAMkC,IAAKjE,GAAKwjE,EAASp+D,IAAInB,MAAOjE,EAAG,CACzD,IAAI6Q,EAAOpP,KAAKqC,QAAQ9D,GACxByjE,EAAY1hE,MAAMkC,IAAMjE,EACxByjE,EAAYr+D,IAAInB,IAAMjE,EACtB,IAAK,IAAIqhB,EAAI,EAAGA,EAAIq0B,IAAQr0B,EACxB,GAAsB,KAAlBxQ,EAAK1G,OAAOkX,GACZ,MACJA,EAAIq0B,GAA0B,MAAlB7kC,EAAK1G,OAAOkX,IACxBoiD,EAAY1hE,MAAMmC,OAASmd,EAC3BoiD,EAAYr+D,IAAIlB,OAASmd,EAAI,IAG7BoiD,EAAY1hE,MAAMmC,OAAS,EAC3Bu/D,EAAYr+D,IAAIlB,OAASmd,GAE7B5f,KAAKkG,OAAO87D,EAChB,CACJ,EACAlH,EAAYj4D,UAAUo/D,WAAa,SAAUvgD,EAAUC,EAASyrB,GAG5D,GAFA1rB,EAAW1hB,KAAKg3D,gBAAgBt1C,GAChCC,EAAU3hB,KAAK+2D,cAAcp1C,GACzByrB,EAAM,EAAG,CACT,IAAI5qC,EAAMxC,KAAKg3D,gBAAgBt1C,EAAW0rB,GAC1C,GAAI5qC,EAAM,EACN,OAAO,EACX,IAAIitD,EAAOjtD,EAAMkf,CACrB,MACK,GAAI0rB,EAAM,EAAG,CACV5qC,EAAMxC,KAAK+2D,cAAcp1C,EAAUyrB,GACvC,GAAI5qC,EAAMxC,KAAKkE,IAAIm6B,YAAc,EAC7B,OAAO,EACPoxB,EAAOjtD,EAAMmf,CACrB,KACK,CACDD,EAAW1hB,KAAKkiE,mBAAmBxgD,GACnCC,EAAU3hB,KAAKkiE,mBAAmBvgD,GAC9B8tC,EAAO9tC,EAAUD,EAAW,CACpC,CACA,IAAIpB,EAAQ,IAAIre,EAAMyf,EAAU,EAAGC,EAAS+I,OAAO8sB,WAC/C2a,EAAQnyD,KAAKi1D,gBAAgB30C,GAAOhV,KAAI,SAAUiY,GAIlD,OAHAA,EAAIA,EAAExB,QACNwB,EAAEjjB,MAAMkC,KAAOitD,EACflsC,EAAE5f,IAAInB,KAAOitD,EACNlsC,CACX,IACIgK,EAAe,GAAP6f,EACNptC,KAAKkE,IAAI8lD,SAAStoC,EAAUC,GAC5B3hB,KAAKkE,IAAImmD,gBAAgB3oC,EAAUC,GAGzC,OAFA3hB,KAAKkE,IAAIimD,gBAAgBzoC,EAAW+tC,EAAMliC,GAC1C4kC,EAAMxxD,QAAUX,KAAKq2D,SAASlE,GACvB1C,CACX,EACAqL,EAAYj4D,UAAUs/D,YAAc,SAAUzgD,EAAUC,GACpD,OAAO3hB,KAAKiiE,WAAWvgD,EAAUC,GAAU,EAC/C,EACAm5C,EAAYj4D,UAAUu/D,cAAgB,SAAU1gD,EAAUC,GACtD,OAAO3hB,KAAKiiE,WAAWvgD,EAAUC,EAAS,EAC9C,EACAm5C,EAAYj4D,UAAUw/D,eAAiB,SAAU3gD,EAAUC,GACvD,OAAO3hB,KAAKiiE,WAAWvgD,EAAUC,EAAS,EAC9C,EACAm5C,EAAYj4D,UAAUq/D,mBAAqB,SAAU1/D,GACjD,OAAO2J,KAAKC,IAAI,EAAGD,KAAKE,IAAI7J,EAAKxC,KAAKkE,IAAIm6B,YAAc,GAC5D,EACAy8B,EAAYj4D,UAAUy/D,iBAAmB,SAAU9/D,EAAKC,GACpD,OAAIA,EAAS,EACF,EACJ0J,KAAKE,IAAIrM,KAAKkE,IAAI7B,QAAQG,GAAK7B,OAAQ8B,EAClD,EACAq4D,EAAYj4D,UAAUslD,wBAA0B,SAAU3lD,EAAKC,GAE3D,GADAA,EAAS0J,KAAKC,IAAI,EAAG3J,GACjBD,EAAM,EACNA,EAAM,EACNC,EAAS,MAER,CACD,IAAIkJ,EAAM3L,KAAKkE,IAAIm6B,YACf77B,GAAOmJ,GACPnJ,EAAMmJ,EAAM,EACZlJ,EAASzC,KAAKkE,IAAI7B,QAAQsJ,EAAM,GAAGhL,QAGnC8B,EAAS0J,KAAKE,IAAIrM,KAAKkE,IAAI7B,QAAQG,GAAK7B,OAAQ8B,EAExD,CACA,MAAO,CACHD,IAAKA,EACLC,OAAQA,EAEhB,EACAq4D,EAAYj4D,UAAUizD,qBAAuB,SAAUx1C,GAC/CA,EAAMhgB,MAAMkC,IAAM,GAClB8d,EAAMhgB,MAAMkC,IAAM,EAClB8d,EAAMhgB,MAAMmC,OAAS,GAGrB6d,EAAMhgB,MAAMmC,OAASzC,KAAKsiE,iBAAiBhiD,EAAMhgB,MAAMkC,IAAK8d,EAAMhgB,MAAMmC,QAE5E,IAAIkJ,EAAM3L,KAAKkE,IAAIm6B,YAAc,EAQjC,OAPI/d,EAAM3c,IAAInB,IAAMmJ,GAChB2U,EAAM3c,IAAInB,IAAMmJ,EAChB2U,EAAM3c,IAAIlB,OAASzC,KAAKkE,IAAI7B,QAAQsJ,GAAKhL,QAGzC2f,EAAM3c,IAAIlB,OAASzC,KAAKsiE,iBAAiBhiD,EAAM3c,IAAInB,IAAK8d,EAAM3c,IAAIlB,QAE/D6d,CACX,EACAw6C,EAAYj4D,UAAU0/D,eAAiB,SAAUC,GAC7C,GAAIA,GAAexiE,KAAK4zC,aAAc,CAIlC,GAHA5zC,KAAK4zC,aAAe4uB,EACpBxiE,KAAKo2D,WAAY,EACjBp2D,KAAK27D,eAAe,GAChB6G,EAAa,CACb,IAAI72D,EAAM3L,KAAKq+B,YACfr+B,KAAK8zC,UAAYtoC,MAAMG,GACvB3L,KAAKk2D,gBAAgB,EAAGvqD,EAAM,EAClC,CACA3L,KAAKmZ,QAAQ,iBACjB,CACJ,EACA2hD,EAAYj4D,UAAU8oC,eAAiB,WACnC,OAAO3rC,KAAK4zC,YAChB,EACAknB,EAAYj4D,UAAU4/D,kBAAoB,SAAUp2D,EAAKD,GACjDpM,KAAK0iE,gBAAgBr2D,MAAQA,GAAOrM,KAAK0iE,gBAAgBt2D,MAAQA,IACjEpM,KAAK0iE,gBAAkB,CAAEr2D,IAAKA,EAAKD,IAAKA,GACxCpM,KAAKo2D,WAAY,EACjBp2D,KAAKm1C,aAAab,cACdt0C,KAAK4zC,cACL5zC,KAAKmZ,QAAQ,kBAEzB,EACA2hD,EAAYj4D,UAAU8/D,gBAAkB,SAAUC,EAAcC,GAC5D,IAAIC,EAAS9iE,KAAK0iE,gBACdI,EAAO12D,IAAM,IACb02D,EAAS,CAAEz2D,IAAKw2D,EAAcz2D,IAAKy2D,IACvC,IAAIE,EAAY/iE,KAAKgjE,oBAAoBJ,EAAcE,EAAOz2D,IAAKy2D,EAAO12D,KAC1E,OAAI22D,GAAa/iE,KAAK6gE,YAAckC,EAAY,IAC5C/iE,KAAK6gE,WAAakC,EAClB/iE,KAAKo2D,WAAY,EACbp2D,KAAK4zC,eACL5zC,KAAKk2D,gBAAgB,EAAGl2D,KAAKq+B,YAAc,GAC3Cr+B,KAAK27D,eAAe,GACpB37D,KAAKmZ,QAAQ,qBAEV,EAGf,EACA2hD,EAAYj4D,UAAUmgE,oBAAsB,SAAUD,EAAW12D,EAAKD,GAKlE,OAJIC,IACA02D,EAAY52D,KAAKC,IAAIC,EAAK02D,IAC1B32D,IACA22D,EAAY52D,KAAKE,IAAID,EAAK22D,IACvBA,CACX,EACAjI,EAAYj4D,UAAUogE,aAAe,WACjC,OAAOjjE,KAAK6gE,UAChB,EACA/F,EAAYj4D,UAAUqgE,aAAe,SAAUC,GAC3CnjE,KAAKyiE,kBAAkBU,EAAOA,EAClC,EACArI,EAAYj4D,UAAUugE,kBAAoB,WACtC,MAAO,CACH/2D,IAAKrM,KAAK0iE,gBAAgBr2D,IAC1BD,IAAKpM,KAAK0iE,gBAAgBt2D,IAElC,EACA0uD,EAAYj4D,UAAUo5D,4BAA8B,SAAUhpB,GAC1D,IAAIuvB,EAAcxiE,KAAK4zC,aACnBhM,EAASqL,EAAMrL,OACftnC,EAAQ2yC,EAAM3yC,MACdqD,EAAMsvC,EAAMtvC,IACZ+d,EAAWphB,EAAMkC,IACjBmf,EAAUhe,EAAInB,IACdmJ,EAAMgW,EAAUD,EAChBs6C,EAAe,KAEnB,GADAh8D,KAAKs2D,WAAY,EACN,GAAP3qD,EACA,GAAe,WAAXi8B,EAAqB,CACrB5nC,KAAKwiE,EAAc,YAAc,mBAAmB30D,OAAO6T,EAAU/V,GACrE,IAAIupD,EAAYl1D,KAAKm1D,UACrB6G,EAAeh8D,KAAKi1D,gBAAgBhiB,GACpCjzC,KAAKi2D,YAAY+F,GACjB,IAAItiB,EAAW15C,KAAKkgC,YAAYv8B,EAAInB,KAChC4wD,EAAM,EACV,GAAI1Z,EAAU,CACVA,EAASoZ,eAAenvD,EAAInB,IAAKmB,EAAIlB,OAAQnC,EAAMmC,OAASkB,EAAIlB,QAChEi3C,EAAS2Y,UAAU1mD,GACnB,IAAI03D,EAAiBrjE,KAAKkgC,YAAYxe,GAClC2hD,GAAkBA,IAAmB3pB,IACrC2pB,EAAexkB,MAAMnF,GACrBA,EAAW2pB,GAEfjQ,EAAM8B,EAAU1sD,QAAQkxC,GAAY,CACxC,CACA,IAAK0Z,EAAKA,EAAM8B,EAAUv0D,OAAQyyD,IAAO,CACjC1Z,EAAWwb,EAAU9B,GACrB1Z,EAASp5C,MAAMkC,KAAOmB,EAAInB,KAC1Bk3C,EAAS2Y,UAAU1mD,EAE3B,CACAgW,EAAUD,CACd,KACK,CACD,IAAIyrB,EAAO3hC,MAAMG,GACjBwhC,EAAKvsC,QAAQ8gB,EAAU,GACvB,IAAIlU,EAAMg1D,EAAcxiE,KAAK8zC,UAAY9zC,KAAK+7D,gBAC9CvuD,EAAIK,OAAOpG,MAAM+F,EAAK2/B,GAClB+nB,EAAYl1D,KAAKm1D,UACjBzb,EAAW15C,KAAKkgC,YAAYxe,GAC5B0xC,EAAM,EACV,GAAI1Z,EAAU,CACV,IAAIh5B,EAAMg5B,EAASp5B,MAAMkB,cAAclhB,EAAMkC,IAAKlC,EAAMmC,QAC7C,GAAPie,GACAg5B,EAAWA,EAAS54C,MAAMR,EAAMkC,IAAKlC,EAAMmC,QACvCi3C,IACAA,EAAS2Y,SAAS1mD,GAClB+tC,EAASoZ,eAAenxC,EAAS,EAAGhe,EAAIlB,OAASnC,EAAMmC,WAInD,GAARie,IACAg5B,EAASoZ,eAAepxC,EAAU,EAAG/d,EAAIlB,OAASnC,EAAMmC,QACxDi3C,EAAS2Y,SAAS1mD,IAEtBynD,EAAM8B,EAAU1sD,QAAQkxC,GAAY,CACxC,CACA,IAAK0Z,EAAKA,EAAM8B,EAAUv0D,OAAQyyD,IAAO,CACjC1Z,EAAWwb,EAAU9B,GACrB1Z,EAASp5C,MAAMkC,KAAOkf,GACtBg4B,EAAS2Y,SAAS1mD,EAE1B,CACJ,KAEC,CACDA,EAAMQ,KAAKua,IAAIusB,EAAM3yC,MAAMmC,OAASwwC,EAAMtvC,IAAIlB,QAC/B,WAAXmlC,IACAo0B,EAAeh8D,KAAKi1D,gBAAgBhiB,GACpCjzC,KAAKi2D,YAAY+F,GACjBrwD,GAAOA,GAEP+tC,EAAW15C,KAAKkgC,YAAYxe,GAC5Bg4B,GACAA,EAASoZ,eAAepxC,EAAUphB,EAAMmC,OAAQkJ,EAExD,CASA,OARI62D,GAAexiE,KAAK8zC,UAAUnzC,QAAUX,KAAKkE,IAAIm6B,aACjD32B,QAAQC,MAAM,6DAElB3H,KAAKs2D,WAAY,EACbkM,EACAxiE,KAAKk2D,gBAAgBx0C,EAAUC,GAE/B3hB,KAAKm2D,sBAAsBz0C,EAAUC,GAClCq6C,CACX,EACAlB,EAAYj4D,UAAUszD,sBAAwB,SAAUz0C,EAAUC,GAC9D3hB,KAAK+7D,gBAAgBr6C,GAAY,KACjC1hB,KAAK+7D,gBAAgBp6C,GAAW,IACpC,EACAm5C,EAAYj4D,UAAUqzD,gBAAkB,SAAUx0C,EAAUC,GACxD,IAII5b,EACA2zC,EALAnsB,EAAQvtB,KAAKkE,IAAIqlD,cACjBzP,EAAU95C,KAAKg6C,aACfspB,EAAWtjE,KAAK8zC,UAChBivB,EAAY/iE,KAAK6gE,WAGjBr+D,EAAMkf,EACVC,EAAUxV,KAAKE,IAAIsV,EAAS4L,EAAM5sB,OAAS,GAC3C,MAAO6B,GAAOmf,EACV+3B,EAAW15C,KAAKkgC,YAAY19B,EAAKk3C,GAC5BA,GAMD3zC,EAAS,GACT2zC,EAAS8Y,KAAK,SAAUG,EAAanwD,EAAKC,EAAQ00D,GAC9C,IAAIoM,EACJ,GAAmB,MAAf5Q,EAAqB,CACrB4Q,EAAavjE,KAAKwjE,kBAAkB7Q,EAAa5sD,EAAOpF,QACxD4iE,EAAW,GAAKE,EAChB,IAAK,IAAIllE,EAAI,EAAGA,EAAIglE,EAAW5iE,OAAQpC,IACnCglE,EAAWhlE,GAAKmlE,CAExB,MAEIH,EAAavjE,KAAKwjE,kBAAkBj2C,EAAM/qB,GAAKwxC,UAAUmjB,EAAY10D,GAASsD,EAAOpF,QAEzFoF,EAASA,EAAOy6B,OAAO+iC,EAC3B,EAAE96C,KAAKzoB,MAAO05C,EAAS/1C,IAAInB,IAAK+qB,EAAMmsB,EAAS/1C,IAAInB,KAAK7B,OAAS,GACjE2iE,EAAS5pB,EAASp5C,MAAMkC,KAAOxC,KAAK2jE,mBAAmB59D,EAAQg9D,EAAWjpB,GAC1Et3C,EAAMk3C,EAAS/1C,IAAInB,IAAM,IArBzBuD,EAAS/F,KAAKwjE,kBAAkBj2C,EAAM/qB,IACtC8gE,EAAS9gE,GAAOxC,KAAK2jE,mBAAmB59D,EAAQg9D,EAAWjpB,GAC3Dt3C,IAsBZ,EACAs4D,EAAYj4D,UAAU8gE,mBAAqB,SAAU59D,EAAQg9D,EAAWjpB,GACpE,GAAqB,GAAjB/zC,EAAOpF,OACP,MAAO,GAEX,IAAIkzC,EAAS,GACT+vB,EAAgB79D,EAAOpF,OACvBkjE,EAAY,EAAGC,EAAe,EAC9BC,EAAS/jE,KAAKgkE,YACdC,EAAmBjkE,KAAKkkE,kBACxBC,EAAYpB,GAAa52D,KAAKC,IAAI,EAAI0tC,EAAS,KACvB,IAArBmqB,EAA6B,EAAI93D,KAAKg6C,MAAM4c,EAAY,GAC/D,SAASqB,IACL,IAAIC,EAAc,EAClB,GAAkB,IAAdF,EACA,OAAOE,EACX,GAAIJ,EACA,IAAK,IAAI1lE,EAAI,EAAGA,EAAIwH,EAAOpF,OAAQpC,IAAK,CACpC,IAAII,EAAQoH,EAAOxH,GACnB,GAAII,GAAS2lE,EACTD,GAAe,MACd,IAAI1lE,GAAS4lE,EAEb,IAAI5lE,GAAS6lE,EACd,SAEA,KAAK,CAJLH,GAAevqB,CAIV,CACb,CAIJ,OAFIiqB,IAA+B,IAArBE,IACVI,GAAevqB,GACZ3tC,KAAKE,IAAIg4D,EAAaF,EACjC,CACA,SAASM,EAASxoC,GAEd,IADA,IAAItwB,EAAMswB,EAAY4nC,EACbtlE,EAAIslE,EAAWtlE,EAAI09B,EAAW19B,IAAK,CACxC,IAAI2T,EAAKnM,EAAOxH,GACL,KAAP2T,GAAoB,IAAPA,IACbvG,GAAO,EACf,CACKkoC,EAAOlzC,SACRozC,EAASqwB,IACTvwB,EAAOE,OAASA,GAEpB+vB,GAAgBn4D,EAChBkoC,EAAOrzC,KAAKsjE,GACZD,EAAY5nC,CAChB,CACA,IAAI8X,EAAS,EACb,MAAO6vB,EAAgBC,EAAYd,EAAYhvB,EAAQ,CACnD,IAAIjzC,EAAQ+iE,EAAYd,EAAYhvB,EACpC,GAAIhuC,EAAOjF,EAAQ,IAAMwjE,GAASv+D,EAAOjF,IAAUwjE,EAC/CG,EAAS3jE,QAGb,GAAIiF,EAAOjF,IAAU2iE,GAAqB19D,EAAOjF,IAAU4iE,EAA3D,CAsBA,IAAIgB,EAAWv4D,KAAKC,IAAItL,GAASiiE,GAAaA,GAAa,IAAKc,EAAY,GAC5E,MAAO/iE,EAAQ4jE,GAAY3+D,EAAOjF,GAAS2iE,EACvC3iE,IAEJ,GAAIijE,EAAQ,CACR,MAAOjjE,EAAQ4jE,GAAY3+D,EAAOjF,GAAS2iE,EACvC3iE,IAEJ,MAAOA,EAAQ4jE,GAAY3+D,EAAOjF,IAAU6jE,EACxC7jE,GAER,MAEI,MAAOA,EAAQ4jE,GAAY3+D,EAAOjF,GAASwjE,EACvCxjE,IAGJA,EAAQ4jE,EACRD,IAAW3jE,IAGfA,EAAQ+iE,EAAYd,EAChBh9D,EAAOjF,IAAU8jE,GACjB9jE,IACJ2jE,EAAS3jE,EAAQizC,GAzBjB,KArBA,CACI,IAAKjzC,EAAOA,GAAS+iE,EAAY,EAAG/iE,IAChC,GAAIiF,EAAOjF,IAAU2iE,EACjB,MAGR,GAAI3iE,EAAQ+iE,EAAW,CACnBY,EAAS3jE,GACT,QACJ,CAEA,IADAA,EAAQ+iE,EAAYd,EACfjiE,EAAOA,EAAQiF,EAAOpF,OAAQG,IAC/B,GAAIiF,EAAOjF,IAAU4iE,EACjB,MAGR,GAAI5iE,GAASiF,EAAOpF,OAChB,MAEJ8jE,EAAS3jE,EAEb,CA0BJ,CACA,OAAO+yC,CACX,EACAinB,EAAYj4D,UAAU2gE,kBAAoB,SAAU54D,EAAKuD,GACrD,IACI2rC,EADAtsC,EAAM,GAEVW,EAASA,GAAU,EACnB,IAAK,IAAI5P,EAAI,EAAGA,EAAIqM,EAAIjK,OAAQpC,IAAK,CACjC,IAAIkB,EAAImL,EAAI+lC,WAAWpyC,GACvB,GAAS,GAALkB,EAAQ,CACRq6C,EAAU95C,KAAKm0C,iBAAiB3mC,EAAI7M,OAASwN,GAC7CX,EAAIhN,KAAK+jE,GACT,IAAK,IAAIlmE,EAAI,EAAGA,EAAIy7C,EAASz7C,IACzBmP,EAAIhN,KAAKgkE,EAEjB,MACc,IAAL/kE,EACL+N,EAAIhN,KAAK8jE,GAEH7kE,EAAI,IAAMA,EAAI,IAAQA,EAAI,IAAMA,EAAI,GAC1C+N,EAAIhN,KAAKmkE,GAEJllE,GAAK,MAAUy0C,EAAYz0C,GAChC+N,EAAIhN,KAAKqkE,EAAMD,GAGfp3D,EAAIhN,KAAKqkE,EAEjB,CACA,OAAOr3D,CACX,EACAstD,EAAYj4D,UAAUo+D,sBAAwB,SAAUr2D,EAAKk6D,EAAiBC,GAC1E,GAAuB,GAAnBD,EACA,MAAO,CAAC,EAAG,GAIf,IAAIrlE,EAAGgD,EACP,IAJuB,MAAnBqiE,IACAA,EAAkB5f,KACtB6f,EAAeA,GAAgB,EAE1BtiE,EAAS,EAAGA,EAASmI,EAAIjK,OAAQ8B,IAWlC,GAVAhD,EAAImL,EAAI+lC,WAAWluC,GACV,GAALhD,EACAslE,GAAgB/kE,KAAKm0C,iBAAiB4wB,GAEjCtlE,GAAK,MAAUy0C,EAAYz0C,GAChCslE,GAAgB,EAGhBA,GAAgB,EAEhBA,EAAeD,EACf,MAGR,MAAO,CAACC,EAActiE,EAC1B,EACAq4D,EAAYj4D,UAAUmiE,aAAe,SAAUxiE,GAC3C,IAAI7C,EAAI,EAGR,OAFIK,KAAK07C,cACL/7C,GAAKK,KAAK07C,YAAYl5C,IAAQxC,KAAK07C,YAAYl5C,GAAKq5C,UAAY,GAC/D77C,KAAK4zC,cAAiB5zC,KAAK8zC,UAAUtxC,GAG/BxC,KAAK8zC,UAAUtxC,GAAK7B,OAAShB,EAF7BA,CAGf,EACAm7D,EAAYj4D,UAAUoiE,gBAAkB,SAAUziE,GAC9C,OAAKxC,KAAK4zC,cAAiB5zC,KAAK8zC,UAAUtxC,GAI/BxC,KAAK8zC,UAAUtxC,GAAK7B,OAAS,EAH7B,CAKf,EACAm6D,EAAYj4D,UAAUqiE,iBAAmB,SAAU5mC,GAC/C,GAAIt+B,KAAK4zC,aAAc,CACnB,IAAI7f,EAAM/zB,KAAKm6C,yBAAyB7b,EAAW5T,OAAO8sB,WACtD3D,EAAS7zC,KAAK8zC,UAAU/f,EAAIvxB,KAChC,OAAOqxC,EAAOlzC,QAAUkzC,EAAO,GAAK9f,EAAItxB,OAASoxC,EAAOE,OAAS,CACrE,CAEI,OAAO,CAEf,EACA+mB,EAAYj4D,UAAUsiE,uBAAyB,SAAU7mC,GACrD,IAAIvK,EAAM/zB,KAAKm6C,yBAAyB7b,EAAW5T,OAAO8sB,WAC1D,OAAOx3C,KAAKolE,uBAAuBrxC,EAAIvxB,IAAKuxB,EAAItxB,OACpD,EACAq4D,EAAYj4D,UAAUwiE,yBAA2B,SAAUzyB,EAAQ0yB,GAC/D,IAAIhnC,EAAYt+B,KAAKw+B,oBAAoBoU,EAAQ0yB,GACjD,OAAOtlE,KAAKmlE,uBAAuB7mC,EACvC,EACAw8B,EAAYj4D,UAAU43C,iCAAmC,SAAU7H,EAAQ0yB,GACvE,IAAIhnC,EAAYt+B,KAAKw+B,oBAAoBoU,EAAQ0yB,GACjD,OAAOtlE,KAAKm6C,yBAAyB7b,EAAW5T,OAAO8sB,UAAY,GACvE,EACAsjB,EAAYj4D,UAAU0iE,gBAAkB,SAAU/iE,GAC9C,OAAKxC,KAAK4zC,aAIC5zC,KAAK8zC,UAAUtxC,QAHtB,CAKR,EACAs4D,EAAYj4D,UAAUsxC,iBAAmB,SAAU4wB,GAC/C,OAAO/kE,KAAK09D,UAAYqH,EAAe/kE,KAAK09D,SAAW,EAC3D,EACA5C,EAAYj4D,UAAU2iE,oBAAsB,SAAUlnC,EAAWymC,GAC7D,OAAO/kE,KAAKm6C,yBAAyB7b,EAAWymC,GAAcviE,GAClE,EACAs4D,EAAYj4D,UAAU4iE,uBAAyB,SAAUnnC,EAAWymC,GAChE,OAAO/kE,KAAKm6C,yBAAyB7b,EAAWymC,GAActiE,MAClE,EACAq4D,EAAYj4D,UAAUs3C,yBAA2B,SAAU7b,EAAWymC,EAActpB,GAChF,GAAInd,EAAY,EACZ,MAAO,CAAE97B,IAAK,EAAGC,OAAQ,GAC7B,IAAI2M,EAGA3M,EAFAmwC,EAAS,EACT0yB,EAAY,EAEZ9iE,EAAM,EACNkjE,EAAY,EACZvyB,EAAWnzC,KAAKozC,gBAChB70C,EAAIyB,KAAKqzC,kBAAkBF,EAAU7U,GACrC/+B,EAAI4zC,EAASxyC,OACjB,GAAIpB,GAAKhB,GAAK,EACV,CAAIiE,EAAM2wC,EAAS50C,GACfq0C,EAAS5yC,KAAKszC,aAAa/0C,GAD/B,IAEIonE,EAAUrnC,EAAY6U,EAAS5zC,EAAI,EAFlB,MAKjBomE,GAAWpmE,EAEnB,IAAI6+B,EAASp+B,KAAKq+B,YAAc,EAC5Bqb,EAAW15C,KAAK01D,gBAAgB9iB,GAChCouB,EAAYtnB,EAAWA,EAASp5C,MAAMkC,IAAM0iD,IAChD,MAAO1iD,GAAO87B,EAAW,CAErB,GADAonC,EAAY1lE,KAAKglE,aAAapyB,GAC1BpwC,EAAMkjE,EAAYpnC,GAAasU,GAAUxU,EACzC,MAGA57B,GAAOkjE,EACP9yB,IACIA,EAASouB,IACTpuB,EAAS8G,EAAS/1C,IAAInB,IAAM,EAC5Bk3C,EAAW15C,KAAK01D,gBAAgB9iB,EAAQ8G,GACxCsnB,EAAYtnB,EAAWA,EAASp5C,MAAMkC,IAAM0iD,KAGhDygB,IACA3lE,KAAKszC,aAAa9yC,KAAKoyC,GACvB5yC,KAAKozC,gBAAgB5yC,KAAKgC,GAElC,CACA,GAAIk3C,GAAYA,EAASp5C,MAAMkC,KAAOowC,EAClCxjC,EAAOpP,KAAKi3D,mBAAmBvd,GAC/B9G,EAAS8G,EAASp5C,MAAMkC,QAEvB,IAAIA,EAAMkjE,GAAapnC,GAAasU,EAASxU,EAC9C,MAAO,CACH57B,IAAK47B,EACL37B,OAAQzC,KAAKqC,QAAQ+7B,GAAQz9B,QAIjCyO,EAAOpP,KAAKqC,QAAQuwC,GACpB8G,EAAW,IACf,CACA,IAAIxH,EAAa,EAAGW,EAAa1mC,KAAKg6C,MAAM7nB,EAAY97B,GACxD,GAAIxC,KAAK4zC,aAAc,CACnB,IAAIC,EAAS7zC,KAAK8zC,UAAUlB,GACxBiB,IACApxC,EAASoxC,EAAOhB,GACZA,EAAa,GAAKgB,EAAOlzC,SACzBuxC,EAAa2B,EAAOE,OACpBuxB,EAAYzxB,EAAOhB,EAAa,IAAMgB,EAAOA,EAAOlzC,OAAS,GAC7DyO,EAAOA,EAAK4kC,UAAUsxB,IAGlC,CAMA,YALgBl/D,IAAZq1C,GAAyBz7C,KAAKm1C,aAAaxC,UAAUnwC,EAAMqwC,EAAYD,EAAQC,KAC/EkyB,EAAe/kE,KAAKm1C,aAAakB,YAAYoF,IACjD6pB,GAAatlE,KAAKihE,sBAAsB7xD,EAAM21D,EAAe7yB,GAAY,GACrElyC,KAAK4zC,cAAgB0xB,GAAa7iE,IAClC6iE,EAAY7iE,EAAS,GACrBi3C,EACOA,EAASyZ,cAAcmS,GAC3B,CAAE9iE,IAAKowC,EAAQnwC,OAAQ6iE,EAClC,EACAxK,EAAYj4D,UAAUuf,yBAA2B,SAAUwwB,EAAQ0yB,GAC/D,GAAyB,qBAAdA,EACP,IAAIvxC,EAAM/zB,KAAKmoD,wBAA0C,EAAS3lD,IAAuB,EAASC,aAElGsxB,EAAM/zB,KAAKmoD,wBAA2C,EAAUmd,GACpE1yB,EAAS7e,EAAIvxB,IACb8iE,EAAYvxC,EAAItxB,OAChB,IAAI67B,EAAY,EACZsnC,EAAe,KACf3lC,EAAO,KACXA,EAAOjgC,KAAKwrC,UAAUoH,EAAQ0yB,EAAW,GACrCrlC,IACA2S,EAAS3S,EAAK3/B,MAAMkC,IACpB8iE,EAAYrlC,EAAK3/B,MAAMmC,QAE3B,IAAImoB,EAAQpoB,EAAM,EACd2wC,EAAWnzC,KAAKszC,aAChB/0C,EAAIyB,KAAKqzC,kBAAkBF,EAAUP,GACrCrzC,EAAI4zC,EAASxyC,OACjB,GAAIpB,GAAKhB,GAAK,EACV,CAAIiE,EAAM2wC,EAAS50C,GACf+/B,EAAYt+B,KAAKozC,gBAAgB70C,GADrC,IAEIonE,EAAU/yB,EAASO,EAAS5zC,EAAI,EAFf,MAKjBomE,GAAWpmE,EAEnB,IAAIm6C,EAAW15C,KAAK01D,gBAAgBlzD,GAChCw+D,EAAYtnB,EAAWA,EAASp5C,MAAMkC,IAAM0iD,IAChD,MAAO1iD,EAAMowC,EAAQ,CACjB,GAAIpwC,GAAOw+D,EAAW,CAElB,GADAp2C,EAAS8uB,EAAS/1C,IAAInB,IAAM,EACxBooB,EAASgoB,EACT,MACJ8G,EAAW15C,KAAK01D,gBAAgB9qC,EAAQ8uB,GACxCsnB,EAAYtnB,EAAWA,EAASp5C,MAAMkC,IAAM0iD,GAChD,MAEIt6B,EAASpoB,EAAM,EAEnB87B,GAAat+B,KAAKglE,aAAaxiE,GAC/BA,EAAMooB,EACF+6C,IACA3lE,KAAKszC,aAAa9yC,KAAKgC,GACvBxC,KAAKozC,gBAAgB5yC,KAAK89B,GAElC,CACA,IAAI44B,EAAW,GACXxd,GAAYl3C,GAAOw+D,GACnB9J,EAAWl3D,KAAKi3D,mBAAmBvd,EAAU9G,EAAQ0yB,GACrDM,EAAelsB,EAASp5C,MAAMkC,MAG9B00D,EAAWl3D,KAAKqC,QAAQuwC,GAAQoB,UAAU,EAAGsxB,GAC7CM,EAAehzB,GAEnB,IAAIV,EAAa,EACjB,GAAIlyC,KAAK4zC,aAAc,CACnB,IAAIiyB,EAAU7lE,KAAK8zC,UAAU8xB,GAC7B,GAAIC,EAAS,CACT,IAAIC,EAAkB,EACtB,MAAO5O,EAASv2D,QAAUklE,EAAQC,GAC9BxnC,IACAwnC,IAEJ5O,EAAWA,EAASljB,UAAU6xB,EAAQC,EAAkB,IAAM,EAAG5O,EAASv2D,QAC1EuxC,EAAa4zB,EAAkB,EAAID,EAAQ9xB,OAAS,CACxD,CACJ,CAGA,OAFI/zC,KAAK07C,aAAe17C,KAAK07C,YAAYl5C,IAAQxC,KAAK07C,YAAYl5C,GAAKo5C,YACnEtd,GAAat+B,KAAK07C,YAAYl5C,GAAKo5C,WAChC,CACHp5C,IAAK87B,EACL77B,OAAQyvC,EAAalyC,KAAKihE,sBAAsB/J,GAAU,GAElE,EACA4D,EAAYj4D,UAAUuiE,uBAAyB,SAAU5iE,EAAK8iE,GAC1D,OAAOtlE,KAAKoiB,yBAAyB5f,EAAK8iE,GAAW7iE,MACzD,EACAq4D,EAAYj4D,UAAU27B,oBAAsB,SAAUoU,EAAQ0yB,GAC1D,OAAOtlE,KAAKoiB,yBAAyBwwB,EAAQ0yB,GAAW9iE,GAC5D,EACAs4D,EAAYj4D,UAAUkjE,gBAAkB,WACpC,IAAIC,EAAa,EACb/lC,EAAO,KACX,GAAKjgC,KAAK4zC,aAQL,CACD,IAAIjyB,EAAU3hB,KAAK8zC,UAAUnzC,OACzB6B,EAAM,EAENw+D,GAFSziE,EAAI,EACb0hC,EAAOjgC,KAAKm1D,UAAU52D,KACV0hC,EAAOA,EAAK3/B,MAAMkC,IAAM0iD,KACxC,MAAO1iD,EAAMmf,EAAS,CAClB,IAAIkyB,EAAS7zC,KAAK8zC,UAAUtxC,GAC5BwjE,GAAcnyB,EAASA,EAAOlzC,OAAS,EAAI,EAC3C6B,IACIA,EAAMw+D,IACNx+D,EAAMy9B,EAAKt8B,IAAInB,IAAM,EACrBy9B,EAAOjgC,KAAKm1D,UAAU52D,KACtByiE,EAAY/gC,EAAOA,EAAK3/B,MAAMkC,IAAM0iD,IAE5C,CACJ,KAvBwB,CACpB8gB,EAAahmE,KAAKq+B,YAElB,IADA,IAAI6zB,EAAWlyD,KAAKm1D,UACX52D,EAAI,EAAGA,EAAI2zD,EAASvxD,OAAQpC,IACjC0hC,EAAOiyB,EAAS3zD,GAChBynE,GAAc/lC,EAAKt8B,IAAInB,IAAMy9B,EAAK3/B,MAAMkC,GAEhD,CAmBA,OAFIxC,KAAK07C,cACLsqB,GAAchmE,KAAKimE,0BAChBD,CACX,EACAlL,EAAYj4D,UAAUqjE,gBAAkB,SAAUC,GACzCnmE,KAAKomE,iBAEVpmE,KAAKihE,sBAAwB,SAAUr2D,EAAKk6D,EAAiBC,GACzD,GAAwB,IAApBD,EACA,MAAO,CAAC,EAAG,GAIf,IAAIrlE,EAAGgD,EACP,IAJKqiE,IACDA,EAAkB5f,KACtB6f,EAAeA,GAAgB,EAE1BtiE,EAAS,EAAGA,EAASmI,EAAIjK,OAAQ8B,IAQlC,GAPAhD,EAAImL,EAAIlC,OAAOjG,GAEXsiE,GADM,OAANtlE,EACgBO,KAAKm0C,iBAAiB4wB,GAGtBoB,EAAGE,kBAAkB5mE,GAErCslE,EAAeD,EACf,MAGR,MAAO,CAACC,EAActiE,EAC1B,EACJ,EACAq4D,EAAYj4D,UAAUwhB,QAAU,WACvBrkB,KAAKy7D,YACNz7D,KAAKs7D,YAAY9O,YAAY,MAC7BxsD,KAAKs7D,YAAYzO,UACjB7sD,KAAKy7D,WAAY,GAErBz7D,KAAK6/D,cACL7/D,KAAKqa,qBACDra,KAAKkE,KACLlE,KAAKkE,IAAIqV,IAAI,SAAUvZ,KAAKkoD,WAEhCloD,KAAKqG,UAAUwmC,QACnB,EACOiuB,CACX,CAn6CgC,GAo6ChCA,EAAYO,KAAO,EACnBP,EAAYj4D,UAAUua,OAAS6B,EAAO7B,OACtC09C,EAAYj4D,UAAU6vC,SAAWooB,EAAYj4D,UAAUqF,SACvD4yD,EAAYj4D,UAAUw6D,oBAAsB,CACxCrO,KAAM,WAAc,EACpBQ,KAAM,WAAc,EACpBhoB,QAAS,WAAc,EACvBgpB,QAAS,WAAc,EACvB3C,MAAO,WAAc,EACrBj6C,IAAK,WAAc,EACnB06C,aAAc,WAAc,EAC5BE,cAAe,WAAc,EAC7BV,WAAY,WAAc,GAE9BgN,EAAYj4D,UAAUm7D,YAAa,EACnClD,EAAYj4D,UAAUwgD,MAAQ,KAC9ByX,EAAYj4D,UAAU68D,QAAU,KAChC5E,EAAYj4D,UAAUq6D,WAAa,EACnCpC,EAAYj4D,UAAUo6D,YAAc,EACpCnC,EAAYj4D,UAAUg+D,WAAa,GACnC/F,EAAYj4D,UAAU+wC,cAAe,EACrCknB,EAAYj4D,UAAU6/D,gBAAkB,CACpCr2D,IAAK,KACLD,IAAK,MAET0uD,EAAYj4D,UAAU64C,YAAc,KACpCof,EAAYj4D,UAAUqxC,YAAcA,EACpCv5B,EAAItC,UAAUyiD,EAAYj4D,UAAW0V,GACrC,IAAIssD,EAAO,EAAGD,EAAW,EAAGnB,EAAoB,EAAGC,EAAmB,EAAGiB,EAAc,EAAGL,EAAQ,GAAIC,EAAM,GAAIC,EAAY,GAC5H,SAAStwB,EAAYz0C,GACjB,QAAIA,EAAI,QAEDA,GAAK,MAAUA,GAAK,MACvBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,MAC5B,CACAgH,EAAQ,0BAA0BsuD,QAAQnyD,KAAKk4D,EAAYj4D,WAC3D4D,EAAQ,gCAAgCqyD,aAAal2D,KAAKk4D,EAAYj4D,WACtEoc,EAAOnD,cAAcg/C,EAAYj4D,UAAW,UAAW,CACnDyjE,KAAM,CACF5qD,IAAK,SAAUza,GASX,GARKA,GAAkB,OAATA,EAEI,QAATA,EACLA,GAAQ,EACM,eAATA,EACLA,GAAS,EACY,iBAATA,IACZA,EAAQ+hB,SAAS/hB,EAAO,MAAO,GAN/BA,GAAQ,EAORjB,KAAKumE,OAAStlE,EAGlB,GADAjB,KAAKumE,MAAQtlE,EACRA,EAGA,CACD,IAAIq0C,EAAsB,iBAATr0C,EAAoBA,EAAQ,KAC7CjB,KAAKyiE,kBAAkBntB,EAAKA,GAC5Bt1C,KAAKuiE,gBAAe,EACxB,MANIviE,KAAKuiE,gBAAe,EAO5B,EACAvrD,IAAK,WACD,OAAIhX,KAAK2rC,kBACc,GAAf3rC,KAAKumE,MACE,cACNvmE,KAAKojE,oBAAoB/2D,IAEvBrM,KAAKumE,MADD,OAGR,KACX,EACA9qD,YAAY,GAEhBukD,WAAY,CACRtkD,IAAK,SAAUhS,GACXA,EAAa,QAAPA,EACmB,QAAnB1J,KAAKqjD,MAAMriD,KACJ,QAAP0I,EACFA,GAAO1J,KAAKgkE,cACZhkE,KAAKgkE,YAAct6D,EACf1J,KAAK4zC,eACL5zC,KAAK4zC,cAAe,EACpB5zC,KAAKuiE,gBAAe,IAGhC,EACAxmD,aAAc,QAElBkoD,iBAAkB,CACdvoD,IAAK,WACG1b,KAAK4zC,eACL5zC,KAAK4zC,cAAe,EACpB5zC,KAAKuiE,gBAAe,GAE5B,EACAxmD,cAAc,GAElByqD,gBAAiB,CACb9qD,IAAK,WAAc1b,KAAKmZ,QAAQ,mBAAqB,EACrD4C,aAAc,GAElBsjD,UAAW,CACP3jD,IAAK,SAAU2jD,GACXr/D,KAAKu/D,WAAaF,EAClBr/D,KAAK6/D,cACDR,GACAr/D,KAAK8/D,cACb,EACA/jD,cAAc,GAElB0qD,YAAa,CAAE1qD,cAAc,GAC7B+9B,QAAS,CACLp+B,IAAK,SAAUo+B,GACXA,EAAU92B,SAAS82B,GACfA,EAAU,GAAK95C,KAAK09D,WAAa5jB,IACjC95C,KAAKo2D,WAAY,EACjBp2D,KAAK+7D,gBAAkB,GACvB/7D,KAAK09D,SAAW5jB,EAChB95C,KAAKmZ,QAAQ,iBAErB,EACA4C,aAAc,EACdN,YAAY,GAEhBmiD,uBAAwB,CAAE7hD,cAAc,GACxC2qD,UAAW,CACPhrD,IAAK,SAAUhS,GAAO1J,KAAK+3D,aAAaruD,EAAM,EAC9C+R,YAAY,GAEhBsiD,UAAW,CACPriD,IAAK,SAAUhS,GAAO1J,KAAKmZ,QAAQ,kBAAoB,EACvD4C,cAAc,GAElB8tC,YAAa,CACTnuC,IAAK,SAAUhS,GAAO1J,KAAKkE,IAAI0lD,eAAelgD,EAAM,EACpDsN,IAAK,WAAc,OAAOhX,KAAKkE,IAAI4lD,gBAAkB,EACrDruC,YAAY,GAEhBwrB,KAAM,CACFvrB,IAAK,SAAUhS,GAAO1J,KAAKw7D,QAAQ9xD,EAAM,EACzCsN,IAAK,WAAc,OAAOhX,KAAK0/D,OAAS,EACxCjkD,YAAY,KAGpB/U,EAAQo0D,YAAcA,CAEtB,IAEA78D,IAAIC,OAAO,aAAa,CAAC,UAAU,UAAU,SAAS,eAAe,cAAc,cAAc,SAASuI,EAASC,EAASvD,GAAQ,aACpI,IAAIqZ,EAAO/V,EAAQ,cACfkU,EAAMlU,EAAQ,aACdxE,EAAQwE,EAAQ,WAAWxE,MAC3B0kE,EAAwB,WACxB,SAASA,IACL3mE,KAAKkb,SAAW,CAAC,CACrB,CA0QA,OAzQAyrD,EAAO9jE,UAAU6Y,IAAM,SAAUrJ,GAE7B,OADAsI,EAAIvC,MAAMpY,KAAKkb,SAAU7I,GAClBrS,IACX,EACA2mE,EAAO9jE,UAAUmY,WAAa,WAC1B,OAAOwB,EAAKpP,WAAWpN,KAAKkb,SAChC,EACAyrD,EAAO9jE,UAAUgY,WAAa,SAAUxI,GACpCrS,KAAKkb,SAAW7I,CACpB,EACAs0D,EAAO9jE,UAAU4I,KAAO,SAAUyW,GAC9B,IAAI7P,EAAUrS,KAAKkb,SACf6c,EAAW/3B,KAAK4mE,eAAe1kD,EAAS7P,GAC5C,IAAK0lB,EACD,OAAO,EACX,IAAIgU,EAAa,KAUjB,OATAhU,EAAS5sB,SAAQ,SAAU07D,EAAIC,EAAIC,EAAIC,GAEnC,OADAj7B,EAAa,IAAI9pC,EAAM4kE,EAAIC,EAAIC,EAAIC,KAC/BF,GAAME,GAAM30D,EAAQ/R,OAA4B+R,EAAa,MAAE/R,OACrC,GAAvB+R,EAAQ40D,aAAwBl7B,EAAW1rB,QAA2BhO,EAAa,UACtF05B,EAAa,MACN,EAGf,IACOA,CACX,EACA46B,EAAO9jE,UAAUqkE,QAAU,SAAUhlD,GACjC,IAAI7P,EAAUrS,KAAKkb,SACnB,IAAK7I,EAAQ80D,OACT,MAAO,GACXnnE,KAAKonE,gBAAgB/0D,GACrB,IAAIiO,EAAQjO,EAAQiO,MAChBiN,EAAQjN,EACN4B,EAAQ8nC,SAAS1pC,EAAMhgB,MAAMkC,IAAK8d,EAAM3c,IAAInB,KAC5C0f,EAAQhe,IAAIqlD,cACdlN,EAAS,GACT5+B,EAAKpL,EAAQoL,GACjB,GAAIpL,EAAQg1D,aAAc,CACtB,IAEIC,EAFA37D,EAAM8R,EAAG9c,OACTy9B,EAAS7Q,EAAM5sB,OAASgL,EAE5B0J,EAAO,IAAK,IAAI7S,EAAMib,EAAGtP,QAAU,EAAG3L,GAAO47B,EAAQ57B,IAAO,CACxD,IAAK,IAAIod,EAAI,EAAGA,EAAIjU,EAAKiU,IACrB,IAAqC,GAAjC2N,EAAM/qB,EAAMod,GAAG+6B,OAAOl9B,EAAGmC,IACzB,SAASvK,EACjB,IAAI82C,EAAY5+B,EAAM/qB,GAClB4M,EAAOme,EAAM/qB,EAAMmJ,EAAM,GACzB+nD,EAAavH,EAAUxrD,OAASwrD,EAAU7pD,MAAMmb,EAAG,IAAI,GAAG9c,OAC1D6tB,EAAWpf,EAAK9M,MAAMmb,EAAG9R,EAAM,IAAI,GAAGhL,OACtC2mE,GAAaA,EAAU3jE,IAAInB,MAAQA,GACnC8kE,EAAU3jE,IAAIlB,OAASixD,IAG3BrX,EAAO77C,KAAK8mE,EAAY,IAAIrlE,EAAMO,EAAKkxD,EAAYlxD,EAAMmJ,EAAM,EAAG6iB,IAC9D7iB,EAAM,IACNnJ,EAAMA,EAAMmJ,EAAM,GAC1B,CACJ,MAEI,IAAK,IAAIpN,EAAI,EAAGA,EAAIgvB,EAAM5sB,OAAQpC,IAC9B,KAAI2P,EAAUsO,EAAKxO,gBAAgBuf,EAAMhvB,GAAIkf,GAC7C,IAASmC,EAAI,EAAGA,EAAI1R,EAAQvN,OAAQif,IAAK,CACrC,IAAItd,EAAQ4L,EAAQ0R,GACpBy8B,EAAO77C,KAAK,IAAIyB,EAAM1D,EAAG+D,EAAM6L,OAAQ5P,EAAG+D,EAAM6L,OAAS7L,EAAM3B,QACnE,CAJgD,CAOxD,GAAI2f,EAAO,CACP,IAAIJ,EAAcI,EAAMhgB,MAAMmC,OAC1B2d,EAAYE,EAAM3c,IAAIlB,OACtBlE,EAAI,EAAGqhB,EAAIy8B,EAAO17C,OAAS,EAC/B,MAAOpC,EAAIqhB,GAAKy8B,EAAO99C,GAAG+B,MAAMmC,OAASyd,GAAsC,GAAvBm8B,EAAO99C,GAAG+B,MAAMkC,IACpEjE,IACJ,IAAI4hB,EAASG,EAAM3c,IAAInB,IAAM8d,EAAMhgB,MAAMkC,IACzC,MAAOjE,EAAIqhB,GAAKy8B,EAAOz8B,GAAGjc,IAAIlB,OAAS2d,GAAai8B,EAAOz8B,GAAGjc,IAAInB,KAAO2d,EACrEP,IAEJ,IADAy8B,EAASA,EAAOp2C,MAAM1H,EAAGqhB,EAAI,GACxBrhB,EAAI,EAAGqhB,EAAIy8B,EAAO17C,OAAQpC,EAAIqhB,EAAGrhB,IAClC89C,EAAO99C,GAAG+B,MAAMkC,KAAO8d,EAAMhgB,MAAMkC,IACnC65C,EAAO99C,GAAGoF,IAAInB,KAAO8d,EAAMhgB,MAAMkC,GAEzC,CACA,OAAO65C,CACX,EACAsqB,EAAO9jE,UAAUF,QAAU,SAAU+jD,EAAO6gB,GACxC,IAAIl1D,EAAUrS,KAAKkb,SACfuC,EAAKzd,KAAKonE,gBAAgB/0D,GAC9B,GAAIA,EAAQg1D,aACR,OAAOE,EACX,GAAK9pD,EAAL,CAEA,IAAInb,EAAQmb,EAAGtZ,KAAKuiD,GACpB,IAAKpkD,GAASA,EAAM,GAAG3B,QAAU+lD,EAAM/lD,OACnC,OAAO,KAEX,GADA4mE,EAAc7gB,EAAM/jD,QAAQ8a,EAAI8pD,GAC5Bl1D,EAAQm1D,aAAc,CACtBD,EAAcA,EAAYzmE,MAAM,IAChC,IAAK,IAAIvC,EAAI4N,KAAKE,IAAIq6C,EAAM/lD,OAAQ+lD,EAAM/lD,QAASpC,KAAM,CACrD,IAAI2T,EAAKw0C,EAAMnoD,GACX2T,GAAMA,EAAGhC,eAAiBgC,EAC1Bq1D,EAAYhpE,GAAKgpE,EAAYhpE,GAAGyhB,cAEhCunD,EAAYhpE,GAAKgpE,EAAYhpE,GAAG2R,aACxC,CACAq3D,EAAcA,EAAY3+D,KAAK,GACnC,CACA,OAAO2+D,CAhBG,CAiBd,EACAZ,EAAO9jE,UAAUukE,gBAAkB,SAAU/0D,EAASo1D,GAClD,GAAIp1D,EAAQ80D,kBAAkB3iE,OAC1B,OAAO6N,EAAQoL,GAAKpL,EAAQ80D,OAChC,IAAIA,EAAS90D,EAAQ80D,OACrB,IAAK90D,EAAQ80D,OACT,OAAO90D,EAAQoL,IAAK,EACnBpL,EAAQpE,SACTk5D,EAAS3qD,EAAK1O,aAAaq5D,IAC/B,IAAI90C,EAAWhgB,EAAQq1D,cAAgB,KAAO,MAC9C,IACI,IAAIljE,OAAO2iE,EAAQ,KACnB90D,EAAQs1D,sBAAuB,EAC/Bt1C,GAAY,GAChB,CACA,MAAOl0B,GACHkU,EAAQs1D,sBAAuB,CACnC,CAIA,GAHIt1D,EAAQu1D,YACRT,EAASU,EAAgBV,EAAQ90D,IACrCA,EAAQg1D,cAAgBI,GAAyB,SAAStlE,KAAKglE,GAC3D90D,EAAQg1D,aACR,OAAOh1D,EAAQoL,GAAKzd,KAAK8nE,yBAAyBX,EAAQ90C,GAC9D,IACI,IAAI5U,EAAK,IAAIjZ,OAAO2iE,EAAQ90C,EAChC,CACA,MAAOl0B,GACHsf,GAAK,CACT,CACA,OAAOpL,EAAQoL,GAAKA,CACxB,EACAkpD,EAAO9jE,UAAUilE,yBAA2B,SAAUX,EAAQ90C,GAG1D,IAFA,IAAI9U,EAAQ4pD,EAAOxkE,QAAQ,cAAe,QAAQ7B,MAAM,MACpD2c,EAAK,GACAlf,EAAI,EAAGA,EAAIgf,EAAM5c,OAAQpC,IAC9B,IACIkf,EAAGjd,KAAK,IAAIgE,OAAO+Y,EAAMhf,GAAI8zB,GACjC,CACA,MAAOl0B,GACH,OAAO,CACX,CACJ,OAAOsf,CACX,EACAkpD,EAAO9jE,UAAU+jE,eAAiB,SAAU1kD,EAAS7P,GACjD,IAAIoL,EAAKzd,KAAKonE,gBAAgB/0D,GAC9B,IAAKoL,EACD,OAAO,EACX,IAAIsqD,EAAiC,GAArB11D,EAAQ01D,UACpBd,EAAqC,GAAvB50D,EAAQ40D,YACtB53D,EAAsBoO,EAAG8/B,QACzBj9B,EAAQjO,EAAQiO,MAChBhgB,EAAQ+R,EAAQ/R,MACfA,IACDA,EAAQggB,EAAQA,EAAMynD,EAAY,MAAQ,SAAW7lD,EAAQ7b,UAAUinB,YACvEhtB,EAAMA,QACNA,EAAQA,EAAM2mE,GAAec,EAAY,MAAQ,UACrD,IAAIrmD,EAAWpB,EAAQA,EAAMhgB,MAAMkC,IAAM,EACrCmf,EAAUrB,EAAQA,EAAM3c,IAAInB,IAAM0f,EAAQmc,YAAc,EAC5D,GAAI0pC,EACA,IAAI58D,EAAU,SAAUpD,GACpB,IAAIvF,EAAMlC,EAAMkC,IAChB,IAAIwlE,EAAcxlE,EAAKlC,EAAMmC,OAAQsF,GAArC,CAEA,IAAKvF,IAAOA,GAAOkf,EAAUlf,IACzB,GAAIwlE,EAAcxlE,EAAKkoB,OAAO8sB,UAAWzvC,GACrC,OACR,GAAoB,GAAhBsK,EAAQi0D,KAEZ,IAAK9jE,EAAMmf,EAASD,EAAWphB,EAAMkC,IAAKA,GAAOkf,EAAUlf,IACvD,GAAIwlE,EAAcxlE,EAAKkoB,OAAO8sB,UAAWzvC,GACrC,MARE,CASd,OAGIoD,EAAU,SAAUpD,GACpB,IAAIvF,EAAMlC,EAAMkC,IAChB,IAAIwlE,EAAcxlE,EAAKlC,EAAMmC,OAAQsF,GAArC,CAEA,IAAKvF,GAAY,EAAGA,GAAOmf,EAASnf,IAChC,GAAIwlE,EAAcxlE,EAAK,EAAGuF,GACtB,OACR,GAAoB,GAAhBsK,EAAQi0D,KAEZ,IAAK9jE,EAAMkf,EAAUC,EAAUrhB,EAAMkC,IAAKA,GAAOmf,EAASnf,IACtD,GAAIwlE,EAAcxlE,EAAK,EAAGuF,GACtB,MARE,CASd,EAEJ,GAAIsK,EAAQg1D,aACR,IAAI17D,EAAM8R,EAAG9c,OACTqnE,EAAgB,SAAUxlE,EAAK2L,EAAQpG,GACvC,IAAIkY,EAAW8nD,EAAYvlE,EAAMmJ,EAAM,EAAInJ,EAC3C,KAAIyd,EAAW,GAAKA,EAAWtU,EAAMuW,EAAQmc,aAA7C,CAEA,IAAIjvB,EAAO8S,EAAQ7f,QAAQ4d,GACvByzC,EAAatkD,EAAKurC,OAAOl9B,EAAG,IAChC,MAAKsqD,GAAarU,EAAavlD,IAA0B,IAAhBulD,GAAzC,CAEA,IAAK,IAAIn1D,EAAI,EAAGA,EAAIoN,EAAKpN,IAErB,GADA6Q,EAAO8S,EAAQ7f,QAAQ4d,EAAW1hB,IACP,GAAvB6Q,EAAKurC,OAAOl9B,EAAGlf,IACf,OAER,IAAIiwB,EAAWpf,EAAK9M,MAAMmb,EAAG9R,EAAM,IAAI,GAAGhL,OAC1C,KAAIonE,GAAav5C,EAAWrgB,GAE5B,QAAIpG,EAASkY,EAAUyzC,EAAYzzC,EAAWtU,EAAM,EAAG6iB,SAAvD,CATU,CAJA,CAed,OAEC,GAAIu5C,EACDC,EAAgB,SAAUxlE,EAAKgsB,EAAUzmB,GACzC,IAEIlD,EAFAuK,EAAO8S,EAAQ7f,QAAQG,GACvB0L,EAAU,GACPtB,EAAO,EACd6Q,EAAGnT,UAAY,EACf,MAAQzF,EAAI4Y,EAAGtZ,KAAKiL,GAAQ,CACxB,IAAIzO,EAASkE,EAAE,GAAGlE,OAElB,GADAiM,EAAO/H,EAAEb,OACJrD,EAAQ,CACT,GAAIiM,GAAQwC,EAAKzO,OACb,MACJ8c,EAAGnT,UAAYsC,GAAQ4P,EAAKrN,eAAeC,EAAMxC,EAAMyC,EAC3D,CACA,GAAIxK,EAAEb,MAAQrD,EAAS6tB,EACnB,MACJtgB,EAAQ1N,KAAKqE,EAAEb,MAAOrD,EAC1B,CACA,IAAK,IAAIpC,EAAI2P,EAAQvN,OAAS,EAAGpC,GAAK,EAAGA,GAAK,EAAG,CAC7C,IAAIkE,EAASyL,EAAQ3P,EAAI,GACrBoC,EAASuN,EAAQ3P,GACrB,GAAIwJ,EAASvF,EAAKC,EAAQD,EAAKC,EAAS9B,GACpC,OAAO,CACf,CACJ,OAGIqnE,EAAgB,SAAUxlE,EAAKkxD,EAAY3rD,GAC3C,IACI6E,EACA/H,EAFAuK,EAAO8S,EAAQ7f,QAAQG,GAG3Bib,EAAGnT,UAAYopD,EACf,MAAQ7uD,EAAI4Y,EAAGtZ,KAAKiL,GAAQ,CACxB,IAAIzO,EAASkE,EAAE,GAAGlE,OAElB,GADAiM,EAAO/H,EAAEb,MACL+D,EAASvF,EAAKoK,EAAMpK,EAAKoK,EAAOjM,GAChC,OAAO,EACX,IAAKA,IACD8c,EAAGnT,UAAYsC,GAAQ4P,EAAKrN,eAAeC,EAAMxC,EAAMyC,GACnDzC,GAAQwC,EAAKzO,QACb,OAAO,CAEnB,CACJ,EAEJ,MAAO,CAAEwK,QAASA,EACtB,EACOw7D,CACX,CA9Q2B,GA+Q3B,SAASkB,EAAgBV,EAAQ90D,GAC7B,IAAInD,EAAqBsN,EAAKtN,qBAC9B,SAAS+4D,EAAaxoE,EAAGyoE,QACH,IAAdA,IAAwBA,GAAY,GACxC,IAAIC,EAAaj5D,GAAsBmD,EAAQs1D,qBAAuB,IAAInjE,OAAO,kBAAmB,KAAO,IAAIA,OAAO,OACtH,OAAI2jE,EAAWhmE,KAAK1C,IAAM4S,EAAQpE,OAC1BiB,GAAsBmD,EAAQs1D,qBAC1BO,EACO,0BACJ,yBAEJ,MAEJ,EACX,CACA,IAAIE,EAAc58D,MAAMw0B,KAAKmnC,GACzBe,EAAYE,EAAY,GACxBC,EAAWD,EAAYA,EAAYznE,OAAS,GAChD,OAAOsnE,EAAaC,GAAaf,EAASc,EAAaI,GAAU,EACrE,CACA3hE,EAAQigE,OAASA,CAEjB,IAEA1oE,IAAIC,OAAO,4BAA4B,CAAC,UAAU,UAAU,SAAS,eAAe,sBAAsB,SAASuI,EAASC,EAASvD,GAAQ,aAC7I,IAAIq0B,EAAax3B,MAAQA,KAAKw3B,WAAc,WACxC,IAAIC,EAAgB,SAAU13B,EAAGmF,GAI7B,OAHAuyB,EAAgBxvB,OAAOyvB,gBAClB,CAAEC,UAAW,cAAgBnsB,OAAS,SAAUzL,EAAGmF,GAAKnF,EAAE43B,UAAYzyB,CAAG,GAC1E,SAAUnF,EAAGmF,GAAK,IAAK,IAAIrF,KAAKqF,EAAO+C,OAAOpF,UAAUqa,eAAeta,KAAKsC,EAAGrF,KAAIE,EAAEF,GAAKqF,EAAErF,GAAI,EAC7F43B,EAAc13B,EAAGmF,EAC5B,EACA,OAAO,SAAUnF,EAAGmF,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6F,UAAU,uBAAyBhB,OAAO7E,GAAK,iCAE7D,SAAS0yB,IAAO53B,KAAKmY,YAAcpY,CAAG,CADtC03B,EAAc13B,EAAGmF,GAEjBnF,EAAE8C,UAAkB,OAANqC,EAAa+C,OAAO0F,OAAOzI,IAAM0yB,EAAG/0B,UAAYqC,EAAErC,UAAW,IAAI+0B,EACnF,CACH,CAd2C,GAclCqU,EAAUxlC,EAAQ,eACxB+K,EAAY/K,EAAQ,oBACpBoc,EAAWopB,EAAQppB,SACnBylD,EAAkC,WAClC,SAASA,EAAiBrpD,EAAQhP,GAC9BjQ,KAAKs4B,MAAMrZ,EAAQhP,GAAU,EACjC,CA4KA,OA3KAq4D,EAAiBzlE,UAAUy1B,MAAQ,SAAUrZ,EAAQhP,EAAUs4D,GAC3DvoE,KAAKiQ,SAAWA,IAAauB,EAAU5B,MAAQ,MAAQ,OACvD5P,KAAK2yB,SAAW,CAAC,EACjB3yB,KAAKwoE,kBAAoB,CAAC,EAC1BxoE,KAAKyoE,YAAYxpD,GACjBjf,KAAKuoE,eAAiBA,CAC1B,EACAD,EAAiBzlE,UAAU6lE,WAAa,SAAU/7C,GAC1C3sB,KAAK2yB,SAAShG,EAAQljB,OACtBzJ,KAAK2oE,cAAch8C,GACvB3sB,KAAK2yB,SAAShG,EAAQljB,MAAQkjB,EAC1BA,EAAQi8C,SACR5oE,KAAK6oE,cAAcl8C,EAC3B,EACA27C,EAAiBzlE,UAAU8lE,cAAgB,SAAUh8C,EAASm8C,GAC1D,IAAIr/D,EAAOkjB,IAA+B,kBAAZA,EAAuBA,EAAUA,EAAQljB,MACvEkjB,EAAU3sB,KAAK2yB,SAASlpB,GACnBq/D,UACM9oE,KAAK2yB,SAASlpB,GACzB,IAAIs/D,EAAM/oE,KAAKwoE,kBACf,IAAK,IAAIQ,KAASD,EAAK,CACnB,IAAIE,EAAWF,EAAIC,GACnB,GAAIC,GAAYt8C,SACLo8C,EAAIC,QAEV,GAAIx9D,MAAMmB,QAAQs8D,GAAW,CAC9B,IAAI1qE,EAAI0qE,EAASzgE,QAAQmkB,IACf,GAANpuB,IACA0qE,EAASp7D,OAAOtP,EAAG,GACI,GAAnB0qE,EAAStoE,SACTooE,EAAIC,GAASC,EAAS,IAElC,CACJ,CACJ,EACAX,EAAiBzlE,UAAU+lE,QAAU,SAAUx9D,EAAKuhB,EAASziB,GAMzD,GALkB,iBAAPkB,GAAmBA,SACVhF,GAAZ8D,IACAA,EAAWkB,EAAIlB,UACnBkB,EAAMA,EAAIpL,KAAKiQ,WAEd7E,EAEL,MAAsB,mBAAXuhB,EACA3sB,KAAK0oE,WAAW,CAAEvkE,KAAMwoB,EAASi8C,QAASx9D,EAAK3B,KAAMkjB,EAAQljB,MAA2B,SAAU,EAAM3I,MAAM,KAAKqK,SAAQ,SAAU+9D,GAC5I,IAAIC,EAAQ,GACZ,IAA6B,GAAzBD,EAAQ1gE,QAAQ,KAAY,CAC5B,IAAI+U,EAAQ2rD,EAAQpoE,MAAM,OAC1BooE,EAAU3rD,EAAMvD,MAChBuD,EAAMpS,SAAQ,SAAU+9D,GACpB,IAAIE,EAAUppE,KAAKqpE,UAAUH,GACzBngE,EAAK8Z,EAASumD,EAAQniD,QAAUmiD,EAAQh+D,IAC5C+9D,IAAUA,EAAQ,IAAM,IAAMpgE,EAC9B/I,KAAKspE,qBAAqBH,EAAO,YACrC,GAAGnpE,MACHmpE,GAAS,GACb,CACA,IAAIC,EAAUppE,KAAKqpE,UAAUH,GACzBngE,EAAK8Z,EAASumD,EAAQniD,QAAUmiD,EAAQh+D,IAC5CpL,KAAKspE,qBAAqBH,EAAQpgE,EAAI4jB,EAASziB,EACnD,GAAGlK,KACP,EACAsoE,EAAiBzlE,UAAUymE,qBAAuB,SAAUN,EAAOr8C,EAASziB,GACxE,IAAkC3L,EAA9BwqE,EAAM/oE,KAAKwoE,kBACf,GAAK77C,EAGA,IAAKo8C,EAAIC,IAAUhpE,KAAKuoE,eACzBQ,EAAIC,GAASr8C,MAEZ,CACInhB,MAAMmB,QAAQo8D,EAAIC,KAGwB,IAArCzqE,EAAIwqE,EAAIC,GAAOxgE,QAAQmkB,KAC7Bo8C,EAAIC,GAAOn7D,OAAOtP,EAAG,GAHrBwqE,EAAIC,GAAS,CAACD,EAAIC,IAKC,iBAAZ9+D,IACPA,EAAWgtC,EAAYvqB,IAE3B,IAAIgG,EAAWo2C,EAAIC,GACnB,IAAKzqE,EAAI,EAAGA,EAAIo0B,EAAShyB,OAAQpC,IAAK,CAClC,IAAIgrE,EAAQ52C,EAASp0B,GACjBirE,EAAWtyB,EAAYqyB,GAC3B,GAAIC,EAAWt/D,EACX,KACR,CACAyoB,EAAS9kB,OAAOtP,EAAG,EAAGouB,EAC1B,aAvBWo8C,EAAIC,EAwBnB,EACAV,EAAiBzlE,UAAU4lE,YAAc,SAAU91C,GAC/CA,GAAY1qB,OAAOiD,KAAKynB,GAAUxnB,SAAQ,SAAU1B,GAChD,IAAIkjB,EAAUgG,EAASlpB,GACvB,GAAKkjB,EAAL,CAEA,GAAuB,kBAAZA,EACP,OAAO3sB,KAAK4oE,QAAQj8C,EAASljB,GACV,oBAAZkjB,IACPA,EAAU,CAAExoB,KAAMwoB,IACC,kBAAZA,IAENA,EAAQljB,OACTkjB,EAAQljB,KAAOA,GACnBzJ,KAAK0oE,WAAW/7C,GATN,CAUd,GAAG3sB,KACP,EACAsoE,EAAiBzlE,UAAU4mE,eAAiB,SAAU92C,GAClD1qB,OAAOiD,KAAKynB,GAAUxnB,SAAQ,SAAU1B,GACpCzJ,KAAK2oE,cAAch2C,EAASlpB,GAChC,GAAGzJ,KACP,EACAsoE,EAAiBzlE,UAAU6mE,SAAW,SAAUC,GAC5C1hE,OAAOiD,KAAKy+D,GAASx+D,SAAQ,SAAUC,GACnCpL,KAAK4oE,QAAQx9D,EAAKu+D,EAAQv+D,GAC9B,GAAGpL,KACP,EACAsoE,EAAiBzlE,UAAUgmE,cAAgB,SAAUl8C,GACjD3sB,KAAK4oE,QAAQj8C,EAAQi8C,QAASj8C,EAClC,EACA27C,EAAiBzlE,UAAUwmE,UAAY,SAAUn+D,GAC7C,IAAIqS,EAAQrS,EAAKgF,cAAcpP,MAAM,mBAAmBqa,QAAO,SAAUoI,GAAK,OAAOA,CAAG,IACpFnY,EAAMmS,EAAMvD,MACZyJ,EAAUwoB,EAAQ7gC,GACtB,GAAI6gC,EAAQnpB,cAAcW,GACtBrY,EAAM6gC,EAAQnpB,cAAcW,GAASvT,kBACpC,KAAKqN,EAAM5c,OACZ,MAAO,CAAEyK,IAAKA,EAAK6b,QAAS,GAC3B,GAAoB,GAAhB1J,EAAM5c,QAA2B,SAAZ4c,EAAM,GAChC,MAAO,CAAEnS,IAAKA,EAAI4U,cAAeiH,QAAS,EAAG,CAEjD,IADA,IAAIA,EAAS,EACJ1oB,EAAIgf,EAAM5c,OAAQpC,KAAM,CAC7B,IAAI8zB,EAAW4Z,EAAQppB,SAAStF,EAAMhf,IACtC,GAAgB,MAAZ8zB,EAGA,MAFsB,oBAAX3qB,SACPA,QAAQC,MAAM,oBAAsB4V,EAAMhf,GAAK,OAAS2M,IACrD,EAEX+b,GAAUoL,CACd,CACA,MAAO,CAAEjnB,IAAKA,EAAK6b,OAAQA,EAC/B,EACAqhD,EAAiBzlE,UAAU+vB,eAAiB,SAAU3L,EAAQvD,GAC1D,IAAItY,EAAMyX,EAASoE,GAAUvD,EAC7B,OAAO1jB,KAAKwoE,kBAAkBp9D,EAClC,EACAk9D,EAAiBzlE,UAAU8pC,eAAiB,SAAUnyB,EAAMyM,EAAQvD,EAAWD,GAC3E,KAAIA,EAAU,GAAd,CAEA,IAAIrY,EAAMyX,EAASoE,GAAUvD,EACzBiJ,EAAU3sB,KAAKwoE,kBAAkBp9D,GAKrC,OAJIoP,EAAKovD,YACLpvD,EAAKovD,WAAa,IAAMx+D,EACxBuhB,EAAU3sB,KAAKwoE,kBAAkBhuD,EAAKovD,YAAcj9C,IAEpDA,GACe,aAAXA,GAAyD,aAA/BA,EAAQA,EAAQhsB,OAAS,IAKvD6Z,EAAKovD,YACC3iD,GAAoB,GAAVA,GAAoC,GAApBvD,EAAU/iB,SAEtB,GAAXsmB,GAAgBxD,EAAU,KAC/BjJ,EAAKovD,UAAY,IAFjBpvD,EAAKovD,UAAYpvD,EAAKovD,UAAU3jE,MAAM,GAAImF,EAAIzK,OAAS,IAIxD,CAAEgsB,QAASA,KAVVnS,EAAKovD,UAAYpvD,EAAKovD,WAAax+D,EAC5B,CAAEuhB,QAAS,QAVhB,CAoBd,EACA27C,EAAiBzlE,UAAUkqC,cAAgB,SAAUzZ,EAAQ9Y,GACzD,OAAOA,EAAKovD,WAAa,EAC7B,EACOtB,CACX,CAhLqC,GAiLrC,SAASpxB,EAAYvqB,GACjB,MAAyB,iBAAXA,GAAuBA,EAAQi8C,SACtCj8C,EAAQi8C,QAAQ1+D,WACfyiB,EAAQk9C,WAAa,IAAM,EACvC,CACA,IAAIC,EAA6B,SAAU9uC,GAEvC,SAAS8uC,EAAY7qD,EAAQhP,GACzB,IAAIgrB,EAAQD,EAAOp4B,KAAK5C,KAAMif,EAAQhP,IAAajQ,KAEnD,OADAi7B,EAAMstC,gBAAiB,EAChBttC,CACX,CACA,OANAzD,EAAUsyC,EAAa9uC,GAMhB8uC,CACX,CARgC,CAQ9BxB,GACFwB,EAAYlnE,KAAO,SAAUgJ,EAASqT,EAAQhP,GAC1Cq4D,EAAiBzlE,UAAUy1B,MAAM11B,KAAKgJ,EAASqT,EAAQhP,GAAU,EACrE,EACAq4D,EAAiB1lE,KAAO,SAAUgJ,EAASqT,EAAQhP,GAC/Cq4D,EAAiBzlE,UAAUy1B,MAAM11B,KAAKgJ,EAASqT,EAAQhP,GAAU,EACrE,EACAvJ,EAAQojE,YAAcA,EACtBpjE,EAAQ4hE,iBAAmBA,CAE3B,IAEArqE,IAAIC,OAAO,+BAA+B,CAAC,UAAU,UAAU,SAAS,cAAc,4BAA4B,0BAA0B,SAASuI,EAASC,EAASvD,GAAQ,aAC/K,IAAIq0B,EAAax3B,MAAQA,KAAKw3B,WAAc,WACxC,IAAIC,EAAgB,SAAU13B,EAAGmF,GAI7B,OAHAuyB,EAAgBxvB,OAAOyvB,gBAClB,CAAEC,UAAW,cAAgBnsB,OAAS,SAAUzL,EAAGmF,GAAKnF,EAAE43B,UAAYzyB,CAAG,GAC1E,SAAUnF,EAAGmF,GAAK,IAAK,IAAIrF,KAAKqF,EAAO+C,OAAOpF,UAAUqa,eAAeta,KAAKsC,EAAGrF,KAAIE,EAAEF,GAAKqF,EAAErF,GAAI,EAC7F43B,EAAc13B,EAAGmF,EAC5B,EACA,OAAO,SAAUnF,EAAGmF,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6F,UAAU,uBAAyBhB,OAAO7E,GAAK,iCAE7D,SAAS0yB,IAAO53B,KAAKmY,YAAcpY,CAAG,CADtC03B,EAAc13B,EAAGmF,GAEjBnF,EAAE8C,UAAkB,OAANqC,EAAa+C,OAAO0F,OAAOzI,IAAM0yB,EAAG/0B,UAAYqC,EAAErC,UAAW,IAAI+0B,EACnF,CACH,CAd2C,GAexCjd,EAAMlU,EAAQ,cACd6hE,EAAmB7hE,EAAQ,4BAA4B6hE,iBACvD/vD,EAAe9R,EAAQ,wBAAwB8R,aAC/CwxD,EAAgC,SAAU/uC,GAE1C,SAAS+uC,EAAe95D,EAAU0iB,GAC9B,IAAIsI,EAAQD,EAAOp4B,KAAK5C,KAAM2yB,EAAU1iB,IAAajQ,KAQrD,OAPAi7B,EAAM+uC,OAAS/uC,EAAMtI,SACrBsI,EAAMvhB,kBAAkB,QAAQ,SAAUvb,GACtC,OAAKA,EAAEgvC,KAGAhvC,EAAEwuB,QAAQxoB,KAAKhG,EAAEm1B,OAAQn1B,EAAEgvC,KAAMhvC,EAAE6qB,OAAO,GAFtC7qB,EAAEwuB,QAAQxoB,KAAKhG,EAAEm1B,OAAQ,CAAC,EAAGn1B,EAAE6qB,OAAO,EAGrD,IACOiS,CACX,CAsEA,OAjFAzD,EAAUuyC,EAAgB/uC,GAY1B+uC,EAAelnE,UAAUsB,KAAO,SAAUwoB,EAAS2G,EAAQ6Z,GACvD,GAAI3hC,MAAMmB,QAAQggB,GAAU,CACxB,IAAK,IAAIpuB,EAAIouB,EAAQhsB,OAAQpC,KACzB,GAAIyB,KAAKmE,KAAKwoB,EAAQpuB,GAAI+0B,EAAQ6Z,GAC9B,OAAO,EAEf,OAAO,CACX,CAGA,GAFuB,kBAAZxgB,IACPA,EAAU3sB,KAAK2yB,SAAShG,KACvBA,EACD,OAAO,EACX,GAAI2G,GAAUA,EAAOzD,YAAclD,EAAQoE,SACvC,OAAO,EACX,GAA+B,GAA3B/wB,KAAKiqE,oBAA+Bt9C,EAAQu9C,cAAgBv9C,EAAQu9C,YAAY52C,GAChF,OAAO,EACX,IAAIn1B,EAAI,CAAEm1B,OAAQA,EAAQ3G,QAASA,EAASwgB,KAAMA,GAGlD,OAFAhvC,EAAEgL,YAAcnJ,KAAK4Y,MAAM,OAAQza,GACnC6B,KAAKmZ,QAAQ,YAAahb,IACD,IAAlBA,EAAEgL,WACb,EACA4gE,EAAelnE,UAAUsnE,gBAAkB,SAAU72C,GACjD,IAAItzB,KAAKoqE,UAGT,OADA92C,GAAUA,EAAO1a,MAAM,gBACnB5Y,KAAKqqE,WACLrqE,KAAKsqE,MAAMtwD,MACXha,KAAKuZ,IAAI,OAAQvZ,KAAKuqE,oBACjBvqE,KAAKsqE,MAAM3pE,SACZX,KAAKsqE,MAAQtqE,KAAKwqE,UACfxqE,KAAKqqE,WAAY,IAEvBrqE,KAAKuqE,qBACNvqE,KAAKuqE,mBAAqB,SAAUpsE,GAChC6B,KAAKsqE,MAAM9pE,KAAK,CAACrC,EAAEwuB,QAASxuB,EAAEgvC,MAClC,EAAE1kB,KAAKzoB,OAEXA,KAAKwqE,SAAWxqE,KAAKsqE,MACrBtqE,KAAKsqE,MAAQ,GACbtqE,KAAKqZ,GAAG,OAAQrZ,KAAKuqE,oBACdvqE,KAAKqqE,WAAY,EAC5B,EACAN,EAAelnE,UAAU4nE,OAAS,SAAUn3C,GACxC,IAAItzB,KAAKoqE,WAAcpqE,KAAKsqE,MAA5B,CAEA,GAAItqE,KAAKqqE,UACL,OAAOrqE,KAAKmqE,gBAAgB72C,GAChC,IACItzB,KAAKoqE,WAAY,EACjBpqE,KAAKsqE,MAAMn/D,SAAQ,SAAUoY,GACT,iBAALA,EACPvjB,KAAKmE,KAAKof,EAAG+P,GAEbtzB,KAAKmE,KAAKof,EAAE,GAAI+P,EAAQ/P,EAAE,GAClC,GAAGvjB,KACP,CACA,QACIA,KAAKoqE,WAAY,CACrB,CAdU,CAed,EACAL,EAAelnE,UAAU6nE,UAAY,SAAU7lE,GAC3C,OAAOA,EAAEyG,KAAI,SAAUiY,GAKnB,MAJmB,iBAARA,EAAE,KACTA,EAAE,GAAKA,EAAE,GAAG9Z,MACX8Z,EAAE,KACHA,EAAIA,EAAE,IACHA,CACX,GACJ,EACOwmD,CACX,CAnFmC,CAmFjCzB,GACF3tD,EAAItC,UAAU0xD,EAAelnE,UAAW0V,GACxC7R,EAAQqjE,eAAiBA,CAEzB,IAEA9rE,IAAIC,OAAO,gCAAgC,CAAC,UAAU,UAAU,SAAS,eAAe,aAAa,cAAc,SAASuI,EAASC,EAASvD,GAAQ,aACtJ,IAAIqZ,EAAO/V,EAAQ,eACfwY,EAASxY,EAAQ,aACjBxE,EAAQwE,EAAQ,YAAYxE,MAChC,SAAS2mE,EAAQ7gD,EAAK4iD,GAClB,MAAO,CAAE5iD,IAAKA,EAAK4iD,IAAKA,EAC5B,CACAjkE,EAAQisB,SAAW,CAAC,CACZlpB,KAAM,mBACNmhE,YAAa,qBACbhC,QAASA,EAAQ,SAAU,aAC3BzkE,KAAM,SAAUmvB,GACZrU,EAAOd,WAAW,yBAAyB,SAAUhb,GACjDA,EAAO+b,KAAKoU,GACZA,EAAOu3C,kBACX,GACJ,EACA95C,UAAU,GACX,CACCtnB,KAAM,gBACNmhE,YAAa,mBACbhC,QAASA,EAAQ,QAAS,MAC1BzkE,KAAM,SAAUmvB,GACZrU,EAAOd,WAAW,wBAAwB,SAAUhb,GAChDA,EAAO2nE,gBAAgBx3C,EAAQ,EACnC,GACJ,EACAy3C,eAAgB,UAChBh6C,UAAU,GACX,CACCtnB,KAAM,oBACNmhE,YAAa,uBACbhC,QAASA,EAAQ,cAAe,YAChCzkE,KAAM,SAAUmvB,GACZrU,EAAOd,WAAW,wBAAwB,SAAUhb,GAChDA,EAAO2nE,gBAAgBx3C,GAAS,EACpC,GACJ,EACAy3C,eAAgB,UAChBh6C,UAAU,GACX,CACCtnB,KAAM,YACNmhE,YAAa,aACbhC,QAASA,EAAQ,SAAU,aAC3BzkE,KAAM,SAAUmvB,GAAUA,EAAO1F,WAAa,EAC9CmD,UAAU,GACX,CACCtnB,KAAM,kBACNmhE,YAAa,mBACbhC,QAASA,EAAQ,KAAM,UACvBzkE,KAAM,SAAUmvB,GAAUA,EAAO03C,iBAAmB,EACpDj6C,UAAU,GACX,CACCtnB,KAAM,WACNmhE,YAAa,gBACbhC,QAASA,EAAQ,SAAU,aAC3BzkE,KAAM,SAAUmvB,EAAQlkB,GACA,kBAATA,GAAsBgxD,MAAMhxD,IACnCkkB,EAAO23C,SAAS77D,GACpBkkB,EAAO43C,OAAO,CAAEC,MAAO,YAC3B,EACAp6C,UAAU,GACX,CACCtnB,KAAM,OACNm/D,QAASA,EAAQ,gBAAiB,4BAClCzkE,KAAM,SAAUmvB,GAAUA,EAAOpR,QAAQo1C,YAAW,EAAQ,EAC5D8T,kBAAmB,UACnBL,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,SACNm/D,QAASA,EAAQ,4BAA6B,wCAC9CzkE,KAAM,SAAUmvB,GAAUA,EAAOpR,QAAQo1C,YAAW,EAAO,EAC3D8T,kBAAmB,UACnBL,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,mBACNmhE,YAAa,qBACbhC,QAASA,EAAQ,KAAM,MACvBzkE,KAAM,SAAUmvB,GAAUA,EAAOpR,QAAQ02C,kBAAoB,EAC7DwS,kBAAmB,UACnBL,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,yBACNmhE,YAAa,4BACbhC,QAASA,EAAQ,SAAU,UAC3BzkE,KAAM,SAAUmvB,GAAUA,EAAOpR,QAAQ02C,kBAAiB,EAAO,EACjEwS,kBAAmB,UACnBL,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,UACNmhE,YAAa,WACbhC,QAASA,EAAQ,KAAM,yBACvBzkE,KAAM,SAAUmvB,GAAUA,EAAOpR,QAAQs0C,SAAW,EACpDuU,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,kBACNmhE,YAAa,oBACbhC,QAASA,EAAQ,KAAM,yBACvBzkE,KAAM,SAAUmvB,GAAUA,EAAOpR,QAAQ01C,iBAAmB,EAC5DmT,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,YACNmhE,YAAa,aACbhC,QAASA,EAAQ,QAAS,oBAC1BzkE,KAAM,SAAUmvB,GACZA,EAAOpR,QAAQs0C,UACfljC,EAAOpR,QAAQw0C,OAAOpjC,EAAOjtB,UAAUglE,eAC3C,EACAN,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,YACNmhE,YAAa,aACbhC,QAASA,EAAQ,cAAe,0BAChCzkE,KAAM,SAAUmvB,GAAUA,EAAOpR,QAAQw0C,QAAU,EACnDqU,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,WACNmhE,YAAa,YACbhC,QAASA,EAAQ,SAAU,aAC3BzkE,KAAM,SAAUmvB,GAAUA,EAAOg4C,UAAY,EAC7CF,kBAAmB,UACnBL,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,eACNmhE,YAAa,gBACbhC,QAASA,EAAQ,eAAgB,mBACjCzkE,KAAM,SAAUmvB,GAAUA,EAAOi4C,cAAgB,EACjDH,kBAAmB,UACnBL,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,mBACNmhE,YAAa,sBACbhC,QAASA,EAAQ,QAAS,UAC1BzkE,KAAM,SAAUmvB,GACRA,EAAOjtB,UAAUyb,UACjBwR,EAAOjtB,UAAUoiC,aAEjBnV,EAAOg4C,UACf,EACAv6C,UAAU,GACX,CACCtnB,KAAM,uBACNmhE,YAAa,0BACbhC,QAASA,EAAQ,cAAe,gBAChCzkE,KAAM,SAAUmvB,GACRA,EAAOjtB,UAAUyb,UACjBwR,EAAOjtB,UAAUoiC,aAEjBnV,EAAOi4C,cACf,EACAx6C,UAAU,GACX,CACCtnB,KAAM,OACNmhE,YAAa,OACbhC,QAASA,EAAQ,SAAU,aAC3BzkE,KAAM,SAAUmvB,GACZrU,EAAOd,WAAW,qBAAqB,SAAUhgB,GAAKA,EAAEwoE,OAAOrzC,EAAS,GAC5E,EACAvC,UAAU,GACX,CACCtnB,KAAM,YACNmhE,YAAa,YACbhC,QAAS,SACTzkE,KAAM,SAAUmvB,GAAUA,EAAO2qC,iBAAmB,EACpDltC,UAAU,GACX,CACCtnB,KAAM,gBACNmhE,YAAa,kBACbhC,QAASA,EAAQ,kBAAmB,uCACpCzkE,KAAM,SAAUmvB,GAAUA,EAAOq7B,eAAe1V,iBAAmB,EACnEmyB,kBAAmB,UACnBr6C,UAAU,EACVg6C,eAAgB,UAChBS,gBAAiB,YAClB,CACC/hE,KAAM,YACNmhE,YAAa,cACbhC,QAASA,EAAQ,YAAa,2BAC9BzkE,KAAM,SAAUmvB,GAAUA,EAAOm4C,mBAAqB,EACtDL,kBAAmB,UACnBr6C,UAAU,EACVg6C,eAAgB,UAChBS,gBAAiB,YAClB,CACC/hE,KAAM,WACNmhE,YAAa,YACbhC,QAASA,EAAQ,WAAY,yBAC7BzkE,KAAM,SAAUmvB,GAAUA,EAAOq7B,eAAexW,UAAY,EAC5DizB,kBAAmB,UACnBL,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,WACNmhE,YAAa,aACbhC,QAASA,EAAQ,KAAM,aACvBzkE,KAAM,SAAUmvB,EAAQ6Z,GAAQ7Z,EAAOo4C,WAAWv+B,EAAKw+B,MAAQ,EAC/DP,kBAAmB,UACnBL,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,cACNmhE,YAAa,gBACbhC,QAASA,EAAQ,iBAAkB,wCACnCzkE,KAAM,SAAUmvB,GAAUA,EAAOq7B,eAAe5V,eAAiB,EACjEqyB,kBAAmB,UACnBr6C,UAAU,EACVg6C,eAAgB,UAChBS,gBAAiB,YAClB,CACC/hE,KAAM,UACNmhE,YAAa,YACbhC,QAASA,EAAQ,WAAY,4BAC7BzkE,KAAM,SAAUmvB,GAAUA,EAAOs4C,iBAAmB,EACpDR,kBAAmB,UACnBr6C,UAAU,EACVg6C,eAAgB,UAChBS,gBAAiB,YAClB,CACC/hE,KAAM,aACNmhE,YAAa,cACbhC,QAASA,EAAQ,aAAc,2BAC/BzkE,KAAM,SAAUmvB,GAAUA,EAAOq7B,eAAetW,YAAc,EAC9D+yB,kBAAmB,UACnBL,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,aACNmhE,YAAa,eACbhC,QAASA,EAAQ,OAAQ,eACzBzkE,KAAM,SAAUmvB,EAAQ6Z,GAAQ7Z,EAAOu4C,aAAa1+B,EAAKw+B,MAAQ,EACjEP,kBAAmB,UACnBL,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,iBACNmhE,YAAa,mBACbhC,QAASA,EAAQ,kBAAmB,qBACpCzkE,KAAM,SAAUmvB,GAAUA,EAAOq7B,eAAetV,gBAAkB,EAClE+xB,kBAAmB,UACnBL,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,eACNmhE,YAAa,kBACbhC,QAASA,EAAQ,YAAa,eAC9BzkE,KAAM,SAAUmvB,GAAUA,EAAOw4C,kBAAoB,EACrDV,kBAAmB,UACnBL,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,oBACNmhE,YAAa,uBACbhC,QAASA,EAAQ,iBAAkB,mCACnCzkE,KAAM,SAAUmvB,GAAUA,EAAOq7B,eAAehW,iBAAmB,EACnEyyB,kBAAmB,UACnBL,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,gBACNmhE,YAAa,mBACbhC,QAASA,EAAQ,gBAAiB,4BAClCzkE,KAAM,SAAUmvB,GAAUA,EAAOy4C,mBAAqB,EACtDX,kBAAmB,UACnBL,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,aACNmhE,YAAa,cACbhC,QAASA,EAAQ,aAAc,2BAC/BzkE,KAAM,SAAUmvB,GAAUA,EAAOq7B,eAAelW,YAAc,EAC9D2yB,kBAAmB,UACnBL,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,WACNmhE,YAAa,aACbhC,QAASA,EAAQ,OAAQ,eACzBzkE,KAAM,SAAUmvB,EAAQ6Z,GAAQ7Z,EAAO04C,aAAa7+B,EAAKw+B,MAAQ,EACjEP,kBAAmB,UACnBL,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,kBACNmhE,YAAa,oBACbhC,QAASA,EAAQ,mBAAoB,sBACrCzkE,KAAM,SAAUmvB,GAAUA,EAAOq7B,eAAexV,iBAAmB,EACnEiyB,kBAAmB,UACnBL,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,gBACNmhE,YAAa,mBACbhC,QAASA,EAAQ,aAAc,gBAC/BzkE,KAAM,SAAUmvB,GAAUA,EAAO24C,mBAAqB,EACtDb,kBAAmB,UACnBL,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,kBACNmhE,YAAa,qBACbhC,QAASA,EAAQ,kBAAmB,8CACpCzkE,KAAM,SAAUmvB,GAAUA,EAAOq7B,eAAe9V,eAAiB,EACjEuyB,kBAAmB,UACnBL,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,cACNmhE,YAAa,iBACbhC,QAASA,EAAQ,gBAAiB,4BAClCzkE,KAAM,SAAUmvB,GAAUA,EAAO44C,iBAAmB,EACpDd,kBAAmB,UACnBL,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,cACNmhE,YAAa,eACbhC,QAASA,EAAQ,cAAe,eAChCzkE,KAAM,SAAUmvB,GAAUA,EAAOq7B,eAAepW,aAAe,EAC/D6yB,kBAAmB,UACnBL,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,YACNmhE,YAAa,cACbhC,QAASA,EAAQ,QAAS,gBAC1BzkE,KAAM,SAAUmvB,EAAQ6Z,GAAQ7Z,EAAO64C,cAAch/B,EAAKw+B,MAAQ,EAClEP,kBAAmB,UACnBL,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,iBACNmhE,YAAa,mBACbhC,QAAS,iBACTzkE,KAAM,SAAUmvB,GAAUA,EAAO84C,gBAAkB,EACnDr7C,UAAU,GACX,CACCtnB,KAAM,WACNmhE,YAAa,YACbhC,QAASA,EAAQ,KAAM,mBACvBzkE,KAAM,SAAUmvB,GAAUA,EAAO+4C,gBAAkB,EACnDt7C,UAAU,GACX,CACCtnB,KAAM,eACNmhE,YAAa,kBACbhC,QAASA,EAAQ,WAAY,mBAC7BzkE,KAAM,SAAUmvB,GAAUA,EAAOg5C,cAAgB,EACjDv7C,UAAU,GACX,CACCtnB,KAAM,eACNmhE,YAAa,iBACbhC,QAAS,eACTzkE,KAAM,SAAUmvB,GAAUA,EAAOi5C,cAAgB,EACjDx7C,UAAU,GACX,CACCtnB,KAAM,SACNmhE,YAAa,UACbhC,QAASA,EAAQ,KAAM,iBACvBzkE,KAAM,SAAUmvB,GAAUA,EAAOk5C,cAAgB,EACjDz7C,UAAU,GACX,CACCtnB,KAAM,aACNmhE,YAAa,gBACbhC,QAAS,SACTzkE,KAAM,SAAUmvB,GAAUA,EAAOm5C,YAAc,EAC/C17C,UAAU,GACX,CACCtnB,KAAM,WACNmhE,YAAa,YACbhC,QAASA,EAAQ,UAAW,MAC5BzkE,KAAM,SAAUhG,GAAKA,EAAE6tB,SAAS0K,SAAS,GAAI,EAAIv4B,EAAE6tB,SAAS6W,YAAY1F,WAAa,EACrFpM,UAAU,GACX,CACCtnB,KAAM,aACNmhE,YAAa,cACbhC,QAASA,EAAQ,YAAa,MAC9BzkE,KAAM,SAAUhG,GAAKA,EAAE6tB,SAAS0K,SAAS,EAAG,EAAIv4B,EAAE6tB,SAAS6W,YAAY1F,WAAa,EACpFpM,UAAU,GACX,CACCtnB,KAAM,kBACNmhE,YAAa,oBACbhC,QAAS,aACTzkE,KAAM,SAAUmvB,GAAUA,EAAOq7B,eAAehW,iBAAmB,EACnEyyB,kBAAmB,UACnBL,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,gBACNmhE,YAAa,kBACbhC,QAAS,YACTzkE,KAAM,SAAUmvB,GAAUA,EAAOq7B,eAAe9V,eAAiB,EACjEuyB,kBAAmB,UACnBL,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,kBACNmhE,YAAa,mBACbhC,QAASA,EAAQ,aAAc,oBAC/BzkE,KAAM,SAAUmvB,GAAUA,EAAOX,SAASw3C,gBAAgB72C,EAAS,EACnEvC,UAAU,GACX,CACCtnB,KAAM,cACNmhE,YAAa,eACbhC,QAASA,EAAQ,eAAgB,mBACjCzkE,KAAM,SAAUmvB,GAAUA,EAAOX,SAAS83C,OAAOn3C,EAAS,EAC1DvC,UAAU,GACX,CACCtnB,KAAM,iBACNmhE,YAAa,mBACbhC,QAASA,EAAQ,iBAAkB,cACnCzkE,KAAM,SAAUmvB,GAAUA,EAAOo5C,gBAAkB,EACnDtB,kBAAmB,UACnBL,eAAgB,UAChBh6C,UAAU,GACX,CACCtnB,KAAM,mBACNmhE,YAAa,qBACbhC,QAASA,EAAQ,6BAA8B,oBAC/CzkE,KAAM,SAAUmvB,GAAUA,EAAOo5C,gBAAe,EAAO,EACvDtB,kBAAmB,UACnBL,eAAgB,UAChBh6C,UAAU,GACX,CACCtnB,KAAM,mBACNmhE,YAAa,qBACbhC,QAASA,EAAQ,eAAgB,gBACjCzkE,KAAM,SAAUmvB,GAAUA,EAAOo5C,gBAAe,GAAM,EAAO,EAC7DtB,kBAAmB,UACnBL,eAAgB,UAChBh6C,UAAU,GACX,CACCtnB,KAAM,oBACNmhE,YAAa,uBACbhC,QAASA,EAAQ,KAAM,MACvBzkE,KAAM,WAAc,EACpBwoE,WAAW,EACX57C,UAAU,GACX,CACCtnB,KAAM,OACNmhE,YAAa,OACbzmE,KAAM,SAAUmvB,GAChB,EACAvC,UAAU,GAEd,CACItnB,KAAM,MACNmhE,YAAa,MACbzmE,KAAM,SAAUmvB,GACZ,IAAIs5C,EAAUt5C,EAAOu5C,yBAA2Bv5C,EAAOjtB,UAAUyb,UAC7DxB,EAAQssD,EAAUt5C,EAAOjtB,UAAUyvB,eAAiBxC,EAAOjtB,UAAUinB,WACzEgG,EAAO1a,MAAM,MAAO0H,GACfA,EAAMwB,WACPwR,EAAOpR,QAAQhc,OAAOoa,GAC1BgT,EAAOmQ,gBACX,EACAsnC,eAAgB,SAChBK,kBAAmB,WACpB,CACC3hE,KAAM,QACNmhE,YAAa,QACbzmE,KAAM,SAAUmvB,EAAQ6Z,GACpB7Z,EAAOw5C,aAAa3/B,EACxB,EACA49B,eAAgB,UACjB,CACCthE,KAAM,aACNmhE,YAAa,cACbhC,QAASA,EAAQ,SAAU,aAC3BzkE,KAAM,SAAUmvB,GAAUA,EAAO82B,aAAe,EAChD2gB,eAAgB,SAChBK,kBAAmB,eACpB,CACC3hE,KAAM,qBACNmhE,YAAa,sBACbhC,QAASA,EAAQ,eAAgB,mBACjCzkE,KAAM,SAAUmvB,GAAUA,EAAOy5C,oBAAsB,EACvDhC,eAAgB,SAChBK,kBAAmB,WACpB,CACC3hE,KAAM,YACNmhE,YAAa,aACbhC,QAASA,EAAQ,aAAc,iBAC/BzkE,KAAM,SAAUmvB,GAAUA,EAAO05C,WAAa,EAC9CjC,eAAgB,YAChBK,kBAAmB,eACpB,CACC3hE,KAAM,gBACNmhE,YAAa,iBACbhC,QAASA,EAAQ,SAAU,aAC3BzkE,KAAM,SAAUmvB,GAAUA,EAAOwxB,oBAAsB,EACvDsmB,kBAAmB,cACnBL,eAAgB,iBACjB,CACCthE,KAAM,qBACNmhE,YAAa,uBACbhC,QAASA,EAAQ,eAAgB,mBACjCzkE,KAAM,SAAUmvB,GAAUA,EAAO8yB,oBAAsB,EACvDglB,kBAAmB,UACnBL,eAAgB,iBACjB,CACCthE,KAAM,iBACNmhE,YAAa,mBACbhC,QAASA,EAAQ,gBAAiB,gBAClCzkE,KAAM,SAAUmvB,GAAUA,EAAO25C,aAAa,EAAI,EAClDlC,eAAgB,SAChBK,kBAAmB,WACpB,CACC3hE,KAAM,mBACNmhE,YAAa,qBACbhC,QAASA,EAAQ,kBAAmB,kBACpCzkE,KAAM,SAAUmvB,GAAUA,EAAO25C,cAAc,EAAI,EACnDlC,eAAgB,SAChBK,kBAAmB,WACpB,CACC3hE,KAAM,UACNmhE,YAAa,UACbhC,QAASA,EAAQ,SAAU,oBAC3BzkE,KAAM,SAAUmvB,GACZrU,EAAOd,WAAW,qBAAqB,SAAUhgB,GAAKA,EAAEwoE,OAAOrzC,GAAQ,EAAO,GAClF,GACD,CACC7pB,KAAM,OACNmhE,YAAa,OACbhC,QAASA,EAAQ,SAAU,aAC3BzkE,KAAM,SAAUmvB,GAAUA,EAAO07B,MAAQ,GAC1C,CACCvlD,KAAM,OACNmhE,YAAa,OACbhC,QAASA,EAAQ,sBAAuB,6BACxCzkE,KAAM,SAAUmvB,GAAUA,EAAOk8B,MAAQ,GAC1C,CACC/lD,KAAM,cACNmhE,YAAa,gBACbhC,QAASA,EAAQ,eAAgB,qBACjCzkE,KAAM,SAAUmvB,GAAUA,EAAO45C,aAAe,EAChDnC,eAAgB,UACjB,CACCthE,KAAM,cACNmhE,YAAa,gBACbhC,QAASA,EAAQ,SAAU,aAC3BzkE,KAAM,SAAUmvB,GAAUA,EAAO6uC,aAAe,EAChD4I,eAAgB,UACjB,CACCthE,KAAM,gBACNmhE,YAAa,kBACbhC,QAASA,EAAQ,iBAAkB,uBACnCzkE,KAAM,SAAUmvB,GAAUA,EAAO65C,eAAiB,EAClDpC,eAAgB,UACjB,CACCthE,KAAM,gBACNmhE,YAAa,kBACbhC,QAASA,EAAQ,WAAY,eAC7BzkE,KAAM,SAAUmvB,GAAUA,EAAO8uC,eAAiB,EAClD2I,eAAgB,UACjB,CACCthE,KAAM,MACNmhE,YAAa,SACbhC,QAASA,EAAQ,SAAU,8BAC3BzkE,KAAM,SAAUmvB,GAAUA,EAAOptB,OAAO,QAAU,EAClDklE,kBAAmB,UACnBL,eAAgB,UACjB,CACCthE,KAAM,YACNmhE,YAAa,YACbhC,QAASA,EAAQ,4BAA6B,mDAC9CzkE,KAAM,SAAUmvB,GAAUA,EAAOptB,OAAO,OAAS,EACjDklE,kBAAmB,UACnBL,eAAgB,UACjB,CACCthE,KAAM,gBACNmhE,YAAa,gBACbhC,QAASA,EAAQ,eAAgB,MACjCzkE,KAAM,SAAUmvB,GACZ,IAAIA,EAAOjtB,UAAUyb,UAIjB,OAAO,EAHPwR,EAAOptB,OAAO,OAKtB,EACAklE,kBAAmB,UACnBL,eAAgB,UACjB,CACCthE,KAAM,oBACNmhE,YAAa,uBACbhC,QAASA,EAAQ,gBAAiB,qBAClCzkE,KAAM,SAAUmvB,GAAUA,EAAO85C,mBAAqB,EACtDhC,kBAAmB,UACnBL,eAAgB,UACjB,CACCthE,KAAM,kBACNmhE,YAAa,qBACbhC,QAASA,EAAQ,aAAc,yBAC/BzkE,KAAM,SAAUmvB,GAAUA,EAAO+5C,iBAAmB,EACpDjC,kBAAmB,UACnBL,eAAgB,UACjB,CACCthE,KAAM,wBACNmhE,YAAa,4BACbhC,QAASA,EAAQ,uBAAwB,MACzCzkE,KAAM,SAAUmvB,GACZ,IAAIhT,EAAQgT,EAAOjtB,UAAUinB,WAC7BhN,EAAMhgB,MAAMmC,OAAS,EACrB6wB,EAAOpR,QAAQhc,OAAOoa,EAC1B,EACA8qD,kBAAmB,UACnBL,eAAgB,UACjB,CACCthE,KAAM,sBACNmhE,YAAa,0BACbhC,QAASA,EAAQ,oBAAqB,MACtCzkE,KAAM,SAAUmvB,GACZ,IAAIhT,EAAQgT,EAAOjtB,UAAUinB,WAC7BhN,EAAM3c,IAAIlB,OAASioB,OAAO8sB,UAC1BlkB,EAAOpR,QAAQhc,OAAOoa,EAC1B,EACA8qD,kBAAmB,UACnBL,eAAgB,UACjB,CACCthE,KAAM,iBACNmhE,YAAa,mBACbhC,QAASA,EAAQ,iBAAkB,oCACnCzkE,KAAM,SAAUmvB,GAAUA,EAAOg6C,gBAAkB,EACnDlC,kBAAmB,UACnBL,eAAgB,UACjB,CACCthE,KAAM,kBACNmhE,YAAa,oBACbhC,QAASA,EAAQ,cAAe,cAChCzkE,KAAM,SAAUmvB,GAAUA,EAAOi6C,iBAAmB,EACpDnC,kBAAmB,UACnBL,eAAgB,UACjB,CACCthE,KAAM,UACNmhE,YAAa,UACbhC,QAASA,EAAQ,YAAa,aAC9BzkE,KAAM,SAAUmvB,GAAUA,EAAOk6C,cAAgB,EACjDpC,kBAAmB,UACnBL,eAAgB,iBACjB,CACCthE,KAAM,SACNmhE,YAAa,SACbhC,QAASA,EAAQ,MAAO,OACxBzkE,KAAM,SAAUmvB,GAAUA,EAAOygB,QAAU,EAC3Cq3B,kBAAmB,UACnBL,eAAgB,iBACjB,CACCthE,KAAM,eACNmhE,YAAa,gBACbhC,QAASA,EAAQ,SAAU,UAC3BzkE,KAAM,SAAUmvB,GAAUA,EAAOk6C,cAAgB,EACjDpC,kBAAmB,cACnBL,eAAgB,iBACjB,CACCthE,KAAM,cACNmhE,YAAa,eACbhC,QAASA,EAAQ,SAAU,UAC3BzkE,KAAM,SAAUmvB,GAAUA,EAAOm6C,aAAe,EAChDrC,kBAAmB,cACnBL,eAAgB,iBACjB,CACCthE,KAAM,eACNmhE,YAAa,gBACbzmE,KAAM,SAAUmvB,EAAQ1oB,GAAO0oB,EAAOiS,OAAO36B,EAAM,EACnDwgE,kBAAmB,UACnBL,eAAgB,UACjB,CACCthE,KAAM,aACNmhE,YAAa,cACbzmE,KAAM,SAAUmvB,EAAQ6Z,GACpB7Z,EAAOiS,OAAO/oB,EAAKzP,aAAaogC,EAAKxjB,MAAQ,GAAIwjB,EAAKw+B,OAAS,GACnE,EACAP,kBAAmB,UACnBL,eAAgB,UACjB,CACCthE,KAAM,YACNmhE,YAAa,aACbhC,QAASA,EAAQ,KAAM,UACvBzkE,KAAM,SAAUmvB,GAAUA,EAAOo6C,WAAa,EAC9CtC,kBAAmB,UACnBL,eAAgB,UACjB,CACCthE,KAAM,mBACNmhE,YAAa,oBACbhC,QAASA,EAAQ,cAAe,UAChCzkE,KAAM,SAAUmvB,GAAUA,EAAOq6C,kBAAoB,EACrDvC,kBAAmB,SAAU93C,GAAUA,EAAOs6C,oBAAoB,EAAI,EACtE7C,eAAgB,UACjB,CACCthE,KAAM,cACNmhE,YAAa,eACbhC,QAASA,EAAQ,SAAU,UAC3BzkE,KAAM,SAAUmvB,GAAUA,EAAOtT,aAAe,EAChDorD,kBAAmB,UACnBL,eAAgB,UACjB,CACCthE,KAAM,cACNmhE,YAAa,eACbhC,QAASA,EAAQ,eAAgB,gBACjCzkE,KAAM,SAAUmvB,GAAUA,EAAOpjB,aAAe,EAChDk7D,kBAAmB,UACnBL,eAAgB,UACjB,CACCthE,KAAM,aACNmhE,YAAa,cACbhC,QAASA,EAAQ,KAAM,MACvBzkE,KAAM,SAAUmvB,GAAUA,EAAOu6C,YAAc,EAC/CzC,kBAAmB,cACnBL,eAAgB,WACjB,CACCthE,KAAM,eACNmhE,YAAa,iBACbhC,QAASA,EAAQ,eAAgB,mBACjCzkE,KAAM,SAAUmvB,GACZ,IAAIhT,EAAQgT,EAAOjtB,UAAUinB,WAC7BhN,EAAMhgB,MAAMmC,OAAS6d,EAAM3c,IAAIlB,OAAS,EACxC6d,EAAM3c,IAAInB,MACV8wB,EAAOjtB,UAAUsiC,SAASroB,GAAO,EACrC,EACA8qD,kBAAmB,UACnBL,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,WACNm/D,QAASA,EAAQ,UAAW,MAC5BzkE,KAAM,SAAUmvB,GAAUA,EAAOw6C,UAAY,GAC9C,CACCrkE,KAAM,YACNmhE,YAAa,aACbhC,QAASA,EAAQ,KAAM,MACvBzkE,KAAM,SAAUmvB,GAQZ,IAPA,IAAIgkB,EAAchkB,EAAOjtB,UAAUixC,cAC/BpqB,EAAiBoqB,EAAchkB,EAAOjtB,UAAUgxC,mBAAqB/jB,EAAOjtB,UAAU6uC,qBACtF/nB,EAAemqB,EAAchkB,EAAOjtB,UAAU6uC,qBAAuB5hB,EAAOjtB,UAAUgxC,mBACtF02B,EAAkBz6C,EAAOpR,QAAQhe,IAAI7B,QAAQ6qB,EAAe1qB,KAAK7B,OACjEqtE,EAAe16C,EAAOpR,QAAQhe,IAAIwgC,aAAapR,EAAOjtB,UAAUinB,YAChE2gD,EAAgBD,EAAarrE,QAAQ,QAAS,KAAKhC,OACnDutE,EAAa56C,EAAOpR,QAAQhe,IAAI7B,QAAQ6qB,EAAe1qB,KAClDjE,EAAI2uB,EAAe1qB,IAAM,EAAGjE,GAAK4uB,EAAa3qB,IAAM,EAAGjE,IAAK,CACjE,IAAI4vE,EAAU3xD,EAAKtP,eAAesP,EAAKrP,gBAAgBmmB,EAAOpR,QAAQhe,IAAI7B,QAAQ9D,KAC3D,IAAnB4vE,EAAQxtE,SACRwtE,EAAU,IAAMA,GAEpBD,GAAcC,CAClB,CACIhhD,EAAa3qB,IAAM,EAAK8wB,EAAOpR,QAAQhe,IAAIm6B,YAAc,IACzD6vC,GAAc56C,EAAOpR,QAAQhe,IAAIslD,uBAErCl2B,EAAOmQ,iBACPnQ,EAAOpR,QAAQhe,IAAIvB,QAAQ,IAAIV,EAAMirB,EAAe1qB,IAAK,EAAG2qB,EAAa3qB,IAAM,EAAG,GAAI0rE,GAClFD,EAAgB,GAChB36C,EAAOjtB,UAAU4xC,aAAa/qB,EAAe1qB,IAAK0qB,EAAezqB,QACjE6wB,EAAOjtB,UAAU+4B,SAASlS,EAAe1qB,IAAK0qB,EAAezqB,OAASwrE,KAGtEF,EAAkBz6C,EAAOpR,QAAQhe,IAAI7B,QAAQ6qB,EAAe1qB,KAAK7B,OAASotE,EAAmBA,EAAkB,EAAKA,EACpHz6C,EAAOjtB,UAAU4xC,aAAa/qB,EAAe1qB,IAAKurE,GAE1D,EACA3C,kBAAmB,UACnBr6C,UAAU,GACX,CACCtnB,KAAM,kBACNmhE,YAAa,mBACbhC,QAASA,EAAQ,KAAM,MACvBzkE,KAAM,SAAUmvB,GACZ,IAAInT,EAASmT,EAAOpR,QAAQhe,IAAIm6B,YAAc,EAC1CwX,EAASviB,EAAOpR,QAAQhe,IAAI7B,QAAQ8d,GAAQxf,OAC5C07C,EAAS/oB,EAAOjtB,UAAUm2C,UAAUH,OACpC+xB,EAAY,GACZ/xB,EAAO17C,OAAS,IAChB07C,EAAS,CAAC/oB,EAAOjtB,UAAUinB,aAE/B,IAAK,IAAI/uB,EAAI,EAAGA,EAAI89C,EAAO17C,OAAQpC,IAC3BA,GAAM89C,EAAO17C,OAAS,IAChB07C,EAAO99C,GAAGoF,IAAInB,MAAQ2d,GAAUk8B,EAAO99C,GAAGoF,IAAIlB,SAAWozC,GAC3Du4B,EAAU5tE,KAAK,IAAIyB,EAAMo6C,EAAO99C,GAAGoF,IAAInB,IAAK65C,EAAO99C,GAAGoF,IAAIlB,OAAQ0d,EAAQ01B,KAGxE,IAANt3C,EAC8B,IAAxB89C,EAAO99C,GAAG+B,MAAMkC,KAAwC,IAA3B65C,EAAO99C,GAAG+B,MAAMmC,QAC/C2rE,EAAU5tE,KAAK,IAAIyB,EAAM,EAAG,EAAGo6C,EAAO99C,GAAG+B,MAAMkC,IAAK65C,EAAO99C,GAAG+B,MAAMmC,SAIxE2rE,EAAU5tE,KAAK,IAAIyB,EAAMo6C,EAAO99C,EAAI,GAAGoF,IAAInB,IAAK65C,EAAO99C,EAAI,GAAGoF,IAAIlB,OAAQ45C,EAAO99C,GAAG+B,MAAMkC,IAAK65C,EAAO99C,GAAG+B,MAAMmC,SAGvH6wB,EAAO+6C,sBACP/6C,EAAOmQ,iBACP,IAASllC,EAAI,EAAGA,EAAI6vE,EAAUztE,OAAQpC,IAClC+0B,EAAOjtB,UAAUq2C,SAAS0xB,EAAU7vE,IAAI,EAEhD,EACAwyB,UAAU,EACVg6C,eAAgB,QACjB,CACCthE,KAAM,eACNmhE,YAAa,sCACbzmE,KAAM,SAAUmvB,GACZA,EAAOjtB,UAAUo9B,iBACjBnQ,EAAO44C,kBACP54C,EAAOiS,OAAO,KAClB,EACA6lC,kBAAmB,UACnBL,eAAgB,UACjB,CACCthE,KAAM,gBACNmhE,YAAa,uCACbzmE,KAAM,SAAUmvB,GACZA,EAAOjtB,UAAUo9B,iBACjB,IAAIhY,EAAS6H,EAAO2hB,oBACpB3hB,EAAOjtB,UAAU6xC,OAAOzsB,EAAOjpB,IAAM,EAAGkoB,OAAO8sB,WAC/ClkB,EAAOiS,OAAO,MACK,IAAf9Z,EAAOjpB,KACP8wB,EAAOo4C,YACf,EACAN,kBAAmB,UACnBL,eAAgB,UACjB,CACCthE,KAAM,qBACNtF,KAAM,SAAUmvB,GACZ5rB,QAAQ6T,KAAK,yEACb+X,EAAO43C,OAAO,CAAEC,MAAO,YAC3B,EACAp6C,UAAU,GACX,CACCtnB,KAAM,qBACNmhE,YAAa,uBACbhC,QAASA,EAAQ,KAAM,MACvBzkE,KAAM,SAAUmvB,GACZA,EAAO43C,OAAO,CAAEC,MAAO,YAC3B,EACAp6C,UAAU,GACX,CACCtnB,KAAM,aACNmhE,YAAa,0BACbhC,QAASA,EAAQ,KAAM,MACvBzkE,KAAM,SAAUmvB,GACZA,EAAO43C,OAAO,CAAEC,MAAO,SAC3B,EACAp6C,UAAU,IAElB,IAAK,IAAIxyB,EAAI,EAAGA,EAAI,EAAGA,IACnBmI,EAAQisB,SAASnyB,KAAK,CAClBiJ,KAAM,cAAgBlL,EACtBqsE,YAAa,iBAAmBrsE,EAChCu3C,MAAOv3C,EACP4F,KAAM,SAAUmvB,GAAUA,EAAOpR,QAAQy1C,YAAY33D,KAAK81C,MAAQ,EAClEi1B,eAAgB,SAChBh6C,UAAU,GAIlB,IAEA9yB,IAAIC,OAAO,mBAAmB,CAAC,UAAU,UAAU,SAAS,gBAAgB,SAASuI,EAASC,EAASvD,GAAQ,aAC/G,IAAI4T,EAAMtQ,EAAQ,aACd6nE,EAA6B,WAC7B,SAASA,EAAYpsD,GACjBliB,KAAKkiB,QAAUA,EACfliB,KAAKkiB,QAAQqsD,cAAgBvuE,KAC7BA,KAAKkiB,QAAQ8iD,aAAehlE,KAAKglE,aACjChlE,KAAKkiB,QAAQ+jD,uBAAyBjmE,KAAKimE,uBAC3CjmE,KAAKwuE,eAAiBxuE,KAAKwuE,eAAe/lD,KAAKzoB,MAC/CA,KAAKyuE,cAAgBzuE,KAAKyuE,cAAchmD,KAAKzoB,MAC7CA,KAAK0uE,eAAiB1uE,KAAK0uE,eAAejmD,KAAKzoB,MAC/CA,KAAKkiB,QAAQysD,gBAAkB,GAC/B3uE,KAAK4uE,gBAAkB5uE,KAAK4uE,gBAAgBnmD,KAAKzoB,MACjDA,KAAKkiB,QAAQ7I,GAAG,SAAUrZ,KAAKwuE,gBAC/BxuE,KAAKkiB,QAAQ7I,GAAG,aAAcrZ,KAAK6uE,cACnC7uE,KAAKkiB,QAAQ7I,GAAG,eAAgBrZ,KAAK4uE,gBACzC,CA6TA,OA5TAN,EAAYzrE,UAAUmiE,aAAe,SAAUxiE,GAC3C,IAAI7C,EAKJ,OAHIA,EADAK,KAAK07C,aACD17C,KAAK07C,YAAYl5C,IAAQxC,KAAK07C,YAAYl5C,GAAKq5C,UAE/C,EACH77C,KAAK,iBAAoBA,KAAK,aAAawC,GAIrCxC,KAAK,aAAawC,GAAK7B,OAAS,EAAIhB,EAHpC,EAAIA,CAKnB,EACA2uE,EAAYzrE,UAAUojE,uBAAyB,WAC3C,IAAID,EAAa,EAKjB,OAJAhmE,KAAK07C,YAAYvwC,SAAQ,SAAU/F,GAC3BA,GAAKA,EAAEy2C,WAAaz2C,EAAEgW,SACtB4qD,GAAc5gE,EAAEy2C,SACxB,IACOmqB,CACX,EACAsI,EAAYzrE,UAAU+rE,gBAAkB,SAAUzwE,GAC9C6B,KAAK4sC,OAAOzuC,EAAEm1B,OAClB,EACAg7C,EAAYzrE,UAAU+pC,OAAS,SAAUtZ,GACjCA,GAAUA,EAAOi7C,eAAiBj7C,EAAOi7C,eAAiBvuE,MAC1DszB,EAAOi7C,cAAc1hC,SACrB7sC,KAAKszB,QAAUA,IAEnBtzB,KAAK6sC,SACL7sC,KAAKszB,OAASA,EACVA,IACAA,EAAOi7C,cAAgBvuE,KACvBszB,EAAOtH,SAAS3S,GAAG,eAAgBrZ,KAAK0uE,gBACxCp7C,EAAOtH,SAAS3S,GAAG,cAAerZ,KAAKyuE,gBAE/C,EACAH,EAAYzrE,UAAUgqC,OAAS,SAAU1uC,GACrC,IAAIm1B,EAAStzB,KAAKszB,OAClB,GAAKA,EAAL,CAEAtzB,KAAKszB,OAAS,KACdA,EAAOi7C,cAAgB,KACvBj7C,EAAOtH,SAASzS,IAAI,eAAgBvZ,KAAK0uE,gBACzCp7C,EAAOtH,SAASzS,IAAI,cAAevZ,KAAKyuE,eACxC,IAAI/yB,EAAc17C,KAAKkiB,QAAQw5B,YAC/BA,GAAeA,EAAYvwC,SAAQ,SAAU/F,GACrCA,GAAKA,EAAE+M,IAAM/M,EAAE+M,GAAGsX,aAClBrkB,EAAE0pE,aAAc,EAChB1pE,EAAE+M,GAAGsX,WAAW5T,YAAYzQ,EAAE+M,IAEtC,GAXU,CAYd,EACAm8D,EAAYzrE,UAAUgsE,aAAe,SAAU1wE,EAAG+jB,GAC9C,IAAIw5B,EAAcx5B,EAAQw5B,YAC1B,GAAKA,GAAgBv9C,EAAEypC,OAAvB,CAMA,IAJA,IAAI3H,EAAO9hC,EAAEqc,KACTla,EAAQ2/B,EAAK3/B,MAAMkC,IACnBmB,EAAMs8B,EAAKt8B,IAAInB,IACfu2B,EAAmB,OAAZ56B,EAAEypC,OACJrpC,EAAI+B,EAAQ,EAAG/B,EAAIoF,EAAKpF,IACzBm9C,EAAYn9C,KACZm9C,EAAYn9C,GAAG6c,OAAS2d,GAE5B2iB,EAAY/3C,KACRo1B,EACK2iB,EAAYp7C,GAGbo7C,EAAY/3C,GAAKyX,OAAS2d,EAF1B2iB,EAAYp7C,GAASo7C,EAAY/3C,IAKjC+3C,EAAYp7C,IAAUo7C,EAAY/3C,KAClC+3C,EAAYp7C,QAAS8F,GACzBs1C,EAAY/3C,GAAKyX,OAAS2d,GAnBxB,CAsBd,EACAu1C,EAAYzrE,UAAU2rE,eAAiB,SAAUv7B,GAC7C,IAAIyI,EAAc17C,KAAKkiB,QAAQw5B,YAC/B,GAAKA,EAAL,CAEA,IAAIz7B,EAAWgzB,EAAM3yC,MAAMkC,IACvBmJ,EAAMsnC,EAAMtvC,IAAInB,IAAMyd,EAC1B,GAAY,IAARtU,QAEC,GAAoB,UAAhBsnC,EAAMrL,OAAoB,CAC/B,IAAIgsB,EAAUlY,EAAY7tC,OAAOoS,EAAW,EAAGtU,IAC1C+vC,EAAYz7B,IAAa2zC,EAAQA,EAAQjzD,OAAS,KACnD+6C,EAAYz7B,GAAY2zC,EAAQ55C,OAEpC45C,EAAQzoD,SAAQ,SAAU/F,GACtBA,GAAKpF,KAAK+uE,iBAAiB3pE,EAC/B,GAAGpF,MACHA,KAAKgvE,aACT,KACK,CACD,IAAI7hC,EAAO,IAAI3hC,MAAMG,GACjB+vC,EAAYz7B,IAA6C,MAAhCy7B,EAAYz7B,GAAUxd,QAC3CwwC,EAAM3yC,MAAMmC,OAASi5C,EAAYz7B,GAAUxd,QAC3Cwd,IAERktB,EAAKvsC,QAAQqf,EAAU,GACvBy7B,EAAY7tC,OAAOpG,MAAMi0C,EAAavO,GACtCntC,KAAKgvE,aACT,CAxBU,CAyBd,EACAV,EAAYzrE,UAAUmsE,YAAc,WAChC,IAAItzB,EAAc17C,KAAKkiB,QAAQw5B,YAC/B,GAAKA,EAAL,CAEA,IAAIuzB,GAAY,EAChBvzB,EAAYvwC,SAAQ,SAAU/F,EAAG7G,GAC7B,GAAI6G,EAAG,CACH6pE,GAAY,EACZ7pE,EAAE5C,IAAMjE,EACR,MAAO6G,EAAE8pE,WACL9pE,EAAE8pE,WAAW1sE,IAAMjE,EACnB6G,EAAIA,EAAE8pE,UAEd,CACJ,IACID,IACAjvE,KAAKkiB,QAAQw5B,YAAc,KAbrB,CAcd,EACA4yB,EAAYzrE,UAAUssE,oBAAsB,SAAU/pE,GAC7CpF,KAAKkiB,QAAQw5B,cACd17C,KAAKkiB,QAAQw5B,YAAc,IAAIlwC,MAAMxL,KAAKkiB,QAAQmc,cACtD,IAAIxkB,EAAM7Z,KAAKkiB,QAAQw5B,YAAYt2C,EAAE5C,KASrC,OARIqX,IACAzU,EAAE8pE,WAAar1D,EACXA,EAAI1H,IAAM0H,EAAI1H,GAAGsX,aACjB5P,EAAI1H,GAAGsX,WAAW5T,YAAYgE,EAAI1H,IAClC0H,EAAIi1D,aAAc,IAG1B9uE,KAAKkiB,QAAQw5B,YAAYt2C,EAAE5C,KAAO4C,EAC3BA,CACX,EACAkpE,EAAYzrE,UAAUusE,cAAgB,SAAUhqE,GAG5C,GAFApF,KAAKmvE,oBAAoB/pE,GACzBA,EAAE8c,QAAUliB,KAAKkiB,SACZliB,KAAKszB,OACN,OAAOluB,EACX,IAAI4mB,EAAWhsB,KAAKszB,OAAOtH,SACvB5mB,EAAEqzB,OAASrzB,EAAE+M,KACb/M,EAAE+M,GAAK4E,EAAI3E,cAAc,OACzBhN,EAAE+M,GAAGe,UAAY9N,EAAEqzB,MAEnBrzB,EAAEukB,OAASvkB,EAAE+M,KACb/M,EAAE+M,GAAK4E,EAAI3E,cAAc,OACzBhN,EAAE+M,GAAGgB,YAAc/N,EAAEukB,MAErBvkB,EAAE+M,KACF4E,EAAItD,YAAYrO,EAAE+M,GAAI,2BAClB/M,EAAEmN,WACFwE,EAAItD,YAAYrO,EAAE+M,GAAI/M,EAAEmN,WAE5BnN,EAAE+M,GAAGK,MAAMtI,SAAW,WACtB9E,EAAE+M,GAAGK,MAAM68D,OAAS,IACpBrjD,EAASzX,UAAUvC,YAAY5M,EAAE+M,IACjC/M,EAAE0pE,aAAc,EACX1pE,EAAEkqE,cACHlqE,EAAE+M,GAAGK,MAAM68D,OAAS,KAEH,MAAjBjqE,EAAEmqE,cACFnqE,EAAEmqE,YAAcnqE,EAAE+M,GAAG8mB,eAGX,MAAd7zB,EAAEy2C,WACFz2C,EAAEy2C,SAAWz2C,EAAEmqE,YAAcvjD,EAAS6W,YAAY1F,YAEtD,IAAI8C,EAAOjgC,KAAKkiB,QAAQspB,UAAUpmC,EAAE5C,IAAK,GAEzC,GADA4C,EAAEoqE,MAAQvvC,EACNA,EAAM,CACN,IAAIyb,EAAc17C,KAAKkiB,QAAQw5B,YAC3Bt2C,EAAE5C,KAAOy9B,EAAKt8B,IAAInB,KAAQk5C,EAAYzb,EAAK3/B,MAAMkC,KAGjD4C,EAAEgW,QAAS,EAFXsgC,EAAYzb,EAAK3/B,MAAMkC,KAAO4C,CAGtC,CAKA,OAJApF,KAAKkiB,QAAQtJ,MAAM,aAAc,CAAE4B,KAAM,CAAEla,MAAO,CAAEkC,IAAK4C,EAAE5C,QAC3DxC,KAAKgvE,cACLhvE,KAAKyuE,cAAc,KAAMziD,GACzBhsB,KAAKyvE,gBAAgBrqE,GACdA,CACX,EACAkpE,EAAYzrE,UAAUksE,iBAAmB,SAAU3pE,GAK/C,GAJAA,EAAE0pE,aAAc,EAChB1pE,EAAE8c,QAAU,KACR9c,EAAE+M,IAAM/M,EAAE+M,GAAGsX,YACbrkB,EAAE+M,GAAGsX,WAAW5T,YAAYzQ,EAAE+M,IAC9B/M,EAAEkuB,QAAUluB,EAAEkuB,OAAOjP,QACrB,IACIjf,EAAEkuB,OAAOjP,SACb,CACA,MAAOlmB,GAAK,CAChB,GAAI6B,KAAKkiB,QAAQw5B,YAAa,CAC1B,IAAIg0B,EAAK1vE,KAAKkiB,QAAQw5B,YAAYt2C,EAAE5C,KACpC,GAAIktE,GAAMtqE,EACNpF,KAAKkiB,QAAQw5B,YAAYt2C,EAAE5C,KAAO4C,EAAE8pE,WAChC9pE,EAAE8pE,YACFlvE,KAAKyvE,gBAAgBrqE,EAAE8pE,iBAG3B,MAAOQ,EAAI,CACP,GAAIA,EAAGR,YAAc9pE,EAAG,CACpBsqE,EAAGR,WAAa9pE,EAAE8pE,WAClB,KACJ,CACAQ,EAAKA,EAAGR,UACZ,CAER,CACAlvE,KAAKkiB,QAAQtJ,MAAM,aAAc,CAAE4B,KAAM,CAAEla,MAAO,CAAEkC,IAAK4C,EAAE5C,QAC3DxC,KAAKgvE,aACT,EACAV,EAAYzrE,UAAU8sE,gBAAkB,SAAUntE,GAC9C,IAAIk5C,EAAc17C,KAAKkiB,QAAQw5B,YAC3Bt2C,EAAIs2C,GAAeA,EAAYl5C,GAC/B09C,EAAO,GACX,MAAO96C,EACH86C,EAAK1/C,KAAK4E,GACVA,EAAIA,EAAE8pE,WAEV,OAAOhvB,CACX,EACAouB,EAAYzrE,UAAU4sE,gBAAkB,SAAUrqE,GAC9CpF,KAAKkiB,QAAQysD,gBAAgBnuE,KAAK4E,GAClCpF,KAAKszB,QAAUtzB,KAAKszB,OAAOtH,SAAS4jD,YACxC,EACAtB,EAAYzrE,UAAU6rE,eAAiB,SAAUvwE,EAAG6tB,GAChD,IAAI6jD,EAAiB7vE,KAAKkiB,QAAQysD,gBAC9B1vD,EAAS+M,EAAS6W,YACtB,GAAKgtC,GAAmBA,EAAelvE,OAAvC,CAGA,IADA,IAAI0L,EAAM64C,IACD3mD,EAAI,EAAGA,EAAIsxE,EAAelvE,OAAQpC,IAAK,CAC5C,IAAI6G,EAAIyqE,EAAetxE,GACvB,GAAK6G,GAAMA,EAAE+M,IAET/M,EAAE8c,SAAWliB,KAAKkiB,QAAtB,CAEA,IAAK9c,EAAE0pE,YAAa,CAChB,GAAI9uE,KAAKkiB,QAAQw5B,YAAYt2C,EAAE5C,MAAQ4C,EACnC,SACJA,EAAE0pE,aAAc,EAChB9iD,EAASzX,UAAUvC,YAAY5M,EAAE+M,GACrC,CACA/M,EAAEzF,EAAIyF,EAAE+M,GAAG8mB,aACN7zB,EAAE0qE,aACH1qE,EAAEA,EAAIA,EAAE+M,GAAGuD,YACXtQ,EAAEq7D,YAAct0D,KAAK4jE,KAAK3qE,EAAEA,EAAI6Z,EAAOqS,iBAE3C,IAAIuqB,EAAWz2C,EAAEzF,EAAIsf,EAAOke,WACxB/3B,EAAE4qE,YACFn0B,GAAY77C,KAAKkiB,QAAQ+iD,gBAAgB7/D,EAAE5C,KACvCq5C,EAAW,IACXA,EAAW,IAEfz2C,EAAEy2C,UAAYA,IACdz2C,EAAEy2C,SAAWA,EACTz2C,EAAE5C,IAAM6J,IACRA,EAAMjH,EAAE5C,KArBJ,CAuBhB,CACI6J,GAAO64C,MACPllD,KAAKkiB,QAAQtJ,MAAM,aAAc,CAAE4B,KAAM,CAAEla,MAAO,CAAEkC,IAAK6J,MACzDrM,KAAKkiB,QAAQy+C,gBAAkB,MAEnC3gE,KAAKkiB,QAAQysD,gBAAkB,EAnCrB,CAoCd,EACAL,EAAYzrE,UAAU4rE,cAAgB,SAAUtwE,EAAG6tB,GAC/C,IAAI/M,EAAS+M,EAAS6W,YAClB6Y,EAAc17C,KAAKkiB,QAAQw5B,YAC/B,GAAKA,EAAL,CAEA,IAAI+Q,EAAQtgD,KAAKE,IAAIrM,KAAK0hB,SAAUzC,EAAOyC,UACvC9U,EAAOT,KAAKC,IAAIpM,KAAK2hB,QAAS1C,EAAO0C,QAAS+5B,EAAY/6C,QAC9D,MAAO8rD,EAAQ,IAAM/Q,EAAY+Q,GAC7BA,IACJzsD,KAAK0hB,SAAWzC,EAAOyC,SACvB1hB,KAAK2hB,QAAU1C,EAAO0C,QACtBqK,EAAS0X,aAAazkB,OAASA,EAC/B,IAAK,IAAI1gB,EAAIkuD,EAAOluD,GAAKqO,EAAMrO,IAAK,CAChC,IAAI6G,EAAIs2C,EAAYn9C,GACpB,GAAK6G,GAAMA,EAAE+M,GAEb,GAAI/M,EAAEgW,OACFhW,EAAE+M,GAAGK,MAAMsE,KAAO,KAAO1R,EAAEmqE,aAAe,GAAK,SADnD,CAIKnqE,EAAE0pE,cACH1pE,EAAE0pE,aAAc,EAChB9iD,EAASzX,UAAUvC,YAAY5M,EAAE+M,KAErC,IAAI2E,EAAMkV,EAAS0X,aAAayF,iBAAiB,CAAE3mC,IAAKjE,EAAGkE,OAAQ,IAAK,GAAMqU,IACzE1R,EAAE4qE,YACHl5D,GAAOmI,EAAOke,WAAan9B,KAAKkiB,QAAQ+iD,gBAAgB7/D,EAAE5C,MAC9D4C,EAAE+M,GAAGK,MAAMsE,IAAMA,EAAMmI,EAAO9Q,OAAS,KACvC,IAAImH,EAAOlQ,EAAEkqE,YAAc,EAAItjD,EAASikD,YACnC7qE,EAAE0qE,aACHx6D,GAAQ0W,EAASsc,YACrBljC,EAAE+M,GAAGK,MAAM8C,KAAOA,EAAO,KACrBlQ,EAAE8qE,WAAa9qE,EAAEq7D,cACjBr7D,EAAE+M,GAAGK,MAAM0C,SAAW+J,EAAOhK,MAAQ,EAAIgK,EAAOkxD,QAAU,MAE1D/qE,EAAE0qE,WACF1qE,EAAE+M,GAAGK,MAAMkgB,MAAQ1G,EAASokD,UAAUl3C,WAAa,KAGnD9zB,EAAE+M,GAAGK,MAAMkgB,MAAQ,EApBvB,CAsBJ,CArCU,CAsCd,EACO47C,CACX,CA5UgC,GA6UhC5nE,EAAQ4nE,YAAcA,CAEtB,IAEArwE,IAAIC,OAAO,8BAA8B,CAAC,UAAU,UAAU,SAAS,eAAe,qCAAqC,SAASuI,EAASC,EAASvD,GAAQ,aAC9J,IAAI+H,EAAOzE,EAAQ,eACfy3B,EAAgBz3B,EAAQ,mCAAmCy3B,cAC3DmyC,EAAuC,WACvC,SAASA,EAAsB/8C,GAC3BtzB,KAAKszB,OAASA,EACdtzB,KAAKswE,YAAch9C,EAAOtH,SAASgS,aACnCh+B,KAAKiT,QAAUqgB,EAAOtH,SAASsT,QAC/Bt/B,KAAKutB,MAAQ+F,EAAOtH,SAASgS,aAAae,OAC1C/+B,KAAKuwE,eAAiB,KACtBvwE,KAAKwwE,WAAa,KAClBxwE,KAAKywE,kBAAoB,IAAIvyC,EAAcl+B,KAAKszB,OACpD,CAsUA,OArUA+8C,EAAsBxtE,UAAUyhB,YAAc,WAC1CtkB,KAAKiT,QAAQgH,iBAAiB,UAAWja,KAAK0wE,iBAAiBjoD,KAAKzoB,OACpEA,KAAKiT,QAAQgH,iBAAiB,WAAYja,KAAK2wE,YAAYloD,KAAKzoB,OAChEA,KAAKszB,OAAOja,GAAG,aAAcrZ,KAAK2wE,YAAYloD,KAAKzoB,MACvD,EACAqwE,EAAsBxtE,UAAUsX,eAAiB,WAC7Cna,KAAKiT,QAAQmH,oBAAoB,UAAWpa,KAAK0wE,iBAAiBjoD,KAAKzoB,OACvEA,KAAKiT,QAAQmH,oBAAoB,WAAYpa,KAAK2wE,YAAYloD,KAAKzoB,OACnEA,KAAKszB,OAAO/Z,IAAI,aAAcvZ,KAAK2wE,YAAYloD,KAAKzoB,MACxD,EACAqwE,EAAsBxtE,UAAU6tE,iBAAmB,SAAUvyE,GACzD,GAAI6B,KAAKywE,kBAAkBt4C,OAIvB,OAHAh6B,EAAEua,sBACEva,EAAEslB,UAAYvY,EAAK,WACnBlL,KAAKywE,kBAAkBhyC,eAG/B,GAAItgC,EAAE2M,SAAW9K,KAAKiT,QAAS,CAC3B,GAAI9U,EAAEslB,SAAWvY,EAAK,SAClB,OAEJ/M,EAAEua,iBACF,IAAIlW,EAAMxC,KAAKszB,OAAO2hB,oBAAoBzyC,IAmC1C,OAlCKxC,KAAKszB,OAAOs9C,aAAapuE,IAC1BxC,KAAKszB,OAAOu9C,aAAaruE,GAAK,GAAM,QACxCkM,WACA,WACI,IAAI1K,EAAQhE,KAAK8wE,eAAe9wE,KAAKswE,YAAYS,YAAYvuE,KACzDwuE,EAAmBhxE,KAAKixE,uBAAuBjtE,GAC/CktE,EAAyBlxE,KAAKmxE,uBAAuBntE,GACzD,GAAyB,OAArBgtE,GAAwD,OAA3BE,EAEjC,OAAyB,OAArBF,GAAwD,OAA3BE,GAC7BlxE,KAAKuwE,eAAiBW,EACtBlxE,KAAKwwE,WAAa,kBAClBxwE,KAAKoxE,iBAAiBpxE,KAAKuwE,iBAGN,OAArBS,GAAwD,OAA3BE,GAC7BlxE,KAAKuwE,eAAiBS,EACtBhxE,KAAKwwE,WAAa,YAClBxwE,KAAKqxE,iBAAiBrxE,KAAKuwE,iBAG3BpkE,KAAKua,IAAIwqD,EAAyBltE,GAASmI,KAAKua,IAAIsqD,EAAmBhtE,IACvEhE,KAAKuwE,eAAiBW,EACtBlxE,KAAKwwE,WAAa,kBAClBxwE,KAAKoxE,iBAAiBpxE,KAAKuwE,kBAI3BvwE,KAAKuwE,eAAiBS,EACtBhxE,KAAKwwE,WAAa,YAClBxwE,KAAKqxE,iBAAiBrxE,KAAKuwE,gBAGnC,EAAE9nD,KAAKzoB,MAAO,GAElB,CACAA,KAAKsxE,iCAAiCnzE,GACtCuQ,WAAW,WACP1O,KAAKszB,OAAOna,QAAQ,gBAAiB,IAAIo4D,EAAoBpzE,EAAG6B,MACpE,EAAEyoB,KAAKzoB,MAAO,GAClB,EACAqwE,EAAsBxtE,UAAUyuE,iCAAmC,SAAUnzE,GACzE,GAAIA,EAAEslB,UAAYvY,EAAK,OAAvB,CAIA,GAAI/M,EAAEslB,UAAYvY,EAAK,UAKnB,OAJA/M,EAAEua,iBACF1Y,KAAK2wE,cACL3wE,KAAKiT,QAAQ8Y,aACb/rB,KAAKwxE,KAAO,MAGhB,GAAIrzE,EAAEslB,UAAYvY,EAAK,MAYvB,GAAI/M,EAAEslB,UAAYvY,EAAK,QAAvB,CAYA,GAAI/M,EAAEslB,UAAYvY,EAAK,QAGnB,OAFA/M,EAAEua,sBACF1Y,KAAKyxE,YAAY,cAGrB,GAAItzE,EAAEslB,UAAYvY,EAAK,SAGnB,OAFA/M,EAAEua,sBACF1Y,KAAKyxE,YAAY,QAGrB,GAAItzE,EAAEslB,UAAYvY,EAAK,UAAY/M,EAAEslB,UAAYvY,EAAK,eAElD,OADA/M,EAAEua,iBACM1Y,KAAKwwE,YACT,IAAK,OACD,GAAuF,UAAnFxwE,KAAKswE,YAAYpuD,QAAQ0pB,YAAY5rC,KAAK0xE,eAAe1xE,KAAKuwE,iBAA8B,CAC5F,IAAIoB,EAAmB3xE,KAAK0xE,eAAe1xE,KAAKuwE,gBAChDvwE,KAAKszB,OAAOpR,QAAQ2pB,kBAAkB7rC,KAAK0xE,eAAe1xE,KAAKuwE,gBAAiBpyE,GAChFuQ,WACA,WACQ1O,KAAK0xE,eAAe1xE,KAAKuwE,kBAAoBoB,IAC7C3xE,KAAK4xE,gBAAgB5xE,KAAKuwE,gBAC1BvwE,KAAKuwE,eAAiBvwE,KAAK8wE,eAAea,GAC1C3xE,KAAKqxE,iBAAiBrxE,KAAKuwE,gBAEnC,EAAE9nD,KAAKzoB,MAAO,IACd,KACJ,CACK,GAAuF,QAAnFA,KAAKswE,YAAYpuD,QAAQ0pB,YAAY5rC,KAAK0xE,eAAe1xE,KAAKuwE,iBACnE,MAEJ,OACJ,IAAK,aACD,IAAIvxC,EAAgBh/B,KAAKutB,MAAMskD,MAAM7xE,KAAKuwE,gBAAgBt9D,QAAQ6+D,WAAW,GACzEvgD,EAAOyN,EAAc5S,wBACrB5Z,EAAQxS,KAAKywE,kBAAkB5/C,aAAare,MAChDA,EAAM8C,KAAOic,EAAKmB,MAAQ,KAC1BlgB,EAAMsE,IAAMya,EAAKI,OAAS,KAC1B3xB,KAAKywE,kBAAkBtyC,YAAYn+B,KAAK0xE,eAAe1xE,KAAKuwE,iBAC5D,MAvCZ,MATI,OADApyE,EAAEua,iBACM1Y,KAAKwwE,YACT,IAAK,OACDxwE,KAAK+xE,sBACL,MACJ,IAAK,aACD/xE,KAAKgyE,sBACL,WAlBR,OADA7zE,EAAEua,iBACM1Y,KAAKwwE,YACT,IAAK,OACDxwE,KAAKiyE,oBACL,MACJ,IAAK,aACDjyE,KAAKkyE,oBACL,MAhBZ,MAFI/zE,EAAEua,gBA4EV,EACA23D,EAAsBxtE,UAAU8tE,YAAc,WAC1C,GAA4B,OAAxB3wE,KAAKuwE,eACL,OAAQvwE,KAAKwwE,YACT,IAAK,OACDxwE,KAAK4xE,gBAAgB5xE,KAAKuwE,gBAC1B,MACJ,IAAK,aACDvwE,KAAKmyE,gBAAgBnyE,KAAKuwE,gBAC1B,MAGRvwE,KAAKywE,kBAAkBt4C,QACvBn4B,KAAKywE,kBAAkBhyC,aAE/B,EACA4xC,EAAsBxtE,UAAUuvE,qBAAuB,SAAUpuE,GAC7D,IAAIquE,EAAoBryE,KAAKszB,OAAO++C,kBAAkBryE,KAAK0xE,eAAe1tE,IACtEsuE,EAA6D,SAA7CtyE,KAAKuyE,eAAevuE,GAAOwO,MAAM4C,QACrD,OAAOi9D,GAAqBC,CAChC,EACAjC,EAAsBxtE,UAAU2vE,qBAAuB,SAAUxuE,GAC7D,IAAIquE,EAAoBryE,KAAKszB,OAAO++C,kBAAkBryE,KAAK0xE,eAAe1tE,IACtEsuE,EAA6D,SAA7CtyE,KAAKyyE,eAAezuE,GAAOwO,MAAM4C,QACrD,OAAOi9D,GAAqBC,CAChC,EACAjC,EAAsBxtE,UAAU0vE,eAAiB,SAAUvuE,GACvD,IAAI0uE,EAAO1yE,KAAKutB,MAAMvW,IAAIhT,GACtBiP,EAAUy/D,EAAKz/D,QACnB,OAAOA,EAAQ6+D,WAAW,EAC9B,EACAzB,EAAsBxtE,UAAU4vE,eAAiB,SAAUzuE,GACvD,IAAI0uE,EAAO1yE,KAAKutB,MAAMvW,IAAIhT,GACtBiP,EAAUy/D,EAAKz/D,QACnB,OAAOA,EAAQ6+D,WAAW,EAC9B,EACAzB,EAAsBxtE,UAAUouE,uBAAyB,SAAUjtE,GAC/D,GAAIhE,KAAKoyE,qBAAqBpuE,GAC1B,OAAOA,EACX,IAAIzF,EAAI,EACR,MAAOyF,EAAQzF,EAAI,GAAKyF,EAAQzF,EAAIyB,KAAKutB,MAAM8Q,YAAc,EAAG,CAE5D,GADA9/B,IACIyF,EAAQzF,GAAK,GAAKyB,KAAKoyE,qBAAqBpuE,EAAQzF,GACpD,OAAOyF,EAAQzF,EACnB,GAAIyF,EAAQzF,GAAKyB,KAAKutB,MAAM8Q,YAAc,GAAKr+B,KAAKoyE,qBAAqBpuE,EAAQzF,GAC7E,OAAOyF,EAAQzF,CACvB,CACA,OAAO,IACX,EACA8xE,EAAsBxtE,UAAUsuE,uBAAyB,SAAUntE,GAC/D,GAAIhE,KAAKwyE,qBAAqBxuE,GAC1B,OAAOA,EACX,IAAIzF,EAAI,EACR,MAAOyF,EAAQzF,EAAI,GAAKyF,EAAQzF,EAAIyB,KAAKutB,MAAM8Q,YAAc,EAAG,CAE5D,GADA9/B,IACIyF,EAAQzF,GAAK,GAAKyB,KAAKwyE,qBAAqBxuE,EAAQzF,GACpD,OAAOyF,EAAQzF,EACnB,GAAIyF,EAAQzF,GAAKyB,KAAKutB,MAAM8Q,YAAc,GAAKr+B,KAAKwyE,qBAAqBxuE,EAAQzF,GAC7E,OAAOyF,EAAQzF,CACvB,CACA,OAAO,IACX,EACA8xE,EAAsBxtE,UAAUwuE,iBAAmB,SAAUrtE,GACzD,GAAa,MAATA,EAAJ,CAEA,IAAI2uE,EAAa3yE,KAAKuyE,eAAevuE,GACrC2uE,EAAWh1C,UAAU/pB,IAAI5T,KAAKszB,OAAOtH,SAAS4mD,wBAC9CD,EAAW5mD,OAHD,CAId,EACAskD,EAAsBxtE,UAAUuuE,iBAAmB,SAAUptE,GACzD,GAAa,MAATA,EAAJ,CAEA,IAAI67B,EAAa7/B,KAAKyyE,eAAezuE,GACrC67B,EAAWlC,UAAU/pB,IAAI5T,KAAKszB,OAAOtH,SAAS4mD,wBAC9C/yC,EAAW9T,OAHD,CAId,EACAskD,EAAsBxtE,UAAU+uE,gBAAkB,SAAU5tE,GACxD,IAAI2uE,EAAa3yE,KAAKuyE,eAAevuE,GACrC2uE,EAAWh1C,UAAUz3B,OAAOlG,KAAKszB,OAAOtH,SAAS4mD,wBACjDD,EAAWnmD,MACf,EACA6jD,EAAsBxtE,UAAUsvE,gBAAkB,SAAUnuE,GACxD,IAAI67B,EAAa7/B,KAAKyyE,eAAezuE,GACrC67B,EAAWlC,UAAUz3B,OAAOlG,KAAKszB,OAAOtH,SAAS4mD,wBACjD/yC,EAAWrT,MACf,EACA6jD,EAAsBxtE,UAAUovE,kBAAoB,WAChD,IAAIjuE,EAAQhE,KAAKuwE,eACjB,MAAOvsE,EAAQ,EAEX,GADAA,IACIhE,KAAKoyE,qBAAqBpuE,GAI1B,OAHAhE,KAAK4xE,gBAAgB5xE,KAAKuwE,gBAC1BvwE,KAAKuwE,eAAiBvsE,OACtBhE,KAAKqxE,iBAAiBrxE,KAAKuwE,eAKvC,EACAF,EAAsBxtE,UAAUkvE,oBAAsB,WAClD,IAAI/tE,EAAQhE,KAAKuwE,eACjB,MAAOvsE,EAAQhE,KAAKutB,MAAM8Q,YAAc,EAEpC,GADAr6B,IACIhE,KAAKoyE,qBAAqBpuE,GAI1B,OAHAhE,KAAK4xE,gBAAgB5xE,KAAKuwE,gBAC1BvwE,KAAKuwE,eAAiBvsE,OACtBhE,KAAKqxE,iBAAiBrxE,KAAKuwE,eAKvC,EACAF,EAAsBxtE,UAAUqvE,kBAAoB,WAChD,IAAIluE,EAAQhE,KAAKuwE,eACjB,MAAOvsE,EAAQ,EAEX,GADAA,IACIhE,KAAKwyE,qBAAqBxuE,GAI1B,OAHAhE,KAAKmyE,gBAAgBnyE,KAAKuwE,gBAC1BvwE,KAAKuwE,eAAiBvsE,OACtBhE,KAAKoxE,iBAAiBpxE,KAAKuwE,eAKvC,EACAF,EAAsBxtE,UAAUmvE,oBAAsB,WAClD,IAAIhuE,EAAQhE,KAAKuwE,eACjB,MAAOvsE,EAAQhE,KAAKutB,MAAM8Q,YAAc,EAEpC,GADAr6B,IACIhE,KAAKwyE,qBAAqBxuE,GAI1B,OAHAhE,KAAKmyE,gBAAgBnyE,KAAKuwE,gBAC1BvwE,KAAKuwE,eAAiBvsE,OACtBhE,KAAKoxE,iBAAiBpxE,KAAKuwE,eAKvC,EACAF,EAAsBxtE,UAAU4uE,YAAc,SAAUoB,GACpD,OAAQA,GACJ,IAAK,aACD,GAAwB,eAApB7yE,KAAKwwE,WACL,MAEJ,IAAIsC,EAAkB9yE,KAAKmxE,uBAAuBnxE,KAAKuwE,gBACvD,GAAuB,MAAnBuC,EACA,MAEJ9yE,KAAKwwE,WAAa,aAClBxwE,KAAK4xE,gBAAgB5xE,KAAKuwE,gBAC1BvwE,KAAKuwE,eAAiBuC,EACtB9yE,KAAKoxE,iBAAiBpxE,KAAKuwE,gBAC3B,MACJ,IAAK,OACD,GAAwB,SAApBvwE,KAAKwwE,WACL,MAEJ,IAAIuC,EAAkB/yE,KAAKixE,uBAAuBjxE,KAAKuwE,gBACvD,GAAuB,MAAnBwC,EACA,MAEJ/yE,KAAKwwE,WAAa,OAClBxwE,KAAKmyE,gBAAgBnyE,KAAKuwE,gBAC1BvwE,KAAKuwE,eAAiBwC,EACtB/yE,KAAKqxE,iBAAiBrxE,KAAKuwE,gBAC3B,MAGZ,EACAF,EAAsBxtE,UAAU6uE,eAAiB,SAAU1tE,GACvD,IAAI0uE,EAAO1yE,KAAKutB,MAAMvW,IAAIhT,GAC1B,OAAI0uE,EACOA,EAAKlwE,IACT,IACX,EACA6tE,EAAsBxtE,UAAUiuE,eAAiB,SAAUtuE,GACvD,IAAK,IAAIjE,EAAI,EAAGA,EAAIyB,KAAKutB,MAAM8Q,YAAa9/B,IAAK,CAC7C,IAAIm0E,EAAO1yE,KAAKutB,MAAMvW,IAAIzY,GAC1B,GAAIm0E,EAAKlwE,KAAOA,EACZ,OAAOjE,CACf,CACA,OAAO,IACX,EACO8xE,CACX,CAhV0C,GAiV1C3pE,EAAQ2pE,sBAAwBA,EAChC,IAAIkB,EAAqC,WACrC,SAASA,EAAoBpgD,EAAU6hD,GACnChzE,KAAKgzE,sBAAwBA,EAC7BhzE,KAAKmxB,SAAWA,CACpB,CAaA,OAZAogD,EAAoB1uE,UAAUowE,OAAS,WACnC,OAAO/nE,EAAKsY,gBAAgBxjB,KAAKmxB,SAAS1N,QAC9C,EACA8tD,EAAoB1uE,UAAUqwE,OAAS,WACnC,OAAOlzE,KAAKgzE,sBAAsBtB,eAAe1xE,KAAKgzE,sBAAsBzC,eAChF,EACAgB,EAAoB1uE,UAAUswE,mBAAqB,WAC/C,MAAiD,eAA1CnzE,KAAKgzE,sBAAsBxC,UACtC,EACAe,EAAoB1uE,UAAUuwE,aAAe,WACzC,MAAiD,SAA1CpzE,KAAKgzE,sBAAsBxC,UACtC,EACOe,CACX,CAlBwC,GAmBxC7qE,EAAQ6qE,oBAAsBA,CAE9B,IAEAtzE,IAAIC,OAAO,aAAa,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,eAAe,oBAAoB,yBAAyB,0BAA0B,yBAAyB,0BAA0B,mBAAmB,aAAa,YAAY,wBAAwB,+BAA+B,gCAAgC,aAAa,qBAAqB,mBAAmB,8BAA8B,aAAa,gBAAgB,iBAAiB,SAASuI,EAASC,EAASvD,GAAQ,aAClgB,IAAI00B,EAAY73B,MAAQA,KAAK63B,UAAa,SAAS74B,GAC/C,IAAIP,EAAsB,oBAAXq5B,QAAyBA,OAAOC,SAAUlzB,EAAIpG,GAAKO,EAAEP,GAAIF,EAAI,EAC5E,GAAIsG,EAAG,OAAOA,EAAEjC,KAAK5D,GACrB,GAAIA,GAAyB,kBAAbA,EAAE2B,OAAqB,MAAO,CAC1CJ,KAAM,WAEF,OADIvB,GAAKT,GAAKS,EAAE2B,SAAQ3B,OAAI,GACrB,CAAEiC,MAAOjC,GAAKA,EAAET,KAAMy5B,MAAOh5B,EACxC,GAEJ,MAAM,IAAI+L,UAAUtM,EAAI,0BAA4B,kCACxD,EACIkc,EAAMlU,EAAQ,aACdsQ,EAAMtQ,EAAQ,aACd+V,EAAO/V,EAAQ,cACf+K,EAAY/K,EAAQ,mBACpBsiB,EAAYtiB,EAAQ,wBAAwBsiB,UAC5C4gB,EAAeljC,EAAQ,yBAAyBkjC,aAChD4B,EAAc9kC,EAAQ,wBAAwB8kC,YAC9CW,EAAazlC,EAAQ,yBAAyBylC,WAC9C4uB,EAAcr0D,EAAQ,kBAAkBq0D,YACxC6L,EAASlgE,EAAQ,YAAYkgE,OAC7B1kE,EAAQwE,EAAQ,WAAWxE,MAC3BsW,EAAe9R,EAAQ,uBAAuB8R,aAC9CwxD,EAAiBtjE,EAAQ,8BAA8BsjE,eACvDsJ,EAAkB5sE,EAAQ,+BAA+BksB,SACzD1T,EAASxY,EAAQ,YACjBzD,EAAgByD,EAAQ,oBAAoBzD,cAC5CsrE,EAAc7nE,EAAQ,kBAAkB6nE,YACxC+B,EAAwB5pE,EAAQ,6BAA6B4pE,sBAC7D/zD,EAAM7V,EAAQ,YAAY6V,IAC1B2M,EAAYxiB,EAAQ,eACpByE,EAAOzE,EAAQ,cACf6sE,EAAwB,WACxB,SAASA,EAAOtnD,EAAU9J,EAAS7P,GAAWrS,KAAKkiB,QAC/CliB,KAAKwkB,WAAa,GAClB,IAAIjQ,EAAYyX,EAASunD,sBACzBvzE,KAAKuU,UAAYA,EACjBvU,KAAKgsB,SAAWA,EAChBhsB,KAAK+I,GAAK,YAAcuqE,EAAOjY,KAC/Br7D,KAAK2yB,SAAW,IAAIo3C,EAAev4D,EAAU5B,MAAQ,MAAQ,MAAOyjE,GAC7C,iBAAZvhE,WACP9R,KAAK8xB,UAAY,IAAI/I,EAAUiD,EAASwnD,uBAAwBxzE,MAChEA,KAAKgsB,SAAS+c,SAAW/oC,KAAK8xB,UAAUjB,aACxC7wB,KAAKmyB,cAAgB,IAAIwX,EAAa3pC,MACtC,IAAIurC,EAAYvrC,OAEpBA,KAAKyzE,WAAa,IAAIvnC,EAAWlsC,MACjCA,KAAK0zE,SAAU,IAAI/M,GAASjrD,IAAI,CAC5B4qD,MAAM,IAEVtmE,KAAK2zE,gBAAkB3zE,KAAK2zE,gBAAgBlrD,KAAKzoB,MACjDA,KAAK2yB,SAAStZ,GAAG,OAAQrZ,KAAK2zE,iBAC9B3zE,KAAK4zE,0BACL5zE,KAAK6zE,iBAAmBr3D,EAAK1N,YAAY,WACrC9O,KAAKmZ,QAAQ,QAAS,CAAC,GACnBnZ,KAAKkiB,UAAYliB,KAAKkiB,QAAQu5C,WAC9Bz7D,KAAKkiB,QAAQo5C,YAAY5O,eACjC,EAAEjkC,KAAKzoB,OACPA,KAAKqZ,GAAG,UAAU,SAAUxB,EAAG7I,GAC3BA,EAAM6kE,iBAAiBllE,SAAS,GACpC,IACA3O,KAAK8zE,WAAW5xD,GAAW7P,GAAWA,EAAQ6P,SAAW,IAAI44C,EAAY,KACzE77C,EAAOjD,aAAahc,MAChBqS,GACArS,KAAK6a,WAAWxI,GACpB4M,EAAO9F,QAAQ,SAAUnZ,KAC7B,CAmpDA,OAlpDAszE,EAAOzwE,UAAU+wE,wBAA0B,WACvC5zE,KAAK2yB,SAAStZ,GAAG,OAAQrZ,KAAKgrC,eAAeviB,KAAKzoB,OAAO,GACzDA,KAAK2yB,SAAStZ,GAAG,YAAarZ,KAAK+qC,aAAatiB,KAAKzoB,OAAO,GAC5DA,KAAK+zE,cAAgBv3D,EAAK1N,YAAY9O,KAAK+qC,aAAatiB,KAAKzoB,MAAM,IACnEA,KAAKqZ,GAAG,SAAU,WACTrZ,KAAKysB,QACNzsB,KAAKgrC,iBACLhrC,KAAKysB,MAAM2kC,gBAAkBpxD,KAAKg0E,UAEtCh0E,KAAKysB,MAAMI,YAAa,CAC5B,EAAEpE,KAAKzoB,OAAO,GACdA,KAAKqZ,GAAG,kBAAmB,WAClBrZ,KAAKysB,QACNzsB,KAAKgrC,iBACLhrC,KAAKysB,MAAM2kC,gBAAkBpxD,KAAKg0E,UAEtCh0E,KAAKysB,MAAMK,kBAAmB,CAClC,EAAErE,KAAKzoB,OAAO,EAClB,EACAszE,EAAOzwE,UAAUmoC,eAAiB,SAAUipC,GACxC,GAAIj0E,KAAKysB,MAAO,CACZ,IAAKwnD,GAAgBj0E,KAAKysB,MAAME,QAC5B,OACJ3sB,KAAKk0E,OAASl0E,KAAKysB,KACvB,CACKwnD,IACDj0E,KAAKm0E,gBAAkB,KACvBF,EAAe,CAAC,GAEpBj0E,KAAK+zE,cAAcplE,WACnB3O,KAAKysB,MAAQzsB,KAAKkiB,QAAQuK,MAAQ,CAC9BE,QAASsnD,EAAatnD,SAAW,CAAC,EAClCwgB,KAAM8mC,EAAa9mC,KACnB6vB,UAAWh9D,KAAKgsB,SAASgxC,WAE7Bh9D,KAAKysB,MAAM2kC,gBAAkBpxD,KAAKqG,UAAU81C,QAChD,EACAm3B,EAAOzwE,UAAUkoC,aAAe,SAAU5sC,GACtC,GAAI6B,KAAKysB,OAASzsB,KAAKkiB,QAAS,CAC5B,GAAI/jB,IAAuB,IAAlBA,EAAEgL,cAA0BnJ,KAAKkiB,QACtC,OAAQliB,KAAKysB,MAAQ,KACzB,GAAS,GAALtuB,GAAa6B,KAAKysB,MAAME,SAAsC,SAA3B3sB,KAAKysB,MAAME,QAAQljB,KACtD,OAEJ,GADAzJ,KAAKmZ,QAAQ,uBACRnZ,KAAKysB,MACN,OACJ,IAAIE,EAAU3sB,KAAKysB,MAAME,QACrBo+C,EAAiBp+C,GAAWA,EAAQo+C,eACxC,GAAIA,EAAgB,CAChB,OAAQA,GACJ,IAAK,iBACDA,EAAiB,UACrB,IAAK,SACD/qE,KAAKgsB,SAASmJ,qBAAqB,KAAM,IACzC,MACJ,IAAK,UACL,IAAK,SACDn1B,KAAKgsB,SAASmJ,uBACd,MACJ,IAAK,gBACD,IAAI7U,EAAQtgB,KAAKqG,UAAUinB,WACvBrO,EAASjf,KAAKgsB,SAAS6W,aACvBviB,EAAMhgB,MAAMkC,KAAOyc,EAAO0C,SAAWrB,EAAM3c,IAAInB,KAAOyc,EAAOyC,WAC7D1hB,KAAKgsB,SAASooD,wBAAwBp0E,KAAKqG,UAAU0uB,OAAQ/0B,KAAKqG,UAAUC,MAEhF,MACJ,QACI,MAEc,WAAlBykE,GACA/qE,KAAKgsB,SAASqoD,iBAAiBr0E,KAAKysB,MAAMuwC,UAClD,CACA,IAAIsX,EAAMt0E,KAAKqG,UAAU81C,SACzBn8C,KAAKysB,MAAM4kC,eAAiBijB,EAC5Bt0E,KAAKg0E,SAAWh0E,KAAKqG,UAAU81C,SAC/Bn8C,KAAKkiB,QAAQulB,iBAAiB6mB,aAAagmB,GAC3Ct0E,KAAKk0E,OAASl0E,KAAKysB,MACnBzsB,KAAKysB,MAAQ,IACjB,CACJ,EACA6mD,EAAOzwE,UAAU8wE,gBAAkB,SAAUx1E,GACzC,GAAK6B,KAAKu0E,iBAAV,CAEA,IAAIC,EAAOx0E,KAAKk0E,OACZO,EAAoBz0E,KAAK00E,mBACzBC,EAAcH,EAAK7nD,SAAYxuB,EAAEwuB,QAAQljB,MAAQ+qE,EAAK7nD,QAAQljB,KAClE,GAAsB,gBAAlBtL,EAAEwuB,QAAQljB,KAAwB,CAClC,IAAIkgB,EAAOxrB,EAAEgvC,UACiB/mC,IAA1BpG,KAAK40E,mBACL50E,KAAK40E,kBAAmB,GAC5BD,EAAcA,GACP30E,KAAK40E,oBACH,KAAKzyE,KAAKwnB,IAAS,KAAKxnB,KAAKqyE,EAAKrnC,OAC3CntC,KAAK40E,kBAAmB,CAC5B,MAEID,EAAcA,IACwC,IAA/CF,EAAkBjsE,QAAQrK,EAAEwuB,QAAQljB,MAElB,UAAzBzJ,KAAKu0E,kBACF1rD,KAAKC,MAAQ9oB,KAAK60E,kBAAoB,MACzCF,GAAc,GAEdA,EACA30E,KAAKkiB,QAAQi6C,iBAAkB,GACqB,IAA/CsY,EAAkBjsE,QAAQrK,EAAEwuB,QAAQljB,QACzCzJ,KAAK60E,kBAAoBhsD,KAAKC,MAxBxB,CAyBd,EACAwqD,EAAOzwE,UAAU6pC,mBAAqB,SAAUooC,EAAiBh3D,GAC7D,GAAIg3D,GAA8C,kBAApBA,GAAmD,OAAnBA,EAA0B,CACpF90E,KAAK+0E,cAAgBD,EACrB,IAAI9lE,EAAQhP,KACZif,EAAOd,WAAW,CAAC,aAAc22D,IAAkB,SAAU3xE,GACrD6L,EAAM+lE,eAAiBD,GACvB9lE,EAAMykE,WAAW/mC,mBAAmBvpC,GAAUA,EAAOilB,SACzDtK,GAAMA,GACV,GACJ,MAEI9d,KAAK+0E,cAAgB,KACrB/0E,KAAKyzE,WAAW/mC,mBAAmBooC,GACnCh3D,GAAMA,GAEd,EACAw1D,EAAOzwE,UAAUiqC,mBAAqB,WAClC,OAAO9sC,KAAKyzE,WAAW3mC,oBAC3B,EACAwmC,EAAOzwE,UAAUixE,WAAa,SAAU5xD,GACpC,GAAIliB,KAAKkiB,SAAWA,EAApB,CAEIliB,KAAKysB,OACLzsB,KAAK+qC,eACT/qC,KAAKysB,MAAQ,CAAC,EACd,IAAIuoD,EAAah1E,KAAKkiB,QACtB,GAAI8yD,EAAY,CACZh1E,KAAKkiB,QAAQ3I,IAAI,SAAUvZ,KAAKi1E,mBAChCj1E,KAAKkiB,QAAQ3I,IAAI,aAAcvZ,KAAKy/D,eACpCz/D,KAAKkiB,QAAQ3I,IAAI,kBAAmBvZ,KAAKk1E,oBACzCl1E,KAAKkiB,QAAQ3I,IAAI,gBAAiBvZ,KAAKm1E,kBACvCn1E,KAAKkiB,QAAQ3I,IAAI,kBAAmBvZ,KAAKo1E,oBACzCp1E,KAAKkiB,QAAQ3I,IAAI,iBAAkBvZ,KAAKq1E,mBACxCr1E,KAAKkiB,QAAQ3I,IAAI,aAAcvZ,KAAKs1E,eACpCt1E,KAAKkiB,QAAQ3I,IAAI,oBAAqBvZ,KAAKu1E,sBAC3Cv1E,KAAKkiB,QAAQ3I,IAAI,mBAAoBvZ,KAAKw1E,qBAC1Cx1E,KAAKkiB,QAAQ3I,IAAI,mBAAoBvZ,KAAKy1E,qBAC1Cz1E,KAAKkiB,QAAQ3I,IAAI,mBAAoBvZ,KAAK01E,qBAC1C11E,KAAKkiB,QAAQ3I,IAAI,kBAAmBvZ,KAAK21E,iBACzC31E,KAAKkiB,QAAQ3I,IAAI,kBAAmBvZ,KAAK41E,oBACzC51E,KAAKkiB,QAAQ3I,IAAI,mBAAoBvZ,KAAK61E,qBAC1C,IAAIxvE,EAAYrG,KAAKkiB,QAAQysC,eAC7BtoD,EAAUkT,IAAI,eAAgBvZ,KAAK21E,iBACnCtvE,EAAUkT,IAAI,kBAAmBvZ,KAAK81E,mBAC1C,CACA91E,KAAKkiB,QAAUA,EACXA,GACAliB,KAAKi1E,kBAAoBj1E,KAAK+1E,iBAAiBttD,KAAKzoB,MACpDkiB,EAAQ7I,GAAG,SAAUrZ,KAAKi1E,mBAC1Bj1E,KAAKgsB,SAAS8nD,WAAW5xD,GACzBliB,KAAKy/D,cAAgBz/D,KAAKg2E,aAAavtD,KAAKzoB,MAC5CkiB,EAAQ7I,GAAG,aAAcrZ,KAAKy/D,eAC9Bz/D,KAAKk1E,mBAAqBl1E,KAAKi2E,kBAAkBxtD,KAAKzoB,MACtDkiB,EAAQ7I,GAAG,kBAAmBrZ,KAAKk1E,oBACnCl1E,KAAKm1E,iBAAmBn1E,KAAKgsB,SAASkqD,gBAAgBztD,KAAKzoB,KAAKgsB,UAChE9J,EAAQ7I,GAAG,gBAAiBrZ,KAAKm1E,kBACjCn1E,KAAKo1E,mBAAqBp1E,KAAKm2E,kBAAkB1tD,KAAKzoB,MACtDkiB,EAAQ7I,GAAG,kBAAmBrZ,KAAKo1E,oBACnCp1E,KAAKq1E,kBAAoBr1E,KAAKo2E,iBAAiB3tD,KAAKzoB,MACpDkiB,EAAQ7I,GAAG,iBAAkBrZ,KAAKq1E,mBAClCr1E,KAAKs1E,cAAgBt1E,KAAKu7D,aAAa9yC,KAAKzoB,MAC5CkiB,EAAQ7I,GAAG,aAAcrZ,KAAKs1E,eAC9Bt1E,KAAKu1E,qBAAuBv1E,KAAKq2E,oBAAoB5tD,KAAKzoB,MAC1DA,KAAKkiB,QAAQ7I,GAAG,oBAAqBrZ,KAAKu1E,sBAC1Cv1E,KAAKw1E,oBAAsBx1E,KAAKs2E,mBAAmB7tD,KAAKzoB,MACxDA,KAAKkiB,QAAQ7I,GAAG,mBAAoBrZ,KAAKw1E,qBACzCx1E,KAAKy1E,oBAAsBz1E,KAAKu2E,mBAAmB9tD,KAAKzoB,MACxDA,KAAKkiB,QAAQ7I,GAAG,mBAAoBrZ,KAAKy1E,qBACzCz1E,KAAK01E,oBAAsB11E,KAAKw2E,mBAAmB/tD,KAAKzoB,MACxDA,KAAKkiB,QAAQ7I,GAAG,mBAAoBrZ,KAAK01E,qBACzC11E,KAAK21E,gBAAkB31E,KAAKy2E,eAAehuD,KAAKzoB,MAChDA,KAAKkiB,QAAQ7I,GAAG,kBAAmBrZ,KAAK21E,iBACxC31E,KAAK41E,mBAAqB51E,KAAK02E,kBAAkBjuD,KAAKzoB,MACtDA,KAAKkiB,QAAQ7I,GAAG,kBAAmBrZ,KAAK41E,oBACxC51E,KAAK61E,oBAAsB71E,KAAK22E,mBAAmBluD,KAAKzoB,MACxDA,KAAKkiB,QAAQ7I,GAAG,mBAAoBrZ,KAAK61E,qBACzC71E,KAAKqG,UAAY6b,EAAQysC,eACzB3uD,KAAKqG,UAAUgT,GAAG,eAAgBrZ,KAAK21E,iBACvC31E,KAAK81E,mBAAqB91E,KAAK42E,kBAAkBnuD,KAAKzoB,MACtDA,KAAKqG,UAAUgT,GAAG,kBAAmBrZ,KAAK81E,oBAC1C91E,KAAKg2E,eACLh2E,KAAKy2E,iBACLz2E,KAAK02E,oBACL12E,KAAK22E,qBACL32E,KAAK42E,oBACL52E,KAAKq2E,sBACLr2E,KAAKs2E,qBACLt2E,KAAKu2E,qBACLv2E,KAAKw2E,qBACLx2E,KAAKkiB,QAAQypB,kBAAoB3rC,KAAKgsB,SAAS22C,kBAC/C3iE,KAAKgsB,SAAS4jD,eAGd5vE,KAAKqG,UAAY,KACjBrG,KAAKgsB,SAAS8nD,WAAW5xD,IAE7BliB,KAAKmZ,QAAQ,gBAAiB,CAC1B+I,QAASA,EACT8yD,WAAYA,IAEhBh1E,KAAKysB,MAAQ,KACbuoD,GAAcA,EAAW77D,QAAQ,eAAgB,CAAE09D,UAAW72E,OAC9DkiB,GAAWA,EAAQ/I,QAAQ,eAAgB,CAAEma,OAAQtzB,OACjDkiB,IAAYA,EAAQu5C,WACpBv5C,EAAQo5C,YAAY5O,eAnFd,CAoFd,EACA4mB,EAAOzwE,UAAUi0E,WAAa,WAC1B,OAAO92E,KAAKkiB,OAChB,EACAoxD,EAAOzwE,UAAUymD,SAAW,SAAU5/C,EAAKw/B,GAQvC,OAPAlpC,KAAKkiB,QAAQhe,IAAIolD,SAAS5/C,GACrBw/B,EAEiB,GAAbA,EACLlpC,KAAK4rE,mBACc,GAAd1iC,GACLlpC,KAAKyrE,oBAJLzrE,KAAK4tB,YAKFlkB,CACX,EACA4pE,EAAOzwE,UAAU6vC,SAAW,WACxB,OAAO1yC,KAAKkiB,QAAQwwB,UACxB,EACA4gC,EAAOzwE,UAAU8rD,aAAe,WAC5B,OAAO3uD,KAAKqG,SAChB,EACAitE,EAAOzwE,UAAUk0E,OAAS,SAAUnW,GAChC5gE,KAAKgsB,SAASgrD,SAASpW,EAC3B,EACA0S,EAAOzwE,UAAU+1B,SAAW,SAAUC,EAAO/a,GACzC9d,KAAKgsB,SAAS4M,SAASC,EAAO/a,EAClC,EACAw1D,EAAOzwE,UAAUo0E,SAAW,WACxB,OAAOj3E,KAAKgsB,SAASirD,UACzB,EACA3D,EAAOzwE,UAAUmT,SAAW,SAAUxD,GAClCxS,KAAKgsB,SAAShW,SAASxD,EAC3B,EACA8gE,EAAOzwE,UAAU2yB,WAAa,SAAUhjB,GACpCxS,KAAKgsB,SAASwJ,WAAWhjB,EAC7B,EACA8gE,EAAOzwE,UAAUq0E,YAAc,WAC3B,OAAOl3E,KAAKqb,UAAU,aAClBtE,EAAIjB,cAAc9V,KAAKuU,WAAW2V,QAC1C,EACAopD,EAAOzwE,UAAUs0E,YAAc,SAAUljC,GACrCj0C,KAAK+a,UAAU,WAAYk5B,EAC/B,EACAq/B,EAAOzwE,UAAUu0E,mBAAqB,WAClC,IAAIp3E,KAAKq3E,kBAAT,CAGA,IAAIjzC,EAAOpkC,KACXA,KAAKq3E,mBAAoB,EACzB3oE,YAAW,WACP01B,EAAKizC,mBAAoB,EACzB,IAAIn1D,EAAUkiB,EAAKliB,QACnB,GAAKA,IAAWA,EAAQu5C,UAAxB,CAEIv5C,EAAQo1D,oBACRp1D,EAAQo1D,kBAAkBC,UAAUpsE,SAAQ,SAAUpC,GAClDmZ,EAAQsb,aAAaz0B,EACzB,IACAmZ,EAAQo1D,kBAAoB,MAEhC,IAAIvjD,EAAMqQ,EAAK6Q,oBACX7sB,EAAUgc,EAAK0I,qBACfwK,EAAclvB,GAAWA,EAAQovD,2BAA6BpvD,EAAQovD,0BAA0BpzC,GAChGiY,EAASn6B,EAAQg3C,yBAAyBnlC,EAAKujB,GACnD,IAAK+E,EAAQ,CACT,IAAItkB,EAAW,IAAI/0B,EAAckf,EAAS6R,EAAIvxB,IAAKuxB,EAAItxB,QACnD9D,EAAQo5B,EAASxzB,kBACrB,GAAI5F,GAAS,0BAA0BwD,KAAKxD,EAAMqC,MAAO,CACrD,IAAIy2E,EAAiBv1D,EAAQw3C,gBAAgB3lC,GACzC0jD,IACAp7B,EAAS,CAACo7B,EAAetd,YAAasd,EAAeld,cAC7D,CACJ,CAGA,IAFKle,GAAUn6B,EAAQmhC,MAAMl9C,cACzBk2C,EAASn6B,EAAQmhC,MAAMl9C,YAAYi+B,EAAKliB,UACvCm6B,EAAL,CAKA,IAAIq7B,EAAa,cACZlsE,MAAMmB,QAAQ0vC,GAGO,GAAjBA,EAAO17C,SACZ+2E,EAAa,qBAHbr7B,EAAS,CAACA,GAKO,GAAjBA,EAAO17C,SACoD,GAAvDsB,EAAMsgB,cAAc85B,EAAO,GAAG14C,IAAK04C,EAAO,GAAG/7C,OAC7C+7C,EAAS,CAACp6C,EAAM2f,WAAWy6B,EAAO,GAAG/7C,MAAO+7C,EAAO,GAAG14C,MACM,GAAvD1B,EAAMsgB,cAAc85B,EAAO,GAAG/7C,MAAO+7C,EAAO,GAAG14C,OACpD04C,EAAS,CAACp6C,EAAM2f,WAAWy6B,EAAO,GAAG/7C,MAAO+7C,EAAO,GAAG14C,QAE9Due,EAAQo1D,kBAAoB,CACxBj7B,OAAQA,EACRk7B,UAAWl7B,EAAO/wC,KAAI,SAAUgV,GAC5B,OAAO4B,EAAQwa,UAAUpc,EAAOo3D,EAAY,OAChD,KAEAtzC,EAAKuzC,4BACLvzC,EAAKpY,SAAS4rD,WAAWC,uBArB7B,MAHQzzC,EAAKuzC,4BACLvzC,EAAKpY,SAAS4rD,WAAWC,uBAxBvB,CAgDd,GAAG,GAvDH,CAwDJ,EACAvE,EAAOzwE,UAAUkpB,MAAQ,WACrB/rB,KAAK8xB,UAAU/F,OACnB,EACAunD,EAAOzwE,UAAUkoB,UAAY,WACzB,OAAO/qB,KAAK8xB,UAAU/G,WAC1B,EACAuoD,EAAOzwE,UAAU2pB,KAAO,WACpBxsB,KAAK8xB,UAAUtF,MACnB,EACA8mD,EAAOzwE,UAAU+oB,QAAU,SAAUztB,GAC7B6B,KAAK83E,aAET93E,KAAK83E,YAAa,EAClB93E,KAAKgsB,SAAS+rD,aACd/3E,KAAKgsB,SAASgsD,iBACdh4E,KAAK4Y,MAAM,QAASza,GACxB,EACAm1E,EAAOzwE,UAAU6oB,OAAS,SAAUvtB,GAC3B6B,KAAK83E,aAEV93E,KAAK83E,YAAa,EAClB93E,KAAKgsB,SAASisD,aACdj4E,KAAKgsB,SAASksD,gBACdl4E,KAAK4Y,MAAM,OAAQza,GACvB,EACAm1E,EAAOzwE,UAAUs1E,cAAgB,WAC7Bn4E,KAAKgsB,SAASosD,eACdp4E,KAAKo3E,qBACLp3E,KAAKq4E,4BACT,EACA/E,EAAOzwE,UAAUkzE,iBAAmB,SAAU9iC,GAC1C,IAAIqzB,EAAOtmE,KAAKkiB,QAAQ0xB,aACpBjyB,EAAWsxB,EAAM3yC,MAAMkC,KAAOywC,EAAMtvC,IAAInB,IAAMywC,EAAMtvC,IAAInB,IAAM0iD,IAClEllD,KAAKgsB,SAASssD,YAAYrlC,EAAM3yC,MAAMkC,IAAKmf,EAAS2kD,GACpDtmE,KAAKmZ,QAAQ,SAAU85B,GACvBjzC,KAAKm4E,eACT,EACA7E,EAAOzwE,UAAUozE,kBAAoB,SAAU93E,GAC3C,IAAIq9C,EAAOr9C,EAAEqc,KACbxa,KAAKgsB,SAASssD,YAAY98B,EAAKiR,MAAOjR,EAAK5uC,KAC/C,EACA0mE,EAAOzwE,UAAU6zE,kBAAoB,WACjC12E,KAAKgsB,SAASusD,UAAUv4E,KAAKkiB,QAAQ4mB,eACzC,EACAwqC,EAAOzwE,UAAU8zE,mBAAqB,WAClC32E,KAAKgsB,SAASwsD,UAAUx4E,KAAKkiB,QAAQm+C,gBACzC,EACAiT,EAAOzwE,UAAU4zE,eAAiB,WAC9Bz2E,KAAKm4E,gBACLn4E,KAAKmZ,QAAQ,kBACjB,EACAm6D,EAAOzwE,UAAUw1E,2BAA6B,WAC1C,IACIxZ,EADA38C,EAAUliB,KAAK82E,aAUnB,GARI92E,KAAKy4E,uBACuB,QAAxBz4E,KAAK04E,iBAA8B14E,KAAKqG,UAAUgb,gBAClDw9C,EAAY7+D,KAAKi1C,qBACjBj1C,KAAKgsB,SAAS6M,OAAS74B,KAAKgsB,SAAS6M,MAAM8/C,0BAA4B34E,KAAKqG,UAAUyb,YACtF+8C,GAAY,IACZ7+D,KAAKgsB,SAAS4sD,WAA0C,IAA7B54E,KAAKkiB,QAAQmc,aAAuBr+B,KAAKgsB,SAAS6sD,UAAY,IACzFha,GAAY,IAEhB38C,EAAQ42D,uBAAyBja,EACjC38C,EAAQsb,aAAatb,EAAQ42D,qBAAqB/vE,IAClDmZ,EAAQ42D,qBAAuB,UAE9B,IAAK52D,EAAQ42D,sBAAwBja,EAAW,CACjD,IAAIv+C,EAAQ,IAAIre,EAAM48D,EAAUr8D,IAAKq8D,EAAUp8D,OAAQo8D,EAAUr8D,IAAK0iD,KACtE5kC,EAAMvX,GAAKmZ,EAAQwa,UAAUpc,EAAO,kBAAmB,cACvD4B,EAAQ42D,qBAAuBx4D,CACnC,MACSu+C,IACL38C,EAAQ42D,qBAAqBx4E,MAAMkC,IAAMq8D,EAAUr8D,IACnD0f,EAAQ42D,qBAAqBn1E,IAAInB,IAAMq8D,EAAUr8D,IACjD0f,EAAQ42D,qBAAqBx4E,MAAMmC,OAASo8D,EAAUp8D,OACtDyf,EAAQ/I,QAAQ,oBAExB,EACAm6D,EAAOzwE,UAAU+zE,kBAAoB,SAAUz4E,GAC3C,IAAI+jB,EAAUliB,KAAKkiB,QAKnB,GAJIA,EAAQ62D,kBACR72D,EAAQsb,aAAatb,EAAQ62D,kBAEjC72D,EAAQ62D,iBAAmB,KACtB/4E,KAAKqG,UAAUyb,UAMhB9hB,KAAKq4E,iCANsB,CAC3B,IAAI/3D,EAAQtgB,KAAKqG,UAAUinB,WACvB9a,EAAQxS,KAAKwjC,oBACjBthB,EAAQ62D,iBAAmB72D,EAAQwa,UAAUpc,EAAO,gBAAiB9N,EACzE,CAIA,IAAIiL,EAAKzd,KAAKg5E,wBAA0Bh5E,KAAKi5E,+BAC7Cj5E,KAAKkiB,QAAQ28C,UAAUphD,GACvBzd,KAAKmZ,QAAQ,kBACjB,EACAm6D,EAAOzwE,UAAUo2E,6BAA+B,WAC5C,IAAI/2D,EAAUliB,KAAKkiB,QACf7b,EAAYrG,KAAKgwB,oBACrB,IAAI3pB,EAAUyb,YAAazb,EAAUgb,cAArC,CAEA,IAAInB,EAAc7Z,EAAU/F,MAAMmC,OAC9B2d,EAAY/Z,EAAU1C,IAAIlB,OAC1B2M,EAAO8S,EAAQ7f,QAAQgE,EAAU/F,MAAMkC,KACvC2kE,EAAS/3D,EAAK4kC,UAAU9zB,EAAaE,GACzC,KAAI+mD,EAAOxmE,OAAS,MAAS,SAASwB,KAAKglE,GAA3C,CAEA,IAAI1pD,EAAKzd,KAAK0zE,QAAQtM,gBAAgB,CAClCQ,WAAW,EACXF,eAAe,EACfP,OAAQA,IAER+R,EAAmB9pE,EAAK4kC,UAAU9zB,EAAc,EAAGE,EAAY,GACnE,GAAK3C,EAAGtb,KAAK+2E,GAEb,OAAOz7D,CATG,CANA,CAgBd,EACA61D,EAAOzwE,UAAUwzE,oBAAsB,WACnCr2E,KAAKgsB,SAASmtD,oBAClB,EACA7F,EAAOzwE,UAAUyzE,mBAAqB,WAClCt2E,KAAKgsB,SAASotD,mBAClB,EACA9F,EAAOzwE,UAAU0zE,mBAAqB,WAClCv2E,KAAKgsB,SAASqtD,mBAClB,EACA/F,EAAOzwE,UAAU2zE,mBAAqB,WAClCx2E,KAAKgsB,SAAS2wC,eAAe38D,KAAKkiB,QAAQ88C,iBAC9C,EACAsU,EAAOzwE,UAAUmzE,aAAe,SAAU73E,GACtC6B,KAAKgsB,SAASstD,aACdt5E,KAAK4Y,MAAM,aAAcza,EAC7B,EACAm1E,EAAOzwE,UAAUszE,kBAAoB,WACjCn2E,KAAKgsB,SAAS4jD,YAClB,EACA0D,EAAOzwE,UAAUuzE,iBAAmB,WAChCp2E,KAAKgsB,SAASgrD,UAAS,EAC3B,EACA1D,EAAOzwE,UAAU04D,aAAe,WAC5Bv7D,KAAKq4E,6BACLr4E,KAAKgsB,SAAS4jD,YAClB,EACA0D,EAAOzwE,UAAU02E,gBAAkB,WAC/B,OAAOv5E,KAAKkiB,QAAQwiB,aAAa1kC,KAAKgwB,oBAC1C,EACAsjD,EAAOzwE,UAAU0sB,YAAc,WAC3B,IAAI5F,EAAO3pB,KAAKu5E,kBACZC,EAAKx5E,KAAKkiB,QAAQhe,IAAIslD,sBACtBiwB,GAAW,EACf,IAAK9vD,GAAQ3pB,KAAK6sE,wBAAyB,CACvC4M,GAAW,EAEX,IADA,IAAIp9B,EAASr8C,KAAKqG,UAAUglE,eACnB9sE,EAAI,EAAGA,EAAI89C,EAAO17C,OAAQpC,IAAK,CACpC,IAAI+hB,EAAQ+7B,EAAO99C,GACfA,GAAK89C,EAAO99C,EAAI,GAAG+B,MAAMkC,KAAO8d,EAAMhgB,MAAMkC,MAEhDmnB,GAAQ3pB,KAAKkiB,QAAQ7f,QAAQie,EAAMhgB,MAAMkC,KAAOg3E,EACpD,CACJ,CACA,IAAIr7E,EAAI,CAAEwrB,KAAMA,GAGhB,OAFA3pB,KAAKmZ,QAAQ,OAAQhb,GACrB8qB,EAAUN,WAAW8wD,GAAWt7E,EAAEwrB,KAC3BxrB,EAAEwrB,IACb,EACA2pD,EAAOzwE,UAAU4sB,OAAS,WACtBzvB,KAAK2yB,SAASxuB,KAAK,OAAQnE,KAC/B,EACAszE,EAAOzwE,UAAU2sB,MAAQ,WACrBxvB,KAAK2yB,SAASxuB,KAAK,MAAOnE,KAC9B,EACAszE,EAAOzwE,UAAUqrB,QAAU,SAAUvE,EAAMX,GACvC,IAAI7qB,EAAI,CAAEwrB,KAAMA,EAAMX,MAAOA,GAC7BhpB,KAAK2yB,SAASxuB,KAAK,QAASnE,KAAM7B,EACtC,EACAm1E,EAAOzwE,UAAUiqE,aAAe,SAAU3uE,GACtB,iBAALA,IACPA,EAAI,CAAEwrB,KAAMxrB,IAChB6B,KAAKmZ,QAAQ,QAAShb,GACtB,IAAIwrB,EAAOxrB,EAAEwrB,KACThB,EAAWgB,IAASV,EAAUN,SAC9BzG,EAAUliB,KAAKkiB,QACnB,IAAKliB,KAAKu0B,mBAAqBv0B,KAAK05E,uBAC5B/wD,EACAzG,EAAQqjB,OAAO,CAAE/iC,IAAKxC,KAAKqG,UAAUC,KAAK9D,IAAKC,OAAQ,GAAKknB,GAE5D3pB,KAAKulC,OAAO5b,QAEf,GAAIhB,EACL3oB,KAAKqG,UAAUm2C,UAAUH,OAAOlxC,SAAQ,SAAUmV,GAC9C4B,EAAQqjB,OAAO,CAAE/iC,IAAK8d,EAAMhgB,MAAMkC,IAAKC,OAAQ,GAAKknB,EACxD,QAEC,CACD,IAAI4D,EAAQ5D,EAAK7oB,MAAM,cACnBu7C,EAASr8C,KAAKqG,UAAUm2C,UAAUH,OAClCs9B,EAA6B,GAAhBpsD,EAAM5sB,UAAiB4sB,EAAM,KAAOA,EAAM,IAC3D,GAAIA,EAAM5sB,QAAU07C,EAAO17C,QAAUg5E,EACjC,OAAO35E,KAAK2yB,SAASxuB,KAAK,eAAgBnE,KAAM2pB,GACpD,IAAK,IAAIprB,EAAI89C,EAAO17C,OAAQpC,KAAM,CAC9B,IAAI+hB,EAAQ+7B,EAAO99C,GACd+hB,EAAMwB,WACPI,EAAQhc,OAAOoa,GACnB4B,EAAQqjB,OAAOjlB,EAAMhgB,MAAOitB,EAAMhvB,GACtC,CACJ,CACJ,EACA+0E,EAAOzwE,UAAUisB,YAAc,SAAUnC,EAASwgB,GAC9C,OAAOntC,KAAK2yB,SAASxuB,KAAKwoB,EAAS3sB,KAAMmtC,EAC7C,EACAmmC,EAAOzwE,UAAU0iC,OAAS,SAAU5b,EAAMG,GACtC,IAAI5H,EAAUliB,KAAKkiB,QACf+kB,EAAO/kB,EAAQi+C,UACf10C,EAASzrB,KAAKi1C,oBAClB,GAAIj1C,KAAK45E,yBAA2B9vD,EAAQ,CACxC,IAAItT,EAAYywB,EAAKogB,gBAAgBnlC,EAAQ0qC,SAASnhC,EAAOjpB,KAAM,YAAaxC,KAAMkiB,EAASyH,GAC3FnT,IACImT,IAASnT,EAAUmT,OACd3pB,KAAK05E,yBACN15E,KAAKkiB,QAAQi6C,iBAAkB,EAC/Bn8D,KAAK40E,kBAAmB,IAGhCjrD,EAAOnT,EAAUmT,KAEzB,CAGA,GAFY,MAARA,IACAA,EAAO3pB,KAAKkiB,QAAQlc,gBACnBhG,KAAKqG,UAAUyb,WAKf,GAAI9hB,KAAKkiB,QAAQuzB,iBAAyC,GAAvB9rB,EAAKnhB,QAAQ,MAAa,CAC1D8X,EAAQre,EAAM2f,WAAW6J,EAAQA,GACrCnL,EAAM3c,IAAIlB,QAAUknB,EAAKhpB,OACzBX,KAAKkiB,QAAQhc,OAAOoa,EACxB,MAT+B,CAC3B,IAAIA,EAAQtgB,KAAKgwB,oBACjBvE,EAASzrB,KAAKkiB,QAAQhc,OAAOoa,GAC7BtgB,KAAKyjC,gBACT,CAMA,GAAY,MAAR9Z,GAAwB,QAARA,EAAgB,CAChC,IAAIva,EAAO8S,EAAQ7f,QAAQopB,EAAOjpB,KAClC,GAAIipB,EAAOhpB,OAAS2M,EAAKurC,OAAO,QAAS,CACrC,IAAI56C,EAAIqP,EAAKilC,OAAO5oB,EAAOhpB,QAAQk4C,OAAO,QAC1Cz4B,EAAQhe,IAAIkxC,aAAa3pB,EAAOjpB,IAAKipB,EAAOhpB,OAAQgpB,EAAOhpB,OAAS1C,EACxE,CACJ,CACAC,KAAKyjC,iBACL,IAAInjC,EAAQmrB,EAAOhpB,OACfo3E,EAAY33D,EAAQ0qC,SAASnhC,EAAOjpB,KAEpCs3E,GADA1qE,EAAO8S,EAAQ7f,QAAQopB,EAAOjpB,KACdykC,EAAK/kC,aAAa23E,EAAWzqE,EAAMua,IAUvD,GATAzH,EAAQqjB,OAAO9Z,EAAQ9B,GACnBnT,GAAaA,EAAUnQ,YACW,GAA9BmQ,EAAUnQ,UAAU1F,OACpBX,KAAKqG,UAAU+mB,kBAAkB,IAAInrB,EAAMwpB,EAAOjpB,IAAKlC,EAAQkW,EAAUnQ,UAAU,GAAIolB,EAAOjpB,IAAKlC,EAAQkW,EAAUnQ,UAAU,KAG/HrG,KAAKqG,UAAU+mB,kBAAkB,IAAInrB,EAAMwpB,EAAOjpB,IAAMgU,EAAUnQ,UAAU,GAAImQ,EAAUnQ,UAAU,GAAIolB,EAAOjpB,IAAMgU,EAAUnQ,UAAU,GAAImQ,EAAUnQ,UAAU,MAGrKrG,KAAK+5E,kBAAmB,CACxB,GAAI73D,EAAQu0B,cAAcsT,UAAUpgC,GAAO,CACvC,IAAIqwD,EAAa/yC,EAAKrhC,kBAAkBi0E,EAAWzqE,EAAKnJ,MAAM,EAAGwlB,EAAOhpB,QAASyf,EAAQlc,gBACzFkc,EAAQqjB,OAAO,CAAE/iC,IAAKipB,EAAOjpB,IAAM,EAAGC,OAAQ,GAAKu3E,EACvD,CACIF,GACA7yC,EAAK7kC,YAAYy3E,EAAW33D,EAASuJ,EAAOjpB,IACpD,CACJ,EACA8wE,EAAOzwE,UAAUgrE,WAAa,WAC1B,IAEI5tD,EAAUE,EAFV+B,EAAUliB,KAAKkiB,QACf+kB,EAAO/kB,EAAQi+C,UAEnB,GAAIngE,KAAKqG,UAAUyb,UACf7B,EAAW,EACXE,EAAS+B,EAAQhe,IAAIm6B,YAAc,MAElC,CACD,IAAI47C,EAAgBj6E,KAAKgwB,oBACzB/P,EAAWg6D,EAAc35E,MAAMkC,IAC/B2d,EAAS85D,EAAct2E,IAAInB,GAC/B,CAMA,IALA,IAGI4M,EAAM8qE,EAAY55D,EAHlB65D,EAAgB,GAChB3sD,EAAW,GACXwsD,EAAa,GAEbvzB,EAAMvkC,EAAQlc,eACTxD,EAAMyd,EAAUzd,GAAO2d,EAAQ3d,IAChCA,EAAM,IACN23E,EAAgBj4D,EAAQ0qC,SAASpqD,EAAM,GACvCgrB,EAAWtL,EAAQ7f,QAAQG,EAAM,GACjCw3E,EAAa/yC,EAAKrhC,kBAAkBu0E,EAAe3sD,EAAUi5B,IAEjEr3C,EAAO8S,EAAQ7f,QAAQG,GACvB03E,EAAajzC,EAAKvkC,WAAW0M,GACzB4qE,IAAeE,IACXA,EAAWv5E,OAAS,IACpB2f,EAAQ,IAAIre,EAAMO,EAAK,EAAGA,EAAK03E,EAAWv5E,QAC1CuhB,EAAQhc,OAAOoa,IAEf05D,EAAWr5E,OAAS,GACpBuhB,EAAQqjB,OAAO,CAAE/iC,IAAKA,EAAKC,OAAQ,GAAKu3E,IAGhD/yC,EAAK7kC,YAAY+3E,EAAej4D,EAAS1f,EAEjD,EACA8wE,EAAOzwE,UAAU6rB,YAAc,SAAU/E,EAAMywD,GAC3C,IAAKA,EACD,OAAOp6E,KAAKyzE,WAAW/kD,YAAY/E,GACvC3pB,KAAKgrC,eAAe,CAAEre,QAAS,CAAEljB,KAAM,kBACvC,IAAI4wE,EAAmBr6E,KAAKq6E,iBAAiB5xD,KAAKzoB,KAAM2pB,EAAMywD,GAC1Dp6E,KAAKqG,UAAU+1C,WACfp8C,KAAKs6E,iBAAiBD,GAEtBA,IACJr6E,KAAK+qC,cACT,EACAuoC,EAAOzwE,UAAUw3E,iBAAmB,SAAU1wD,EAAMywD,GAChD,GAAIA,EAAYjsD,YAAcisD,EAAYhsD,YAAa,CACnD,IAAI9vB,EAAI0B,KAAKqG,UAAUinB,WACvBhvB,EAAEgC,MAAMmC,QAAU23E,EAAYjsD,WAC9B7vB,EAAEqF,IAAIlB,QAAU23E,EAAYhsD,YACxB9vB,EAAEgC,MAAMmC,OAAS,IACjBnE,EAAEgC,MAAMkC,MACRlE,EAAEgC,MAAMmC,QAAUzC,KAAKkiB,QAAQ7f,QAAQ/D,EAAEgC,MAAMkC,KAAK7B,OAAS,GAEjEX,KAAKqG,UAAUsiC,SAASrqC,GACnBqrB,GAASrrB,EAAEwjB,WACZ9hB,KAAKkG,QACb,CAGA,IAFIyjB,GAAS3pB,KAAKqG,UAAUyb,WACxB9hB,KAAKulC,OAAO5b,GAAM,GAClBywD,EAAY9rD,cAAgB8rD,EAAY7rD,WAAY,CAChDjwB,EAAI0B,KAAKqG,UAAUinB,WACvBhvB,EAAEgC,MAAMmC,QAAU23E,EAAY9rD,aAC9BhwB,EAAEqF,IAAIlB,QAAU23E,EAAY7rD,WAC5BvuB,KAAKqG,UAAUsiC,SAASrqC,EAC5B,CACJ,EACAg1E,EAAOzwE,UAAU8sB,aAAe,SAAUxxB,EAAG8oB,EAAQxD,GACjD,OAAOzjB,KAAKyzE,WAAW9jD,aAAaxxB,EAAG8oB,EAAQxD,EACnD,EACA6vD,EAAOzwE,UAAUi7D,aAAe,SAAUC,GACtC/9D,KAAKkiB,QAAQ47C,aAAaC,EAC9B,EACAuV,EAAOzwE,UAAU4yC,aAAe,WAC5B,OAAOz1C,KAAKkiB,QAAQuzB,cACxB,EACA69B,EAAOzwE,UAAUo7D,gBAAkB,WAC/Bj+D,KAAKkiB,QAAQ+7C,iBACjB,EACAqV,EAAOzwE,UAAU03E,eAAiB,SAAU/jD,GACxCx2B,KAAK+a,UAAU,cAAeyb,EAClC,EACA88C,EAAOzwE,UAAU23E,eAAiB,WAC9B,OAAOx6E,KAAKqb,UAAU,cAC1B,EACAi4D,EAAOzwE,UAAU43E,aAAe,SAAUtvC,GACtCnrC,KAAK+a,UAAU,YAAaowB,EAChC,EACAmoC,EAAOzwE,UAAUkjC,aAAe,WAC5B,OAAO/lC,KAAKqb,UAAU,YAC1B,EACAi4D,EAAOzwE,UAAU63E,kBAAoB,SAAUhxE,GAC3C1J,KAAK+a,UAAU,iBAAkBrR,EACrC,EACA4pE,EAAOzwE,UAAU2gC,kBAAoB,WACjC,OAAOxjC,KAAKqb,UAAU,iBAC1B,EACAi4D,EAAOzwE,UAAU83E,uBAAyB,SAAUC,GAChD56E,KAAK+a,UAAU,sBAAuB6/D,EAC1C,EACAtH,EAAOzwE,UAAUg4E,uBAAyB,WACtC,OAAO76E,KAAKqb,UAAU,sBAC1B,EACAi4D,EAAOzwE,UAAUi4E,uBAAyB,SAAUF,GAChD56E,KAAK+a,UAAU,sBAAuB6/D,EAC1C,EACAtH,EAAOzwE,UAAUk4E,uBAAyB,WACtC,OAAO/6E,KAAKqb,UAAU,sBAC1B,EACAi4D,EAAOzwE,UAAUm4E,yBAA2B,SAAUJ,GAClD56E,KAAK+a,UAAU,wBAAyB6/D,EAC5C,EACAtH,EAAOzwE,UAAUo4E,yBAA2B,WACxC,OAAOj7E,KAAKg5E,sBAChB,EACA1F,EAAOzwE,UAAUq4E,kBAAoB,SAAUC,GAC3Cn7E,KAAKgsB,SAASkvD,kBAAkBC,EACpC,EACA7H,EAAOzwE,UAAUu4E,kBAAoB,WACjC,OAAOp7E,KAAKgsB,SAASovD,mBACzB,EACA9H,EAAOzwE,UAAU8xC,kBAAoB,SAAU5C,GAC3C/xC,KAAKgsB,SAAS2oB,kBAAkB5C,EACpC,EACAuhC,EAAOzwE,UAAUw4E,kBAAoB,WACjC,OAAOr7E,KAAKgsB,SAASqvD,mBACzB,EACA/H,EAAOzwE,UAAUy4E,uBAAyB,SAAUlmE,GAChDpV,KAAKgsB,SAASsvD,uBAAuBlmE,EACzC,EACAk+D,EAAOzwE,UAAU04E,uBAAyB,WACtC,OAAOv7E,KAAKgsB,SAASuvD,wBACzB,EACAjI,EAAOzwE,UAAU24E,yBAA2B,SAAU3c,GAClD7+D,KAAKgsB,SAASwvD,yBAAyB3c,EAC3C,EACAyU,EAAOzwE,UAAU80E,yBAA2B,WACxC,OAAO33E,KAAKgsB,SAAS2rD,0BACzB,EACArE,EAAOzwE,UAAU44E,mBAAqB,SAAUC,GAC5C17E,KAAKgsB,SAASyvD,mBAAmBC,EACrC,EACApI,EAAOzwE,UAAU84E,mBAAqB,WAClC,OAAO37E,KAAKgsB,SAAS2vD,oBACzB,EACArI,EAAOzwE,UAAU+4E,qBAAuB,SAAUF,GAC9C17E,KAAKgsB,SAAS4vD,qBAAqBF,EACvC,EACApI,EAAOzwE,UAAUg5E,qBAAuB,WACpC,OAAO77E,KAAKgsB,SAAS6vD,sBACzB,EACAvI,EAAOzwE,UAAUmuB,YAAc,SAAUD,GACrC/wB,KAAK+a,UAAU,WAAYgW,EAC/B,EACAuiD,EAAOzwE,UAAU0hC,YAAc,WAC3B,OAAOvkC,KAAKqb,UAAU,WAC1B,EACAi4D,EAAOzwE,UAAUi5E,qBAAuB,SAAUC,GAC9C/7E,KAAK+a,UAAU,oBAAqBghE,EACxC,EACAzI,EAAOzwE,UAAU+2E,qBAAuB,WACpC,OAAO55E,KAAKqb,UAAU,oBAC1B,EACAi4D,EAAOzwE,UAAUm5E,yBAA2B,SAAUD,GAClD/7E,KAAK+a,UAAU,wBAAyBghE,EAC5C,EACAzI,EAAOzwE,UAAUy/C,yBAA2B,WACxC,OAAOtiD,KAAKqb,UAAU,wBAC1B,EACAi4D,EAAOzwE,UAAUo5E,mBAAqB,SAAUnjD,GAC5C94B,KAAK+a,UAAU,kBAAmB+d,EACtC,EACAw6C,EAAOzwE,UAAUq5E,mBAAqB,WAClC,OAAOl8E,KAAKqb,UAAU,kBAC1B,EACAi4D,EAAOzwE,UAAUs5E,mBAAqB,SAAUC,GAC5Cp8E,KAAK+a,UAAU,kBAAmBqhE,EACtC,EACA9I,EAAOzwE,UAAUw5E,mBAAqB,WAClC,OAAOr8E,KAAKqb,UAAU,kBAC1B,EACAi4D,EAAOzwE,UAAUqD,OAAS,SAAUknC,GAC5BptC,KAAKqG,UAAUyb,YACJ,QAAPsrB,EACAptC,KAAKqG,UAAUoyC,aAEfz4C,KAAKqG,UAAUkyC,eAEvB,IAAIj4B,EAAQtgB,KAAKgwB,oBACjB,GAAIhwB,KAAK45E,uBAAwB,CAC7B,IAAI13D,EAAUliB,KAAKkiB,QACfmkB,EAAQnkB,EAAQ0qC,SAAStsC,EAAMhgB,MAAMkC,KACrC85E,EAAYp6D,EAAQi+C,UAAU9Y,gBAAgBhhB,EAAO,WAAYrmC,KAAMkiB,EAAS5B,GACpF,GAAyB,IAArBA,EAAM3c,IAAIlB,OAAc,CACxB,IAAIknB,EAAOzH,EAAQwiB,aAAapkB,GAChC,GAA6B,MAAzBqJ,EAAKA,EAAKhpB,OAAS,GAAY,CAC/B,IAAIyO,EAAO8S,EAAQ7f,QAAQie,EAAM3c,IAAInB,KACjC,QAAQL,KAAKiN,KACbkR,EAAM3c,IAAIlB,OAAS2M,EAAKzO,OAEhC,CACJ,CACI27E,IACAh8D,EAAQg8D,EAChB,CACAt8E,KAAKkiB,QAAQhc,OAAOoa,GACpBtgB,KAAKyjC,gBACT,EACA6vC,EAAOzwE,UAAU0qE,gBAAkB,WAC3BvtE,KAAKqG,UAAUyb,WACf9hB,KAAKqG,UAAU8yC,kBACnBn5C,KAAKkiB,QAAQhc,OAAOlG,KAAKgwB,qBACzBhwB,KAAKyjC,gBACT,EACA6vC,EAAOzwE,UAAUyqE,eAAiB,WAC1BttE,KAAKqG,UAAUyb,WACf9hB,KAAKqG,UAAUgzC,iBACnBr5C,KAAKkiB,QAAQhc,OAAOlG,KAAKgwB,qBACzBhwB,KAAKyjC,gBACT,EACA6vC,EAAOzwE,UAAUuqE,kBAAoB,WAC7BptE,KAAKqG,UAAUyb,WACf9hB,KAAKqG,UAAUsyC,kBACf34C,KAAKqG,UAAUyb,WACf9hB,KAAKqG,UAAUoyC,aACnBz4C,KAAKkiB,QAAQhc,OAAOlG,KAAKgwB,qBACzBhwB,KAAKyjC,gBACT,EACA6vC,EAAOzwE,UAAUwqE,gBAAkB,WAC3BrtE,KAAKqG,UAAUyb,WACf9hB,KAAKqG,UAAUwyC,gBACnB,IAAIv4B,EAAQtgB,KAAKgwB,oBACb1P,EAAMhgB,MAAMmC,QAAU6d,EAAM3c,IAAIlB,QAAU6d,EAAMhgB,MAAMkC,KAAO8d,EAAM3c,IAAInB,MACvE8d,EAAM3c,IAAIlB,OAAS,EACnB6d,EAAM3c,IAAInB,OAEdxC,KAAKkiB,QAAQhc,OAAOoa,GACpBtgB,KAAKyjC,gBACT,EACA6vC,EAAOzwE,UAAU6qE,UAAY,WACpB1tE,KAAKqG,UAAUyb,YAChB9hB,KAAKkiB,QAAQhc,OAAOlG,KAAKgwB,qBACzBhwB,KAAKyjC,kBAET,IAAIhY,EAASzrB,KAAKi1C,oBAClBj1C,KAAKulC,OAAO,MACZvlC,KAAK2iC,qBAAqBlX,EAC9B,EACA6nD,EAAOzwE,UAAU05E,aAAe,SAAU5yD,EAAMzf,GACvClK,KAAKkiB,QAAQqsD,gBACdvuE,KAAKkiB,QAAQqsD,cAAgB,IAAID,EAAYtuE,KAAKkiB,SAClDliB,KAAKkiB,QAAQqsD,cAAc3hC,OAAO5sC,OAEtCA,KAAKgsB,SAASuwD,aAAa5yD,EAAMzf,EACrC,EACAopE,EAAOzwE,UAAU25E,gBAAkB,WAC1Bx8E,KAAKkiB,QAAQqsD,eAElBvuE,KAAKgsB,SAASwwD,iBAClB,EACAlJ,EAAOzwE,UAAU8qE,iBAAmB,WAChC,GAAK3tE,KAAKqG,UAAUyb,UAApB,CAGA,IAAI2J,EAASzrB,KAAKi1C,oBACdxyC,EAASgpB,EAAOhpB,OACpB,GAAe,IAAXA,EAAJ,CAEA,IACIouD,EAAMvwC,EADNlR,EAAOpP,KAAKkiB,QAAQ7f,QAAQopB,EAAOjpB,KAEnCC,EAAS2M,EAAKzO,QACdkwD,EAAOzhD,EAAK1G,OAAOjG,GAAU2M,EAAK1G,OAAOjG,EAAS,GAClD6d,EAAQ,IAAIre,EAAMwpB,EAAOjpB,IAAKC,EAAS,EAAGgpB,EAAOjpB,IAAKC,EAAS,KAG/DouD,EAAOzhD,EAAK1G,OAAOjG,EAAS,GAAK2M,EAAK1G,OAAOjG,EAAS,GACtD6d,EAAQ,IAAIre,EAAMwpB,EAAOjpB,IAAKC,EAAS,EAAGgpB,EAAOjpB,IAAKC,IAE1DzC,KAAKkiB,QAAQvf,QAAQ2d,EAAOuwC,GAC5B7wD,KAAKkiB,QAAQ7b,UAAU+tB,eAAe9T,EAAM3c,IAZlC,CAJV,CAiBJ,EACA2vE,EAAOzwE,UAAUqN,YAAc,WAC3B,IAAIusE,EAAgBz8E,KAAKgwB,oBACrBhwB,KAAKqG,UAAUyb,WACf9hB,KAAKqG,UAAUoiC,aAEnB,IAAInoB,EAAQtgB,KAAKgwB,oBACbrG,EAAO3pB,KAAKkiB,QAAQwiB,aAAapkB,GACrCtgB,KAAKkiB,QAAQvf,QAAQ2d,EAAOqJ,EAAKzZ,eACjClQ,KAAKqG,UAAU+mB,kBAAkBqvD,EACrC,EACAnJ,EAAOzwE,UAAUmd,YAAc,WAC3B,IAAIy8D,EAAgBz8E,KAAKgwB,oBACrBhwB,KAAKqG,UAAUyb,WACf9hB,KAAKqG,UAAUoiC,aAEnB,IAAInoB,EAAQtgB,KAAKgwB,oBACbrG,EAAO3pB,KAAKkiB,QAAQwiB,aAAapkB,GACrCtgB,KAAKkiB,QAAQvf,QAAQ2d,EAAOqJ,EAAK3J,eACjChgB,KAAKqG,UAAU+mB,kBAAkBqvD,EACrC,EACAnJ,EAAOzwE,UAAUkxC,OAAS,WACtB,IAAI7xB,EAAUliB,KAAKkiB,QACf5B,EAAQtgB,KAAKgwB,oBACjB,KAAI1P,EAAMhgB,MAAMkC,IAAM8d,EAAM3c,IAAInB,KAAhC,CAKK,GAAI8d,EAAMhgB,MAAMmC,OAAS6d,EAAM3c,IAAIlB,OAAQ,CAC5C,IAAIknB,EAAOzH,EAAQwiB,aAAapkB,GAChC,IAAK,QAAQne,KAAKwnB,GAAO,CACjB6xB,EAAOx7C,KAAK08E,mBAEhB,YADAx6D,EAAQ0/C,WAAWpmB,EAAKiR,MAAOjR,EAAK5uC,KAAM,KAE9C,CACJ,CACA,IAAIwC,EAAO8S,EAAQ7f,QAAQie,EAAMhgB,MAAMkC,KACnC0H,EAAWoW,EAAMhgB,MACjB2zC,EAAO/xB,EAAQ83B,aACfv3C,EAASyf,EAAQkjD,uBAAuBl7D,EAAS1H,IAAK0H,EAASzH,QACnE,GAAIzC,KAAKkiB,QAAQmjC,iBACb,IAAI76C,EAASypC,EAAOxxC,EAASwxC,EACzB4tB,EAAerlD,EAAKzP,aAAa,IAAKvC,OAEzC,CACGA,EAAQ/H,EAASwxC,EACrB,MAAuC,KAAhC7kC,EAAKkR,EAAMhgB,MAAMmC,OAAS,IAAa+H,EAC1C8V,EAAMhgB,MAAMmC,SACZ+H,IAEJxK,KAAKqG,UAAU+mB,kBAAkB9M,GACjCuhD,EAAe,IACnB,CACA,OAAO7hE,KAAKulC,OAAOs8B,EAlBnB,CAXI,IAAIrmB,EAAOx7C,KAAK08E,mBAChBx6D,EAAQ0/C,WAAWpmB,EAAKiR,MAAOjR,EAAK5uC,KAAM,KA6BlD,EACA0mE,EAAOzwE,UAAU4qE,YAAc,WAC3B,IAAIjyB,EAAOx7C,KAAK08E,mBAChB18E,KAAKkiB,QAAQ0/C,WAAWpmB,EAAKiR,MAAOjR,EAAK5uC,KAAM,KACnD,EACA0mE,EAAOzwE,UAAU2qE,aAAe,WAC5B,IAAInnE,EAAYrG,KAAKkiB,QAAQysC,eAC7B3uD,KAAKkiB,QAAQ4/C,YAAYz7D,EAAUinB,WACvC,EACAgmD,EAAOzwE,UAAUmqE,UAAY,WAIzB,IAHA,IAAIxxB,EAAOx7C,KAAK08E,mBACZx6D,EAAUliB,KAAKkiB,QACfqL,EAAQ,GACHhvB,EAAIi9C,EAAKiR,MAAOluD,GAAKi9C,EAAK5uC,KAAMrO,IACrCgvB,EAAM/sB,KAAK0hB,EAAQ7f,QAAQ9D,IAC/BgvB,EAAMsM,MAAK,SAAUz6B,EAAG8F,GACpB,OAAI9F,EAAE8Q,cAAgBhL,EAAEgL,eACZ,EACR9Q,EAAE8Q,cAAgBhL,EAAEgL,cACb,EACJ,CACX,IACA,IAAI8xD,EAAc,IAAI//D,EAAM,EAAG,EAAG,EAAG,GACrC,IAAS1D,EAAIi9C,EAAKiR,MAAOluD,GAAKi9C,EAAK5uC,KAAMrO,IAAK,CAC1C,IAAI6Q,EAAO8S,EAAQ7f,QAAQ9D,GAC3ByjE,EAAY1hE,MAAMkC,IAAMjE,EACxByjE,EAAYr+D,IAAInB,IAAMjE,EACtByjE,EAAYr+D,IAAIlB,OAAS2M,EAAKzO,OAC9BuhB,EAAQvf,QAAQq/D,EAAaz0C,EAAMhvB,EAAIi9C,EAAKiR,OAChD,CACJ,EACA6mB,EAAOzwE,UAAUiiD,mBAAqB,WAClC,IAAIze,EAAQrmC,KAAKkiB,QAAQ0qC,SAAS5sD,KAAKi1C,oBAAoBzyC,KACvDg5C,EAAOx7C,KAAK08E,mBAChB18E,KAAKkiB,QAAQi+C,UAAUrb,mBAAmBze,EAAOrmC,KAAKkiB,QAASs5B,EAAKiR,MAAOjR,EAAK5uC,KACpF,EACA0mE,EAAOzwE,UAAUujD,mBAAqB,WAClC,IAAI36B,EAASzrB,KAAKi1C,oBACd5O,EAAQrmC,KAAKkiB,QAAQ0qC,SAASnhC,EAAOjpB,KACrC8d,EAAQtgB,KAAKgwB,oBACjBhwB,KAAKkiB,QAAQi+C,UAAU/Z,mBAAmB/f,EAAOrmC,KAAKkiB,QAAS5B,EAAOmL,EAC1E,EACA6nD,EAAOzwE,UAAU85E,YAAc,SAAUn6E,EAAKC,GAC1C,IAAIm6E,EAAY,4BAChBA,EAAUtyE,UAAY,EACtB,IAAI7L,EAAIuB,KAAKkiB,QAAQ7f,QAAQG,GAC7B,MAAOo6E,EAAUtyE,UAAY7H,EAAQ,CACjC,IAAIoC,EAAI+3E,EAAUz4E,KAAK1F,GACvB,GAAIoG,EAAEb,OAASvB,GAAUoC,EAAEb,MAAQa,EAAE,GAAGlE,QAAU8B,EAAQ,CACtD,IAAIyoB,EAAS,CACTjqB,MAAO4D,EAAE,GACTvE,MAAOuE,EAAEb,MACTL,IAAKkB,EAAEb,MAAQa,EAAE,GAAGlE,QAExB,OAAOuqB,CACX,CACJ,CACA,OAAO,IACX,EACAooD,EAAOzwE,UAAUoqE,aAAe,SAAU4P,GACtC,IAAIr6E,EAAMxC,KAAKqG,UAAU4wC,YAAYz0C,IACjCC,EAASzC,KAAKqG,UAAU4wC,YAAYx0C,OACpCq6E,EAAY,IAAI76E,EAAMO,EAAKC,EAAS,EAAGD,EAAKC,GAC5ChD,EAAIO,KAAKkiB,QAAQwiB,aAAao4C,GAClC,IAAK1c,MAAM5vD,WAAW/Q,KAAOs9E,SAASt9E,GAAI,CACtC,IAAIu9E,EAAKh9E,KAAK28E,YAAYn6E,EAAKC,GAC/B,GAAIu6E,EAAI,CACJ,IAAIC,EAAKD,EAAG/7E,MAAMuH,QAAQ,MAAQ,EAAIw0E,EAAG18E,MAAQ08E,EAAG/7E,MAAMuH,QAAQ,KAAO,EAAIw0E,EAAGr5E,IAC5Eu5E,EAAWF,EAAG18E,MAAQ08E,EAAG/7E,MAAMN,OAASs8E,EACxC7+E,EAAIoS,WAAWwsE,EAAG/7E,OACtB7C,GAAK+N,KAAKmX,IAAI,GAAI45D,GACdD,IAAOD,EAAGr5E,KAAOlB,EAASw6E,EAC1BJ,GAAU1wE,KAAKmX,IAAI,GAAI05D,EAAGr5E,IAAMlB,EAAS,GAGzCo6E,GAAU1wE,KAAKmX,IAAI,GAAI05D,EAAGr5E,IAAMlB,GAEpCrE,GAAKy+E,EACLz+E,GAAK+N,KAAKmX,IAAI,GAAI45D,GAClB,IAAIC,EAAM/+E,EAAEg/E,QAAQF,GAChBG,EAAe,IAAIp7E,EAAMO,EAAKw6E,EAAG18E,MAAOkC,EAAKw6E,EAAGr5E,KACpD3D,KAAKkiB,QAAQvf,QAAQ06E,EAAcF,GACnCn9E,KAAKi4C,aAAaz1C,EAAK2J,KAAKC,IAAI4wE,EAAG18E,MAAQ,EAAGmC,EAAS06E,EAAIx8E,OAASq8E,EAAG/7E,MAAMN,QACjF,CACJ,MAEIX,KAAKs9E,YAEb,EACAhK,EAAOzwE,UAAUy6E,WAAa,WAC1B,IAAI96E,EAAMxC,KAAKqG,UAAU4wC,YAAYz0C,IACjCC,EAASzC,KAAKqG,UAAU4wC,YAAYx0C,OACxCzC,KAAKqG,UAAUoiC,aACf,IAAIgW,EAAez+C,KAAKu5E,kBACpBgE,EAAgBv9E,KAAKqG,UAAUwvB,eAAev1B,MAAMmC,OACpD+6E,EAAY/+B,EAAa97C,QAAQ,+BAAgC,OAAO7B,MAAM,MAC9EmyC,EAAQxwC,EAAS86E,EAAgB,EACjCtqC,EAAQ,IACRA,EAAQ,GACZ,IAAIwqC,EAAY,EAAGC,EAAW,EAC1BC,EAAO39E,KACPy+C,EAAan8C,MAAM,kBACnBk7E,EAAUryE,SAAQ,SAAUY,EAAMxN,GAC9Bm/E,EAAWD,EAAY1xE,EAAKpL,OACxBsyC,GAASwqC,GAAaxqC,GAASyqC,IAC/Bj/B,EAAe1yC,EACf4xE,EAAKt3E,UAAUo9B,iBACfk6C,EAAK1lC,aAAaz1C,EAAKi7E,EAAYF,GACnCI,EAAKt3E,UAAU+4B,SAAS58B,EAAKk7E,EAAWH,IAE5CE,EAAYC,CAChB,IAIJ,IAFA,IACIE,EADAC,EAAY79E,KAAK89E,iBAEZv/E,EAAI,EAAGA,EAAIs/E,EAAUl9E,OAAQpC,IAElC,IADA,IAAIwN,EAAO8xE,EAAUt/E,GACZqhB,EAAI,EAAGA,GAAK,EAAGA,IAAK,CACzB,IAAIm+D,IAAWn+D,EACXo+D,EAAiBv/B,EAAan8C,MAAM,IAAIkC,OAAO,WAAagY,EAAK1O,aAAa/B,EAAK6T,IAAM,SAAU,MACvG,GAAIo+D,EAAgB,CAChB,IAAIC,EAAkBx/B,EAAan8C,MAAM,IAAIkC,OAAO,eAAiBgY,EAAK1O,aAAakwE,EAAe,IAAM,WAAY,MACpHC,IACAL,EAAMn/B,EAAa97C,QAAQ,IAAI6B,OAAOgY,EAAK1O,aAAa/B,EAAK6T,IAAK,MAAM,SAAUnV,GAC9E,IAAIyzE,EAAMnyE,EAAKgyE,GAOf,OANItzE,EAAOuV,eAAiBvV,EACxByzE,EAAMA,EAAIl+D,cAELvV,EAAO/B,OAAO,GAAGsX,eAAiBvV,EAAO/B,OAAO,KACrDw1E,EAAMA,EAAI7pC,OAAO,EAAG,GAAKtoC,EAAKgyE,GAAQr1E,OAAO,GAAGsX,cAAgBk+D,EAAI7pC,OAAO,IAExE6pC,CACX,IACAl+E,KAAKulC,OAAOq4C,GACZA,EAAM,GAEd,CACJ,CAER,EACAtK,EAAOzwE,UAAUs7E,WAAa,SAAU37E,EAAKC,GACzC,IAAIg3B,EAAKC,EACLtqB,EAAOpP,KAAKkiB,QAAQ7f,QAAQG,GAC5Bg7E,EAAYpuE,EAAKtO,MAAM,8BACvBs9E,EAAiB37E,EACjB27E,EAAiB,IACjBA,EAAiB,GACrB,IAA+C97E,EAA3C+7E,EAAmB,EAAGC,EAAkB,EAC5C,IACI,IAAK,IAAIC,EAAc1mD,EAAS2lD,GAAYgB,EAAgBD,EAAYh+E,QAASi+E,EAAcxmD,KAAMwmD,EAAgBD,EAAYh+E,OAAQ,CACrI,IAAIwL,EAAOyyE,EAAcv9E,MAEzB,GADAq9E,EAAkBD,EAAmBtyE,EAAKpL,OACtCy9E,GAAkBC,GAAoBD,GAAkBE,GACpDvyE,EAAKzJ,MAAM,8BAA+B,CAC1CA,EAAQyJ,EAAKpJ,QAAQ,kBAAmB,IACxC,KACJ,CAEJ07E,EAAmBC,CACvB,CACJ,CACA,MAAO7jD,GAAShB,EAAM,CAAE9xB,MAAO8yB,EAAS,CACxC,QACI,IACQ+jD,IAAkBA,EAAcxmD,OAAS0B,EAAK6kD,EAAY/jD,SAASd,EAAG92B,KAAK27E,EACnF,CACA,QAAU,GAAI9kD,EAAK,MAAMA,EAAI9xB,KAAO,CACxC,CACA,OAAOrF,CACX,EACAgxE,EAAOzwE,UAAUirE,SAAW,WACxB,IAAIriD,EAASzrB,KAAKqG,UAAU4wC,YACxBhgC,EAAMjX,KAAKm+E,WAAW1yD,EAAOjpB,IAAKipB,EAAOhpB,QAG7C,OAFIwU,GACAhQ,OAAOmQ,KAAKH,EAAK,UACP,MAAPA,CACX,EACAq8D,EAAOzwE,UAAUunD,YAAc,WAC3B,IAAI5O,EAAOx7C,KAAK08E,mBAChB18E,KAAKkiB,QAAQmoC,gBAAgB7O,EAAKiR,MAAOjR,EAAK5uC,MAC9C5M,KAAKyjC,gBACT,EACA6vC,EAAOzwE,UAAUkqE,mBAAqB,WAClC,IAAIuH,EAAMt0E,KAAKqG,UACXnC,EAAMlE,KAAKkiB,QACX5B,EAAQg0D,EAAIhnD,WACZxgB,EAAUwnE,EAAIh9B,cAClB,GAAIh3B,EAAMwB,UAAW,CACjB,IAAItf,EAAM8d,EAAMhgB,MAAMkC,IACtB0B,EAAIm+D,eAAe7/D,EAAKA,EAC5B,KACK,CACD,IAAI4lD,EAAQt7C,EAAUwT,EAAMhgB,MAAQggB,EAAM3c,IACtC86E,EAAWv6E,EAAIqhC,OAAO6iB,EAAOlkD,EAAIwgC,aAAapkB,IAClDA,EAAMhgB,MAAQ8nD,EACd9nC,EAAM3c,IAAM86E,EACZnK,EAAIlnD,kBAAkB9M,EAAOxT,EACjC,CACJ,EACAwmE,EAAOzwE,UAAUu/D,cAAgB,WAC7BpiE,KAAKiiE,WAAW,GAAG,EACvB,EACAqR,EAAOzwE,UAAUs/D,YAAc,WAC3BniE,KAAKiiE,YAAY,GAAG,EACxB,EACAqR,EAAOzwE,UAAUwiC,SAAW,SAAU/kB,EAAOihD,EAAY70D,GACrD,OAAO1M,KAAKkiB,QAAQmjB,SAAS/kB,EAAOihD,EAAY70D,EACpD,EACA4mE,EAAOzwE,UAAUqqE,YAAc,WAC3BltE,KAAKiiE,YAAY,GAAG,EACxB,EACAqR,EAAOzwE,UAAUsqE,cAAgB,WAC7BntE,KAAKiiE,WAAW,GAAG,EACvB,EACAqR,EAAOzwE,UAAUo/D,WAAa,SAAU70B,EAAK1gC,GACzC,IAAI8uC,EAAMkjC,EACNr4E,EAAYrG,KAAKqG,UACrB,IAAKA,EAAUkuB,mBAAqBv0B,KAAK05E,uBAAwB,CAC7D,IAAIp5D,EAAQja,EAAUk9B,kBACtBiY,EAAOx7C,KAAK08E,iBAAiBp8D,GAC7Bo+D,EAAQ1+E,KAAKkiB,QAAQ+/C,WAAWzmB,EAAKiR,MAAOjR,EAAK5uC,KAAMF,EAAO,EAAI0gC,GAC9D1gC,IAAgB,GAAR0gC,IACRsxC,EAAQ,GACZp+D,EAAMgC,OAAOo8D,EAAO,GACpBr4E,EAAU09B,kBAAkBzjB,EAChC,KACK,CACD,IAAI+7B,EAASh2C,EAAUm2C,UAAUH,OACjCh2C,EAAUm2C,UAAU3P,OAAO7sC,KAAKkiB,SAChCliB,KAAK05E,wBAAyB,EAI9B,IAHA,IAAIjqB,EAAO,EACPkvB,EAAY,EACZp/E,EAAI88C,EAAO17C,OACNpC,EAAI,EAAGA,EAAIgB,EAAGhB,IAAK,CACxB,IAAIqgF,EAAargF,EACjB89C,EAAO99C,GAAG+jB,OAAOmtC,EAAM,GACvBjU,EAAOx7C,KAAK08E,iBAAiBrgC,EAAO99C,IACpC,IAAIkuD,EAAQjR,EAAKiR,MACb7/C,EAAO4uC,EAAK5uC,KAChB,QAASrO,EAAIgB,EAAG,CACRo/E,GACAtiC,EAAO99C,GAAG+jB,OAAOq8D,EAAW,GAChC,IAAIE,EAAU7+E,KAAK08E,iBAAiBrgC,EAAO99C,IAC3C,GAAImO,GAAQmyE,EAAQpyB,OAAS7/C,EACzB,MACC,IAAKF,GAAQmyE,EAAQpyB,MAAQ7/C,EAAO,EACrC,MACJA,EAAOiyE,EAAQjyE,IACnB,CACArO,IACAkxD,EAAOzvD,KAAKkiB,QAAQ+/C,WAAWxV,EAAO7/C,EAAMF,EAAO,EAAI0gC,GACnD1gC,IAAgB,GAAR0gC,IACRwxC,EAAargF,EAAI,GACrB,MAAOqgF,GAAcrgF,EACjB89C,EAAOuiC,GAAYt8D,OAAOmtC,EAAM,GAChCmvB,IAEClyE,IACD+iD,EAAO,GACXkvB,GAAalvB,CACjB,CACAppD,EAAU09B,kBAAkB19B,EAAUg2C,OAAO,IAC7Ch2C,EAAUm2C,UAAU5P,OAAO5sC,KAAKkiB,SAChCliB,KAAK05E,wBAAyB,CAClC,CACJ,EACApG,EAAOzwE,UAAU65E,iBAAmB,SAAUp8D,GAE1C,OADAA,GAASA,GAAStgB,KAAKgwB,qBAAqBhO,eACrC,CACHyqC,MAAOzsD,KAAKkiB,QAAQ80C,gBAAgB12C,EAAMhgB,MAAMkC,KAChDoK,KAAM5M,KAAKkiB,QAAQ60C,cAAcz2C,EAAM3c,IAAInB,KAEnD,EACA8wE,EAAOzwE,UAAU+sB,mBAAqB,SAAUkvD,GAC5C9+E,KAAKgsB,SAAS+yD,gBAAgBD,EAClC,EACAxL,EAAOzwE,UAAU+rB,oBAAsB,SAAUjF,GAC7C3pB,KAAKgsB,SAASgzD,mBAAmBr1D,EACrC,EACA2pD,EAAOzwE,UAAUkqB,iBAAmB,WAChC/sB,KAAKgsB,SAASizD,iBAClB,EACA3L,EAAOzwE,UAAUq8E,mBAAqB,WAClC,OAAOl/E,KAAKgsB,SAASkzD,oBACzB,EACA5L,EAAOzwE,UAAUs8E,kBAAoB,WACjC,OAAOn/E,KAAKgsB,SAASmzD,mBACzB,EACA7L,EAAOzwE,UAAU+tE,aAAe,SAAUpuE,GACtC,OAAQA,GAAOxC,KAAKk/E,sBAAwB18E,GAAOxC,KAAKm/E,mBAC5D,EACA7L,EAAOzwE,UAAUwvE,kBAAoB,SAAU7vE,GAC3C,OAAQA,GAAOxC,KAAKgsB,SAASozD,2BAA6B58E,GAAOxC,KAAKgsB,SAASqzD,wBACnF,EACA/L,EAAOzwE,UAAUy8E,oBAAsB,WACnC,OAAOt/E,KAAKgsB,SAASuzD,qBAAuBv/E,KAAKgsB,SAASwzD,kBAAoB,CAClF,EACAlM,EAAOzwE,UAAU48E,YAAc,SAAUryC,EAAK1d,GAC1C,IAAI1D,EAAWhsB,KAAKgsB,SAChB/M,EAASjf,KAAKgsB,SAAS6W,YACvB2Y,EAAOpO,EAAMjhC,KAAKg6C,MAAMlnC,EAAO9J,OAAS8J,EAAOke,aACpC,IAAXzN,EACA1vB,KAAKqG,UAAU0xC,gBAAe,WAC1B/3C,KAAK45C,aAAa4B,EAAM,EAC5B,KAEgB,IAAX9rB,IACL1vB,KAAKqG,UAAUuzC,aAAa4B,EAAM,GAClCx7C,KAAKqG,UAAUo9B,kBAEnB,IAAIu5B,EAAYhxC,EAASgxC,UACzBhxC,EAAS0K,SAAS,EAAG8kB,EAAOv8B,EAAOke,YACrB,MAAVzN,GACA1D,EAASmJ,qBAAqB,KAAM,IACxCnJ,EAASqoD,iBAAiBrX,EAC9B,EACAsW,EAAOzwE,UAAUupE,eAAiB,WAC9BpsE,KAAKy/E,YAAY,GAAG,EACxB,EACAnM,EAAOzwE,UAAU0pE,aAAe,WAC5BvsE,KAAKy/E,aAAa,GAAG,EACzB,EACAnM,EAAOzwE,UAAUypE,aAAe,WAC5BtsE,KAAKy/E,YAAY,GAAG,EACxB,EACAnM,EAAOzwE,UAAU4pE,WAAa,WAC1BzsE,KAAKy/E,aAAa,GAAG,EACzB,EACAnM,EAAOzwE,UAAUwpE,eAAiB,WAC9BrsE,KAAKy/E,YAAY,EACrB,EACAnM,EAAOzwE,UAAU2pE,aAAe,WAC5BxsE,KAAKy/E,aAAa,EACtB,EACAnM,EAAOzwE,UAAU68E,YAAc,SAAUl9E,GACrCxC,KAAKgsB,SAAS0zD,YAAYl9E,EAC9B,EACA8wE,EAAOzwE,UAAUguE,aAAe,SAAUzhE,EAAMuwE,EAAQ/2C,EAAS7gC,GAC7D/H,KAAKgsB,SAAS6kD,aAAazhE,EAAMuwE,EAAQ/2C,EAAS7gC,EACtD,EACAurE,EAAOzwE,UAAUmoE,gBAAkB,WAC/B,IAAI1qD,EAAQtgB,KAAKgwB,oBACb+D,EAAM,CACNvxB,IAAK2J,KAAKg6C,MAAM7lC,EAAMhgB,MAAMkC,KAAO8d,EAAM3c,IAAInB,IAAM8d,EAAMhgB,MAAMkC,KAAO,GACtEC,OAAQ0J,KAAKg6C,MAAM7lC,EAAMhgB,MAAMmC,QAAU6d,EAAM3c,IAAIlB,OAAS6d,EAAMhgB,MAAMmC,QAAU,IAEtFzC,KAAKgsB,SAAS4zD,YAAY7rD,EAAK,GACnC,EACAu/C,EAAOzwE,UAAUoyC,kBAAoB,WACjC,OAAOj1C,KAAKqG,UAAU4wC,WAC1B,EACAq8B,EAAOzwE,UAAUg9E,wBAA0B,WACvC,OAAO7/E,KAAKkiB,QAAQE,yBAAyBpiB,KAAKi1C,oBACtD,EACAq+B,EAAOzwE,UAAUmtB,kBAAoB,WACjC,OAAOhwB,KAAKqG,UAAUinB,UAC1B,EACAgmD,EAAOzwE,UAAU+qB,UAAY,WACzB5tB,KAAKqG,UAAUunB,WACnB,EACA0lD,EAAOzwE,UAAU4gC,eAAiB,WAC9BzjC,KAAKqG,UAAUo9B,gBACnB,EACA6vC,EAAOzwE,UAAUo1C,aAAe,SAAUz1C,EAAKC,GAC3CzC,KAAKqG,UAAU4xC,aAAaz1C,EAAKC,EACrC,EACA6wE,EAAOzwE,UAAU8/B,qBAAuB,SAAU5O,GAC9C/zB,KAAKqG,UAAUs8B,qBAAqB5O,EACxC,EACAu/C,EAAOzwE,UAAU6pE,eAAiB,SAAUh9C,EAAQowD,GAChD,IAAIr0D,EAASzrB,KAAKi1C,oBACdld,EAAW,IAAI/0B,EAAchD,KAAKkiB,QAASuJ,EAAOjpB,IAAKipB,EAAOhpB,QAC9Dm3D,EAAY7hC,EAASxzB,kBACrBw7E,EAAa,EACbnmB,IAAqD,IAAxCA,EAAU54D,KAAKwH,QAAQ,cACpCoxD,EAAY7hC,EAASpzB,gBAEzB,IAAIhG,EAAQi7D,GAAa7hC,EAASnzB,cAClC,GAAKjG,EAAL,CAEA,IAAIqhF,EAIAC,EAHAlmB,GAAQ,EACRrC,EAAQ,CAAC,EACTn5D,EAAIktB,EAAOhpB,OAAS9D,EAAM2B,MAE1B4/E,EAAW,CACX,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KAET,EAAG,CACC,GAAIvhF,EAAMsC,MAAMqB,MAAM,gBAClB,KAAO/D,EAAII,EAAMsC,MAAMN,SAAWo5D,EAAOx7D,IACrC,GAAK2hF,EAASvhF,EAAMsC,MAAM1C,IAO1B,OAJA0hF,EAAcC,EAASvhF,EAAMsC,MAAM1C,IAAM,IAAMI,EAAMqC,KAAK2B,QAAQ,SAAU,UACxEy9D,MAAM1I,EAAMuoB,MACZvoB,EAAMuoB,GAAe,GAEjBthF,EAAMsC,MAAM1C,IAChB,IAAK,IACL,IAAK,IACL,IAAK,IACDm5D,EAAMuoB,KACN,MACJ,IAAK,IACL,IAAK,IACL,IAAK,IACDvoB,EAAMuoB,MACsB,IAAxBvoB,EAAMuoB,KACND,EAAY,UACZjmB,GAAQ,GAEZ,YAI6B,IAApCp7D,EAAMqC,KAAKwH,QAAQ,cACpB43D,MAAM1I,EAAM/4D,EAAMsC,UAClBy2D,EAAM/4D,EAAMsC,OAAS,GAED,MAApB24D,EAAU34D,OAAiB8+E,EAAa,EACxCroB,EAAM/4D,EAAMsC,SAEa,OAApB24D,EAAU34D,OACfy2D,EAAM/4D,EAAMsC,UAEY,IAAxBy2D,EAAM/4D,EAAMsC,SACZ++E,EAAY,MACZjmB,GAAQ,IAGXA,IACDH,EAAYj7D,EACZohF,IACAphF,EAAQo5B,EAASnzB,cACjBrG,EAAI,EAEZ,OAASI,IAAUo7D,GACnB,GAAKimB,EAAL,CAEA,IAAI1/D,EAAOyT,EACX,GAAkB,YAAdisD,EACA1/D,EAAQtgB,KAAKkiB,QAAQ0T,gBAAgBnK,GAChCnL,IACDA,EAAQ,IAAIre,EAAM81B,EAAShzB,qBAAsBgzB,EAASipB,wBAA0BziD,EAAI,EAAGw5B,EAAShzB,qBAAsBgzB,EAASipB,wBAA0BziD,EAAI,GACjKw1B,EAAMzT,EAAMhgB,OACRw/E,GAAU/rD,EAAIvxB,MAAQipB,EAAOjpB,KAAO2J,KAAKua,IAAIqN,EAAItxB,OAASgpB,EAAOhpB,QAC/D,KACF6d,EAAQtgB,KAAKkiB,QAAQ0T,gBAAgB7B,UAG5C,GAAkB,QAAdisD,EAAqB,CAC1B,IAAKrhF,IAA6C,IAApCA,EAAMqC,KAAKwH,QAAQ,YAC7B,OAEJ,GADA8X,EAAQ,IAAIre,EAAM81B,EAAShzB,qBAAsBgzB,EAASipB,wBAA0B,EAAGjpB,EAAShzB,qBAAsBgzB,EAASipB,wBAA0B,GACxG,IAA7C1gC,EAAME,QAAQiL,EAAOjpB,IAAKipB,EAAOhpB,QAAe,CAChD,IAAI09E,EAAangF,KAAKkiB,QAAQw3C,gBAAgBjuC,GAC1C00D,IACIA,EAAW1lB,QAAQl6C,SAASkL,EAAOjpB,IAAKipB,EAAOhpB,SAC/C6d,EAAQ6/D,EAAWzlB,SACnB3mC,EAAMzT,EAAMhgB,QAGZggB,EAAQ6/D,EAAW1lB,QAGf1mC,EAFAosD,EAAWzlB,SAASp6D,MAAMkC,MAAQipB,EAAOjpB,KAAO29E,EAAWzlB,SAASp6D,MAAMmC,SACtEgpB,EAAOhpB,OACL6d,EAAM3c,IAEN2c,EAAMhgB,OAG5B,CACAyzB,EAAMA,GAAOzT,EAAMhgB,KACvB,CACAyzB,EAAMzT,GAASA,EAAMmL,QAAUsI,EAC3BA,IACIrE,EACIpP,GAASw/D,EACT9/E,KAAKqG,UAAUsiC,SAASroB,GAEnBA,GAASA,EAAMD,QAAQrgB,KAAKgwB,qBACjChwB,KAAKyjC,iBAGLzjC,KAAKqG,UAAU+4B,SAASrL,EAAIvxB,IAAKuxB,EAAItxB,QAIzCzC,KAAKqG,UAAU6xC,OAAOnkB,EAAIvxB,IAAKuxB,EAAItxB,QAjDjC,CAjEA,CAqHd,EACA6wE,EAAOzwE,UAAUooE,SAAW,SAAUmV,EAAY39E,EAAQmmC,GACtD5oC,KAAKqG,UAAUo9B,iBACfzjC,KAAKkiB,QAAQw0C,OAAO,CAAEl0D,IAAK49E,EAAa,EAAG39E,OAAQA,GAAU,IAC7DzC,KAAKquE,qBAAuBruE,KAAKquE,sBACjCruE,KAAKi4C,aAAamoC,EAAa,EAAG39E,GAAU,GACvCzC,KAAKqyE,kBAAkB+N,EAAa,IACrCpgF,KAAK6wE,aAAauP,EAAa,GAAG,EAAMx3C,EAChD,EACA0qC,EAAOzwE,UAAUw9E,WAAa,SAAU79E,EAAKC,GACzCzC,KAAKqG,UAAU6xC,OAAO11C,EAAKC,EAC/B,EACA6wE,EAAOzwE,UAAU6oE,WAAa,SAAUC,GACpC,GAAI3rE,KAAKqG,UAAUgb,gBAAkBrhB,KAAKqG,UAAUixC,cAAe,CAC/D,IAAIpqB,EAAiBltB,KAAKqG,UAAU0uB,OAAOmiB,cAC3C,OAAOl3C,KAAK2iC,qBAAqBzV,EACrC,CACAltB,KAAKqG,UAAUo9B,iBACfzjC,KAAKqG,UAAUuzC,cAAc+xB,IAAU,EAAG,EAC9C,EACA2H,EAAOzwE,UAAUgpE,aAAe,SAAUF,GACtC,GAAI3rE,KAAKqG,UAAUgb,eAAiBrhB,KAAKqG,UAAUixC,cAAe,CAC9D,IAAInqB,EAAentB,KAAKqG,UAAU0uB,OAAOmiB,cACzC,OAAOl3C,KAAK2iC,qBAAqBxV,EACrC,CACAntB,KAAKqG,UAAUo9B,iBACfzjC,KAAKqG,UAAUuzC,aAAa+xB,GAAS,EAAG,EAC5C,EACA2H,EAAOzwE,UAAUmpE,aAAe,SAAUL,GACtC,GAAK3rE,KAAKqG,UAAUyb,UAIf,CACD6pD,EAAQA,GAAS,EACjB,MAAOA,IACH3rE,KAAKqG,UAAUqyC,gBAEvB,KAT+B,CAC3B,IAAIxrB,EAAiBltB,KAAKgwB,oBAAoB1vB,MAC9CN,KAAK2iC,qBAAqBzV,EAC9B,CAOAltB,KAAKyjC,gBACT,EACA6vC,EAAOzwE,UAAUspE,cAAgB,SAAUR,GACvC,GAAK3rE,KAAKqG,UAAUyb,UAIf,CACD6pD,EAAQA,GAAS,EACjB,MAAOA,IACH3rE,KAAKqG,UAAUmyC,iBAEvB,KAT+B,CAC3B,IAAIrrB,EAAentB,KAAKgwB,oBAAoBrsB,IAC5C3D,KAAK2iC,qBAAqBxV,EAC9B,CAOAntB,KAAKyjC,gBACT,EACA6vC,EAAOzwE,UAAUkpE,kBAAoB,WACjC/rE,KAAKqG,UAAUuyC,sBACf54C,KAAKyjC,gBACT,EACA6vC,EAAOzwE,UAAUqpE,gBAAkB,WAC/BlsE,KAAKqG,UAAUyyC,oBACf94C,KAAKyjC,gBACT,EACA6vC,EAAOzwE,UAAU+oE,gBAAkB,WAC/B5rE,KAAKqG,UAAU2yC,oBACfh5C,KAAKyjC,gBACT,EACA6vC,EAAOzwE,UAAU4oE,kBAAoB,WACjCzrE,KAAKqG,UAAU6yC,sBACfl5C,KAAKyjC,gBACT,EACA6vC,EAAOzwE,UAAUopE,kBAAoB,WACjCjsE,KAAKqG,UAAU+yC,sBACfp5C,KAAKyjC,gBACT,EACA6vC,EAAOzwE,UAAUipE,iBAAmB,WAChC9rE,KAAKqG,UAAUizC,qBACft5C,KAAKyjC,gBACT,EACA6vC,EAAOzwE,UAAUF,QAAU,SAAU4kE,EAAal1D,GAC1CA,GACArS,KAAK0zE,QAAQh4D,IAAIrJ,GACrB,IAAIiO,EAAQtgB,KAAK0zE,QAAQjoE,KAAKzL,KAAKkiB,SAC/Bo+D,EAAW,EACf,OAAKhgE,GAEDtgB,KAAKugF,YAAYjgE,EAAOinD,KACxB+Y,EAAW,GAEftgF,KAAKqG,UAAU+mB,kBAAkB9M,GACjCtgB,KAAKgsB,SAASooD,wBAAwB9zD,EAAMhgB,MAAOggB,EAAM3c,KAClD28E,GANIA,CAOf,EACAhN,EAAOzwE,UAAU29E,WAAa,SAAUjZ,EAAal1D,GAC7CA,GACArS,KAAK0zE,QAAQh4D,IAAIrJ,GAErB,IAAIgqC,EAASr8C,KAAK0zE,QAAQxM,QAAQlnE,KAAKkiB,SACnCo+D,EAAW,EACf,IAAKjkC,EAAO17C,OACR,OAAO2/E,EACX,IAAIj6E,EAAYrG,KAAKgwB,oBACrBhwB,KAAKqG,UAAU6xC,OAAO,EAAG,GACzB,IAAK,IAAI35C,EAAI89C,EAAO17C,OAAS,EAAGpC,GAAK,IAAKA,EAClCyB,KAAKugF,YAAYlkC,EAAO99C,GAAIgpE,IAC5B+Y,IAIR,OADAtgF,KAAKqG,UAAU+mB,kBAAkB/mB,GAC1Bi6E,CACX,EACAhN,EAAOzwE,UAAU09E,YAAc,SAAUjgE,EAAOinD,GAC5C,IAAI7gB,EAAQ1mD,KAAKkiB,QAAQwiB,aAAapkB,GAEtC,OADAinD,EAAcvnE,KAAK0zE,QAAQ/wE,QAAQ+jD,EAAO6gB,GACtB,OAAhBA,GACAjnD,EAAM3c,IAAM3D,KAAKkiB,QAAQvf,QAAQ2d,EAAOinD,GACjCjnD,GAGA,IAEf,EACAgzD,EAAOzwE,UAAU49E,qBAAuB,WACpC,OAAOzgF,KAAK0zE,QAAQ14D,YACxB,EACAs4D,EAAOzwE,UAAU4I,KAAO,SAAU07D,EAAQ90D,EAASu2B,GAC1Cv2B,IACDA,EAAU,CAAC,GACM,iBAAV80D,GAAsBA,aAAkB3iE,OAC/C6N,EAAQ80D,OAASA,EACK,iBAAVA,GACZxsD,EAAIvC,MAAM/F,EAAS80D,GACvB,IAAI7mD,EAAQtgB,KAAKqG,UAAUinB,WACL,MAAlBjb,EAAQ80D,SACRA,EAASnnE,KAAKkiB,QAAQwiB,aAAapkB,IAC5BtgB,KAAK0zE,QAAQx4D,SAASisD,OACxBA,IACD7mD,EAAQtgB,KAAKkiB,QAAQ2T,aAAavV,EAAMhgB,MAAMkC,IAAK8d,EAAMhgB,MAAMmC,QAC/D0kE,EAASnnE,KAAKkiB,QAAQwiB,aAAapkB,IAEvCtgB,KAAK0zE,QAAQh4D,IAAI,CAAEyrD,OAAQA,KAE/BnnE,KAAK0zE,QAAQh4D,IAAIrJ,GACZA,EAAQ/R,OACTN,KAAK0zE,QAAQh4D,IAAI,CAAEpb,MAAOggB,IAC9B,IAAIogE,EAAW1gF,KAAK0zE,QAAQjoE,KAAKzL,KAAKkiB,SACtC,OAAI7P,EAAQ6Z,cACDw0D,EACPA,GACA1gF,KAAK2gF,YAAYD,EAAU93C,GACpB83C,IAEPruE,EAAQ01D,UACRznD,EAAMhgB,MAAQggB,EAAM3c,IAEpB2c,EAAM3c,IAAM2c,EAAMhgB,WACtBN,KAAKqG,UAAUsiC,SAASroB,GAC5B,EACAgzD,EAAOzwE,UAAUyoE,SAAW,SAAUj5D,EAASu2B,GAC3C5oC,KAAKyL,KAAK,CAAEw7D,aAAa,EAAMc,WAAW,GAAS11D,EAASu2B,EAChE,EACA0qC,EAAOzwE,UAAU0oE,aAAe,SAAUl5D,EAASu2B,GAC/C5oC,KAAKyL,KAAK4G,EAAS,CAAE40D,aAAa,EAAMc,WAAW,GAAQn/B,EAC/D,EACA0qC,EAAOzwE,UAAU89E,YAAc,SAAUrgE,EAAOsoB,GAC5C5oC,KAAKkiB,QAAQw0C,OAAOp2C,GACpBtgB,KAAKqG,UAAU+mB,kBAAkB9M,GACjC,IAAI08C,EAAYh9D,KAAKgsB,SAASgxC,UAC9Bh9D,KAAKgsB,SAASooD,wBAAwB9zD,EAAMhgB,MAAOggB,EAAM3c,IAAK,KAC9C,IAAZilC,GACA5oC,KAAKgsB,SAASqoD,iBAAiBrX,EACvC,EACAsW,EAAOzwE,UAAUmsD,KAAO,WACpBhvD,KAAKkiB,QAAQulB,iBAAiBunB,KAAKhvD,KAAKkiB,SACxCliB,KAAKgsB,SAASmJ,qBAAqB,KAAM,GAC7C,EACAm+C,EAAOzwE,UAAU2sD,KAAO,WACpBxvD,KAAKkiB,QAAQulB,iBAAiB+nB,KAAKxvD,KAAKkiB,SACxCliB,KAAKgsB,SAASmJ,qBAAqB,KAAM,GAC7C,EACAm+C,EAAOzwE,UAAUwhB,QAAU,WACnBrkB,KAAKwkB,aACLxkB,KAAKwkB,WAAWrZ,SAAQ,SAAUgH,GAC9BA,EAAGkS,SACP,IACArkB,KAAKwkB,WAAa,MAElBxkB,KAAKmyB,eACLnyB,KAAKmyB,cAAc9N,UACvBrkB,KAAKgsB,SAAS3H,UACdrkB,KAAKmZ,QAAQ,UAAWnZ,MACpBA,KAAKkiB,SACLliB,KAAKkiB,QAAQmC,UACbrkB,KAAK6zE,kBACL7zE,KAAK6zE,iBAAiBplE,SAC1BzO,KAAKqa,oBACT,EACAi5D,EAAOzwE,UAAU+9E,4BAA8B,SAAUxf,GACrD,GAAKA,EAAL,CAEA,IAAI7vC,EACA6S,EAAOpkC,KACP6gF,GAAe,EACd7gF,KAAK8gF,gBACN9gF,KAAK8gF,cAAgBhvE,SAASM,cAAc,QAChD,IAAI2uE,EAAe/gF,KAAK8gF,cACxBC,EAAavuE,MAAM3L,QAAU,oBAC7B7G,KAAKuU,UAAUE,aAAassE,EAAc/gF,KAAKuU,UAAUG,YACzD,IAAIssE,EAAoBhhF,KAAKqZ,GAAG,mBAAmB,WAC/CwnE,GAAe,CACnB,IACII,EAAiBjhF,KAAKgsB,SAAS3S,GAAG,gBAAgB,WAC9CwnE,IACAtvD,EAAO6S,EAAKpY,SAASzX,UAAU6X,wBACvC,IACI80D,EAAgBlhF,KAAKgsB,SAAS3S,GAAG,eAAe,WAChD,GAAIwnE,GAAgBtvD,IAAS6S,EAAKrZ,aAC3BqZ,EAAK+8C,WAAa/8C,EAAK+8C,UAAUp2D,aAAc,CAClD,IAAIiB,EAAWoY,EAAKpY,SAChB+H,EAAM/H,EAAS0X,aAAa09C,UAC5BniE,EAAS+M,EAAS6W,YAClB/rB,EAAMid,EAAIjd,IAAMmI,EAAO9Q,OAEvB0yE,EADA9sD,EAAIjd,KAAO,GAAKA,EAAMya,EAAKza,IAAM,KAG5Bid,EAAIjd,IAAMmI,EAAO9J,QACtB4e,EAAIjd,IAAMya,EAAKza,IAAMmI,EAAOke,WAAal2B,OAAOg2B,cAIjC,KAEC,MAAhB4jD,IACAE,EAAavuE,MAAMsE,IAAMA,EAAM,KAC/BiqE,EAAavuE,MAAM8C,KAAOye,EAAIze,KAAO,KACrCyrE,EAAavuE,MAAM2C,OAAS8J,EAAOke,WAAa,KAChD4jD,EAAahW,eAAe8V,IAEhCA,EAAetvD,EAAO,IAC1B,CACJ,IACAvxB,KAAK4gF,4BAA8B,SAAUxf,GACrCA,WAEGphE,KAAK4gF,4BACZ5gF,KAAKuZ,IAAI,kBAAmBynE,GAC5BhhF,KAAKgsB,SAASzS,IAAI,cAAe2nE,GACjClhF,KAAKgsB,SAASzS,IAAI,eAAgB0nE,GACtC,CAjDU,CAkDd,EACA3N,EAAOzwE,UAAUmhC,kBAAoB,WACjC,IAAIxxB,EAAQxS,KAAKqhF,cAAgB,MAC7BC,EAActhF,KAAKgsB,SAAS0X,aAC3B49C,IAELA,EAAYC,kBAAkB,SAASp/E,KAAKqQ,IAC5C8uE,EAAYE,YAAcxhF,KAAK6vB,WAAsB,QAATrd,EAC5CuE,EAAIlD,YAAYytE,EAAYruE,QAAS,mBAAoB,OAAO9Q,KAAKqQ,IACzE,EACA8gE,EAAOzwE,UAAUqoE,OAAS,SAAUvvD,EAAStJ,EAAStK,GAClD,IAAIurB,EAAStzB,KACbif,EAAOd,WAAW,kBAAkB,SAAUhb,GAC1CA,EAAO+nE,OAAO53C,EAAQ3X,EAAStJ,EAAStK,EAC5C,GACJ,EACOurE,CACX,CAtrD2B,GAurD3BA,EAAOjY,KAAO,EACdiY,EAAOzwE,UAAU4pB,MAAQ,KACzB6mD,EAAOzwE,UAAUqxE,OAAS,CAAC,EAC3BZ,EAAOzwE,UAAU6xE,mBAAqB,CAAC,YAAa,MAAO,gBAC3DpB,EAAOzwE,UAAUi7E,iBAAmB,CAChC,CAAC,QAAS,QACV,CAAC,OAAQ,SACT,CAAC,MAAO,MACR,CAAC,QAAS,UACV,CAAC,MAAO,UACR,CAAC,QAAS,QACV,CAAC,KAAM,OACP,CAAC,IAAK,KACN,CAAC,MAAO,OACR,CAAC,MAAO,OACR,CAAC,aAAc,YACf,CAAC,OAAQ,QACT,CAAC,MAAO,UACR,CAAC,KAAM,QACP,CAAC,SAAU,SACX,CAAC,OAAQ,OACT,CAAC,KAAM,OACP,CAAC,SAAU,WACX,CAAC,OAAQ,YACT,CAAC,WAAY,YACb,CAAC,SAAU,UACX,CAAC,KAAM,MACP,CAAC,KAAM,OAEXnjE,EAAItC,UAAUi7D,EAAOzwE,UAAW0V,GAChC0G,EAAOnD,cAAcw3D,EAAOzwE,UAAW,SAAU,CAC7C4+E,eAAgB,CACZ/lE,IAAK,SAAUlJ,GACXxS,KAAK42E,oBACL52E,KAAKmZ,QAAQ,uBAAwB,CAAEqB,KAAMhI,GACjD,EACAuJ,aAAc,QAElB2lE,oBAAqB,CACjBhmE,IAAK,WAAc1b,KAAKq4E,4BAA8B,EACtDt8D,cAAc,GAElB4lE,sBAAuB,CACnBjmE,IAAK,SAAUk/D,GAAmB56E,KAAK81E,oBAAsB,EAC7D/5D,cAAc,GAElBgV,SAAU,CACNrV,IAAK,SAAUqV,GACX/wB,KAAK8xB,UAAUd,YAAYD,GAC3B/wB,KAAKgkC,mBACT,EACAjoB,cAAc,GAElB6lE,uBAAwB,CACpBlmE,IAAK,SAAUza,GACXjB,KAAK8xB,UAAUb,0BAA0BhwB,EAC7C,EACA8a,cAAc,GAElBoqB,YAAa,CACTzqB,IAAK,SAAUhS,GAAO1J,KAAKgkC,mBAAqB,EAChD34B,OAAQ,CAAC,MAAO,OAAQ,SAAU,QAClC0Q,aAAc,OAElBogD,gBAAiB,CACb9wD,OAAQ,EAAC,GAAO,EAAM,UACtB0Q,cAAc,GAElB8lE,kBAAmB,CAAE9lE,cAAc,GACnC+lE,sBAAuB,CAAE/lE,cAAc,GACvCgmE,iBAAkB,CAAEhmE,cAAc,GAClCimE,yBAA0B,CACtBtmE,IAAK,SAAUhS,GAAO1J,KAAK4gF,4BAA4Bl3E,EAAM,GAEjEorE,gBAAiB,CACbp5D,IAAK,SAAUhS,GAAO1J,KAAK0sC,mBAAmBhjC,EAAM,EACpDsN,IAAK,WAAc,OAAOhX,KAAK+0E,aAAe,EAC9Ct5D,YAAY,GAEhBxa,MAAO,CACHya,IAAK,SAAUhS,GAAO1J,KAAKkiB,QAAQonC,SAAS5/C,EAAM,EAClDsN,IAAK,WAAc,OAAOhX,KAAK0yC,UAAY,EAC3Cj3B,YAAY,EACZL,QAAQ,GAEZ8G,QAAS,CACLxG,IAAK,SAAUhS,GAAO1J,KAAK8zE,WAAWpqE,EAAM,EAC5CsN,IAAK,WAAc,OAAOhX,KAAKkiB,OAAS,EACxCzG,YAAY,EACZL,QAAQ,GAEZ6mE,gBAAiB,CACbvmE,IAAK,SAAUod,GACX94B,KAAKgsB,SAASgS,aAAakkD,mBAAmBppD,GAC9C94B,KAAKgsB,SAASm2D,MAAMxzE,SAAS3O,KAAKgsB,SAASo2D,eACvCtpD,GAAQ94B,KAAKqiF,qBACbC,EAAuB11C,OAAO5sC,MAE9BsiF,EAAuBz1C,OAAO7sC,KACtC,EACA+b,cAAc,GAElBwmE,oBAAqB,CACjB7mE,IAAK,SAAUza,GACPjB,KAAKwiF,kBAAoBvhF,EACzBqhF,EAAuB11C,OAAO5sC,MAE9BsiF,EAAuBz1C,OAAO7sC,KACtC,GAEJ2yD,YAAa,CACTj3C,IAAK,SAAUC,GACN3b,KAAKyiF,qBACNziF,KAAKyiF,mBAAqB,WACtB,IAAIC,EAAW1iF,KAAKkiB,UAAYliB,KAAKgsB,SAAS22D,cAC1C3iF,KAAKkiB,QAAQmc,YAAc,GAAKr+B,KAAKkiB,QAAQ7f,QAAQ,GAAG1B,OAAS,GACrE,GAAI+hF,GAAY1iF,KAAKgsB,SAAS42D,gBAC1B5iF,KAAKgsB,SAASzS,IAAI,cAAevZ,KAAKyiF,oBACtC1rE,EAAIrD,eAAe1T,KAAKuU,UAAW,sBACnCvU,KAAKgsB,SAAS42D,gBAAgB18E,SAC9BlG,KAAKgsB,SAAS42D,gBAAkB,UAE/B,GAAKF,GAAa1iF,KAAKgsB,SAAS42D,iBAS3BF,GAAY1iF,KAAKgsB,SAAS42D,kBAChC5iF,KAAKgsB,SAAS42D,gBAAgBzvE,YAAcnT,KAAK6iF,cAAgB,QAVf,CAClD7iF,KAAKgsB,SAAS3S,GAAG,cAAerZ,KAAKyiF,oBACrC1rE,EAAItD,YAAYzT,KAAKuU,UAAW,sBAChC,IAAIpC,EAAK4E,EAAI3E,cAAc,OAC3BD,EAAGI,UAAY,kBACfJ,EAAGgB,YAAcnT,KAAK6iF,cAAgB,GACtC7iF,KAAKgsB,SAAS42D,gBAAkBzwE,EAChCnS,KAAKgsB,SAAS82D,QAAQ9wE,YAAYhS,KAAKgsB,SAAS42D,gBACpD,CAIJ,EAAEn6D,KAAKzoB,MACPA,KAAKqZ,GAAG,QAASrZ,KAAKyiF,qBAE1BziF,KAAKyiF,oBACT,GAEJx2D,4BAA6B,CACzBvQ,IAAK,SAAUza,GACX,IAmBI+xE,EAnBA+P,EAAc,CACdt5E,KAAM,gBACNmhE,YAAa,wEACbhC,QAAS,MACTzkE,KAAM,SAAUmvB,GACZA,EAAO9G,OACP8G,EAAOtH,SAAS6G,SAAS9G,OAC7B,EACAgF,UAAU,GAEViyD,EAAoB,SAAU7kF,GAC9B,GAAIA,EAAE2M,QAAU9K,KAAKgsB,SAAS6G,UAAY10B,EAAEslB,UAAYvY,EAAK,SAAU,CACnE/M,EAAEua,iBACF,IAAIlW,EAAMxC,KAAKi1C,oBAAoBzyC,IAC9BxC,KAAK4wE,aAAapuE,IACnBxC,KAAK6wE,aAAaruE,GAAK,GAAM,GACjCxC,KAAK+rB,OACT,CACJ,EAEI9qB,GACAjB,KAAKgsB,SAASC,6BAA8B,EAC5CjsB,KAAKgsB,SAAS4mD,uBAAyB,qBACvC5yE,KAAK8xB,UAAUjB,aAAape,aAAa,YAAa,GACtDzS,KAAK8xB,UAAU7G,sBAAsBzZ,EAAUlB,MAAQ,EAAI,GAC3DtQ,KAAKgsB,SAAS6G,SAASpgB,aAAa,WAAY,GAChDzS,KAAKgsB,SAAS6G,SAASpgB,aAAa,OAAQ,SAC5CzS,KAAKgsB,SAAS6G,SAASpgB,aAAa,uBAAwB6J,EAAI,WAChEtc,KAAKgsB,SAAS6G,SAAS8K,UAAU/pB,IAAI5T,KAAKgsB,SAAS4mD,wBACnD5yE,KAAKgsB,SAAS6G,SAASpgB,aAAa,aAAc6J,EAAI,uEACtDtc,KAAKgsB,SAAS6G,SAAS5Y,iBAAiB,QAAS+oE,EAAkBv6D,KAAKzoB,OACxEA,KAAK2yB,SAAS+1C,WAAWqa,GACzB/iF,KAAKgsB,SAASsT,QAAQ7sB,aAAa,WAAY,GAC/CzS,KAAKgsB,SAASsT,QAAQ7sB,aAAa,eAAe,GAClDzS,KAAKgsB,SAASsT,QAAQ7sB,aAAa,OAAQ,SAC3CzS,KAAKgsB,SAASsT,QAAQ7sB,aAAa,uBAAwB6J,EAAI,WAC/Dtc,KAAKgsB,SAASsT,QAAQ7sB,aAAa,aAAc6J,EAAI,gGACrDtc,KAAKgsB,SAASsT,QAAQ3B,UAAU/pB,IAAI5T,KAAKgsB,SAAS4mD,wBAClD5yE,KAAKgsB,SAAS82D,QAAQrwE,aAAa,eAAe,GAC7CugE,IACDA,EAAwB,IAAI3C,EAAsBrwE,OACtDgzE,EAAsB1uD,gBAGtBtkB,KAAKgsB,SAASC,6BAA8B,EAC5CjsB,KAAK8xB,UAAUjB,aAAape,aAAa,WAAY,GACrDzS,KAAK8xB,UAAU7G,sBAAsB,GACrCjrB,KAAKgsB,SAAS6G,SAASpgB,aAAa,YAAa,GACjDzS,KAAKgsB,SAAS6G,SAASvH,gBAAgB,QACvCtrB,KAAKgsB,SAAS6G,SAASvH,gBAAgB,wBACvCtrB,KAAKgsB,SAAS6G,SAAS8K,UAAUz3B,OAAOlG,KAAKgsB,SAAS4mD,wBACtD5yE,KAAKgsB,SAAS6G,SAASvH,gBAAgB,cACvCtrB,KAAKgsB,SAAS6G,SAASzY,oBAAoB,QAAS4oE,EAAkBv6D,KAAKzoB,OAC3EA,KAAK2yB,SAASg2C,cAAcoa,GAC5B/iF,KAAKgsB,SAAS82D,QAAQx3D,gBAAgB,eACtCtrB,KAAKgsB,SAASsT,QAAQ7sB,aAAa,YAAa,GAChDzS,KAAKgsB,SAASsT,QAAQ7sB,aAAa,eAAe,GAClDzS,KAAKgsB,SAASsT,QAAQhU,gBAAgB,QACtCtrB,KAAKgsB,SAASsT,QAAQhU,gBAAgB,wBACtCtrB,KAAKgsB,SAASsT,QAAQhU,gBAAgB,cACtCtrB,KAAKgsB,SAASsT,QAAQ3B,UAAUz3B,OAAOlG,KAAKgsB,SAAS4mD,wBACjDI,GACAA,EAAsB74D,iBAElC,EACA4B,cAAc,GAElBknE,gBAAiB,WACjBC,wBAAyB,WACzBC,wBAAyB,WACzBC,oBAAqB,WACrBC,eAAgB,WAChBtxC,eAAgB,WAChB2pC,gBAAiB,WACjB4H,kBAAmB,WACnBC,YAAa,WACbC,gBAAiB,WACjBC,gBAAiB,WACjBC,oBAAqB,WACrBC,sBAAuB,WACvBC,WAAY,WACZ15D,SAAU,WACV25D,WAAY,WACZC,SAAU,WACVC,SAAU,WACVC,cAAe,WACfC,iBAAkB,WAClBprD,MAAO,WACPqrD,iBAAkB,WAClBC,eAAgB,WAChBr0D,kBAAmB,WACnBs0D,kBAAmB,WACnBC,kBAAmB,WACnBC,sBAAuB,WACvBp5C,YAAa,gBACbC,UAAW,gBACXC,YAAa,gBACbC,aAAc,gBACdC,oBAAqB,gBACrBk7B,gBAAiB,UACjBzI,UAAW,UACXlU,YAAa,UACbwV,UAAW,UACXoH,YAAa,UACb7I,uBAAwB,UACxB9jB,QAAS,UACTwsB,KAAM,UACNrC,iBAAkB,UAClByC,UAAW,UACXz/B,KAAM,YAEV,IAAIq7C,EAAyB,CACzBiC,QAAS,SAAkCriE,EAA4B1f,GACnE,OAAQ2J,KAAKua,IAAIxE,EAAQ7b,UAAUC,KAAK9D,IAAMA,IAASA,EAAM,GAAKA,EAAM,EAAI,IAAS,KAAQ,EACjG,EACA02B,SAAU,SAAUhX,EAA4BsiE,EAAgBvlE,GAC5D,OAAO9S,KAAKC,IAAIo4E,EAAet8E,WAAWvH,QAASse,EAAO0C,QAAU,GAAGzZ,WAAWvH,OAAQ,GAAKse,EAAOqS,cAC1G,EACA27B,OAAQ,SAAU9uD,EAAsBm1B,GACpCA,EAAOtH,SAASm2D,MAAMxzE,SAAS2kB,EAAOtH,SAASo2D,cACnD,EACAx1C,OAAQ,SAA6BtZ,GACjCA,EAAOtH,SAASgS,aAAaymD,UAAYzkF,KACzCszB,EAAOja,GAAG,kBAAmBrZ,KAAKitD,QAClCjtD,KAAKitD,OAAO,KAAM35B,EACtB,EACAuZ,OAAQ,SAA6BvZ,GAC7BA,EAAOtH,SAASgS,aAAaymD,WAAazkF,OAC1CszB,EAAOtH,SAASgS,aAAaymD,UAAY,MAC7CnxD,EAAO/Z,IAAI,kBAAmBvZ,KAAKitD,QACnCjtD,KAAKitD,OAAO,KAAM35B,EACtB,GAEJ5sB,EAAQ4sE,OAASA,CAEjB,IAEAr1E,IAAIC,OAAO,kBAAkB,CAAC,UAAU,UAAU,SAAS,gBAAgB,SAASuI,EAASC,EAASvD,GAAQ,aAC9G,IAAI4T,EAAMtQ,EAAQ,cACdi+E,EAAuB,WACvB,SAASA,EAAMzxE,EAAS0xE,GACpB3kF,KAAKiT,QAAUA,EACfjT,KAAK2kF,aAAeA,GAAgB,IACpC3kF,KAAKiT,QAAQT,MAAM2C,OAA8B,EAApBnV,KAAK2kF,aAAoB,KACtD3kF,KAAK6xE,MAAQ,GACb7xE,KAAK4kF,UAAY,GACjB5kF,KAAK6kF,mBAAqB,CAC9B,CAwFA,OAvFAH,EAAM7hF,UAAUiiF,cAAgB,SAAU7lE,GACtClI,EAAIL,UAAU1W,KAAKiT,QAAS,GAAMgM,EAAO8lE,eAAiB9lE,EAAOke,WAAcn9B,KAAK2kF,aAAgB1lE,EAAO9Q,OAASnO,KAAK6kF,mBAC7H,EACAH,EAAM7hF,UAAUmiF,YAAc,SAAUC,EAAWC,GAC/C,OAAQ/4E,KAAKg6C,MAAO8+B,EAAUF,eAAiBE,EAAU9nD,WAAcn9B,KAAK2kF,gBACxEx4E,KAAKg6C,MAAO++B,EAAUH,eAAiBG,EAAU/nD,WAAcn9B,KAAK2kF,aAC5E,EACAD,EAAM7hF,UAAUsiF,eAAiB,SAAU3iF,EAAKyc,EAAQiD,GACpD,IAAIkjE,EAAYnmE,EAAO8lE,eAAiB9lE,EAAOke,WAC3CkoD,EAAal5E,KAAKg6C,MAAMi/B,EAAYplF,KAAK2kF,cACzCW,EAAUpjE,EAAQsc,oBAAoBh8B,EAAK,GAAKyc,EAAOke,WAC3D,OAAOmoD,EAAWD,EAAarlF,KAAK2kF,YACxC,EACAD,EAAM7hF,UAAU0iF,kBAAoB,SAAU/iF,EAAKyc,EAAQiD,GACvD,OAAOjD,EAAOke,WAAajb,EAAQ+iD,gBAAgBziE,EACvD,EACAkiF,EAAM7hF,UAAUw7B,UAAY,WACxB,OAAOr+B,KAAK6xE,MAAMlxE,MACtB,EACA+jF,EAAM7hF,UAAUmU,IAAM,SAAUhT,GAC5B,OAAOhE,KAAK6xE,MAAM7tE,EACtB,EACA0gF,EAAM7hF,UAAUzB,MAAQ,WACpBpB,KAAKwlF,WAAWxlF,KAAK6xE,MAAMzwE,QAC/B,EACAsjF,EAAM7hF,UAAUmX,IAAM,WAClBha,KAAKwlF,WAAWxlF,KAAK6xE,MAAM73D,MAC/B,EACA0qE,EAAM7hF,UAAUrC,KAAO,SAAUkyE,GAC7B,GAAIlnE,MAAMmB,QAAQ+lE,GAAO,CACrB1yE,KAAK6xE,MAAMrxE,KAAKiH,MAAMzH,KAAK6xE,MAAOa,GAElC,IADA,IAAI+S,EAAW1uE,EAAI1D,eAAerT,KAAKiT,SAC9B1U,EAAI,EAAGA,EAAIm0E,EAAK/xE,OAAQpC,IAC7BknF,EAASzzE,YAAY0gE,EAAKn0E,GAAG0U,SAEjCjT,KAAKiT,QAAQjB,YAAYyzE,EAC7B,MAEIzlF,KAAK6xE,MAAMrxE,KAAKkyE,GAChB1yE,KAAKiT,QAAQjB,YAAY0gE,EAAKz/D,QAEtC,EACAyxE,EAAM7hF,UAAUjC,QAAU,SAAU8xE,GAChC,GAAIlnE,MAAMmB,QAAQ+lE,GAAO,CACrB1yE,KAAK6xE,MAAMjxE,QAAQ6G,MAAMzH,KAAK6xE,MAAOa,GAErC,IADA,IAAI+S,EAAW1uE,EAAI1D,eAAerT,KAAKiT,SAC9B1U,EAAI,EAAGA,EAAIm0E,EAAK/xE,OAAQpC,IAC7BknF,EAASzzE,YAAY0gE,EAAKn0E,GAAG0U,SAE7BjT,KAAKiT,QAAQyB,WACb1U,KAAKiT,QAAQwB,aAAagxE,EAAUzlF,KAAKiT,QAAQyB,YAEjD1U,KAAKiT,QAAQjB,YAAYyzE,EACjC,MAEIzlF,KAAK6xE,MAAMjxE,QAAQ8xE,GACnB1yE,KAAKiT,QAAQyyE,sBAAsB,aAAchT,EAAKz/D,QAE9D,EACAyxE,EAAM7hF,UAAU+J,KAAO,WACnB,OAAI5M,KAAK6xE,MAAMlxE,OACJX,KAAK6xE,MAAM7xE,KAAK6xE,MAAMlxE,OAAS,GAE/B,IACf,EACA+jF,EAAM7hF,UAAU2iF,WAAa,SAAU9S,GAC9BA,IAELA,EAAKz/D,QAAQ/M,SACblG,KAAK4kF,UAAUpkF,KAAKkyE,GACxB,EACAgS,EAAM7hF,UAAU8iF,WAAa,SAAUnjF,EAAKyc,EAAQiD,EAAS0jE,GACzD,IAAIlT,EAAO1yE,KAAK4kF,UAAU5qE,MAC1B,IAAK04D,EAAM,CACP,IAAIz/D,EAAU8D,EAAI3E,cAAc,OAC5BwzE,GACAA,EAAY3yE,GAChBjT,KAAKiT,QAAQjB,YAAYiB,GACzBy/D,EAAO,CACHz/D,QAASA,EACT0W,KAAM,GACNnnB,IAAKA,EAEb,CAEA,OADAkwE,EAAKlwE,IAAMA,EACJkwE,CACX,EACOgS,CACX,CAjG0B,GAkG1Bh+E,EAAQg+E,MAAQA,CAEhB,IAEAzmF,IAAIC,OAAO,mBAAmB,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,eAAe,wBAAwB,kBAAkB,eAAe,SAASuI,EAASC,EAASvD,GAAQ,aACnM,IAAI4T,EAAMtQ,EAAQ,cACdkU,EAAMlU,EAAQ,cACd+V,EAAO/V,EAAQ,eACf8R,EAAe9R,EAAQ,wBAAwB8R,aAC/CmsE,EAAQj+E,EAAQ,WAAWi+E,MAC3BpoE,EAAM7V,EAAQ,aAAa6V,IAC3BupE,EAAwB,WACxB,SAASA,EAAOC,GACZ9lF,KAAKiT,QAAU8D,EAAI3E,cAAc,OACjCpS,KAAKiT,QAAQV,UAAY,6BACzBuzE,EAAS9zE,YAAYhS,KAAKiT,SAC1BjT,KAAKi8E,mBAAmBj8E,KAAK+lF,kBAC7B/lF,KAAKiwE,YAAc,EACnBjwE,KAAK+/B,aAAe,GACpB//B,KAAKgmF,mBAAqBhmF,KAAKgmF,mBAAmBv9D,KAAKzoB,MACvDA,KAAK++B,OAAS,IAAI2lD,EAAM1kF,KAAKiT,SAC7BjT,KAAK++B,OAAO8lD,mBAAqB,CACrC,CAoYA,OAnYAgB,EAAOhjF,UAAUixE,WAAa,SAAU5xD,GAChCliB,KAAKkiB,SACLliB,KAAKkiB,QAAQ3I,IAAI,SAAUvZ,KAAKgmF,oBACpChmF,KAAKkiB,QAAUA,EACXA,GACAA,EAAQ7I,GAAG,SAAUrZ,KAAKgmF,mBAClC,EACAH,EAAOhjF,UAAUq7D,oBAAsB,SAAU17D,EAAK+P,GAC9CtL,OAAOS,SACPA,QAAQ6T,MAAQ7T,QAAQ6T,KAAK,8CACjCvb,KAAKkiB,QAAQg8C,oBAAoB17D,EAAK+P,EAC1C,EACAszE,EAAOhjF,UAAUs7D,uBAAyB,SAAU37D,EAAK+P,GACjDtL,OAAOS,SACPA,QAAQ6T,MAAQ7T,QAAQ6T,KAAK,iDACjCvb,KAAKkiB,QAAQi8C,uBAAuB37D,EAAK+P,EAC7C,EACAszE,EAAOhjF,UAAU85D,eAAiB,SAAU57B,GACxC/gC,KAAK+/B,aAAe,GACpB,IAAK,IAAIxhC,EAAI,EAAGA,EAAIwiC,EAAYpgC,OAAQpC,IAAK,CACzC,IAAIshC,EAAakB,EAAYxiC,GACzBiE,EAAMq9B,EAAWr9B,IACjByjF,EAAUjmF,KAAK+/B,aAAav9B,GAC3ByjF,IACDA,EAAUjmF,KAAK+/B,aAAav9B,GAAO,CAAEmnB,KAAM,GAAI3oB,KAAM,KACzD,IAAIklF,EAAWrmD,EAAWlW,KACtBw8D,EAAWtmD,EAAW7+B,KAC1BklF,EAAWA,EAAW1pE,EAAKzO,WAAWm4E,GAAYrmD,EAAWpH,MAAQ,IAC7B,IAApCwtD,EAAQt8D,KAAKnhB,QAAQ09E,KACrBD,EAAQt8D,KAAKnpB,KAAK0lF,GAClBD,EAAQjlF,KAAKR,KAAK2lF,IAEtB,IAAI5zE,EAAYstB,EAAWttB,UACvBA,EACA0zE,EAAQ1zE,UAAYA,EACH,SAAZ4zE,EACLF,EAAQ1zE,UAAY,aACH,WAAZ4zE,GAA8C,cAArBF,EAAQ1zE,UACtC0zE,EAAQ1zE,UAAY,eACH,QAAZ4zE,GAAwBF,EAAQ1zE,YACrC0zE,EAAQ1zE,UAAY,YAC5B,CACJ,EACAszE,EAAOhjF,UAAUmjF,mBAAqB,SAAU/yC,GAC5C,GAAKjzC,KAAK+/B,aAAap/B,OAAvB,CAEA,IAAI+gB,EAAWuxB,EAAM3yC,MAAMkC,IACvBmJ,EAAMsnC,EAAMtvC,IAAInB,IAAMkf,EAC1B,GAAY,IAAR/V,QAEC,GAAoB,UAAhBsnC,EAAMrL,OACX5nC,KAAK+/B,aAAalyB,OAAO6T,EAAU/V,EAAM,EAAG,UAE3C,CACD,IAAIwhC,EAAO,IAAI3hC,MAAMG,EAAM,GAC3BwhC,EAAKvsC,QAAQ8gB,EAAU,GACvB1hB,KAAK+/B,aAAalyB,OAAOpG,MAAMzH,KAAK+/B,aAAcoN,EACtD,CAZU,CAad,EACA04C,EAAOhjF,UAAUoqD,OAAS,SAAUhuC,GAChCjf,KAAKif,OAASA,EACd,IAAIiD,EAAUliB,KAAKkiB,QACfR,EAAWzC,EAAOyC,SAClBC,EAAUxV,KAAKE,IAAI4S,EAAO0C,QAAU1C,EAAOmnE,aAC/ClkE,EAAQmc,YAAc,GACtBr+B,KAAKqmF,WAAa1kE,EAClB3hB,KAAKif,OAASA,EACdjf,KAAK++B,OAAO+lD,cAAc7lE,GAC1Bjf,KAAKsmF,mBACL,IAAIrmD,EAAO/d,EAAQwzC,gBAAgBh0C,GAC/Bs/C,EAAY/gC,EAAOA,EAAK3/B,MAAMkC,IAAM0iD,IACpCwtB,EAAO,KACP1uE,GAAS,EACTxB,EAAMkf,EACV,MAAO,EAAM,CAMT,GALIlf,EAAMw+D,IACNx+D,EAAMy9B,EAAKt8B,IAAInB,IAAM,EACrBy9B,EAAO/d,EAAQwzC,gBAAgBlzD,EAAKy9B,GACpC+gC,EAAY/gC,EAAOA,EAAK3/B,MAAMkC,IAAM0iD,KAEpC1iD,EAAMmf,EAAS,CACf,MAAO3hB,KAAK++B,OAAOV,YAAcr6B,EAAQ,EACrChE,KAAK++B,OAAO/kB,MAChB,KACJ,CACA04D,EAAO1yE,KAAK++B,OAAO/nB,MAAMhT,GACrB0uE,EACAA,EAAKlwE,IAAMA,GAGXkwE,EAAO1yE,KAAK++B,OAAO4mD,WAAWnjF,EAAKyc,EAAQjf,KAAKkiB,QAASqkE,GACzDvmF,KAAK++B,OAAOv+B,KAAKkyE,IAErB1yE,KAAKwmF,YAAY9T,EAAMzzD,EAAQghB,EAAMz9B,GACrCA,GACJ,CACAxC,KAAKmZ,QAAQ,eACbnZ,KAAKymF,mBAAmBxnE,EAC5B,EACA4mE,EAAOhjF,UAAU4jF,mBAAqB,SAAUxnE,GAC5C,IAAIiD,EAAUliB,KAAKkiB,QACfwkE,EAAiBxkE,EAAQwkE,gBAAkB1mF,KAAKykF,UAChDje,EAAkBtkD,EAAQykE,iBAC1BC,EAAe5mF,KAAK++B,OAAOnyB,OAAS5M,KAAK++B,OAAOnyB,OAAO+c,KAAO,IAC9D3pB,KAAK6mF,aAAe3kE,EAAQ0xB,gBAC5BgzC,EAAe1kE,EAAQmc,YAAcmoC,EAAkB,GAC3D,IAAIyJ,EAAcyW,EACZA,EAAextD,SAAShX,EAAS0kE,EAAc3nE,GAC/C2nE,EAAa1+E,WAAWvH,OAASse,EAAOqS,eAC1C6+C,EAAUnwE,KAAK8mF,UAAY9mF,KAAK+mF,kBACpC9W,GAAeE,EAAQ76D,KAAO66D,EAAQz9C,MAClCu9C,IAAgBjwE,KAAKiwE,aAAgB7P,MAAM6P,KAC3CjwE,KAAKiwE,YAAcA,EAAcjwE,KAAKiT,QAAkB,WAAET,MAAMyC,MAC5DjV,KAAKiT,QAAQT,MAAMyC,MAAQ9I,KAAK4jE,KAAK/vE,KAAKiwE,aAAe,KAC7DjwE,KAAKmZ,QAAQ,oBAAqB82D,GAE1C,EACA4V,EAAOhjF,UAAUyjF,iBAAmB,WAChC,GAAKtmF,KAAKgnF,qBAAV,CAEA,IAAI98E,EAAWlK,KAAKkiB,QAAQ7b,UAAU4wC,YAClCj3C,KAAKinF,aAAe/8E,EAAS1H,MAEjCxC,KAAKinF,WAAa/8E,EAAS1H,IAJjB,CAKd,EACAqjF,EAAOhjF,UAAUqkF,oBAAsB,WACnC,GAAKlnF,KAAKgnF,qBAAV,CAEA,IAAIxkF,EAAMxC,KAAKkiB,QAAQ7b,UAAUolB,OAAOjpB,IAExC,GADAxC,KAAKinF,WAAazkF,GACdxC,KAAK+wE,aAAe/wE,KAAK+wE,YAAYvuE,KAAOA,EAAhD,CAEIxC,KAAK+wE,cACL/wE,KAAK+wE,YAAY99D,QAAQV,UAAYvS,KAAK+wE,YAAY99D,QAAQV,UAAU5P,QAAQ,0BAA2B,KAC/G,IAAIkvE,EAAQ7xE,KAAK++B,OAAO8yC,MACxB7xE,KAAK+wE,YAAc,KACnB,IAAK,IAAIxyE,EAAI,EAAGA,EAAIszE,EAAMlxE,OAAQpC,IAAK,CACnC,IAAIm0E,EAAOb,EAAMtzE,GACjB,GAAIm0E,EAAKlwE,KAAOxC,KAAKinF,WAAY,CAC7B,GAAIvU,EAAKlwE,IAAMxC,KAAKinF,WAAY,CAC5B,IAAIhnD,EAAOjgC,KAAKkiB,QAAQge,YAAYlgC,KAAKinF,YACzC,KAAI1oF,EAAI,GAAK0hC,GAAQA,EAAK3/B,MAAMkC,KAAOqvE,EAAMtzE,EAAI,GAAGiE,KAGhD,MAFAkwE,EAAOb,EAAMtzE,EAAI,EAGzB,CACAm0E,EAAKz/D,QAAQV,UAAY,0BAA4BmgE,EAAKz/D,QAAQV,UAClEvS,KAAK+wE,YAAc2B,EACnB,KACJ,CACJ,CAnBU,CAJA,CAwBd,EACAmT,EAAOhjF,UAAUskF,YAAc,SAAUloE,GACrC,IAAIgmE,EAAYjlF,KAAKif,OAGrB,GAFAjf,KAAKif,OAASA,EACdjf,KAAKsmF,mBACDtmF,KAAK++B,OAAOimD,YAAYC,EAAWhmE,GACnC,OAAOjf,KAAKitD,OAAOhuC,GACvBjf,KAAK++B,OAAO+lD,cAAc7lE,GAC1B,IAAI0C,EAAUxV,KAAKE,IAAI4S,EAAO0C,QAAU1C,EAAOmnE,aAC/CpmF,KAAKkiB,QAAQmc,YAAc,GACvBgoD,EAAarmF,KAAKqmF,WAEtB,GADArmF,KAAKqmF,WAAa1kE,GACbsjE,GAAaoB,EAAapnE,EAAOyC,SAClC,OAAO1hB,KAAKitD,OAAOhuC,GACvB,GAAI0C,EAAUsjE,EAAUvjE,SACpB,OAAO1hB,KAAKitD,OAAOhuC,GACvB,GAAIgmE,EAAUvjE,SAAWzC,EAAOyC,SAC5B,IAAK,IAAIlf,EAAMxC,KAAKkiB,QAAQyzC,kBAAkBsvB,EAAUvjE,SAAUzC,EAAOyC,SAAW,GAAIlf,EAAM,EAAGA,IAC7FxC,KAAK++B,OAAO39B,QACpB,GAAIilF,EAAa1kE,EACb,IAASnf,EAAMxC,KAAKkiB,QAAQyzC,kBAAkBh0C,EAAU,EAAG0kE,GAAa7jF,EAAM,EAAGA,IAC7ExC,KAAK++B,OAAO/kB,MAChBiF,EAAOyC,SAAWujE,EAAUvjE,UAC5B1hB,KAAK++B,OAAOn+B,QAAQZ,KAAKonF,aAAanoE,EAAQA,EAAOyC,SAAUujE,EAAUvjE,SAAW,IAEpFC,EAAU0kE,GACVrmF,KAAK++B,OAAOv+B,KAAKR,KAAKonF,aAAanoE,EAAQonE,EAAa,EAAG1kE,IAE/D3hB,KAAKknF,sBACLlnF,KAAKmZ,QAAQ,eACbnZ,KAAKymF,mBAAmBxnE,EAC5B,EACA4mE,EAAOhjF,UAAUukF,aAAe,SAAUnoE,EAAQyC,EAAUC,GACxD,IAAI8jE,EAAW,GACXjjF,EAAMkf,EACNg4B,EAAW15C,KAAKkiB,QAAQwzC,gBAAgBlzD,GACxCw+D,EAAYtnB,EAAWA,EAASp5C,MAAMkC,IAAM0iD,IAChD,MAAO,EAAM,CAMT,GALI1iD,EAAMw+D,IACNx+D,EAAMk3C,EAAS/1C,IAAInB,IAAM,EACzBk3C,EAAW15C,KAAKkiB,QAAQwzC,gBAAgBlzD,EAAKk3C,GAC7CsnB,EAAYtnB,EAAWA,EAASp5C,MAAMkC,IAAM0iD,KAE5C1iD,EAAMmf,EACN,MACJ,IAAI+wD,EAAO1yE,KAAK++B,OAAO4mD,WAAWnjF,EAAKyc,EAAQjf,KAAKkiB,QAASqkE,GAC7DvmF,KAAKwmF,YAAY9T,EAAMzzD,EAAQy6B,EAAUl3C,GACzCijF,EAASjlF,KAAKkyE,GACdlwE,GACJ,CACA,OAAOijF,CACX,EACAI,EAAOhjF,UAAU2jF,YAAc,SAAU9T,EAAMzzD,EAAQghB,EAAMz9B,GACzD,IAAIyQ,EAAUy/D,EAAKz/D,QACfiP,EAAUliB,KAAKkiB,QACfmlE,EAAWp0E,EAAQ6+D,WAAW,GAC9Ba,EAAa1/D,EAAQ6+D,WAAW,GAChCwV,EAAiBr0E,EAAQ6+D,WAAW,GACpCyV,EAAqBD,EAAe5yE,WACpC8xD,EAAkBtkD,EAAQykE,iBAC1B9pB,EAAc36C,EAAQ64C,aACtBysB,EAActlE,EAAQ84C,aACtB0rB,EAAiBxkE,EAAQwkE,gBAAkB1mF,KAAKykF,UAChD74C,EAAc5rC,KAAK+lF,kBAAoB7jE,EAAQ0pB,YAC/Co1B,EAAY/gC,EAAOA,EAAK3/B,MAAMkC,IAAMkoB,OAAO8sB,UAC3Cra,EAAale,EAAOke,WAAa,KACjC5qB,EAAYvS,KAAK4gC,mBAAqB,6BAA+B,mBACrED,EAAgB3gC,KAAK4gC,mBAAqB,eAAiB,WAC3D6mD,GAAWf,EACTA,EAAenC,QAAQriE,EAAS1f,GAChCA,EAAMgkE,GAAiBt+D,WAiB7B,GAhBIlI,KAAKgnF,uBACDxkF,GAAOxC,KAAKinF,YAAehnD,GAAQz9B,EAAMxC,KAAKinF,YAAczkF,GAAOw+D,GAAahhE,KAAKinF,YAAchnD,EAAKt8B,IAAInB,OAC5G+P,GAAa,0BACTvS,KAAK+wE,aAAe2B,IAChB1yE,KAAK+wE,cACL/wE,KAAK+wE,YAAY99D,QAAQV,UAAYvS,KAAK+wE,YAAY99D,QAAQV,UAAU5P,QAAQ,0BAA2B,KAC/G3C,KAAK+wE,YAAc2B,IAI3B7V,EAAYr6D,KACZ+P,GAAasqD,EAAYr6D,IACzBglF,EAAYhlF,KACZ+P,GAAai1E,EAAYhlF,IACzBxC,KAAK+/B,aAAav9B,IAAQA,IAAQw+D,IAClCzuD,GAAavS,KAAK+/B,aAAav9B,GAAK+P,WACpCq5B,EAAa,CACb,IAAInsC,EAAImsC,EAAYppC,GACX,MAAL/C,IACAA,EAAImsC,EAAYppC,GAAO0f,EAAQpe,cAActB,GACrD,CACA,GAAI/C,EAAG,CACH,IAAIioF,EAAY,uBAAyBjoF,EACrCkoF,EAAoB,SAALloF,GAAgB+C,GAAOw+D,GAAax+D,EAAMy9B,EAAKt8B,IAAInB,IACtE,GAAImlF,EAAc,CACdD,GAAa,cAGb,IAFA,IAAIE,EAAsB,GACtBC,GAAmB,EACdtpF,EAAIiE,EAAM,EAAGjE,GAAK0hC,EAAKt8B,IAAInB,IAAKjE,IACrC,GAAKyB,KAAK+/B,aAAaxhC,GAAvB,CAEA,GAAuC,eAAnCyB,KAAK+/B,aAAaxhC,GAAGgU,UAA4B,CACjDs1E,GAAmB,EACnBD,EAAsB,kBACtB,KACJ,CACuC,iBAAnC5nF,KAAK+/B,aAAaxhC,GAAGgU,YACrBs1E,GAAmB,EACnBD,EAAsB,oBARd,CAYhBr1E,GAAaq1E,CACjB,MAEIF,GAAa,YACb/U,EAAWpgE,WAAam1E,IACxB/U,EAAWpgE,UAAYm1E,GAC3B3wE,EAAIf,SAAS28D,EAAWngE,MAAO,SAAU2qB,GACzCpmB,EAAIf,SAAS28D,EAAWngE,MAAO,UAAW,gBAC1CmgE,EAAWlgE,aAAa,OAAQ,UAChCkgE,EAAWlgE,aAAa,WAAY,MACpC,IAAIq1E,EAAY5lE,EAAQje,mBAAmBzB,GACvCslF,EACAnV,EAAWlgE,aAAa,aAAc6J,EAAI,0CAA2C,CAACwrE,EAAUxnF,MAAMkC,IAAM,EAAGslF,EAAUnkF,IAAInB,IAAM,KAE/Hy9B,EACA0yC,EAAWlgE,aAAa,aAAc6J,EAAI,0CAA2C,CAAC2jB,EAAK3/B,MAAMkC,IAAM,EAAGy9B,EAAKt8B,IAAInB,IAAM,KAEzHmwE,EAAWlgE,aAAa,aAAc6J,EAAI,8BAA+B,CAAC9Z,EAAM,KAEpFmlF,GACAhV,EAAWlgE,aAAa,gBAAiB,SACzCkgE,EAAWlgE,aAAa,QAAS6J,EAAI,kBAGrCq2D,EAAWlgE,aAAa,gBAAiB,QACzCkgE,EAAWlgE,aAAa,QAAS6J,EAAI,cAE7C,MAEQq2D,IACA57D,EAAIf,SAAS28D,EAAWngE,MAAO,UAAW,QAC1CmgE,EAAWlgE,aAAa,WAAY,KACpCkgE,EAAWrnD,gBAAgB,QAC3BqnD,EAAWrnD,gBAAgB,eA8CnC,OA3CIu8D,GAAoB7nF,KAAKmgC,wBACzBmnD,EAAe/0E,UAAY,wBAC3Bg1E,EAAmBh1E,UAAYouB,EAC/B4mD,EAAmBh1E,WAAaq1E,EAChC7wE,EAAIf,SAASuxE,EAAmB/0E,MAAO,SAAU2qB,GACjDpmB,EAAIf,SAASsxE,EAAe90E,MAAO,UAAW,SAC9CuE,EAAIf,SAASsxE,EAAe90E,MAAO,SAAU2qB,GAC7CmqD,EAAe70E,aAAa,aAAc6J,EAAI,0BAA2B,CAACmrE,KAC1EH,EAAe70E,aAAa,WAAY,MACxC60E,EAAe70E,aAAa,OAAQ,WAE/BzS,KAAK+/B,aAAav9B,IACvB8kF,EAAe/0E,UAAY,wBAC3Bg1E,EAAmBh1E,UAAYouB,EAC3B3gC,KAAK4gC,mBACL2mD,EAAmBh1E,WAAavS,KAAK+/B,aAAav9B,GAAK+P,UAEvDU,EAAQ0qB,UAAU/pB,IAAI5T,KAAK+/B,aAAav9B,GAAK+P,UAAU5P,QAAQ,IAAK,KACxEoU,EAAIf,SAASuxE,EAAmB/0E,MAAO,SAAU2qB,GACjDpmB,EAAIf,SAASsxE,EAAe90E,MAAO,UAAW,SAC9CuE,EAAIf,SAASsxE,EAAe90E,MAAO,SAAU2qB,GAC7CmqD,EAAe70E,aAAa,aAAc6J,EAAI,0BAA2B,CAACmrE,KAC1EH,EAAe70E,aAAa,WAAY,MACxC60E,EAAe70E,aAAa,OAAQ,YAGpCsE,EAAIf,SAASsxE,EAAe90E,MAAO,UAAW,QAC9C80E,EAAeh8D,gBAAgB,cAC/Bg8D,EAAeh8D,gBAAgB,QAC/Bg8D,EAAe70E,aAAa,WAAY,MAExCg1E,IAAYJ,EAAS7sE,OACrB6sE,EAAS7sE,KAAOitE,GAEhBx0E,EAAQV,WAAaA,IACrBU,EAAQV,UAAYA,GACxBwE,EAAIf,SAAS08D,EAAKz/D,QAAQT,MAAO,SAAUxS,KAAK++B,OAAOwmD,kBAAkB/iF,EAAKyc,EAAQiD,GAAW,MACjGnL,EAAIf,SAAS08D,EAAKz/D,QAAQT,MAAO,MAAOxS,KAAK++B,OAAOomD,eAAe3iF,EAAKyc,EAAQiD,GAAW,MAC3FwwD,EAAK/oD,KAAO89D,EACyB,SAAjCH,EAAe90E,MAAM4C,SAAmD,SAA7Bu9D,EAAWngE,MAAM4C,QAC5Ds9D,EAAKz/D,QAAQR,aAAa,eAAe,GAEzCigE,EAAKz/D,QAAQR,aAAa,eAAe,GACtCigE,CACX,EACAmT,EAAOhjF,UAAUi4E,uBAAyB,SAAUsI,GAChDpjF,KAAKgnF,qBAAuB5D,CAChC,EACAyC,EAAOhjF,UAAUq/E,mBAAqB,SAAUppD,GAC5C94B,KAAKykF,WAAa3rD,GAAQ,CACtBI,SAAU,WAAc,OAAO,CAAG,EAClCqrD,QAAS,WAAc,MAAO,EAAI,EAE1C,EACAsB,EAAOhjF,UAAUklF,mBAAqB,WAClC,OAAO/nF,KAAKwiF,gBAChB,EACAqD,EAAOhjF,UAAUo5E,mBAAqB,SAAUnjD,GACxCA,EACA/hB,EAAItD,YAAYzT,KAAKiT,QAAS,uBAE9B8D,EAAIrD,eAAe1T,KAAKiT,QAAS,uBACrCjT,KAAK+lF,iBAAmBjtD,EACxB94B,KAAK8mF,SAAW,IACpB,EACAjB,EAAOhjF,UAAUq5E,mBAAqB,WAClC,OAAOl8E,KAAK+lF,gBAChB,EACAF,EAAOhjF,UAAUkkF,gBAAkB,WAC/B,IAAK/mF,KAAKiT,QAAQyB,WACd,MAAO,CAAEY,KAAM,EAAGod,MAAO,GAC7B,IAAIlgB,EAAQuE,EAAIjB,cAAmC9V,KAAKiT,QAAkB,YAM1E,OALAjT,KAAK8mF,SAAW,CAAC,EACjB9mF,KAAK8mF,SAASxxE,MAAQ0N,SAASxQ,EAAMif,kBAAoB,IAClDzO,SAASxQ,EAAMw1E,cAAgB,GAAK,EAC3ChoF,KAAK8mF,SAASp0D,OAAS1P,SAASxQ,EAAMy1E,mBAAqB,IACpDjlE,SAASxQ,EAAM01E,eAAiB,GAChCloF,KAAK8mF,QAChB,EACAjB,EAAOhjF,UAAUs8B,UAAY,SAAUipB,GACnC,IAAI+nB,EAAUnwE,KAAK8mF,UAAY9mF,KAAK+mF,kBAChCx1D,EAAOvxB,KAAKiT,QAAQmZ,wBACxB,OAAIg8B,EAAM7kC,EAAI4sD,EAAQ76D,KAAOic,EAAKjc,KACvB,UACPtV,KAAK+lF,kBAAoB39B,EAAM7kC,EAAIgO,EAAKmB,MAAQy9C,EAAQz9C,MACjD,mBADX,CAEJ,EACOmzD,CACX,CAhZ2B,GAuZ3B,SAASU,EAAatzE,GAClB,IAAIo0E,EAAWv1E,SAASC,eAAe,IACvCkB,EAAQjB,YAAYq1E,GACpB,IAAI1U,EAAa57D,EAAI3E,cAAc,QACnCa,EAAQjB,YAAY2gE,GACpB,IAAI2U,EAAiBvwE,EAAI3E,cAAc,QACvCa,EAAQjB,YAAYs1E,GACpB,IAAIC,EAAqBxwE,EAAI3E,cAAc,QAE3C,OADAk1E,EAAet1E,YAAYu1E,GACpBt0E,CACX,CAhBA4yE,EAAOhjF,UAAUgkF,aAAc,EAC/BhB,EAAOhjF,UAAUmkF,sBAAuB,EACxCnB,EAAOhjF,UAAU4hF,UAAY,GAC7BoB,EAAOhjF,UAAU2/E,kBAAmB,EACpCqD,EAAOhjF,UAAUkjF,kBAAmB,EACpCprE,EAAItC,UAAUwtE,EAAOhjF,UAAW0V,GAYhC7R,EAAQm/E,OAASA,CAEjB,IAEA5nF,IAAIC,OAAO,mBAAmB,CAAC,UAAU,UAAU,SAAS,YAAY,gBAAgB,SAASuI,EAASC,EAASvD,GAAQ,aAC3H,IAAIlB,EAAQwE,EAAQ,YAAYxE,MAC5B8U,EAAMtQ,EAAQ,cACd0hF,EAAwB,WACxB,SAASA,EAAOrC,GACZ9lF,KAAKiT,QAAU8D,EAAI3E,cAAc,OACjCpS,KAAKiT,QAAQV,UAAY,6BACzBuzE,EAAS9zE,YAAYhS,KAAKiT,QAC9B,CAqKA,OApKAk1E,EAAOtlF,UAAUulF,WAAa,SAAUjY,GACpCnwE,KAAK8mF,SAAW3W,CACpB,EACAgY,EAAOtlF,UAAUixE,WAAa,SAAU5xD,GACpCliB,KAAKkiB,QAAUA,CACnB,EACAimE,EAAOtlF,UAAUwlF,WAAa,SAAU1pB,GACpC3+D,KAAK2+D,QAAUA,CACnB,EACAwpB,EAAOtlF,UAAUylF,IAAM,SAAU/1E,EAAWg2E,GACxC,IAAIhlE,GAAe,GAAXvjB,KAAKzB,GAAWyB,KAAKiT,QAAQ6+D,WAAW9xE,KAAKzB,GAChDglB,EAMDvjB,KAAKzB,KALLglB,EAAIzR,SAASM,cAAc,OAC3BpS,KAAKiT,QAAQjB,YAAYuR,GACzBvjB,KAAKzB,GAAK,GAKdglB,EAAE/Q,MAAM3L,QAAU0hF,EAClBhlE,EAAEhR,UAAYA,CAClB,EACA41E,EAAOtlF,UAAUoqD,OAAS,SAAUhuC,GAChC,GAAKA,EAAL,CAIA,IAAIwZ,EACJ,IAAK,IAAIrtB,KAHTpL,KAAKif,OAASA,EACdjf,KAAKzB,EAAI,EAEOyB,KAAK2+D,QAAS,CAC1B,IAAIrhC,EAASt9B,KAAK2+D,QAAQvzD,GAC1B,GAAKkyB,EAAOhd,MAAZ,CAIA,IAAIA,EAAQgd,EAAOhd,MAAMmB,SAASxC,EAAOyC,SAAUzC,EAAO0C,SAC1D,IAAIrB,EAAMwB,UAGV,GADAxB,EAAQA,EAAM2B,cAAcjiB,KAAKkiB,SAC7Bob,EAAOtR,SAAU,CACjB,IAAIlV,EAAM9W,KAAKwoF,QAAQloE,EAAMhgB,MAAMkC,IAAKyc,GACpC3J,EAAOtV,KAAK8mF,SAAWxmE,EAAMhgB,MAAMmC,OAASwc,EAAOqS,eACvDgM,EAAOtR,SAASyM,EAAMnY,EAAOhL,EAAMwB,EAAKmI,EAC5C,KACwB,YAAfqe,EAAOt8B,KACZhB,KAAKyoF,mBAAmBhwD,EAAMnY,EAAOgd,EAAOyvB,MAAO9tC,GAE/B,cAAfqe,EAAOt8B,KACZhB,KAAK0oF,qBAAqBjwD,EAAMnY,EAAOgd,EAAOyvB,MAAO9tC,GAEhDqB,EAAMe,cACQ,QAAfic,EAAOt8B,KACPhB,KAAK2oF,eAAelwD,EAAMnY,EAAOgd,EAAOyvB,MAAO9tC,GAE/Cjf,KAAK4oF,oBAAoBnwD,EAAMnY,EAAOgd,EAAOyvB,MAAO9tC,GAGxDjf,KAAKutD,qBAAqB90B,EAAMnY,EAAOgd,EAAOyvB,MAAPzvB,sBAA2Cre,EAvBtF,MAFIqe,EAAO2vB,OAAOx0B,EAAMz4B,KAAMA,KAAKkiB,QAASjD,EA2BhD,CACA,IAAe,GAAXjf,KAAKzB,EACL,MAAOyB,KAAKzB,EAAIyB,KAAKiT,QAAQ41E,kBACzB7oF,KAAKiT,QAAQ4C,YAAY7V,KAAKiT,QAAQ61E,UArCpC,CAuCd,EACAX,EAAOtlF,UAAU2lF,QAAU,SAAUhmF,EAAKqgC,GACtC,OAAQrgC,EAAMqgC,EAAYkiD,gBAAkBliD,EAAY1F,UAC5D,EACAgrD,EAAOtlF,UAAU8lF,eAAiB,SAAUI,EAAezoE,EAAOysC,EAAOlqB,EAAammD,GASlF,IARA,IAAI9mE,EAAUliB,KAAKkiB,QACf5hB,EAAQggB,EAAMhgB,MAAMkC,IACpBmB,EAAM2c,EAAM3c,IAAInB,IAChBA,EAAMlC,EACNk0E,EAAO,EACPyU,EAAO,EACP1oF,EAAO2hB,EAAQijD,uBAAuB3iE,GACtC0mF,EAAY,IAAIjnF,EAAMO,EAAK8d,EAAMhgB,MAAMmC,OAAQD,EAAKymF,GACjDzmF,GAAOmB,EAAKnB,IACf0mF,EAAU5oF,MAAMkC,IAAM0mF,EAAUvlF,IAAInB,IAAMA,EAC1C0mF,EAAU5oF,MAAMmC,OAASD,GAAOlC,EAAQggB,EAAMhgB,MAAMmC,OAASyf,EAAQgjD,iBAAiB1iE,GACtF0mF,EAAUvlF,IAAIlB,OAASlC,EACvBi0E,EAAOyU,EACPA,EAAO1oF,EACPA,EAAOiC,EAAM,EAAImB,EAAMue,EAAQijD,uBAAuB3iE,EAAM,GAAKA,GAAOmB,EAAM,EAAI2c,EAAM3c,IAAIlB,OAC5FzC,KAAKutD,qBAAqBw7B,EAAeG,EAAWn8B,GAASvqD,GAAOlC,EAAQ,aAAe,IAAM,UAC3F6oF,EAAe3mF,GAAOlC,GAASkC,GAAOlC,EAAQ,GAAKggB,EAAMhgB,MAAMmC,OAAQ+xE,EAAOyU,EAAMA,EAAO1oF,EAAMiC,GAAOmB,GAAMk/B,EAAargC,GAAOmB,EAAM,EAAI,EAAGqlF,EAE7J,EACAb,EAAOtlF,UAAU+lF,oBAAsB,SAAUG,EAAezoE,EAAOysC,EAAO9tC,EAAQ+pE,GAClF,IAAI7Y,EAAUnwE,KAAK8mF,SACf3xE,EAAS8J,EAAOke,WAChBrmB,EAAM9W,KAAKwoF,QAAQloE,EAAMhgB,MAAMkC,IAAKyc,GACpC3J,EAAO66D,EAAU7vD,EAAMhgB,MAAMmC,OAASwc,EAAOqS,eAEjD,GADA03D,EAAaA,GAAc,GACvBhpF,KAAKkiB,QAAQizB,aAAaxC,UAAUryB,EAAMhgB,MAAMkC,KAAM,CACtD,IAAI4mF,EAAS9oE,EAAMyB,QACnBqnE,EAAOzlF,IAAInB,IAAM4mF,EAAO9oF,MAAMkC,IAC9B4mF,EAAOzlF,IAAIlB,OAASzC,KAAKkiB,QAAQ7f,QAAQ+mF,EAAO9oF,MAAMkC,KAAK7B,OAC3DX,KAAKqpF,yBAAyBN,EAAeK,EAAQr8B,EAAQ,qBAAsB9tC,EAAQ,KAAM+pE,EACrG,MAEIhpF,KAAKsoF,IAAIv7B,EAAQ,qBAAsB,UAAY53C,EAAZ,kBAAmD2B,EAAM,WAAaxB,EAAO,OAAS0zE,GAAc,KAE/I,GAAIhpF,KAAKkiB,QAAQizB,aAAaxC,UAAUryB,EAAM3c,IAAInB,KAAM,CAChD4mF,EAAS9oE,EAAMyB,QACnBqnE,EAAO9oF,MAAMkC,IAAM4mF,EAAOzlF,IAAInB,IAC9B4mF,EAAO9oF,MAAMmC,OAAS,EACtBzC,KAAKqpF,yBAAyBN,EAAeK,EAAQr8B,EAAQ,YAAa9tC,EAAQ,KAAM+pE,EAC5F,KACK,CACDlyE,EAAM9W,KAAKwoF,QAAQloE,EAAM3c,IAAInB,IAAKyc,GAClC,IAAIhK,EAAQqL,EAAM3c,IAAIlB,OAASwc,EAAOqS,eACtCtxB,KAAKsoF,IAAIv7B,EAAQ,YAAa,UAAY53C,EAAZ,YACfF,EADe,UAEjB6B,EAFiB,WAGhBq5D,EAAU,OAAS6Y,GAAc,IACnD,CAEA,GADA7zE,GAAUmL,EAAM3c,IAAInB,IAAM8d,EAAMhgB,MAAMkC,IAAM,GAAKyc,EAAOke,aACpDhoB,GAAU,GAAd,CAEA2B,EAAM9W,KAAKwoF,QAAQloE,EAAMhgB,MAAMkC,IAAM,EAAGyc,GACxC,IAAIqqE,GAAehpE,EAAMhgB,MAAMmC,OAAS,EAAI,IAAM6d,EAAM3c,IAAIlB,OAAS,EAAI,GACzEzC,KAAKsoF,IAAIv7B,GAASu8B,EAAc,UAAYA,EAAc,IAAK,UAAYn0E,EAAZ,kBAElD2B,EAFkD,WAGjDq5D,EAAU,OAAS6Y,GAAc,IANrC,CAOd,EACAb,EAAOtlF,UAAU0qD,qBAAuB,SAAUw7B,EAAezoE,EAAOysC,EAAO9tC,EAAQsqE,EAAaP,GAChG,GAAIhpF,KAAKkiB,QAAQizB,aAAaxC,UAAUryB,EAAMhgB,MAAMkC,KAChD,OAAOxC,KAAKqpF,yBAAyBN,EAAezoE,EAAOysC,EAAO9tC,EAAQsqE,EAAaP,GAC3F,IAAI7zE,EAAS8J,EAAOke,WAChBloB,GAASqL,EAAM3c,IAAIlB,QAAU8mF,GAAe,GAAKjpE,EAAMhgB,MAAMmC,QAAUwc,EAAOqS,eAC9Exa,EAAM9W,KAAKwoF,QAAQloE,EAAMhgB,MAAMkC,IAAKyc,GACpC3J,EAAOtV,KAAK8mF,SAAWxmE,EAAMhgB,MAAMmC,OAASwc,EAAOqS,eACvDtxB,KAAKsoF,IAAIv7B,EAAO,UAAY53C,EAAZ,YACDF,EADC,UAEH6B,EAFG,WAGFxB,EAAO,OAAS0zE,GAAc,IAChD,EACAb,EAAOtlF,UAAUwmF,yBAA2B,SAAUN,EAAezoE,EAAOysC,EAAO9tC,EAAQsqE,EAAaP,GACpG,IAAI7zE,EAAS8J,EAAOke,WAAYrmB,EAAM9W,KAAKwoF,QAAQloE,EAAMhgB,MAAMkC,IAAKyc,GAASkxD,EAAUnwE,KAAK8mF,SACxF/wC,EAAa/1C,KAAKkiB,QAAQizB,aAAaQ,cAAcr1B,EAAMhgB,MAAMmC,OAAQ6d,EAAM3c,IAAIlB,QACvFszC,EAAW5qC,SAAQ,SAAU9E,GACzBrG,KAAKsoF,IAAIv7B,EAAO,UAAY53C,EAAZ,aACA9O,EAAU4O,OAASs0E,GAAe,IADlC,UAEHzyE,EAFG,YAGDq5D,EAAU9pE,EAAUiP,MAAQ,OAAS0zE,GAAc,IACtE,GAAGhpF,KACP,EACAmoF,EAAOtlF,UAAU4lF,mBAAqB,SAAUM,EAAezoE,EAAOysC,EAAO9tC,EAAQ+pE,GACjF,IAAIlyE,EAAM9W,KAAKwoF,QAAQloE,EAAMhgB,MAAMkC,IAAKyc,GACpC9J,EAAS8J,EAAOke,WAChB7c,EAAMhgB,MAAMkC,KAAO8d,EAAM3c,IAAInB,MAC7B2S,GAAUnV,KAAKwoF,QAAQloE,EAAM3c,IAAInB,IAAKyc,GAAUnI,GACpD9W,KAAKsoF,IAAIv7B,EAAO,UAAY53C,EAAZ,UACH2B,EADG,sBAESkyE,GAAc,IAC3C,EACAb,EAAOtlF,UAAU6lF,qBAAuB,SAAUK,EAAezoE,EAAOysC,EAAO9tC,EAAQ+pE,GACnF,IAAIlyE,EAAM9W,KAAKwoF,QAAQloE,EAAMhgB,MAAMkC,IAAKyc,GACpC9J,EAAS8J,EAAOke,WACpBn9B,KAAKsoF,IAAIv7B,EAAO,UAAY53C,EAAZ,UACH2B,EADG,sBAESkyE,GAAc,IAC3C,EACOb,CACX,CA3K2B,GA6K3B,SAASgB,EAAeK,EAAIC,EAAIC,EAAIC,GAChC,OAAQH,EAAK,EAAI,IAAMC,EAAK,EAAI,IAAMC,EAAK,EAAI,IAAMC,EAAK,EAAI,EAClE,CAHAxB,EAAOtlF,UAAUikF,SAAW,EAI5BpgF,EAAQyhF,OAASA,CAEjB,IAEAlqF,IAAIC,OAAO,sBAAsB,CAAC,UAAU,UAAU,WAAW,SAASuI,EAASC,EAASvD,GAC5F,IAAIymF,EAAa,IAAIC,IAAI,CAAC,OAAQ,SAAU,WAC5CnjF,EAAQojF,YAAc,SAAUC,GAC5B,OAAOH,EAAWI,IAAID,EAC1B,CAEA,IAEA9rF,IAAIC,OAAO,iBAAiB,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,eAAe,kBAAkB,wBAAwB,aAAa,wBAAwB,SAASuI,EAASC,EAASvD,GAAQ,aACvN,IAAIwX,EAAMlU,EAAQ,cACdsQ,EAAMtQ,EAAQ,cACd+V,EAAO/V,EAAQ,eACfi+E,EAAQj+E,EAAQ,WAAWi+E,MAC3BnsE,EAAe9R,EAAQ,wBAAwB8R,aAC/C+D,EAAM7V,EAAQ,aAAa6V,IAC3BwtE,EAAcrjF,EAAQ,eAAeqjF,YACrCG,EAAsB,WACtB,SAASA,EAAKnE,GACV9lF,KAAK+W,IAAMA,EACX/W,KAAKiT,QAAUjT,KAAK+W,IAAI3E,cAAc,OACtCpS,KAAKiT,QAAQV,UAAY,2BACzBuzE,EAAS9zE,YAAYhS,KAAKiT,SAC1BjT,KAAKkqF,eAAiBlqF,KAAKkqF,eAAezhE,KAAKzoB,MAC/CA,KAAK++B,OAAS,IAAI2lD,EAAM1kF,KAAKiT,QACjC,CAklBA,OAjlBAg3E,EAAKpnF,UAAUqnF,eAAiB,WAC5B,IAAIhmF,EAAMlE,KAAKkiB,QAAQhe,IACnBimF,EAAwC,MAA7BjmF,EAAIslD,uBAAyD,WAAxBtlD,EAAI4lD,iBACpDsgC,EAAWD,EAAWnqF,KAAKqqF,YAAcrqF,KAAKsqF,cAClD,GAAItqF,KAAKoqF,UAAYA,EAEjB,OADApqF,KAAKoqF,SAAWA,GACT,CAEf,EACAH,EAAKpnF,UAAUulF,WAAa,SAAUjY,GAClCnwE,KAAK8mF,SAAW3W,EAChBnwE,KAAKiT,QAAQT,MAAM+3E,OAAS,KAAOpa,EAAU,IACjD,EACA8Z,EAAKpnF,UAAU2nF,cAAgB,WAC3B,OAAOxqF,KAAKyqF,aAAaj2C,eAAer/B,QAAU,CACtD,EACA80E,EAAKpnF,UAAUwjE,kBAAoB,WAC/B,OAAOrmE,KAAKyqF,aAAaj2C,eAAev/B,OAAS,CACrD,EACAg1E,EAAKpnF,UAAUqjE,gBAAkB,SAAUwkB,GACvC1qF,KAAKyqF,aAAeC,EACpB1qF,KAAKyqF,aAAapxE,GAAG,sBACrB,SAAUlb,GACN6B,KAAKmZ,QAAQ,sBAAuBhb,EACxC,EAAEsqB,KAAKzoB,OACPA,KAAK2qF,kBACT,EACAV,EAAKpnF,UAAU+nF,oBAAsB,WACjC5qF,KAAKyqF,aAAaG,qBACtB,EACAX,EAAKpnF,UAAU8nF,iBAAmB,WAC9B,OAAO3qF,KAAK6qF,sBAAwB7qF,KAAKyqF,aAAaE,kBAC1D,EACAV,EAAKpnF,UAAUixE,WAAa,SAAU5xD,GAClCliB,KAAKkiB,QAAUA,EACXA,GACAliB,KAAK8qF,mBACb,EACAb,EAAKpnF,UAAU8xC,kBAAoB,SAAU5C,GACzC,OAAI/xC,KAAK+xC,gBAAkBA,IAE3B/xC,KAAK+xC,eAAiBA,EACO,iBAAlBA,GACP/xC,KAAK+qF,WAAa,OAAO5oF,KAAK4vC,GAC9B/xC,KAAKgrF,SAAW,SAAS7oF,KAAK4vC,GAC9B/xC,KAAKirF,QAAU,OAAO9oF,KAAK4vC,IAG3B/xC,KAAK+qF,WAAa/qF,KAAKgrF,SAAWhrF,KAAKirF,QAAUl5C,EAErD/xC,KAAK8qF,qBACE,EACX,EACAb,EAAKpnF,UAAUy4E,uBAAyB,SAAUlmE,GAC9C,OAAIpV,KAAK0jF,qBAAuBtuE,IAEhCpV,KAAK0jF,oBAAsBtuE,EAC3BpV,KAAK8qF,qBACE,EACX,EACAb,EAAKpnF,UAAU24E,yBAA2B,SAAU3c,GAChD,OAAI7+D,KAAKkrF,yBAA2BrsB,IAEpC7+D,KAAKkrF,uBAAyBrsB,EACvBA,EACX,EACAorB,EAAKpnF,UAAUioF,kBAAoB,WAC/B,IAAIhxC,EAAU95C,KAAKkiB,QAAQ83B,aAC3Bh6C,KAAK85C,QAAUA,EACf,IADwB,IAAIqxC,EAASnrF,KAAKorF,YAAc,CAAC,GAChD7sF,EAAI,EAAGA,EAAIu7C,EAAU,EAAGv7C,IAC7B,GAAIyB,KAAKgrF,SAAU,CACf,IAAIK,EAAOrrF,KAAK+W,IAAI3E,cAAc,QAClCi5E,EAAK94E,UAAY,kCACjB84E,EAAKl4E,YAAcqJ,EAAKzP,aAAa/M,KAAKsrF,SAAU/sF,GACpD4sF,EAAO3qF,KAAK6qF,EAChB,MAEIF,EAAO3qF,KAAKR,KAAK+W,IAAIhF,eAAeyK,EAAKzP,aAAa,IAAKxO,GAAIyB,KAAKiT,UAG5E,GAAIjT,KAAK0jF,oBAAqB,CAC1B1jF,KAAKurF,eAAiB,mBACtB,IAAIh5E,EAAY,mBACZi5E,EAAaxrF,KAAK+qF,WAAa,qCAAuC,GACtEU,EAAezrF,KAAK+qF,WAClBvuE,EAAKzP,aAAa/M,KAAK0rF,WAAY1rF,KAAK85C,SACxCt9B,EAAKzP,aAAa,IAAK/M,KAAK85C,SAC9B6xC,EAAW3rF,KAAKgrF,SAAW,mCAAqC,GAChEY,EAAa5rF,KAAKgrF,SAChBxuE,EAAKzP,aAAa/M,KAAKsrF,SAAUtrF,KAAK85C,SACtC2xC,EACFJ,EAAOrrF,KAAK+W,IAAI3E,cAAc,QAClCi5E,EAAK94E,UAAYA,EAAYi5E,EAC7BH,EAAKl4E,YAAcs4E,EACnBzrF,KAAKorF,YAAY,KAAOC,EACpBA,EAAOrrF,KAAK+W,IAAI3E,cAAc,QAClCi5E,EAAK94E,UAAYA,EAAYo5E,EAC7BN,EAAKl4E,YAAcy4E,EACnB5rF,KAAKorF,YAAY,MAAQC,CAC7B,CACJ,EACApB,EAAKpnF,UAAUy1E,YAAc,SAAUr5D,EAAQyC,EAAUC,GACrD,GAAI3hB,KAAKif,OAAO0C,SAAW1C,EAAO0C,SAC9B3hB,KAAKif,OAAOyC,UAAYzC,EAAOyC,SAC/B,OAAO1hB,KAAKitD,OAAOhuC,GAEvBjf,KAAKif,OAASA,EAKd,IAJA,IAAIwtC,EAAQtgD,KAAKC,IAAIsV,EAAUzC,EAAOyC,UAClC9U,EAAOT,KAAKE,IAAIsV,EAAS1C,EAAO0C,SAChCkqE,EAAe7rF,KAAKiT,QAAQ6+D,WAC5Bga,EAAkB,EACbtpF,EAAMyc,EAAOyC,SAAUlf,EAAMiqD,EAAOjqD,IAAO,CAChD,IAAIk3C,EAAW15C,KAAKkiB,QAAQge,YAAY19B,GACxC,GAAIk3C,EAAU,CACV,GAAIA,EAAS6Y,YAAY9F,GAAQ,CAC7BA,EAAQ/S,EAASp5C,MAAMkC,IACvB,KACJ,CAEIA,EAAMk3C,EAAS/1C,IAAInB,GAE3B,CACAspF,GACJ,CACA,IAAIC,GAAgB,EAGhB/qB,GAFAx+D,EAAMiqD,EACN/S,EAAW15C,KAAKkiB,QAAQwzC,gBAAgBlzD,GAC5Bk3C,EAAWA,EAASp5C,MAAMkC,IAAM0iD,KAChD,MAAO,EAAM,CAMT,GALI1iD,EAAMw+D,IACNx+D,EAAMk3C,EAAS/1C,IAAInB,IAAM,EACzBk3C,EAAW15C,KAAKkiB,QAAQwzC,gBAAgBlzD,EAAKk3C,GAC7CsnB,EAAYtnB,EAAWA,EAASp5C,MAAMkC,IAAM0iD,KAE5C1iD,EAAMoK,EACN,MAAO,IAAIo/E,EAAcH,EAAaC,KAC1C,GAAIE,EAAa,CACbhsF,KAAK+W,IAAI/D,eAAeg5E,GACxBhsF,KAAKisF,YAAYD,EAAaxpF,EAAKA,GAAOw+D,GAAYtnB,GAClDqyC,IACAC,EAAYx5E,MAAMsE,IAAM9W,KAAK++B,OAAOomD,eAAe3iF,EAAKyc,EAAQjf,KAAKkiB,SAAW,MACpF,IAAI/M,EAAU8J,EAAOke,WAAan9B,KAAKkiB,QAAQ8iD,aAAaxiE,GAAQ,KAChEwpF,EAAYx5E,MAAM2C,QAAUA,IAC5B42E,GAAgB,EAChBC,EAAYx5E,MAAM2C,OAASA,EAEnC,CACA3S,GACJ,CACA,GAAIupF,EACA,MAAOD,EAAkB9rF,KAAK++B,OAAO8yC,MAAMlxE,OAAQ,CAC/C,IAAI+xE,EAAO1yE,KAAK++B,OAAO8yC,MAAMia,KAC7BpZ,EAAKz/D,QAAQT,MAAMsE,IAAM9W,KAAK++B,OAAOomD,eAAezS,EAAKlwE,IAAKyc,EAAQjf,KAAKkiB,SAAW,IAC1F,CAER,EACA+nE,EAAKpnF,UAAUskF,YAAc,SAAUloE,GACnC,IAAIgmE,EAAYjlF,KAAKif,OAErB,GADAjf,KAAKif,OAASA,EACVjf,KAAK++B,OAAOimD,YAAYC,EAAWhmE,GACnC,OAAOjf,KAAKitD,OAAOhuC,GACvBjf,KAAK++B,OAAO+lD,cAAc7lE,GAC1B,IAAI0C,EAAU1C,EAAO0C,QACjB0kE,EAAapB,EAAYA,EAAUtjE,SAAW,EAClD,IAAKsjE,GAAaoB,EAAapnE,EAAOyC,SAClC,OAAO1hB,KAAKitD,OAAOhuC,GACvB,GAAI0C,EAAUsjE,EAAUvjE,SACpB,OAAO1hB,KAAKitD,OAAOhuC,GACvB,IAAKgmE,GAAaA,EAAUtjE,QAAU1C,EAAOyC,SACzC,OAAO1hB,KAAKitD,OAAOhuC,GACvB,GAAIA,EAAO0C,QAAUsjE,EAAUvjE,SAC3B,OAAO1hB,KAAKitD,OAAOhuC,GACvB,GAAIgmE,EAAUvjE,SAAWzC,EAAOyC,SAC5B,IAAK,IAAIlf,EAAMxC,KAAKkiB,QAAQyzC,kBAAkBsvB,EAAUvjE,SAAUzC,EAAOyC,SAAW,GAAIlf,EAAM,EAAGA,IAC7FxC,KAAK++B,OAAO39B,QACpB,GAAI6jF,EAAUtjE,QAAU1C,EAAO0C,QAC3B,IAASnf,EAAMxC,KAAKkiB,QAAQyzC,kBAAkB12C,EAAO0C,QAAU,EAAGsjE,EAAUtjE,SAAUnf,EAAM,EAAGA,IAC3FxC,KAAK++B,OAAO/kB,MAChBiF,EAAOyC,SAAWujE,EAAUvjE,UAC5B1hB,KAAK++B,OAAOn+B,QAAQZ,KAAKksF,qBAAqBjtE,EAAQA,EAAOyC,SAAUujE,EAAUvjE,SAAW,IAE5FzC,EAAO0C,QAAUsjE,EAAUtjE,SAC3B3hB,KAAK++B,OAAOv+B,KAAKR,KAAKksF,qBAAqBjtE,EAAQgmE,EAAUtjE,QAAU,EAAG1C,EAAO0C,UAErF3hB,KAAK63E,uBACT,EACAoS,EAAKpnF,UAAUqpF,qBAAuB,SAAUjtE,EAAQyC,EAAUC,GAC9D,IAAI8jE,EAAW,GACXjjF,EAAMkf,EACNg4B,EAAW15C,KAAKkiB,QAAQwzC,gBAAgBlzD,GACxCw+D,EAAYtnB,EAAWA,EAASp5C,MAAMkC,IAAM0iD,IAChD,MAAO,EAAM,CAMT,GALI1iD,EAAMw+D,IACNx+D,EAAMk3C,EAAS/1C,IAAInB,IAAM,EACzBk3C,EAAW15C,KAAKkiB,QAAQwzC,gBAAgBlzD,EAAKk3C,GAC7CsnB,EAAYtnB,EAAWA,EAASp5C,MAAMkC,IAAM0iD,KAE5C1iD,EAAMmf,EACN,MACJ,IAAIvS,EAAOpP,KAAK++B,OAAO4mD,WAAWnjF,EAAKyc,EAAQjf,KAAKkiB,SAChDiqE,EAAS/8E,EAAK6D,QAClBjT,KAAK+W,IAAI/D,eAAem5E,GACxBp1E,EAAIf,SAASm2E,EAAO35E,MAAO,SAAUxS,KAAK++B,OAAOwmD,kBAAkB/iF,EAAKyc,EAAQjf,KAAKkiB,SAAW,MAChGnL,EAAIf,SAASm2E,EAAO35E,MAAO,MAAOxS,KAAK++B,OAAOomD,eAAe3iF,EAAKyc,EAAQjf,KAAKkiB,SAAW,MAC1FliB,KAAKisF,YAAYE,EAAQ3pF,EAAKA,GAAOw+D,GAAYtnB,GAC7C15C,KAAKosF,iBACLD,EAAO55E,UAAY,iBAGnB45E,EAAO55E,UAAY,WAEvBkzE,EAASjlF,KAAK4O,GACd5M,GACJ,CACA,OAAOijF,CACX,EACAwE,EAAKpnF,UAAUoqD,OAAS,SAAUhuC,GAC9Bjf,KAAK++B,OAAO+lD,cAAc7lE,GAC1Bjf,KAAKif,OAASA,EACd,IAAIyC,EAAWzC,EAAOyC,SAClBC,EAAU1C,EAAO0C,QACjB4L,EAAQvtB,KAAK++B,OACjB,MAAOxR,EAAM8Q,YACT9Q,EAAMvT,MACVuT,EAAM/sB,KAAKR,KAAKksF,qBAAqBjtE,EAAQyC,EAAUC,GAC3D,EACAsoE,EAAKpnF,UAAUwpF,aAAe,SAAU16E,EAAQozD,EAAcpmE,EAAOsC,GACjE,IAGI4D,EAHAu/B,EAAOpkC,KACPyd,EAAK,gnBACL6uE,EAAgBtsF,KAAK+W,IAAI1D,eAAerT,KAAKiT,SAE7C1U,EAAI,EACR,MAAOsG,EAAI4Y,EAAGtZ,KAAKlD,GAAQ,CACvB,IAAIwlD,EAAM5hD,EAAE,GACR0nF,EAAc1nF,EAAE,GAChB2nF,EAAmB3nF,EAAE,GACrB4nF,EAAW5nF,EAAE,GACb6nF,EAAM7nF,EAAE,GACZ,GAAKu/B,EAAK2mD,aAAcwB,EAAxB,CAEA,IAAI5mC,EAASpnD,GAAKsG,EAAEb,MAAQ/C,EAAMgF,MAAM1H,EAAGsG,EAAEb,OAAS,GAKtD,GAJAzF,EAAIsG,EAAEb,MAAQa,EAAE,GAAGlE,OACfglD,GACA2mC,EAAct6E,YAAYhS,KAAK+W,IAAIhF,eAAe4zC,EAAQ3lD,KAAKiT,UAE/DwzC,EAAK,CACL,IAAI3M,EAAU1V,EAAKliB,QAAQiyB,iBAAiB4wB,EAAelgE,EAAEb,OAC7DsoF,EAAct6E,YAAYoyB,EAAKgnD,YAAYtxC,GAAS6yC,WAAU,IAC9D5nB,GAAgBjrB,EAAU,CAC9B,MACK,GAAIyyC,EACL,GAAInoD,EAAK2mD,WAAY,CACjB,IAAIM,EAAOrrF,KAAK+W,IAAI3E,cAAc,QAClCi5E,EAAK94E,UAAY,oCACjB84E,EAAKl4E,YAAcqJ,EAAKzP,aAAaq3B,EAAKsnD,WAAYa,EAAY5rF,QAClE2rF,EAAct6E,YAAYq5E,EAC9B,MAEIiB,EAAct6E,YAAYhS,KAAK+W,IAAIhF,eAAew6E,EAAavsF,KAAKiT,eAGvE,GAAIu5E,EAAkB,CACnBnB,EAAOrrF,KAAK+W,IAAI3E,cAAc,QAClCi5E,EAAK94E,UAAY,gDACjB84E,EAAKl4E,YAAcqJ,EAAKzP,aAAaq3B,EAAKsnD,WAAYc,EAAiB7rF,QACvE2rF,EAAct6E,YAAYq5E,EAC9B,MACK,GAAIoB,EAAU,CACf1nB,GAAgB,EACZsmB,EAAOrrF,KAAK+W,IAAI3E,cAAc,QAClCi5E,EAAK74E,MAAMyC,MAAsC,EAA7BmvB,EAAKnlB,OAAOqS,eAAsB,KACtD+5D,EAAK94E,UAAY6xB,EAAK2mD,WAAa,4CAA8C,UACjFM,EAAKl4E,YAAcixB,EAAK2mD,WAAa3mD,EAAKsnD,WAAae,EACvDH,EAAct6E,YAAYq5E,EAC9B,MACK,GAAIqB,EAAK,CACV3nB,GAAgB,EACZsmB,EAAOrrF,KAAK+W,IAAI3E,cAAc,QAClCi5E,EAAK74E,MAAMyC,MAAsC,EAA7BmvB,EAAKnlB,OAAOqS,eAAsB,KACtD+5D,EAAK94E,UAAY,UACjB84E,EAAKl4E,YAAcu5E,EACnBJ,EAAct6E,YAAYq5E,EAC9B,CA3CY,CA4ChB,CAEA,GADAiB,EAAct6E,YAAYhS,KAAK+W,IAAIhF,eAAexT,EAAI0C,EAAMgF,MAAM1H,GAAK0C,EAAOjB,KAAKiT,UAC9E62E,EAAYnrF,EAAMqC,MAYnB2Q,EAAOK,YAAYs6E,OAZO,CAC1B,IAAI94E,EAAU,OAAS7U,EAAMqC,KAAK2B,QAAQ,MAAO,SAC7C0oF,EAAOrrF,KAAK+W,IAAI3E,cAAc,QAChB,QAAdzT,EAAMqC,OACNqqF,EAAK74E,MAAMyC,MAAStW,EAAMsC,MAAMN,OAASX,KAAKif,OAAOqS,eAAkB,KACvE+5D,EAAK54E,aAAa,QAAS6J,EAAI,iBAEnC+uE,EAAK94E,UAAYiB,EACjB63E,EAAKr5E,YAAYs6E,GACjB36E,EAAOK,YAAYq5E,EACvB,CAIA,OAAOtmB,EAAe9jE,EAAMN,MAChC,EACAspF,EAAKpnF,UAAU+pF,kBAAoB,SAAUj7E,EAAQ1Q,EAAOmL,GACxD,IAAIygF,EAAO5rF,EAAM05C,OAAO36C,KAAKurF,gBAC7B,GAAIsB,GAAQ,GAAKA,GAAQzgF,EACrB,OAAOnL,EACX,GAAgB,KAAZA,EAAM,GAAW,CACjB4rF,GAAQA,EAAO7sF,KAAK85C,QAEpB,IADA,IAAItvC,EAAQqiF,EAAO7sF,KAAK85C,QACfv7C,EAAI,EAAGA,EAAIiM,EAAOjM,IACvBoT,EAAOK,YAAYhS,KAAKorF,YAAY,KAAKuB,WAAU,IAGvD,OADA3sF,KAAK63E,wBACE52E,EAAMozC,OAAOw4C,EACxB,CACK,GAAgB,MAAZ5rF,EAAM,GAAY,CACvB,IAAS1C,EAAI,EAAGA,EAAIsuF,EAAMtuF,IACtBoT,EAAOK,YAAYhS,KAAKorF,YAAY,MAAMuB,WAAU,IAGxD,OADA3sF,KAAK63E,wBACE52E,EAAMozC,OAAOw4C,EACxB,CAEA,OADA7sF,KAAK63E,wBACE52E,CACX,EACAgpF,EAAKpnF,UAAUg1E,sBAAwB,WACnC,GAAK73E,KAAKkrF,wBAA2BlrF,KAAK0jF,oBAA1C,CAEA1jF,KAAK8sF,4BAA8B,CAC/BC,iBAAa3mF,EACb9F,WAAO8F,EACPzC,SAAKyC,EACLgnC,SAAKhnC,GAET,IAAImnB,EAAQvtB,KAAKkiB,QAAQhe,IAAI66B,OAC7B,GAAKxR,EAAL,CAEA,IAAI9B,EAASzrB,KAAKkiB,QAAQ7b,UAAU4wC,YAChC+1C,EAAgB,OAAO7oF,KAAKnE,KAAKkiB,QAAQhe,IAAI7B,QAAQopB,EAAOjpB,MAAM,GAAG7B,OACrEssF,EAAqB9gF,KAAKg6C,MAAM6mC,EAAgBhtF,KAAK85C,SACzD95C,KAAK8sF,4BAA8B,CAC/BC,YAAaE,EACb3sF,MAAOmrB,EAAOjpB,KAElB,IAAI0qF,EAAmBltF,KAAKkiB,QAAQo1D,kBACpC,GAAI4V,EAEA,IADA,IAAI7wC,EAASr8C,KAAKkiB,QAAQo1D,kBAAkBj7B,OACnC99C,EAAI,EAAGA,EAAI89C,EAAO17C,OAAQpC,IAC/B,GAAIktB,EAAOjpB,MAAQ65C,EAAO99C,GAAG+B,MAAMkC,IAAK,CACpCxC,KAAK8sF,4BAA4BnpF,IAAM04C,EAAO99C,GAAG+B,MAAMkC,IACnDipB,EAAOjpB,IAAM65C,EAAO99C,GAAG+B,MAAMkC,IAC7BxC,KAAK8sF,4BAA4B1/C,KAAO,EAGxCptC,KAAK8sF,4BAA4B1/C,IAAM,EAE3C,KACJ,CAGR,IAAKptC,KAAK8sF,4BAA4BnpF,KACR,KAAtB4pB,EAAM9B,EAAOjpB,MAAeipB,EAAOhpB,SAAW8qB,EAAM9B,EAAOjpB,KAAK7B,OAAQ,CACxEX,KAAK8sF,4BAA4B1/C,IAAM,EACvC,IAAS7uC,EAAIktB,EAAOjpB,IAAM,EAAGjE,EAAIgvB,EAAM5sB,OAAQpC,IAAK,CAChD,IAAI6Q,EAAOme,EAAMhvB,GACb4uF,EAAgB,OAAOhpF,KAAKiL,GAAM,GAAGzO,OACzC,GAAa,KAATyO,IACApP,KAAK8sF,4BAA4BnpF,IAAMpF,EACnC4uF,GAAiBH,GACjB,KAEZ,CACJ,CAEJhtF,KAAKotF,6BAtCK,CATA,CAgDd,EACAnD,EAAKpnF,UAAUwqF,wBAA0B,WAErC,IADA,IAAIxb,EAAQ7xE,KAAK++B,OAAO8yC,MACftzE,EAAI,EAAGA,EAAIszE,EAAMlxE,OAAQpC,IAAK,CACnC,IAAIm0E,EAAOb,EAAMtzE,GACbuzE,EAAaY,EAAKz/D,QAAQ6+D,WAC9B,GAAIA,EAAWnxE,OAAS,EACpB,IAAK,IAAIif,EAAI,EAAGA,EAAIkyD,EAAWnxE,OAAQif,IACnC,GAAIkyD,EAAWlyD,GAAG+d,WAAam0C,EAAWlyD,GAAG+d,UAAUpd,SAAS,2BAA4B,CACxFuxD,EAAWlyD,GAAG+d,UAAUz3B,OAAO,2BAC/B,KACJ,CAGZ,CACJ,EACA+jF,EAAKpnF,UAAUyqF,sBAAwB,SAAU5a,EAAMqa,GACnD,IAAI39E,EAAOpP,KAAKkiB,QAAQhe,IAAI7B,QAAQqwE,EAAKlwE,KACzC,GAAa,KAAT4M,EAAa,CACb,IAAI0iE,EAAaY,EAAKz/D,QAAQ6+D,WAC9B,GAAIA,EAAY,CACZ,IAAIh+D,EAAOg+D,EAAWib,EAAc,GAChCj5E,GAAQA,EAAK6pB,WAAa7pB,EAAK6pB,UAAUpd,SAAS,qBAClDzM,EAAK6pB,UAAU/pB,IAAI,0BAC3B,CACJ,CACJ,EACAq2E,EAAKpnF,UAAUuqF,4BAA8B,WACzC,GAAKptF,KAAK++B,OAAV,CAEA,IAAI8yC,EAAQ7xE,KAAK++B,OAAO8yC,MACxB7xE,KAAKqtF,0BACL,IAAIN,EAAc/sF,KAAK8sF,4BAA4BC,YACnD,GAAoB,IAAhBA,EACA,GAA6C,IAAzC/sF,KAAK8sF,4BAA4B1/C,IACjC,IAAK,IAAI7uC,EAAI,EAAGA,EAAIszE,EAAMlxE,OAAQpC,IAAK,CACnC,IAAIm0E,EAAOb,EAAMtzE,GACjB,GAAIyB,KAAK8sF,4BAA4BnpF,KAAO+uE,EAAKlwE,KAAOxC,KAAK8sF,4BAA4BxsF,MACnF,EAAG,CACL,GAAIoyE,EAAKlwE,KAAOxC,KAAK8sF,4BAA4BnpF,IAC7C,MACJ3D,KAAKstF,sBAAsB5a,EAAMqa,EACrC,CACJ,MAGA,IAASxuF,EAAIszE,EAAMlxE,OAAS,EAAGpC,GAAK,EAAGA,IAAK,CACpCm0E,EAAOb,EAAMtzE,GACjB,GAAIyB,KAAK8sF,4BAA4BnpF,KAAO+uE,EAAKlwE,IAAMxC,KAAK8sF,4BAA4BxsF,MAAO,CAC3F,GAAIoyE,EAAKlwE,KAAOxC,KAAK8sF,4BAA4BnpF,IAC7C,MACJ3D,KAAKstF,sBAAsB5a,EAAMqa,EACrC,CACJ,CAxBE,CA2Bd,EACA9C,EAAKpnF,UAAU0qF,mBAAqB,SAAU57E,GAC1C,IAAIw6E,EAASnsF,KAAK+W,IAAI3E,cAAc,OAGpC,OAFA+5E,EAAO55E,UAAY,WACnB45E,EAAO35E,MAAM2C,OAASnV,KAAKif,OAAOke,WAAa,KACxCgvD,CACX,EACAlC,EAAKpnF,UAAU2qF,mBAAqB,SAAU77E,EAAQ5L,EAAQ8tC,GAC1D,IAAI1E,EAAQ,EACRruC,EAAQ,EACR2sF,EAAa55C,EAAO,GACpBkxB,EAAe,EACfonB,EAASnsF,KAAKutF,qBAClB57E,EAAOK,YAAYm6E,GACnB,IAAK,IAAI5tF,EAAI,EAAGA,EAAIwH,EAAOpF,OAAQpC,IAAK,CACpC,IAAII,EAAQoH,EAAOxH,GACf0C,EAAQtC,EAAMsC,MAClB,GAAS,GAAL1C,GAAUyB,KAAK0jF,oBAAqB,CAGpC,GAFAv0C,EAAQluC,EAAMN,OACdM,EAAQjB,KAAK4sF,kBAAkBT,EAAQlrF,EAAOwsF,IACzCxsF,EACD,SACJkuC,GAASluC,EAAMN,MACnB,CACA,GAAIwuC,EAAQluC,EAAMN,OAAS8sF,EACvB1oB,EAAe/kE,KAAKqsF,aAAaF,EAAQpnB,EAAcpmE,EAAOsC,GAC9DkuC,GAASluC,EAAMN,WAEd,CACD,MAAOwuC,EAAQluC,EAAMN,QAAU8sF,EAC3B1oB,EAAe/kE,KAAKqsF,aAAaF,EAAQpnB,EAAcpmE,EAAOsC,EAAM+yC,UAAU,EAAGy5C,EAAat+C,IAC9FluC,EAAQA,EAAM+yC,UAAUy5C,EAAat+C,GACrCA,EAAQs+C,EACRtB,EAASnsF,KAAKutF,qBACd57E,EAAOK,YAAYm6E,GACnBA,EAAOn6E,YAAYhS,KAAK+W,IAAIhF,eAAeyK,EAAKzP,aAAa,IAAQ8mC,EAAOE,QAAS/zC,KAAKiT,UAC1FnS,IACAikE,EAAe,EACf0oB,EAAa55C,EAAO/yC,IAAU4pB,OAAO8sB,UAErB,GAAhBv2C,EAAMN,SACNwuC,GAASluC,EAAMN,OACfokE,EAAe/kE,KAAKqsF,aAAaF,EAAQpnB,EAAcpmE,EAAOsC,GAEtE,CACJ,CACI4yC,EAAOA,EAAOlzC,OAAS,GAAKX,KAAKqpB,iBACjCrpB,KAAK0tF,uBAAuBvB,EAAQpnB,EAAc,KAAM,IAAI,EACpE,EACAklB,EAAKpnF,UAAU8qF,kBAAoB,SAAUh8E,EAAQ5L,GAEjD,IADA,IAAIg/D,EAAe,EACVxmE,EAAI,EAAGA,EAAIwH,EAAOpF,OAAQpC,IAAK,CACpC,IAAII,EAAQoH,EAAOxH,GACf0C,EAAQtC,EAAMsC,MAClB,GAAS,GAAL1C,IAAUyB,KAAK0jF,sBACfziF,EAAQjB,KAAK4sF,kBAAkBj7E,EAAQ1Q,GAClCA,GAFT,CAKA,GAAI8jE,EAAe9jE,EAAMN,OAASX,KAAKqpB,gBACnC,OAAOrpB,KAAK0tF,uBAAuB/7E,EAAQozD,EAAcpmE,EAAOsC,GACpE8jE,EAAe/kE,KAAKqsF,aAAa16E,EAAQozD,EAAcpmE,EAAOsC,EAH9D,CAIJ,CACJ,EACAgpF,EAAKpnF,UAAU6qF,uBAAyB,SAAU/7E,EAAQozD,EAAcpmE,EAAOsC,EAAO83B,GAClFp6B,GAASqB,KAAKqsF,aAAa16E,EAAQozD,EAAcpmE,EAAOsC,EAAMgF,MAAM,EAAGjG,KAAKqpB,gBAAkB07C,IAC9F,IAAI6oB,EAAa5tF,KAAK+W,IAAI3E,cAAc,QACxCw7E,EAAWr7E,UAAY,gDACvBq7E,EAAWz6E,YAAc4lB,EAAO,SAAW,yBAC3CpnB,EAAOK,YAAY47E,EACvB,EACA3D,EAAKpnF,UAAUopF,YAAc,SAAUt6E,EAAQnP,EAAKk3C,GAGhD,GAFKA,GAAwB,GAAZA,IACbA,EAAW15C,KAAKkiB,QAAQge,YAAY19B,IACpCk3C,EACA,IAAI3zC,EAAS/F,KAAK6tF,mBAAmBrrF,EAAKk3C,QAEtC3zC,EAAS/F,KAAKkiB,QAAQ6+B,UAAUv+C,GACxC,IAAIsrF,EAAan8E,EACjB,GAAI5L,EAAOpF,OAAQ,CACf,IAAIkzC,EAAS7zC,KAAKkiB,QAAQqjD,gBAAgB/iE,GAC1C,GAAIqxC,GAAUA,EAAOlzC,OAAQ,CACzBX,KAAKwtF,mBAAmB77E,EAAQ5L,EAAQ8tC,GACpCi6C,EAAan8E,EAAOm3E,SAC5B,KACK,CACGgF,EAAan8E,EACb3R,KAAKosF,mBACL0B,EAAa9tF,KAAKutF,qBAClB57E,EAAOK,YAAY87E,IAEvB9tF,KAAK2tF,kBAAkBG,EAAY/nF,EACvC,CACJ,MACS/F,KAAKosF,mBACV0B,EAAa9tF,KAAKutF,qBAClB57E,EAAOK,YAAY87E,IAEvB,GAAI9tF,KAAKirF,SAAW6C,EAAY,CACxBp0C,IACAl3C,EAAMk3C,EAAS/1C,IAAInB,KACvB,IAAIurF,EAAc/tF,KAAK+W,IAAI3E,cAAc,QACzC27E,EAAYx7E,UAAY,kCACxBw7E,EAAY56E,YAAc3Q,GAAOxC,KAAKkiB,QAAQmc,YAAc,EAAIr+B,KAAKguF,SAAWhuF,KAAKoqF,SACrF0D,EAAW97E,YAAY+7E,EAC3B,CACJ,EACA9D,EAAKpnF,UAAUgrF,mBAAqB,SAAUrrF,EAAKk3C,GAC/C,IAAIx3B,EAAUliB,KAAKkiB,QACf+rE,EAAe,GACnB,SAASC,EAAUnoF,EAAQi6B,EAAMurB,GAC7B,IAAI6H,EAAM,EAAG9d,EAAM,EACnB,MAAQA,EAAMvvC,EAAOqtD,GAAKnyD,MAAMN,OAAUq/B,EAGtC,GAFAsV,GAAOvvC,EAAOqtD,GAAKnyD,MAAMN,OACzByyD,IACIA,GAAOrtD,EAAOpF,OACd,OAER,GAAI20C,GAAOtV,EAAM,CACb,IAAI/+B,EAAQ8E,EAAOqtD,GAAKnyD,MAAM+yC,UAAUhU,EAAOsV,GAC3Cr0C,EAAMN,OAAU4qD,EAAKvrB,IACrB/+B,EAAQA,EAAM+yC,UAAU,EAAGuX,EAAKvrB,IACpCiuD,EAAaztF,KAAK,CACdQ,KAAM+E,EAAOqtD,GAAKpyD,KAClBC,MAAOA,IAEXq0C,EAAMtV,EAAO/+B,EAAMN,OACnByyD,GAAO,CACX,CACA,MAAO9d,EAAMiW,GAAM6H,EAAMrtD,EAAOpF,OAAQ,CAChCM,EAAQ8E,EAAOqtD,GAAKnyD,MACpBA,EAAMN,OAAS20C,EAAMiW,EACrB0iC,EAAaztF,KAAK,CACdQ,KAAM+E,EAAOqtD,GAAKpyD,KAClBC,MAAOA,EAAM+yC,UAAU,EAAGuX,EAAKjW,KAInC24C,EAAaztF,KAAKuF,EAAOqtD,IAC7B9d,GAAOr0C,EAAMN,OACbyyD,GAAO,CACX,CACJ,CACA,IAAIrtD,EAASmc,EAAQ6+B,UAAUv+C,GAe/B,OAdAk3C,EAAS8Y,MAAK,SAAUG,EAAanwD,EAAKC,EAAQ00D,EAAYzE,GACvC,MAAfC,EACAs7B,EAAaztF,KAAK,CACdQ,KAAM,OACNC,MAAO0xD,KAIPD,IACA3sD,EAASmc,EAAQ6+B,UAAUv+C,IAC3BuD,EAAOpF,QACPutF,EAAUnoF,EAAQoxD,EAAY10D,GAE1C,GAAGi3C,EAAS/1C,IAAInB,IAAKxC,KAAKkiB,QAAQ7f,QAAQq3C,EAAS/1C,IAAInB,KAAK7B,QACrDstF,CACX,EACAhE,EAAKpnF,UAAUupF,eAAiB,WAC5B,OAAOpsF,KAAKkiB,QAAQypB,gBACxB,EACOs+C,CACX,CA3lByB,GA4lBzBA,EAAKpnF,UAAUmrF,SAAW,IAC1B/D,EAAKpnF,UAAUwnF,YAAc,IAC7BJ,EAAKpnF,UAAUynF,cAAgB,IAC/BL,EAAKpnF,UAAUunF,SAAWH,EAAKpnF,UAAUwnF,YACzCJ,EAAKpnF,UAAUyoF,SAAW,IAC1BrB,EAAKpnF,UAAU6oF,WAAa,IAC5BzB,EAAKpnF,UAAUikF,SAAW,EAC1BmD,EAAKpnF,UAAUwmB,gBAAkB,IACjC4gE,EAAKpnF,UAAUkvC,gBAAiB,EAChCk4C,EAAKpnF,UAAUkoF,YAAa,EAC5Bd,EAAKpnF,UAAUmoF,UAAW,EAC1Bf,EAAKpnF,UAAUooF,SAAU,EACzBhB,EAAKpnF,UAAU6gF,qBAAsB,EACrCuG,EAAKpnF,UAAUqoF,wBAAyB,EACxCjB,EAAKpnF,UAAUuoF,YAAc,GAC7BnB,EAAKpnF,UAAUwhB,QAAU,CAAC,EAC1B4lE,EAAKpnF,UAAUqzE,gBAAkB+T,EAAKpnF,UAAUioF,kBAChDnwE,EAAItC,UAAU4xE,EAAKpnF,UAAW0V,GAC9B7R,EAAQujF,KAAOA,CAEf,IAEAhsF,IAAIC,OAAO,mBAAmB,CAAC,UAAU,UAAU,SAAS,gBAAgB,SAASuI,EAASC,EAASvD,GAAQ,aAC/G,IAAI4T,EAAMtQ,EAAQ,cACd0nF,EAAwB,WACxB,SAASA,EAAOrI,GACZ9lF,KAAKiT,QAAU8D,EAAI3E,cAAc,OACjCpS,KAAKiT,QAAQV,UAAY,6BACzBuzE,EAAS9zE,YAAYhS,KAAKiT,SAC1BjT,KAAKouF,WAAY,EACjBpuF,KAAKwhF,YAAa,EAClBxhF,KAAKquF,cAAgB,IACrBruF,KAAKsuF,gBAAiB,EACtBtuF,KAAKuuF,QAAU,GACfvuF,KAAKyrB,OAASzrB,KAAKwuF,YACnBz3E,EAAItD,YAAYzT,KAAKiT,QAAS,sBAC9BjT,KAAKyuF,eAAiBzuF,KAAK0uF,eAAejmE,KAAKzoB,KACnD,CA+KA,OA9KAmuF,EAAOtrF,UAAU6rF,eAAiB,SAAUhlF,GAExC,IADA,IAAI6kF,EAAUvuF,KAAKuuF,QACVhwF,EAAIgwF,EAAQ5tF,OAAQpC,KACzBwY,EAAIf,SAASu4E,EAAQhwF,GAAGiU,MAAO,UAAW9I,EAAM,GAAK,IAC7D,EACAykF,EAAOtrF,UAAU8rF,mBAAqB,WAElC,IADA,IAAIJ,EAAUvuF,KAAKuuF,QACVhwF,EAAIgwF,EAAQ5tF,OAAQpC,KACzBgwF,EAAQhwF,GAAGiU,MAAMo8E,kBAAoB5uF,KAAKquF,cAAgB,KAC9DruF,KAAK6uF,cAAe,EACpBngF,WAAW,WACH1O,KAAK6uF,cACL93E,EAAItD,YAAYzT,KAAKiT,QAAS,uBAEtC,EAAEwV,KAAKzoB,MACX,EACAmuF,EAAOtrF,UAAUisF,kBAAoB,WACjC9uF,KAAK6uF,cAAe,EACpB93E,EAAIrD,eAAe1T,KAAKiT,QAAS,uBACrC,EACAk7E,EAAOtrF,UAAUulF,WAAa,SAAUjY,GACpCnwE,KAAK8mF,SAAW3W,CACpB,EACAge,EAAOtrF,UAAUixE,WAAa,SAAU5xD,GACpCliB,KAAKkiB,QAAUA,CACnB,EACAisE,EAAOtrF,UAAU8gC,YAAc,SAAUorD,GACjCA,GAAY/uF,KAAKwhF,aACjBxhF,KAAKwhF,WAAauN,EAClB/uF,KAAKgvF,eAEb,EACAb,EAAOtrF,UAAUosF,iBAAmB,SAAUZ,GACtCA,GAAiBruF,KAAKquF,gBACtBruF,KAAKquF,cAAgBA,EACrBruF,KAAKgvF,eAEb,EACAb,EAAOtrF,UAAU0+E,kBAAoB,SAAU+M,GACvCA,GAAkBtuF,KAAKsuF,iBACvBtuF,KAAKsuF,eAAiBA,EACtBv3E,EAAIlD,YAAY7T,KAAKiT,QAAS,sBAAuBq7E,GACrDtuF,KAAKyuF,gBAAe,GACpBzuF,KAAKgvF,eAEb,EACAb,EAAOtrF,UAAU2rF,UAAY,WACzB,IAAIr8E,EAAK4E,EAAI3E,cAAc,OAI3B,OAHAD,EAAGI,UAAY,aACfvS,KAAKiT,QAAQjB,YAAYG,GACzBnS,KAAKuuF,QAAQ/tF,KAAK2R,GACXA,CACX,EACAg8E,EAAOtrF,UAAUqsF,aAAe,WAC5B,GAAIlvF,KAAKuuF,QAAQ5tF,OAAS,EAAG,CACzB,IAAIwR,EAAKnS,KAAKuuF,QAAQv0E,MAEtB,OADA7H,EAAGsX,WAAW5T,YAAY1D,GACnBA,CACX,CACJ,EACAg8E,EAAOtrF,UAAUo1E,WAAa,WAC1Bj4E,KAAKouF,WAAY,EACjBr3E,EAAItD,YAAYzT,KAAKiT,QAAS,sBAC9BjT,KAAKgvF,cACT,EACAb,EAAOtrF,UAAUk1E,WAAa,WAC1B/3E,KAAKouF,WAAY,EACjBr3E,EAAIrD,eAAe1T,KAAKiT,QAAS,sBACjCjT,KAAKgvF,cACT,EACAb,EAAOtrF,UAAUmsF,aAAe,WAC5B,IAAI/hC,EAASjtD,KAAKyuF,eASlB,GARA7qD,cAAc5jC,KAAKmvF,YACnBvgF,aAAa5O,KAAKovF,WAClBpvF,KAAK8uF,oBACD9uF,KAAKsuF,iBACLtuF,KAAKqvF,mBAAoB,EACzBt4E,EAAIrD,eAAe1T,KAAKiT,QAAS,wBAErCg6C,GAAO,GACFjtD,KAAKwhF,YAAexhF,KAAKquF,eAAkBruF,KAAKouF,UAYrD,GARIpuF,KAAKsuF,iBACLtuF,KAAKqvF,mBAAoB,EACzB3gF,WAAW,WACH1O,KAAKqvF,mBACLt4E,EAAItD,YAAYzT,KAAKiT,QAAS,sBAEtC,EAAEwV,KAAKzoB,QAEP+W,EAAIZ,kBACJnW,KAAK2uF,yBAEJ,CACD,IAAIW,EAA2B,WAC3BtvF,KAAKovF,UAAY1gF,YAAW,WACxBu+C,GAAO,EACX,GAAG,GAAMjtD,KAAKquF,cAClB,EAAE5lE,KAAKzoB,MACPA,KAAKmvF,WAAatrD,aAAY,WAC1BopB,GAAO,GACPqiC,GACJ,GAAGtvF,KAAKquF,eACRiB,GACJ,MAzBItvF,KAAK8uF,mBA0Bb,EACAX,EAAOtrF,UAAUsmC,iBAAmB,SAAUj/B,EAAUqlF,GACpD,IAAKvvF,KAAKif,SAAWjf,KAAKkiB,QACtB,MAAO,CAAE5M,KAAM,EAAGwB,IAAK,GACtB5M,IACDA,EAAWlK,KAAKkiB,QAAQ7b,UAAU4wC,aACtC,IAAIljB,EAAM/zB,KAAKkiB,QAAQE,yBAAyBlY,GAC5CslF,EAAaxvF,KAAK8mF,UAAY9mF,KAAKkiB,QAAQizB,aAAaxC,UAAU5e,EAAIvxB,IAAK0H,EAAS1H,KAClFxC,KAAKkiB,QAAQizB,aAAaE,WAAWthB,EAAItxB,QACzCsxB,EAAItxB,OAASzC,KAAKif,OAAOqS,gBAC3Bm+D,GAAa17D,EAAIvxB,KAAO+sF,EAAWvvF,KAAKif,OAAO8lE,eAAiB,IAChE/kF,KAAKif,OAAOke,WAChB,MAAO,CAAE7nB,KAAMk6E,EAAY14E,IAAK24E,EACpC,EACAtB,EAAOtrF,UAAU6sF,eAAiB,SAAUC,EAAU1wE,GAClD,OAAO0wE,EAAS74E,KAAO,GAAK64E,EAAS74E,IAAMmI,EAAO4d,SACtD,EACAsxD,EAAOtrF,UAAUoqD,OAAS,SAAUhuC,GAChCjf,KAAKif,OAASA,EACd,IAAI82B,EAAa/1C,KAAKkiB,QAAQ0tE,kBAC1BrxF,EAAI,EAAGsxF,EAAc,OACNzpF,IAAf2vC,GAAkD,IAAtBA,EAAWp1C,SACvCo1C,EAAa,CAAC,CAAEtqB,OAAQ,QAEnBltB,EAAI,EAAb,IAAK,IAAWF,EAAI03C,EAAWp1C,OAAQpC,EAAIF,EAAGE,IAAK,CAC/C,IAAIoxF,EAAW3vF,KAAKmpC,iBAAiB4M,EAAWx3C,GAAGktB,QAAQ,GAC3D,MAAKkkE,EAAS74E,IAAMmI,EAAO9J,OAAS8J,EAAO9Q,QACvCwhF,EAAS74E,IAAM,IAAMvY,EAAI,GAD7B,CAIA,IAAI0U,EAAUjT,KAAKuuF,QAAQsB,MAAkB7vF,KAAKwuF,YAC9Ch8E,EAAQS,EAAQT,MACfxS,KAAK8vF,WAYN9vF,KAAK8vF,WAAW78E,EAAS08E,EAAU1wE,EAAQ82B,EAAWx3C,GAAIyB,KAAKkiB,SAX1DliB,KAAK0vF,eAAeC,EAAU1wE,IAI/BlI,EAAIf,SAASxD,EAAO,UAAW,SAC/BuE,EAAIL,UAAUzD,EAAS08E,EAASr6E,KAAMq6E,EAAS74E,KAC/CC,EAAIf,SAASxD,EAAO,QAASrG,KAAK0K,MAAMoI,EAAOqS,gBAAkB,MACjEva,EAAIf,SAASxD,EAAO,SAAUyM,EAAOke,WAAa,OANlDpmB,EAAIf,SAASxD,EAAO,UAAW,OALvC,CAiBJ,CACA,MAAOxS,KAAKuuF,QAAQ5tF,OAASkvF,EACzB7vF,KAAKkvF,eACT,IAAInxB,EAAY/9D,KAAKkiB,QAAQuzB,eAC7Bz1C,KAAK+vF,cAAchyB,GACnB/9D,KAAKohF,UAAYuO,EACjB3vF,KAAKgvF,cACT,EACAb,EAAOtrF,UAAUktF,cAAgB,SAAUhyB,GACnCA,GAAa/9D,KAAK+9D,YAClB/9D,KAAK+9D,UAAYA,EACbA,EACAhnD,EAAItD,YAAYzT,KAAKiT,QAAS,yBAE9B8D,EAAIrD,eAAe1T,KAAKiT,QAAS,yBAE7C,EACAk7E,EAAOtrF,UAAUwhB,QAAU,WACvBuf,cAAc5jC,KAAKmvF,YACnBvgF,aAAa5O,KAAKovF,UACtB,EACOjB,CACX,CA7L2B,GA8L3BA,EAAOtrF,UAAUikF,SAAW,EAC5BqH,EAAOtrF,UAAUitF,WAAa,KAC9BppF,EAAQynF,OAASA,CAEjB,IAEAlwF,IAAIC,OAAO,gBAAgB,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,gBAAgB,0BAA0B,SAASuI,EAASC,EAASvD,GAAQ,aAClK,IAAIq0B,EAAax3B,MAAQA,KAAKw3B,WAAc,WACxC,IAAIC,EAAgB,SAAU13B,EAAGmF,GAI7B,OAHAuyB,EAAgBxvB,OAAOyvB,gBAClB,CAAEC,UAAW,cAAgBnsB,OAAS,SAAUzL,EAAGmF,GAAKnF,EAAE43B,UAAYzyB,CAAG,GAC1E,SAAUnF,EAAGmF,GAAK,IAAK,IAAIrF,KAAKqF,EAAO+C,OAAOpF,UAAUqa,eAAeta,KAAKsC,EAAGrF,KAAIE,EAAEF,GAAKqF,EAAErF,GAAI,EAC7F43B,EAAc13B,EAAGmF,EAC5B,EACA,OAAO,SAAUnF,EAAGmF,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6F,UAAU,uBAAyBhB,OAAO7E,GAAK,iCAE7D,SAAS0yB,IAAO53B,KAAKmY,YAAcpY,CAAG,CADtC03B,EAAc13B,EAAGmF,GAEjBnF,EAAE8C,UAAkB,OAANqC,EAAa+C,OAAO0F,OAAOzI,IAAM0yB,EAAG/0B,UAAYqC,EAAErC,UAAW,IAAI+0B,EACnF,CACH,CAd2C,GAexCjd,EAAMlU,EAAQ,aACdsQ,EAAMtQ,EAAQ,aACduiB,EAAQviB,EAAQ,eAChB8R,EAAe9R,EAAQ,uBAAuB8R,aAC9Cy3E,EAAe,MACfC,EAA2B,WAC3B,SAASA,EAAUt+E,EAAQu+E,GACvBlwF,KAAKiT,QAAU8D,EAAI3E,cAAc,OACjCpS,KAAKiT,QAAQV,UAAY,8BAAgC29E,EACzDlwF,KAAKgV,MAAQ+B,EAAI3E,cAAc,OAC/BpS,KAAKgV,MAAMzC,UAAY,sBACvBvS,KAAKgV,MAAM7B,YAAc,IACzBnT,KAAKiT,QAAQjB,YAAYhS,KAAKgV,OAC9BrD,EAAOK,YAAYhS,KAAKiT,SACxBjT,KAAKmwF,YAAW,GAChBnwF,KAAKowF,WAAY,EACjBpnE,EAAM1E,YAAYtkB,KAAKiT,QAAS,SAAUjT,KAAKqwF,SAAS5nE,KAAKzoB,OAC7DgpB,EAAM1E,YAAYtkB,KAAKiT,QAAS,YAAa+V,EAAMtQ,eACvD,CAMA,OALAu3E,EAAUptF,UAAUstF,WAAa,SAAU/B,GACvCpuF,KAAKiT,QAAQT,MAAM4C,QAAUg5E,EAAY,GAAK,OAC9CpuF,KAAKouF,UAAYA,EACjBpuF,KAAKswF,MAAQ,CACjB,EACOL,CACX,CApB8B,GAqB9Bt1E,EAAItC,UAAU43E,EAAUptF,UAAW0V,GACnC,IAAIg4E,EAA4B,SAAUv1D,GAEtC,SAASu1D,EAAW5+E,EAAQqa,GACxB,IAAIiP,EAAQD,EAAOp4B,KAAK5C,KAAM2R,EAAQ,OAAS3R,KAQ/C,OAPAi7B,EAAM+hC,UAAY,EAClB/hC,EAAM1D,aAAe,EACrBvL,EAASwkE,gBACLv1D,EAAMhmB,MAAQ8B,EAAIhC,eAAepD,EAAOyB,eAC5C6nB,EAAMjmB,MAAMxC,MAAMyC,MACdgmB,EAAMhoB,QAAQT,MAAMyC,OAASgmB,EAAMhmB,OAAS,IAAM,EAAI,KAC1DgmB,EAAMw1D,UAAY,EACXx1D,CACX,CAoCA,OA/CAzD,EAAU+4D,EAAYv1D,GAYtBu1D,EAAW1tF,UAAUwtF,SAAW,WAC5B,IAAKrwF,KAAKowF,UAAW,CAEjB,GADApwF,KAAKg9D,UAAYh9D,KAAKiT,QAAQ+pD,UACZ,GAAdh9D,KAAKswF,MAAY,CACjB,IAAI3wF,EAAIK,KAAKiT,QAAQ2e,aAAe5xB,KAAKu3B,aACzCv3B,KAAKg9D,UAAYh9D,KAAKg9D,WAAa,EAAIr9D,IAAMK,KAAKswF,MAAQ3wF,EAC9D,CACAK,KAAK4Y,MAAM,SAAU,CAAE4B,KAAMxa,KAAKg9D,WACtC,CACAh9D,KAAKowF,WAAY,CACrB,EACAG,EAAW1tF,UAAUq2B,SAAW,WAC5B,OAAO/sB,KAAKC,IAAIpM,KAAKouF,UAAYpuF,KAAKiV,MAAQ,EAAGjV,KAAKywF,WAAa,EACvE,EACAF,EAAW1tF,UAAU6tF,UAAY,SAAUv7E,GACvCnV,KAAKiT,QAAQT,MAAM2C,OAASA,EAAS,IACzC,EACAo7E,EAAW1tF,UAAU8tF,gBAAkB,SAAUx7E,GAC7CnV,KAAKu3B,aAAepiB,EAChBA,EAAS66E,GACThwF,KAAKswF,MAAQN,EAAe76E,EAC5BA,EAAS66E,GAEU,GAAdhwF,KAAKswF,QACVtwF,KAAKswF,MAAQ,GAEjBtwF,KAAKgV,MAAMxC,MAAM2C,OAASA,EAAS,IACvC,EACAo7E,EAAW1tF,UAAUk6D,aAAe,SAAUC,GACtCh9D,KAAKg9D,WAAaA,IAClBh9D,KAAKowF,WAAY,EACjBpwF,KAAKg9D,UAAYA,EACjBh9D,KAAKiT,QAAQ+pD,UAAYA,EAAYh9D,KAAKswF,MAElD,EACOC,CACX,CAjD+B,CAiD7BN,GACFM,EAAW1tF,UAAU+tF,eAAiBL,EAAW1tF,UAAU8tF,gBAC3D,IAAIE,EAA4B,SAAU71D,GAEtC,SAAS61D,EAAWl/E,EAAQqa,GACxB,IAAIiP,EAAQD,EAAOp4B,KAAK5C,KAAM2R,EAAQ,OAAS3R,KAK/C,OAJAi7B,EAAMqN,WAAa,EACnBrN,EAAM9lB,OAAS6W,EAASwkE,gBACxBv1D,EAAMjmB,MAAMxC,MAAM2C,OACd8lB,EAAMhoB,QAAQT,MAAM2C,QAAU8lB,EAAM9lB,QAAU,IAAM,EAAI,KACrD8lB,CACX,CA0BA,OAlCAzD,EAAUq5D,EAAY71D,GAStB61D,EAAWhuF,UAAUwtF,SAAW,WACvBrwF,KAAKowF,YACNpwF,KAAKsoC,WAAatoC,KAAKiT,QAAQq1B,WAC/BtoC,KAAK4Y,MAAM,SAAU,CAAE4B,KAAMxa,KAAKsoC,cAEtCtoC,KAAKowF,WAAY,CACrB,EACAS,EAAWhuF,UAAUm2B,UAAY,WAC7B,OAAOh5B,KAAKouF,UAAYpuF,KAAKmV,OAAS,CAC1C,EACA07E,EAAWhuF,UAAUiuF,SAAW,SAAU77E,GACtCjV,KAAKiT,QAAQT,MAAMyC,MAAQA,EAAQ,IACvC,EACA47E,EAAWhuF,UAAUkuF,cAAgB,SAAU97E,GAC3CjV,KAAKgV,MAAMxC,MAAMyC,MAAQA,EAAQ,IACrC,EACA47E,EAAWhuF,UAAUmuF,eAAiB,SAAU/7E,GAC5CjV,KAAKgV,MAAMxC,MAAMyC,MAAQA,EAAQ,IACrC,EACA47E,EAAWhuF,UAAUi6D,cAAgB,SAAUx0B,GACvCtoC,KAAKsoC,YAAcA,IACnBtoC,KAAKowF,WAAY,EACjBpwF,KAAKsoC,WAAatoC,KAAKiT,QAAQq1B,WAAaA,EAEpD,EACOuoD,CACX,CApC+B,CAoC7BZ,GACFvpF,EAAQuqF,UAAYV,EACpB7pF,EAAQwqF,WAAaX,EACrB7pF,EAAQyqF,WAAaN,EACrBnqF,EAAQ6pF,WAAaA,EACrB7pF,EAAQmqF,WAAaA,CAErB,IAEA5yF,IAAIC,OAAO,uBAAuB,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,gBAAgB,0BAA0B,SAASuI,EAASC,EAASvD,GAAQ,aACzK,IAAIq0B,EAAax3B,MAAQA,KAAKw3B,WAAc,WACxC,IAAIC,EAAgB,SAAU13B,EAAGmF,GAI7B,OAHAuyB,EAAgBxvB,OAAOyvB,gBAClB,CAAEC,UAAW,cAAgBnsB,OAAS,SAAUzL,EAAGmF,GAAKnF,EAAE43B,UAAYzyB,CAAG,GAC1E,SAAUnF,EAAGmF,GAAK,IAAK,IAAIrF,KAAKqF,EAAO+C,OAAOpF,UAAUqa,eAAeta,KAAKsC,EAAGrF,KAAIE,EAAEF,GAAKqF,EAAErF,GAAI,EAC7F43B,EAAc13B,EAAGmF,EAC5B,EACA,OAAO,SAAUnF,EAAGmF,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI6F,UAAU,uBAAyBhB,OAAO7E,GAAK,iCAE7D,SAAS0yB,IAAO53B,KAAKmY,YAAcpY,CAAG,CADtC03B,EAAc13B,EAAGmF,GAEjBnF,EAAE8C,UAAkB,OAANqC,EAAa+C,OAAO0F,OAAOzI,IAAM0yB,EAAG/0B,UAAYqC,EAAErC,UAAW,IAAI+0B,EACnF,CACH,CAd2C,GAexCjd,EAAMlU,EAAQ,aACdsQ,EAAMtQ,EAAQ,aACduiB,EAAQviB,EAAQ,eAChB8R,EAAe9R,EAAQ,uBAAuB8R,aAClDxB,EAAIjQ,gBAAgB,+uBAAgvB,qBAAqB,GACzxB,IAAImqF,EAA2B,WAC3B,SAASA,EAAUt/E,EAAQu+E,GACvBlwF,KAAKiT,QAAU8D,EAAI3E,cAAc,OACjCpS,KAAKiT,QAAQV,UAAY,SAAW29E,EACpClwF,KAAKgV,MAAQ+B,EAAI3E,cAAc,OAC/BpS,KAAKgV,MAAMzC,UAAY,GACvBvS,KAAKiT,QAAQjB,YAAYhS,KAAKgV,OAC9BhV,KAAKoxF,aAAe,GACpBpxF,KAAKqxF,cAAgB,GACrB1/E,EAAOK,YAAYhS,KAAKiT,SACxBjT,KAAKmwF,YAAW,GAChBnwF,KAAKowF,WAAY,EACjBpnE,EAAMjD,0BAA0B/lB,KAAKiT,QAAS,CAAC,IAAK,IAAK,KAAMjT,KAAM,cACzE,CAMA,OALAixF,EAAUpuF,UAAUstF,WAAa,SAAU/B,GACvCpuF,KAAKiT,QAAQT,MAAM4C,QAAUg5E,EAAY,GAAK,OAC9CpuF,KAAKouF,UAAYA,EACjBpuF,KAAKswF,MAAQ,CACjB,EACOW,CACX,CApB8B,GAqB9Bt2E,EAAItC,UAAU44E,EAAUpuF,UAAW0V,GACnC,IAAIg4E,EAA4B,SAAUv1D,GAEtC,SAASu1D,EAAW5+E,EAAQqa,GACxB,IAAIiP,EAAQD,EAAOp4B,KAAK5C,KAAM2R,EAAQ,OAAS3R,KAQ/C,OAPAi7B,EAAM+hC,UAAY,EAClB/hC,EAAM1D,aAAe,EACrB0D,EAAMtpB,OAASA,EACfspB,EAAMhmB,MAAQgmB,EAAMm2D,aACpBn2D,EAAMjP,SAAWA,EACjBiP,EAAMjmB,MAAMxC,MAAMyC,MAAQgmB,EAAMhoB,QAAQT,MAAMyC,OAASgmB,EAAMhmB,OAAS,IAAM,KAC5EgmB,EAAMw1D,UAAY,EACXx1D,CACX,CAiFA,OA5FAzD,EAAU+4D,EAAYv1D,GAYtBu1D,EAAW1tF,UAAU0wB,YAAc,SAAU+9D,EAAOnzF,GAChD,GAAc,cAAVmzF,GAEuB,IAAvBtoE,EAAMtE,UAAUvmB,IAAyB,IAAbA,EAAEqoB,OAAlC,CAGA,GAAIroB,EAAE2M,SAAW9K,KAAKgV,MAAO,CACzB,IAAIovB,EAAOpkC,KACPuxF,EAAapzF,EAAEyoB,QACf0U,EAAc,SAAUn9B,GACxBozF,EAAapzF,EAAEyoB,OACnB,EACI1B,EAAY,WACZ0e,cAAc7B,EAClB,EACI3b,EAASjoB,EAAEyoB,QACX4qE,EAAWxxF,KAAKyxF,SAChBC,EAAmB,WACnB,QAAmBtrF,IAAfmrF,EAAJ,CAEA,IAAIv0B,EAAY54B,EAAKutD,sBAAsBH,EAAWD,EAAanrE,GAC/D42C,IAAc54B,EAAK44B,WAEvB54B,EAAKxrB,MAAM,SAAU,CAAE4B,KAAMwiD,GAJnB,CAKd,EACAh0C,EAAMjE,QAAQ/kB,KAAKgV,MAAOsmB,EAAapW,GACvC,IAAI6c,EAAU8B,YAAY6tD,EAAkB,IAC5C,OAAO1oE,EAAMtQ,eAAeva,EAChC,CACA,IAAI2Y,EAAM3Y,EAAEyoB,QAAU5mB,KAAKiT,QAAQmZ,wBAAwBtV,IAAM9W,KAAK4xF,YAAc,EAEpF,OADA5xF,KAAK4Y,MAAM,SAAU,CAAE4B,KAAMxa,KAAK2xF,sBAAsB76E,KACjDkS,EAAMtQ,eAAeva,EA1B5B,CA2BJ,EACAoyF,EAAW1tF,UAAUm2B,UAAY,WAC7B,OAAOh5B,KAAKmV,MAChB,EACAo7E,EAAW1tF,UAAU8uF,sBAAwB,SAAUF,GACnD,IAAIz0B,EAAYy0B,GAAYzxF,KAAK6xF,WAAa7xF,KAAK8xF,aAAe9xF,KAAK+xF,YAAc/xF,KAAK4xF,aAQ1F,OAPA50B,IAAyB,EACrBA,EAAY,EACZA,EAAY,EAEPA,EAAYh9D,KAAK6xF,WAAa7xF,KAAK8xF,aACxC90B,EAAYh9D,KAAK6xF,WAAa7xF,KAAK8xF,YAEhC90B,CACX,EACAuzB,EAAW1tF,UAAUq2B,SAAW,WAC5B,OAAO/sB,KAAKC,IAAIpM,KAAKouF,UAAYpuF,KAAKiV,MAAQ,EAAGjV,KAAKywF,WAAa,EACvE,EACAF,EAAW1tF,UAAU6tF,UAAY,SAAUv7E,GACvCnV,KAAKmV,OAAShJ,KAAKC,IAAI,EAAG+I,GAC1BnV,KAAK+xF,YAAc/xF,KAAKmV,OACxBnV,KAAK8xF,WAAa9xF,KAAKmV,OACvBnV,KAAK2wF,gBAAgB3wF,KAAK6xF,YAAY,EAC1C,EACAtB,EAAW1tF,UAAU8tF,gBAAkB,SAAUx7E,EAAQyrD,IACjD5gE,KAAK6xF,aAAe18E,GAAWyrD,KAEnC5gE,KAAK6xF,WAAa18E,EAClBnV,KAAK4xF,YAAc5xF,KAAK+xF,YAAc/xF,KAAK8xF,WAAa9xF,KAAK6xF,WACzD7xF,KAAK4xF,YAAc5xF,KAAK+xF,cACxB/xF,KAAK4xF,YAAc5xF,KAAK+xF,aACxB/xF,KAAK4xF,YAAc,KACnB5xF,KAAK4xF,YAAc,IACvB5xF,KAAKgV,MAAMxC,MAAM2C,OAASnV,KAAK4xF,YAAc,KACzC5xF,KAAKg9D,UAAah9D,KAAK6xF,WAAa7xF,KAAK8xF,aACzC9xF,KAAKg9D,UAAah9D,KAAK6xF,WAAa7xF,KAAK8xF,WACrC9xF,KAAKg9D,UAAY,IACjBh9D,KAAKg9D,UAAY,GACrBh9D,KAAK4Y,MAAM,SAAU,CAAE4B,KAAMxa,KAAKg9D,aAE1C,EACAuzB,EAAW1tF,UAAUk6D,aAAe,SAAUC,GAC1Ch9D,KAAKg9D,UAAYA,EACbA,EAAY,IACZA,EAAY,GAChBh9D,KAAKyxF,SAAWz0B,GAAah9D,KAAK+xF,YAAc/xF,KAAK4xF,cAAgB5xF,KAAK6xF,WAAa7xF,KAAK8xF,YAC5F9xF,KAAKgV,MAAMxC,MAAMsE,IAAM9W,KAAKyxF,SAAW,IAC3C,EACOlB,CACX,CA9F+B,CA8F7BU,GACFV,EAAW1tF,UAAU+tF,eAAiBL,EAAW1tF,UAAU8tF,gBAC3D,IAAIE,EAA4B,SAAU71D,GAEtC,SAAS61D,EAAWl/E,EAAQqa,GACxB,IAAIiP,EAAQD,EAAOp4B,KAAK5C,KAAM2R,EAAQ,OAAS3R,KAM/C,OALAi7B,EAAMqN,WAAa,EACnBrN,EAAM+2D,YAAc,EACpB/2D,EAAM9lB,OAAS8lB,EAAMo2D,cACrBp2D,EAAMjmB,MAAMxC,MAAM2C,OAAS8lB,EAAMhoB,QAAQT,MAAM2C,QAAU8lB,EAAM9lB,QAAU,IAAM,KAC/E8lB,EAAMjP,SAAWA,EACViP,CACX,CA+EA,OAxFAzD,EAAUq5D,EAAY71D,GAUtB61D,EAAWhuF,UAAU0wB,YAAc,SAAU+9D,EAAOnzF,GAChD,GAAc,cAAVmzF,GAEuB,IAAvBtoE,EAAMtE,UAAUvmB,IAAyB,IAAbA,EAAEqoB,OAAlC,CAGA,GAAIroB,EAAE2M,SAAW9K,KAAKgV,MAAO,CACzB,IAAIovB,EAAOpkC,KACPiyF,EAAa9zF,EAAEwoB,QACf2U,EAAc,SAAUn9B,GACxB8zF,EAAa9zF,EAAEwoB,OACnB,EACIzB,EAAY,WACZ0e,cAAc7B,EAClB,EACI5b,EAAShoB,EAAEwoB,QACXurE,EAAYlyF,KAAKmyF,UACjBT,EAAmB,WACnB,QAAmBtrF,IAAf6rF,EAAJ,CAEA,IAAI3pD,EAAalE,EAAKguD,wBAAwBF,EAAYD,EAAa9rE,GACnEmiB,IAAelE,EAAKkE,YAExBlE,EAAKxrB,MAAM,SAAU,CAAE4B,KAAM8tB,GAJnB,CAKd,EACAtf,EAAMjE,QAAQ/kB,KAAKgV,MAAOsmB,EAAapW,GACvC,IAAI6c,EAAU8B,YAAY6tD,EAAkB,IAC5C,OAAO1oE,EAAMtQ,eAAeva,EAChC,CACA,IAAImX,EAAOnX,EAAEwoB,QAAU3mB,KAAKiT,QAAQmZ,wBAAwB9W,KAAOtV,KAAKqyF,WAAa,EAErF,OADAryF,KAAK4Y,MAAM,SAAU,CAAE4B,KAAMxa,KAAKoyF,wBAAwB98E,KACnD0T,EAAMtQ,eAAeva,EA1B5B,CA2BJ,EACA0yF,EAAWhuF,UAAUm2B,UAAY,WAC7B,OAAOh5B,KAAKouF,UAAYpuF,KAAKmV,OAAS,CAC1C,EACA07E,EAAWhuF,UAAUuvF,wBAA0B,SAAUD,GACrD,IAAI7pD,EAAa6pD,GAAanyF,KAAKsyF,UAAYtyF,KAAKuyF,YAAcvyF,KAAKwyF,WAAaxyF,KAAKqyF,YAQzF,OAPA/pD,IAA2B,EACvBA,EAAa,EACbA,EAAa,EAERA,EAAatoC,KAAKsyF,UAAYtyF,KAAKuyF,YACxCjqD,EAAatoC,KAAKsyF,UAAYtyF,KAAKuyF,WAEhCjqD,CACX,EACAuoD,EAAWhuF,UAAUiuF,SAAW,SAAU77E,GACtCjV,KAAKiV,MAAQ9I,KAAKC,IAAI,EAAG6I,GACzBjV,KAAKiT,QAAQT,MAAMyC,MAAQjV,KAAKiV,MAAQ,KACxCjV,KAAKwyF,WAAaxyF,KAAKiV,MACvBjV,KAAKuyF,UAAYvyF,KAAKiV,MACtBjV,KAAKgxF,eAAehxF,KAAKsyF,WAAW,EACxC,EACAzB,EAAWhuF,UAAUmuF,eAAiB,SAAU/7E,EAAO2rD,IAC/C5gE,KAAKsyF,YAAcr9E,GAAU2rD,KAEjC5gE,KAAKsyF,UAAYr9E,EACjBjV,KAAKqyF,WAAaryF,KAAKwyF,WAAaxyF,KAAKuyF,UAAYvyF,KAAKsyF,UACtDtyF,KAAKqyF,WAAaryF,KAAKwyF,aACvBxyF,KAAKqyF,WAAaryF,KAAKwyF,YACvBxyF,KAAKqyF,WAAa,KAClBryF,KAAKqyF,WAAa,IACtBryF,KAAKgV,MAAMxC,MAAMyC,MAAQjV,KAAKqyF,WAAa,KACvCryF,KAAKsoC,WAActoC,KAAKsyF,UAAYtyF,KAAKuyF,YACzCvyF,KAAKsoC,WAActoC,KAAKsyF,UAAYtyF,KAAKuyF,UACrCvyF,KAAKsoC,WAAa,IAClBtoC,KAAKsoC,WAAa,GACtBtoC,KAAK4Y,MAAM,SAAU,CAAE4B,KAAMxa,KAAKsoC,cAE1C,EACAuoD,EAAWhuF,UAAUi6D,cAAgB,SAAUx0B,GAC3CtoC,KAAKsoC,WAAaA,EACdA,EAAa,IACbA,EAAa,GACjBtoC,KAAKmyF,UAAY7pD,GAActoC,KAAKwyF,WAAaxyF,KAAKqyF,aAAeryF,KAAKsyF,UAAYtyF,KAAKuyF,WAC3FvyF,KAAKgV,MAAMxC,MAAM8C,KAAQtV,KAAc,UAAI,IAC/C,EACO6wF,CACX,CA1F+B,CA0F7BI,GACFJ,EAAWhuF,UAAUkuF,cAAgBF,EAAWhuF,UAAUmuF,eAC1DtqF,EAAQuqF,UAAYV,EACpB7pF,EAAQwqF,WAAaX,EACrB7pF,EAAQyqF,WAAaN,EACrBnqF,EAAQ6pF,WAAaA,EACrB7pF,EAAQmqF,WAAaA,CAErB,IAEA5yF,IAAIC,OAAO,iBAAiB,CAAC,UAAU,UAAU,SAAS,kBAAkB,SAASuI,EAASC,EAASvD,GAAQ,aAC/G,IAAI6lB,EAAQviB,EAAQ,eAChBgsF,EAA4B,WAC5B,SAASA,EAAWC,EAAU3qE,GAC1B/nB,KAAK0yF,SAAWA,EAChB1yF,KAAK2yF,SAAU,EACf3yF,KAAK4yF,QAAU,EACf5yF,KAAK6yF,gBAAkB,EACvB7yF,KAAKiH,OAAS8gB,GAAO9gB,OACrB,IAAI+H,EAAQhP,KACZA,KAAK8yF,OAAS,SAAUhvE,GACpB9U,EAAM2jF,SAAU,EAChB,IAAIC,EAAU5jF,EAAM4jF,QAMpB,GALIA,IACA5pE,EAAMV,UAAU,KAChBtZ,EAAM4jF,QAAU,EAChB5jF,EAAM0jF,SAASE,IAEf5jF,EAAM4jF,QAAS,CACf,GAAI5jF,EAAM6jF,kBAAoB,EAC1B,OACJ7jF,EAAML,UACV,MAEIK,EAAM6jF,gBAAkB,CAEhC,CACJ,CAaA,OAZAJ,EAAW5vF,UAAU8L,SAAW,SAAUokF,GACtC/yF,KAAK4yF,QAAU5yF,KAAK4yF,QAAUG,EAC1B/yF,KAAK4yF,UAAY5yF,KAAK2yF,UACtB3pE,EAAMT,UAAUvoB,KAAK8yF,QACrB9yF,KAAK2yF,SAAU,EAEvB,EACAF,EAAW5vF,UAAUmwF,MAAQ,SAAUD,GACnC,IAAIH,EAAU5yF,KAAK4yF,QAEnB,OADA5yF,KAAK4yF,QAAU,EACRA,CACX,EACOH,CACX,CAvC+B,GAwC/B/rF,EAAQ+rF,WAAaA,CAErB,IAEAx0F,IAAIC,OAAO,yBAAyB,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,eAAe,gBAAgB,oBAAoB,0BAA0B,SAASuI,EAASC,EAASvD,GAAQ,IAAIwX,EAAMlU,EAAQ,cAC5NsQ,EAAMtQ,EAAQ,cACd+V,EAAO/V,EAAQ,eACfuiB,EAAQviB,EAAQ,gBAChB+K,EAAY/K,EAAQ,oBACpB8R,EAAe9R,EAAQ,wBAAwB8R,aAC/C06E,EAAa,IACbC,EAAwC,mBAAlBC,eACtBtlD,EAAI,IACJulD,EAA6B,WAC7B,SAASA,EAAYtN,GACjB9lF,KAAKmS,GAAK4E,EAAI3E,cAAc,OAC5BpS,KAAKqzF,sBAAsBrzF,KAAKmS,GAAGK,OAAO,GAC1CxS,KAAKo0C,MAAQr9B,EAAI3E,cAAc,OAC/BpS,KAAKqzF,sBAAsBrzF,KAAKo0C,MAAM5hC,OACtCxS,KAAKszF,aAAev8E,EAAI3E,cAAc,OACtCpS,KAAKqzF,sBAAsBrzF,KAAKszF,aAAa9gF,OAC7CxS,KAAKmS,GAAGH,YAAYhS,KAAKo0C,OACzBp0C,KAAKmS,GAAGH,YAAYhS,KAAKszF,cACzBxN,EAAS9zE,YAAYhS,KAAKmS,IAC1BnS,KAAKszF,aAAangF,YAAcqJ,EAAKzP,aAAa,IAAKkmF,GACvDjzF,KAAKw0C,eAAiB,CAAEv/B,MAAO,EAAGE,OAAQ,GACtC+9E,EACAlzF,KAAKuzF,eAELvzF,KAAK4qF,qBACb,CAoIA,OAnIAwI,EAAYvwF,UAAUwwF,sBAAwB,SAAU7gF,EAAOghF,GAC3DhhF,EAAMyC,MAAQzC,EAAM2C,OAAS,OAC7B3C,EAAM8C,KAAO9C,EAAMsE,IAAM,MACzBtE,EAAMihF,WAAa,SACnBjhF,EAAMtI,SAAW,WACjBsI,EAAMgpB,WAAa,MACfhqB,EAAUjB,KAAO,EACjBiC,EAAM,eAAiB,UAGvBA,EAAMkhF,KAAO,UAEjBlhF,EAAM+C,SAAWi+E,EAAS,SAAW,SACzC,EACAJ,EAAYvwF,UAAU+nF,oBAAsB,SAAU32C,GAGlD,QAFa7tC,IAAT6tC,IACAA,EAAOj0C,KAAK2zF,iBACZ1/C,IAASj0C,KAAKw0C,eAAev/B,QAAUg/B,EAAKh/B,OAASjV,KAAKw0C,eAAer/B,SAAW8+B,EAAK9+B,QAAS,CAClGnV,KAAKszF,aAAa9gF,MAAMohF,WAAa,OACrC,IAAIC,EAAW7zF,KAAK2zF,gBACpB3zF,KAAKszF,aAAa9gF,MAAMohF,WAAa,GACrC5zF,KAAKw0C,eAAiBP,EACtBj0C,KAAK8zF,UAAY7rF,OAAO0F,OAAO,MAC/B3N,KAAK+zF,eAAiBF,GAAYA,EAAS5+E,QAAUg/B,EAAKh/B,OAAS4+E,EAAS1+E,SAAW8+B,EAAK9+B,OAC5FnV,KAAK4Y,MAAM,sBAAuB,CAAE4B,KAAMy5B,GAC9C,CACJ,EACAm/C,EAAYvwF,UAAU0wF,aAAe,WACjC,IAAInvD,EAAOpkC,KACXA,KAAKg0F,UAAY,IAAI/sF,OAAOksF,gBAAe,SAAUh1F,GACjDimC,EAAKwmD,qBACT,IACA5qF,KAAKg0F,UAAUC,QAAQj0F,KAAKszF,aAChC,EACAF,EAAYvwF,UAAU8nF,iBAAmB,WACrC,GAAI3qF,KAAK6qF,uBAAyB7qF,KAAKg0F,UACnC,OAAOh0F,KAAK6qF,sBAChB,IAAIzmD,EAAOpkC,KACX,OAAOA,KAAK6qF,sBAAwB7hE,EAAMb,QAAO,SAASrK,IACtDsmB,EAAKwmD,sBACL5hE,EAAMb,OAAOrK,EAAI,IACrB,GAAG,IACP,EACAs1E,EAAYvwF,UAAUqxF,WAAa,SAAUxqF,GACrCA,EACA1J,KAAK2qF,mBAEA3qF,KAAK6qF,wBACVjnD,cAAc5jC,KAAK6qF,uBACnB7qF,KAAK6qF,sBAAwB,EAErC,EACAuI,EAAYvwF,UAAU8wF,cAAgB,SAAU7/E,GAC5C,IAAImgC,EAAO,CACP9+B,QAASrB,GAAQ9T,KAAKszF,cAAc1hE,aACpC3c,OAAQnB,GAAQ9T,KAAKszF,cAAc19E,YAAcq9E,GAErD,OAAmB,IAAfh/C,EAAKh/B,OAA+B,IAAhBg/B,EAAK9+B,OAClB,KACJ8+B,CACX,EACAm/C,EAAYvwF,UAAU6xC,kBAAoB,SAAUxiC,GAChDlS,KAAKo0C,MAAMjhC,YAAcqJ,EAAKzP,aAAamF,EAAI+gF,GAC/C,IAAI1hE,EAAOvxB,KAAKo0C,MAAMhoB,wBACtB,OAAOmF,EAAKtc,MAAQg+E,CACxB,EACAG,EAAYvwF,UAAUwjE,kBAAoB,SAAUn0D,GAChD,IAAI9M,EAAIpF,KAAK8zF,UAAU5hF,GAIvB,YAHU9L,IAANhB,IACAA,EAAIpF,KAAK8zF,UAAU5hF,GAAMlS,KAAK00C,kBAAkBxiC,GAAMlS,KAAKw0C,eAAev/B,OAEvE7P,CACX,EACAguF,EAAYvwF,UAAUwhB,QAAU,WAC5Buf,cAAc5jC,KAAK6qF,uBACf7qF,KAAKg0F,WACLh0F,KAAKg0F,UAAUG,aACfn0F,KAAKmS,IAAMnS,KAAKmS,GAAGsX,YACnBzpB,KAAKmS,GAAGsX,WAAW5T,YAAY7V,KAAKmS,GAC5C,EACAihF,EAAYvwF,UAAUuxF,SAAW,SAAUnhF,GACvC,OAAKA,GAAYA,EAAQqZ,eAEjBrlB,OAAO8O,iBAAiB9C,GAAS,SAAW,GAAKjT,KAAKo0F,SAASnhF,EAAQqZ,eADpE,CAEf,EACA8mE,EAAYvwF,UAAUwxF,2BAA6B,WAC/C,IAAIj2F,EAAI,SAAUA,EAAGmB,GACjB,MAAO,CAAC,MAAO,CACPiT,MAAO,0BAA4BpU,EAAI,WAAamB,EAAI,OAEpE,EACAS,KAAKiS,IAAM8E,EAAIrF,SAAS,CAACtT,EAAE,EAAG,GAAIA,EAAEyvC,EAAG,GAAIzvC,EAAE,EAAGyvC,GAAIzvC,EAAEyvC,EAAGA,IAAK7tC,KAAKmS,GACvE,EACAihF,EAAYvwF,UAAUyxF,qBAAuB,SAAUC,EAAWC,GAC9D,GAAID,EAAW,CACX,IAAIE,EAAOz0F,KAAKo0F,SAASp0F,KAAKmS,IAC9BoiF,EAAYG,EAAI,EAAID,EAAMF,EAC9B,CACA,SAASI,EAAMC,EAAIC,EAAIv2F,GACnB,IAAIw2F,EAAMF,EAAG,GAAKC,EAAG,GAAKD,EAAG,GAAKC,EAAG,GACrC,MAAO,GACDA,EAAG,GAAKv2F,EAAE,GAAKu2F,EAAG,GAAKv2F,EAAE,IAAMw2F,IAC/BF,EAAG,GAAKt2F,EAAE,GAAKs2F,EAAG,GAAKt2F,EAAE,IAAMw2F,EAEzC,CACA,SAASC,EAAI31F,EAAG8F,GAAK,MAAO,CAAC9F,EAAE,GAAK8F,EAAE,GAAI9F,EAAE,GAAK8F,EAAE,GAAK,CACxD,SAAS0O,EAAIxU,EAAG8F,GAAK,MAAO,CAAC9F,EAAE,GAAK8F,EAAE,GAAI9F,EAAE,GAAK8F,EAAE,GAAK,CACxD,SAASwvF,EAAIt1F,EAAG8F,GAAK,MAAO,CAAC9F,EAAI8F,EAAE,GAAI9F,EAAI8F,EAAE,GAAK,CAGlD,SAASrF,EAAEsS,GACP,IAAI7T,EAAI6T,EAAGia,wBACX,MAAO,CAAC9tB,EAAEgX,KAAMhX,EAAEwY,IACtB,CALK9W,KAAKiS,KACNjS,KAAKq0F,6BAKT,IAAIj1F,EAAIS,EAAEG,KAAKiS,IAAI,IACf/M,EAAIrF,EAAEG,KAAKiS,IAAI,IACfxS,EAAII,EAAEG,KAAKiS,IAAI,IACflS,EAAIF,EAAEG,KAAKiS,IAAI,IACftS,EAAIg1F,EAAMI,EAAIh1F,EAAGmF,GAAI6vF,EAAIh1F,EAAGN,GAAIs1F,EAAInhF,EAAI1O,EAAGzF,GAAImU,EAAI7T,EAAGX,KACtD2gB,EAAK20E,EAAI,EAAI/0F,EAAE,GAAIo1F,EAAI7vF,EAAG9F,IAC1B41F,EAAKN,EAAI,EAAI/0F,EAAE,GAAIo1F,EAAIt1F,EAAGL,IAC9B,GAAIo1F,EAAO,CACP,IAAIjxE,EAAIixE,EACJjpF,EAAI5L,EAAE,GAAK4jB,EAAE,GAAKsqB,EAAIluC,EAAE,GAAK4jB,EAAE,GAAKsqB,EAAI,EACxConD,EAAKrhF,EAAI8gF,EAAInxE,EAAE,GAAIxD,GAAK20E,EAAInxE,EAAE,GAAIyxE,IACtC,OAAOphF,EAAI8gF,EAAI,EAAInpF,EAAIsiC,EAAGonD,GAAK71F,EACnC,CACA,IAAIF,EAAI61F,EAAIR,EAAWn1F,GACnBE,EAAIq1F,EAAMI,EAAIh1E,EAAI20E,EAAI/0F,EAAE,GAAIT,IAAK61F,EAAIC,EAAIN,EAAI/0F,EAAE,GAAIT,IAAKA,GAC5D,OAAOw1F,EAAI7mD,EAAGvuC,EAClB,EACO8zF,CACX,CAtJgC,GAuJhCA,EAAYvwF,UAAU2xC,eAAiB,CAAEv/B,MAAO,EAAGE,OAAQ,GAC3DwF,EAAItC,UAAU+6E,EAAYvwF,UAAW0V,GACrC7R,EAAQ0sF,YAAcA,CAEtB,IAEAn1F,IAAIC,OAAO,qBAAqB,CAAC,UAAU,UAAU,WAAW,SAASuI,EAASC,EAASvD,GAW3FA,EAAOuD,QAAU,m5sBAEjB,IAEAzI,IAAIC,OAAO,uBAAuB,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,0BAA0B,SAASuI,EAASC,EAASvD,GAAQ,aACzJ,IAAI4T,EAAMtQ,EAAQ,cACdkU,EAAMlU,EAAQ,cACd8R,EAAe9R,EAAQ,wBAAwB8R,aAC/C28E,EAA2B,WAC3B,SAASA,EAAUvjF,EAAQqa,GACvBhsB,KAAKm1F,OAASp+E,EAAI3E,cAAc,UAChCpS,KAAKgsB,SAAWA,EAChBhsB,KAAKo1F,WAAa,EAClBp1F,KAAK68B,UAAY7Q,EAAS6W,YAAYhG,UACtC78B,KAAKm9B,WAAanR,EAAS6W,YAAY1F,WACvCn9B,KAAK2kF,aAAehzE,EAAOA,OAAO4lB,aAClCv3B,KAAKq1F,YAAcr1F,KAAK2kF,aAAe3kF,KAAK68B,UAC5C78B,KAAKs1F,YAAc3jF,EAAOsD,MAC1BjV,KAAKu1F,oBAAuB,EAAIv1F,KAAKo1F,WAAc,EACnDp1F,KAAKw1F,wBAA2Bx1F,KAAKu1F,oBAAsB,EAAK,EAChEv1F,KAAKm1F,OAAOlgF,MAAQjV,KAAKs1F,YACzBt1F,KAAKm1F,OAAOhgF,OAASnV,KAAK2kF,aAC1B3kF,KAAKm1F,OAAO3iF,MAAMsE,IAAM,MACxB9W,KAAKm1F,OAAO3iF,MAAMkgB,MAAQ,MAC1B1yB,KAAKm1F,OAAO3iF,MAAM68D,OAAS,MAC3BrvE,KAAKm1F,OAAO3iF,MAAMtI,SAAW,WAC7BlK,KAAKy1F,OAAS,CAAC,EACfz1F,KAAKy1F,OAAOC,KAAO,CACf,MAAS,uBACT,QAAW,uBACX,KAAQ,wBAEZ11F,KAAKy1F,OAAOE,MAAQ,CAChB,MAAS,iBACT,QAAW,iBACX,KAAQ,kBAEZhkF,EAAOsB,QAAQjB,YAAYhS,KAAKm1F,OACpC,CAgFA,OA/EAD,EAAUryF,UAAU+yF,kBAAoB,SAAU32E,GAC9C,IAAIw2E,GAAyC,IAA/Bz1F,KAAKgsB,SAAS6M,MAAMlyB,OAAmB3G,KAAKy1F,OAAOC,KAAO11F,KAAKy1F,OAAOE,MACpF,GAAI12E,EAAQ,CACRjf,KAAK68B,UAAY5d,EAAO4d,UACxB78B,KAAKm9B,WAAale,EAAOke,WACzBn9B,KAAK2kF,aAAe1lE,EAAO9J,OAC3B,IAAI0gF,GAAiB52E,EAAO0C,QAAU,GAAK3hB,KAAKm9B,WAC5C04D,EAAgB71F,KAAK2kF,aACrB3kF,KAAKq1F,YAAc,EAGnBr1F,KAAKq1F,YAAcr1F,KAAK2kF,aAAe3kF,KAAK68B,SAEpD,CACA,IAAIi5D,EAAM91F,KAAKm1F,OAAOY,WAAW,MACjC,SAASv1E,EAAQphB,EAAG8F,GAChB,OAAI9F,EAAE06B,SAAW50B,EAAE40B,UACP,EACR16B,EAAE06B,SAAW50B,EAAE40B,SACR,EACJ,CACX,CACA,IAAIiH,EAAc/gC,KAAKgsB,SAAS9J,QAAQ6d,aAExC,GADA+1D,EAAIE,UAAU,EAAG,EAAGh2F,KAAKm1F,OAAOlgF,MAAOjV,KAAKm1F,OAAOhgF,QAC/C4rB,EAAa,CACb,IAAIk1D,EAAa,CACb,KAAQ,EACR,QAAW,EACX,MAAS,GAEbl1D,EAAY51B,SAAQ,SAAUY,GAC1BA,EAAK+tB,SAAWm8D,EAAWlqF,EAAK/K,OAAS,IAC7C,IACA+/B,EAAcA,EAAYlH,KAAKrZ,GAE/B,IADA,IAAI0xC,EAAWlyD,KAAKgsB,SAAS9J,QAAQizC,UAC5B52D,EAAI,EAAGA,EAAIwiC,EAAYpgC,OAAQpC,IAAK,CACzC,IAAIiE,EAAMu+B,EAAYxiC,GAAGiE,IACrB0zF,EAAiBl2F,KAAKm2F,mBAAmB3zF,EAAK0vD,GAC9CkkC,EAAWjqF,KAAK0K,OAAOrU,EAAM0zF,GAAkBl2F,KAAKm9B,WAAan9B,KAAKq1F,aACtEgB,EAAKlqF,KAAK0K,OAAQrU,EAAM0zF,GAAkBl2F,KAAKm9B,WAAan9B,KAAKq1F,aACjEiB,EAAKnqF,KAAK0K,QAASrU,EAAM0zF,GAAkBl2F,KAAKm9B,WAAan9B,KAAKm9B,YAAcn9B,KAAKq1F,aACrFlgF,EAASmhF,EAAKD,EAClB,GAAIlhF,EAASnV,KAAKu1F,oBAAqB,CACnC,IAAIgB,GAAYF,EAAKC,GAAM,EAAK,EAC5BC,EAAUv2F,KAAKw1F,wBACfe,EAAUv2F,KAAKw1F,wBAEVe,EAAUv2F,KAAKw1F,wBAA0Bx1F,KAAK2kF,eACnD4R,EAAUv2F,KAAK2kF,aAAe3kF,KAAKw1F,yBAEvCa,EAAKlqF,KAAK0K,MAAM0/E,EAAUv2F,KAAKw1F,yBAC/Bc,EAAKnqF,KAAK0K,MAAM0/E,EAAUv2F,KAAKw1F,wBACnC,CACAM,EAAIU,UAAYf,EAAO10D,EAAYxiC,GAAGyC,OAAS,KAC/C80F,EAAIW,SAAS,EAAGL,EAAUp2F,KAAKs1F,YAAagB,EAAKD,EACrD,CACJ,CACA,IAAI5qE,EAASzrB,KAAKgsB,SAAS9J,QAAQ7b,UAAU4wC,YAC7C,GAAIxrB,EAAQ,CACJyqE,EAAiBl2F,KAAKm2F,mBAAmB1qE,EAAOjpB,IAAK0vD,GACrDkkC,EAAWjqF,KAAK0K,OAAO4U,EAAOjpB,IAAM0zF,GAAkBl2F,KAAKm9B,WAAan9B,KAAKq1F,aACjFS,EAAIU,UAAY,qBAChBV,EAAIW,SAAS,EAAGL,EAAUp2F,KAAKs1F,YAAa,EAChD,CACJ,EACAJ,EAAUryF,UAAUszF,mBAAqB,SAAU3zF,EAAK0vD,GACpD,IAAIgkC,EAAiB,EACrB,GAAIhkC,GAAYA,EAASvxD,OAAS,EAC9B,IAAK,IAAIif,EAAI,EAAGA,EAAIsyC,EAASvxD,OAAQif,IAC7Bpd,EAAM0vD,EAAStyC,GAAGtf,MAAMkC,KAAOA,EAAM0vD,EAAStyC,GAAGjc,IAAInB,IACrD0zF,GAAkB1zF,EAAM0vD,EAAStyC,GAAGtf,MAAMkC,IAErCA,GAAO0vD,EAAStyC,GAAGjc,IAAInB,MAC5B0zF,GAAkBhkC,EAAStyC,GAAGjc,IAAInB,IAAM0vD,EAAStyC,GAAGtf,MAAMkC,KAItE,OAAO0zF,CACX,EACOhB,CACX,CA/G8B,GAgH9Bv6E,EAAItC,UAAU68E,EAAUryF,UAAW0V,GACnC7R,EAAQwuF,UAAYA,CAEpB,IAEAj3F,IAAIC,OAAO,uBAAuB,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,eAAe,aAAa,mBAAmB,mBAAmB,iBAAiB,mBAAmB,gBAAgB,gBAAgB,uBAAuB,uBAAuB,iBAAiB,yBAAyB,wBAAwB,qBAAqB,uBAAuB,sBAAsB,SAASuI,EAASC,EAASvD,GAAQ,aACvb,IAAIwX,EAAMlU,EAAQ,aACdsQ,EAAMtQ,EAAQ,aACd+V,EAAO/V,EAAQ,cACfwY,EAASxY,EAAQ,YACjBiwF,EAAcjwF,EAAQ,kBAAkBo/E,OACxC8Q,EAAclwF,EAAQ,kBAAkB0hF,OACxCyO,EAAYnwF,EAAQ,gBAAgBwjF,KACpC4M,EAAcpwF,EAAQ,kBAAkB0nF,OACxC0C,EAAapqF,EAAQ,eAAeoqF,WACpCN,EAAa9pF,EAAQ,eAAe8pF,WACpCuG,EAAmBrwF,EAAQ,sBAAsBoqF,WACjDkG,EAAmBtwF,EAAQ,sBAAsB8pF,WACjDkC,EAAahsF,EAAQ,gBAAgBgsF,WACrCW,EAAc3sF,EAAQ,wBAAwB2sF,YAC9C76E,EAAe9R,EAAQ,uBAAuB8R,aAC9Cy+E,EAAYvwF,EAAQ,oBACpByuF,EAAYzuF,EAAQ,sBAAsByuF,UAC1C1jF,EAAY/K,EAAQ,mBACxBsQ,EAAIjQ,gBAAgBkwF,EAAW,kBAAkB,GACjD,IAAIC,EAAiC,WACjC,SAASA,EAAgB1iF,EAAWskB,GAChC,IAAI7pB,EAAQhP,KACZA,KAAKuU,UAAYA,GAAawC,EAAI3E,cAAc,OAChD2E,EAAItD,YAAYzT,KAAKuU,UAAW,cAC5BwC,EAAIV,QACJU,EAAItD,YAAYzT,KAAKuU,UAAW,aACpCvU,KAAK44B,SAASC,GACoB,MAA9B5Z,EAAOjI,IAAI,iBACXiI,EAAOvD,IAAI,gBAAgB,GAC/B1b,KAAKs/B,QAAUvoB,EAAI3E,cAAc,OACjCpS,KAAKs/B,QAAQ/sB,UAAY,aACzBvS,KAAKuU,UAAUvC,YAAYhS,KAAKs/B,SAChCt/B,KAAKs/B,QAAQ7sB,aAAa,cAAe,QACzCzS,KAAK6yB,SAAW9b,EAAI3E,cAAc,OAClCpS,KAAK6yB,SAAStgB,UAAY,eAC1BvS,KAAKuU,UAAUvC,YAAYhS,KAAK6yB,UAChC7yB,KAAK8iF,QAAU/rE,EAAI3E,cAAc,OACjCpS,KAAK8iF,QAAQvwE,UAAY,cACzBvS,KAAK6yB,SAAS7gB,YAAYhS,KAAK8iF,SAC/B9iF,KAAKg+B,aAAe,IAAI04D,EAAY12F,KAAKs/B,SACzCt/B,KAAKg+B,aAAa3kB,GAAG,oBAAqBrZ,KAAKk3F,eAAezuE,KAAKzoB,OACnEA,KAAKm3F,YAAc,IAAIR,EAAY32F,KAAK8iF,SACxC,IAAIsU,EAAYp3F,KAAK43E,WAAa,IAAIgf,EAAU52F,KAAK8iF,SACrD9iF,KAAKm1F,OAASiC,EAAUnkF,QACxBjT,KAAKq3F,aAAe,IAAIV,EAAY32F,KAAK8iF,SACzC9iF,KAAK0jC,aAAe,IAAImzD,EAAY72F,KAAK8iF,SACzC9iF,KAAKs3F,cAAe,EACpBt3F,KAAKu3F,UAAW,EAChBv3F,KAAKowE,UACDpwE,KAAKiqC,WAAa,IAAIsmD,EAAWvwF,KAAKuU,UAAWvU,MACrDA,KAAKkqC,WAAa,IAAI2mD,EAAW7wF,KAAKuU,UAAWvU,MACjDA,KAAKiqC,WAAW5wB,GAAG,UAAU,SAAUlb,GAC9B6Q,EAAMwoF,kBACPxoF,EAAMkT,QAAQ66C,aAAa5+D,EAAEqc,KAAOxL,EAAMyoF,aAAa3gF,IAC/D,IACA9W,KAAKkqC,WAAW7wB,GAAG,UAAU,SAAUlb,GAC9B6Q,EAAMwoF,kBACPxoF,EAAMkT,QAAQ46C,cAAc3+D,EAAEqc,KAAOxL,EAAMyoF,aAAaniF,KAChE,IACAtV,KAAKg9D,UAAY,EACjBh9D,KAAKsoC,WAAa,EAClBtoC,KAAKkpC,UAAY,CACb1mC,IAAK,EACLC,OAAQ,GAEZzC,KAAKyqF,aAAe,IAAI2I,EAAYpzF,KAAKuU,WACzCvU,KAAK43E,WAAW1R,gBAAgBlmE,KAAKyqF,cACrCzqF,KAAK43E,WAAWv+D,GAAG,uBAAuB,SAAUlb,GAChD6Q,EAAM0oF,sBACN1oF,EAAMgoE,UAAS,EAAMhoE,EAAMihE,YAAajhE,EAAM2oF,MAAM1iF,MAAOjG,EAAM2oF,MAAMxiF,QACvEnG,EAAMmK,QAAQ,sBAAuBhb,EACzC,IACA6B,KAAK23F,MAAQ,CACT1iF,MAAO,EACPE,OAAQ,EACRyiF,eAAgB,EAChBC,cAAe,EACfC,QAAQ,GAEZ93F,KAAK6iC,YAAc,CACf5tB,MAAO,EACPk7D,QAAS,EACTzuD,SAAU,EACVqjE,eAAgB,EAChBpjE,QAAS,EACTwb,WAAY,EACZ7L,eAAgB,EAChBymE,UAAW,EACXl7D,UAAW,EACX1uB,OAAQ,EACRgH,OAAQ,EACRixE,aAAc,GAElBpmF,KAAKy3F,aAAe,CAChBniF,KAAM,EACNod,MAAO,EACP5b,IAAK,EACL6a,OAAQ,EACRvxB,EAAG,EACHT,EAAG,GAEPK,KAAKuqF,OAAS,CACVj1E,KAAM,EACNod,MAAO,EACP5b,IAAK,EACL6a,OAAQ,EACRvxB,EAAG,EACHT,EAAG,GAEPK,KAAK2wB,uBAAyBnf,EAAUH,MACxCrR,KAAKmiF,MAAQ,IAAIsQ,EAAWzyF,KAAKg4F,eAAevvE,KAAKzoB,MAAOA,KAAKuU,UAAUnB,cAAc6kF,aACzFj4F,KAAKmiF,MAAMxzE,SAAS3O,KAAKk4F,aACzBl4F,KAAK03F,sBACL13F,KAAKooF,WAAW,GAChBpoF,KAAKm4F,qBACLl5E,EAAOjD,aAAahc,MACpBif,EAAO9F,QAAQ,WAAYnZ,KAC/B,CA0mCA,OAzmCAi3F,EAAgBp0F,UAAU60F,oBAAsB,WACxC13F,KAAK43E,WAAWmc,gBAAkB/zF,KAAKo4F,kBACvCp4F,KAAKo4F,gBAAkBp4F,KAAK43E,WAAWmc,eACvC/zF,KAAKgW,SAAS,cAAehW,KAAKo4F,kBAEtCp4F,KAAK6iC,YAAYvR,eACbtxB,KAAKsxB,eAAiBtxB,KAAK43E,WAAWvR,oBAC1CrmE,KAAK6iC,YAAY1F,WACbn9B,KAAKm9B,WAAan9B,KAAK43E,WAAW4S,gBACtCxqF,KAAKq4F,qBACLthF,EAAIf,SAAShW,KAAK6yB,SAASrgB,MAAO,cAAexS,KAAKm9B,WAAa,KACvE,EACA85D,EAAgBp0F,UAAUixE,WAAa,SAAU5xD,GACzCliB,KAAKkiB,SACLliB,KAAKkiB,QAAQhe,IAAIqV,IAAI,oBAAqBvZ,KAAKs4F,qBACnDt4F,KAAKkiB,QAAUA,EACXA,GAAWliB,KAAKy3F,aAAa3gF,KAAOoL,EAAQ4mB,gBAAkB,GAC9D5mB,EAAQ66C,cAAc/8D,KAAKy3F,aAAa3gF,KAC5C9W,KAAK0jC,aAAaowC,WAAW5xD,GAC7BliB,KAAKm3F,YAAYrjB,WAAW5xD,GAC5BliB,KAAKq3F,aAAavjB,WAAW5xD,GAC7BliB,KAAKg+B,aAAa81C,WAAW5xD,GAC7BliB,KAAK43E,WAAW9D,WAAW5xD,GACtBA,IAELliB,KAAKmiF,MAAMxzE,SAAS3O,KAAKk4F,aACzBl4F,KAAKkiB,QAAQgkD,gBAAgBlmE,KAAKyqF,cAClCzqF,KAAKkqC,WAAW5B,WAAatoC,KAAKiqC,WAAW+yB,UAAY,KACzDh9D,KAAKs4F,oBAAsBt4F,KAAKs4F,oBAAoB7vE,KAAKzoB,MACzDA,KAAKs4F,sBACLt4F,KAAKkiB,QAAQhe,IAAImV,GAAG,oBAAqBrZ,KAAKs4F,qBAClD,EACArB,EAAgBp0F,UAAUy1E,YAAc,SAAU52D,EAAUC,EAASi/C,GAejE,QAdgBx6D,IAAZub,IACAA,EAAUujC,KACTllD,KAAKu4F,eAOFv4F,KAAKu4F,cAAc72E,SAAWA,IAC9B1hB,KAAKu4F,cAAc72E,SAAWA,GAC9B1hB,KAAKu4F,cAAc52E,QAAUA,IAC7B3hB,KAAKu4F,cAAc52E,QAAUA,IATjC3hB,KAAKu4F,cAAgB,CACjB72E,SAAUA,EACVC,QAASA,GASb3hB,KAAKu4F,cAAc52E,QAAU3hB,KAAK6iC,YAAYnhB,SAAU,CACxD,IAAIk/C,EAGA,OAFA5gE,KAAKu4F,cAAc52E,QAAU3hB,KAAK6iC,YAAYlhB,OAGtD,CACI3hB,KAAKu4F,cAAc72E,SAAW1hB,KAAK6iC,YAAYlhB,SAEnD3hB,KAAKmiF,MAAMxzE,SAAS3O,KAAKw4F,aAC7B,EACAvB,EAAgBp0F,UAAUy1F,oBAAsB,WAC5Ct4F,KAAKmiF,MAAMxzE,SAAS3O,KAAKy4F,aACzBz4F,KAAK43E,WAAWsS,iBAChBlqF,KAAKkiB,QAAQizB,aAAaP,WAAW50C,KAAK43E,WAAWwS,SACzD,EACA6M,EAAgBp0F,UAAUqzE,gBAAkB,WACxCl2E,KAAKmiF,MAAMxzE,SAAS3O,KAAKy4F,YAAcz4F,KAAK04F,eAC5C14F,KAAK43E,WAAW1B,iBACpB,EACA+gB,EAAgBp0F,UAAUy2E,WAAa,WACnCt5E,KAAKmiF,MAAMxzE,SAAS3O,KAAKy4F,YAC7B,EACAxB,EAAgBp0F,UAAU+sE,WAAa,SAAUhP,GACzCA,EACA5gE,KAAKg4F,eAAeh4F,KAAKk4F,aAAa,GAEtCl4F,KAAKmiF,MAAMxzE,SAAS3O,KAAKk4F,YACjC,EACAjB,EAAgBp0F,UAAU81F,eAAiB,WACvC34F,KAAK43E,WAAWgT,qBACpB,EACAqM,EAAgBp0F,UAAU+1F,iBAAmB,WACrC54F,KAAKmiF,MAAMwQ,QACX3yF,KAAK23F,MAAMG,QAAS,EAEpB93F,KAAKg3E,UACb,EACAigB,EAAgBp0F,UAAUm0E,SAAW,SAAUpW,EAAOqP,EAAah7D,EAAOE,GACtE,KAAInV,KAAK64F,SAAW,GAApB,CAES74F,KAAK64F,SAAW,EACrB74F,KAAK64F,WAEL74F,KAAK64F,SAAWj4B,EAAQ,EAAI,EAChC,IAAIzuD,EAAKnS,KAAKuU,UACTY,IACDA,EAAShD,EAAGyf,cAAgBzf,EAAGolB,cAC9BtiB,IACDA,EAAQ9C,EAAGyD,aAAezD,EAAG6/E,aACjC,IAAIY,EAAU5yF,KAAK84F,kBAAkBl4B,EAAOqP,EAAah7D,EAAOE,GAGhE,GAFInV,KAAK+4F,cACL/4F,KAAK+4F,aAAatqF,UACjBzO,KAAK23F,MAAMC,iBAAoB3iF,IAAUE,EAC1C,OAAOnV,KAAK64F,SAAW,EACvBj4B,IACA5gE,KAAKg+B,aAAa8oD,SAAW,MAC7BlmB,EACA5gE,KAAKg4F,eAAepF,EAAU5yF,KAAKg5F,UAAU,GAE7Ch5F,KAAKmiF,MAAMxzE,SAASikF,EAAU5yF,KAAKg5F,UACnCh5F,KAAK64F,WACL74F,KAAK64F,SAAW,GACpB74F,KAAKkqC,WAAW5B,WAAatoC,KAAKiqC,WAAW+yB,UAAY,KACrDh9D,KAAKi5F,kBACLj5F,KAAKk5F,wBAAuB,EArBC,CAuBrC,EACAjC,EAAgBp0F,UAAUi2F,kBAAoB,SAAUl4B,EAAOqP,EAAah7D,EAAOE,GAC/EA,GAAWnV,KAAKm5F,cAAgB,EAChC,IAAIvG,EAAU,EACV3+C,EAAOj0C,KAAK23F,MACZyB,EAAU,CACVnkF,MAAOg/B,EAAKh/B,MACZE,OAAQ8+B,EAAK9+B,OACbyiF,eAAgB3jD,EAAK2jD,eACrBC,cAAe5jD,EAAK4jD,eAYxB,GAVI1iF,IAAWyrD,GAAS3sB,EAAK9+B,QAAUA,KACnC8+B,EAAK9+B,OAASA,EACdy9E,GAAW5yF,KAAKq5F,YAChBplD,EAAK2jD,eAAiB3jD,EAAK9+B,OACvBnV,KAAKs3F,eACLrjD,EAAK2jD,gBAAkB53F,KAAKkqC,WAAWlR,aAC3Ch5B,KAAKiqC,WAAWymD,UAAUz8C,EAAK2jD,gBAC/B53F,KAAKiqC,WAAWh3B,QAAQT,MAAMmf,OAAS3xB,KAAKkqC,WAAWlR,YAAc,KACrE45D,GAAoB5yF,KAAKs5F,eAEzBrkF,IAAU2rD,GAAS3sB,EAAKh/B,OAASA,GAAQ,CACzC29E,GAAW5yF,KAAKq5F,YAChBplD,EAAKh/B,MAAQA,EACM,MAAfg7D,IACAA,EAAcjwE,KAAKu5F,YAAcv5F,KAAKs/B,QAAQ5pB,YAAc,GAChE1V,KAAKiwE,YAAcA,EACnBl5D,EAAIf,SAAShW,KAAKkqC,WAAWj3B,QAAQT,MAAO,OAAQy9D,EAAc,MAClEl5D,EAAIf,SAAShW,KAAK6yB,SAASrgB,MAAO,OAAQy9D,EAAcjwE,KAAKuqF,OAAOj1E,KAAO,MAC3E2+B,EAAK4jD,cAAgB1rF,KAAKC,IAAI,EAAG6I,EAAQg7D,EAAcjwE,KAAKiqC,WAAW/Q,WAAal5B,KAAKuqF,OAAO5qF,GAChGoX,EAAIf,SAAShW,KAAKs/B,QAAQ9sB,MAAO,OAAQxS,KAAKuqF,OAAOj1E,KAAO,MAC5D,IAAIod,EAAQ1yB,KAAKiqC,WAAW/Q,WAAa,KACzCniB,EAAIf,SAAShW,KAAKkqC,WAAWj3B,QAAQT,MAAO,QAASkgB,GACrD3b,EAAIf,SAAShW,KAAK6yB,SAASrgB,MAAO,QAASkgB,GAC3C3b,EAAIf,SAAShW,KAAK6yB,SAASrgB,MAAO,SAAUxS,KAAKkqC,WAAWlR,aAC5Dh5B,KAAKkqC,WAAW4mD,SAAS78C,EAAK4jD,gBAC1B73F,KAAKkiB,SAAWliB,KAAKkiB,QAAQypB,kBAAoB3rC,KAAK2iE,mBAAqB/B,KAC3EgyB,GAAW5yF,KAAKk4F,YAExB,CAIA,OAHAjkD,EAAK6jD,QAAU7iF,IAAUE,EACrBy9E,GACA5yF,KAAKmZ,QAAQ,SAAUigF,GACpBxG,CACX,EACAqE,EAAgBp0F,UAAUq0F,eAAiB,SAAUjiF,GACjD,IAAIg7D,EAAcjwE,KAAKu5F,YAActkF,EAAQ,EACzCg7D,GAAejwE,KAAKiwE,cACpBjwE,KAAKg5F,UAAYh5F,KAAK84F,mBAAkB,EAAM7oB,EAAajwE,KAAK23F,MAAM1iF,MAAOjV,KAAK23F,MAAMxiF,SACxFnV,KAAKkiB,QAAQypB,kBAAoB3rC,KAAK2iE,mBAGjC3iE,KAAK23F,MAAMG,OAFhB93F,KAAKmiF,MAAMxzE,SAAS3O,KAAKk4F,aAMzBl4F,KAAKw5F,qBAEb,EACAvC,EAAgBp0F,UAAU8/D,gBAAkB,WACxC,IAAI82B,EAAiBz5F,KAAK23F,MAAME,cAAgC,EAAhB73F,KAAK8mF,SACjD3jB,EAAQh3D,KAAKg6C,MAAMszC,EAAiBz5F,KAAKsxB,gBAC7C,OAAOtxB,KAAKkiB,QAAQygD,gBAAgBQ,EAAOnjE,KAAK05F,kBAAoB15F,KAAK25F,mBAC7E,EACA1C,EAAgBp0F,UAAUq4E,kBAAoB,SAAUC,GACpDn7E,KAAK+a,UAAU,iBAAkBogE,EACrC,EACA8b,EAAgBp0F,UAAUu4E,kBAAoB,WAC1C,OAAOp7E,KAAK45F,eAChB,EACA3C,EAAgBp0F,UAAU8xC,kBAAoB,SAAU5C,GACpD/xC,KAAK+a,UAAU,iBAAkBg3B,GACjC/xC,KAAKkiB,QAAQizB,aAAaR,kBAAkB5C,EAChD,EACAklD,EAAgBp0F,UAAUw4E,kBAAoB,WAC1C,OAAOr7E,KAAKqb,UAAU,iBAC1B,EACA47E,EAAgBp0F,UAAU04E,uBAAyB,WAC/C,OAAOv7E,KAAKqb,UAAU,sBAC1B,EACA47E,EAAgBp0F,UAAUy4E,uBAAyB,SAAUlmE,GACzDpV,KAAK+a,UAAU,sBAAuB3F,EAC1C,EACA6hF,EAAgBp0F,UAAU80E,yBAA2B,WACjD,OAAO33E,KAAKqb,UAAU,wBAC1B,EACA47E,EAAgBp0F,UAAU24E,yBAA2B,SAAU3c,GAC3D7+D,KAAK+a,UAAU,wBAAyB8jD,EAC5C,EACAo4B,EAAgBp0F,UAAU44E,mBAAqB,SAAUC,GACrD17E,KAAK+a,UAAU,kBAAmB2gE,EACtC,EACAub,EAAgBp0F,UAAU84E,mBAAqB,WAC3C,OAAO37E,KAAKqb,UAAU,kBAC1B,EACA47E,EAAgBp0F,UAAU+4E,qBAAuB,SAAU0H,GACvDtjF,KAAK+a,UAAU,oBAAqBuoE,EACxC,EACA2T,EAAgBp0F,UAAUg5E,qBAAuB,WAC7C,OAAO77E,KAAKqb,UAAU,oBAC1B,EACA47E,EAAgBp0F,UAAUg3F,cAAgB,WACtC,OAAO75F,KAAKqb,UAAU,aAC1B,EACA47E,EAAgBp0F,UAAUi3F,cAAgB,SAAUhhE,GAChD,OAAO94B,KAAK+a,UAAU,aAAc+d,EACxC,EACAm+D,EAAgBp0F,UAAUw5E,mBAAqB,WAC3C,OAAOr8E,KAAKqb,UAAU,kBAC1B,EACA47E,EAAgBp0F,UAAUs5E,mBAAqB,SAAUrjD,GACrD94B,KAAK+a,UAAU,kBAAmB+d,EACtC,EACAm+D,EAAgBp0F,UAAUi4E,uBAAyB,SAAUF,GACzD56E,KAAK+a,UAAU,sBAAuB6/D,EAC1C,EACAqc,EAAgBp0F,UAAUk4E,uBAAyB,WAC/C,OAAO/6E,KAAKqb,UAAU,sBAC1B,EACA47E,EAAgBp0F,UAAUw1F,mBAAqB,WAC3C,GAAKr4F,KAAK05F,kBAAqB15F,KAAK+5F,eAApC,CAEA,IAAK/5F,KAAK+5F,eAAgB,CACtB,IAAIC,EAAcjjF,EAAI3E,cAAc,OACpC4nF,EAAYznF,UAAY,mCACxBvS,KAAK+5F,eAAiBhjF,EAAI3E,cAAc,OACxCpS,KAAK+5F,eAAexnF,UAAY,mBAChCynF,EAAYhoF,YAAYhS,KAAK+5F,gBAC7B/5F,KAAK8iF,QAAQruE,aAAaulF,EAAah6F,KAAK8iF,QAAQpuE,WACxD,CACA,IAAIlC,EAAQxS,KAAK+5F,eAAevnF,MAChCA,EAAM8C,KAAOnJ,KAAK0K,MAAM7W,KAAKsxB,eAAiBtxB,KAAK25F,mBAAqB35F,KAAK8mF,UAAY,KACzFt0E,EAAMihF,WAAazzF,KAAK05F,iBAAmB,UAAY,SACnD15F,KAAKkiB,UAAkC,GAAvBliB,KAAKkiB,QAAQqkD,OAC7BvmE,KAAK2iE,iBAbC,CAcd,EACAs0B,EAAgBp0F,UAAU0wE,oBAAsB,WAC5C,OAAOvzE,KAAKuU,SAChB,EACA0iF,EAAgBp0F,UAAU+4B,oBAAsB,WAC5C,OAAO57B,KAAK6yB,QAChB,EACAokE,EAAgBp0F,UAAU2wE,qBAAuB,WAC7C,OAAOxzE,KAAKuU,SAChB,EACA0iF,EAAgBp0F,UAAU+tB,sBAAwB,WAC9C,IAAI5wB,KAAK0wB,gBAAT,CAEA,IAAIle,EAAQxS,KAAK+oC,SAASv2B,MACtB4nE,EAAcp6E,KAAK2iF,aACvB,GAAK3iF,KAAK2wB,uBAA0BypD,EAApC,CAIA,IAAIuV,EAAW3vF,KAAK0jC,aAAa09C,UACjC,GAAKuO,EAAL,CAEIvV,GAAeA,EAAYnqD,cAC3B0/D,EAAW3vF,KAAK0jC,aAAayF,iBAAiBixC,EAAYnqD,YAAY3vB,OAAO,IACjF,IAAI2e,EAASjf,KAAK6iC,YACdo3D,EAAStK,EAAS74E,IAClBojF,EAAUvK,EAASr6E,KACvB2kF,GAAUh7E,EAAO9Q,OACjB,IAAIxO,EAAIy6E,GAAeA,EAAYtqD,mBAAqBte,EAAUF,SAAWtR,KAAKm9B,WAAa,EAC/F,GAAI88D,EAAS,GAAKA,EAASh7E,EAAO9J,OAASxV,EACvCoX,EAAIL,UAAU1W,KAAK+oC,SAAU,EAAG,OADpC,CAIA,IAAI3jC,EAAI,EACJssB,EAAS1xB,KAAK23F,MAAMxiF,OAASxV,EACjC,GAAKy6E,EAID,GAAIA,EAAYtqD,kBAAmB,CAC/B,IAAIpmB,EAAM1J,KAAK+oC,SAAS9nC,MACxBmE,EAAIpF,KAAKsxB,eAAkBtxB,KAAKkiB,QAAQ++C,sBAAsBv3D,GAAK,EACvE,MAEIuwF,GAAUj6F,KAAKm9B,WAAa,OARhC88D,GAAUj6F,KAAKm9B,WAWnB+8D,GAAWl6F,KAAKsoC,WACZ4xD,EAAUl6F,KAAK23F,MAAME,cAAgBzyF,IACrC80F,EAAUl6F,KAAK23F,MAAME,cAAgBzyF,GACzC80F,GAAWl6F,KAAKiwE,YAAcjwE,KAAKuqF,OAAOj1E,KAC1CyB,EAAIf,SAASxD,EAAO,SAAU7S,EAAI,MAClCoX,EAAIf,SAASxD,EAAO,QAASpN,EAAI,MACjC2R,EAAIL,UAAU1W,KAAK+oC,SAAU58B,KAAKE,IAAI6tF,EAASl6F,KAAK23F,MAAME,cAAgBzyF,GAAI+G,KAAKE,IAAI4tF,EAAQvoE,GArB/F,CAXU,CAHV,MAFI3a,EAAIL,UAAU1W,KAAK+oC,UAAW,IAAK,EAJ7B,CA0Cd,EACAkuD,EAAgBp0F,UAAUq8E,mBAAqB,WAC3C,OAAOl/E,KAAK6iC,YAAYnhB,QAC5B,EACAu1E,EAAgBp0F,UAAUu8E,wBAA0B,WAChD,OAAOp/E,KAAK6iC,YAAYnhB,UAAwC,IAA5B1hB,KAAK6iC,YAAY10B,OAAe,EAAI,EAC5E,EACA8oF,EAAgBp0F,UAAUw8E,uBAAyB,WAC/C,IAAIpgE,EAASjf,KAAK6iC,YACdlhB,EAAU1C,EAAO0C,QACjB7K,EAAM9W,KAAKkiB,QAAQsc,oBAAoB7c,EAAS,GAAK1C,EAAOke,WAChE,OAAIrmB,EAAM9W,KAAKkiB,QAAQ4mB,eAAiB7pB,EAAO9J,OAAS8J,EAAOke,WACpDxb,EAAU,EACdA,CACX,EACAs1E,EAAgBp0F,UAAUs8E,kBAAoB,WAC1C,OAAOn/E,KAAK6iC,YAAYlhB,OAC5B,EACAs1E,EAAgBp0F,UAAUulF,WAAa,SAAUjY,GAC7CnwE,KAAK8mF,SAAW3W,EAChBnwE,KAAK43E,WAAWwQ,WAAWjY,GAC3BnwE,KAAK0jC,aAAa0kD,WAAWjY,GAC7BnwE,KAAKq3F,aAAajP,WAAWjY,GAC7BnwE,KAAKm3F,YAAY/O,WAAWjY,GAC5BnwE,KAAKmiF,MAAMxzE,SAAS3O,KAAKk4F,aACzBl4F,KAAKq4F,oBACT,EACApB,EAAgBp0F,UAAUs3F,gBAAkB,SAAUrjF,EAAK6a,EAAQrc,EAAMod,GACrE,IAAI0nE,EAAKp6F,KAAKy3F,aACd2C,EAAGtjF,IAAY,EAANA,EACTsjF,EAAGzoE,OAAkB,EAATA,EACZyoE,EAAG1nE,MAAgB,EAARA,EACX0nE,EAAG9kF,KAAc,EAAPA,EACV8kF,EAAGh6F,EAAIg6F,EAAGtjF,IAAMsjF,EAAGzoE,OACnByoE,EAAGz6F,EAAIy6F,EAAG9kF,KAAO8kF,EAAG1nE,MAChB0nE,EAAGtjF,KAAO9W,KAAKg9D,WAAa,GAAKh9D,KAAKkiB,SACtCliB,KAAKkiB,QAAQ66C,cAAcq9B,EAAGtjF,KAClC9W,KAAK4vE,YACT,EACAqnB,EAAgBp0F,UAAUw3F,UAAY,SAAUvjF,EAAK6a,EAAQrc,EAAMod,GAC/D,IAAI0nE,EAAKp6F,KAAKuqF,OACd6P,EAAGtjF,IAAY,EAANA,EACTsjF,EAAGzoE,OAAkB,EAATA,EACZyoE,EAAG1nE,MAAgB,EAARA,EACX0nE,EAAG9kF,KAAc,EAAPA,EACV8kF,EAAGh6F,EAAIg6F,EAAGtjF,IAAMsjF,EAAGzoE,OACnByoE,EAAGz6F,EAAIy6F,EAAG9kF,KAAO8kF,EAAG1nE,MACpB1yB,KAAK84F,mBAAkB,EAAM94F,KAAKiwE,YAAajwE,KAAK23F,MAAM1iF,MAAOjV,KAAK23F,MAAMxiF,QAC5EnV,KAAK4vE,YACT,EACAqnB,EAAgBp0F,UAAUy3F,2BAA6B,WACnD,OAAOt6F,KAAKu6F,wBAChB,EACAtD,EAAgBp0F,UAAU23F,2BAA6B,SAAUC,GAC7Dz6F,KAAK+a,UAAU,0BAA2B0/E,EAC9C,EACAxD,EAAgBp0F,UAAU63F,2BAA6B,WACnD,OAAO16F,KAAK26F,wBAChB,EACA1D,EAAgBp0F,UAAU+3F,2BAA6B,SAAUH,GAC7Dz6F,KAAK+a,UAAU,0BAA2B0/E,EAC9C,EACAxD,EAAgBp0F,UAAUg4F,kBAAoB,WAC1C,IAAItjE,EAAev3B,KAAK6iC,YAAYhG,UAChC+6D,EAAiB53F,KAAK23F,MAAMC,gBAC3B53F,KAAK44E,WAAa54E,KAAK86F,iBACxBvjE,IAAiBqgE,EAAiB53F,KAAKm9B,YAAcn9B,KAAK86F,eACtD96F,KAAKg9D,UAAYzlC,EAAeqgE,IAChCrgE,EAAev3B,KAAKg9D,UAAY46B,EAChC53F,KAAKiqC,WAAW+yB,UAAY,OAGpCh9D,KAAKiqC,WAAW0mD,gBAAgBp5D,EAAev3B,KAAKy3F,aAAar3F,GACjEJ,KAAKiqC,WAAW8yB,aAAa/8D,KAAKg9D,UAAYh9D,KAAKy3F,aAAa3gF,IACpE,EACAmgF,EAAgBp0F,UAAUk4F,kBAAoB,WAC1C/6F,KAAKkqC,WAAW8mD,eAAehxF,KAAK6iC,YAAY5tB,MAAQ,EAAIjV,KAAK8mF,SAAW9mF,KAAKy3F,aAAa93F,GAC9FK,KAAKkqC,WAAW4yB,cAAc98D,KAAKsoC,WAAatoC,KAAKy3F,aAAaniF,KACtE,EACA2hF,EAAgBp0F,UAAUm4F,OAAS,WAC/Bh7F,KAAKi7F,SAAU,CACnB,EACAhE,EAAgBp0F,UAAUq4F,SAAW,WACjCl7F,KAAKi7F,SAAU,CACnB,EACAhE,EAAgBp0F,UAAUm1F,eAAiB,SAAUpF,EAAShyB,GAK1D,GAJI5gE,KAAKg5F,WACLpG,GAAW5yF,KAAKg5F,SAChBh5F,KAAKg5F,SAAW,GAEdh5F,KAAKkiB,SAAYliB,KAAKuU,UAAUmB,cAAe1V,KAAKi7F,UAAcrI,GAAYhyB,GAApF,CAIA,GAAI5gE,KAAK23F,MAAMG,OAEX,OADA93F,KAAKg5F,UAAYpG,EACV5yF,KAAKg3E,UAAS,GAEpBh3E,KAAKm9B,YACNn9B,KAAK43E,WAAWgT,sBAEpB5qF,KAAKmZ,QAAQ,eAAgBy5E,GACzB5yF,KAAKkiB,SAAWliB,KAAKkiB,QAAQizB,cAC7Bn1C,KAAKkiB,QAAQizB,aAAaZ,sBAAsBv0C,KAAKyqF,cACzD,IAAIxrE,EAASjf,KAAK6iC,YAClB,GAAI+vD,EAAU5yF,KAAKk4F,aACftF,EAAU5yF,KAAKq5F,aACfzG,EAAU5yF,KAAKy4F,aACf7F,EAAU5yF,KAAKw4F,cACf5F,EAAU5yF,KAAKs5F,eACf1G,EAAU5yF,KAAKm7F,gBAAiB,CAEhC,GADAvI,GAAW5yF,KAAKw5F,sBAAwBx5F,KAAKmiF,MAAM6Q,QAC/C/zE,EAAOyC,UAAY1hB,KAAK6iC,YAAYnhB,UAAYzC,EAAO8lE,gBAAkB/kF,KAAK6iC,YAAYkiD,eAAgB,CAC1G,IAAIqW,EAAKp7F,KAAKg9D,WAAa/9C,EAAOyC,SAAWvV,KAAKC,IAAIpM,KAAK6iC,YAAYnhB,SAAU,IAAM1hB,KAAKm9B,WACxFi+D,EAAK,IACLp7F,KAAKg9D,UAAYo+B,EACjBxI,GAAoB5yF,KAAKs5F,cACzB1G,GAAW5yF,KAAKw5F,sBAAwBx5F,KAAKmiF,MAAM6Q,QAE3D,CACA/zE,EAASjf,KAAK6iC,YACd7iC,KAAK66F,oBACDjI,EAAU5yF,KAAKm7F,iBACfn7F,KAAK+6F,oBACThkF,EAAIL,UAAU1W,KAAK8iF,SAAU9iF,KAAKsoC,YAAarpB,EAAO9Q,QACtD,IAAI8G,EAAQgK,EAAOhK,MAAQ,EAAIjV,KAAK8mF,SAAW,KAC3C3xE,EAAS8J,EAAO84E,UAAY,KAChChhF,EAAIf,SAAShW,KAAK8iF,QAAQtwE,MAAO,QAASyC,GAC1C8B,EAAIf,SAAShW,KAAK8iF,QAAQtwE,MAAO,SAAU2C,EAC/C,CAOA,GANIy9E,EAAU5yF,KAAKm7F,kBACfpkF,EAAIL,UAAU1W,KAAK8iF,SAAU9iF,KAAKsoC,YAAarpB,EAAO9Q,QACtDnO,KAAK6yB,SAAStgB,UAAYvS,KAAKsoC,YAAc,EAAI,gBAAkB,gCAC/DtoC,KAAKisB,8BACLjsB,KAAK6yB,SAAStgB,WAAavS,KAAK4yE,yBAEpCggB,EAAU5yF,KAAKk4F,YAaf,OAZAl4F,KAAKu4F,cAAgB,KACrBv4F,KAAK43E,WAAW3qB,OAAOhuC,GACnBjf,KAAKu5F,aACLv5F,KAAKg+B,aAAaivB,OAAOhuC,GACzBjf,KAAKi5F,kBACLj5F,KAAKq7F,iBAAiBzF,kBAAkB32E,GAE5Cjf,KAAKm3F,YAAYlqC,OAAOhuC,GACxBjf,KAAKq3F,aAAapqC,OAAOhuC,GACzBjf,KAAK0jC,aAAaupB,OAAOhuC,GACzBjf,KAAK4wB,6BACL5wB,KAAKmZ,QAAQ,cAAey5E,GAGhC,GAAIA,EAAU5yF,KAAKs5F,cAoBf,OAnBAt5F,KAAKu4F,cAAgB,KACjB3F,EAAU5yF,KAAKy4F,aAAe7F,EAAU5yF,KAAKw4F,aAC7Cx4F,KAAK43E,WAAW3qB,OAAOhuC,GAEvBjf,KAAK43E,WAAWuP,YAAYloE,GAC5Bjf,KAAKu5F,cACD3G,EAAU5yF,KAAKoiF,eAAiBwQ,EAAU5yF,KAAKw4F,aAC/Cx4F,KAAKg+B,aAAaivB,OAAOhuC,GAEzBjf,KAAKg+B,aAAampD,YAAYloE,IAElCjf,KAAKi5F,kBACLj5F,KAAKq7F,iBAAiBzF,kBAAkB32E,GAE5Cjf,KAAKm3F,YAAYlqC,OAAOhuC,GACxBjf,KAAKq3F,aAAapqC,OAAOhuC,GACzBjf,KAAK0jC,aAAaupB,OAAOhuC,GACzBjf,KAAK4wB,6BACL5wB,KAAKmZ,QAAQ,cAAey5E,GAG5BA,EAAU5yF,KAAKy4F,aACfz4F,KAAKu4F,cAAgB,KACrBv4F,KAAK43E,WAAW3qB,OAAOhuC,GACnBjf,KAAKu5F,aACLv5F,KAAKg+B,aAAaivB,OAAOhuC,GACzBjf,KAAKi5F,kBACLj5F,KAAKq7F,iBAAiBzF,kBAAkB32E,IAGvC2zE,EAAU5yF,KAAKw4F,eAChBx4F,KAAKs7F,gBAAmB1I,EAAU5yF,KAAKoiF,eAAkBpiF,KAAKu5F,cAC9Dv5F,KAAKg+B,aAAaivB,OAAOhuC,GACzBjf,KAAKi5F,kBACLj5F,KAAKq7F,iBAAiBzF,kBAAkB32E,IAGvC2zE,EAAU5yF,KAAKy4F,aAAe7F,EAAU5yF,KAAKoiF,eAC9CpiF,KAAKu5F,aACLv5F,KAAKg+B,aAAaivB,OAAOhuC,GACzBjf,KAAKi5F,kBACLj5F,KAAKq7F,iBAAiBzF,kBAAkB32E,IAGvC2zE,EAAU5yF,KAAKu7F,gBAChBv7F,KAAKgnF,sBACLhnF,KAAKg+B,aAAakpD,oBAAoBjoE,GACtCjf,KAAKi5F,kBACLj5F,KAAKq7F,iBAAiBzF,kBAAkB32E,IAG5C2zE,EAAU5yF,KAAKu7F,gBACfv7F,KAAK0jC,aAAaupB,OAAOhuC,GACzBjf,KAAK4wB,yBAELgiE,GAAW5yF,KAAK04F,cAAgB14F,KAAKw7F,sBACrCx7F,KAAKq3F,aAAapqC,OAAOhuC,GAEzB2zE,GAAW5yF,KAAK04F,cAAgB14F,KAAKy7F,qBACrCz7F,KAAKm3F,YAAYlqC,OAAOhuC,GAE5Bjf,KAAKmZ,QAAQ,cAAey5E,EAxH5B,MAFI5yF,KAAKg5F,UAAYpG,CA2HzB,EACAqE,EAAgBp0F,UAAU64F,UAAY,WAClC,IAAIvmF,EAASnV,KAAKkiB,QAAQ6jD,kBAAoB/lE,KAAKm9B,WAC/CN,EAAY78B,KAAK44E,UAAY54E,KAAKm9B,WAClCw+D,EAAgBxvF,KAAKE,IAAIwwB,EAAW1wB,KAAKC,KAAKpM,KAAK64E,WAAa,GAAK74E,KAAKm9B,WAAYhoB,IAAWnV,KAAKy3F,aAAar3F,GAAKJ,KAAKm5F,cAAgB,GAC7In5F,KAAKs3F,eACLqE,GAAiB37F,KAAKkqC,WAAWlR,aACjCh5B,KAAK47F,iBAAmBD,EAAgB37F,KAAK47F,kBAC7CD,EAAgB37F,KAAK47F,iBACzB,IAAIC,EAAiBF,GAAiB,EAAI37F,KAAKm9B,WAC3CgG,GAAW04D,GAAkB1mF,EAAS0nB,EAC1C,GAAI8+D,GAAiB37F,KAAK27F,eACtB37F,KAAK23F,MAAMxiF,QAAUnV,KAAK27F,eAAiBx4D,GAAWnjC,KAAKu3F,SAAU,CACjEp0D,GAAWnjC,KAAKu3F,WAChBv3F,KAAKu3F,SAAWp0D,EAChBnjC,KAAKiqC,WAAWkmD,WAAWhtD,IAE/B,IAAI/9B,EAAIpF,KAAKuU,UAAUqB,YACvB5V,KAAKuU,UAAU/B,MAAM2C,OAASwmF,EAAgB,KAC9C37F,KAAK84F,mBAAkB,EAAM94F,KAAK87F,aAAc12F,EAAGu2F,GACnD37F,KAAK27F,cAAgBA,EACrB37F,KAAKmZ,QAAQ,WACjB,CACJ,EACA89E,EAAgBp0F,UAAU22F,oBAAsB,WAC5C,IAAIt3E,EAAUliB,KAAKkiB,QACf+xB,EAAOj0C,KAAK23F,MACZkE,EAAiB5nD,EAAK9+B,QAAU,EAAInV,KAAKm9B,WACzC4+D,EAAc/7F,KAAKkiB,QAAQ6jD,kBAC3BlpC,EAAYk/D,EAAc/7F,KAAKm9B,WAC/B6+D,EAAch8F,KAAKi8F,kBACnBC,GAAeL,IAAmB77F,KAAKu6F,0BACvCtmD,EAAK4jD,cAAgBmE,EAAc,EAAIh8F,KAAK8mF,SAAW,GACvDqV,EAAiBn8F,KAAKs3F,eAAiB4E,EACvCC,IACAn8F,KAAKs3F,aAAe4E,EACpBl8F,KAAKkqC,WAAWimD,WAAW+L,IAE/B,IAAIE,EAAgBp8F,KAAKu3F,SACrBv3F,KAAK44E,WAAa54E,KAAKm9B,WAAa,GACpCn9B,KAAK07F,YACT,IAAI3D,EAAY9jD,EAAK2jD,eAAiB53F,KAAKm9B,WACvC6mD,GAAiBhkF,KAAK44E,WAAa54E,KAAK86F,gBACrC7mD,EAAK2jD,eAAiB53F,KAAKm9B,YAAcn9B,KAAK86F,eAC/C,EACNj+D,GAAamnD,EACb,IAAIoW,EAAKp6F,KAAKy3F,aACdz3F,KAAKkiB,QAAQ66C,aAAa5wD,KAAKC,KAAKguF,EAAGtjF,IAAK3K,KAAKE,IAAIrM,KAAKg9D,UAAWngC,EAAYoX,EAAK2jD,eAAiBwC,EAAGzoE,UAC1G3xB,KAAKkiB,QAAQ46C,cAAc3wD,KAAKC,KAAKguF,EAAG9kF,KAAMnJ,KAAKE,IAAIrM,KAAKsoC,WAAY0zD,EAAc,EAAIh8F,KAAK8mF,SAAW7yC,EAAK4jD,cAAgBuC,EAAG1nE,SAClI,IAAIyQ,GAAW04D,IAAmB77F,KAAK26F,0BACnC1mD,EAAK2jD,eAAiB/6D,EAAYmnD,EAAgB,GAAKhkF,KAAKg9D,UAAYo9B,EAAGtjF,KAC3EulF,EAAiBD,IAAkBj5D,EACnCk5D,IACAr8F,KAAKu3F,SAAWp0D,EAChBnjC,KAAKiqC,WAAWkmD,WAAWhtD,IAE/B,IAII4hD,EAAgBuX,EAJhBnuF,EAASnO,KAAKg9D,UAAYh9D,KAAKm9B,WAC/Bo/D,EAAYpwF,KAAK4jE,KAAKgoB,EAAY/3F,KAAKm9B,YAAc,EACrDzb,EAAWvV,KAAKC,IAAI,EAAGD,KAAK0K,OAAO7W,KAAKg9D,UAAY7uD,GAAUnO,KAAKm9B,aACnExb,EAAUD,EAAW66E,EAErBp/D,EAAan9B,KAAKm9B,WACtBzb,EAAWQ,EAAQsjD,oBAAoB9jD,EAAU,GACjD,IAAIg4B,EAAWx3B,EAAQge,YAAYxe,GAC/Bg4B,IACAh4B,EAAWg4B,EAASp5C,MAAMkC,KAE9BuiF,EAAiB7iE,EAAQsc,oBAAoB9c,EAAU,GACvD46E,EAAiBp6E,EAAQ8iD,aAAatjD,GAAYyb,EAClDxb,EAAUxV,KAAKE,IAAI6V,EAAQsjD,oBAAoB7jD,EAAS,GAAIO,EAAQmc,YAAc,GAClF05D,EAAY9jD,EAAK2jD,eAAiB11E,EAAQ8iD,aAAarjD,GAAWwb,EAC9Dm/D,EACJnuF,EAASnO,KAAKg9D,UAAY+nB,EAAiB5nD,EAC3C,IAAIy1D,EAAU,EAyBd,OAxBI5yF,KAAK6iC,YAAY5tB,OAAS+mF,GAAeG,KACzCvJ,EAAU5yF,KAAKm7F,kBACfgB,GAAkBE,KAClBzJ,GAAW5yF,KAAK84F,mBAAkB,EAAM94F,KAAKiwE,YAAah8B,EAAKh/B,MAAOg/B,EAAK9+B,QAC3EnV,KAAKmZ,QAAQ,8BACTkjF,IACAL,EAAch8F,KAAKi8F,oBAE3Bj8F,KAAK6iC,YAAc,CACf5tB,MAAO+mF,EACP7rB,QAASnwE,KAAK8mF,SACdplE,SAAUA,EACVqjE,eAAgBA,EAChBpjE,QAASA,EACTwb,WAAYA,EACZ7L,eAAgBtxB,KAAKsxB,eACrBymE,UAAWA,EACXl7D,UAAWA,EACX1uB,OAAQA,EACRi4E,aAAcjpD,EAAahxB,KAAKC,IAAI,EAAGD,KAAK4jE,MAAM5hE,EAAS8lC,EAAK9+B,OAAS8+B,EAAK2jD,gBAAkBz6D,IAAe,EAC/GhoB,OAAQnV,KAAK23F,MAAMC,gBAEnB53F,KAAKkiB,QAAQizB,cACbn1C,KAAKkiB,QAAQizB,aAAaL,gBAAgBknD,EAAch8F,KAAK8mF,UAC1D8L,CACX,EACAqE,EAAgBp0F,UAAUy4F,aAAe,WACrC,GAAKt7F,KAAKu4F,cAAV,CAEA,IAAI72E,EAAW1hB,KAAKu4F,cAAc72E,SAC9BC,EAAU3hB,KAAKu4F,cAAc52E,QACjC3hB,KAAKu4F,cAAgB,KACrB,IAAI11D,EAAc7iC,KAAK6iC,YACvB,KAAInhB,EAAWmhB,EAAYlhB,QAAU,MAGjCA,EAAUkhB,EAAYnhB,UAG1B,OAAIC,IAAYujC,KACRllD,KAAKu5F,aACLv5F,KAAKg+B,aAAaivB,OAAOpqB,QAC7B7iC,KAAK43E,WAAW3qB,OAAOpqB,KAG3B7iC,KAAK43E,WAAWU,YAAYz1C,EAAanhB,EAAUC,IAC5C,EAlBG,CAmBd,EACAs1E,EAAgBp0F,UAAUo5F,gBAAkB,WACxC,IAAIO,EAAYx8F,KAAKkiB,QAAQo+C,iBAK7B,OAJItgE,KAAK+xC,iBAAmB/xC,KAAKkiB,QAAQ0xB,eACrC4oD,GAAa,GACbx8F,KAAK43E,YAAc4kB,EAAYx8F,KAAK43E,WAAWvuD,kBAC/CmzE,EAAYx8F,KAAK43E,WAAWvuD,gBAAkB,IAC3Cld,KAAKC,IAAIpM,KAAK23F,MAAME,cAAgB,EAAI73F,KAAK8mF,SAAU36E,KAAK0K,MAAM2lF,EAAYx8F,KAAKsxB,gBAC9F,EACA2lE,EAAgBp0F,UAAUs2E,mBAAqB,WAC3Cn5E,KAAKq3F,aAAahP,WAAWroF,KAAKkiB,QAAQ08C,YAAW,IACrD5+D,KAAKmiF,MAAMxzE,SAAS3O,KAAKw7F,oBAC7B,EACAvE,EAAgBp0F,UAAUu2E,kBAAoB,WAC1Cp5E,KAAKm3F,YAAY9O,WAAWroF,KAAKkiB,QAAQ08C,cACzC5+D,KAAKmiF,MAAMxzE,SAAS3O,KAAKy7F,mBAC7B,EACAxE,EAAgBp0F,UAAUq7D,oBAAsB,SAAU17D,EAAK+P,GAC3DvS,KAAKg+B,aAAakgC,oBAAoB17D,EAAK+P,EAC/C,EACA0kF,EAAgBp0F,UAAUs7D,uBAAyB,SAAU37D,EAAK+P,GAC9DvS,KAAKg+B,aAAamgC,uBAAuB37D,EAAK+P,EAClD,EACA0kF,EAAgBp0F,UAAUw2E,kBAAoB,SAAU79B,GACpDx7C,KAAKy8F,MAAQjhD,EACbx7C,KAAKmiF,MAAMxzE,SAAS3O,KAAKoiF,cAC7B,EACA6U,EAAgBp0F,UAAU85D,eAAiB,SAAU57B,GACjD/gC,KAAKg+B,aAAa2+B,eAAe57B,GACjC/gC,KAAKmiF,MAAMxzE,SAAS3O,KAAKoiF,cAC7B,EACA6U,EAAgBp0F,UAAUu1E,aAAe,WACrCp4E,KAAKmiF,MAAMxzE,SAAS3O,KAAKu7F,cAC7B,EACAtE,EAAgBp0F,UAAUo1E,WAAa,WACnCj4E,KAAK0jC,aAAau0C,YACtB,EACAgf,EAAgBp0F,UAAUk1E,WAAa,WACnC/3E,KAAK0jC,aAAaq0C,YACtB,EACAkf,EAAgBp0F,UAAUuxE,wBAA0B,SAAUr/C,EAAQzuB,EAAM6H,GACxEnO,KAAKm1B,qBAAqBJ,EAAQ5mB,GAClCnO,KAAKm1B,qBAAqB7uB,EAAM6H,EACpC,EACA8oF,EAAgBp0F,UAAUsyB,qBAAuB,SAAU1J,EAAQtd,EAAQuuF,GACvE,GAAkC,IAA9B18F,KAAK23F,MAAMC,eAAf,CAEA,IAAI7jE,EAAM/zB,KAAK0jC,aAAayF,iBAAiB1d,GACzCkxE,EAAU5oE,EAAIze,KACdsnF,EAAS7oE,EAAIjd,IACb+lF,EAAYH,GAAeA,EAAY5lF,KAAO,EAC9CgmF,EAAeJ,GAAeA,EAAY/qE,QAAU,EACpD3xB,KAAKw3F,mBACLx3F,KAAK+8F,gBAAiB,GAE1B,IAAIC,EAAah9F,KAAKw3F,iBAAmBx3F,KAAKkiB,QAAQ4mB,eAAiB9oC,KAAKg9D,UACxEggC,EAAaH,EAAYD,GACrBzuF,GAAU6uF,EAAaH,EAAYD,EAAS58F,KAAKm9B,aACjDy/D,GAAUzuF,EAASnO,KAAK23F,MAAMC,gBACnB,IAAXgF,IACAA,GAAU58F,KAAKy3F,aAAa3gF,KAChC9W,KAAKkiB,QAAQ66C,aAAa6/B,IAErBI,EAAah9F,KAAK23F,MAAMC,eAAiBkF,EAAeF,EAAS58F,KAAKm9B,aACvEhvB,GAAU6uF,EAAah9F,KAAK23F,MAAMC,eAAiBkF,EAAeF,EAAS58F,KAAKm9B,aAChFy/D,GAAUzuF,EAASnO,KAAK23F,MAAMC,gBAClC53F,KAAKkiB,QAAQ66C,aAAa6/B,EAAS58F,KAAKm9B,WAAa2/D,EAAe98F,KAAK23F,MAAMC,iBAEnF,IAAIqF,EAAcj9F,KAAKsoC,WACnB40D,EAAgB,EAAIl9F,KAAK6iC,YAAYvR,eACrCqrE,EAAUO,EAAgBD,GAC1BN,GAAWO,EACPP,EAAU38F,KAAK8mF,SAAWoW,IAC1BP,GAAW38F,KAAKy3F,aAAaniF,MAEjCtV,KAAKkiB,QAAQ46C,cAAc6/B,KAG3BA,GAAWO,EACPD,EAAcj9F,KAAK23F,MAAME,cAAgB8E,EAAU38F,KAAKsxB,eACxDtxB,KAAKkiB,QAAQ46C,cAAc3wD,KAAK0K,MAAM8lF,EAAU38F,KAAKsxB,eAAiBtxB,KAAK23F,MAAME,gBAE5EoF,GAAej9F,KAAK8mF,UAAY6V,EAAUM,EAAcj9F,KAAKsxB,gBAClEtxB,KAAKkiB,QAAQ46C,cAAc,GArCzB,CAwCd,EACAm6B,EAAgBp0F,UAAUimC,aAAe,WACrC,OAAO9oC,KAAKkiB,QAAQ4mB,cACxB,EACAmuD,EAAgBp0F,UAAUw9D,cAAgB,WACtC,OAAOrgE,KAAKkiB,QAAQm+C,eACxB,EACA42B,EAAgBp0F,UAAU28E,gBAAkB,WACxC,OAAOx/E,KAAKg9D,UAAYh9D,KAAKm9B,UACjC,EACA85D,EAAgBp0F,UAAU08E,mBAAqB,WAC3C,OAAOpzE,KAAKC,IAAI,EAAGD,KAAKg6C,OAAOnmD,KAAKg9D,UAAYh9D,KAAK23F,MAAMC,gBAAkB53F,KAAKm9B,YAAc,EACpG,EACA85D,EAAgBp0F,UAAU68E,YAAc,SAAUl9E,GAC9CxC,KAAKkiB,QAAQ66C,aAAav6D,EAAMxC,KAAKm9B,WACzC,EACA85D,EAAgBp0F,UAAU+8E,YAAc,SAAUn0D,EAAQ0xE,GACjC,iBAAV1xE,IACPA,EAAS,CAAEjpB,IAAKipB,EAAQhpB,OAAQ,IACpC,IAAIsxB,EAAM/zB,KAAK0jC,aAAayF,iBAAiB1d,GACzC9rB,EAAIK,KAAK23F,MAAMC,eAAiB53F,KAAKm9B,WACrChvB,EAAS4lB,EAAIjd,IAAMnX,GAAKw9F,GAAa,GAEzC,OADAn9F,KAAKkiB,QAAQ66C,aAAa5uD,GACnBA,CACX,EACA8oF,EAAgBp0F,UAAUu6F,WAAa,SAAUC,EAAWC,GACxD,IAAI/+F,EAAI,EACJgB,EAAIS,KAAKu9F,MACTC,EAAQ,GACRthD,EAAO,SAAU99C,EAAGq/F,EAAOC,GAC3B,OAAOA,GAAMvxF,KAAKmX,IAAIllB,EAAI,EAAG,GAAK,GAAKq/F,CAC3C,EACA,IAAKl/F,EAAI,EAAGA,EAAIgB,IAAKhB,EACjBi/F,EAAMh9F,KAAK07C,EAAK39C,EAAIyB,KAAKu9F,MAAOF,EAAWC,EAAUD,IACzD,OAAOG,CACX,EACAvG,EAAgBp0F,UAAUguE,aAAe,SAAUzhE,EAAMuwE,EAAQ/2C,EAAS7gC,GACtE,IAAIgsB,EAAM/zB,KAAK0jC,aAAayF,iBAAiB,CAAE3mC,IAAK4M,EAAM3M,OAAQ,IAC9D0L,EAAS4lB,EAAIjd,IACb6oE,IACAxxE,GAAUnO,KAAK23F,MAAMC,eAAiB,GAC1C,IAAI+F,EAAgB39F,KAAKg9D,UACzBh9D,KAAKkiB,QAAQ66C,aAAa5uD,IACV,IAAZy6B,GACA5oC,KAAKq0E,iBAAiBspB,EAAe51F,EAC7C,EACAkvF,EAAgBp0F,UAAUwxE,iBAAmB,SAAUgpB,EAAWt1F,GAC9D,IAAIu1F,EAAUt9F,KAAKg9D,UACnB,GAAKh9D,KAAK45F,gBAAV,CAEA,IAAI5qF,EAAQhP,KACZ,GAAIq9F,GAAaC,EAAjB,CAEA,GAAIt9F,KAAKw3F,iBAAkB,CACvB,IAAIoG,EAAW59F,KAAKw3F,iBAAiBgG,MACrC,GAAII,EAASj9F,SACT08F,EAAYO,EAAS,GACjBP,GAAaC,GACb,MAEZ,CACA,IAAIE,EAAQxuF,EAAMouF,WAAWC,EAAWC,GACxCt9F,KAAKw3F,iBAAmB,CAAEx3D,KAAMq9D,EAAW9xC,GAAI+xC,EAASE,MAAOA,GAC/D55D,cAAc5jC,KAAK69F,QACnB7uF,EAAMkT,QAAQ66C,aAAaygC,EAAMp8F,SACjC4N,EAAMkT,QAAQg7C,WAAaogC,EAO3Bt9F,KAAK69F,OAASh6D,aAAY,WACtB,IAAI70B,EAAM+tF,eAIV,OAAK/tF,EAAMkT,aAEPs7E,EAAM78F,QACNqO,EAAMkT,QAAQ66C,aAAaygC,EAAMp8F,SACjC4N,EAAMkT,QAAQg7C,WAAaogC,GAEX,MAAXA,GACLtuF,EAAMkT,QAAQg7C,YAAc,EAC5BluD,EAAMkT,QAAQ66C,aAAaugC,GAC3BA,EAAU,MAGVQ,KAXOl6D,cAAc50B,EAAM6uF,QAJ3BC,GAiBR,GAAG,GAvCO,CAHA,CAiBV,SAASA,IACL9uF,EAAM6uF,OAASj6D,cAAc50B,EAAM6uF,QACnC7uF,EAAMwoF,iBAAmB,KACzBxoF,EAAM+tF,gBAAiB,EACvBh1F,GAAYA,GAChB,CAqBJ,EACAkvF,EAAgBp0F,UAAU01E,UAAY,SAAUvb,GACxCh9D,KAAKg9D,YAAcA,IACnBh9D,KAAKmiF,MAAMxzE,SAAS3O,KAAKs5F,eACzBt5F,KAAKg9D,UAAYA,EAEzB,EACAi6B,EAAgBp0F,UAAU21E,UAAY,SAAUlwC,GACxCtoC,KAAKsoC,aAAeA,IACpBtoC,KAAKsoC,WAAaA,GACtBtoC,KAAKmiF,MAAMxzE,SAAS3O,KAAKm7F,gBAC7B,EACAlE,EAAgBp0F,UAAUk7F,SAAW,SAAUx6E,EAAGve,GAC9ChF,KAAKkiB,QAAQ66C,aAAa/3D,GAC1BhF,KAAKkiB,QAAQ46C,cAAcv5C,EAC/B,EACA0zE,EAAgBp0F,UAAU6zB,SAAW,SAAUrR,EAAQC,GACnDA,GAAUtlB,KAAKkiB,QAAQ66C,aAAa/8D,KAAKkiB,QAAQ4mB,eAAiBxjB,GAClED,GAAUrlB,KAAKkiB,QAAQ46C,cAAc98D,KAAKkiB,QAAQm+C,gBAAkBh7C,EACxE,EACA4xE,EAAgBp0F,UAAU0zB,eAAiB,SAAUlR,EAAQC,GACzD,OAAIA,EAAS,GAAKtlB,KAAKkiB,QAAQ4mB,gBAAkB,EAAI9oC,KAAKy3F,aAAa3gF,MAEnEwO,EAAS,GAAKtlB,KAAKkiB,QAAQ4mB,eAAiB9oC,KAAK23F,MAAMC,eACrD53F,KAAK6iC,YAAYhG,WAAa,EAAI78B,KAAKy3F,aAAa9lE,SAEtDtM,EAAS,GAAKrlB,KAAKkiB,QAAQm+C,iBAAmB,EAAIrgE,KAAKy3F,aAAaniF,OAEpE+P,EAAS,GAAKrlB,KAAKkiB,QAAQm+C,gBAAkBrgE,KAAK23F,MAAME,cACtD73F,KAAK6iC,YAAY5tB,OAAS,EAAIjV,KAAKy3F,aAAa/kE,YADtD,IAGJ,EACAukE,EAAgBp0F,UAAUq5B,yBAA2B,SAAU3Y,EAAGve,GAC9D,IAAIg5F,EACJ,GAAIh+F,KAAKi+F,kBAAmB,CACxBD,EAAY,CAAElnF,IAAK,EAAGxB,KAAM,GAC5B,IAAIzV,EAAIG,KAAKyqF,aAAa6J,qBAAqB,CAAC/wE,EAAGve,IACnDue,EAAI1jB,EAAE,GAAKG,KAAKiwE,YAAcjwE,KAAKuqF,OAAOj1E,KAC1CtQ,EAAInF,EAAE,EACV,MAEIm+F,EAAYh+F,KAAK6yB,SAASzG,wBAE9B,IAAIqvB,EAAUl4B,EAAIvjB,KAAKsoC,WAAa01D,EAAU1oF,KAAOtV,KAAK8mF,SACtD34E,EAASstC,EAAUz7C,KAAKsxB,eACxB9uB,EAAM2J,KAAKg6C,OAAOnhD,EAAIhF,KAAKg9D,UAAYghC,EAAUlnF,KAAO9W,KAAKm9B,YAC7DmY,EAAMt1C,KAAKk+F,aAAe/xF,KAAKg6C,MAAMh4C,GAAUhC,KAAK0K,MAAM1I,GAC9D,MAAO,CAAE3L,IAAKA,EAAKC,OAAQ6yC,EAAK0f,KAAM7mD,EAASmnC,EAAM,EAAI,GAAK,EAAGmG,QAASA,EAC9E,EACAw7C,EAAgBp0F,UAAU+xB,wBAA0B,SAAUrR,EAAGve,GAC7D,IAAIg5F,EACJ,GAAIh+F,KAAKi+F,kBAAmB,CACxBD,EAAY,CAAElnF,IAAK,EAAGxB,KAAM,GAC5B,IAAIzV,EAAIG,KAAKyqF,aAAa6J,qBAAqB,CAAC/wE,EAAGve,IACnDue,EAAI1jB,EAAE,GAAKG,KAAKiwE,YAAcjwE,KAAKuqF,OAAOj1E,KAC1CtQ,EAAInF,EAAE,EACV,MAEIm+F,EAAYh+F,KAAK6yB,SAASzG,wBAE9B,IAAIqvB,EAAUl4B,EAAIvjB,KAAKsoC,WAAa01D,EAAU1oF,KAAOtV,KAAK8mF,SACtD34E,EAASstC,EAAUz7C,KAAKsxB,eACxBgkB,EAAMt1C,KAAKk+F,aAAe/xF,KAAKg6C,MAAMh4C,GAAUhC,KAAK0K,MAAM1I,GAC1D3L,EAAM2J,KAAKg6C,OAAOnhD,EAAIhF,KAAKg9D,UAAYghC,EAAUlnF,KAAO9W,KAAKm9B,YACjE,OAAOn9B,KAAKkiB,QAAQi4B,yBAAyB33C,EAAK2J,KAAKC,IAAIkpC,EAAK,GAAImG,EACxE,EACAw7C,EAAgBp0F,UAAU85B,wBAA0B,SAAUn6B,EAAKC,GAC/D,IAAIu7F,EAAYh+F,KAAK6yB,SAASzG,wBAC1B2H,EAAM/zB,KAAKkiB,QAAQE,yBAAyB5f,EAAKC,GACjD8gB,EAAIvjB,KAAK8mF,UAAY9mF,KAAKkiB,QAAQizB,aAAaxC,UAAU5e,EAAIvxB,IAAKA,GAChExC,KAAKkiB,QAAQizB,aAAaE,WAAWthB,EAAItxB,QACzC0J,KAAK0K,MAAMkd,EAAItxB,OAASzC,KAAKsxB,iBAC/BtsB,EAAI+uB,EAAIvxB,IAAMxC,KAAKm9B,WACvB,MAAO,CACHP,MAAOohE,EAAU1oF,KAAOiO,EAAIvjB,KAAKsoC,WACjCpL,MAAO8gE,EAAUlnF,IAAM9R,EAAIhF,KAAKg9D,UAExC,EACAi6B,EAAgBp0F,UAAUm1E,eAAiB,WACvCjhE,EAAItD,YAAYzT,KAAKuU,UAAW,YACpC,EACA0iF,EAAgBp0F,UAAUq1E,cAAgB,WACtCnhE,EAAIrD,eAAe1T,KAAKuU,UAAW,YACvC,EACA0iF,EAAgBp0F,UAAUk8E,gBAAkB,SAAU3E,GAClDp6E,KAAK2iF,aAAevI,EACfA,EAAYvzE,UACbuzE,EAAYvzE,QAAU7G,KAAK+oC,SAASv2B,MAAM3L,cAETT,GAAjCg0E,EAAYtqD,oBACZsqD,EAAYtqD,kBAAoB9vB,KAAKm+F,oBACrCn+F,KAAKm+F,oBACLpnF,EAAItD,YAAYzT,KAAK+oC,SAAU,mBAC/B/oC,KAAK+oC,SAASv2B,MAAM3L,QAAU,GAC9B7G,KAAK4wB,wBACL5wB,KAAK0jC,aAAazwB,QAAQT,MAAM4C,QAAU,QAG1CglE,EAAY1b,SAAW1+D,KAAKkiB,QAAQwa,UAAU09C,EAAYnqD,YAAa,yBAA0B,OAEzG,EACAgnE,EAAgBp0F,UAAUm8E,mBAAqB,SAAUr1D,GACrD,IAAI8B,EAASzrB,KAAKkiB,QAAQ7b,UAAUolB,OACpCzrB,KAAKo+F,SAASz0E,EAAM,0BAA2B8B,EAAOjpB,IAAKipB,EAAOhpB,QAClEzC,KAAK4wB,uBACT,EACAqmE,EAAgBp0F,UAAUo8E,gBAAkB,WACxC,GAAKj/E,KAAK2iF,aAAV,CAEI3iF,KAAK2iF,aAAajkB,UAClB1+D,KAAKkiB,QAAQsb,aAAax9B,KAAK2iF,aAAajkB,UAChD3nD,EAAIrD,eAAe1T,KAAK+oC,SAAU,mBAClC/oC,KAAK+oC,SAASv2B,MAAM3L,QAAU7G,KAAK2iF,aAAa97E,QAChD,IAAI4kB,EAASzrB,KAAKkiB,QAAQ7b,UAAUolB,OACpCzrB,KAAKq+F,iBAAiB5yE,EAAOjpB,IAAKipB,EAAOhpB,QACzCzC,KAAK2iF,aAAe,KACpB3iF,KAAK0jC,aAAazwB,QAAQT,MAAM4C,QAAU,EARhC,CASd,EACA6hF,EAAgBp0F,UAAU05E,aAAe,SAAU5yD,EAAMzf,GACrD,IAAIuhB,EAASzrB,KAAKkiB,QAAQ7b,UAAUolB,OAChC6yE,EAAiBp0F,GAAY,CAAE1H,IAAKipB,EAAOjpB,IAAKC,OAAQgpB,EAAOhpB,QACnEzC,KAAKw8E,kBACL,IAAI+hB,EAAY50E,EAAK7oB,MAAM,MAS3B,GARAd,KAAKo+F,SAASG,EAAU,GAAI,aAAcD,EAAe97F,IAAK87F,EAAe77F,QAC7EzC,KAAKw+F,WAAa,CACd70E,KAAMA,EACNzf,SAAU,CACN1H,IAAK87F,EAAe97F,IACpBC,OAAQ67F,EAAe77F,SAG3B87F,EAAU59F,OAAS,EAAG,CACtBX,KAAKy+F,iBAAmB,CACpB90E,KAAM40E,EAAUt4F,MAAM,GAAG2C,KAAK,MAC9BpG,IAAK87F,EAAe97F,IACpBC,OAAQ67F,EAAe77F,OACvB8P,UAAW,kBAEfvS,KAAKkiB,QAAQqsD,cAAca,cAAcpvE,KAAKy+F,kBAC9C,IAAIC,EAAgB1+F,KAAK0jC,aAAayF,iBAAiBm1D,GAAgB,GACnEnsF,EAAKnS,KAAKuU,UACVY,EAAShD,EAAGia,wBAAwBjX,OACpCwpF,EAAkBJ,EAAU59F,OAASX,KAAKm9B,WAC1CyhE,EAAQD,EAAkBxpF,EAASupF,EAAc5nF,IACrD,GAAI8nF,EACA,OACAD,EAAkBxpF,EAClBnV,KAAK02B,SAAS,GAAI6nE,EAAU59F,OAAS,GAAKX,KAAKm9B,YAG/Cn9B,KAAK02B,SAAS,EAAGgoE,EAAc5nF,IAEvC,CACJ,EACAmgF,EAAgBp0F,UAAU25E,gBAAkB,WACxC,GAAKx8E,KAAKw+F,WAAV,CAEA,IAAIt0F,EAAWlK,KAAKw+F,WAAWt0F,SAC/BlK,KAAKq+F,iBAAiBn0F,EAAS1H,IAAK0H,EAASzH,QACzCzC,KAAKy+F,mBACLz+F,KAAKkiB,QAAQqsD,cAAcQ,iBAAiB/uE,KAAKy+F,kBACjDz+F,KAAKy+F,iBAAmB,MAE5Bz+F,KAAKw+F,WAAa,IAPR,CAQd,EACAvH,EAAgBp0F,UAAUu7F,SAAW,SAAUz0E,EAAM3oB,EAAMwB,EAAKC,GAC5D,IAAIyf,EAAUliB,KAAKkiB,QACnBA,EAAQo5C,YAAY/tC,MAAM/qB,GAAO,KACjC,IAAIq8F,EAAW,CAAE79F,KAAMA,EAAMC,MAAO0oB,GAChC5jB,EAASmc,EAAQ6+B,UAAUv+C,GAC/B,GAAc,MAAVC,GAAmBsD,EAAOpF,OAK1B,IADA,IAAIpB,EAAI,EACChB,EAAI,EAAGA,EAAIwH,EAAOpF,OAAQpC,IAAK,CACpC,IAAII,EAAQoH,EAAOxH,GAEnB,GADAgB,GAAKZ,EAAMsC,MAAMN,OACb8B,GAAUlD,EAAG,CACb,IAAIkwD,EAAO9wD,EAAMsC,MAAMN,QAAUpB,EAAIkD,GACjCkjD,EAAShnD,EAAMsC,MAAMgF,MAAM,EAAGwpD,GAC9B7J,EAAQjnD,EAAMsC,MAAMgF,MAAMwpD,GAC9B1pD,EAAO8H,OAAOtP,EAAG,EAAG,CAAEyC,KAAMrC,EAAMqC,KAAMC,MAAO0kD,GAAUk5C,EAAU,CAAE79F,KAAMrC,EAAMqC,KAAMC,MAAO2kD,IAC9F,KACJ,CACJ,MAdA7/C,EAAOvF,KAAKq+F,GAgBhB7+F,KAAKs4E,YAAY91E,EAAKA,EAC1B,EACAy0F,EAAgBp0F,UAAUw7F,iBAAmB,SAAU77F,EAAKC,GACxDzC,KAAKkiB,QAAQo5C,YAAY/tC,MAAM/qB,GAAO,KACtCxC,KAAKs4E,YAAY91E,EAAKA,EAC1B,EACAy0F,EAAgBp0F,UAAU+1B,SAAW,SAAUC,EAAO/a,GAClD,IAAI9O,EAAQhP,KAGZ,GAFAA,KAAK8+F,SAAWjmE,EAChB7pB,EAAM6J,eAAe,cAAe,CAAEggB,MAAOA,IACxCA,GAAyB,iBAATA,EAKjBpa,EAAUoa,OAL0B,CACpC,IAAItwB,EAAaswB,GAAS74B,KAAKkb,SAAS2d,MAAM9c,aAC9CkD,EAAOd,WAAW,CAAC,QAAS5V,GAAakW,EAC7C,CAIA,SAASA,EAAUtb,GACf,GAAI6L,EAAM8vF,UAAYjmE,EAClB,OAAO/a,GAAMA,IACjB,IAAK3a,IAAWA,EAAOyD,SACnB,MAAM,IAAI6T,MAAM,wBAA0Boe,EAAQ,6BAClD11B,EAAOoD,MACPyI,EAAM8vF,SAAW37F,EAAOoD,KAC5BwQ,EAAIjQ,gBAAgB3D,EAAO0D,QAAS1D,EAAOyD,SAAUoI,EAAMuF,WACvDvF,EAAM6pB,OACN9hB,EAAIrD,eAAe1E,EAAMuF,UAAWvF,EAAM6pB,MAAMjyB,UACpD,IAAIupE,EAAU,YAAahtE,EAASA,EAAOgtE,QACrC,YAAcnhE,EAAM6pB,OAAS,CAAC,GAAK,EAAI7pB,EAAM83E,SAC/C93E,EAAM83E,UAAY3W,GAAWnhE,EAAM83E,UACnC93E,EAAMo5E,WAAWjY,GACrBnhE,EAAM+vF,OAAS57F,EAAOyD,SACtBoI,EAAM6pB,MAAQ11B,EACd4T,EAAItD,YAAYzE,EAAMuF,UAAWpR,EAAOyD,UACxCmQ,EAAIlD,YAAY7E,EAAMuF,UAAW,WAAYpR,EAAOwD,QAChDqI,EAAM2oF,QACN3oF,EAAM2oF,MAAM1iF,MAAQ,EACpBjG,EAAM4pF,oBAEV5pF,EAAM6J,eAAe,cAAe,CAAEggB,MAAO11B,IAC7C2a,GAAMA,GACV,CACJ,EACAm5E,EAAgBp0F,UAAUo0E,SAAW,WACjC,OAAOj3E,KAAK8+F,QAChB,EACA7H,EAAgBp0F,UAAUmT,SAAW,SAAUxD,EAAO5Q,GAClDmV,EAAIlD,YAAY7T,KAAKuU,UAAW/B,GAAmB,IAAZ5Q,EAC3C,EACAq1F,EAAgBp0F,UAAU2yB,WAAa,SAAUhjB,GAC7CuE,EAAIrD,eAAe1T,KAAKuU,UAAW/B,EACvC,EACAykF,EAAgBp0F,UAAUgiC,eAAiB,SAAUryB,GACjDuE,EAAIf,SAAShW,KAAK6yB,SAASrgB,MAAO,SAAUA,EAChD,EACAykF,EAAgBp0F,UAAUm8F,eAAiB,SAAU74D,GACjDpvB,EAAIf,SAAShW,KAAK6yB,SAASrgB,MAAO,SAAU2zB,EAChD,EACA8wD,EAAgBp0F,UAAUo8F,mBAAqB,WAC3CloF,EAAIjQ,gBAAgBkwF,EAAW,iBAAkBh3F,KAAKuU,UAC1D,EACA0iF,EAAgBp0F,UAAUwhB,QAAU,WAChCrkB,KAAKg7F,SACLh7F,KAAKyqF,aAAapmE,UAClBrkB,KAAK0jC,aAAarf,UAClBrkB,KAAKqa,qBACLra,KAAKuU,UAAUpB,YAAc,GAC7BnT,KAAK+a,UAAU,qBAAqB,EACxC,EACAk8E,EAAgBp0F,UAAUq2F,uBAAyB,SAAUxvF,GACzD,IAAIsF,EAAQhP,KACZA,KAAKs3F,aAAet3F,KAAKu3F,SAAW,KACpCv3F,KAAKiqC,WAAWh3B,QAAQ/M,SACxBlG,KAAKkqC,WAAWj3B,QAAQ/M,SACpBlG,KAAKq7F,yBACEr7F,KAAKq7F,kBAEJ,IAAR3xF,GACA1J,KAAKiqC,WAAa,IAAI8sD,EAAiB/2F,KAAKuU,UAAWvU,MACvDA,KAAKkqC,WAAa,IAAI4sD,EAAiB92F,KAAKuU,UAAWvU,MACvDA,KAAKiqC,WAAWymD,UAAU1wF,KAAK23F,MAAMC,gBACrC53F,KAAKkqC,WAAW4mD,SAAS9wF,KAAK23F,MAAME,eACpC73F,KAAKiqC,WAAWhwB,iBAAiB,UAAU,SAAU9b,GAC5C6Q,EAAMwoF,kBACPxoF,EAAMkT,QAAQ66C,aAAa5+D,EAAEqc,KAAOxL,EAAMyoF,aAAa3gF,IAC/D,IACA9W,KAAKkqC,WAAWjwB,iBAAiB,UAAU,SAAU9b,GAC5C6Q,EAAMwoF,kBACPxoF,EAAMkT,QAAQ46C,cAAc3+D,EAAEqc,KAAOxL,EAAMyoF,aAAaniF,KAChE,IACAtV,KAAKq7F,iBAAmB,IAAInG,EAAUl1F,KAAKiqC,WAAYjqC,MACvDA,KAAKq7F,iBAAiBzF,sBAGtB51F,KAAKiqC,WAAa,IAAIsmD,EAAWvwF,KAAKuU,UAAWvU,MACjDA,KAAKkqC,WAAa,IAAI2mD,EAAW7wF,KAAKuU,UAAWvU,MACjDA,KAAKiqC,WAAWhwB,iBAAiB,UAAU,SAAU9b,GAC5C6Q,EAAMwoF,kBACPxoF,EAAMkT,QAAQ66C,aAAa5+D,EAAEqc,KAAOxL,EAAMyoF,aAAa3gF,IAC/D,IACA9W,KAAKkqC,WAAWjwB,iBAAiB,UAAU,SAAU9b,GAC5C6Q,EAAMwoF,kBACPxoF,EAAMkT,QAAQ46C,cAAc3+D,EAAEqc,KAAOxL,EAAMyoF,aAAaniF,KAChE,IAER,EACA2hF,EAAgBp0F,UAAUs1F,mBAAqB,WAC3C,GAAKlxF,OAAOksF,iBAAkBnzF,KAAKk/F,gBAAnC,CAEA,IAAI96D,EAAOpkC,KACXA,KAAK+4F,aAAev8E,EAAK1N,aAAY,WAC5Bs1B,EAAKq3B,WACNr3B,EAAK4yC,UACb,GAAG,IACHh3E,KAAKk/F,gBAAkB,IAAIj4F,OAAOksF,gBAAe,SAAUh1F,GACvD,IAAIiH,EAAIjH,EAAE,GAAGghG,YAAYlqF,MACrBtV,EAAIxB,EAAE,GAAGghG,YAAYhqF,OACrBhJ,KAAKua,IAAI0d,EAAKuzD,MAAM1iF,MAAQ7P,GAAK,GAC9B+G,KAAKua,IAAI0d,EAAKuzD,MAAMxiF,OAASxV,GAAK,EACrCykC,EAAK20D,aAAa9pF,QAGlBm1B,EAAK20D,aAAatqF,QAE1B,IACAzO,KAAKk/F,gBAAgBjL,QAAQj0F,KAAKuU,UAjBxB,CAkBd,EACO0iF,CACX,CA7sCoC,GA8sCpCA,EAAgBp0F,UAAU04F,cAAgB,EAC1CtE,EAAgBp0F,UAAU61F,cAAgB,EAC1CzB,EAAgBp0F,UAAUu/E,cAAgB,EAC1C6U,EAAgBp0F,UAAUy2F,cAAgB,EAC1CrC,EAAgBp0F,UAAU21F,aAAe,GACzCvB,EAAgBp0F,UAAU41F,YAAc,GACxCxB,EAAgBp0F,UAAUw2F,YAAc,GACxCpC,EAAgBp0F,UAAU44F,mBAAqB,IAC/CxE,EAAgBp0F,UAAU24F,oBAAsB,IAChDvE,EAAgBp0F,UAAUq1F,YAAc,IACxCjB,EAAgBp0F,UAAUs4F,gBAAkB,KAC5ClE,EAAgBp0F,UAAUm2F,SAAW,EACrC/B,EAAgBp0F,UAAUikF,SAAW,KACrCmQ,EAAgBp0F,UAAUo4F,SAAU,EACpChE,EAAgBp0F,UAAU06F,MAAQ,EAClC5iF,EAAItC,UAAU4+E,EAAgBp0F,UAAW0V,GACzC0G,EAAOnD,cAAcm7E,EAAgBp0F,UAAW,WAAY,CACxDuhF,kBAAmB,CACf1oE,IAAK,SAAUza,IACNA,GAASjB,KAAKk/F,iBACfl/F,KAAKk/F,gBAAgB/K,aACrBn0F,KAAK+4F,aAAatqF,SAClBzO,KAAK+4F,aAAe/4F,KAAKk/F,gBAAkB,MAEtCj+F,IAAUjB,KAAKk/F,iBACpBl/F,KAAKm4F,oBAEb,GAEJ9U,eAAgB,CAAEtnE,cAAc,GAChCg2B,eAAgB,CACZr2B,IAAK,SAAUza,GACPjB,KAAK43E,WAAWjjC,kBAAkB1zC,IAClCjB,KAAKmiF,MAAMxzE,SAAS3O,KAAKy4F,YACjC,EACA18E,cAAc,GAElB2/D,gBAAiB,CACbhgE,IAAK,WAAc1b,KAAKq4F,oBAAsB,EAC9Ct8E,cAAc,GAElBunE,kBAAmB,CACf5nE,IAAK,WAAc1b,KAAKq4F,oBAAsB,EAC9Ct8E,aAAc,IAElBwnE,YAAa,CACT7nE,IAAK,SAAUhS,GACO,iBAAPA,IACP1J,KAAK25F,mBAAqBjwF,GAC9B1J,KAAK05F,mBAAqBhwF,EAC1B1J,KAAKq4F,oBACT,EACArhF,IAAK,WACD,OAAOhX,KAAK05F,kBAAoB15F,KAAK25F,kBACzC,GAEJ/V,WAAY,CACRloE,IAAK,SAAUod,GACX94B,KAAKs/B,QAAQ9sB,MAAM4C,QAAU0jB,EAAO,QAAU,OAC9C94B,KAAKmiF,MAAMxzE,SAAS3O,KAAKk4F,aACzBl4F,KAAKk3F,gBACT,EACAn7E,cAAc,GAElBsoE,kBAAmB,CACf3oE,IAAK,SAAUza,GACXjB,KAAKg+B,aAAa4C,mBAAqB3/B,CAC3C,EACA8a,cAAc,GAElBuoE,sBAAuB,CACnB5oE,IAAK,SAAUza,GACXjB,KAAKg+B,aAAamC,uBAAyBl/B,CAC/C,EACA8a,cAAc,GAElBynE,gBAAiB,CACb9nE,IAAK,SAAUod,GACX/hB,EAAIlD,YAAY7T,KAAKs/B,QAAS,wBAAyBxG,EAC3D,EACA/c,cAAc,GAElB0nE,gBAAiB,CACb/nE,IAAK,SAAUod,GACX94B,KAAKg+B,aAAai+C,mBAAmBnjD,GACrC94B,KAAKmiF,MAAMxzE,SAAS3O,KAAKoiF,cAC7B,EACArmE,cAAc,GAElB2nE,oBAAqB,CACjBhoE,IAAK,SAAUod,GACP94B,KAAK43E,WAAW0D,uBAAuBxiD,IACvC94B,KAAKmiF,MAAMxzE,SAAS3O,KAAKy4F,YACjC,EACA18E,cAAc,GAElB4nE,sBAAuB,CACnBjoE,IAAK,SAAUod,GAC2C,GAAlD94B,KAAK43E,WAAW4D,yBAAyB1iD,GACzC94B,KAAK43E,WAAWC,wBAGhB73E,KAAK43E,WAAWyV,wBAAwBrtF,KAAK43E,WAAW74C,OAAO8yC,MAEvE,EACA91D,cAAc,GAElBqnE,oBAAqB,CACjB1nE,IAAK,SAAUk/D,GACX56E,KAAKg+B,aAAa88C,uBAAuBF,GACzC56E,KAAKmiF,MAAMxzE,SAAS3O,KAAKoiF,cAC7B,EACArmE,cAAc,GAElBmnE,wBAAyB,CACrBxnE,IAAK,SAAUhS,GACN1J,KAAKu6F,0BAA6Bv6F,KAAKs3F,cACxCt3F,KAAKmiF,MAAMxzE,SAAS3O,KAAKs5F,cACjC,EACAv9E,cAAc,GAElBonE,wBAAyB,CACrBznE,IAAK,SAAUhS,GACN1J,KAAK26F,0BAA6B36F,KAAKu3F,UACxCv3F,KAAKmiF,MAAMxzE,SAAS3O,KAAKs5F,cACjC,EACAv9E,cAAc,GAElBmO,SAAU,CACNxO,IAAK,SAAUu4B,GACQ,iBAARA,IACPA,GAAc,MAClBj0C,KAAKuU,UAAU/B,MAAM0X,SAAW+pB,EAChCj0C,KAAK24F,gBACT,EACA58E,aAAc,IAElB8nE,WAAY,CACRnoE,IAAK,SAAUjS,GACXzJ,KAAKuU,UAAU/B,MAAMqxE,WAAap6E,EAClCzJ,KAAK24F,gBACT,GAEJ7U,SAAU,CACNpoE,IAAK,SAAUhS,GACX1J,KAAK4vE,YACT,GAEJmU,SAAU,CACNroE,IAAK,SAAUhS,GACL1J,KAAK64E,UAAY,kBACnB74E,KAAK64E,UAAY,GACrB74E,KAAK4vE,YACT,GAEJuU,eAAgB,CACZzoE,IAAK,SAAUhS,GACX1J,KAAK4vE,YACT,EACA7zD,aAAc,GAElBioE,cAAe,CACXtoE,IAAK,SAAUhS,GACXA,GAAOA,GAAO,EACV1J,KAAK86F,gBAAkBpxF,IAE3B1J,KAAK86F,eAAiBpxF,EACtB1J,KAAKmiF,MAAMxzE,SAAS3O,KAAKs5F,eAC7B,EACAv9E,aAAc,EACdN,YAAY,GAEhBwoE,iBAAkB,CACdvoE,IAAK,SAAUhS,GACX1J,KAAKg+B,aAAa6oD,cAAgBn9E,EAClC1J,KAAKmiF,MAAMxzE,SAAS3O,KAAKoiF,cAC7B,GAEJa,gBAAiB,CACbvnE,IAAK,SAAUhS,GACX1J,KAAKk5F,uBAAuBxvF,EAChC,EACAqS,cAAc,GAElB8c,MAAO,CACHnd,IAAK,SAAUhS,GAAO1J,KAAK44B,SAASlvB,EAAM,EAC1CsN,IAAK,WAAc,OAAOhX,KAAK8+F,UAAY9+F,KAAK64B,KAAO,EACvD9c,aAAc,mBACdN,YAAY,GAEhByoE,iBAAkB,CAAC,EACnBp0D,kBAAmB,CACf/T,cAAevK,EAAUF,WAAaE,EAAUjB,QAGxD7J,EAAQuwF,gBAAkBA,CAE1B,IAEAh5F,IAAIC,OAAO,2BAA2B,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,wBAAwB,eAAe,SAASuI,EAASC,EAASvD,GAClK,aAEA,IAAIwX,EAAMlU,EAAQ,cACdgW,EAAMhW,EAAQ,cACd8R,EAAe9R,EAAQ,wBAAwB8R,aAC/C0G,EAASxY,EAAQ,aAErB,SAAS24F,EAAYC,GACjB,IAAI5/E,EAAS,kBAAoBhD,EAAI1E,WAAWsnF,GAAa,MAC7D,IACI,OAAO,IAAIC,KAAK,CAAC7/E,GAAS,CAAC,KAAQ,0BACvC,CAAE,MAAOthB,GACL,IAAIohG,EAAct4F,OAAOs4F,aAAet4F,OAAOu4F,mBAAqBv4F,OAAOw4F,eACvEC,EAAc,IAAIH,EAEtB,OADAG,EAAYtgD,OAAO3/B,GACZigF,EAAYC,QAAQ,yBAC/B,CACJ,CAEA,SAASh5C,EAAa04C,GAClB,GAAqB,oBAAVO,OACP,MAAO,CAAEh4E,YAAa,WAAY,EAAGs4C,UAAW,WAAY,GAChE,GAAIjhD,EAAOjI,IAAI,sBAAuB,CAClC,IAAI6oF,EAAOT,EAAYC,GACnBS,EAAM74F,OAAO64F,KAAO74F,OAAO84F,UAC3BC,EAAUF,EAAIG,gBAAgBJ,GAClC,OAAO,IAAID,OAAOI,EACtB,CACA,OAAO,IAAIJ,OAAOP,EACtB,CAEA,IAAIa,EAAe,SAASC,GACnBA,EAAOv4E,cACRu4E,EAASngG,KAAKogG,2BAA2B34F,MAAMzH,KAAMqH,YAEzDrH,KAAKgsD,QAAUm0C,EACfngG,KAAKqgG,gBAAkBrgG,KAAKqgG,gBAAgB53E,KAAKzoB,MACjDA,KAAKsgG,eAAiBtgG,KAAKsgG,eAAe73E,KAAKzoB,MAC/CA,KAAKugG,UAAYvgG,KAAKugG,UAAU93E,KAAKzoB,MAErCA,KAAKwgG,WAAa,EAClBxgG,KAAKygG,UAAY,CAAC,EAElBzgG,KAAKgsD,QAAQ00C,UAAY1gG,KAAKugG,SAClC,GAEA,WAEI5lF,EAAItC,UAAUrY,KAAMuY,GAEpBvY,KAAKogG,2BAA6B,SAASO,EAAoB73F,EAAK83F,EAAWvB,EAAWwB,GAItF,GAHIp6F,EAAQq6F,YAAcr6F,EAAQs6F,QAC9Bt6F,EAAQs6F,MAAQt6F,EAAQq6F,WAExB7hF,EAAOjI,IAAI,cAAgBvQ,EAAQs6F,MACnC1B,EAAYA,GAAapgF,EAAO5B,UAAUvU,EAAK,cAC5C,CACH,IAAIk4F,EAAgBhhG,KAAKihG,eACzB5B,EAAYA,GAAa2B,EAAcv6F,EAAQs6F,MAAM,uBAAwB,KAAM,MAEnF,IAAIG,EAAO,CAAC,EACZP,EAAmBx1F,SAAQ,SAAS9B,GAChC63F,EAAK73F,GAAM23F,EAAcv6F,EAAQs6F,MAAM13F,EAAI,KAAM,KAAK1G,QAAQ,kBAAmB,IACrF,GACJ,CAYA,OAVA3C,KAAKgsD,QAAUrF,EAAa04C,GACxBwB,GACA7gG,KAAKwX,KAAK,gBAAiBqpF,GAE/B7gG,KAAKgsD,QAAQpkC,YAAY,CACrB1I,MAAO,EACPgiF,KAAOA,EACP/9F,OAAS2F,EACT83F,UAAYA,IAET5gG,KAAKgsD,OAChB,EAEAhsD,KAAKugG,UAAY,SAASpiG,GACtB,IAAIoc,EAAMpc,EAAEqc,KACZ,OAAQD,EAAIvZ,MACR,IAAK,QACDhB,KAAKmZ,QAAQoB,EAAI9Q,KAAM,CAAC+Q,KAAMD,EAAIC,OAClC,MACJ,IAAK,OACD,IAAIzS,EAAW/H,KAAKygG,UAAUlmF,EAAIxR,IAC9BhB,IACAA,EAASwS,EAAIC,aACNxa,KAAKygG,UAAUlmF,EAAIxR,KAE9B,MACJ,IAAK,QACD/I,KAAKsa,YAAYC,EAAIC,MACrB,MACJ,IAAK,MACDvT,OAAOS,SAAWA,QAAQqrD,KAAOrrD,QAAQqrD,IAAItrD,MAAMC,QAAS6S,EAAIC,MAChE,MAEZ,EAEAxa,KAAKsa,YAAc,SAASoE,GACxBzX,OAAOS,SAAWA,QAAQC,OAASD,QAAQC,MAAM+W,EACrD,EAEA1e,KAAKihG,eAAiB,SAASvpF,GAC3B,OAAO+E,EAAI1E,WAAWL,EAC1B,EAEA1X,KAAKkgE,UAAY,WACblgE,KAAKmZ,QAAQ,YAAa,CAAC,GAC3BnZ,KAAKmhG,WAAa,KAClBnhG,KAAKgsD,QAAQkU,YACblgE,KAAKgsD,QAAQo1C,QAAU,SAASjjG,GAC5BA,EAAEua,gBACN,EACA1Y,KAAKgsD,QAAU,KACXhsD,KAAKqhG,MACLrhG,KAAKqhG,KAAK9nF,IAAI,SAAUvZ,KAAKsgG,gBACjCtgG,KAAKqhG,KAAO,IAChB,EAEArhG,KAAKwX,KAAO,SAAS8pF,EAAKn0D,GACtBntC,KAAKgsD,QAAQpkC,YAAY,CAAC+E,QAAS20E,EAAKn0D,KAAMA,GAClD,EAEAntC,KAAK4C,KAAO,SAAS0+F,EAAKn0D,EAAMplC,GAC5B,GAAIA,EAAU,CACV,IAAIgB,EAAK/I,KAAKwgG,aACdxgG,KAAKygG,UAAU13F,GAAMhB,EACrBolC,EAAK3sC,KAAKuI,EACd,CACA/I,KAAKwX,KAAK8pF,EAAKn0D,EACnB,EAEAntC,KAAKuhG,KAAO,SAASv4E,EAAOxO,GACxB,IACQA,EAAKA,MAAQA,EAAKA,KAAKkE,MACvBlE,EAAKA,KAAKkE,IAAM,CAAC/C,QAASnB,EAAKA,KAAKkE,IAAI/C,QAASuiC,MAAO1jC,EAAKA,KAAKkE,IAAIw/B,MAAOuG,KAAMjqC,EAAKA,KAAKkE,IAAI+lC,OACjGzkD,KAAKgsD,SAAWhsD,KAAKgsD,QAAQpkC,YAAY,CAACoB,MAAOA,EAAOxO,KAAM,CAACA,KAAMA,EAAKA,OAClF,CACA,MAAMgnF,GACF95F,QAAQC,MAAM65F,EAAGtjD,MACrB,CACJ,EAEAl+C,KAAKyhG,iBAAmB,SAASv9F,GACzBlE,KAAKqhG,MACLrhG,KAAKkgE,YAETlgE,KAAKqhG,KAAOn9F,EACZlE,KAAK4C,KAAK,WAAY,CAACsB,EAAIwuC,aAC3BxuC,EAAImV,GAAG,SAAUrZ,KAAKsgG,gBAAgB,EAC1C,EAEAtgG,KAAKsgG,eAAiB,SAASrtD,GACtBjzC,KAAKmhG,aACNnhG,KAAKmhG,WAAa,GAClBzyF,WAAW1O,KAAKqgG,gBAAiB,IAEjB,UAAhBptD,EAAMrL,OACN5nC,KAAKmhG,WAAW3gG,KAAKyyC,EAAM3yC,MAAO2yC,EAAM1lB,OAExCvtB,KAAKmhG,WAAW3gG,KAAKyyC,EAAM3yC,MAAO2yC,EAAMtvC,IAChD,EAEA3D,KAAKqgG,gBAAkB,WACnB,IAAIqB,EAAI1hG,KAAKmhG,WACRO,IACL1hG,KAAKmhG,WAAa,KACdO,EAAE/gG,OAAS,IAAM+gG,EAAE/gG,OAASX,KAAKqhG,KAAKhjE,aAAe,EACrDr+B,KAAK4C,KAAK,WAAY,CAAC5C,KAAKqhG,KAAK3uD,aAEjC1yC,KAAKuhG,KAAK,SAAU,CAAC/mF,KAAMknF,IACnC,CAEH,GAAE9+F,KAAKs9F,EAAar9F,WAGrB,IAAI8+F,EAAiB,SAAShB,EAAoB73F,EAAK83F,GACnD,IAAIgB,EAAO,KACPC,GAAW,EACXC,EAAS75F,OAAO0F,OAAO4K,GAEvBwpF,EAAgB,GAChBC,EAAe,IAAI9B,EAAa,CAChC6B,cAAeA,EACf7hC,UAAW,WAAY,EACvBt4C,YAAa,SAASzpB,GAClB4jG,EAAcvhG,KAAKrC,GACdyjG,IACDC,EACAnzF,WAAWuzF,GAEXA,IACR,IAGJD,EAAaE,YAAc,SAASx4F,GAAOm4F,EAAWn4F,CAAK,EAE3D,IAAIu4F,EAAc,WACd,IAAI1nF,EAAMwnF,EAAc3gG,QACpBmZ,EAAIoS,QACJi1E,EAAKrnF,EAAIoS,SAASllB,MAAMm6F,EAAMrnF,EAAI4yB,MAC7B5yB,EAAIyO,OACT84E,EAAO3oF,QAAQoB,EAAIyO,MAAOzO,EAAIC,KACtC,EAkBA,OAhBAsnF,EAAOl6E,YAAc,SAASrN,GAC1BynF,EAAazB,UAAU,CAAC/lF,KAAMD,GAClC,EACAunF,EAAO/5F,SAAW,SAASyS,EAAMgmF,GAC7BxgG,KAAK4nB,YAAY,CAAC5mB,KAAM,OAAQ+H,GAAIy3F,EAAYhmF,KAAMA,GAC1D,EACAsnF,EAAOP,KAAO,SAAS93F,EAAM+Q,GACzBxa,KAAK4nB,YAAY,CAAC5mB,KAAM,QAASyI,KAAMA,EAAM+Q,KAAMA,GACvD,EAEAyE,EAAOd,WAAW,CAAC,SAAUrV,IAAM,SAASq5F,GACxCP,EAAO,IAAIO,EAAKvB,GAAWkB,GAC3B,MAAOC,EAAcphG,OACjBshG,GACR,IAEOD,CACX,EAEAt7F,EAAQi7F,eAAiBA,EACzBj7F,EAAQw5F,aAAeA,EACvBx5F,EAAQigD,aAAeA,CAGvB,IAEA1oD,IAAIC,OAAO,kBAAkB,CAAC,UAAU,UAAU,SAAS,YAAY,wBAAwB,gBAAgB,SAASuI,EAASC,EAASvD,GAAQ,aAClJ,IAAIlB,EAAQwE,EAAQ,WAAWxE,MAC3BsW,EAAe9R,EAAQ,uBAAuB8R,aAC9CoC,EAAMlU,EAAQ,aACd27F,EAA6B,WAC7B,SAASA,EAAYlgF,EAASvhB,EAAQozB,EAAKsuE,EAAQC,EAAWC,GAC1D,IAAIvzF,EAAQhP,KACZA,KAAKW,OAASA,EACdX,KAAKkiB,QAAUA,EACfliB,KAAKkE,IAAMge,EAAQu0B,cACnBz2C,KAAKsiG,UAAYA,EACjBtiG,KAAKuiG,YAAcA,EACnBviG,KAAKwiG,UAAYxiG,KAAKyiG,SAASh6E,KAAKzoB,MACpCA,KAAKkE,IAAImV,GAAG,SAAUrZ,KAAKwiG,WAAW,GACtCxiG,KAAK0iG,QAAUL,EACfriG,KAAK21E,gBAAkB,WACnBjnE,YAAW,WACPM,EAAMynE,gBACV,GACJ,EACAz2E,KAAKu+B,KAAOxK,EACZ,IAAI4uE,EAAYzgF,EAAQulB,iBAAiB2mB,YAAclsC,EAAQulB,iBAAiB,eAAiB,CAAE9mC,QAAS,GAC5GX,KAAK4iG,gBAAkBD,EAAUhiG,OACjCX,KAAK6iG,QACL3gF,EAAQ7b,UAAUgT,GAAG,eAAgBrZ,KAAK21E,gBAC9C,CA6HA,OA5HAysB,EAAYv/F,UAAUggG,MAAQ,WAC1B,IAAI7zF,EAAQhP,KACRkE,EAAMlE,KAAKkE,IACXge,EAAUliB,KAAKkiB,QACnBliB,KAAKoxD,gBAAkBlvC,EAAQ7b,UAAU81C,SACrCj6B,EAAQ7b,UAAUkuB,mBAClBrS,EAAQ7b,UAAUo2C,gBACtBz8C,KAAK+zB,IAAM7vB,EAAIwyC,aAAa12C,KAAKu+B,KAAK/7B,IAAKxC,KAAKu+B,KAAK97B,QACrD,IAAIsxB,EAAM/zB,KAAK+zB,IACfA,EAAIu0B,cAAe,EACnBv0B,EAAI8Y,SACJ9Y,EAAI2qC,SAAWx8C,EAAQwa,UAAU,IAAIz6B,EAAM8xB,EAAIvxB,IAAKuxB,EAAItxB,OAAQsxB,EAAIvxB,IAAKuxB,EAAItxB,OAASzC,KAAKW,QAASX,KAAKsiG,UAAW,MAAM,GAC1HtiG,KAAKqiG,OAAS,GACdriG,KAAK0iG,QAAQv3F,SAAQ,SAAUo+D,GAC3B,IAAIx0C,EAAS7wB,EAAIwyC,aAAa6yB,EAAM/mE,IAAK+mE,EAAM9mE,QAC/CsyB,EAAOuzB,cAAe,EACtBvzB,EAAO8X,SACP79B,EAAMqzF,OAAO7hG,KAAKu0B,EACtB,IACA7S,EAAQi/C,eAAc,EAC1B,EACAihC,EAAYv/F,UAAUigG,iBAAmB,WACrC,IAAI9iG,KAAK+iG,aAAT,CAEA,IAAI7gF,EAAUliB,KAAKkiB,QACflT,EAAQhP,KACZA,KAAK+iG,cAAe,EACpB/iG,KAAKqiG,OAAOl3F,SAAQ,SAAU4pB,GAC1BA,EAAO2pC,SAAWx8C,EAAQwa,UAAU,IAAIz6B,EAAM8yB,EAAOvyB,IAAKuyB,EAAOtyB,OAAQsyB,EAAOvyB,IAAKuyB,EAAOtyB,OAASuM,EAAMrO,QAASqO,EAAMuzF,YAAa,MAAM,EACjJ,GANU,CAOd,EACAH,EAAYv/F,UAAUmgG,iBAAmB,WACrC,GAAKhjG,KAAK+iG,aAAV,CAEA/iG,KAAK+iG,cAAe,EACpB,IAAK,IAAIxkG,EAAI,EAAGA,EAAIyB,KAAKqiG,OAAO1hG,OAAQpC,IACpCyB,KAAKkiB,QAAQsb,aAAax9B,KAAKqiG,OAAO9jG,GAAGmgE,SAHnC,CAKd,EACA0jC,EAAYv/F,UAAU4/F,SAAW,SAAUxvD,GACvC,GAAIjzC,KAAKs2D,UACL,OAAOt2D,KAAKijG,cAAchwD,GAC9B,IAAI3yB,EAAQ2yB,EACZ,GAAI3yB,EAAMhgB,MAAMkC,MAAQ8d,EAAM3c,IAAInB,KAE9B8d,EAAMhgB,MAAMkC,MAAQxC,KAAK+zB,IAAIvxB,IAAjC,CAEAxC,KAAKs2D,WAAY,EACjB,IAAI4sC,EAA8B,WAAjBjwD,EAAMrL,OAAsBtnB,EAAM3c,IAAIlB,OAAS6d,EAAMhgB,MAAMmC,OAAS6d,EAAMhgB,MAAMmC,OAAS6d,EAAM3c,IAAIlB,OAChH0gG,EAAc7iF,EAAMhgB,MAAMmC,QAAUzC,KAAK+zB,IAAItxB,QAAU6d,EAAMhgB,MAAMmC,QAAUzC,KAAK+zB,IAAItxB,OAASzC,KAAKW,OAAS,EAC7GyiG,EAAoB9iF,EAAMhgB,MAAMmC,OAASzC,KAAK+zB,IAAItxB,OAItD,GAHAzC,KAAKijG,cAAchwD,GACfkwD,IACAnjG,KAAKW,QAAUuiG,GACfC,IAAgBnjG,KAAKkiB,QAAQyrC,UAC7B,GAAqB,WAAjB1a,EAAMrL,OACN,IAAK,IAAIrpC,EAAIyB,KAAKqiG,OAAO1hG,OAAS,EAAGpC,GAAK,EAAGA,IAAK,CAC9C,IAAIirE,EAAWxpE,KAAKqiG,OAAO9jG,GACvB8kG,EAAS,CAAE7gG,IAAKgnE,EAAShnE,IAAKC,OAAQ+mE,EAAS/mE,OAAS2gG,GAC5DpjG,KAAKkE,IAAImlD,kBAAkBg6C,EAAQpwD,EAAM1lB,MAC7C,MAEC,GAAqB,WAAjB0lB,EAAMrL,OACX,IAASrpC,EAAIyB,KAAKqiG,OAAO1hG,OAAS,EAAGpC,GAAK,EAAGA,IAAK,CAC1CirE,EAAWxpE,KAAKqiG,OAAO9jG,GACvB8kG,EAAS,CAAE7gG,IAAKgnE,EAAShnE,IAAKC,OAAQ+mE,EAAS/mE,OAAS2gG,GAC5DpjG,KAAKkE,IAAIgC,OAAO,IAAIjE,EAAMohG,EAAO7gG,IAAK6gG,EAAO5gG,OAAQ4gG,EAAO7gG,IAAK6gG,EAAO5gG,OAASygG,GACrF,CAGRljG,KAAKs2D,WAAY,EACjBt2D,KAAKsjG,eAzBK,CA0Bd,EACAlB,EAAYv/F,UAAUogG,cAAgB,SAAUhwD,GAC5CjzC,KAAK+zB,IAAIif,SAASC,GAClB,IAAK,IAAI10C,EAAIyB,KAAKqiG,OAAO1hG,OAAQpC,KAC7ByB,KAAKqiG,OAAO9jG,GAAGy0C,SAASC,GAC5BjzC,KAAKsjG,eACT,EACAlB,EAAYv/F,UAAUygG,cAAgB,WAClC,IAAItjG,KAAKs2D,UAAT,CAEA,IAAItnD,EAAQhP,KACRkiB,EAAUliB,KAAKkiB,QACfqhF,EAAe,SAAUxvE,EAAKxhB,GAC9B2P,EAAQsb,aAAazJ,EAAI2qC,UACzB3qC,EAAI2qC,SAAWx8C,EAAQwa,UAAU,IAAIz6B,EAAM8xB,EAAIvxB,IAAKuxB,EAAItxB,OAAQsxB,EAAIvxB,IAAKuxB,EAAItxB,OAASuM,EAAMrO,QAAS4R,EAAW,MAAM,EAC1H,EACAgxF,EAAavjG,KAAK+zB,IAAK/zB,KAAKsiG,WAC5B,IAAK,IAAI/jG,EAAIyB,KAAKqiG,OAAO1hG,OAAQpC,KAC7BglG,EAAavjG,KAAKqiG,OAAO9jG,GAAIyB,KAAKuiG,YAT5B,CAUd,EACAH,EAAYv/F,UAAU4zE,eAAiB,SAAUztD,GAC7C,IAAIhpB,KAAKs2D,WAAct2D,KAAKkiB,QAA5B,CAEA,IAAI6R,EAAM/zB,KAAKkiB,QAAQ7b,UAAU4wC,YAC7BljB,EAAIvxB,MAAQxC,KAAK+zB,IAAIvxB,KAAOuxB,EAAItxB,QAAUzC,KAAK+zB,IAAItxB,QAAUsxB,EAAItxB,QAAUzC,KAAK+zB,IAAItxB,OAASzC,KAAKW,QAClGX,KAAK8iG,mBACL9iG,KAAK4Y,MAAM,cAAeoQ,KAG1BhpB,KAAKgjG,mBACLhjG,KAAK4Y,MAAM,cAAeoQ,GARpB,CAUd,EACAo5E,EAAYv/F,UAAUgqC,OAAS,WAC3B7sC,KAAKkiB,QAAQsb,aAAax9B,KAAK+zB,KAAO/zB,KAAK+zB,IAAI2qC,UAC/C1+D,KAAKgjG,mBACLhjG,KAAKkE,IAAIqV,IAAI,SAAUvZ,KAAKwiG,WAC5BxiG,KAAKkiB,QAAQ7b,UAAUkT,IAAI,eAAgBvZ,KAAK21E,iBAChD31E,KAAKkiB,QAAQi/C,eAAc,GAC3BnhE,KAAKkiB,QAAU,IACnB,EACAkgF,EAAYv/F,UAAU4L,OAAS,WAC3B,IAA8B,IAA1BzO,KAAK4iG,gBAAT,CAIA,IAFA,IAAIpmC,EAAcx8D,KAAKkiB,QAAQulB,iBAC3B+7D,GAAiBhnC,EAAYpO,YAAcoO,EAAY,eAAe77D,OAASX,KAAK4iG,gBAC/ErkG,EAAI,EAAGA,EAAIilG,EAAejlG,IAC/Bi+D,EAAYxN,KAAKhvD,KAAKkiB,SAAS,GAE/BliB,KAAKoxD,iBACLpxD,KAAKkiB,QAAQ7b,UAAUk2C,SAASv8C,KAAKoxD,gBAP/B,CAQd,EACOgxC,CACX,CAnJgC,GAoJhCznF,EAAItC,UAAU+pF,EAAYv/F,UAAW0V,GACrC7R,EAAQ07F,YAAcA,CAEtB,IAEAnkG,IAAIC,OAAO,iCAAiC,CAAC,UAAU,UAAU,SAAS,gBAAgB,sBAAsB,SAASuI,EAASC,EAASvD,GAAQ,IAAI6lB,EAAQviB,EAAQ,gBACnK+K,EAAY/K,EAAQ,oBACxB,SAASg9F,EAAYjhF,EAAIC,GACrB,OAAOD,EAAGhgB,KAAOigB,EAAGjgB,KAAOggB,EAAG/f,QAAUggB,EAAGhgB,MAC/C,CACA,SAAS8wB,EAAYp1B,GACjB,IAAI01B,EAAK11B,EAAEgzB,SACPuyE,EAAM7vE,EAAGjP,OACTxjB,EAAQyyB,EAAGhP,SACX8+E,EAAO9vE,EAAGlP,QACVi/E,EAAQzlG,EAAE43B,cACVjR,EAAS3mB,EAAEumB,YAGf,GAFIi/E,GAAQnyF,EAAU5B,QAClBkV,EAAS+O,EAAG/O,QACZ3mB,EAAEm1B,OAAOiB,mBAA+B,GAAVzP,EAC9B3mB,EAAEm1B,OAAOxB,UAAUZ,cAAc/yB,EAAEgzB,eAGvC,GAAKwyE,GAASD,GAAQE,GAKtB,GAAe,IAAX9+E,EAAJ,CAEA,IAcI++E,EAdAvwE,EAASn1B,EAAEm1B,OACXjtB,EAAYitB,EAAOjtB,UACnBy9F,EAAgBxwE,EAAOiB,kBACvBR,EAAM51B,EAAE61B,sBACRvI,EAASplB,EAAU4wC,YACnBnjB,EAAc31B,EAAE21B,eAAkBztB,EAAUyb,WAAa2hF,EAAY1vE,EAAKtI,GAC1Es4E,EAAS5lG,EAAEolB,EAAGygF,EAAS7lG,EAAE6G,EACzBi/F,EAAmB,SAAU9lG,GAC7B4lG,EAAS5lG,EAAEwoB,QACXq9E,EAAS7lG,EAAEyoB,OACf,EACI1E,EAAUoR,EAAOpR,QACjBgiF,EAAe5wE,EAAOtH,SAASkQ,yBAAyB6nE,EAAQC,GAChEG,EAAeD,EAEnB,GAAI5wE,EAAOnB,cAAciyE,iBACjBT,GAAQD,GAAOE,GAASF,EACxBG,EAAgBziG,EAAQ,QAAU,MAC7BsiG,GAAOpwE,EAAO+wE,sBACnBR,EAAgB,cAGpB,GAAID,IAAUF,GAEV,GADAG,EAAgB,OACXC,GAAiB1iG,EAClB,YAECsiG,GAAOpwE,EAAO+wE,sBACnBR,EAAgB,SAMxB,GAHIA,GAAiBryF,EAAU5B,OAASikB,EAAGlP,SACvC2O,EAAOnB,cAAc8Y,oBAEJ,OAAjB44D,EAAwB,CACxB,IAAKC,GAAiBhwE,EAClB,OACJ,IAAKgwE,EAAe,CAChB,IAAIxjF,EAAQja,EAAUk9B,kBACtBjQ,EAAOgxE,mBAAmBhkF,EAC9B,CACA,IAAIikF,EAAWl+F,EAAUm2C,UAAUuX,aAAahgC,GAChDT,EAAOomD,wBAAyB,EAC5Bt4E,IACAmjG,EAAW,KACXjkF,EAAQja,EAAUg2C,OAAO,IAAM/7B,EAC/BgT,EAAOkxE,sBAAsBlkF,IAEjCgT,EAAOla,KAAK,WAAW,WACnB,IAAIqrF,EAASp+F,EAAUk9B,kBACnBghE,GAAYE,EAAO3iF,WAAa2hF,EAAYc,EAAS94E,OAAQg5E,EAAOh5E,QACpEplB,EAAUwtD,eAAe4wC,EAAOh5E,SAE5BrqB,EACAiF,EAAUwtD,eAAevzC,EAAMmL,QAE1BnL,IACLgT,EAAOkxE,sBAAsBlkF,GAC7Bja,EAAUq2C,SAASp8B,IAEvBja,EAAUq2C,SAAS+nD,IAEvBnxE,EAAOomD,wBAAyB,CACpC,GACJ,MACK,GAAqB,SAAjBmqB,EAA0B,CAG/B,IAAIv9C,EAFJnoD,EAAEw4B,OACFrD,EAAOomD,wBAAyB,EAEhC,IAAIgrB,EAAU,GACVC,EAAc,WACd,IAAIC,EAAYtxE,EAAOtH,SAASkQ,yBAAyB6nE,EAAQC,GAC7Dv4E,EAASvJ,EAAQi4B,yBAAyByqD,EAAUpiG,IAAKoiG,EAAUniG,OAAQmiG,EAAUnpD,SACrFgoD,EAAYU,EAAcS,IAAcnB,EAAYh4E,EAAQplB,EAAUC,QAE1E69F,EAAeS,EACftxE,EAAOjtB,UAAU+tB,eAAe3I,GAChC6H,EAAOtH,SAASmJ,uBAChB7B,EAAOuxE,uBAAuBH,GAC9BA,EAAUr+F,EAAUy+F,sBAAsBX,EAAcD,GACpD5wE,EAAOnB,cAAckB,iBAAqC,GAAlBqxE,EAAQ/jG,QAAe+jG,EAAQ,GAAG5iF,YAC1E4iF,EAAQ,GAAKpxE,EAAOnB,cAAckB,gBAAgBtR,SACtD2iF,EAAQv5F,QAAQmoB,EAAOgxE,mBAAoBhxE,GAC3CA,EAAOyxE,yBACX,EACIjB,IAAkBF,EAClBv9F,EAAUo2C,iBAEJqnD,GAAiBF,IACvBt9C,EAAejgD,EAAUk9B,kBACzBjQ,EAAOgxE,mBAAmBh+C,IAE1BllD,EACA8iG,EAAehiF,EAAQE,yBAAyB/b,EAAUC,MAE1DD,EAAU+tB,eAAeL,GAC7BowE,EAAe,CAAE3hG,KAAM,EAAGC,QAAS,GACnC,IAAIuiG,EAAsB,SAAU7mG,GAChCwmG,IACA/gE,cAAc7B,GACdzO,EAAOuxE,uBAAuBH,GACzBA,EAAQ/jG,SACT+jG,EAAU,CAACr+F,EAAUk9B,oBACrB+iB,IACAhzB,EAAOkxE,sBAAsBl+C,GAC7BjgD,EAAUo2C,cAAc6J,IAE5B,IAAK,IAAI/nD,EAAI,EAAGA,EAAImmG,EAAQ/jG,OAAQpC,IAChC8H,EAAUq2C,SAASgoD,EAAQnmG,IAC/B+0B,EAAOomD,wBAAyB,EAChCpmD,EAAOnB,cAAckB,gBAAkB,IAC3C,EACI4xE,EAAsBN,EAC1B37E,EAAMjE,QAAQuO,EAAO/e,UAAW0vF,EAAkBe,GAClD,IAAIjjE,EAAU8B,aAAY,WAAcohE,GAAuB,GAAG,IAClE,OAAO9mG,EAAEua,gBACb,CArHU,OALS,IAAXoM,GAAgB3mB,EAAEm1B,OAAOiB,mBACzBp2B,EAAEm1B,OAAO+6C,qBA0HrB,CACA3nE,EAAQ6sB,YAAcA,CAEtB,IAEAt1B,IAAIC,OAAO,qCAAqC,CAAC,UAAU,UAAU,SAAS,8BAA8B,SAASuI,EAASC,EAASvD,GAIvIuD,EAAQ2sE,gBAAkB,CAAC,CACnB5pE,KAAM,iBACNmhE,YAAa,mBACbzmE,KAAM,SAAUmvB,GAAUA,EAAO4xE,iBAAiB,EAAI,EACtDt8B,QAAS,CAAE7gD,IAAK,cAAe4iD,IAAK,eACpCI,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,iBACNmhE,YAAa,mBACbzmE,KAAM,SAAUmvB,GAAUA,EAAO4xE,gBAAgB,EAAI,EACrDt8B,QAAS,CAAE7gD,IAAK,gBAAiB4iD,IAAK,iBACtCI,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,4BACNmhE,YAAa,kCACbzmE,KAAM,SAAUmvB,GAAUA,EAAO4xE,iBAAiB,GAAG,EAAO,EAC5Dt8B,QAAS,CAAE7gD,IAAK,oBAAqB4iD,IAAK,qBAC1CI,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,4BACNmhE,YAAa,kCACbzmE,KAAM,SAAUmvB,GAAUA,EAAO4xE,gBAAgB,GAAG,EAAO,EAC3Dt8B,QAAS,CAAE7gD,IAAK,sBAAuB4iD,IAAK,uBAC5CI,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,mBACNmhE,YAAa,qBACbzmE,KAAM,SAAUmvB,GAAUA,EAAO6xE,YAAY,EAAI,EACjDv8B,QAAS,CAAE7gD,IAAK,gBAAiB4iD,IAAK,iBACtCI,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,kBACNmhE,YAAa,oBACbzmE,KAAM,SAAUmvB,GAAUA,EAAO6xE,WAAW,EAAI,EAChDv8B,QAAS,CAAE7gD,IAAK,iBAAkB4iD,IAAK,kBACvCI,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,mBACNmhE,YAAa,qBACbzmE,KAAM,SAAUmvB,GAAUA,EAAO6xE,YAAY,GAAG,EAAO,EACvDv8B,QAAS,CAAE7gD,IAAK,sBAAuB4iD,IAAK,uBAC5CI,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,kBACNmhE,YAAa,oBACbzmE,KAAM,SAAUmvB,GAAUA,EAAO6xE,WAAW,GAAG,EAAO,EACtDv8B,QAAS,CAAE7gD,IAAK,uBAAwB4iD,IAAK,wBAC7CI,eAAgB,SAChBh6C,UAAU,GACX,CACCtnB,KAAM,gCACNmhE,YAAa,6BACbzmE,KAAM,SAAUmvB,GACRA,EAAOouB,YAAYtF,WAAa,EAChC9oB,EAAOouB,YAAY0jD,iBAEnB9xE,EAAOouB,YAAY2jD,gBAC3B,EACAz8B,QAAS,CAAE7gD,IAAK,aAAc4iD,IAAK,cACnC55C,UAAU,GACX,CACCtnB,KAAM,0BACNmhE,YAAa,mBACbzmE,KAAM,SAAUmvB,GAAUA,EAAOouB,YAAY2jD,gBAAkB,EAC/Dt0E,UAAU,GACX,CACCtnB,KAAM,eACNmhE,YAAa,gBACbzmE,KAAM,SAAUmvB,GAAUA,EAAOgyE,cAAgB,EACjD18B,QAAS,CAAE7gD,IAAK,aAAc4iD,IAAK,cACnCI,eAAgB,UACjB,CACCthE,KAAM,UACNmhE,YAAa,WACbzmE,KAAM,SAAUmvB,GAAUA,EAAO4zC,SAAW,EAC5C0B,QAAS,CAAE7gD,IAAK,aAAc4iD,IAAK,cACnCI,eAAgB,SAChBh6C,UAAU,IAElBrqB,EAAQ6+F,oBAAsB,CAAC,CACvB97F,KAAM,kBACNmhE,YAAa,mBACbhC,QAAS,MACTzkE,KAAM,SAAUmvB,GAAUA,EAAO+6C,qBAAuB,EACxDtD,eAAgB,SAChBh6C,UAAU,EACVm5C,YAAa,SAAU52C,GAAU,OAAOA,GAAUA,EAAOiB,iBAAmB,IAEpF,IAAIu1C,EAAcrjE,EAAQ,4BAA4BqjE,YACtDpjE,EAAQouE,gBAAkB,IAAIhL,EAAYpjE,EAAQ6+F,oBAElD,IAEAtnG,IAAIC,OAAO,mBAAmB,CAAC,UAAU,UAAU,SAAS,iBAAiB,YAAY,gBAAgB,iCAAiC,gBAAgB,eAAe,qCAAqC,aAAa,mBAAmB,aAAa,eAAe,SAASuI,EAASC,EAASvD,GAKrS,IAAImwD,EAAY7sD,EAAQ,gBAAgB6sD,UACpCrxD,EAAQwE,EAAQ,WAAWxE,MAC3Bu0C,EAAY/vC,EAAQ,eAAe+vC,UACnCjjB,EAAc9sB,EAAQ,gCAAgC8sB,YACtDvK,EAAQviB,EAAQ,eAChB+V,EAAO/V,EAAQ,cACfksB,EAAWlsB,EAAQ,oCACvBC,EAAQisB,SAAWA,EAAS0gD,gBAAgB7yC,OAAO7N,EAAS4yE,qBAC5D,IAAI5+B,EAASlgE,EAAQ,YAAYkgE,OAC7BhsB,EAAS,IAAIgsB,EACjB,SAASl7D,EAAKyW,EAASilD,EAAQ/5B,GAI3B,OAHAuN,EAAOz/B,SAASorD,MAAO,EACvB3rB,EAAOz/B,SAASisD,OAASA,EACzBxsB,EAAOz/B,SAAS6sD,WAAoB,GAAR36B,EACrBuN,EAAOlvC,KAAKyW,EACvB,CACA,IAAI44C,EAAcr0D,EAAQ,kBAAkBq0D,aAC5C,WACI96D,KAAKwlG,oBAAsB,WACvB,OAAOxlG,KAAK4vF,iBAChB,CACH,GAAEhtF,KAAKk4D,EAAYj4D,WACpB,WACI7C,KAAKq8C,OAAS,KACdr8C,KAAKw8C,UAAY,KACjBx8C,KAAK08C,SAAW,SAAUp8B,EAAOmlF,GAC7B,GAAKnlF,EAAL,CAEA,IAAKtgB,KAAKu0B,mBAAyC,IAApBv0B,KAAKo8C,WAAkB,CAClD,IAAImoD,EAAWvkG,KAAKujC,kBAGpB,GAFAvjC,KAAKw8C,UAAU5oC,IAAI2wF,GACnBvkG,KAAKw8C,UAAU5oC,IAAI0M,GACiB,GAAhCtgB,KAAKw8C,UAAUH,OAAO17C,OAEtB,OADAX,KAAKw8C,UAAUyX,YACRwxC,GAAsBzlG,KAAK+jC,kBAAkBzjB,GAExDtgB,KAAKw8C,UAAUyX,YACfj0D,KAAKw8C,UAAU5oC,IAAI2wF,GACnBvkG,KAAK0lG,YAAYnB,EACrB,CACKjkF,EAAMmL,SACPnL,EAAMmL,OAASnL,EAAM3c,KACzB,IAAIiwD,EAAU5zD,KAAKw8C,UAAU5oC,IAAI0M,GAUjC,OATAtgB,KAAK0lG,YAAYplF,GACbszC,EAAQjzD,QACRX,KAAK2lG,eAAe/xC,GACpB5zD,KAAKo8C,WAAa,IAAMp8C,KAAKu0B,oBAC7Bv0B,KAAKmZ,QAAQ,eACbnZ,KAAKu0B,mBAAoB,EACzBv0B,KAAKkiB,QAAQk5C,aAAc,EAC3Bp7D,KAAKw8C,UAAU5P,OAAO5sC,KAAKkiB,UAExBujF,GAAsBzlG,KAAK+jC,kBAAkBzjB,EAzB1C,CA0Bd,EACAtgB,KAAKy8C,cAAgB,SAAUn8B,GAC3BA,EAAQA,GAAStgB,KAAKq8C,OAAO,GAC7B,IAAIuX,EAAU5zD,KAAKw8C,UAAUyX,YACzBL,EAAQjzD,QACRX,KAAK2lG,eAAe/xC,GACxBtzC,GAAStgB,KAAK+jC,kBAAkBzjB,EACpC,EACAtgB,KAAK6zD,eAAiB,SAAU9/B,GAC5B,IAAI6/B,EAAU5zD,KAAKw8C,UAAUqX,eAAe9/B,GAC5C,GAAI6/B,EAEA,OADA5zD,KAAK2lG,eAAe/xC,GACbA,EAAQ,EAEvB,EACA5zD,KAAK4lG,uBAAyB,WAC1B,IAAIhyC,EAAU5zD,KAAKw8C,UAAUqC,QACzB+U,EAAQjzD,QACRX,KAAK2lG,eAAe/xC,EAC5B,EACA5zD,KAAK0lG,YAAc,SAAUplF,GACzBtgB,KAAKo8C,WAAap8C,KAAKw8C,UAAUH,OAAO17C,OACxCX,KAAKq8C,OAAOz7C,QAAQ0f,GACpBtgB,KAAKmZ,QAAQ,WAAY,CAAEmH,MAAOA,GACtC,EACAtgB,KAAK2lG,eAAiB,SAAU/xC,GAE5B,GADA5zD,KAAKo8C,WAAap8C,KAAKw8C,UAAUH,OAAO17C,OACjB,GAAnBX,KAAKo8C,YAAmBp8C,KAAKu0B,kBAAmB,CAChD,IAAIsxE,EAAY7lG,KAAKw8C,UAAUH,OAAOriC,MACtC45C,EAAQpzD,KAAKqlG,GACb7lG,KAAKo8C,WAAa,CACtB,CACA,IAAK,IAAI79C,EAAIq1D,EAAQjzD,OAAQpC,KAAM,CAC/B,IAAIyF,EAAQhE,KAAKq8C,OAAO7zC,QAAQorD,EAAQr1D,IACxCyB,KAAKq8C,OAAOxuC,OAAO7J,EAAO,EAC9B,CACAhE,KAAKmZ,QAAQ,cAAe,CAAEkjC,OAAQuX,IACd,IAApB5zD,KAAKo8C,YAAoBp8C,KAAKu0B,oBAC9Bv0B,KAAKu0B,mBAAoB,EACzBv0B,KAAKmZ,QAAQ,gBACbnZ,KAAKkiB,QAAQk5C,aAAc,EAC3Bp7D,KAAKw8C,UAAU3P,OAAO7sC,KAAKkiB,UAE/B2jF,EAAYA,GAAa7lG,KAAKq8C,OAAO,GACjCwpD,IAAcA,EAAUxlF,QAAQrgB,KAAKstB,aACrCttB,KAAK+jC,kBAAkB8hE,EAC/B,EACA7lG,KAAK8lG,eAAiB,WACd9lG,KAAKw8C,YAETx8C,KAAKw8C,UAAY,IAAI8W,EACrBtzD,KAAKq8C,OAAS,GACdr8C,KAAKo8C,WAAa,EACtB,EACAp8C,KAAKqrE,aAAe,WAChB,OAAOrrE,KAAKo8C,WAAap8C,KAAKw8C,UAAUH,OAAO7b,SAAW,CAACxgC,KAAKstB,WACpE,EACAttB,KAAKqlG,eAAiB,WAGlB,IAFA,IAAIhpD,EAASr8C,KAAKq8C,OAAO17C,OAASX,KAAKq8C,OAAS,CAACr8C,KAAKstB,YAClD8gD,EAAY,GACP7vE,EAAI,EAAGA,EAAI89C,EAAO17C,OAAQpC,IAAK,CACpC,IAAI+hB,EAAQ+7B,EAAO99C,GACfiE,EAAM8d,EAAMhgB,MAAMkC,IAClB2d,EAASG,EAAM3c,IAAInB,IACvB,GAAIA,IAAQ2d,EACRiuD,EAAU5tE,KAAK8f,EAAMyB,aAEpB,CACDqsD,EAAU5tE,KAAK,IAAIyB,EAAMO,EAAK8d,EAAMhgB,MAAMmC,OAAQD,EAAKxC,KAAKkiB,QAAQ7f,QAAQG,GAAK7B,SACjF,QAAS6B,EAAM2d,EACXiuD,EAAU5tE,KAAKR,KAAK81B,aAAatzB,GAAK,IAC1C4rE,EAAU5tE,KAAK,IAAIyB,EAAMke,EAAQ,EAAGA,EAAQG,EAAM3c,IAAIlB,QAC1D,CACS,GAALlE,GAAWyB,KAAKs3C,gBAChB82B,EAAYA,EAAUthE,UAC9B,CACA9M,KAAKy8C,gBACL,IAASl+C,EAAI6vE,EAAUztE,OAAQpC,KAC3ByB,KAAK08C,SAAS0xB,EAAU7vE,GAChC,EACAyB,KAAKolG,eAAiB,WAClB,IAAI/oD,EAASr8C,KAAKw8C,UAAUH,OACxBwpD,EAAYxpD,EAAOA,EAAO17C,OAAS,GACnC2f,EAAQre,EAAM2f,WAAWy6B,EAAO,GAAG/7C,MAAOulG,EAAUliG,KACxD3D,KAAKy8C,gBACLz8C,KAAKotB,kBAAkB9M,EAAOulF,EAAUp6E,QAAUo6E,EAAUvlG,MAChE,EACAN,KAAK+lG,qBAAuB,WACxB,GAAI/lG,KAAKo8C,WAAa,EAAG,CACrB,IAAIC,EAASr8C,KAAKw8C,UAAUH,OACxBwpD,EAAYxpD,EAAOA,EAAO17C,OAAS,GACnC2f,EAAQre,EAAM2f,WAAWy6B,EAAO,GAAG/7C,MAAOulG,EAAUliG,KACxD3D,KAAKy8C,gBACLz8C,KAAKotB,kBAAkB9M,EAAOulF,EAAUp6E,QAAUo6E,EAAUvlG,MAChE,KACK,CACD,IAAImrB,EAASzrB,KAAKkiB,QAAQE,yBAAyBpiB,KAAKyrB,QACpDsJ,EAAS/0B,KAAKkiB,QAAQE,yBAAyBpiB,KAAK+0B,QACpD2vE,EAAU1kG,KAAK8kG,sBAAsBr5E,EAAQsJ,GACjD2vE,EAAQv5F,QAAQnL,KAAK08C,SAAU18C,KACnC,CACJ,EACAA,KAAK8kG,sBAAwB,SAAUX,EAAcD,EAAc8B,GAC/D,IAAItB,EAAU,GACVuB,EAAa9B,EAAa1hG,OAASyhG,EAAazhG,OACpD,GAAIwjG,EACA,IAAI/lF,EAAcikF,EAAa1hG,OAC3B2d,EAAY8jF,EAAazhG,OACzByjG,EAAe/B,EAAa1oD,QAC5B0qD,EAAajC,EAAazoD,aAG1Bv7B,EAAcgkF,EAAazhG,OAC3B2d,EAAY+jF,EAAa1hG,OACzByjG,EAAehC,EAAazoD,QAC5B0qD,EAAahC,EAAa1oD,QAElC,IAeI2qD,EAfAC,EAAalC,EAAa3hG,IAAM0hG,EAAa1hG,IACjD,GAAI6jG,EACA,IAAIpmF,EAAWkkF,EAAa3hG,IACxB2d,EAAS+jF,EAAa1hG,SAGtByd,EAAWikF,EAAa1hG,IACxB2d,EAASgkF,EAAa3hG,IAE1B0d,EAAc,IACdA,EAAc,GACdD,EAAW,IACXA,EAAW,GACXA,GAAYE,IACZ6lF,GAAoB,GAExB,IAAK,IAAIxjG,EAAMyd,EAAUzd,GAAO2d,EAAQ3d,IAAO,CAC3C,IAAI8d,EAAQre,EAAM2f,WAAW5hB,KAAKkiB,QAAQi4B,yBAAyB33C,EAAK0d,EAAagmF,GAAelmG,KAAKkiB,QAAQi4B,yBAAyB33C,EAAK4d,EAAW+lF,IAC1J,GAAI7lF,EAAMwB,UAAW,CACjB,GAAIskF,GAAU3C,EAAYnjF,EAAM3c,IAAKyiG,GACjC,MACJA,EAAS9lF,EAAM3c,GACnB,CACA2c,EAAMmL,OAASw6E,EAAa3lF,EAAMhgB,MAAQggB,EAAM3c,IAChD+gG,EAAQlkG,KAAK8f,EACjB,CAGA,GAFI+lF,GACA3B,EAAQ53F,WACPk5F,EAAmB,CACpB,IAAIriG,EAAM+gG,EAAQ/jG,OAAS,EAC3B,MAAO+jG,EAAQ/gG,GAAKme,WAAane,EAAM,EACnCA,IACJ,GAAIA,EAAM,EAAG,CACT,IAAIrD,EAAQ,EACZ,MAAOokG,EAAQpkG,GAAOwhB,UAClBxhB,GACR,CACA,IAAK,IAAI/B,EAAIoF,EAAKpF,GAAK+B,EAAO/B,IACtBmmG,EAAQnmG,GAAGujB,WACX4iF,EAAQ72F,OAAOtP,EAAG,EAE9B,CACA,OAAOmmG,CACX,CACH,EAAE9hG,KAAK4zC,EAAU3zC,WAClB,IAAIywE,EAAS7sE,EAAQ,YAAY6sE,OAmZjC,SAASmwB,EAAYjhF,EAAIC,GACrB,OAAOD,EAAGhgB,KAAOigB,EAAGjgB,KAAOggB,EAAG/f,QAAUggB,EAAGhgB,MAC/C,CAiCA,SAAS6jG,EAAYhzE,GACbA,EAAOizE,8BAEXjzE,EAAOoyE,YAAcpyE,EAAOoyE,YAAYj9E,KAAK6K,GAC7CA,EAAOqyE,eAAiBryE,EAAOqyE,eAAel9E,KAAK6K,GACnDA,EAAOkzE,eAAiBlzE,EAAOkzE,eAAe/9E,KAAK6K,GACnDA,EAAOmzE,gBAAkBnzE,EAAOmzE,gBAAgBh+E,KAAK6K,GACrDA,EAAOizE,4BAA8B7/F,EAAQggG,gBAAgBj+E,KAAK6K,GAClEA,EAAOqzE,wBAA0BrzE,EAAOqzE,wBAAwBl+E,KAAK6K,GACrEA,EAAOizE,4BAA4BjzE,GACnCA,EAAOja,GAAG,gBAAiBia,EAAOizE,6BAClCjzE,EAAOja,GAAG,YAAaka,GACvBD,EAAOX,SAAS81C,YAAY91C,EAAS0gD,iBACrCuzB,EAAsBtzE,GAC1B,CACA,SAASszE,EAAsBtzE,GAC3B,GAAKA,EAAOxB,UAAZ,CAEA,IAAI3f,EAAKmhB,EAAOxB,UAAUjB,aACtBg2E,GAAY,EAChB79E,EAAM1E,YAAYnS,EAAI,WAAW,SAAUhU,GACvC,IAAI2oG,EAAuB,IAAb3oG,EAAEslB,WAAmBtlB,EAAEwmB,SAAWxmB,EAAE0mB,UAAY1mB,EAAE4oB,SAC5DuM,EAAO+wE,qBAAuByC,EACzBD,IACDvzE,EAAOtH,SAASgzE,eAAe,aAC/B6H,GAAY,GAGXA,GACLh5C,GAER,GAAGv6B,GACHtK,EAAM1E,YAAYnS,EAAI,QAAS07C,EAAOv6B,GACtCtK,EAAM1E,YAAYnS,EAAI,OAAQ07C,EAAOv6B,EAhB3B,CAiBV,SAASu6B,EAAM1vD,GACP0oG,IACAvzE,EAAOtH,SAASgzE,eAAe,IAC/B6H,GAAY,EAEpB,CACJ,EA7dA,WACI7mG,KAAK+kG,uBAAyB,WAC1B/kG,KAAKgsB,SAASosD,eACdp4E,KAAKgsB,SAASotD,mBAClB,EACAp5E,KAAKskG,mBAAqB,SAAUtvE,GAC3BA,EAAcvJ,SACfuJ,EAAcvJ,OAASuJ,EAAcrxB,KACzC,IAAI6O,EAAQxS,KAAKwjC,oBAIjB,OAHAxO,EAAcsI,OAASt9B,KAAKkiB,QAAQwa,UAAU1H,EAAe,gBAAiBxiB,GAC9ExS,KAAKkiB,QAAQ0tE,kBAAkBpvF,KAAKw0B,GACpCh1B,KAAKkiB,QAAQ6kF,qBAAuB/mG,KAAKkiB,QAAQ0tE,kBAAkBjvF,OAC5Dq0B,CACX,EACAh1B,KAAKwkG,sBAAwB,SAAUlkF,GACnC,GAAKA,EAAMgd,OAAX,CAEAt9B,KAAKkiB,QAAQsb,aAAald,EAAMgd,QAChC,IAAIt5B,EAAQhE,KAAKkiB,QAAQ0tE,kBAAkBpnF,QAAQ8X,IACrC,GAAVtc,GACAhE,KAAKkiB,QAAQ0tE,kBAAkB/hF,OAAO7J,EAAO,GACjDhE,KAAKkiB,QAAQ6kF,qBAAuB/mG,KAAKkiB,QAAQ0tE,kBAAkBjvF,MALzD,CAMd,EACAX,KAAK6kG,uBAAyB,SAAUxoD,GAEpC,IADA,IAAI2qD,EAAahnG,KAAKkiB,QAAQ0tE,kBACrBrxF,EAAI89C,EAAO17C,OAAQpC,KAAM,CAC9B,IAAI+hB,EAAQ+7B,EAAO99C,GACnB,GAAK+hB,EAAMgd,OAAX,CAEAt9B,KAAKkiB,QAAQsb,aAAald,EAAMgd,QAChC,IAAIt5B,EAAQgjG,EAAWx+F,QAAQ8X,IACjB,GAAVtc,GACAgjG,EAAWn5F,OAAO7J,EAAO,EAJjB,CAKhB,CACAhE,KAAKkiB,QAAQ6kF,qBAAuBC,EAAWrmG,MACnD,EACAX,KAAK0lG,YAAc,SAAUvnG,GACzB6B,KAAKskG,mBAAmBnmG,EAAEmiB,OAC1BtgB,KAAKgsB,SAASosD,eACdp4E,KAAKgsB,SAASotD,mBAClB,EACAp5E,KAAK2lG,eAAiB,SAAUxnG,GAC5B6B,KAAK6kG,uBAAuB1mG,EAAEk+C,QAC9Br8C,KAAKgsB,SAASosD,eACdp4E,KAAKgsB,SAASotD,mBAClB,EACAp5E,KAAKwmG,eAAiB,SAAUroG,GACxB6B,KAAKu0B,oBAETv0B,KAAKu0B,mBAAoB,EACzBv0B,KAAKgW,SAAS,mBACdhW,KAAKyzE,WAAWhnC,mBAAmB9Z,EAASmiD,iBAC5C90E,KAAK2yB,SAASjZ,kBAAkB,OAAQ1Z,KAAKinG,oBAC7CjnG,KAAKgsB,SAASosD,eACdp4E,KAAKgsB,SAASotD,oBAClB,EACAp5E,KAAKymG,gBAAkB,SAAUtoG,GACzB6B,KAAKkiB,QAAQw/B,YAAYwlD,gBAE7BlnG,KAAKu0B,mBAAoB,EACzBv0B,KAAKw1B,WAAW,mBAChBx1B,KAAKyzE,WAAWlnC,sBAAsB5Z,EAASmiD,iBAC/C90E,KAAK2yB,SAAS5Y,qBAAqB,OAAQ/Z,KAAKinG,oBAChDjnG,KAAKgsB,SAASosD,eACdp4E,KAAKgsB,SAASotD,oBACdp5E,KAAK4Y,MAAM,mBACf,EACA5Y,KAAKinG,mBAAqB,SAAU9oG,GAChC,IAAIwuB,EAAUxuB,EAAEwuB,QACZ2G,EAASn1B,EAAEm1B,OACf,GAAKA,EAAOouB,YAAZ,CAEA,GAAK/0B,EAAQy+C,kBAKyB,WAA7Bz+C,EAAQy+C,kBACb3gE,EAAS6oB,EAAOgnD,iBAAiB3tD,EAASxuB,EAAEgvC,MAEV,eAA7BxgB,EAAQy+C,kBACb3gE,EAAS6oB,EAAOgnD,iBAAiB3tD,EAASxuB,EAAEgvC,MAAM,GAEhB,UAA7BxgB,EAAQy+C,mBACb93C,EAAO+6C,sBACP5jE,EAASkiB,EAAQxoB,KAAKmvB,EAAQn1B,EAAEgvC,MAAQ,CAAC,IAGzC1iC,EAASkiB,EAAQy+C,kBAAkB93C,EAAQn1B,EAAEgvC,MAAQ,CAAC,OAhB1B,CAC5B,IAAI1iC,EAASkiB,EAAQxoB,KAAKmvB,EAAQn1B,EAAEgvC,MAAQ,CAAC,GAC7C7Z,EAAOouB,YAAYhF,SAASppB,EAAOouB,YAAYne,mBAC/CjQ,EAAOouB,YAAYkkD,wBACvB,CAcA,OAAOn7F,CAnBG,CAoBd,EACAzK,KAAKs6E,iBAAmB,SAAUgnB,EAAKn0D,EAAM96B,GACzC,IAAIrS,KAAK05E,uBAAT,CAEA,IAMIjvE,EANA08F,EAAY90F,GAAWA,EAAQ80F,UAC/BC,EAAsB,GAAX/0F,GAAmBA,GAAWA,EAAQ+0F,SACjDllF,EAAUliB,KAAKkiB,QACf7b,EAAYrG,KAAKqG,UACjBm2C,EAAYn2C,EAAUm2C,UACtBH,GAAU8qD,EAAY9gG,EAAYm2C,GAAWH,OAEjD,IAAKA,EAAO17C,OACR,OAAO2gG,EAAIn9F,KAAOm9F,EAAIn9F,KAAKnE,KAAMmtC,GAAQ,CAAC,GAAKm0D,EAAIthG,KAAMmtC,GAAQ,CAAC,GACtE,IAAIywC,EAAMv3E,EAAU0S,eACpB1S,EAAU0S,eAAiB,CAAC,EAC5B,IAAI0rF,EAAS,IAAIjuD,EAAUt0B,GAC3BliB,KAAK05E,wBAAyB,EAC9B,IAAK,IAAIn7E,EAAI89C,EAAO17C,OAAQpC,KAAM,CAC9B,GAAI6oG,EACA,MAAO7oG,EAAI,GAAK89C,EAAO99C,GAAG+B,MAAMkC,KAAO65C,EAAO99C,EAAI,GAAGoF,IAAInB,IACrDjE,IAERkmG,EAAO1gE,kBAAkBsY,EAAO99C,IAChCkmG,EAAOzgG,MAAQzF,EACfyB,KAAKqG,UAAY6b,EAAQ7b,UAAYo+F,EACrC,IAAI4C,EAAY/F,EAAIn9F,KAAOm9F,EAAIn9F,KAAKnE,KAAMmtC,GAAQ,CAAC,GAAKm0D,EAAIthG,KAAMmtC,GAAQ,CAAC,GACtE1iC,QAAwBrE,IAAdihG,IACX58F,EAAS48F,GACb5C,EAAOlhE,gBAAgB8Y,EAAO99C,GAClC,CACAkmG,EAAO53D,SACP7sC,KAAKqG,UAAY6b,EAAQ7b,UAAYA,EACrCrG,KAAK05E,wBAAyB,EAC9BrzE,EAAU0S,eAAiB6kE,EAC3Bv3E,EAAUu/F,yBACNv/F,EAAUg2C,OAAO,IACjBh2C,EAAU09B,kBAAkB19B,EAAUg2C,OAAO,IACjD,IAAIirD,EAAOtnG,KAAKgsB,SAASwrE,iBAKzB,OAJAx3F,KAAKy2E,iBACLz2E,KAAK42E,oBACD0wB,GAAQA,EAAKtnE,MAAQsnE,EAAK/7C,IAC1BvrD,KAAKgsB,SAASqoD,iBAAiBizB,EAAKtnE,MACjCv1B,CAvCG,CAwCd,EACAzK,KAAKquE,oBAAsB,WAClBruE,KAAKu0B,oBAAqBv0B,KAAK05E,wBAEpC15E,KAAK0hD,YAAYjF,eACrB,EACAz8C,KAAKu5E,gBAAkB,WACnB,IAAI5vD,EAAO,GACX,GAAI3pB,KAAKu0B,oBAAsBv0B,KAAK05E,uBAAwB,CAGxD,IAFA,IAAIr9B,EAASr8C,KAAK0hD,YAAYlF,UAAUH,OACpCkrD,EAAM,GACDhpG,EAAI,EAAGA,EAAI89C,EAAO17C,OAAQpC,IAC/BgpG,EAAI/mG,KAAKR,KAAKkiB,QAAQwiB,aAAa2X,EAAO99C,KAE9C,IAAIi7E,EAAKx5E,KAAKkiB,QAAQu0B,cAAc+S,sBACpC7/B,EAAO49E,EAAI3+F,KAAK4wE,GACZ7vD,EAAKhpB,SAAW4mG,EAAI5mG,OAAS,GAAK64E,EAAG74E,SACrCgpB,EAAO,GACf,MACU3pB,KAAKqG,UAAUyb,YACrB6H,EAAO3pB,KAAKkiB,QAAQwiB,aAAa1kC,KAAKgwB,sBAE1C,OAAOrG,CACX,EACA3pB,KAAK2mG,wBAA0B,SAAUxoG,EAAG42B,GACxC,GAAI/0B,KAAKu0B,oBAAsBv0B,KAAK05E,uBAAwB,CACxD,IAAIp5D,EAAQtgB,KAAK0hD,YAAYrF,OAAO,GACpC,GAAIr8C,KAAK0hD,YAAY5/B,WAAaiT,GAAU/0B,KAAK0hD,YAAY3sB,OACzD,OACJ,IAAIhB,EAAMgB,GAAU/0B,KAAK0hD,YAAY3sB,OAC/BzU,EAAMmL,QAAUnL,EAAMhgB,MAAQggB,EAAM3c,IAAM2c,EAAMhgB,MAChDggB,EAAMmL,OACRsI,EAAIvxB,KAAOuyB,EAAOvyB,KACfxC,KAAKkiB,QAAQimC,wBAAwBp0B,EAAIvxB,IAAKuxB,EAAItxB,QAAQA,QAAUsyB,EAAOtyB,OAC9EzC,KAAK0hD,YAAYjF,cAAcz8C,KAAK0hD,YAAYne,mBAEhDvjC,KAAK0hD,YAAYkkD,wBACzB,CACJ,EACA5lG,KAAKknE,QAAU,SAAUC,EAAQ90D,EAASm1F,GAGtC,GAFAn1F,EAAUA,GAAW,CAAC,EACtBA,EAAQ80D,OAASA,GAAU90D,EAAQ80D,YACb/gE,GAAlBiM,EAAQ80D,OAAqB,CAC7B,IAAI7mD,EAAQtgB,KAAKqG,UAAUyb,UACrB9hB,KAAKqG,UAAUwvB,eACf71B,KAAKqG,UAAUinB,WACrBjb,EAAQ80D,OAASnnE,KAAKkiB,QAAQwiB,aAAapkB,EAC/C,CACAtgB,KAAK0zE,QAAQh4D,IAAIrJ,GACjB,IAAIgqC,EAASr8C,KAAK0zE,QAAQxM,QAAQlnE,KAAKkiB,SACvC,IAAKm6B,EAAO17C,OACR,OAAO,EACX,IAAI0F,EAAYrG,KAAK0hD,YAChB8lD,GACDnhG,EAAUo2C,cAAcJ,EAAO,IACnC,IAAK,IAAI99C,EAAI89C,EAAO17C,OAAQpC,KACxB8H,EAAUq2C,SAASL,EAAO99C,IAAI,GAGlC,OAFI+hB,GAASja,EAAUm2C,UAAUuX,aAAazzC,EAAMhgB,QAChD+F,EAAUq2C,SAASp8B,GAAO,GACvB+7B,EAAO17C,MAClB,EACAX,KAAKklG,gBAAkB,SAAU93D,EAAKq6D,GAClC,IAAInnF,EAAQtgB,KAAKqG,UAAUk9B,kBACvB+T,EAAch3B,EAAMmL,QAAUnL,EAAM3c,IACpC+jG,EAAa1nG,KAAKkiB,QAAQE,yBAAyB9B,EAAMmL,QACzDzrB,KAAKqG,UAAU0wC,iBACf2wD,EAAWjlG,OAASzC,KAAKqG,UAAU0wC,gBACvC,IAAIzwC,EAAOtG,KAAKkiB,QAAQi4B,yBAAyButD,EAAWllG,IAAM4qC,EAAKs6D,EAAWjlG,QAClF,GAAK6d,EAAMwB,UAKHiT,EAASzuB,OAJb,IAAI49F,EAAelkG,KAAKkiB,QAAQE,yBAAyBk1B,EAAch3B,EAAM3c,IAAM2c,EAAMhgB,OACrFy0B,EAAS/0B,KAAKkiB,QAAQi4B,yBAAyB+pD,EAAa1hG,IAAM4qC,EAAK82D,EAAazhG,QAK5F,GAAI60C,EAAa,CACb,IAAIopC,EAAWz+E,EAAM2f,WAAWtb,EAAMyuB,GACtC2rD,EAASj1D,OAASi1D,EAASpgF,KAC/B,KACK,CACGogF,EAAWz+E,EAAM2f,WAAWmT,EAAQzuB,GACxCo6E,EAASj1D,OAASi1D,EAAS/8E,GAC/B,CAEA,GADA+8E,EAAS1kC,cAAgB0rD,EAAWjlG,OAC/BzC,KAAKqG,UAAUkuB,mBAIhB,GAAIkzE,EACA,IAAIE,EAAWrnF,EAAMmL,YAJzBzrB,KAAKqG,UAAUq2C,SAASp8B,GAM5BtgB,KAAKqG,UAAUq2C,SAASgkC,GACpBinB,GACA3nG,KAAKqG,UAAUwtD,eAAe8zC,EACtC,EACA3nG,KAAK4tE,oBAAsB,SAAUxgC,GAIjC,IAHA,IAAIlrB,EAAUliB,KAAKkiB,QACfoyD,EAAMpyD,EAAQw/B,YACdvkC,EAAMm3D,EAAIj4B,OACL99C,EAAI4e,EAAIxc,OAAQpC,KAAM,CAC3B,IAAI+hB,EAAQnD,EAAI5e,GAChB,GAAI+hB,EAAMwB,UAAW,CACjB,IAAI8lF,EAAQ1lF,EAAQ2T,aAAavV,EAAMhgB,MAAMkC,IAAK8d,EAAMhgB,MAAMmC,QAC9D6d,EAAMhgB,MAAMkC,IAAMolG,EAAMtnG,MAAMkC,IAC9B8d,EAAMhgB,MAAMmC,OAASmlG,EAAMtnG,MAAMmC,OACjC6d,EAAM3c,IAAInB,IAAMolG,EAAMjkG,IAAInB,IAC1B8d,EAAM3c,IAAIlB,OAASmlG,EAAMjkG,IAAIlB,MACjC,CACJ,CACA6xE,EAAIsxB,yBACJ,IAAIiC,EAAQ,GACZ,IAAStpG,EAAI4e,EAAIxc,OAAQpC,KAAM,CACvB+hB,EAAQnD,EAAI5e,GAChBspG,EAAMjnG,QAAQshB,EAAQwiB,aAAapkB,GACvC,CACI8sB,EAAM,EACNy6D,EAAMjnG,QAAQinG,EAAM7tF,OAEpB6tF,EAAMrnG,KAAKqnG,EAAMzmG,SACrB,IAAS7C,EAAI4e,EAAIxc,OAAQpC,KAAM,CACvB+hB,EAAQnD,EAAI5e,GAAhB,IACI8xC,EAAM/vB,EAAMyB,QAChBG,EAAQvf,QAAQ2d,EAAOunF,EAAMtpG,IAC7B+hB,EAAMhgB,MAAMkC,IAAM6tC,EAAI/vC,MAAMkC,IAC5B8d,EAAMhgB,MAAMmC,OAAS4tC,EAAI/vC,MAAMmC,MACnC,CACA6xE,EAAIvwC,kBAAkBuwC,EAAIj4B,OAAO,GACrC,EACAr8C,KAAKmlG,WAAa,SAAU/3D,EAAKq6D,EAAMK,GACnC,IAAI5lF,EAAUliB,KAAKkiB,QACfoyD,EAAMpyD,EAAQw/B,YACdphC,EAAQg0D,EAAI/wC,kBAChB,IAAIjjB,EAAMwB,YACNxB,EAAQ4B,EAAQ2T,aAAavV,EAAMhgB,MAAMkC,IAAK8d,EAAMhgB,MAAMmC,QAC1D6d,EAAMmL,QAAiB,GAAR2hB,EAAY9sB,EAAMhgB,MAAQggB,EAAM3c,IAC/C3D,KAAK0hD,YAAYhF,SAASp8B,IACtBwnF,GAJR,CAOA,IAAI3gC,EAASjlD,EAAQwiB,aAAapkB,GAC9BogE,EAAWj1E,EAAKyW,EAASilD,EAAQ/5B,GACjCszC,IACAA,EAASj1D,QAAiB,GAAR2hB,EAAYszC,EAASpgF,MAAQogF,EAAS/8E,IACxD3D,KAAKkiB,QAAQw0C,OAAOgqB,GACpB1gF,KAAK0hD,YAAYhF,SAASgkC,GAC1B1gF,KAAKgsB,SAASmJ,qBAAqB,KAAM,KAEzCsyE,GACAznG,KAAK0hD,YAAYmS,eAAevzC,EAAMmL,OAV1C,CAWJ,EACAzrB,KAAKslG,aAAe,WAChB,IAAIpjF,EAAUliB,KAAKkiB,QACfoyD,EAAMpyD,EAAQw/B,YACdrF,EAASi4B,EAAIj4B,OACb75C,GAAO,EACPulG,EAAgB1rD,EAAOlhC,QAAO,SAAU7c,GACxC,GAAIA,EAAEmtB,OAAOjpB,KAAOA,EAChB,OAAO,EACXA,EAAMlE,EAAEmtB,OAAOjpB,GACnB,IACA,GAAK65C,EAAO17C,QAAUonG,EAAcpnG,QAAU07C,EAAO17C,OAAS,EA2BzD,CACDonG,EAAc58F,SAAQ,SAAU7M,GAC5Bg2E,EAAIzgB,eAAev1D,EAAEmtB,OACzB,IACA,IAAIu8E,EAAS,EACTC,EAAW/iD,IACXgjD,EAAe7rD,EAAO/wC,KAAI,SAAUhN,GACpC,IAAIuB,EAAIvB,EAAEmtB,OACNrc,EAAO8S,EAAQ7f,QAAQxC,EAAE2C,KACzB2lG,EAAc/4F,EAAKilC,OAAOx0C,EAAE4C,QAAQk4C,OAAO,OAO/C,OANoB,GAAhBwtD,IACAA,EAAc,GACdtoG,EAAE4C,OAASulG,IACXA,EAASnoG,EAAE4C,QACX0lG,EAAcF,IACdA,EAAWE,GACRA,CACX,IACA9rD,EAAOlxC,SAAQ,SAAU7M,EAAGC,GACxB,IAAIsB,EAAIvB,EAAEmtB,OACNlsB,EAAIyoG,EAASnoG,EAAE4C,OACf1C,EAAImoG,EAAa3pG,GAAK0pG,EACtB1oG,EAAIQ,EACJmiB,EAAQqjB,OAAO1lC,EAAG2c,EAAKzP,aAAa,IAAKxN,EAAIQ,IAE7CmiB,EAAQhc,OAAO,IAAIjE,EAAMpC,EAAE2C,IAAK3C,EAAE4C,OAAQ5C,EAAE2C,IAAK3C,EAAE4C,OAASlD,EAAIQ,IACpEzB,EAAEgC,MAAMmC,OAASnE,EAAEqF,IAAIlB,OAASulG,EAChC1pG,EAAEgC,MAAMkC,IAAMlE,EAAEqF,IAAInB,IAAM3C,EAAE2C,IAC5BlE,EAAEmtB,OAASntB,EAAEqF,GACjB,IACA2wE,EAAIvwC,kBAAkBsY,EAAO,IAC7Br8C,KAAKgsB,SAASosD,eACdp4E,KAAKgsB,SAASotD,mBAClB,KA5DiE,CAC7D,IAAI94D,EAAQtgB,KAAKqG,UAAUinB,WACvB86E,EAAK9nF,EAAMhgB,MAAMkC,IAAK6lG,EAAK/nF,EAAM3c,IAAInB,IACrC8lG,EAAaF,GAAMC,EACvB,GAAIC,EAAY,CACZ,IACIl5F,EADAhD,EAAMpM,KAAKkiB,QAAQmc,YAEvB,GACIjvB,EAAOpP,KAAKkiB,QAAQ7f,QAAQgmG,SACvB,OAAOlmG,KAAKiN,MAAWi5F,EAAKj8F,GACrC,GACIgD,EAAOpP,KAAKkiB,QAAQ7f,QAAQ+lG,SACvB,OAAOjmG,KAAKiN,MAAWg5F,EAAK,GACjCA,EAAK,IACLA,EAAK,GACLC,GAAMj8F,IACNi8F,EAAKj8F,EAAM,EACnB,CACA,IAAImhB,EAAQvtB,KAAKkiB,QAAQmoC,gBAAgB+9C,EAAIC,GAC7C96E,EAAQvtB,KAAKuoG,aAAah7E,EAAO+6E,GACjCtoG,KAAKkiB,QAAQqjB,OAAO,CAAE/iC,IAAK4lG,EAAI3lG,OAAQ,GAAK8qB,EAAM3kB,KAAK,MAAQ,MAC1D0/F,IACDhoF,EAAMhgB,MAAMmC,OAAS,EACrB6d,EAAM3c,IAAIlB,OAAS8qB,EAAMA,EAAM5sB,OAAS,GAAGA,QAE/CX,KAAKqG,UAAUsiC,SAASroB,EAC5B,CAmCJ,EACAtgB,KAAKuoG,aAAe,SAAUh7E,EAAOi7E,GACjC,IACIC,EAAQC,EAAOC,EADfC,GAAgB,EAAMC,GAAiB,EAE3C,OAAOt7E,EAAMjiB,KAAI,SAAU8D,GACvB,IAAIvK,EAAIuK,EAAK9M,MAAM,2BACnB,OAAKuC,EAES,MAAV4jG,GACAA,EAAS5jG,EAAE,GAAGlE,OACd+nG,EAAQ7jG,EAAE,GAAGlE,OACbgoG,EAAO9jG,EAAE,GAAGlE,OACLkE,IAEP4jG,EAASC,EAAQC,GAAQ9jG,EAAE,GAAGlE,OAASkE,EAAE,GAAGlE,OAASkE,EAAE,GAAGlE,SAC1DkoG,GAAiB,GACjBJ,GAAU5jG,EAAE,GAAGlE,SACfioG,GAAgB,GAChBH,EAAS5jG,EAAE,GAAGlE,SACd8nG,EAAS5jG,EAAE,GAAGlE,QACd+nG,EAAQ7jG,EAAE,GAAGlE,SACb+nG,EAAQ7jG,EAAE,GAAGlE,QACbgoG,EAAO9jG,EAAE,GAAGlE,SACZgoG,EAAO9jG,EAAE,GAAGlE,QACTkE,GAjBI,CAACuK,EAkBhB,IAAG9D,IAAIk9F,EAAYM,EACfF,EAAgBC,EAAiBE,EAAaD,EAAYE,GAC9D,SAASnjD,EAAOxnD,GACZ,OAAOme,EAAKzP,aAAa,IAAK1O,EAClC,CACA,SAASyqG,EAAUjkG,GACf,OAAQA,EAAE,GAAYghD,EAAO4iD,GAAU5jG,EAAE,GACnCghD,EAAO6iD,EAAQ7jG,EAAE,GAAGlE,OAASgoG,GAC7B9jG,EAAE,GAAGlC,QAAQ,aAAc,OAFlBkC,EAAE,EAGrB,CACA,SAASkkG,EAAWlkG,GAChB,OAAQA,EAAE,GAAYghD,EAAO4iD,EAASC,EAAQ7jG,EAAE,GAAGlE,QAAUkE,EAAE,GACzDghD,EAAO8iD,GACP9jG,EAAE,GAAGlC,QAAQ,aAAc,OAFlBkC,EAAE,EAGrB,CACA,SAASmkG,EAAQnkG,GACb,OAAQA,EAAE,GAAYghD,EAAO4iD,GAAU5jG,EAAE,GACnCghD,EAAO8iD,GACP9jG,EAAE,GAAGlC,QAAQ,aAAc,OAFlBkC,EAAE,EAGrB,CACJ,CACH,GAAEjC,KAAK0wE,EAAOzwE,WAIf6D,EAAQggG,gBAAkB,SAAUvoG,GAChC,IAAI+jB,EAAU/jB,EAAE+jB,QACZA,IAAYA,EAAQw/B,cACpBx/B,EAAQ0tE,kBAAoB,GAC5B1tE,EAAQ7b,UAAUy/F,iBAClB5jF,EAAQw/B,YAAcx/B,EAAQ7b,WAElCrG,KAAK0hD,YAAcx/B,GAAWA,EAAQw/B,YACtC,IAAIszB,EAAa72E,EAAE62E,WACfA,IACAA,EAAWtzB,YAAYnoC,IAAI,WAAYvZ,KAAK0lG,aAC5C1wB,EAAWtzB,YAAYnoC,IAAI,cAAevZ,KAAK2lG,gBAC/C3wB,EAAWtzB,YAAYnoC,IAAI,cAAevZ,KAAKwmG,gBAC/CxxB,EAAWtzB,YAAYnoC,IAAI,eAAgBvZ,KAAKymG,iBAChDzxB,EAAWtzB,YAAYp7C,KAAKiT,IAAI,SAAUvZ,KAAK2mG,yBAC/C3xB,EAAWtzB,YAAY3sB,OAAOxb,IAAI,SAAUvZ,KAAK2mG,0BAEjDzkF,IACAA,EAAQw/B,YAAYroC,GAAG,WAAYrZ,KAAK0lG,aACxCxjF,EAAQw/B,YAAYroC,GAAG,cAAerZ,KAAK2lG,gBAC3CzjF,EAAQw/B,YAAYroC,GAAG,cAAerZ,KAAKwmG,gBAC3CtkF,EAAQw/B,YAAYroC,GAAG,eAAgBrZ,KAAKymG,iBAC5CvkF,EAAQw/B,YAAYp7C,KAAK+S,GAAG,SAAUrZ,KAAK2mG,yBAC3CzkF,EAAQw/B,YAAY3sB,OAAO1b,GAAG,SAAUrZ,KAAK2mG,0BAE7CzkF,GAAWliB,KAAKu0B,mBAAqBrS,EAAQ7b,UAAUkuB,oBACnDrS,EAAQ7b,UAAUkuB,kBAClBv0B,KAAKwmG,iBAELxmG,KAAKymG,kBAEjB,EA0CA//F,EAAQ4/F,YAAcA,EACtB7/F,EAAQ,YAAYqV,cAAcw3D,EAAOzwE,UAAW,SAAU,CAC1DomG,kBAAmB,CACfvtF,IAAK,SAAUhS,GACX48F,EAAYtmG,MACR0J,EACA1J,KAAKqZ,GAAG,YAAaka,GAGrBvzB,KAAKuZ,IAAI,YAAaga,EAE9B,EACAtyB,OAAO,GAEXioG,kBAAmB,CACfxtF,IAAK,SAAUhS,GACX1J,KAAKqkG,oBAAsB36F,CAC/B,EACAzI,OAAO,IAIf,IAEAhD,IAAIC,OAAO,6BAA6B,CAAC,UAAU,UAAU,SAAS,cAAc,SAASuI,EAASC,EAASvD,GAAQ,aACvH,IAAIlB,EAAQwE,EAAQ,eAAexE,MAC/Bc,EAAW2D,EAAQ3D,SAAW,WAAc,GAChD,WACI/C,KAAK4D,mBAAqB,KAC1B5D,KAAK6D,kBAAoB,KACzB7D,KAAK8D,cAAgB,SAAUoe,EAASwkD,EAAWlkE,GAC/C,IAAI4M,EAAO8S,EAAQ7f,QAAQG,GAC3B,OAAIxC,KAAK4D,mBAAmBzB,KAAKiN,GACtB,QACM,gBAAbs3D,GACG1mE,KAAK6D,mBACL7D,KAAK6D,kBAAkB1B,KAAKiN,GACxB,MACJ,EACX,EACApP,KAAKiE,mBAAqB,SAAUie,EAASwkD,EAAWlkE,GACpD,OAAO,IACX,EACAxC,KAAKmpG,iBAAmB,SAAUjnF,EAAS1f,EAAKC,GAC5C,IAAIgb,EAAK,KACLrO,EAAO8S,EAAQ7f,QAAQG,GACvB4mG,EAAah6F,EAAKurC,OAAOl9B,GAC7B,IAAmB,GAAf2rF,EAAJ,CAEA,IAAIlpF,EAAczd,GAAU2M,EAAKzO,OAC7By9B,EAASlc,EAAQmc,YACjBpe,EAAWzd,EACX2d,EAAS3d,EACb,QAASA,EAAM47B,EAAQ,CACnB,IAAI0X,EAAQ5zB,EAAQ7f,QAAQG,GAAKm4C,OAAOl9B,GACxC,IAAc,GAAVq4B,EAAJ,CAEA,GAAIA,GAASszD,EAAY,CACrB,IAAIzqG,EAAQujB,EAAQne,WAAWvB,EAAK,GACpC,IAAK7D,GAAwB,WAAfA,EAAMqC,KAChB,KACR,CACAmf,EAAS3d,CANG,CAOhB,CACA,GAAI2d,EAASF,EAAU,CACnB,IAAIG,EAAY8B,EAAQ7f,QAAQ8d,GAAQxf,OACxC,OAAO,IAAIsB,EAAMge,EAAUC,EAAaC,EAAQC,EACpD,CAnBU,CAoBd,EACApgB,KAAKqE,oBAAsB,SAAU6d,EAASqiC,EAAS/hD,EAAKC,EAAQ42D,GAChE,IAAI/4D,EAAQ,CAAEkC,IAAKA,EAAKC,OAAQA,EAAS,GACrCkB,EAAMue,EAAQ+2C,oBAAoB1U,EAASjkD,EAAO+4D,GACtD,GAAK11D,EAAL,CAEA,IAAI60D,EAAKt2C,EAAQ0pB,YAAYjoC,EAAInB,KAOjC,OANU,MAANg2D,IACAA,EAAKt2C,EAAQpe,cAAcH,EAAInB,MACzB,SAANg2D,GAAiB70D,EAAInB,IAAMlC,EAAMkC,MACjCmB,EAAInB,MACJmB,EAAIlB,OAASyf,EAAQ7f,QAAQsB,EAAInB,KAAK7B,QAEnCsB,EAAM2f,WAAWthB,EAAOqD,EARrB,CASd,EACA3D,KAAKsE,oBAAsB,SAAU4d,EAASqiC,EAAS/hD,EAAKC,EAAQ42D,GAChE,IAAI11D,EAAM,CAAEnB,IAAKA,EAAKC,OAAQA,GAC1BnC,EAAQ4hB,EAAQ2gC,oBAAoB0B,EAAS5gD,GACjD,GAAKrD,EAIL,OAFAA,EAAMmC,SACNkB,EAAIlB,SACGR,EAAM2f,WAAWthB,EAAOqD,EACnC,CACH,GAAEf,KAAKG,EAASF,UAEjB,IAEA5E,IAAIC,OAAO,uBAAuB,CAAC,UAAU,UAAU,SAAS,mBAAmB,cAAc,YAAY,eAAe,SAASuI,EAASC,EAASvD,GAAQ,aAC/J,IAAImrE,EAAc7nE,EAAQ,mBAAmB6nE,YACzCv3D,EAAMtQ,EAAQ,cACdxE,EAAQwE,EAAQ,YAAYxE,MAC5Bqa,EAAM7V,EAAQ,aAAa6V,IAC/B,SAAS+sF,EAAa/7F,EAAO65D,EAAQmiC,GACjC,IAAI78C,EAAQ,EACR7/C,EAAOU,EAAM3M,OAAS,EAC1B,MAAO8rD,GAAS7/C,EAAM,CAClB,IAAIkvD,EAAOrP,EAAQ7/C,GAAS,EACxBnN,EAAI6pG,EAAWniC,EAAQ75D,EAAMwuD,IACjC,GAAIr8D,EAAI,EACJgtD,EAAQqP,EAAM,MACb,MAAIr8D,EAAI,GAGT,OAAOq8D,EAFPlvD,EAAOkvD,EAAM,CAEH,CAClB,CACA,QAASrP,EAAQ,EACrB,CACA,SAAS88C,EAAgBrnF,EAAS1f,EAAK4qC,GACnC,IAAIrM,EAAc7e,EAAQ88C,iBAAiBnlC,KAAK53B,EAAMsgB,eACtD,GAAKwe,EAAYpgC,OAAjB,CAEA,IAAIpC,EAAI8qG,EAAatoE,EAAa,CAAEv+B,IAAKA,EAAKC,QAAS,GAAKR,EAAMsgB,eAC9DhkB,EAAI,IACJA,GAAKA,EAAI,GACTA,GAAKwiC,EAAYpgC,OACjBpC,EAAI6uC,EAAM,EAAI,EAAIrM,EAAYpgC,OAAS,EAC5B,IAANpC,GAAW6uC,EAAM,IACtB7uC,EAAIwiC,EAAYpgC,OAAS,GAC7B,IAAIk/B,EAAakB,EAAYxiC,GAC7B,GAAKshC,GAAeuN,EAApB,CAEA,GAAIvN,EAAWr9B,MAAQA,EAAK,CACxB,GACIq9B,EAAakB,EAAYxiC,GAAK6uC,SACzBvN,GAAcA,EAAWr9B,MAAQA,GAC1C,IAAKq9B,EACD,OAAOkB,EAAY96B,OAC3B,CACA,IAAIujG,EAAU,GACdhnG,EAAMq9B,EAAWr9B,IACjB,GACIgnG,EAAQp8D,EAAM,EAAI,UAAY,QAAQvN,GACtCA,EAAakB,EAAYxiC,GAAK6uC,SACzBvN,GAAcA,EAAWr9B,KAAOA,GACzC,OAAOgnG,EAAQ7oG,QAAU6oG,CAdf,CAVA,CAyBd,CACA9iG,EAAQokE,gBAAkB,SAAUx3C,EAAQ8Z,GACxC,IAAIlrB,EAAUoR,EAAOpR,QAChBA,EAAQqsD,gBACTrsD,EAAQqsD,cAAgB,IAAID,EAAYpsD,GACxCA,EAAQqsD,cAAc3hC,OAAOtZ,IAEjC,IAAIS,EAAMT,EAAO2hB,oBACbzyC,EAAMuxB,EAAIvxB,IACVinG,EAAYvnF,EAAQqsD,cAAcoB,gBAAgBntE,GAAK2Y,QAAO,SAAU/V,GACxE,MAAiB,eAAVA,EAAEpE,IACb,IAAG,GACCyoG,EACAA,EAAUplF,UAGV7hB,GAAO4qC,EAEX,IACIs8D,EADA3oE,EAAcwoE,EAAgBrnF,EAAS1f,EAAK4qC,GAEhD,GAAIrM,EAAa,CACb,IAAIlB,EAAakB,EAAY,GAC7BhN,EAAItxB,QAAUo9B,EAAW9L,KAAmC,iBAArB8L,EAAWp9B,OAC5Co9B,EAAW9L,IAAI+yC,GACfjnC,EAAWp9B,SAAW,EAC5BsxB,EAAIvxB,IAAMq9B,EAAWr9B,IACrBknG,EAAap2E,EAAOtH,SAASgS,aAAa+B,aAAahM,EAAIvxB,IAC/D,KACK,IAAIinG,EACL,OAGAC,EAAa,CACT//E,KAAM,CAACrN,EAAI,gBACX/J,UAAW,SAEnB,CACA+gB,EAAOpR,QAAQw0C,OAAO3iC,EAAIvxB,KAC1B8wB,EAAOjtB,UAAU+tB,eAAeL,GAChC,IAAI3uB,EAAI,CACJ5C,IAAKuxB,EAAIvxB,IACTstE,YAAY,EACZR,aAAa,EACbn9D,GAAI4E,EAAI3E,cAAc,OACtBpR,KAAM,eAENmR,EAAK/M,EAAE+M,GAAGH,YAAY+E,EAAI3E,cAAc,QACxCu3F,EAAQvkG,EAAE+M,GAAGH,YAAY+E,EAAI3E,cAAc,QAC/Cu3F,EAAMp3F,UAAY,sBAAwBm3F,EAAWn3F,UACrD,IAAI+C,EAAOge,EAAOtH,SAAS0X,aACtByF,iBAAiBpV,GAAKze,KAC3Bq0F,EAAMn3F,MAAM8C,KAAOA,EAAOge,EAAOtH,SAASikD,YAAc,EAAI,KAC5D7qE,EAAE+M,GAAGI,UAAY,uBACjBJ,EAAGI,UAAY,gBAAkBm3F,EAAWn3F,UAC5CJ,EAAGe,UAAYw2F,EAAW//E,KAAK/gB,KAAK,QACpCuJ,EAAGH,YAAY+E,EAAI3E,cAAc,QACjC,IAAIk6B,EAAK,SAAUz0B,EAAGoP,EAAQvD,GAC1B,GAAe,IAAXuD,IAA+B,QAAdvD,GAAqC,WAAdA,GAExC,OADAte,EAAEif,UACK,CAAEsI,QAAS,OAE1B,EACAvnB,EAAEif,QAAU,WACJiP,EAAOnB,cAAcC,iBAEzBkB,EAAOmgD,WAAWlnC,sBAAsBD,GACxCpqB,EAAQqsD,cAAcQ,iBAAiB3pE,GACvCkuB,EAAO/Z,IAAI,kBAAmBnU,EAAEif,SAChCiP,EAAO/Z,IAAI,gBAAiBnU,EAAEif,SAC9BiP,EAAO/Z,IAAI,UAAWnU,EAAEif,SACxBiP,EAAO/Z,IAAI,SAAUnU,EAAEif,SAC3B,EACAiP,EAAOmgD,WAAWhnC,mBAAmBH,GACrChZ,EAAOja,GAAG,kBAAmBjU,EAAEif,SAC/BiP,EAAOja,GAAG,gBAAiBjU,EAAEif,SAC7BiP,EAAOja,GAAG,UAAWjU,EAAEif,SACvBiP,EAAOja,GAAG,SAAUjU,EAAEif,SACtBiP,EAAOpR,QAAQqsD,cAAca,cAAchqE,GAC3CA,EAAE+M,GAAGy3F,YAAct2E,EAAOvH,MAAMtD,KAAK6K,GACrCA,EAAOtH,SAASmJ,qBAAqB,KAAM,GAAK,CAAExD,OAAQvsB,EAAE+M,GAAG8mB,cACnE,EACAliB,EAAIjQ,gBAAgB,y7BAA07B,oBAAoB,EAEl+B,IAEA7I,IAAIC,OAAO,UAAU,CAAC,UAAU,UAAU,SAAS,cAAc,YAAY,aAAa,mBAAmB,kBAAkB,uBAAuB,2BAA2B,4BAA4B,kBAAkB,mBAAmB,6BAA6B,qBAAqB,uBAAuB,aAAa,qBAAqB,SAASuI,EAASC,EAASvD,GAKxX,aACAsD,EAAQ,iBAARA,CAA0BC,GAC1B,IAAIqQ,EAAMtQ,EAAQ,aACdxE,EAAQwE,EAAQ,WAAWxE,MAC3BqxE,EAAS7sE,EAAQ,YAAY6sE,OAC7BxY,EAAcr0D,EAAQ,kBAAkBq0D,YACxCtN,EAAc/mD,EAAQ,iBAAiB+mD,YACvCq8C,EAAWpjG,EAAQ,sBAAsBwwF,gBAC7CxwF,EAAQ,0BACRA,EAAQ,2BACRA,EAAQ,iBACRA,EAAQ,kBACRA,EAAQ,4BACRA,EAAQ,oBACRA,EAAQ,sBACRC,EAAQuY,OAASxY,EAAQ,YACzBC,EAAQojG,KAAO,SAAU33F,EAAIE,GACzB,GAAiB,iBAANF,EAAgB,CACvB,IAAI43F,EAAM53F,EAEV,GADAA,EAAKL,SAASqC,eAAe41F,IACxB53F,EACD,MAAM,IAAIsI,MAAM,4BAA8BsvF,EACtD,CACA,GAAI53F,GAAMA,EAAG63F,KAAO73F,EAAG63F,IAAI12E,kBAAkBggD,EACzC,OAAOnhE,EAAG63F,IAAI12E,OAClB,IAAIryB,EAAQ,GACZ,GAAIkR,GAAM,kBAAkBhQ,KAAKgQ,EAAG83F,SAAU,CAC1C,IAAIC,EAAU/3F,EACdlR,EAAQipG,EAAQjpG,MAChBkR,EAAK4E,EAAI3E,cAAc,OACvB83F,EAAQzgF,WAAWie,aAAav1B,EAAI+3F,EACxC,MACS/3F,IACLlR,EAAQkR,EAAGgB,YACXhB,EAAGe,UAAY,IAEnB,IAAIhP,EAAMwC,EAAQyjG,kBAAkBlpG,GAChCqyB,EAAS,IAAIggD,EAAO,IAAIu2B,EAAS13F,GAAKjO,EAAKmO,GAC3C23F,EAAM,CACNl4F,SAAU5N,EACVovB,OAAQA,EACR0jD,SAAU1jD,EAAOyjD,OAAOtuD,KAAK6K,EAAQ,OAQzC,OANI42E,IACAF,EAAIjhE,SAAWmhE,GACnB52E,EAAOja,GAAG,WAAW,WACjB2wF,EAAI12E,OAAO/e,UAAUy1F,IAAM,IAC/B,IACA12E,EAAO/e,UAAUy1F,IAAM12E,EAAO02E,IAAMA,EAC7B12E,CACX,EACA5sB,EAAQyjG,kBAAoB,SAAUxgF,EAAMsd,GACxC,IAAI/iC,EAAM,IAAI42D,EAAYnxC,EAAMsd,GAEhC,OADA/iC,EAAIm4D,eAAe,IAAI7O,GAChBtpD,CACX,EACAwC,EAAQzE,MAAQA,EAChByE,EAAQ4sE,OAASA,EACjB5sE,EAAQo0D,YAAcA,EACtBp0D,EAAQ8mD,YAAcA,EACtB9mD,EAAQuwF,gBAAkB4S,EAC1BnjG,EAAQsY,QAAUtY,EAAQuY,OAAOD,OAEjC,IAAe,WACC/gB,IAAIwI,QAAQ,CAAC,YAAY,SAASrH,GAC1BA,IACAA,EAAE6f,OAAOC,MAAK,GACd9f,EAAElB,OAASD,IAAIC,QAEnB,IAAI8I,EAAS,WACT,OAAOhH,IACV,CAFY,GAQb,IAAK,IAAIoL,KALJpE,GAA2B,oBAAVC,SAAuBD,EAASC,QACjDD,GAAyB,oBAARo9B,OAAqBp9B,EAASo9B,MAE/Cp9B,EAAO/I,MACR+I,EAAO/I,IAAMmB,GACDA,EAAOA,EAAE8d,eAAe9R,KACpCpE,EAAO/I,IAAImN,GAAOhM,EAAEgM,IACxBpE,EAAO/I,IAAI,WAAa+I,EAAO/I,IACgCkF,IAC3DA,EAAOuD,QAAUM,EAAO/I,IAEhC,GACH,CArBE,E,oBChipBf,GAEC,WACG,aAEA,IAAIwf,EAAK,CACL2sF,WAAY,OACZC,SAAU,OACVC,SAAU,OACVC,cAAe,OACfr/E,OAAQ,UACRs/E,YAAa,eACbr6C,KAAM,MACNs6C,SAAU,OACV9gF,KAAM,YACN+gF,OAAQ,WACR/3C,YAAa,2FACbvnD,IAAK,sBACLu/F,WAAY,wBACZC,aAAc,aACdC,KAAM,SAGV,SAASC,EAAQ1/F,GAEb,OAAO2/F,EAAeC,EAAc5/F,GAAM/D,UAC9C,CAEA,SAAS4jG,EAASC,EAAKC,GACnB,OAAOL,EAAQrjG,MAAM,KAAM,CAACyjG,GAAK1qE,OAAO2qE,GAAQ,IACpD,CAEA,SAASJ,EAAeK,EAAYD,GAChC,IAAiDE,EAAkB9sG,EAAGgN,EAAG+/F,EAAIC,EAAKC,EAAeC,EAAYC,EAAab,EAAtHp/E,EAAS,EAAGkgF,EAAcP,EAAWzqG,OAAaqK,EAAS,GAC/D,IAAKzM,EAAI,EAAGA,EAAIotG,EAAaptG,IACzB,GAA6B,kBAAlB6sG,EAAW7sG,GAClByM,GAAUogG,EAAW7sG,QAEpB,GAA6B,kBAAlB6sG,EAAW7sG,GAAiB,CAExC,GADA+sG,EAAKF,EAAW7sG,GACZ+sG,EAAGpgG,KAEH,IADAmgG,EAAMF,EAAK1/E,GACNlgB,EAAI,EAAGA,EAAI+/F,EAAGpgG,KAAKvK,OAAQ4K,IAAK,CACjC,QAAWnF,GAAPilG,EACA,MAAM,IAAI5wF,MAAMqwF,EAAQ,gEAAiEQ,EAAGpgG,KAAKK,GAAI+/F,EAAGpgG,KAAKK,EAAE,KAEnH8/F,EAAMA,EAAIC,EAAGpgG,KAAKK,GACtB,MAGA8/F,EADKC,EAAGM,SACFT,EAAKG,EAAGM,UAGRT,EAAK1/E,KAOf,GAJIhO,EAAG6sF,SAASnoG,KAAKmpG,EAAGtqG,OAASyc,EAAG8sF,cAAcpoG,KAAKmpG,EAAGtqG,OAASqqG,aAAeQ,WAC9ER,EAAMA,KAGN5tF,EAAG+sF,YAAYroG,KAAKmpG,EAAGtqG,OAAyB,kBAARqqG,GAAoBjrC,MAAMirC,GAClE,MAAM,IAAItgG,UAAU+/F,EAAQ,0CAA2CO,IAO3E,OAJI5tF,EAAGyN,OAAO/oB,KAAKmpG,EAAGtqG,QAClB0qG,EAAcL,GAAO,GAGjBC,EAAGtqG,MACP,IAAK,IACDqqG,EAAMroF,SAASqoF,EAAK,IAAInjG,SAAS,GACjC,MACJ,IAAK,IACDmjG,EAAMthG,OAAO4Z,aAAaX,SAASqoF,EAAK,KACxC,MACJ,IAAK,IACL,IAAK,IACDA,EAAMroF,SAASqoF,EAAK,IACpB,MACJ,IAAK,IACDA,EAAM/uC,KAAKwvC,UAAUT,EAAK,KAAMC,EAAGr2F,MAAQ+N,SAASsoF,EAAGr2F,OAAS,GAChE,MACJ,IAAK,IACDo2F,EAAMC,EAAGS,UAAYv7F,WAAW66F,GAAKW,cAAcV,EAAGS,WAAav7F,WAAW66F,GAAKW,gBACnF,MACJ,IAAK,IACDX,EAAMC,EAAGS,UAAYv7F,WAAW66F,GAAKjuB,QAAQkuB,EAAGS,WAAav7F,WAAW66F,GACxE,MACJ,IAAK,IACDA,EAAMC,EAAGS,UAAYhiG,OAAO2gB,OAAO2gF,EAAIY,YAAYX,EAAGS,aAAev7F,WAAW66F,GAChF,MACJ,IAAK,IACDA,GAAOroF,SAASqoF,EAAK,MAAQ,GAAGnjG,SAAS,GACzC,MACJ,IAAK,IACDmjG,EAAMthG,OAAOshG,GACbA,EAAOC,EAAGS,UAAYV,EAAIr3D,UAAU,EAAGs3D,EAAGS,WAAaV,EACvD,MACJ,IAAK,IACDA,EAAMthG,SAASshG,GACfA,EAAOC,EAAGS,UAAYV,EAAIr3D,UAAU,EAAGs3D,EAAGS,WAAaV,EACvD,MACJ,IAAK,IACDA,EAAMpjG,OAAOpF,UAAUqF,SAAStF,KAAKyoG,GAAKplG,MAAM,GAAI,GAAGiK,cACvDm7F,EAAOC,EAAGS,UAAYV,EAAIr3D,UAAU,EAAGs3D,EAAGS,WAAaV,EACvD,MACJ,IAAK,IACDA,EAAMroF,SAASqoF,EAAK,MAAQ,EAC5B,MACJ,IAAK,IACDA,EAAMA,EAAIa,UACVb,EAAOC,EAAGS,UAAYV,EAAIr3D,UAAU,EAAGs3D,EAAGS,WAAaV,EACvD,MACJ,IAAK,IACDA,GAAOroF,SAASqoF,EAAK,MAAQ,GAAGnjG,SAAS,IACzC,MACJ,IAAK,IACDmjG,GAAOroF,SAASqoF,EAAK,MAAQ,GAAGnjG,SAAS,IAAI8X,cAC7C,MAEJvC,EAAG0yC,KAAKhuD,KAAKmpG,EAAGtqG,MAChBgK,GAAUqgG,IAGN5tF,EAAGyN,OAAO/oB,KAAKmpG,EAAGtqG,OAAW0qG,IAAeJ,EAAGT,KAK/CA,EAAO,IAJPA,EAAOa,EAAc,IAAM,IAC3BL,EAAMA,EAAInjG,WAAWvF,QAAQ8a,EAAGotF,KAAM,KAK1CW,EAAgBF,EAAGa,SAA2B,MAAhBb,EAAGa,SAAmB,IAAMb,EAAGa,SAASzjG,OAAO,GAAK,IAClF+iG,EAAaH,EAAGr2F,OAAS41F,EAAOQ,GAAK1qG,OACrC4qG,EAAMD,EAAGr2F,OAASw2F,EAAa,EAAID,EAAcjhG,OAAOkhG,GAAoB,GAC5EzgG,GAAUsgG,EAAGc,MAAQvB,EAAOQ,EAAME,EAAyB,MAAlBC,EAAwBX,EAAOU,EAAMF,EAAME,EAAMV,EAAOQ,EAEzG,CAEJ,OAAOrgG,CACX,CAEA,IAAIqhG,EAAgBpkG,OAAO0F,OAAO,MAElC,SAASq9F,EAAcE,GACnB,GAAImB,EAAcnB,GACd,OAAOmB,EAAcnB,GAGzB,IAAgB5oG,EAAZgqG,EAAOpB,EAAYE,EAAa,GAAImB,EAAY,EACpD,MAAOD,EAAM,CACT,GAAqC,QAAhChqG,EAAQmb,EAAGkM,KAAKxlB,KAAKmoG,IACtBlB,EAAW5qG,KAAK8B,EAAM,SAErB,GAAuC,QAAlCA,EAAQmb,EAAGitF,OAAOvmG,KAAKmoG,IAC7BlB,EAAW5qG,KAAK,SAEf,IAA4C,QAAvC8B,EAAQmb,EAAGk1C,YAAYxuD,KAAKmoG,IA6ClC,MAAM,IAAIE,YAAY,oCA5CtB,GAAIlqG,EAAM,GAAI,CACViqG,GAAa,EACb,IAAIE,EAAa,GAAIC,EAAoBpqG,EAAM,GAAIqqG,EAAc,GACjE,GAAuD,QAAlDA,EAAclvF,EAAGrS,IAAIjH,KAAKuoG,IAe3B,MAAM,IAAIF,YAAY,gDAdtBC,EAAWjsG,KAAKmsG,EAAY,IAC5B,MAAoF,MAA5ED,EAAoBA,EAAkB14D,UAAU24D,EAAY,GAAGhsG,SACnE,GAA8D,QAAzDgsG,EAAclvF,EAAGktF,WAAWxmG,KAAKuoG,IAClCD,EAAWjsG,KAAKmsG,EAAY,QAE3B,IAAgE,QAA3DA,EAAclvF,EAAGmtF,aAAazmG,KAAKuoG,IAIzC,MAAM,IAAIF,YAAY,gDAHtBC,EAAWjsG,KAAKmsG,EAAY,GAIhC,CAMRrqG,EAAM,GAAKmqG,CACf,MAEIF,GAAa,EAEjB,GAAkB,IAAdA,EACA,MAAM,IAAI9xF,MAAM,6EAGpB2wF,EAAW5qG,KACP,CACImyD,YAAarwD,EAAM,GACnBspG,SAAatpG,EAAM,GACnB4I,KAAa5I,EAAM,GACnBuoG,KAAavoG,EAAM,GACnB6pG,SAAa7pG,EAAM,GACnB8pG,MAAa9pG,EAAM,GACnB2S,MAAa3S,EAAM,GACnBypG,UAAazpG,EAAM,GACnBtB,KAAasB,EAAM,IAM/B,CACAgqG,EAAOA,EAAKt4D,UAAU1xC,EAAM,GAAG3B,OACnC,CACA,OAAO0rG,EAAcnB,GAAOE,CAChC,CAOyBN,EACCG,EAEJ,qBAAXhkG,SACPA,OAAO,WAAa6jG,EACpB7jG,OAAO,YAAcgkG,EAGjB,aACI,MAAO,CACH,QAAWH,EACX,SAAYG,EAEnB,0CAIb,CApOC,E,8BCDD,IAAI2B,EAAgB,EAAQ,MAExBC,EAAa9hG,UAEjB5H,EAAOuD,QAAU,SAAUomG,EAAIC,GAC7B,GAAIH,EAAcG,EAAWD,GAAK,OAAOA,EACzC,MAAM,IAAID,EAAW,uBACvB,C,wBCNA1pG,EAAOuD,QAAgC,oBAAfsmG,aAAiD,oBAAZC,Q,8BCD7D,IAmCIC,EAAMC,EAAaJ,EAnCnBK,EAAsB,EAAQ,MAC9BC,EAAc,EAAQ,MACtBrmG,EAAS,EAAQ,MACjBsmG,EAAa,EAAQ,KACrBC,EAAW,EAAQ,MACnBC,EAAS,EAAQ,MACjBC,EAAU,EAAQ,MAClBC,EAAc,EAAQ,MACtBC,EAA8B,EAAQ,MACtCC,EAAgB,EAAQ,MACxBC,EAAwB,EAAQ,MAChCjB,EAAgB,EAAQ,MACxBkB,EAAiB,EAAQ,MACzBp2E,EAAiB,EAAQ,MACzBq2E,EAAkB,EAAQ,MAC1BC,EAAM,EAAQ,MACdC,EAAsB,EAAQ,MAE9BC,EAAuBD,EAAoBE,QAC3CC,EAAmBH,EAAoBj3F,IACvCq3F,EAAYrnG,EAAOqnG,UACnBC,EAAqBD,GAAaA,EAAUxrG,UAC5C0rG,EAAoBvnG,EAAOunG,kBAC3BC,EAA6BD,GAAqBA,EAAkB1rG,UACpE4rG,EAAaJ,GAAaP,EAAeO,GACzCK,EAAsBJ,GAAsBR,EAAeQ,GAC3DK,EAAkB1mG,OAAOpF,UACzBkI,EAAY/D,EAAO+D,UAEnB6jG,EAAgBb,EAAgB,eAChCc,EAAkBb,EAAI,mBACtBc,EAA0B,wBAE1BC,EAA4B3B,KAAyB11E,GAA4C,UAA1B+1E,EAAQzmG,EAAO6J,OACtFm+F,GAA2B,EAG3BC,EAA6B,CAC/BZ,UAAW,EACXa,WAAY,EACZX,kBAAmB,EACnBY,WAAY,EACZC,YAAa,EACbC,WAAY,EACZC,YAAa,EACbC,aAAc,EACdC,aAAc,GAGZC,EAA8B,CAChCC,cAAe,EACfC,eAAgB,GAGdC,EAAS,SAAgB9C,GAC3B,IAAKS,EAAST,GAAK,OAAO,EAC1B,IAAI+C,EAAQpC,EAAQX,GACpB,MAAiB,aAAV+C,GACFrC,EAAOyB,EAA4BY,IACnCrC,EAAOiC,EAA6BI,EAC3C,EAEIC,EAA2B,SAAUhD,GACvC,IAAIx0F,EAAQw1F,EAAehB,GAC3B,GAAKS,EAASj1F,GAAd,CACA,IAAI+tB,EAAQ+nE,EAAiB91F,GAC7B,OAAQ+tB,GAASmnE,EAAOnnE,EAAOyoE,GAA4BzoE,EAAMyoE,GAA2BgB,EAAyBx3F,EAFzF,CAG9B,EAEIy3F,EAAe,SAAUjD,GAC3B,IAAKS,EAAST,GAAK,OAAO,EAC1B,IAAI+C,EAAQpC,EAAQX,GACpB,OAAOU,EAAOyB,EAA4BY,IACrCrC,EAAOiC,EAA6BI,EAC3C,EAEIG,EAAc,SAAUlD,GAC1B,GAAIiD,EAAajD,GAAK,OAAOA,EAC7B,MAAM,IAAI/hG,EAAU,8BACtB,EAEIklG,EAAyB,SAAUC,GACrC,GAAI5C,EAAW4C,MAAQx4E,GAAkBk1E,EAAc6B,EAAYyB,IAAK,OAAOA,EAC/E,MAAM,IAAInlG,EAAU2iG,EAAYwC,GAAK,oCACvC,EAEIC,EAAyB,SAAUC,EAAKl6F,EAAUm6F,EAAQh+F,GAC5D,GAAKg7F,EAAL,CACA,GAAIgD,EAAQ,IAAK,IAAIC,KAASrB,EAA4B,CACxD,IAAIsB,EAAwBvpG,EAAOspG,GACnC,GAAIC,GAAyB/C,EAAO+C,EAAsB1tG,UAAWutG,GAAM,WAClEG,EAAsB1tG,UAAUutG,EACzC,CAAE,MAAOzoG,GAEP,IACE4oG,EAAsB1tG,UAAUutG,GAAOl6F,CACzC,CAAE,MAAOs6F,GAAsB,CACjC,CACF,CACK9B,EAAoB0B,KAAQC,GAC/BzC,EAAcc,EAAqB0B,EAAKC,EAASn6F,EAC7C64F,GAA6BT,EAAmB8B,IAAQl6F,EAAU7D,EAdhD,CAgB1B,EAEIo+F,EAA+B,SAAUL,EAAKl6F,EAAUm6F,GAC1D,IAAIC,EAAOC,EACX,GAAKlD,EAAL,CACA,GAAI31E,EAAgB,CAClB,GAAI24E,EAAQ,IAAKC,KAASrB,EAExB,GADAsB,EAAwBvpG,EAAOspG,GAC3BC,GAAyB/C,EAAO+C,EAAuBH,GAAM,WACxDG,EAAsBH,EAC/B,CAAE,MAAOzoG,GAAqB,CAEhC,GAAK8mG,EAAW2B,KAAQC,EAKjB,OAHL,IACE,OAAOzC,EAAca,EAAY2B,EAAKC,EAASn6F,EAAW64F,GAA6BN,EAAW2B,IAAQl6F,EAC5G,CAAE,MAAOvO,GAAqB,CAElC,CACA,IAAK2oG,KAASrB,EACZsB,EAAwBvpG,EAAOspG,IAC3BC,GAA2BA,EAAsBH,KAAQC,GAC3DzC,EAAc2C,EAAuBH,EAAKl6F,EAlBtB,CAqB1B,EAEA,IAAKg3F,KAAQ+B,EACX9B,EAAcnmG,EAAOkmG,GACrBH,EAAYI,GAAeA,EAAYtqG,UACnCkqG,EAAWmB,EAAqBnB,GAAW+B,GAA2B3B,EACrE4B,GAA4B,EAGnC,IAAK7B,KAAQuC,EACXtC,EAAcnmG,EAAOkmG,GACrBH,EAAYI,GAAeA,EAAYtqG,UACnCkqG,IAAWmB,EAAqBnB,GAAW+B,GAA2B3B,GAI5E,KAAK4B,IAA8BzB,EAAWmB,IAAeA,IAAe5C,SAAShpG,aAEnF4rG,EAAa,WACX,MAAM,IAAI1jG,EAAU,uBACtB,EACIgkG,GAA2B,IAAK7B,KAAQ+B,EACtCjoG,EAAOkmG,IAAOx1E,EAAe1wB,EAAOkmG,GAAOuB,GAInD,KAAKM,IAA8BL,GAAuBA,IAAwBC,KAChFD,EAAsBD,EAAW5rG,UAC7BksG,GAA2B,IAAK7B,KAAQ+B,EACtCjoG,EAAOkmG,IAAOx1E,EAAe1wB,EAAOkmG,GAAMrqG,UAAW6rG,GAS7D,GAJIK,GAA6BjB,EAAeU,KAAgCE,GAC9Eh3E,EAAe82E,EAA4BE,GAGzCrB,IAAgBG,EAAOkB,EAAqBE,GAQ9C,IAAK1B,KAPL8B,GAA2B,EAC3BnB,EAAsBa,EAAqBE,EAAe,CACxD9kG,cAAc,EACdkN,IAAK,WACH,OAAOu2F,EAASvtG,MAAQA,KAAK6uG,QAAmBzoG,CAClD,IAEW6oG,EAAgCjoG,EAAOkmG,IAClDS,EAA4B3mG,EAAOkmG,GAAO2B,EAAiB3B,GAI/D/pG,EAAOuD,QAAU,CACfqoG,0BAA2BA,EAC3BF,gBAAiBG,GAA4BH,EAC7CmB,YAAaA,EACbC,uBAAwBA,EACxBE,uBAAwBA,EACxBM,6BAA8BA,EAC9BX,yBAA0BA,EAC1BF,OAAQA,EACRG,aAAcA,EACdtB,WAAYA,EACZC,oBAAqBA,E,8BC9LvB,IAAI1nG,EAAS,EAAQ,MACjB0pG,EAAc,EAAQ,MACtBrD,EAAc,EAAQ,MACtBD,EAAsB,EAAQ,MAC9BuD,EAAe,EAAQ,KACvBhD,EAA8B,EAAQ,MACtCE,EAAwB,EAAQ,MAChC+C,EAAiB,EAAQ,MACzBC,EAAQ,EAAQ,MAChBC,EAAa,EAAQ,MACrBC,EAAsB,EAAQ,MAC9BC,EAAW,EAAQ,MACnBC,EAAU,EAAQ,MAClBC,EAAS,EAAQ,IACjBC,EAAU,EAAQ,MAClBrD,EAAiB,EAAQ,MACzBp2E,EAAiB,EAAQ,MACzB05E,EAAsB,UACtBC,EAAY,EAAQ,MACpBC,EAAa,EAAQ,MACrBC,EAAiB,EAAQ,MACzBtD,EAAsB,EAAQ,MAE9BuD,EAAuBb,EAAac,OACpCC,EAA6Bf,EAAagB,aAC1CC,EAAe,cACfC,EAAY,WACZC,EAAY,YACZC,EAAe,eACfC,EAAc,cACdC,EAA8BhE,EAAoBiE,UAAUN,GAC5DO,EAA2BlE,EAAoBiE,UAAUL,GACzDO,EAAmBnE,EAAoBvyF,IACvC22F,EAAoBrrG,EAAO4qG,GAC3BU,EAAeD,EACfE,EAAuBD,GAAgBA,EAAaR,GACpDU,EAAYxrG,EAAO6qG,GACnBY,EAAoBD,GAAaA,EAAUV,GAC3CnD,EAAkB1mG,OAAOpF,UACzB2I,EAAQxE,EAAOwE,MACfknG,EAAa1rG,EAAO0rG,WACpB1mG,EAAO0kG,EAAYW,GACnBvkG,EAAU4jG,EAAY,GAAG5jG,SAEzB6lG,EAAcxB,EAAQyB,KACtBC,EAAgB1B,EAAQ2B,OAExBC,EAAW,SAAU7nF,GACvB,MAAO,CAAU,IAATA,EACV,EAEI8nF,EAAY,SAAU9nF,GACxB,MAAO,CAAU,IAATA,EAAeA,GAAU,EAAI,IACvC,EAEI+nF,EAAY,SAAU/nF,GACxB,MAAO,CAAU,IAATA,EAAeA,GAAU,EAAI,IAAMA,GAAU,GAAK,IAAMA,GAAU,GAAK,IACjF,EAEIgoF,EAAc,SAAUC,GAC1B,OAAOA,EAAO,IAAM,GAAKA,EAAO,IAAM,GAAKA,EAAO,IAAM,EAAIA,EAAO,EACrE,EAEIC,EAAc,SAAUloF,GAC1B,OAAOynF,EAAYzB,EAAOhmF,GAAS,GAAI,EACzC,EAEImoF,EAAc,SAAUnoF,GAC1B,OAAOynF,EAAYznF,EAAQ,GAAI,EACjC,EAEIooF,EAAY,SAAUnG,EAAa/hG,EAAKgjG,GAC1CP,EAAsBV,EAAY2E,GAAY1mG,EAAK,CACjDtB,cAAc,EACdkN,IAAK,WACH,OAAOo3F,EAAiBpuG,MAAMoL,EAChC,GAEJ,EAEI4L,GAAM,SAAUu8F,EAAM/oG,EAAOxG,EAAOwvG,GACtC,IAAIC,EAAQtB,EAAyBoB,GACjCG,EAAWzC,EAAQjtG,GACnB2vG,IAAuBH,EAC3B,GAAIE,EAAWlpG,EAAQipG,EAAMG,WAAY,MAAM,IAAIlB,EAAWV,GAC9D,IAAI6B,EAAQJ,EAAMI,MACdvzG,EAAQozG,EAAWD,EAAMK,WACzBlB,EAAOtB,EAAWuC,EAAOvzG,EAAOA,EAAQkK,GAC5C,OAAOmpG,EAAqBf,EAAO9lG,EAAQ8lG,EAC7C,EAEIl3F,GAAM,SAAU63F,EAAM/oG,EAAOxG,EAAO+vG,EAAY9yG,EAAOuyG,GACzD,IAAIC,EAAQtB,EAAyBoB,GACjCG,EAAWzC,EAAQjtG,GACnB4uG,EAAOmB,GAAY9yG,GACnB0yG,IAAuBH,EAC3B,GAAIE,EAAWlpG,EAAQipG,EAAMG,WAAY,MAAM,IAAIlB,EAAWV,GAG9D,IAFA,IAAI6B,EAAQJ,EAAMI,MACdvzG,EAAQozG,EAAWD,EAAMK,WACpBv1G,EAAI,EAAGA,EAAIiM,EAAOjM,IAAKs1G,EAAMvzG,EAAQ/B,GAAKq0G,EAAKe,EAAqBp1G,EAAIiM,EAAQjM,EAAI,EAC/F,EAEA,GAAK6uG,EAqGE,CACL,IAAI4G,GAA8BxC,GAAwBa,EAAkB5oG,OAASmoG,EAErF,GAAKf,GAAM,WACTwB,EAAkB,EACpB,KAAOxB,GAAM,WACX,IAAIwB,GAAmB,EACzB,MAAMxB,GAAM,WAIV,OAHA,IAAIwB,EACJ,IAAIA,EAAkB,KACtB,IAAIA,EAAkB4B,KACc,IAA7B5B,EAAkB1xG,QAAgBqzG,KAAgCtC,CAC3E,IAgBWsC,IAA+BtC,GACxC/D,EAA4B0E,EAAmB,OAAQT,OAjBrD,CAEFU,EAAe,SAAqB3xG,GAElC,OADAmwG,EAAW9wG,KAAMuyG,GACV,IAAIF,EAAkBpB,EAAQtwG,GACvC,EAEA2xG,EAAaR,GAAaS,EAE1B,IAAK,IAA0DnnG,GAAtDF,GAAOkmG,EAAoBiB,GAAoBzyF,GAAI,EAAQ1U,GAAKvK,OAASif,KACzExU,GAAMF,GAAK0U,SAAS0yF,GACzB3E,EAA4B2E,EAAclnG,GAAKinG,EAAkBjnG,KAIrEmnG,EAAqBp6F,YAAcm6F,CACrC,CAKI56E,GAAkBo2E,EAAe2E,KAAuB9D,GAC1Dj3E,EAAe+6E,EAAmB9D,GAIpC,IAAIuF,GAAW,IAAI1B,EAAU,IAAIF,EAAa,IAC1C6B,GAAWzD,EAAY+B,EAAkB2B,SAC7CF,GAASE,QAAQ,EAAG,YACpBF,GAASE,QAAQ,EAAG,aAChBF,GAASG,QAAQ,IAAOH,GAASG,QAAQ,IAAIzD,EAAe6B,EAAmB,CACjF2B,QAAS,SAAiBN,EAAY7yG,GACpCkzG,GAASn0G,KAAM8zG,EAAY7yG,GAAS,IAAM,GAC5C,EACAqzG,SAAU,SAAkBR,EAAY7yG,GACtCkzG,GAASn0G,KAAM8zG,EAAY7yG,GAAS,IAAM,GAC5C,GACC,CAAEszG,QAAQ,GACf,MAtJEjC,EAAe,SAAqB3xG,GAClCmwG,EAAW9wG,KAAMuyG,GACjB,IAAIqB,EAAa3C,EAAQtwG,GACzByxG,EAAiBpyG,KAAM,CACrBgB,KAAM4wG,EACNiC,MAAO7nG,EAAKR,EAAMooG,GAAa,GAC/BA,WAAYA,IAETvG,IACHrtG,KAAK4zG,WAAaA,EAClB5zG,KAAKw0G,UAAW,EAEpB,EAEAjC,EAAuBD,EAAaR,GAEpCU,EAAY,SAAkBW,EAAQW,EAAYF,GAChD9C,EAAW9wG,KAAMyyG,GACjB3B,EAAWqC,EAAQZ,GACnB,IAAIkC,EAAcxC,EAA4BkB,GAC1CuB,EAAeD,EAAYb,WAC3BzlG,EAAS4iG,EAAoB+C,GACjC,GAAI3lG,EAAS,GAAKA,EAASumG,EAAc,MAAM,IAAIhC,EAAW,gBAE9D,GADAkB,OAA4BxtG,IAAfwtG,EAA2Bc,EAAevmG,EAAS6iG,EAAS4C,GACrEzlG,EAASylG,EAAac,EAAc,MAAM,IAAIhC,EAAWX,GAC7DK,EAAiBpyG,KAAM,CACrBgB,KAAM6wG,EACNsB,OAAQA,EACRS,WAAYA,EACZE,WAAY3lG,EACZ0lG,MAAOY,EAAYZ,QAEhBxG,IACHrtG,KAAKmzG,OAASA,EACdnzG,KAAK4zG,WAAaA,EAClB5zG,KAAK8zG,WAAa3lG,EAEtB,EAEAskG,EAAoBD,EAAUV,GAE1BzE,IACFiG,EAAUhB,EAAc,aAAcL,GACtCqB,EAAUd,EAAW,SAAUL,GAC/BmB,EAAUd,EAAW,aAAcL,GACnCmB,EAAUd,EAAW,aAAcL,IAGrCvB,EAAe6B,EAAmB,CAChC4B,QAAS,SAAiBP,GACxB,OAAO98F,GAAIhX,KAAM,EAAG8zG,GAAY,IAAM,IAAM,EAC9C,EACAa,SAAU,SAAkBb,GAC1B,OAAO98F,GAAIhX,KAAM,EAAG8zG,GAAY,EAClC,EACAc,SAAU,SAAkBd,GAC1B,IAAID,EAAQ78F,GAAIhX,KAAM,EAAG8zG,EAAYzsG,UAAU1G,OAAS,GAAI0G,UAAU,IACtE,OAAQwsG,EAAM,IAAM,EAAIA,EAAM,KAAO,IAAM,EAC7C,EACAgB,UAAW,SAAmBf,GAC5B,IAAID,EAAQ78F,GAAIhX,KAAM,EAAG8zG,EAAYzsG,UAAU1G,OAAS,GAAI0G,UAAU,IACtE,OAAOwsG,EAAM,IAAM,EAAIA,EAAM,EAC/B,EACAiB,SAAU,SAAkBhB,GAC1B,OAAOZ,EAAYl8F,GAAIhX,KAAM,EAAG8zG,EAAYzsG,UAAU1G,OAAS,GAAI0G,UAAU,IAC/E,EACA0tG,UAAW,SAAmBjB,GAC5B,OAAOZ,EAAYl8F,GAAIhX,KAAM,EAAG8zG,EAAYzsG,UAAU1G,OAAS,GAAI0G,UAAU,OAAiB,CAChG,EACA2tG,WAAY,SAAoBlB,GAC9B,OAAOjB,EAAc77F,GAAIhX,KAAM,EAAG8zG,EAAYzsG,UAAU1G,OAAS,GAAI0G,UAAU,IAAa,GAC9F,EACA4tG,WAAY,SAAoBnB,GAC9B,OAAOjB,EAAc77F,GAAIhX,KAAM,EAAG8zG,EAAYzsG,UAAU1G,OAAS,GAAI0G,UAAU,IAAa,GAC9F,EACA+sG,QAAS,SAAiBN,EAAY7yG,GACpCya,GAAI1b,KAAM,EAAG8zG,EAAYf,EAAU9xG,EACrC,EACAqzG,SAAU,SAAkBR,EAAY7yG,GACtCya,GAAI1b,KAAM,EAAG8zG,EAAYf,EAAU9xG,EACrC,EACAi0G,SAAU,SAAkBpB,EAAY7yG,GACtCya,GAAI1b,KAAM,EAAG8zG,EAAYd,EAAW/xG,EAAOoG,UAAU1G,OAAS,GAAI0G,UAAU,GAC9E,EACA8tG,UAAW,SAAmBrB,EAAY7yG,GACxCya,GAAI1b,KAAM,EAAG8zG,EAAYd,EAAW/xG,EAAOoG,UAAU1G,OAAS,GAAI0G,UAAU,GAC9E,EACA+tG,SAAU,SAAkBtB,EAAY7yG,GACtCya,GAAI1b,KAAM,EAAG8zG,EAAYb,EAAWhyG,EAAOoG,UAAU1G,OAAS,GAAI0G,UAAU,GAC9E,EACAguG,UAAW,SAAmBvB,EAAY7yG,GACxCya,GAAI1b,KAAM,EAAG8zG,EAAYb,EAAWhyG,EAAOoG,UAAU1G,OAAS,GAAI0G,UAAU,GAC9E,EACAiuG,WAAY,SAAoBxB,EAAY7yG,GAC1Cya,GAAI1b,KAAM,EAAG8zG,EAAYV,EAAanyG,EAAOoG,UAAU1G,OAAS,GAAI0G,UAAU,GAChF,EACAkuG,WAAY,SAAoBzB,EAAY7yG,GAC1Cya,GAAI1b,KAAM,EAAG8zG,EAAYT,EAAapyG,EAAOoG,UAAU1G,OAAS,GAAI0G,UAAU,GAChF,IAsDJkqG,EAAee,EAAcV,GAC7BL,EAAeiB,EAAWX,GAE1B1uG,EAAOuD,QAAU,CACfsmG,YAAasF,EACbrF,SAAUuF,E,8BCpQZ,IAAIgD,EAAW,EAAQ,KACnBC,EAAkB,EAAQ,MAC1BC,EAAoB,EAAQ,MAIhCvyG,EAAOuD,QAAU,SAAczF,GAC7B,IAAIgL,EAAIupG,EAASx1G,MACbW,EAAS+0G,EAAkBzpG,GAC3B0pG,EAAkBtuG,UAAU1G,OAC5BqD,EAAQyxG,EAAgBE,EAAkB,EAAItuG,UAAU,QAAKjB,EAAWzF,GACxEgD,EAAMgyG,EAAkB,EAAItuG,UAAU,QAAKjB,EAC3CwvG,OAAiBxvG,IAARzC,EAAoBhD,EAAS80G,EAAgB9xG,EAAKhD,GAC/D,MAAOi1G,EAAS5xG,EAAOiI,EAAEjI,KAAW/C,EACpC,OAAOgL,CACT,C,8BCfA,IAAIypG,EAAoB,EAAQ,MAEhCvyG,EAAOuD,QAAU,SAAUymG,EAAajtD,EAAM21D,GAC5C,IAAI7xG,EAAQ,EACRrD,EAAS0G,UAAU1G,OAAS,EAAIk1G,EAAUH,EAAkBx1D,GAC5Dz1C,EAAS,IAAI0iG,EAAYxsG,GAC7B,MAAOA,EAASqD,EAAOyG,EAAOzG,GAASk8C,EAAKl8C,KAC5C,OAAOyG,CACT,C,6BCRA,IAAIge,EAAO,EAAQ,MACfqtF,EAAgB,EAAQ,MACxBN,EAAW,EAAQ,KACnBE,EAAoB,EAAQ,MAG5BK,EAAe,SAAUC,GAC3B,IAAIC,EAA8B,IAATD,EACzB,OAAO,SAAUE,EAAOC,EAAYx4B,GAClC,IAII18E,EAAOwJ,EAJPwB,EAAIupG,EAASU,GACb9xE,EAAO0xE,EAAc7pG,GACrBjI,EAAQ0xG,EAAkBtxE,GAC1BgyE,EAAgB3tF,EAAK0tF,EAAYx4B,GAErC,MAAO35E,KAAU,EAGf,GAFA/C,EAAQmjC,EAAKpgC,GACbyG,EAAS2rG,EAAcn1G,EAAO+C,EAAOiI,GACjCxB,EAAQ,OAAQurG,GAClB,KAAK,EAAG,OAAO/0G,EACf,KAAK,EAAG,OAAO+C,EAGnB,OAAOiyG,GAAsB,OAAI7vG,CACnC,CACF,EAEAjD,EAAOuD,QAAU,CAGf2vG,SAAUN,EAAa,GAGvBO,cAAeP,EAAa,G,8BChC9B,IAAIttF,EAAO,EAAQ,MACfioF,EAAc,EAAQ,MACtBoF,EAAgB,EAAQ,MACxBN,EAAW,EAAQ,KACnBE,EAAoB,EAAQ,MAC5Ba,EAAqB,EAAQ,MAE7B/1G,EAAOkwG,EAAY,GAAGlwG,MAGtBu1G,EAAe,SAAUC,GAC3B,IAAIQ,EAAkB,IAATR,EACTS,EAAqB,IAATT,EACZU,EAAmB,IAATV,EACVW,EAAoB,IAATX,EACXY,EAAyB,IAATZ,EAChBa,EAA4B,IAATb,EACnBc,EAAoB,IAATd,GAAcY,EAC7B,OAAO,SAAUV,EAAOC,EAAYx4B,EAAMo5B,GASxC,IARA,IAOI91G,EAAOwJ,EAPPwB,EAAIupG,EAASU,GACb9xE,EAAO0xE,EAAc7pG,GACrBtL,EAAS+0G,EAAkBtxE,GAC3BgyE,EAAgB3tF,EAAK0tF,EAAYx4B,GACjC35E,EAAQ,EACR2J,EAASopG,GAAkBR,EAC3BzrG,EAAS0rG,EAAS7oG,EAAOuoG,EAAOv1G,GAAU81G,GAAaI,EAAmBlpG,EAAOuoG,EAAO,QAAK9vG,EAE3FzF,EAASqD,EAAOA,IAAS,IAAI8yG,GAAY9yG,KAASogC,KACtDnjC,EAAQmjC,EAAKpgC,GACbyG,EAAS2rG,EAAcn1G,EAAO+C,EAAOiI,GACjC+pG,GACF,GAAIQ,EAAQ1rG,EAAO9G,GAASyG,OACvB,GAAIA,EAAQ,OAAQurG,GACvB,KAAK,EAAG,OAAO,EACf,KAAK,EAAG,OAAO/0G,EACf,KAAK,EAAG,OAAO+C,EACf,KAAK,EAAGxD,EAAKsK,EAAQ7J,QAChB,OAAQ+0G,GACb,KAAK,EAAG,OAAO,EACf,KAAK,EAAGx1G,EAAKsK,EAAQ7J,GAI3B,OAAO21G,GAAiB,EAAIF,GAAWC,EAAWA,EAAW7rG,CAC/D,CACF,EAEA3H,EAAOuD,QAAU,CAGfyE,QAAS4qG,EAAa,GAGtBzqG,IAAKyqG,EAAa,GAGlB56F,OAAQ46F,EAAa,GAGrBtwE,KAAMswE,EAAa,GAGnBiB,MAAOjB,EAAa,GAGpBtqG,KAAMsqG,EAAa,GAGnBjqG,UAAWiqG,EAAa,GAGxBkB,aAAclB,EAAa,G,8BCvE7B,IAAIN,EAAkB,EAAQ,MAC1BC,EAAoB,EAAQ,MAC5BwB,EAAiB,EAAQ,MAEzBC,EAAS3rG,MACTY,EAAMD,KAAKC,IAEfjJ,EAAOuD,QAAU,SAAUuF,EAAG3L,EAAOqD,GAMnC,IALA,IAAIhD,EAAS+0G,EAAkBzpG,GAC3BV,EAAIkqG,EAAgBn1G,EAAOK,GAC3By2G,EAAM3B,OAAwBrvG,IAARzC,EAAoBhD,EAASgD,EAAKhD,GACxD8J,EAAS0sG,EAAO/qG,EAAIgrG,EAAM7rG,EAAG,IAC7BlN,EAAI,EACDkN,EAAI6rG,EAAK7rG,IAAKlN,IAAK64G,EAAezsG,EAAQpM,EAAG4N,EAAEV,IAEtD,OADAd,EAAO9J,OAAStC,EACToM,CACT,C,8BChBA,IAAI6mG,EAAa,EAAQ,MAErBnrD,EAAQh6C,KAAKg6C,MAEbkxD,EAAY,SAAU/pG,EAAOgqG,GAC/B,IAAI32G,EAAS2M,EAAM3M,OACf42G,EAASpxD,EAAMxlD,EAAS,GAC5B,OAAOA,EAAS,EAAI62G,EAAclqG,EAAOgqG,GAAaz4D,EACpDvxC,EACA+pG,EAAU/F,EAAWhkG,EAAO,EAAGiqG,GAASD,GACxCD,EAAU/F,EAAWhkG,EAAOiqG,GAASD,GACrCA,EAEJ,EAEIE,EAAgB,SAAUlqG,EAAOgqG,GACnC,IAEIrkG,EAAS2M,EAFTjf,EAAS2M,EAAM3M,OACfpC,EAAI,EAGR,MAAOA,EAAIoC,EAAQ,CACjBif,EAAIrhB,EACJ0U,EAAU3F,EAAM/O,GAChB,MAAOqhB,GAAK03F,EAAUhqG,EAAMsS,EAAI,GAAI3M,GAAW,EAC7C3F,EAAMsS,GAAKtS,IAAQsS,GAEjBA,IAAMrhB,MAAK+O,EAAMsS,GAAK3M,EAC5B,CAAE,OAAO3F,CACX,EAEIuxC,EAAQ,SAAUvxC,EAAOgI,EAAMod,EAAO4kF,GACxC,IAAIG,EAAUniG,EAAK3U,OACf+2G,EAAUhlF,EAAM/xB,OAChBg3G,EAAS,EACTC,EAAS,EAEb,MAAOD,EAASF,GAAWG,EAASF,EAClCpqG,EAAMqqG,EAASC,GAAWD,EAASF,GAAWG,EAASF,EACnDJ,EAAUhiG,EAAKqiG,GAASjlF,EAAMklF,KAAY,EAAItiG,EAAKqiG,KAAYjlF,EAAMklF,KACrED,EAASF,EAAUniG,EAAKqiG,KAAYjlF,EAAMklF,KAC9C,OAAOtqG,CACX,EAEAnK,EAAOuD,QAAU2wG,C,8BC3CjB,IAAI1qG,EAAU,EAAQ,KAClBkrG,EAAgB,EAAQ,MACxBtK,EAAW,EAAQ,MACnBQ,EAAkB,EAAQ,MAE1B+J,EAAU/J,EAAgB,WAC1BoJ,EAAS3rG,MAIbrI,EAAOuD,QAAU,SAAUqxG,GACzB,IAAI7H,EASF,OAREvjG,EAAQorG,KACV7H,EAAI6H,EAAc5/F,YAEd0/F,EAAc3H,KAAOA,IAAMiH,GAAUxqG,EAAQujG,EAAErtG,YAAaqtG,OAAI9pG,EAC3DmnG,EAAS2C,KAChBA,EAAIA,EAAE4H,GACI,OAAN5H,IAAYA,OAAI9pG,UAETA,IAAN8pG,EAAkBiH,EAASjH,CACtC,C,8BCrBA,IAAI8H,EAA0B,EAAQ,MAItC70G,EAAOuD,QAAU,SAAUqxG,EAAep3G,GACxC,OAAO,IAAKq3G,EAAwBD,GAA7B,CAAwD,IAAXp3G,EAAe,EAAIA,EACzE,C,8BCNA,IAAI+0G,EAAoB,EAAQ,MAIhCvyG,EAAOuD,QAAU,SAAUuF,EAAGikG,GAI5B,IAHA,IAAIvkG,EAAM+pG,EAAkBzpG,GACxBgsG,EAAI,IAAI/H,EAAEvkG,GACVJ,EAAI,EACDA,EAAII,EAAKJ,IAAK0sG,EAAE1sG,GAAKU,EAAEN,EAAMJ,EAAI,GACxC,OAAO0sG,CACT,C,8BCVA,IAAIvC,EAAoB,EAAQ,MAC5B3E,EAAsB,EAAQ,MAE9BmH,EAAcxF,WAIlBvvG,EAAOuD,QAAU,SAAUuF,EAAGikG,EAAGlsG,EAAO/C,GACtC,IAAI0K,EAAM+pG,EAAkBzpG,GACxBksG,EAAgBpH,EAAoB/sG,GACpCo0G,EAAcD,EAAgB,EAAIxsG,EAAMwsG,EAAgBA,EAC5D,GAAIC,GAAezsG,GAAOysG,EAAc,EAAG,MAAM,IAAIF,EAAY,mBAGjE,IAFA,IAAID,EAAI,IAAI/H,EAAEvkG,GACVJ,EAAI,EACDA,EAAII,EAAKJ,IAAK0sG,EAAE1sG,GAAKA,IAAM6sG,EAAcn3G,EAAQgL,EAAEV,GAC1D,OAAO0sG,CACT,C,8BChBA,IAAIlK,EAAkB,EAAQ,MAE1BsK,EAAWtK,EAAgB,YAC3BuK,GAAe,EAEnB,IACE,IAAIC,EAAS,EACTC,EAAqB,CACvBj4G,KAAM,WACJ,MAAO,CAAEy3B,OAAQugF,IACnB,EACA,OAAU,WACRD,GAAe,CACjB,GAEFE,EAAmBH,GAAY,WAC7B,OAAOr4G,IACT,EAEAwL,MAAMw0B,KAAKw4E,GAAoB,WAAc,MAAM,CAAG,GACxD,CAAE,MAAO7wG,GAAqB,CAE9BxE,EAAOuD,QAAU,SAAUvC,EAAMs0G,GAC/B,IACE,IAAKA,IAAiBH,EAAc,OAAO,CAC7C,CAAE,MAAO3wG,GAAS,OAAO,CAAO,CAChC,IAAI+wG,GAAoB,EACxB,IACE,IAAIC,EAAS,CAAC,EACdA,EAAON,GAAY,WACjB,MAAO,CACL93G,KAAM,WACJ,MAAO,CAAEy3B,KAAM0gF,GAAoB,EACrC,EAEJ,EACAv0G,EAAKw0G,EACP,CAAE,MAAOhxG,GAAqB,CAC9B,OAAO+wG,CACT,C,8BCvCA,IAAIE,EAAgB,EAAQ,MACxBC,EAAuB,EAAQ,MAC/BC,EAA2B,EAAQ,MAEvC31G,EAAOuD,QAAU,SAAUiyG,EAAQvtG,EAAKnK,GACtC,IAAI83G,EAAcH,EAAcxtG,GAC5B2tG,KAAeJ,EAAQE,EAAqBv5G,EAAEq5G,EAAQI,EAAaD,EAAyB,EAAG73G,IAC9F03G,EAAOI,GAAe93G,CAC7B,C,8BCRA,IAAI+3G,EAAc,EAAQ,MACtBrvG,EAAiB,EAAQ,MAE7BxG,EAAOuD,QAAU,SAAUoE,EAAQrB,EAAMwvG,GAGvC,OAFIA,EAAWjiG,KAAKgiG,EAAYC,EAAWjiG,IAAKvN,EAAM,CAAEyvG,QAAQ,IAC5DD,EAAWv9F,KAAKs9F,EAAYC,EAAWv9F,IAAKjS,EAAM,CAAE0vG,QAAQ,IACzDxvG,EAAerK,EAAEwL,EAAQrB,EAAMwvG,EACxC,C,8BCPA,IAAIrL,EAAgB,EAAQ,MAE5BzqG,EAAOuD,QAAU,SAAUoE,EAAQ6M,EAAKtF,GACtC,IAAK,IAAIjH,KAAOuM,EAAKi2F,EAAc9iG,EAAQM,EAAKuM,EAAIvM,GAAMiH,GAC1D,OAAOvH,CACT,C,8BCLA,IAAIsF,EAAY,EAAQ,MAEpBgpG,EAAUhpG,EAAU9N,MAAM,mBAE9Ba,EAAOuD,UAAY0yG,IAAYA,EAAQ,E,6BCJvC,IAAIC,EAAK,EAAQ,MAEjBl2G,EAAOuD,QAAU,eAAevE,KAAKk3G,E,8BCFrC,IAAIjpG,EAAY,EAAQ,MAEpBkpG,EAASlpG,EAAU9N,MAAM,wBAE7Ba,EAAOuD,UAAY4yG,IAAWA,EAAO,E,8BCJrC,IAAI5I,EAAc,EAAQ,MACtB6I,EAAY,EAAQ,MACpBC,EAAc,EAAQ,MAEtB/wF,EAAOioF,EAAYA,EAAYjoF,MAGnCtlB,EAAOuD,QAAU,SAAU+yG,EAAI97B,GAE7B,OADA47B,EAAUE,QACMrzG,IAATu3E,EAAqB87B,EAAKD,EAAc/wF,EAAKgxF,EAAI97B,GAAQ,WAC9D,OAAO87B,EAAGhyG,MAAMk2E,EAAMt2E,UACxB,CACF,C,8BCZA,IAAIomG,EAAU,EAAQ,MAClBiM,EAAY,EAAQ,MACpBC,EAAoB,EAAQ,MAC5BC,EAAY,EAAQ,MACpB7L,EAAkB,EAAQ,MAE1BsK,EAAWtK,EAAgB,YAE/B5qG,EAAOuD,QAAU,SAAUomG,GACzB,IAAK6M,EAAkB7M,GAAK,OAAO4M,EAAU5M,EAAIuL,IAC5CqB,EAAU5M,EAAI,eACd8M,EAAUnM,EAAQX,GACzB,C,8BCZA,IAAIlqG,EAAO,EAAQ,MACf22G,EAAY,EAAQ,MACpBM,EAAW,EAAQ,MACnBnM,EAAc,EAAQ,MACtBoM,EAAoB,EAAQ,MAE5BjN,EAAa9hG,UAEjB5H,EAAOuD,QAAU,SAAUqzG,EAAUC,GACnC,IAAIC,EAAiB5yG,UAAU1G,OAAS,EAAIm5G,EAAkBC,GAAYC,EAC1E,GAAIT,EAAUU,GAAiB,OAAOJ,EAASj3G,EAAKq3G,EAAgBF,IACpE,MAAM,IAAIlN,EAAWa,EAAYqM,GAAY,mBAC/C,C,wBCXA,IAAI5C,EAAS3rG,MACTkb,EAAMva,KAAKua,IACXpD,EAAMnX,KAAKmX,IACX6iC,EAAQh6C,KAAKg6C,MACb4M,EAAM5mD,KAAK4mD,IACXmnD,EAAM/tG,KAAK+tG,IAEXtH,EAAO,SAAU1nF,EAAQivF,EAAgBtG,GAC3C,IAOIuG,EAAUC,EAAU56G,EAPpB0zG,EAASgE,EAAOtD,GAChByG,EAAyB,EAARzG,EAAYsG,EAAiB,EAC9CI,GAAQ,GAAKD,GAAkB,EAC/BE,EAAQD,GAAQ,EAChBE,EAAwB,KAAnBN,EAAwB72F,EAAI,GAAI,IAAMA,EAAI,GAAI,IAAM,EACzDunF,EAAO3/E,EAAS,GAAgB,IAAXA,GAAgB,EAAIA,EAAS,EAAI,EAAI,EAC1DlnB,EAAQ,EAEZknB,EAASxE,EAAIwE,GAETA,IAAWA,GAAUA,IAAWg6B,KAElCm1D,EAAWnvF,IAAWA,EAAS,EAAI,EACnCkvF,EAAWG,IAEXH,EAAWj0D,EAAM4M,EAAI7nC,GAAUgvF,GAC/Bz6G,EAAI6jB,EAAI,GAAI82F,GACRlvF,EAASzrB,EAAI,IACf26G,IACA36G,GAAK,GAGLyrB,GADEkvF,EAAWI,GAAS,EACZC,EAAKh7G,EAELg7G,EAAKn3F,EAAI,EAAG,EAAIk3F,GAExBtvF,EAASzrB,GAAK,IAChB26G,IACA36G,GAAK,GAEH26G,EAAWI,GAASD,GACtBF,EAAW,EACXD,EAAWG,GACFH,EAAWI,GAAS,GAC7BH,GAAYnvF,EAASzrB,EAAI,GAAK6jB,EAAI,EAAG62F,GACrCC,GAAYI,IAEZH,EAAWnvF,EAAS5H,EAAI,EAAGk3F,EAAQ,GAAKl3F,EAAI,EAAG62F,GAC/CC,EAAW,IAGf,MAAOD,GAAkB,EACvBhH,EAAOnvG,KAAsB,IAAXq2G,EAClBA,GAAY,IACZF,GAAkB,EAEpBC,EAAWA,GAAYD,EAAiBE,EACxCC,GAAkBH,EAClB,MAAOG,EAAiB,EACtBnH,EAAOnvG,KAAsB,IAAXo2G,EAClBA,GAAY,IACZE,GAAkB,EAGpB,OADAnH,IAASnvG,IAAiB,IAAP6mG,EACZsI,CACT,EAEIL,EAAS,SAAUK,EAAQgH,GAC7B,IAQIE,EARAxG,EAAQV,EAAOxyG,OACf25G,EAAyB,EAARzG,EAAYsG,EAAiB,EAC9CI,GAAQ,GAAKD,GAAkB,EAC/BE,EAAQD,GAAQ,EAChBG,EAAQJ,EAAiB,EACzBt2G,EAAQ6vG,EAAQ,EAChBhJ,EAAOsI,EAAOnvG,KACdo2G,EAAkB,IAAPvP,EAEfA,IAAS,EACT,MAAO6P,EAAQ,EACbN,EAAsB,IAAXA,EAAiBjH,EAAOnvG,KACnC02G,GAAS,EAEXL,EAAWD,GAAY,IAAMM,GAAS,EACtCN,KAAcM,EACdA,GAASP,EACT,MAAOO,EAAQ,EACbL,EAAsB,IAAXA,EAAiBlH,EAAOnvG,KACnC02G,GAAS,EAEX,GAAiB,IAAbN,EACFA,EAAW,EAAII,MACV,IAAIJ,IAAaG,EACtB,OAAOF,EAAWpG,IAAMpJ,GAAQ3lD,IAAWA,IAE3Cm1D,GAAY/2F,EAAI,EAAG62F,GACnBC,GAAYI,CACd,CAAE,OAAQ3P,GAAQ,EAAI,GAAKwP,EAAW/2F,EAAI,EAAG82F,EAAWD,EAC1D,EAEAh3G,EAAOuD,QAAU,CACfksG,KAAMA,EACNE,OAAQA,E,8BCpGV,IAAI/E,EAAkB,EAAQ,MAC1B6L,EAAY,EAAQ,MAEpBvB,EAAWtK,EAAgB,YAC3B4M,EAAiBnvG,MAAM3I,UAG3BM,EAAOuD,QAAU,SAAUomG,GACzB,YAAc1mG,IAAP0mG,IAAqB8M,EAAUpuG,QAAUshG,GAAM6N,EAAetC,KAAcvL,EACrF,C,8BCTA,IAAIW,EAAU,EAAQ,MAEtBtqG,EAAOuD,QAAU,SAAUomG,GACzB,IAAI+C,EAAQpC,EAAQX,GACpB,MAAiB,kBAAV+C,GAAuC,mBAAVA,CACtC,C,6BCLA,IAAItC,EAAW,EAAQ,MAEnBpnD,EAAQh6C,KAAKg6C,MAKjBhjD,EAAOuD,QAAUgkB,OAAOkwF,WAAa,SAAmB9N,GACtD,OAAQS,EAAST,IAAO/vB,SAAS+vB,IAAO3mD,EAAM2mD,KAAQA,CACxD,C,8BCTA,IAAIS,EAAW,EAAQ,MACnBE,EAAU,EAAQ,MAClBM,EAAkB,EAAQ,MAE1B8M,EAAQ9M,EAAgB,SAI5B5qG,EAAOuD,QAAU,SAAUomG,GACzB,IAAIgO,EACJ,OAAOvN,EAAST,UAAmC1mG,KAA1B00G,EAAWhO,EAAG+N,MAA0BC,EAA2B,WAAhBrN,EAAQX,GACtF,C,8BCXA,IAAIjC,EAAO,EAAQ,MAEfnkF,EAAMva,KAAKua,IAEXq0F,EAAU,qBACVC,EAAkB,EAAID,EAEtBE,EAAkB,SAAU58G,GAC9B,OAAOA,EAAI28G,EAAkBA,CAC/B,EAEA73G,EAAOuD,QAAU,SAAU6c,EAAG23F,EAAeC,EAAiBC,GAC5D,IAAI/8G,GAAKklB,EACL83F,EAAW30F,EAAIroB,GACfI,EAAIosG,EAAKxsG,GACb,GAAIg9G,EAAWD,EAAiB,OAAO38G,EAAIw8G,EAAgBI,EAAWD,EAAkBF,GAAiBE,EAAkBF,EAC3H,IAAI97G,GAAK,EAAI87G,EAAgBH,GAAWM,EACpC5wG,EAASrL,GAAKA,EAAIi8G,GAEtB,OAAI5wG,EAAS0wG,GAAmB1wG,IAAWA,EAAehM,GAAIymD,KACvDzmD,EAAIgM,CACb,C,4BCrBA,IAAI6wG,EAAa,EAAQ,MAErBC,EAAkB,sBAClBC,EAAoB,qBACpBC,EAAoB,sBAKxBt4G,EAAOuD,QAAUyF,KAAK+kG,QAAU,SAAgB3tF,GAC9C,OAAO+3F,EAAW/3F,EAAGg4F,EAAiBC,EAAmBC,EAC3D,C,wBCRAt4G,EAAOuD,QAAUyF,KAAK0+F,MAAQ,SAActnF,GAC1C,IAAIllB,GAAKklB,EAET,OAAa,IAANllB,GAAWA,IAAMA,EAAIA,EAAIA,EAAI,GAAK,EAAI,CAC/C,C,6BCPA,IAAIuE,EAAO,EAAQ,MACf4qG,EAAS,EAAQ,MACjBZ,EAAgB,EAAQ,MACxB8O,EAAc,EAAQ,MAEtBC,EAAkBn3G,OAAO3B,UAE7BM,EAAOuD,QAAU,SAAUonC,GACzB,IAAI8tE,EAAQ9tE,EAAE8tE,MACd,YAAiBx1G,IAAVw1G,GAAyB,UAAWD,GAAqBnO,EAAO1/D,EAAG,WAAY8+D,EAAc+O,EAAiB7tE,GAC1F8tE,EAAvBh5G,EAAK84G,EAAa5tE,EACxB,C,8BCXA,IAAI+tE,EAAa,EAAQ,MACrBhO,EAAwB,EAAQ,MAChCE,EAAkB,EAAQ,MAC1BV,EAAc,EAAQ,MAEtByK,EAAU/J,EAAgB,WAE9B5qG,EAAOuD,QAAU,SAAUo1G,GACzB,IAAI3O,EAAc0O,EAAWC,GAEzBzO,GAAeF,IAAgBA,EAAY2K,IAC7CjK,EAAsBV,EAAa2K,EAAS,CAC1ChuG,cAAc,EACdkN,IAAK,WAAc,OAAOhX,IAAM,GAGtC,C,8BChBA,IAAI+7G,EAAc,EAAQ,MAEtBlP,EAAa9hG,UAIjB5H,EAAOuD,QAAU,SAAUqzG,GACzB,IAAIiC,EAAOD,EAAYhC,EAAU,UACjC,GAAmB,iBAARiC,EAAkB,MAAM,IAAInP,EAAW,kCAElD,OAAOoP,OAAOD,EAChB,C,8BCXA,IAAIjL,EAAsB,EAAQ,MAC9BC,EAAW,EAAQ,MAEnBkH,EAAcxF,WAIlBvvG,EAAOuD,QAAU,SAAUomG,GACzB,QAAW1mG,IAAP0mG,EAAkB,OAAO,EAC7B,IAAI5hF,EAAS6lF,EAAoBjE,GAC7BnsG,EAASqwG,EAAS9lF,GACtB,GAAIA,IAAWvqB,EAAQ,MAAM,IAAIu3G,EAAY,yBAC7C,OAAOv3G,CACT,C,8BCbA,IAAIu7G,EAAoB,EAAQ,MAE5BhE,EAAcxF,WAElBvvG,EAAOuD,QAAU,SAAUomG,EAAIqP,GAC7B,IAAIhuG,EAAS+tG,EAAkBpP,GAC/B,GAAI3+F,EAASguG,EAAO,MAAM,IAAIjE,EAAY,gBAC1C,OAAO/pG,CACT,C,8BCRA,IAAI4iG,EAAsB,EAAQ,MAE9BmH,EAAcxF,WAElBvvG,EAAOuD,QAAU,SAAUomG,GACzB,IAAIriG,EAASsmG,EAAoBjE,GACjC,GAAIriG,EAAS,EAAG,MAAM,IAAIytG,EAAY,qCACtC,OAAOztG,CACT,C,wBCRA,IAAIoM,EAAQ1K,KAAK0K,MAEjB1T,EAAOuD,QAAU,SAAUomG,GACzB,IAAI7rG,EAAQ4V,EAAMi2F,GAClB,OAAO7rG,EAAQ,EAAI,EAAIA,EAAQ,IAAO,IAAe,IAARA,CAC/C,C,8BCLA,IAAIm7G,EAAI,EAAQ,MACZp1G,EAAS,EAAQ,MACjBpE,EAAO,EAAQ,MACfyqG,EAAc,EAAQ,MACtBgP,EAA8C,EAAQ,MACtDC,EAAsB,EAAQ,MAC9BC,EAAoB,EAAQ,MAC5BzL,EAAa,EAAQ,MACrBgI,EAA2B,EAAQ,MACnCnL,EAA8B,EAAQ,MACtC6O,EAAmB,EAAQ,KAC3BxL,EAAW,EAAQ,MACnBC,EAAU,EAAQ,MAClBwL,EAAW,EAAQ,MACnBC,EAAiB,EAAQ,MACzB9D,EAAgB,EAAQ,MACxBpL,EAAS,EAAQ,MACjBC,EAAU,EAAQ,MAClBF,EAAW,EAAQ,MACnBoP,EAAW,EAAQ,MACnBhvG,EAAS,EAAQ,MACjBi/F,EAAgB,EAAQ,MACxBl1E,EAAiB,EAAQ,MACzB05E,EAAsB,UACtBwL,EAAiB,EAAQ,MACzBzxG,EAAU,gBACV0xG,EAAa,EAAQ,MACrBhP,EAAwB,EAAQ,MAChCgL,EAAuB,EAAQ,MAC/BiE,EAAiC,EAAQ,MACzC7O,EAAsB,EAAQ,MAC9B8O,EAAoB,EAAQ,MAE5B3O,EAAmBH,EAAoBj3F,IACvCo7F,EAAmBnE,EAAoBvyF,IACvCwyF,EAAuBD,EAAoBE,QAC3C6O,EAAuBnE,EAAqBv5G,EAC5C29G,EAAiCH,EAA+Bx9G,EAChEozG,EAAa1rG,EAAO0rG,WACpB1F,EAAcuP,EAAkBvP,YAChCuF,EAAuBvF,EAAYnqG,UACnCoqG,EAAWsP,EAAkBtP,SAC7B8B,EAA4BuN,EAAoBvN,0BAChDF,EAAkByN,EAAoBzN,gBACtCJ,EAAa6N,EAAoB7N,WACjCC,EAAsB4N,EAAoB5N,oBAC1CuB,EAAyBqM,EAAoBrM,uBAC7CF,EAAeuM,EAAoBvM,aACnCmN,EAAoB,oBACpBnL,EAAe,eAEfoL,EAAW,SAAUjN,EAAGhwD,GAC1B+vD,EAAuBC,GACvB,IAAIlsG,EAAQ,EACRrD,EAASu/C,EAAKv/C,OACd8J,EAAS,IAAIylG,EAAEvvG,GACnB,MAAOA,EAASqD,EAAOyG,EAAOzG,GAASk8C,EAAKl8C,KAC5C,OAAOyG,CACT,EAEI6oG,EAAY,SAAUxG,EAAI1hG,GAC5ByiG,EAAsBf,EAAI1hG,EAAK,CAC7BtB,cAAc,EACdkN,IAAK,WACH,OAAOo3F,EAAiBpuG,MAAMoL,EAChC,GAEJ,EAEIgyG,GAAgB,SAAUtQ,GAC5B,IAAI+C,EACJ,OAAOjD,EAAc2F,EAAsBzF,IAAiC,iBAAzB+C,EAAQpC,EAAQX,KAAoC,sBAAV+C,CAC/F,EAEIwN,GAAoB,SAAUvyG,EAAQM,GACxC,OAAO2kG,EAAajlG,KACd6xG,EAASvxG,IACVA,KAAON,GACP0xG,GAAkBpxG,IAClBA,GAAO,CACd,EAEIkyG,GAAkC,SAAkCxyG,EAAQM,GAE9E,OADAA,EAAMwtG,EAAcxtG,GACbiyG,GAAkBvyG,EAAQM,GAC7B0tG,EAAyB,EAAGhuG,EAAOM,IACnC6xG,EAA+BnyG,EAAQM,EAC7C,EAEImyG,GAAwB,SAAwBzyG,EAAQM,EAAK6tG,GAE/D,OADA7tG,EAAMwtG,EAAcxtG,KAChBiyG,GAAkBvyG,EAAQM,IACzBmiG,EAAS0L,IACTzL,EAAOyL,EAAY,WAClBzL,EAAOyL,EAAY,QACnBzL,EAAOyL,EAAY,QAEnBA,EAAWnvG,cACV0jG,EAAOyL,EAAY,cAAeA,EAAWpvG,UAC7C2jG,EAAOyL,EAAY,gBAAiBA,EAAWrvG,WAI7CozG,EAAqBlyG,EAAQM,EAAK6tG,IAFzCnuG,EAAOM,GAAO6tG,EAAWh4G,MAClB6J,EAEX,EAEIuiG,GACG0B,IACH+N,EAA+Bx9G,EAAIg+G,GACnCzE,EAAqBv5G,EAAIi+G,GACzBjK,EAAU5E,EAAqB,UAC/B4E,EAAU5E,EAAqB,cAC/B4E,EAAU5E,EAAqB,cAC/B4E,EAAU5E,EAAqB,WAGjC0N,EAAE,CAAEtxG,OAAQ,SAAU0yG,MAAM,EAAMnN,QAAStB,GAA6B,CACtE0O,yBAA0BH,GAC1B3zG,eAAgB4zG,KAGlBp6G,EAAOuD,QAAU,SAAUsvG,EAAM0H,EAASC,GACxC,IAAIxB,EAAQnG,EAAK1zG,MAAM,OAAO,GAAK,EAC/Bw5G,EAAmB9F,GAAQ2H,EAAU,UAAY,IAAM,QACvDC,EAAS,MAAQ5H,EACjB6H,EAAS,MAAQ7H,EACjB8H,EAA8B92G,EAAO80G,GACrCvL,EAAwBuN,EACxBC,EAAiCxN,GAAyBA,EAAsB1tG,UAChFm7G,EAAW,CAAC,EAEZ9E,EAAS,SAAUv7B,EAAM35E,GAC3B,IAAIwW,EAAO4zF,EAAiBzwB,GAC5B,OAAOnjE,EAAK+4F,KAAKqK,GAAQ55G,EAAQm4G,EAAQ3hG,EAAKs5F,YAAY,EAC5D,EAEIqF,EAAS,SAAUx7B,EAAM35E,EAAO/C,GAClC,IAAIuZ,EAAO4zF,EAAiBzwB,GAC5BnjE,EAAK+4F,KAAKsK,GAAQ75G,EAAQm4G,EAAQ3hG,EAAKs5F,WAAY6J,EAAUjB,EAAez7G,GAASA,GAAO,EAC9F,EAEIg9G,EAAa,SAAUtgC,EAAM35E,GAC/Bg5G,EAAqBr/B,EAAM35E,EAAO,CAChCgT,IAAK,WACH,OAAOkiG,EAAOl5G,KAAMgE,EACtB,EACA0X,IAAK,SAAUza,GACb,OAAOk4G,EAAOn5G,KAAMgE,EAAO/C,EAC7B,EACA2I,YAAY,GAEhB,EAEKmlG,EAwCMsN,IACT9L,EAAwBmN,GAAQ,SAAUQ,EAAO1jG,EAAM2jG,EAAkBtI,GAEvE,OADA/E,EAAWoN,EAAOH,GACXhB,EAAkB,WACvB,OAAKxP,EAAS/yF,GACV4iG,GAAc5iG,QAA0BpU,IAAZyvG,EAC5B,IAAIiI,EAA4BtjG,EAAMiiG,EAAS0B,EAAkBhC,GAAQtG,QACpDzvG,IAArB+3G,EACE,IAAIL,EAA4BtjG,EAAMiiG,EAAS0B,EAAkBhC,IACjE,IAAI2B,EAA4BtjG,GAClCu1F,EAAav1F,GAAc2iG,EAAS5M,EAAuB/1F,GACxD5X,EAAKg6G,EAAgBrM,EAAuB/1F,GAPvB,IAAIsjG,EAA4B7M,EAAQz2F,GAQtE,CATyB,GASpB0jG,EAAO3N,EACd,IAEI74E,GAAgBA,EAAe64E,EAAuB9B,GAC1DtjG,EAAQimG,EAAoB0M,IAA8B,SAAU1yG,GAC5DA,KAAOmlG,GACX5C,EAA4B4C,EAAuBnlG,EAAK0yG,EAA4B1yG,GAExF,IACAmlG,EAAsB1tG,UAAYk7G,IA5DlCxN,EAAwBmN,GAAQ,SAAU//B,EAAMnjE,EAAMrM,EAAQ0nG,GAC5D/E,EAAWnzB,EAAMogC,GACjB,IAEI5K,EAAQS,EAAYjzG,EAFpBqD,EAAQ,EACR8vG,EAAa,EAEjB,GAAKvG,EAAS/yF,GAIP,KAAI4iG,GAAc5iG,GAalB,OAAIu1F,EAAav1F,GACf2iG,EAAS5M,EAAuB/1F,GAEhC5X,EAAKg6G,EAAgBrM,EAAuB/1F,GAfnD24F,EAAS34F,EACTs5F,EAAa2I,EAAStuG,EAAQguG,GAC9B,IAAIiC,EAAO5jG,EAAKo5F,WAChB,QAAgBxtG,IAAZyvG,EAAuB,CACzB,GAAIuI,EAAOjC,EAAO,MAAM,IAAIzJ,EAAWX,GAEvC,GADA6B,EAAawK,EAAOtK,EAChBF,EAAa,EAAG,MAAM,IAAIlB,EAAWX,EAC3C,MAEE,GADA6B,EAAa5C,EAAS6E,GAAWsG,EAC7BvI,EAAaE,EAAasK,EAAM,MAAM,IAAI1L,EAAWX,GAE3DpxG,EAASizG,EAAauI,CAKxB,MApBEx7G,EAASswG,EAAQz2F,GACjBo5F,EAAajzG,EAASw7G,EACtBhJ,EAAS,IAAInG,EAAY4G,GAmB3BxB,EAAiBz0B,EAAM,CACrBw1B,OAAQA,EACRW,WAAYA,EACZF,WAAYA,EACZjzG,OAAQA,EACR4yG,KAAM,IAAItG,EAASkG,KAErB,MAAOnvG,EAAQrD,EAAQs9G,EAAWtgC,EAAM35E,IAC1C,IAEI0zB,GAAgBA,EAAe64E,EAAuB9B,GAC1DsP,EAAiCxN,EAAsB1tG,UAAY8K,EAAO+gG,IAyBxEqP,EAA+B5lG,cAAgBo4F,GACjD5C,EAA4BoQ,EAAgC,cAAexN,GAG7ErC,EAAqB6P,GAAgCxN,sBAAwBA,EAEzE1B,GACFlB,EAA4BoQ,EAAgClP,EAAiBiN,GAG/E,IAAIuC,EAAS9N,IAA0BuN,EAEvCE,EAASlC,GAAoBvL,EAE7B6L,EAAE,CAAEp1G,QAAQ,EAAMmR,aAAa,EAAMk4F,OAAQgO,EAAQC,MAAOvP,GAA6BiP,GAEnFd,KAAqB3M,GACzB5C,EAA4B4C,EAAuB2M,EAAmBf,GAGlEe,KAAqBa,GACzBpQ,EAA4BoQ,EAAgCb,EAAmBf,GAGjFU,EAAWf,EACb,GACK34G,EAAOuD,QAAU,WAA0B,C,8BClPlD,IAAIM,EAAS,EAAQ,MACjB6pG,EAAQ,EAAQ,MAChB0N,EAA8B,EAAQ,MACtCxP,EAA4B,kCAE5B/B,EAAchmG,EAAOgmG,YACrBqB,EAAYrnG,EAAOqnG,UAEvBlrG,EAAOuD,SAAWqoG,IAA8B8B,GAAM,WACpDxC,EAAU,EACZ,MAAOwC,GAAM,WACX,IAAIxC,GAAW,EACjB,MAAOkQ,GAA4B,SAAUC,GAC3C,IAAInQ,EACJ,IAAIA,EAAU,MACd,IAAIA,EAAU,KACd,IAAIA,EAAUmQ,EAChB,IAAG,IAAS3N,GAAM,WAEhB,OAAkE,IAA3D,IAAIxC,EAAU,IAAIrB,EAAY,GAAI,OAAG5mG,GAAWzF,MACzD,G,8BCrBA,IAAI8nB,EAAO,EAAQ,MACf7lB,EAAO,EAAQ,MACf67G,EAAe,EAAQ,MACvBjJ,EAAW,EAAQ,KACnBE,EAAoB,EAAQ,MAC5BgJ,EAAc,EAAQ,MACtB5E,EAAoB,EAAQ,MAC5B6E,EAAwB,EAAQ,MAChCC,EAAgB,EAAQ,MACxB3O,EAAyB,+BACzB4O,EAAW,EAAQ,MAEvB17G,EAAOuD,QAAU,SAAcuE,GAC7B,IAMI1M,EAAGoC,EAAQ8J,EAAQq0G,EAAmB79G,EAAOyD,EAAMqzB,EAAUx3B,EAN7D2vG,EAAIuO,EAAaz+G,MACjBiM,EAAIupG,EAASvqG,GACb0qG,EAAkBtuG,UAAU1G,OAC5Bo+G,EAAQpJ,EAAkB,EAAItuG,UAAU,QAAKjB,EAC7C82C,OAAoB92C,IAAV24G,EACV9E,EAAiBH,EAAkB7tG,GAEvC,GAAIguG,IAAmB0E,EAAsB1E,GAAiB,CAC5DliF,EAAW2mF,EAAYzyG,EAAGguG,GAC1B15G,EAAOw3B,EAASx3B,KAChB0L,EAAI,GACJ,QAASvH,EAAO9B,EAAKrC,EAAMw3B,IAAWC,KACpC/rB,EAAEzL,KAAKkE,EAAKzD,MAEhB,CAOA,IANIi8C,GAAWy4D,EAAkB,IAC/BoJ,EAAQt2F,EAAKs2F,EAAO13G,UAAU,KAEhC1G,EAAS+0G,EAAkBzpG,GAC3BxB,EAAS,IAAKwlG,EAAuBC,GAA5B,CAAgCvvG,GACzCm+G,EAAoBF,EAAcn0G,GAC7BlM,EAAI,EAAGoC,EAASpC,EAAGA,IACtB0C,EAAQi8C,EAAU6hE,EAAM9yG,EAAE1N,GAAIA,GAAK0N,EAAE1N,GAErCkM,EAAOlM,GAAKugH,EAAoBD,EAAS59G,IAAUA,EAErD,OAAOwJ,CACT,C,8BCtCA,IAAIu0G,EAAmB,EAAQ,KAG/BA,EAAiB,U,8BCLjB,IAAI5C,EAAI,EAAQ,MACZx5G,EAAO,EAAQ,MACf8tG,EAAc,EAAQ,MACtBuO,EAAyB,EAAQ,MACjC3R,EAAa,EAAQ,KACrBqM,EAAoB,EAAQ,MAC5BmB,EAAW,EAAQ,MACnB5yG,EAAW,EAAQ,KACnBwxG,EAAY,EAAQ,MACpBwF,EAAiB,EAAQ,KACzBC,EAAkB,EAAQ,MAC1BpR,EAAkB,EAAQ,MAC1BqR,EAAU,EAAQ,MAElBC,EAAUtR,EAAgB,WAC1BlB,EAAa9hG,UACbvC,EAAUkoG,EAAY,GAAGloG,SACzB7F,EAAU+tG,EAAY,GAAG/tG,SACzB28G,EAAc5O,EAAY,GAAGzqG,OAC7BmG,EAAMD,KAAKC,IAEXmzG,EAAgB,SAAU70G,EAAQ80G,EAAaC,GACjD,OAAIA,EAAY/0G,EAAO/J,QAAgB,EACnB,KAAhB6+G,EAA2BC,EACxBj3G,EAAQkC,EAAQ80G,EAAaC,EACtC,EAIArD,EAAE,CAAEtxG,OAAQ,SAAUwN,OAAO,GAAQ,CACnCkoE,WAAY,SAAoBg/B,EAAaE,GAC3C,IACIC,EAAY/D,EAAOgE,EAAUl1G,EAAQT,EAAc41G,EAAmBC,EAAcC,EAAWx4C,EAD/Ft7D,EAAIgzG,EAAuBj/G,MAE3BkK,EAAW,EACX81G,EAAiB,EACjBv1G,EAAS,GACb,IAAKkvG,EAAkB6F,GAAc,CAEnC,GADAG,EAAa7E,EAAS0E,GAClBG,IACF/D,EAAQ1zG,EAAS+2G,EAAuBC,EAAeM,OACjDh3G,EAAQozG,EAAO,MAAM,MAAM,IAAI/O,EAAW,mDAGlD,GADA+S,EAAWlG,EAAU8F,EAAaH,GAC9BO,EACF,OAAOh9G,EAAKg9G,EAAUJ,EAAavzG,EAAGyzG,GACjC,GAAIN,GAAWO,EACpB,OAAOh9G,EAAQuF,EAAS+D,GAAIuzG,EAAaE,EAE7C,CACAh1G,EAASxC,EAAS+D,GAClBhC,EAAe/B,EAASs3G,GACxBK,EAAoBvS,EAAWoS,GAC1BG,IAAmBH,EAAex3G,EAASw3G,IAChDI,EAAe71G,EAAatJ,OAC5Bo/G,EAAY3zG,EAAI,EAAG0zG,GACnB51G,EAAWq1G,EAAc70G,EAAQT,EAAc,GAC/C,OAAqB,IAAdC,EACLq9D,EAAcs4C,EACV33G,EAASw3G,EAAaz1G,EAAcC,EAAUQ,IAC9Cy0G,EAAgBl1G,EAAcS,EAAQR,EAAU,QAAI9D,EAAWs5G,GACnEj1G,GAAU60G,EAAY50G,EAAQs1G,EAAgB91G,GAAYq9D,EAC1Dy4C,EAAiB91G,EAAW41G,EAC5B51G,EAAWq1G,EAAc70G,EAAQT,EAAcC,EAAW61G,GAK5D,OAHIC,EAAiBt1G,EAAO/J,SAC1B8J,GAAU60G,EAAY50G,EAAQs1G,IAEzBv1G,CACT,G,8BCpEF,IAAI6xG,EAAsB,EAAQ,MAC9B5G,EAAoB,EAAQ,MAC5B3E,EAAsB,EAAQ,MAE9Bf,EAAcsM,EAAoBtM,YAClCG,EAAyBmM,EAAoBnM,uBAIjDA,EAAuB,MAAM,SAAYnsG,GACvC,IAAIiI,EAAI+jG,EAAYhwG,MAChB2L,EAAM+pG,EAAkBzpG,GACxBksG,EAAgBpH,EAAoB/sG,GACpCuH,EAAI4sG,GAAiB,EAAIA,EAAgBxsG,EAAMwsG,EACnD,OAAQ5sG,EAAI,GAAKA,GAAKI,OAAOvF,EAAY6F,EAAEV,EAC7C,G,6BCfA,IAAI+wG,EAAsB,EAAQ,MAC9B2D,EAAQ,EAAQ,MAChBpB,EAAW,EAAQ,MACnBpR,EAAU,EAAQ,MAClB7qG,EAAO,EAAQ,MACf8tG,EAAc,EAAQ,MACtBG,EAAQ,EAAQ,MAEhBb,EAAcsM,EAAoBtM,YAClCG,EAAyBmM,EAAoBnM,uBAC7ClqG,EAAQyqG,EAAY,GAAGzqG,OAGvBi6G,EAAiBrP,GAAM,WACzB,IAAIrmG,EAAQ,EAGZ,OADA,IAAI6jG,UAAU,GAAGriG,KAAK,CAAEkgG,QAAS,WAAc,OAAO1hG,GAAS,IAC9C,IAAVA,CACT,IAIA2lG,EAAuB,QAAQ,SAAclvG,GAC3C,IAAIN,EAAS0G,UAAU1G,OACvBqvG,EAAYhwG,MACZ,IAAImgH,EAA6C,QAA/Bl6G,EAAMwnG,EAAQztG,MAAO,EAAG,GAAe6+G,EAAS59G,IAAUA,EAC5E,OAAO2B,EAAKq9G,EAAOjgH,KAAMmgH,EAAax/G,EAAS,EAAI0G,UAAU,QAAKjB,EAAWzF,EAAS,EAAI0G,UAAU,QAAKjB,EAC3G,GAAG85G,E,8BC3BH,IAAI5D,EAAsB,EAAQ,MAC9B8D,EAAiB,qBAEjBpQ,EAAcsM,EAAoBtM,YAClCG,EAAyBmM,EAAoBnM,uBAIjDA,EAAuB,iBAAiB,SAAuBzkG,GAC7D,OAAO00G,EAAepQ,EAAYhwG,MAAO0L,EAAWrE,UAAU1G,OAAS,EAAI0G,UAAU,QAAKjB,EAC5F,G,8BCVA,IAAIk2G,EAAsB,EAAQ,MAC9B+D,EAAY,gBAEZrQ,EAAcsM,EAAoBtM,YAClCG,EAAyBmM,EAAoBnM,uBAIjDA,EAAuB,YAAY,SAAkBzkG,GACnD,OAAO20G,EAAUrQ,EAAYhwG,MAAO0L,EAAWrE,UAAU1G,OAAS,EAAI0G,UAAU,QAAKjB,EACvF,G,8BCVA,IAAIY,EAAS,EAAQ,MACjBpE,EAAO,EAAQ,MACf05G,EAAsB,EAAQ,MAC9B5G,EAAoB,EAAQ,MAC5B+G,EAAW,EAAQ,MACnB6D,EAAkB,EAAQ,KAC1BzP,EAAQ,EAAQ,MAEhB6B,EAAa1rG,EAAO0rG,WACpBrE,EAAYrnG,EAAOqnG,UACnBC,EAAqBD,GAAaA,EAAUxrG,UAC5C09G,EAAOjS,GAAsBA,EAAmB5yF,IAChDs0F,EAAcsM,EAAoBtM,YAClCG,EAAyBmM,EAAoBnM,uBAE7CqQ,GAAkD3P,GAAM,WAE1D,IAAIvjG,EAAQ,IAAIihG,kBAAkB,GAElC,OADA3rG,EAAK29G,EAAMjzG,EAAO,CAAE3M,OAAQ,EAAG,EAAG,GAAK,GACnB,IAAb2M,EAAM,EACf,IAGImzG,EAAgBD,GAAkDlE,EAAoBvN,2BAA6B8B,GAAM,WAC3H,IAAIvjG,EAAQ,IAAI+gG,EAAU,GAG1B,OAFA/gG,EAAMoO,IAAI,GACVpO,EAAMoO,IAAI,IAAK,GACK,IAAbpO,EAAM,IAAyB,IAAbA,EAAM,EACjC,IAIA6iG,EAAuB,OAAO,SAAauQ,GACzC1Q,EAAYhwG,MACZ,IAAImO,EAASsuG,EAASp1G,UAAU1G,OAAS,EAAI0G,UAAU,QAAKjB,EAAW,GACnEuR,EAAM2oG,EAAgBI,GAC1B,GAAIF,EAAgD,OAAO59G,EAAK29G,EAAMvgH,KAAM2X,EAAKxJ,GACjF,IAAIxN,EAASX,KAAKW,OACdgL,EAAM+pG,EAAkB/9F,GACxB3T,EAAQ,EACZ,GAAI2H,EAAMwC,EAASxN,EAAQ,MAAM,IAAI+xG,EAAW,gBAChD,MAAO1uG,EAAQ2H,EAAK3L,KAAKmO,EAASnK,GAAS2T,EAAI3T,IACjD,IAAIw8G,GAAkDC,E,8BC1CtD,IAAIz5G,EAAS,EAAQ,MACjB0pG,EAAc,EAAQ,MACtBG,EAAQ,EAAQ,MAChB0I,EAAY,EAAQ,MACpBoH,EAAe,EAAQ,MACvBrE,EAAsB,EAAQ,MAC9BsE,EAAK,EAAQ,MACbC,EAAa,EAAQ,KACrBC,EAAK,EAAQ,MACbC,EAAS,EAAQ,MAEjB/Q,EAAcsM,EAAoBtM,YAClCG,EAAyBmM,EAAoBnM,uBAC7Cf,EAAcpoG,EAAOooG,YACrB4R,EAAa5R,GAAesB,EAAYtB,EAAYvsG,UAAUg3B,MAG9DonF,IAA+BD,KAAgBnQ,GAAM,WACvDmQ,EAAW,IAAI5R,EAAY,GAAI,KACjC,KAAMyB,GAAM,WACVmQ,EAAW,IAAI5R,EAAY,GAAI,CAAC,EAClC,KAEI8R,IAAgBF,IAAenQ,GAAM,WAEvC,GAAIiQ,EAAI,OAAOA,EAAK,GACpB,GAAIF,EAAI,OAAOA,EAAK,GACpB,GAAIC,EAAY,OAAO,EACvB,GAAIE,EAAQ,OAAOA,EAAS,IAE5B,IAEI/8G,EAAO8E,EAFPwE,EAAQ,IAAI8hG,EAAY,KACxB+R,EAAW31G,MAAM,KAGrB,IAAKxH,EAAQ,EAAGA,EAAQ,IAAKA,IAC3B8E,EAAM9E,EAAQ,EACdsJ,EAAMtJ,GAAS,IAAMA,EACrBm9G,EAASn9G,GAASA,EAAQ,EAAI8E,EAAM,EAOtC,IAJAk4G,EAAW1zG,GAAO,SAAUlO,EAAG8F,GAC7B,OAAQ9F,EAAI,EAAI,IAAM8F,EAAI,EAAI,EAChC,IAEKlB,EAAQ,EAAGA,EAAQ,IAAKA,IAC3B,GAAIsJ,EAAMtJ,KAAWm9G,EAASn9G,GAAQ,OAAO,CAEjD,IAEIo9G,EAAiB,SAAU9J,GAC7B,OAAO,SAAU/zF,EAAGve,GAClB,YAAkBoB,IAAdkxG,GAAiCA,EAAU/zF,EAAGve,IAAM,EAEpDA,IAAMA,GAAW,EAEjBue,IAAMA,EAAU,EACV,IAANA,GAAiB,IAANve,EAAgB,EAAIue,EAAI,GAAK,EAAIve,EAAI,EAAI,GAAK,EACtDue,EAAIve,CACb,CACF,EAIAmrG,EAAuB,QAAQ,SAAcmH,GAE3C,YADkBlxG,IAAdkxG,GAAyBiC,EAAUjC,GACnC4J,EAAoBF,EAAWhhH,KAAMs3G,GAElCqJ,EAAa3Q,EAAYhwG,MAAOohH,EAAe9J,GACxD,IAAI4J,GAAeD,E,8BCpEnB,IAAII,EAAkB,EAAQ,MAC1B/E,EAAsB,EAAQ,MAE9BtM,EAAcsM,EAAoBtM,YAClCG,EAAyBmM,EAAoBnM,uBAC7CL,EAA2BwM,EAAoBxM,yBAInDK,EAAuB,cAAc,WACnC,OAAOkR,EAAgBrR,EAAYhwG,MAAO8vG,EAAyB9vG,MACrE,G,6BCXA,IAAIs8G,EAAsB,EAAQ,MAC9B5L,EAAc,EAAQ,MACtB6I,EAAY,EAAQ,MACpB+H,EAA8B,EAAQ,MAEtCtR,EAAcsM,EAAoBtM,YAClCF,EAA2BwM,EAAoBxM,yBAC/CK,EAAyBmM,EAAoBnM,uBAC7Ct2E,EAAO62E,EAAY4L,EAAoB5N,oBAAoB70E,MAI/Ds2E,EAAuB,YAAY,SAAkBoR,QACjCn7G,IAAdm7G,GAAyBhI,EAAUgI,GACvC,IAAIt1G,EAAI+jG,EAAYhwG,MAChBi4G,EAAIqJ,EAA4BxR,EAAyB7jG,GAAIA,GACjE,OAAO4tB,EAAKo+E,EAAGsJ,EACjB,G,8BCjBA,IAAIC,EAA8B,EAAQ,MAI1CA,EAA4B,SAAS,SAAUtiG,GAC7C,OAAO,SAAoB1E,EAAMs5F,EAAYnzG,GAC3C,OAAOue,EAAKlf,KAAMwa,EAAMs5F,EAAYnzG,EACtC,CACF,G,8BCRA,IAAI8gH,EAAY,EAAQ,MACpBnF,EAAsB,EAAQ,MAC9BsC,EAAgB,EAAQ,MACxB7N,EAAsB,EAAQ,MAC9B8N,EAAW,EAAQ,MAEnB7O,EAAcsM,EAAoBtM,YAClCF,EAA2BwM,EAAoBxM,yBAC/CK,EAAyBmM,EAAoBnM,uBAE7CuR,IAAiB,WACnB,IAEE,IAAIrT,UAAU,GAAG,QAAQ,EAAG,CAAEnC,QAAS,WAAc,MAAM,CAAG,GAChE,CAAE,MAAOvkG,GAGP,OAAiB,IAAVA,CACT,CACF,CATqB,GAarBwoG,EAAuB,OAAQ,CAAE,KAAQ,SAAUnsG,EAAO/C,GACxD,IAAIgL,EAAI+jG,EAAYhwG,MAChBm4G,EAAgBpH,EAAoB/sG,GACpCm8G,EAAcvB,EAAc3yG,GAAK4yG,EAAS59G,IAAUA,EACxD,OAAOwgH,EAAUx1G,EAAG6jG,EAAyB7jG,GAAIksG,EAAegI,EAClE,GAAI,SAAUuB,E,wDC3BC,SAASj5F,EAAKgxF,EAAI7tG,GAC/B,OAAO,WACL,OAAO6tG,EAAGhyG,MAAMmE,EAASvE,UAC3B,CACF,C,wGCAA,MAAOa,SAAQ,GAAID,OAAOpF,WACpB,eAACirG,GAAkB7lG,OAEnB05G,EAAS,CAACrtG,GAASstG,IACrB,MAAMh3G,EAAM,EAAShI,KAAKg/G,GAC1B,OAAOttG,EAAM1J,KAAS0J,EAAM1J,GAAOA,EAAI3E,MAAM,GAAI,GAAGiK,cAAc,EAFvD,CAGZjI,OAAO0F,OAAO,OAEXk0G,EAAc7gH,IAClBA,EAAOA,EAAKkP,cACJ0xG,GAAUD,EAAOC,KAAW5gH,GAGhC8gH,EAAa9gH,GAAQ4gH,UAAgBA,IAAU5gH,GAS/C,QAAC2L,GAAWnB,MASZu2G,EAAcD,EAAW,aAS/B,SAASE,EAASt4G,GAChB,OAAe,OAARA,IAAiBq4G,EAAYr4G,IAA4B,OAApBA,EAAIyO,cAAyB4pG,EAAYr4G,EAAIyO,cACpF8pG,EAAWv4G,EAAIyO,YAAY6pG,WAAat4G,EAAIyO,YAAY6pG,SAASt4G,EACxE,CASA,MAAM0zG,EAAgByE,EAAW,eAUjC,SAASK,EAAkBx4G,GACzB,IAAIe,EAMJ,OAJEA,EAD0B,qBAAhBuiG,aAAiCA,YAAkB,OACpDA,YAAY4C,OAAOlmG,GAEnB,GAAUA,EAAU,QAAM0zG,EAAc1zG,EAAIypG,QAEhD1oG,CACT,CASA,MAAM03G,EAAWL,EAAW,UAQtBG,EAAaH,EAAW,YASxBM,EAAWN,EAAW,UAStBvU,EAAYqU,GAAoB,OAAVA,GAAmC,kBAAVA,EAQ/CS,EAAYT,IAAmB,IAAVA,IAA4B,IAAVA,EASvCU,EAAiB54G,IACrB,GAAoB,WAAhBi4G,EAAOj4G,GACT,OAAO,EAGT,MAAM7G,EAAYirG,EAAepkG,GACjC,OAAsB,OAAd7G,GAAsBA,IAAcoF,OAAOpF,WAAkD,OAArCoF,OAAO6lG,eAAejrG,OAA0Bi1B,OAAOyqF,eAAe74G,MAAUouB,OAAOC,YAAYruB,EAAI,EAUnK84G,EAASX,EAAW,QASpBY,EAASZ,EAAW,QASpBa,EAASb,EAAW,QASpBc,EAAad,EAAW,YASxBe,EAAYl5G,GAAQ6jG,EAAS7jG,IAAQu4G,EAAWv4G,EAAIm5G,MASpDC,EAAclB,IAClB,IAAI/uD,EACJ,OAAO+uD,IACgB,oBAAbmB,UAA2BnB,aAAiBmB,UAClDd,EAAWL,EAAMxiE,UACY,cAA1ByT,EAAO8uD,EAAOC,KAEL,WAAT/uD,GAAqBovD,EAAWL,EAAM15G,WAAkC,sBAArB05G,EAAM15G,YAGhE,EAUI86G,EAAoBnB,EAAW,mBAS/BtsD,EAAQ3qD,GAAQA,EAAI2qD,KACxB3qD,EAAI2qD,OAAS3qD,EAAIjI,QAAQ,qCAAsC,IAiBjE,SAASwI,EAAQ3B,EAAKiwG,GAAI,WAACwJ,GAAa,GAAS,CAAC,GAEhD,GAAY,OAARz5G,GAA+B,qBAARA,EACzB,OAGF,IAAIjL,EACAgB,EAQJ,GALmB,kBAARiK,IAETA,EAAM,CAACA,IAGLmD,EAAQnD,GAEV,IAAKjL,EAAI,EAAGgB,EAAIiK,EAAI7I,OAAQpC,EAAIgB,EAAGhB,IACjCk7G,EAAG72G,KAAK,KAAM4G,EAAIjL,GAAIA,EAAGiL,OAEtB,CAEL,MAAM0B,EAAO+3G,EAAah7G,OAAOmpG,oBAAoB5nG,GAAOvB,OAAOiD,KAAK1B,GAClEmC,EAAMT,EAAKvK,OACjB,IAAIyK,EAEJ,IAAK7M,EAAI,EAAGA,EAAIoN,EAAKpN,IACnB6M,EAAMF,EAAK3M,GACXk7G,EAAG72G,KAAK,KAAM4G,EAAI4B,GAAMA,EAAK5B,EAEjC,CACF,CAEA,SAAS05G,EAAQ15G,EAAK4B,GACpBA,EAAMA,EAAI8E,cACV,MAAMhF,EAAOjD,OAAOiD,KAAK1B,GACzB,IACI25G,EADA5kH,EAAI2M,EAAKvK,OAEb,MAAOpC,KAAM,EAEX,GADA4kH,EAAOj4G,EAAK3M,GACR6M,IAAQ+3G,EAAKjzG,cACf,OAAOizG,EAGX,OAAO,IACT,CAEA,MAAMC,EAAU,KAEY,qBAAfC,WAAmCA,WACvB,qBAATj/E,KAAuBA,KAA0B,qBAAXn9B,OAAyBA,OAASD,OAHxE,GAMVs8G,EAAoBnzF,IAAa4xF,EAAY5xF,IAAYA,IAAYizF,EAoB3E,SAASvkE,IACP,MAAM,SAAC0kE,GAAYD,EAAiBtjH,OAASA,MAAQ,CAAC,EAChDyK,EAAS,CAAC,EACV+4G,EAAc,CAAC95G,EAAK0B,KACxB,MAAMq4G,EAAYF,GAAYL,EAAQz4G,EAAQW,IAAQA,EAClDk3G,EAAc73G,EAAOg5G,KAAenB,EAAc54G,GACpDe,EAAOg5G,GAAa5kE,EAAMp0C,EAAOg5G,GAAY/5G,GACpC44G,EAAc54G,GACvBe,EAAOg5G,GAAa5kE,EAAM,CAAC,EAAGn1C,GACrBiD,EAAQjD,GACjBe,EAAOg5G,GAAa/5G,EAAIzD,QAExBwE,EAAOg5G,GAAa/5G,CACtB,EAGF,IAAK,IAAInL,EAAI,EAAGgB,EAAI8H,UAAU1G,OAAQpC,EAAIgB,EAAGhB,IAC3C8I,UAAU9I,IAAM4M,EAAQ9D,UAAU9I,GAAIilH,GAExC,OAAO/4G,CACT,CAYA,MAAMoX,EAAS,CAACziB,EAAG8F,EAAG0G,GAAUq3G,cAAa,CAAC,KAC5C93G,EAAQjG,GAAG,CAACwE,EAAK0B,KACXQ,GAAWq2G,EAAWv4G,GACxBtK,EAAEgM,GAAOqd,EAAK/e,EAAKkC,GAEnBxM,EAAEgM,GAAO1B,CACX,GACC,CAACu5G,eACG7jH,GAUHskH,EAAY5gC,IACc,QAA1BA,EAAQnyC,WAAW,KACrBmyC,EAAUA,EAAQ78E,MAAM,IAEnB68E,GAYH/gF,EAAW,CAACoW,EAAawrG,EAAkBj2G,EAAOk2G,KACtDzrG,EAAYtV,UAAYoF,OAAO0F,OAAOg2G,EAAiB9gH,UAAW+gH,GAClEzrG,EAAYtV,UAAUsV,YAAcA,EACpClQ,OAAO0B,eAAewO,EAAa,QAAS,CAC1ClX,MAAO0iH,EAAiB9gH,YAE1B6K,GAASzF,OAAO4C,OAAOsN,EAAYtV,UAAW6K,EAAM,EAYhDm2G,EAAe,CAACC,EAAWC,EAAS5oG,EAAQ6oG,KAChD,IAAIt2G,EACAnP,EACA0lH,EACJ,MAAMC,EAAS,CAAC,EAIhB,GAFAH,EAAUA,GAAW,CAAC,EAEL,MAAbD,EAAmB,OAAOC,EAE9B,EAAG,CACDr2G,EAAQzF,OAAOmpG,oBAAoB0S,GACnCvlH,EAAImP,EAAM/M,OACV,MAAOpC,KAAM,EACX0lH,EAAOv2G,EAAMnP,GACPylH,IAAcA,EAAWC,EAAMH,EAAWC,IAAcG,EAAOD,KACnEF,EAAQE,GAAQH,EAAUG,GAC1BC,EAAOD,IAAQ,GAGnBH,GAAuB,IAAX3oG,GAAoB2yF,EAAegW,EACjD,OAASA,KAAe3oG,GAAUA,EAAO2oG,EAAWC,KAAaD,IAAc77G,OAAOpF,WAEtF,OAAOkhH,CAAO,EAYV35G,EAAW,CAACQ,EAAKX,EAAcC,KACnCU,EAAMb,OAAOa,SACIxE,IAAb8D,GAA0BA,EAAWU,EAAIjK,UAC3CuJ,EAAWU,EAAIjK,QAEjBuJ,GAAYD,EAAatJ,OACzB,MAAM2J,EAAYM,EAAIpC,QAAQyB,EAAcC,GAC5C,OAAsB,IAAfI,GAAoBA,IAAcJ,CAAQ,EAW7Ci6G,EAAWvC,IACf,IAAKA,EAAO,OAAO,KACnB,GAAIj1G,EAAQi1G,GAAQ,OAAOA,EAC3B,IAAIrjH,EAAIqjH,EAAMjhH,OACd,IAAKyhH,EAAS7jH,GAAI,OAAO,KACzB,MAAMiP,EAAM,IAAIhC,MAAMjN,GACtB,MAAOA,KAAM,EACXiP,EAAIjP,GAAKqjH,EAAMrjH,GAEjB,OAAOiP,CAAG,EAYNuiG,EAAe,CAACtB,GAEbmT,GACEnT,GAAcmT,aAAiBnT,EAHrB,CAKI,qBAAfS,YAA8BpB,EAAeoB,aAUjDkV,EAAe,CAAC56G,EAAKiwG,KACzB,MAAM4K,EAAY76G,GAAOA,EAAIsuB,OAAOC,UAE9BA,EAAWssF,EAAUzhH,KAAK4G,GAEhC,IAAIiB,EAEJ,OAAQA,EAASstB,EAASx3B,UAAYkK,EAAOutB,KAAM,CACjD,MAAM0rB,EAAOj5C,EAAOxJ,MACpBw4G,EAAG72G,KAAK4G,EAAKk6C,EAAK,GAAIA,EAAK,GAC7B,GAWI4gE,EAAW,CAACr2G,EAAQrD,KACxB,IAAIsD,EACJ,MAAMV,EAAM,GAEZ,MAAwC,QAAhCU,EAAUD,EAAO9J,KAAKyG,IAC5B4C,EAAIhN,KAAK0N,GAGX,OAAOV,CAAG,EAIN+2G,EAAa1C,EAAW,mBAExB2C,EAAc55G,GACXA,EAAIsF,cAAcvN,QAAQ,yBAC/B,SAAkBkC,EAAG2d,EAAIC,GACvB,OAAOD,EAAGxC,cAAgByC,CAC5B,IAKE,EAAiB,GAAGvF,oBAAoB,CAAC1T,EAAKy6G,IAAS/mG,EAAeta,KAAK4G,EAAKy6G,GAA/D,CAAsEh8G,OAAOpF,WAS9Fi4G,EAAW+G,EAAW,UAEtB4C,EAAoB,CAACj7G,EAAKk7G,KAC9B,MAAMd,EAAc37G,OAAO08G,0BAA0Bn7G,GAC/Co7G,EAAqB,CAAC,EAE5Bz5G,EAAQy4G,GAAa,CAAC3K,EAAYxvG,KAChC,IAAIkZ,GAC2C,KAA1CA,EAAM+hG,EAAQzL,EAAYxvG,EAAMD,MACnCo7G,EAAmBn7G,GAAQkZ,GAAOs2F,EACpC,IAGFhxG,OAAO48G,iBAAiBr7G,EAAKo7G,EAAmB,EAQ5CE,EAAiBt7G,IACrBi7G,EAAkBj7G,GAAK,CAACyvG,EAAYxvG,KAElC,GAAIw4G,EAAWz4G,KAA6D,IAArD,CAAC,YAAa,SAAU,UAAUhB,QAAQiB,GAC/D,OAAO,EAGT,MAAMxI,EAAQuI,EAAIC,GAEbw4G,EAAWhhH,KAEhBg4G,EAAWrvG,YAAa,EAEpB,aAAcqvG,EAChBA,EAAWpvG,UAAW,EAInBovG,EAAWv9F,MACdu9F,EAAWv9F,IAAM,KACf,MAAMjB,MAAM,qCAAwChR,EAAO,IAAK,GAEpE,GACA,EAGEs7G,EAAc,CAACC,EAAeC,KAClC,MAAMz7G,EAAM,CAAC,EAEPtL,EAAUsP,IACdA,EAAIrC,SAAQlK,IACVuI,EAAIvI,IAAS,CAAI,GACjB,EAKJ,OAFA0L,EAAQq4G,GAAiB9mH,EAAO8mH,GAAiB9mH,EAAO6L,OAAOi7G,GAAelkH,MAAMmkH,IAE7Ez7G,CAAG,EAGN07G,EAAO,OAEPC,EAAiB,CAAClkH,EAAOmkH,KAC7BnkH,GAASA,EACFypB,OAAOqyD,SAAS97E,GAASA,EAAQmkH,GAGpCC,EAAQ,6BAERC,EAAQ,aAERC,GAAW,CACfD,QACAD,QACAG,YAAaH,EAAQA,EAAMrlG,cAAgBslG,GAGvCG,GAAiB,CAACxxE,EAAO,GAAIyxE,EAAWH,GAASC,eACrD,IAAI56G,EAAM,GACV,MAAM,OAACjK,GAAU+kH,EACjB,MAAOzxE,IACLrpC,GAAO86G,EAASv5G,KAAKw5G,SAAWhlH,EAAO,GAGzC,OAAOiK,CAAG,EAUZ,SAASg7G,GAAoBhE,GAC3B,SAAUA,GAASK,EAAWL,EAAMxiE,SAAyC,aAA9BwiE,EAAM9pF,OAAOyqF,cAA+BX,EAAM9pF,OAAOC,UAC1G,CAEA,MAAM8tF,GAAgBr8G,IACpB,MAAM00C,EAAQ,IAAI1yC,MAAM,IAElBs6G,EAAQ,CAAC76G,EAAQ1M,KAErB,GAAIgvG,EAAStiG,GAAS,CACpB,GAAIizC,EAAM11C,QAAQyC,IAAW,EAC3B,OAGF,KAAK,WAAYA,GAAS,CACxBizC,EAAM3/C,GAAK0M,EACX,MAAMH,EAAS6B,EAAQ1B,GAAU,GAAK,CAAC,EASvC,OAPAE,EAAQF,GAAQ,CAAChK,EAAOmK,KACtB,MAAM26G,EAAeD,EAAM7kH,EAAO1C,EAAI,IACrCwjH,EAAYgE,KAAkBj7G,EAAOM,GAAO26G,EAAa,IAG5D7nE,EAAM3/C,QAAK6H,EAEJ0E,CACT,CACF,CAEA,OAAOG,CAAM,EAGf,OAAO66G,EAAMt8G,EAAK,EAAE,EAGhBw8G,GAAYnE,EAAW,iBAEvBoE,GAAcrE,GAClBA,IAAUrU,EAASqU,IAAUK,EAAWL,KAAWK,EAAWL,EAAMhjG,OAASqjG,EAAWL,EAAMsE,OAEhG,IACEv5G,UACAywG,gBACA4E,WACAc,aACAZ,oBACAC,WACAC,WACAC,YACA9U,WACA+U,gBACAP,cACAS,SACAC,SACAC,SACA5H,WACAmH,aACAW,WACAI,oBACAjT,eACA4S,aACAx3G,UACA0zC,QACAh9B,SACA0zC,OACAmuD,WACA3hH,WACA8hH,eACAlC,SACAE,aACAz3G,WACA+5G,UACAC,eACAE,WACAC,aACArnG,eAAc,EACdipG,WAAY,EACZ1B,oBACAK,gBACAC,cACAP,cACAU,OACAC,iBACAjC,UACAl8G,OAAQo8G,EACRE,mBACAiC,YACAE,kBACAG,uBACAC,gBACAG,aACAC,eClsBF,SAASG,GAAWzqG,EAAS8oC,EAAMxlC,EAAQonG,EAASC,GAClD7rG,MAAM7X,KAAK5C,MAEPya,MAAM8rG,kBACR9rG,MAAM8rG,kBAAkBvmH,KAAMA,KAAKmY,aAEnCnY,KAAKk+C,OAAQ,IAAKzjC,OAASyjC,MAG7Bl+C,KAAK2b,QAAUA,EACf3b,KAAKyJ,KAAO,aACZg7C,IAASzkD,KAAKykD,KAAOA,GACrBxlC,IAAWjf,KAAKif,OAASA,GACzBonG,IAAYrmH,KAAKqmH,QAAUA,GAC3BC,IAAatmH,KAAKsmH,SAAWA,EAC/B,CAEAE,GAAMzkH,SAASqkH,GAAY3rG,MAAO,CAChC0hC,OAAQ,WACN,MAAO,CAELxgC,QAAS3b,KAAK2b,QACdlS,KAAMzJ,KAAKyJ,KAEXmhE,YAAa5qE,KAAK4qE,YAClB1/C,OAAQlrB,KAAKkrB,OAEbu7F,SAAUzmH,KAAKymH,SACfrmC,WAAYpgF,KAAKogF,WACjBsmC,aAAc1mH,KAAK0mH,aACnBxoE,MAAOl+C,KAAKk+C,MAEZj/B,OAAQunG,GAAMX,aAAa7lH,KAAKif,QAChCwlC,KAAMzkD,KAAKykD,KACXkiE,OAAQ3mH,KAAKsmH,UAAYtmH,KAAKsmH,SAASK,OAAS3mH,KAAKsmH,SAASK,OAAS,KAE3E,IAGF,MAAM,GAAYP,GAAWvjH,UACvB+gH,GAAc,CAAC,EAErB,CACE,uBACA,iBACA,eACA,YACA,cACA,4BACA,iBACA,mBACA,kBACA,eACA,kBACA,mBAEAz4G,SAAQs5C,IACRm/D,GAAYn/D,GAAQ,CAACxjD,MAAOwjD,EAAK,IAGnCx8C,OAAO48G,iBAAiBuB,GAAYxC,IACpC37G,OAAO0B,eAAe,GAAW,eAAgB,CAAC1I,OAAO,IAGzDmlH,GAAWpmF,KAAO,CAACr4B,EAAO88C,EAAMxlC,EAAQonG,EAASC,EAAUM,KACzD,MAAMC,EAAa5+G,OAAO0F,OAAO,IAgBjC,OAdA64G,GAAM3C,aAAal8G,EAAOk/G,GAAY,SAAgBr9G,GACpD,OAAOA,IAAQiR,MAAM5X,SACvB,IAAGohH,GACe,iBAATA,IAGTmC,GAAWxjH,KAAKikH,EAAYl/G,EAAMgU,QAAS8oC,EAAMxlC,EAAQonG,EAASC,GAElEO,EAAWC,MAAQn/G,EAEnBk/G,EAAWp9G,KAAO9B,EAAM8B,KAExBm9G,GAAe3+G,OAAO4C,OAAOg8G,EAAYD,GAElCC,CAAU,EAGnB,YClGA,QCaA,SAASE,GAAYnF,GACnB,OAAO4E,GAAMlE,cAAcV,IAAU4E,GAAM75G,QAAQi1G,EACrD,CASA,SAASoF,GAAe57G,GACtB,OAAOo7G,GAAMp8G,SAASgB,EAAK,MAAQA,EAAInF,MAAM,GAAI,GAAKmF,CACxD,CAWA,SAAS67G,GAAUvvG,EAAMtM,EAAK87G,GAC5B,OAAKxvG,EACEA,EAAK8oB,OAAOp1B,GAAKE,KAAI,SAAc3M,EAAOJ,GAG/C,OADAI,EAAQqoH,GAAeroH,IACfuoH,GAAQ3oH,EAAI,IAAMI,EAAQ,IAAMA,CAC1C,IAAGiK,KAAKs+G,EAAO,IAAM,IALH97G,CAMpB,CASA,SAAS+7G,GAAY35G,GACnB,OAAOg5G,GAAM75G,QAAQa,KAASA,EAAIi4B,KAAKshF,GACzC,CAEA,MAAMK,GAAaZ,GAAM3C,aAAa2C,GAAO,CAAC,EAAG,MAAM,SAAgBvC,GACrE,MAAO,WAAW9hH,KAAK8hH,EACzB,IAyBA,SAASoD,GAAW79G,EAAK89G,EAAUj1G,GACjC,IAAKm0G,GAAMjZ,SAAS/jG,GAClB,MAAM,IAAIuB,UAAU,4BAItBu8G,EAAWA,GAAY,IAAK,IAAoBvE,UAGhD1wG,EAAUm0G,GAAM3C,aAAaxxG,EAAS,CACpCk1G,YAAY,EACZL,MAAM,EACNM,SAAS,IACR,GAAO,SAAiBh1F,EAAQvnB,GAEjC,OAAQu7G,GAAMzE,YAAY92G,EAAOunB,GACnC,IAEA,MAAM+0F,EAAal1G,EAAQk1G,WAErBE,EAAUp1G,EAAQo1G,SAAWC,EAC7BR,EAAO70G,EAAQ60G,KACfM,EAAUn1G,EAAQm1G,QAClBG,EAAQt1G,EAAQitF,MAAwB,qBAATA,MAAwBA,KACvDsoB,EAAUD,GAASnB,GAAMZ,oBAAoB0B,GAEnD,IAAKd,GAAMvE,WAAWwF,GACpB,MAAM,IAAI18G,UAAU,8BAGtB,SAAS88G,EAAa5mH,GACpB,GAAc,OAAVA,EAAgB,MAAO,GAE3B,GAAIulH,GAAMhE,OAAOvhH,GACf,OAAOA,EAAM6mH,cAGf,IAAKF,GAAWpB,GAAM9D,OAAOzhH,GAC3B,MAAM,IAAI,GAAW,gDAGvB,OAAIulH,GAAMpJ,cAAcn8G,IAAUulH,GAAMzW,aAAa9uG,GAC5C2mH,GAA2B,oBAATtoB,KAAsB,IAAIA,KAAK,CAACr+F,IAAU8mH,OAAO/nF,KAAK/+B,GAG1EA,CACT,CAYA,SAASymH,EAAezmH,EAAOmK,EAAKsM,GAClC,IAAIlK,EAAMvM,EAEV,GAAIA,IAAUyW,GAAyB,kBAAVzW,EAC3B,GAAIulH,GAAMp8G,SAASgB,EAAK,MAEtBA,EAAMm8G,EAAan8G,EAAMA,EAAInF,MAAM,GAAI,GAEvChF,EAAQq7D,KAAKwvC,UAAU7qG,QAClB,GACJulH,GAAM75G,QAAQ1L,IAAUkmH,GAAYlmH,KACnCulH,GAAM7D,WAAW1hH,IAAUulH,GAAMp8G,SAASgB,EAAK,SAAWoC,EAAMg5G,GAAMrC,QAAQljH,IAYhF,OATAmK,EAAM47G,GAAe57G,GAErBoC,EAAIrC,SAAQ,SAAcgH,EAAInO,IAC1BwiH,GAAMzE,YAAY5vG,IAAc,OAAPA,GAAgBm1G,EAASloE,QAEtC,IAAZooE,EAAmBP,GAAU,CAAC77G,GAAMpH,EAAOkjH,GAAqB,OAAZM,EAAmBp8G,EAAMA,EAAM,KACnFy8G,EAAa11G,GAEjB,KACO,EAIX,QAAI40G,GAAY9lH,KAIhBqmH,EAASloE,OAAO6nE,GAAUvvG,EAAMtM,EAAK87G,GAAOW,EAAa5mH,KAElD,EACT,CAEA,MAAMi9C,EAAQ,GAER8pE,EAAiB//G,OAAO4C,OAAOu8G,GAAY,CAC/CM,iBACAG,eACAd,iBAGF,SAASkB,EAAMhnH,EAAOyW,GACpB,IAAI8uG,GAAMzE,YAAY9gH,GAAtB,CAEA,IAA8B,IAA1Bi9C,EAAM11C,QAAQvH,GAChB,MAAMwZ,MAAM,kCAAoC/C,EAAK9O,KAAK,MAG5Ds1C,EAAM19C,KAAKS,GAEXulH,GAAMr7G,QAAQlK,GAAO,SAAckR,EAAI/G,GACrC,MAAMX,IAAW+7G,GAAMzE,YAAY5vG,IAAc,OAAPA,IAAgBs1G,EAAQ7kH,KAChE0kH,EAAUn1G,EAAIq0G,GAAMrE,SAAS/2G,GAAOA,EAAImqD,OAASnqD,EAAKsM,EAAMswG,IAG/C,IAAXv9G,GACFw9G,EAAM91G,EAAIuF,EAAOA,EAAK8oB,OAAOp1B,GAAO,CAACA,GAEzC,IAEA8yC,EAAMlkC,KAlB8B,CAmBtC,CAEA,IAAKwsG,GAAMjZ,SAAS/jG,GAClB,MAAM,IAAIuB,UAAU,0BAKtB,OAFAk9G,EAAMz+G,GAEC89G,CACT,CAEA,YC9MA,SAASY,GAAOt9G,GACd,MAAMu9G,EAAU,CACd,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,MAAO,IACP,MAAO,MAET,OAAOC,mBAAmBx9G,GAAKjI,QAAQ,oBAAoB,SAAkBL,GAC3E,OAAO6lH,EAAQ7lH,EACjB,GACF,CAUA,SAAS+lH,GAAqBlgH,EAAQkK,GACpCrS,KAAKsoH,OAAS,GAEdngH,GAAU,GAAWA,EAAQnI,KAAMqS,EACrC,CAEA,MAAM,GAAYg2G,GAAqBxlH,UAEvC,GAAUu8C,OAAS,SAAgB31C,EAAMxI,GACvCjB,KAAKsoH,OAAO9nH,KAAK,CAACiJ,EAAMxI,GAC1B,EAEA,GAAUiH,SAAW,SAAkBqgH,GACrC,MAAMC,EAAUD,EAAU,SAAStnH,GACjC,OAAOsnH,EAAQ3lH,KAAK5C,KAAMiB,EAAOinH,GACnC,EAAIA,GAEJ,OAAOloH,KAAKsoH,OAAOh9G,KAAI,SAAco4C,GACnC,OAAO8kE,EAAQ9kE,EAAK,IAAM,IAAM8kE,EAAQ9kE,EAAK,GAC/C,GAAG,IAAI96C,KAAK,IACd,EAEA,YC5CA,SAAS,GAAOc,GACd,OAAO0+G,mBAAmB1+G,GACxB/G,QAAQ,QAAS,KACjBA,QAAQ,OAAQ,KAChBA,QAAQ,QAAS,KACjBA,QAAQ,OAAQ,KAChBA,QAAQ,QAAS,KACjBA,QAAQ,QAAS,IACrB,CAWe,SAAS8lH,GAASxxG,EAAK9O,EAAQkK,GAE5C,IAAKlK,EACH,OAAO8O,EAGT,MAAMuxG,EAAUn2G,GAAWA,EAAQ61G,QAAU,GAEvCQ,EAAcr2G,GAAWA,EAAQs2G,UAEvC,IAAIC,EAUJ,GAPEA,EADEF,EACiBA,EAAYvgH,EAAQkK,GAEpBm0G,GAAMxD,kBAAkB76G,GACzCA,EAAOD,WACP,IAAI,GAAqBC,EAAQkK,GAASnK,SAASsgH,GAGnDI,EAAkB,CACpB,MAAMC,EAAgB5xG,EAAIzO,QAAQ,MAEX,IAAnBqgH,IACF5xG,EAAMA,EAAIhR,MAAM,EAAG4iH,IAErB5xG,KAA8B,IAAtBA,EAAIzO,QAAQ,KAAc,IAAM,KAAOogH,CACjD,CAEA,OAAO3xG,CACT,CC1DA,MAAM6xG,GACJ,WAAA3wG,GACEnY,KAAK2Z,SAAW,EAClB,CAUA,GAAAovG,CAAIC,EAAWC,EAAU52G,GAOvB,OANArS,KAAK2Z,SAASnZ,KAAK,CACjBwoH,YACAC,WACAC,cAAa72G,GAAUA,EAAQ62G,YAC/BC,QAAS92G,EAAUA,EAAQ82G,QAAU,OAEhCnpH,KAAK2Z,SAAShZ,OAAS,CAChC,CASA,KAAAyoH,CAAMrgH,GACA/I,KAAK2Z,SAAS5Q,KAChB/I,KAAK2Z,SAAS5Q,GAAM,KAExB,CAOA,KAAAiqF,GACMhzF,KAAK2Z,WACP3Z,KAAK2Z,SAAW,GAEpB,CAYA,OAAAxO,CAAQsuG,GACN+M,GAAMr7G,QAAQnL,KAAK2Z,UAAU,SAAwBha,GACzC,OAANA,GACF85G,EAAG95G,EAEP,GACF,EAGF,YCpEA,IACE0pH,mBAAmB,EACnBC,mBAAmB,EACnBC,qBAAqB,GCFvB,GAA0C,qBAApBC,gBAAkCA,gBAAkB,GCD1E,GAAmC,qBAAbzG,SAA2BA,SAAW,KCA5D,GAA+B,qBAATzjB,KAAuBA,KAAO,KCEpD,IACEmqB,WAAW,EACXj2G,QAAS,CACPg2G,gBAAe,GACfzG,SAAQ,GACRzjB,KAAI,IAENoqB,UAAW,CAAC,OAAQ,QAAS,OAAQ,OAAQ,MAAO,SCXhDC,GAAkC,qBAAX1iH,QAA8C,qBAAb6K,SAmBxD83G,GAAwB,CAC3BC,GACQF,IAAiB,CAAC,cAAe,eAAgB,MAAMnhH,QAAQqhH,GAAW,EAFvD,CAGJ,qBAAd95G,WAA6BA,UAAU85G,SAW7CC,GAAiC,KAEN,qBAAtBC,mBAEP3lF,gBAAgB2lF,mBACc,oBAAvB3lF,KAAKy8D,cALuB,GC9BvC,OACK,KACA,ICCU,SAASmpB,GAAiBxvG,EAAMnI,GAC7C,OAAO,GAAWmI,EAAM,IAAIvK,GAASuD,QAAQg2G,gBAAmBvhH,OAAO4C,OAAO,CAC5E48G,QAAS,SAASxmH,EAAOmK,EAAKsM,EAAMuyG,GAClC,OAAIh6G,GAASi6G,QAAU1D,GAAMxE,SAAS/gH,IACpCjB,KAAKo/C,OAAOh0C,EAAKnK,EAAMiH,SAAS,YACzB,GAGF+hH,EAAQvC,eAAejgH,MAAMzH,KAAMqH,UAC5C,GACCgL,GACL,CCNA,SAAS83G,GAAc1gH,GAKrB,OAAO+8G,GAAMlC,SAAS,gBAAiB76G,GAAM6B,KAAIhJ,GAC3B,OAAbA,EAAM,GAAc,GAAKA,EAAM,IAAMA,EAAM,IAEtD,CASA,SAAS8nH,GAAc58G,GACrB,MAAMhE,EAAM,CAAC,EACP0B,EAAOjD,OAAOiD,KAAKsC,GACzB,IAAIjP,EACJ,MAAMoN,EAAMT,EAAKvK,OACjB,IAAIyK,EACJ,IAAK7M,EAAI,EAAGA,EAAIoN,EAAKpN,IACnB6M,EAAMF,EAAK3M,GACXiL,EAAI4B,GAAOoC,EAAIpC,GAEjB,OAAO5B,CACT,CASA,SAAS6gH,GAAe/C,GACtB,SAASgD,EAAU5yG,EAAMzW,EAAO6J,EAAQ9G,GACtC,IAAIyF,EAAOiO,EAAK1T,KAChB,MAAMumH,EAAe7/F,OAAOqyD,UAAUtzE,GAChC+gH,EAASxmH,GAAS0T,EAAK/W,OAG7B,GAFA8I,GAAQA,GAAQ+8G,GAAM75G,QAAQ7B,GAAUA,EAAOnK,OAAS8I,EAEpD+gH,EAOF,OANIhE,GAAML,WAAWr7G,EAAQrB,GAC3BqB,EAAOrB,GAAQ,CAACqB,EAAOrB,GAAOxI,GAE9B6J,EAAOrB,GAAQxI,GAGTspH,EAGLz/G,EAAOrB,IAAU+8G,GAAMjZ,SAASziG,EAAOrB,MAC1CqB,EAAOrB,GAAQ,IAGjB,MAAMgB,EAAS6/G,EAAU5yG,EAAMzW,EAAO6J,EAAOrB,GAAOzF,GAMpD,OAJIyG,GAAU+7G,GAAM75G,QAAQ7B,EAAOrB,MACjCqB,EAAOrB,GAAQ2gH,GAAct/G,EAAOrB,MAG9B8gH,CACV,CAEA,GAAI/D,GAAM1D,WAAWwE,IAAad,GAAMvE,WAAWqF,EAASmD,SAAU,CACpE,MAAMjhH,EAAM,CAAC,EAMb,OAJAg9G,GAAMpC,aAAakD,GAAU,CAAC79G,EAAMxI,KAClCqpH,EAAUH,GAAc1gH,GAAOxI,EAAOuI,EAAK,EAAE,IAGxCA,CACT,CAEA,OAAO,IACT,CAEA,YCvEA,SAASkhH,GAAgBC,EAAUC,EAAQrC,GACzC,GAAI/B,GAAMrE,SAASwI,GACjB,IAEE,OADCC,GAAUtuD,KAAKC,OAAOouD,GAChBnE,GAAMjxD,KAAKo1D,EACpB,CAAE,MAAOxsH,GACP,GAAe,gBAAXA,EAAEsL,KACJ,MAAMtL,CAEV,CAGF,OAAQoqH,GAAWjsD,KAAKwvC,WAAW6e,EACrC,CAEA,MAAME,GAAW,CAEfC,aAAc,GAEdC,QAAS,CAAC,MAAO,QAEjBC,iBAAkB,CAAC,SAA0BxwG,EAAMywG,GACjD,MAAMC,EAAcD,EAAQE,kBAAoB,GAC1CC,EAAqBF,EAAY1iH,QAAQ,qBAAuB,EAChE6iH,EAAkB7E,GAAMjZ,SAAS/yF,GAEnC6wG,GAAmB7E,GAAMjC,WAAW/pG,KACtCA,EAAO,IAAIuoG,SAASvoG,IAGtB,MAAMsoG,EAAa0D,GAAM1D,WAAWtoG,GAEpC,GAAIsoG,EACF,OAAKsI,GAGEA,EAAqB9uD,KAAKwvC,UAAU,GAAetxF,IAFjDA,EAKX,GAAIgsG,GAAMpJ,cAAc5iG,IACtBgsG,GAAMxE,SAASxnG,IACfgsG,GAAM5D,SAASpoG,IACfgsG,GAAM/D,OAAOjoG,IACbgsG,GAAM9D,OAAOloG,GAEb,OAAOA,EAET,GAAIgsG,GAAMtE,kBAAkB1nG,GAC1B,OAAOA,EAAK24F,OAEd,GAAIqT,GAAMxD,kBAAkBxoG,GAE1B,OADAywG,EAAQK,eAAe,mDAAmD,GACnE9wG,EAAKtS,WAGd,IAAIy6G,EAEJ,GAAI0I,EAAiB,CACnB,GAAIH,EAAY1iH,QAAQ,sCAAwC,EAC9D,OAAOwhH,GAAiBxvG,EAAMxa,KAAKurH,gBAAgBrjH,WAGrD,IAAKy6G,EAAa6D,GAAM7D,WAAWnoG,KAAU0wG,EAAY1iH,QAAQ,wBAA0B,EAAG,CAC5F,MAAMgjH,EAAYxrH,KAAKgqG,KAAOhqG,KAAKgqG,IAAI+Y,SAEvC,OAAO,GACLJ,EAAa,CAAC,UAAWnoG,GAAQA,EACjCgxG,GAAa,IAAIA,EACjBxrH,KAAKurH,eAET,CACF,CAEA,OAAIF,GAAmBD,GACrBH,EAAQK,eAAe,oBAAoB,GACpCZ,GAAgBlwG,IAGlBA,CACT,GAEAixG,kBAAmB,CAAC,SAA2BjxG,GAC7C,MAAMswG,EAAe9qH,KAAK8qH,cAAgBD,GAASC,aAC7CxB,EAAoBwB,GAAgBA,EAAaxB,kBACjDoC,EAAsC,SAAtB1rH,KAAK2rH,aAE3B,GAAInxG,GAAQgsG,GAAMrE,SAAS3nG,KAAW8uG,IAAsBtpH,KAAK2rH,cAAiBD,GAAgB,CAChG,MAAMrC,EAAoByB,GAAgBA,EAAazB,kBACjDuC,GAAqBvC,GAAqBqC,EAEhD,IACE,OAAOpvD,KAAKC,MAAM/hD,EACpB,CAAE,MAAOrc,GACP,GAAIytH,EAAmB,CACrB,GAAe,gBAAXztH,EAAEsL,KACJ,MAAM,GAAWu2B,KAAK7hC,EAAG,GAAW0tH,iBAAkB7rH,KAAM,KAAMA,KAAKsmH,UAEzE,MAAMnoH,CACR,CACF,CACF,CAEA,OAAOqc,CACT,GAMAhM,QAAS,EAETs9G,eAAgB,aAChBC,eAAgB,eAEhBC,kBAAmB,EACnBC,eAAgB,EAEhBjiB,IAAK,CACH+Y,SAAU9yG,GAASuD,QAAQuvG,SAC3BzjB,KAAMrvF,GAASuD,QAAQ8rF,MAGzB4sB,eAAgB,SAAwBvF,GACtC,OAAOA,GAAU,KAAOA,EAAS,GACnC,EAEAsE,QAAS,CACPkB,OAAQ,CACN,OAAU,oCACV,oBAAgB/lH,KAKtBogH,GAAMr7G,QAAQ,CAAC,SAAU,MAAO,OAAQ,OAAQ,MAAO,UAAWg8C,IAChE0jE,GAASI,QAAQ9jE,GAAU,CAAC,CAAC,IAG/B,YCxJMilE,GAAoB5F,GAAMzB,YAAY,CAC1C,MAAO,gBAAiB,iBAAkB,eAAgB,OAC1D,UAAW,OAAQ,OAAQ,oBAAqB,sBAChD,gBAAiB,WAAY,eAAgB,sBAC7C,UAAW,cAAe,eAiB5B,GAAesH,IACb,MAAMC,EAAS,CAAC,EAChB,IAAIlhH,EACA1B,EACAnL,EAsBJ,OApBA8tH,GAAcA,EAAWvrH,MAAM,MAAMqK,SAAQ,SAAgBiE,GAC3D7Q,EAAI6Q,EAAK5G,QAAQ,KACjB4C,EAAMgE,EAAK4kC,UAAU,EAAGz1C,GAAGg3D,OAAOrlD,cAClCxG,EAAM0F,EAAK4kC,UAAUz1C,EAAI,GAAGg3D,QAEvBnqD,GAAQkhH,EAAOlhH,IAAQghH,GAAkBhhH,KAIlC,eAARA,EACEkhH,EAAOlhH,GACTkhH,EAAOlhH,GAAK5K,KAAKkJ,GAEjB4iH,EAAOlhH,GAAO,CAAC1B,GAGjB4iH,EAAOlhH,GAAOkhH,EAAOlhH,GAAOkhH,EAAOlhH,GAAO,KAAO1B,EAAMA,EAE3D,IAEO4iH,CACR,ECjDKC,GAAaz0F,OAAO,aAE1B,SAAS00F,GAAgBC,GACvB,OAAOA,GAAU1iH,OAAO0iH,GAAQl3D,OAAOrlD,aACzC,CAEA,SAASw8G,GAAezrH,GACtB,OAAc,IAAVA,GAA4B,MAATA,EACdA,EAGFulH,GAAM75G,QAAQ1L,GAASA,EAAMqK,IAAIohH,IAAkB3iH,OAAO9I,EACnE,CAEA,SAAS0rH,GAAY/hH,GACnB,MAAM7E,EAASkC,OAAO0F,OAAO,MACvBi/G,EAAW,mCACjB,IAAItqH,EAEJ,MAAQA,EAAQsqH,EAASzoH,KAAKyG,GAC5B7E,EAAOzD,EAAM,IAAMA,EAAM,GAG3B,OAAOyD,CACT,CAEA,MAAM8mH,GAAqBjiH,GAAQ,iCAAiCzI,KAAKyI,EAAI2qD,QAE7E,SAASu3D,GAAiB38F,EAASlvB,EAAOwrH,EAAQtxG,EAAQ4xG,GACxD,OAAIvG,GAAMvE,WAAW9mG,GACZA,EAAOvY,KAAK5C,KAAMiB,EAAOwrH,IAG9BM,IACF9rH,EAAQwrH,GAGLjG,GAAMrE,SAASlhH,GAEhBulH,GAAMrE,SAAShnG,IACiB,IAA3Bla,EAAMuH,QAAQ2S,GAGnBqrG,GAAM1L,SAAS3/F,GACVA,EAAOhZ,KAAKlB,QADrB,OANA,EASF,CAEA,SAAS+rH,GAAaP,GACpB,OAAOA,EAAOl3D,OACXrlD,cAAcvN,QAAQ,mBAAmB,CAACyC,EAAG6nH,EAAMriH,IAC3CqiH,EAAKjtG,cAAgBpV,GAElC,CAEA,SAASsiH,GAAe1jH,EAAKijH,GAC3B,MAAMU,EAAe3G,GAAMhC,YAAY,IAAMiI,GAE7C,CAAC,MAAO,MAAO,OAAOthH,SAAQiiH,IAC5BnlH,OAAO0B,eAAeH,EAAK4jH,EAAaD,EAAc,CACpDlsH,MAAO,SAASosH,EAAMC,EAAMC,GAC1B,OAAOvtH,KAAKotH,GAAYxqH,KAAK5C,KAAMysH,EAAQY,EAAMC,EAAMC,EACzD,EACAzjH,cAAc,GACd,GAEN,CAEA,MAAM0jH,GACJ,WAAAr1G,CAAY8yG,GACVA,GAAWjrH,KAAK0b,IAAIuvG,EACtB,CAEA,GAAAvvG,CAAI+wG,EAAQgB,EAAgBC,GAC1B,MAAMtpF,EAAOpkC,KAEb,SAAS2tH,EAAUC,EAAQC,EAASC,GAClC,MAAMC,EAAUvB,GAAgBqB,GAEhC,IAAKE,EACH,MAAM,IAAItzG,MAAM,0CAGlB,MAAMrP,EAAMo7G,GAAMtD,QAAQ9+E,EAAM2pF,KAE5B3iH,QAAqBhF,IAAdg+B,EAAKh5B,KAAmC,IAAb0iH,QAAmC1nH,IAAb0nH,IAAwC,IAAd1pF,EAAKh5B,MACzFg5B,EAAKh5B,GAAOyiH,GAAWnB,GAAekB,GAE1C,CAEA,MAAMI,EAAa,CAAC/C,EAAS6C,IAC3BtH,GAAMr7G,QAAQ8/G,GAAS,CAAC2C,EAAQC,IAAYF,EAAUC,EAAQC,EAASC,KAUzE,OARItH,GAAMlE,cAAcmK,IAAWA,aAAkBzsH,KAAKmY,YACxD61G,EAAWvB,EAAQgB,GACXjH,GAAMrE,SAASsK,KAAYA,EAASA,EAAOl3D,UAAYs3D,GAAkBJ,GACjFuB,EAAWC,GAAaxB,GAASgB,GAEvB,MAAVhB,GAAkBkB,EAAUF,EAAgBhB,EAAQiB,GAG/C1tH,IACT,CAEA,GAAAgX,CAAIy1G,EAAQ7B,GAGV,GAFA6B,EAASD,GAAgBC,GAErBA,EAAQ,CACV,MAAMrhH,EAAMo7G,GAAMtD,QAAQljH,KAAMysH,GAEhC,GAAIrhH,EAAK,CACP,MAAMnK,EAAQjB,KAAKoL,GAEnB,IAAKw/G,EACH,OAAO3pH,EAGT,IAAe,IAAX2pH,EACF,OAAO+B,GAAY1rH,GAGrB,GAAIulH,GAAMvE,WAAW2I,GACnB,OAAOA,EAAOhoH,KAAK5C,KAAMiB,EAAOmK,GAGlC,GAAIo7G,GAAM1L,SAAS8P,GACjB,OAAOA,EAAOzmH,KAAKlD,GAGrB,MAAM,IAAI8J,UAAU,yCACtB,CACF,CACF,CAEA,GAAAi/E,CAAIyiC,EAAQyB,GAGV,GAFAzB,EAASD,GAAgBC,GAErBA,EAAQ,CACV,MAAMrhH,EAAMo7G,GAAMtD,QAAQljH,KAAMysH,GAEhC,SAAUrhH,QAAqBhF,IAAdpG,KAAKoL,IAAwB8iH,IAAWpB,GAAiB9sH,KAAMA,KAAKoL,GAAMA,EAAK8iH,GAClG,CAEA,OAAO,CACT,CAEA,OAAOzB,EAAQyB,GACb,MAAM9pF,EAAOpkC,KACb,IAAImuH,GAAU,EAEd,SAASC,EAAaP,GAGpB,GAFAA,EAAUrB,GAAgBqB,GAEtBA,EAAS,CACX,MAAMziH,EAAMo7G,GAAMtD,QAAQ9+E,EAAMypF,IAE5BziH,GAAS8iH,IAAWpB,GAAiB1oF,EAAMA,EAAKh5B,GAAMA,EAAK8iH,YACtD9pF,EAAKh5B,GAEZ+iH,GAAU,EAEd,CACF,CAQA,OANI3H,GAAM75G,QAAQ8/G,GAChBA,EAAOthH,QAAQijH,GAEfA,EAAa3B,GAGR0B,CACT,CAEA,KAAAn7B,CAAMk7B,GACJ,MAAMhjH,EAAOjD,OAAOiD,KAAKlL,MACzB,IAAIzB,EAAI2M,EAAKvK,OACTwtH,GAAU,EAEd,MAAO5vH,IAAK,CACV,MAAM6M,EAAMF,EAAK3M,GACb2vH,IAAWpB,GAAiB9sH,KAAMA,KAAKoL,GAAMA,EAAK8iH,GAAS,YACtDluH,KAAKoL,GACZ+iH,GAAU,EAEd,CAEA,OAAOA,CACT,CAEA,SAAAE,CAAUC,GACR,MAAMlqF,EAAOpkC,KACPirH,EAAU,CAAC,EAsBjB,OApBAzE,GAAMr7G,QAAQnL,MAAM,CAACiB,EAAOwrH,KAC1B,MAAMrhH,EAAMo7G,GAAMtD,QAAQ+H,EAASwB,GAEnC,GAAIrhH,EAGF,OAFAg5B,EAAKh5B,GAAOshH,GAAezrH,eACpBmjC,EAAKqoF,GAId,MAAM8B,EAAaD,EAAStB,GAAaP,GAAU1iH,OAAO0iH,GAAQl3D,OAE9Dg5D,IAAe9B,UACVroF,EAAKqoF,GAGdroF,EAAKmqF,GAAc7B,GAAezrH,GAElCgqH,EAAQsD,IAAc,CAAI,IAGrBvuH,IACT,CAEA,MAAAwgC,IAAUguF,GACR,OAAOxuH,KAAKmY,YAAYqoB,OAAOxgC,QAASwuH,EAC1C,CAEA,MAAAryE,CAAOsyE,GACL,MAAMjlH,EAAMvB,OAAO0F,OAAO,MAM1B,OAJA64G,GAAMr7G,QAAQnL,MAAM,CAACiB,EAAOwrH,KACjB,MAATxrH,IAA2B,IAAVA,IAAoBuI,EAAIijH,GAAUgC,GAAajI,GAAM75G,QAAQ1L,GAASA,EAAM2H,KAAK,MAAQ3H,EAAM,IAG3GuI,CACT,CAEA,CAACsuB,OAAOC,YACN,OAAO9vB,OAAOwiH,QAAQzqH,KAAKm8C,UAAUrkB,OAAOC,WAC9C,CAEA,QAAA7vB,GACE,OAAOD,OAAOwiH,QAAQzqH,KAAKm8C,UAAU7wC,KAAI,EAAEmhH,EAAQxrH,KAAWwrH,EAAS,KAAOxrH,IAAO2H,KAAK,KAC5F,CAEA,IAAKkvB,OAAOyqF,eACV,MAAO,cACT,CAEA,WAAOviF,CAAK4hF,GACV,OAAOA,aAAiB5hH,KAAO4hH,EAAQ,IAAI5hH,KAAK4hH,EAClD,CAEA,aAAOphF,CAAOisB,KAAU+hE,GACtB,MAAME,EAAW,IAAI1uH,KAAKysD,GAI1B,OAFA+hE,EAAQrjH,SAASL,GAAW4jH,EAAShzG,IAAI5Q,KAElC4jH,CACT,CAEA,eAAOC,CAASlC,GACd,MAAMmC,EAAY5uH,KAAKusH,IAAevsH,KAAKusH,IAAc,CACvDsC,UAAW,CAAC,GAGRA,EAAYD,EAAUC,UACtBhsH,EAAY7C,KAAK6C,UAEvB,SAASisH,EAAejB,GACtB,MAAME,EAAUvB,GAAgBqB,GAE3BgB,EAAUd,KACbb,GAAerqH,EAAWgrH,GAC1BgB,EAAUd,IAAW,EAEzB,CAIA,OAFAvH,GAAM75G,QAAQ8/G,GAAUA,EAAOthH,QAAQ2jH,GAAkBA,EAAerC,GAEjEzsH,IACT,EAGFwtH,GAAamB,SAAS,CAAC,eAAgB,iBAAkB,SAAU,kBAAmB,aAAc,kBAGpGnI,GAAM/B,kBAAkB+I,GAAa3qH,WAAW,EAAE5B,SAAQmK,KACxD,IAAI2jH,EAAS3jH,EAAI,GAAG4U,cAAgB5U,EAAInF,MAAM,GAC9C,MAAO,CACL+Q,IAAK,IAAM/V,EACX,GAAAya,CAAIszG,GACFhvH,KAAK+uH,GAAUC,CACjB,EACF,IAGFxI,GAAM1B,cAAc0I,IAEpB,YC3Re,SAASyB,GAAcC,EAAK5I,GACzC,MAAMrnG,EAASjf,MAAQ,GACjBmwB,EAAUm2F,GAAYrnG,EACtBgsG,EAAU,GAAajrF,KAAK7P,EAAQ86F,SAC1C,IAAIzwG,EAAO2V,EAAQ3V,KAQnB,OANAgsG,GAAMr7G,QAAQ+jH,GAAK,SAAmBzV,GACpCj/F,EAAOi/F,EAAG72G,KAAKqc,EAAQzE,EAAMywG,EAAQoD,YAAa/H,EAAWA,EAASK,YAASvgH,EACjF,IAEA6kH,EAAQoD,YAED7zG,CACT,CCzBe,SAAS20G,GAASluH,GAC/B,SAAUA,IAASA,EAAMmuH,WAC3B,CCUA,SAASC,GAAc1zG,EAASsD,EAAQonG,GAEtC,GAAWzjH,KAAK5C,KAAiB,MAAX2b,EAAkB,WAAaA,EAAS,GAAW2zG,aAAcrwG,EAAQonG,GAC/FrmH,KAAKyJ,KAAO,eACd,CAEA+8G,GAAMzkH,SAASstH,GAAe,GAAY,CACxCD,YAAY,IAGd,YCXe,SAASG,GAAO91G,EAAS+1G,EAAQlJ,GAC9C,MAAM4F,EAAiB5F,EAASrnG,OAAOitG,eAClC5F,EAASK,QAAWuF,IAAkBA,EAAe5F,EAASK,QAGjE6I,EAAO,IAAI,GACT,mCAAqClJ,EAASK,OAC9C,CAAC,GAAW8I,gBAAiB,GAAW5D,kBAAkB1/G,KAAKg6C,MAAMmgE,EAASK,OAAS,KAAO,GAC9FL,EAASrnG,OACTqnG,EAASD,QACTC,IAPF7sG,EAAQ6sG,EAUZ,CCvBA,SAAer2G,GAAS25G,sBAGtB,CACE,KAAA8F,CAAMjmH,EAAMxI,EAAO0uH,EAASj4G,EAAMk4G,EAAQC,GACxC,MAAMC,EAAS,CAACrmH,EAAO,IAAM2+G,mBAAmBnnH,IAEhDulH,GAAMpE,SAASuN,IAAYG,EAAOtvH,KAAK,WAAa,IAAIqoB,KAAK8mG,GAASI,eAEtEvJ,GAAMrE,SAASzqG,IAASo4G,EAAOtvH,KAAK,QAAUkX,GAE9C8uG,GAAMrE,SAASyN,IAAWE,EAAOtvH,KAAK,UAAYovH,IAEvC,IAAXC,GAAmBC,EAAOtvH,KAAK,UAE/BsR,SAASg+G,OAASA,EAAOlnH,KAAK,KAChC,EAEA,IAAAonH,CAAKvmH,GACH,MAAMnH,EAAQwP,SAASg+G,OAAOxtH,MAAM,IAAIkC,OAAO,aAAeiF,EAAO,cACrE,OAAQnH,EAAQ2tH,mBAAmB3tH,EAAM,IAAM,IACjD,EAEA,MAAA4D,CAAOuD,GACLzJ,KAAK0vH,MAAMjmH,EAAM,GAAIof,KAAKC,MAAQ,MACpC,GAMF,CACE,KAAA4mG,GAAS,EACT,IAAAM,GACE,OAAO,IACT,EACA,MAAA9pH,GAAU,GC9BC,SAASgqH,GAAcj5G,GAIpC,MAAO,8BAA8B9U,KAAK8U,EAC5C,CCJe,SAASk5G,GAAYC,EAASC,GAC3C,OAAOA,EACHD,EAAQztH,QAAQ,OAAQ,IAAM,IAAM0tH,EAAY1tH,QAAQ,OAAQ,IAChEytH,CACN,CCCe,SAASE,GAAcF,EAASG,GAC7C,OAAIH,IAAYF,GAAcK,GACrBJ,GAAYC,EAASG,GAEvBA,CACT,CCfA,SAAetgH,GAAS25G,sBAItB,WACE,MAAM4G,EAAO,kBAAkBruH,KAAK4N,UAAUK,WACxCqgH,EAAiB3+G,SAASM,cAAc,KAC9C,IAAIs+G,EAQJ,SAASC,EAAW15G,GAClB,IAAInC,EAAOmC,EAWX,OATIu5G,IAEFC,EAAeh+G,aAAa,OAAQqC,GACpCA,EAAO27G,EAAe37G,MAGxB27G,EAAeh+G,aAAa,OAAQqC,GAG7B,CACLA,KAAM27G,EAAe37G,KACrB87G,SAAUH,EAAeG,SAAWH,EAAeG,SAASjuH,QAAQ,KAAM,IAAM,GAChF+mB,KAAM+mG,EAAe/mG,KACrBixB,OAAQ81E,EAAe91E,OAAS81E,EAAe91E,OAAOh4C,QAAQ,MAAO,IAAM,GAC3EkuH,KAAMJ,EAAeI,KAAOJ,EAAeI,KAAKluH,QAAQ,KAAM,IAAM,GACpEmuH,SAAUL,EAAeK,SACzBC,KAAMN,EAAeM,KACrBC,SAAiD,MAAtCP,EAAeO,SAAStoH,OAAO,GACxC+nH,EAAeO,SACf,IAAMP,EAAeO,SAE3B,CAUA,OARAN,EAAYC,EAAW1pH,OAAOmgB,SAAStS,MAQhC,SAAyBm8G,GAC9B,MAAM3E,EAAU9F,GAAMrE,SAAS8O,GAAeN,EAAWM,GAAcA,EACvE,OAAQ3E,EAAOsE,WAAaF,EAAUE,UAClCtE,EAAO5iG,OAASgnG,EAAUhnG,IAChC,CACD,CAlDD,GAqDA,WACE,OAAO,WACL,OAAO,CACT,CACD,CAJD,GC5Da,SAASwnG,GAAcj6G,GACpC,MAAM3U,EAAQ,4BAA4B6B,KAAK8S,GAC/C,OAAO3U,GAASA,EAAM,IAAM,EAC9B,CCGA,SAAS6uH,GAAYC,EAAc/kH,GACjC+kH,EAAeA,GAAgB,GAC/B,MAAMvd,EAAQ,IAAIroG,MAAM4lH,GAClBC,EAAa,IAAI7lH,MAAM4lH,GAC7B,IAEIE,EAFA3+G,EAAO,EACP4+G,EAAO,EAKX,OAFAllH,OAAcjG,IAARiG,EAAoBA,EAAM,IAEzB,SAAcmlH,GACnB,MAAM1oG,EAAMD,KAAKC,MAEX2oG,EAAYJ,EAAWE,GAExBD,IACHA,EAAgBxoG,GAGlB+qF,EAAMlhG,GAAQ6+G,EACdH,EAAW1+G,GAAQmW,EAEnB,IAAIvqB,EAAIgzH,EACJG,EAAa,EAEjB,MAAOnzH,IAAMoU,EACX++G,GAAc7d,EAAMt1G,KACpBA,GAAQ6yH,EASV,GANAz+G,GAAQA,EAAO,GAAKy+G,EAEhBz+G,IAAS4+G,IACXA,GAAQA,EAAO,GAAKH,GAGlBtoG,EAAMwoG,EAAgBjlH,EACxB,OAGF,MAAMslH,EAASF,GAAa3oG,EAAM2oG,EAElC,OAAOE,EAASxlH,KAAK0K,MAAmB,IAAb66G,EAAoBC,QAAUvrH,CAC3D,CACF,CAEA,YCtCA,SAASwrH,GAAqB3pG,EAAU4pG,GACtC,IAAIC,EAAgB,EACpB,MAAMC,EAAe,GAAY,GAAI,KAErC,OAAO5zH,IACL,MAAM6zH,EAAS7zH,EAAE6zH,OACXC,EAAQ9zH,EAAE+zH,iBAAmB/zH,EAAE8zH,WAAQ7rH,EACvC+rH,EAAgBH,EAASF,EACzBM,EAAOL,EAAaI,GACpBE,EAAUL,GAAUC,EAE1BH,EAAgBE,EAEhB,MAAMx3G,EAAO,CACXw3G,SACAC,QACAK,SAAUL,EAASD,EAASC,OAAS7rH,EACrCytG,MAAOse,EACPC,KAAMA,QAAchsH,EACpBmsH,UAAWH,GAAQH,GAASI,GAAWJ,EAAQD,GAAUI,OAAOhsH,EAChE4iB,MAAO7qB,GAGTqc,EAAKq3G,EAAmB,WAAa,WAAY,EAEjD5pG,EAASzN,EAAK,CAElB,CAEA,MAAMg4G,GAAkD,qBAAnBr7G,eAErC,GAAeq7G,IAAyB,SAAUvzG,GAChD,OAAO,IAAIzF,SAAQ,SAA4BC,EAAS+1G,GACtD,IAAIiD,EAAcxzG,EAAOzE,KACzB,MAAMk4G,EAAiB,GAAa1yF,KAAK/gB,EAAOgsG,SAASoD,YACzD,IACIsE,EAWAzH,GAZA,aAACS,EAAY,cAAEiH,GAAiB3zG,EAEpC,SAAS+Y,IACH/Y,EAAO4zG,aACT5zG,EAAO4zG,YAAYC,YAAYH,GAG7B1zG,EAAO8zG,QACT9zG,EAAO8zG,OAAO34G,oBAAoB,QAASu4G,EAE/C,CAIA,GAAInM,GAAM1D,WAAW2P,GACnB,GAAIxiH,GAAS25G,uBAAyB35G,GAAS65G,+BAC7C4I,EAAepH,gBAAe,QACzB,IAAwD,KAAnDJ,EAAcwH,EAAevH,kBAA6B,CAEpE,MAAOnqH,KAAS+E,GAAUmlH,EAAcA,EAAYpqH,MAAM,KAAKwK,KAAI3M,GAASA,EAAM42D,SAAQp6C,OAAOgvB,SAAW,GAC5GuoF,EAAepH,eAAe,CAACtqH,GAAQ,yBAA0B+E,GAAQ6C,KAAK,MAChF,CAGF,IAAIy9G,EAAU,IAAIlvG,eAGlB,GAAI8H,EAAO+zG,KAAM,CACf,MAAMC,EAAWh0G,EAAO+zG,KAAKC,UAAY,GACnCC,EAAWj0G,EAAO+zG,KAAKE,SAAWC,SAAS/K,mBAAmBnpG,EAAO+zG,KAAKE,WAAa,GAC7FR,EAAeh3G,IAAI,gBAAiB,SAAW03G,KAAKH,EAAW,IAAMC,GACvE,CAEA,MAAMG,EAAW/C,GAAcrxG,EAAOmxG,QAASnxG,EAAOhI,KAOtD,SAASq8G,IACP,IAAKjN,EACH,OAGF,MAAMkN,EAAkB,GAAavzF,KACnC,0BAA2BqmF,GAAWA,EAAQmN,yBAE1CC,EAAgB9H,GAAiC,SAAjBA,GAA4C,SAAjBA,EACxCtF,EAAQC,SAA/BD,EAAQ9uG,aACJ+uG,EAAW,CACf9rG,KAAMi5G,EACN9M,OAAQN,EAAQM,OAChB+M,WAAYrN,EAAQqN,WACpBzI,QAASsI,EACTt0G,SACAonG,WAGFkJ,IAAO,SAAkBtuH,GACvBwY,EAAQxY,GACR+2B,GACF,IAAG,SAAiBtZ,GAClB8wG,EAAO9wG,GACPsZ,GACF,GAAGsuF,GAGHD,EAAU,IACZ,CAmEA,GArGAA,EAAQjvG,KAAK6H,EAAOkoC,OAAOnnC,cAAeyoG,GAAS4K,EAAUp0G,EAAO9W,OAAQ8W,EAAO00G,mBAAmB,GAGtGtN,EAAQ73G,QAAUyQ,EAAOzQ,QAiCrB,cAAe63G,EAEjBA,EAAQiN,UAAYA,EAGpBjN,EAAQhvG,mBAAqB,WACtBgvG,GAAkC,IAAvBA,EAAQ/uG,aAQD,IAAnB+uG,EAAQM,QAAkBN,EAAQuN,aAAwD,IAAzCvN,EAAQuN,YAAYprH,QAAQ,WAKjFkG,WAAW4kH,EACb,EAIFjN,EAAQwN,QAAU,WACXxN,IAILmJ,EAAO,IAAI,GAAW,kBAAmB,GAAWsE,aAAc70G,EAAQonG,IAG1EA,EAAU,KACZ,EAGAA,EAAQjlB,QAAU,WAGhBouB,EAAO,IAAI,GAAW,gBAAiB,GAAWuE,YAAa90G,EAAQonG,IAGvEA,EAAU,IACZ,EAGAA,EAAQ2N,UAAY,WAClB,IAAIC,EAAsBh1G,EAAOzQ,QAAU,cAAgByQ,EAAOzQ,QAAU,cAAgB,mBAC5F,MAAMs8G,EAAe7rG,EAAO6rG,cAAgB,GACxC7rG,EAAOg1G,sBACTA,EAAsBh1G,EAAOg1G,qBAE/BzE,EAAO,IAAI,GACTyE,EACAnJ,EAAavB,oBAAsB,GAAW2K,UAAY,GAAWJ,aACrE70G,EACAonG,IAGFA,EAAU,IACZ,EAKGp2G,GAAS25G,wBACVgJ,GAAiBpM,GAAMvE,WAAW2Q,KAAmBA,EAAgBA,EAAc3zG,IAE/E2zG,IAAoC,IAAlBA,GAA2BuB,GAAgBd,IAAY,CAE3E,MAAMe,EAAYn1G,EAAO8sG,gBAAkB9sG,EAAO6sG,gBAAkBuI,GAAQrE,KAAK/wG,EAAO6sG,gBAEpFsI,GACF1B,EAAeh3G,IAAIuD,EAAO8sG,eAAgBqI,EAE9C,MAIchuH,IAAhBqsH,GAA6BC,EAAepH,eAAe,MAGvD,qBAAsBjF,GACxBG,GAAMr7G,QAAQunH,EAAev2E,UAAU,SAA0BzyC,EAAK0B,GACpEi7G,EAAQiO,iBAAiBlpH,EAAK1B,EAChC,IAIG88G,GAAMzE,YAAY9iG,EAAOs1G,mBAC5BlO,EAAQkO,kBAAoBt1G,EAAOs1G,iBAIjC5I,GAAiC,SAAjBA,IAClBtF,EAAQsF,aAAe1sG,EAAO0sG,cAIS,oBAA9B1sG,EAAOu1G,oBAChBnO,EAAQpsG,iBAAiB,WAAY23G,GAAqB3yG,EAAOu1G,oBAAoB,IAIhD,oBAA5Bv1G,EAAOw1G,kBAAmCpO,EAAQqO,QAC3DrO,EAAQqO,OAAOz6G,iBAAiB,WAAY23G,GAAqB3yG,EAAOw1G,oBAGtEx1G,EAAO4zG,aAAe5zG,EAAO8zG,UAG/BJ,EAAalkH,IACN43G,IAGLmJ,GAAQ/gH,GAAUA,EAAOzN,KAAO,IAAI,GAAc,KAAMie,EAAQonG,GAAW53G,GAC3E43G,EAAQsO,QACRtO,EAAU,KAAI,EAGhBpnG,EAAO4zG,aAAe5zG,EAAO4zG,YAAY+B,UAAUjC,GAC/C1zG,EAAO8zG,SACT9zG,EAAO8zG,OAAO8B,QAAUlC,IAAe1zG,EAAO8zG,OAAO94G,iBAAiB,QAAS04G,KAInF,MAAM/B,EAAWM,GAAcmC,GAE3BzC,IAAsD,IAA1C3gH,GAASy5G,UAAUlhH,QAAQooH,GACzCpB,EAAO,IAAI,GAAW,wBAA0BoB,EAAW,IAAK,GAAWnB,gBAAiBxwG,IAM9FonG,EAAQ7uG,KAAKi7G,GAAe,KAC9B,GACF,EC9PMqC,GAAgB,CACpBC,KAAM,GACN79G,IAAKA,IAGPsvG,GAAMr7G,QAAQ2pH,IAAe,CAACrb,EAAIx4G,KAChC,GAAIw4G,EAAI,CACN,IACExxG,OAAO0B,eAAe8vG,EAAI,OAAQ,CAACx4G,SACrC,CAAE,MAAO9C,GAET,CACA8J,OAAO0B,eAAe8vG,EAAI,cAAe,CAACx4G,SAC5C,KAGF,MAAM+zH,GAAgBC,GAAW,KAAKA,IAEhCC,GAAoBnK,GAAYvE,GAAMvE,WAAW8I,IAAwB,OAAZA,IAAgC,IAAZA,EAEvF,IACEoK,WAAaC,IACXA,EAAW5O,GAAM75G,QAAQyoH,GAAYA,EAAW,CAACA,GAEjD,MAAM,OAACz0H,GAAUy0H,EACjB,IAAIC,EACAtK,EAEJ,MAAMuK,EAAkB,CAAC,EAEzB,IAAK,IAAI/2H,EAAI,EAAGA,EAAIoC,EAAQpC,IAAK,CAE/B,IAAIwK,EAIJ,GALAssH,EAAgBD,EAAS72H,GAGzBwsH,EAAUsK,GAELH,GAAiBG,KACpBtK,EAAU+J,IAAe/rH,EAAKgB,OAAOsrH,IAAgBnlH,oBAErC9J,IAAZ2kH,GACF,MAAM,IAAI,GAAW,oBAAoBhiH,MAI7C,GAAIgiH,EACF,MAGFuK,EAAgBvsH,GAAM,IAAMxK,GAAKwsH,CACnC,CAEA,IAAKA,EAAS,CAEZ,MAAMwK,EAAUttH,OAAOwiH,QAAQ6K,GAC5BhqH,KAAI,EAAEvC,EAAIs9B,KAAW,WAAWt9B,OACpB,IAAVs9B,EAAkB,sCAAwC,mCAG/D,IAAI5nC,EAAIkC,EACL40H,EAAQ50H,OAAS,EAAI,YAAc40H,EAAQjqH,IAAI0pH,IAAcpsH,KAAK,MAAQ,IAAMosH,GAAaO,EAAQ,IACtG,0BAEF,MAAM,IAAI,GACR,wDAA0D92H,EAC1D,kBAEJ,CAEA,OAAOssH,CAAO,EAEhBqK,SAAUN,IC3DZ,SAASU,GAA6Bv2G,GAKpC,GAJIA,EAAO4zG,aACT5zG,EAAO4zG,YAAY4C,mBAGjBx2G,EAAO8zG,QAAU9zG,EAAO8zG,OAAO8B,QACjC,MAAM,IAAI,GAAc,KAAM51G,EAElC,CASe,SAASy2G,GAAgBz2G,GACtCu2G,GAA6Bv2G,GAE7BA,EAAOgsG,QAAU,GAAajrF,KAAK/gB,EAAOgsG,SAG1ChsG,EAAOzE,KAAOy0G,GAAcrsH,KAC1Bqc,EACAA,EAAO+rG,mBAGgD,IAArD,CAAC,OAAQ,MAAO,SAASxiH,QAAQyW,EAAOkoC,SAC1CloC,EAAOgsG,QAAQK,eAAe,qCAAqC,GAGrE,MAAMP,EAAUqK,GAASD,WAAWl2G,EAAO8rG,SAAW,GAASA,SAE/D,OAAOA,EAAQ9rG,GAAQL,MAAK,SAA6B0nG,GAYvD,OAXAkP,GAA6Bv2G,GAG7BqnG,EAAS9rG,KAAOy0G,GAAcrsH,KAC5Bqc,EACAA,EAAOwsG,kBACPnF,GAGFA,EAAS2E,QAAU,GAAajrF,KAAKsmF,EAAS2E,SAEvC3E,CACT,IAAG,SAA4B2O,GAe7B,OAdK9F,GAAS8F,KACZO,GAA6Bv2G,GAGzBg2G,GAAUA,EAAO3O,WACnB2O,EAAO3O,SAAS9rG,KAAOy0G,GAAcrsH,KACnCqc,EACAA,EAAOwsG,kBACPwJ,EAAO3O,UAET2O,EAAO3O,SAAS2E,QAAU,GAAajrF,KAAKi1F,EAAO3O,SAAS2E,WAIzDzxG,QAAQg2G,OAAOyF,EACxB,GACF,CC3EA,MAAMU,GAAmB/T,GAAUA,aAAiB,GAAeA,EAAMzlE,SAAWylE,EAWrE,SAASgU,GAAYC,EAASC,GAE3CA,EAAUA,GAAW,CAAC,EACtB,MAAM72G,EAAS,CAAC,EAEhB,SAAS82G,EAAejrH,EAAQG,EAAQs4G,GACtC,OAAIiD,GAAMlE,cAAcx3G,IAAW07G,GAAMlE,cAAcr3G,GAC9Cu7G,GAAM3nE,MAAMj8C,KAAK,CAAC2gH,YAAWz4G,EAAQG,GACnCu7G,GAAMlE,cAAcr3G,GACtBu7G,GAAM3nE,MAAM,CAAC,EAAG5zC,GACdu7G,GAAM75G,QAAQ1B,GAChBA,EAAOhF,QAETgF,CACT,CAGA,SAAS+qH,EAAoB52H,EAAG8F,EAAGq+G,GACjC,OAAKiD,GAAMzE,YAAY78G,GAEXshH,GAAMzE,YAAY3iH,QAAvB,EACE22H,OAAe3vH,EAAWhH,EAAGmkH,GAF7BwS,EAAe32H,EAAG8F,EAAGq+G,EAIhC,CAGA,SAAS0S,EAAiB72H,EAAG8F,GAC3B,IAAKshH,GAAMzE,YAAY78G,GACrB,OAAO6wH,OAAe3vH,EAAWlB,EAErC,CAGA,SAASgxH,EAAiB92H,EAAG8F,GAC3B,OAAKshH,GAAMzE,YAAY78G,GAEXshH,GAAMzE,YAAY3iH,QAAvB,EACE22H,OAAe3vH,EAAWhH,GAF1B22H,OAAe3vH,EAAWlB,EAIrC,CAGA,SAASixH,EAAgB/2H,EAAG8F,EAAG++G,GAC7B,OAAIA,KAAQ6R,EACHC,EAAe32H,EAAG8F,GAChB++G,KAAQ4R,EACVE,OAAe3vH,EAAWhH,QAD5B,CAGT,CAEA,MAAMg3H,EAAW,CACfn/G,IAAKg/G,EACL9uE,OAAQ8uE,EACRz7G,KAAMy7G,EACN7F,QAAS8F,EACTlL,iBAAkBkL,EAClBzK,kBAAmByK,EACnBvC,iBAAkBuC,EAClB1nH,QAAS0nH,EACTG,eAAgBH,EAChB3B,gBAAiB2B,EACjBtD,cAAesD,EACfnL,QAASmL,EACTvK,aAAcuK,EACdpK,eAAgBoK,EAChBnK,eAAgBmK,EAChBzB,iBAAkByB,EAClB1B,mBAAoB0B,EACpBI,WAAYJ,EACZlK,iBAAkBkK,EAClBjK,cAAeiK,EACfK,eAAgBL,EAChBM,UAAWN,EACXO,UAAWP,EACXQ,WAAYR,EACZrD,YAAaqD,EACbS,WAAYT,EACZU,iBAAkBV,EAClBhK,eAAgBiK,EAChBlL,QAAS,CAAC7rH,EAAG8F,IAAM8wH,EAAoBL,GAAgBv2H,GAAIu2H,GAAgBzwH,IAAI,IASjF,OANAshH,GAAMr7G,QAAQlD,OAAOiD,KAAKjD,OAAO4C,OAAO,CAAC,EAAGgrH,EAASC,KAAW,SAA4B7R,GAC1F,MAAMplE,EAAQu3E,EAASnS,IAAS+R,EAC1Ba,EAAch4E,EAAMg3E,EAAQ5R,GAAO6R,EAAQ7R,GAAOA,GACvDuC,GAAMzE,YAAY8U,IAAgBh4E,IAAUs3E,IAAqBl3G,EAAOglG,GAAQ4S,EACnF,IAEO53G,CACT,CCzGO,MAAM63G,GAAU,QCKjBC,GAAa,CAAC,EAGpB,CAAC,SAAU,UAAW,SAAU,WAAY,SAAU,UAAU5rH,SAAQ,CAACnK,EAAMzC,KAC7Ew4H,GAAW/1H,GAAQ,SAAmB4gH,GACpC,cAAcA,IAAU5gH,GAAQ,KAAOzC,EAAI,EAAI,KAAO,KAAOyC,CAC/D,CAAC,IAGH,MAAMg2H,GAAqB,CAAC,EAkD5B,SAASC,GAAc5kH,EAAS6kH,EAAQC,GACtC,GAAuB,kBAAZ9kH,EACT,MAAM,IAAI,GAAW,4BAA6B,GAAW+kH,sBAE/D,MAAMlsH,EAAOjD,OAAOiD,KAAKmH,GACzB,IAAI9T,EAAI2M,EAAKvK,OACb,MAAOpC,KAAM,EAAG,CACd,MAAM+c,EAAMpQ,EAAK3M,GACX84H,EAAYH,EAAO57G,GACzB,GAAI+7G,EAAJ,CACE,MAAMp2H,EAAQoR,EAAQiJ,GAChB7Q,OAAmBrE,IAAVnF,GAAuBo2H,EAAUp2H,EAAOqa,EAAKjJ,GAC5D,IAAe,IAAX5H,EACF,MAAM,IAAI,GAAW,UAAY6Q,EAAM,YAAc7Q,EAAQ,GAAW2sH,qBAG5E,MACA,IAAqB,IAAjBD,EACF,MAAM,IAAI,GAAW,kBAAoB77G,EAAK,GAAWg8G,eAE7D,CACF,CA5DAP,GAAWjM,aAAe,SAAsBuM,EAAWr4G,EAASrD,GAClE,SAAS47G,EAAcj8G,EAAKk8G,GAC1B,MAAO,WAAaV,GAAU,0BAA6Bx7G,EAAM,IAAOk8G,GAAQ77G,EAAU,KAAOA,EAAU,GAC7G,CAGA,MAAO,CAAC1a,EAAOqa,EAAKY,KAClB,IAAkB,IAAdm7G,EACF,MAAM,IAAI,GACRE,EAAcj8G,EAAK,qBAAuB0D,EAAU,OAASA,EAAU,KACvE,GAAWy4G,gBAef,OAXIz4G,IAAYg4G,GAAmB17G,KACjC07G,GAAmB17G,IAAO,EAE1B5T,QAAQ6T,KACNg8G,EACEj8G,EACA,+BAAiC0D,EAAU,8CAK1Cq4G,GAAYA,EAAUp2H,EAAOqa,EAAKY,EAAY,CAEzD,EAmCA,UACE+6G,iBACAF,eC9EI,GAAaM,GAAUN,WAS7B,MAAMW,GACJ,WAAAv/G,CAAYw/G,GACV33H,KAAK6qH,SAAW8M,EAChB33H,KAAK43H,aAAe,CAClBvR,QAAS,IAAI,GACbC,SAAU,IAAI,GAElB,CAUA,OAAAD,CAAQwR,EAAa54G,GAGQ,kBAAhB44G,GACT54G,EAASA,GAAU,CAAC,EACpBA,EAAOhI,IAAM4gH,GAEb54G,EAAS44G,GAAe,CAAC,EAG3B54G,EAAS22G,GAAY51H,KAAK6qH,SAAU5rG,GAEpC,MAAM,aAAC6rG,EAAY,iBAAE6I,EAAgB,QAAE1I,GAAWhsG,OAE7B7Y,IAAjB0kH,GACFuM,GAAUJ,cAAcnM,EAAc,CACpCzB,kBAAmB,GAAWyB,aAAa,GAAWgN,SACtDxO,kBAAmB,GAAWwB,aAAa,GAAWgN,SACtDvO,oBAAqB,GAAWuB,aAAa,GAAWgN,WACvD,GAGmB,MAApBnE,IACEnN,GAAMvE,WAAW0R,GACnB10G,EAAO00G,iBAAmB,CACxBhL,UAAWgL,GAGb0D,GAAUJ,cAActD,EAAkB,CACxCzL,OAAQ,GAAW6P,SACnBpP,UAAW,GAAWoP,WACrB,IAKP94G,EAAOkoC,QAAUloC,EAAOkoC,QAAUnnD,KAAK6qH,SAAS1jE,QAAU,OAAOj3C,cAGjE,IAAI8nH,EAAiB/M,GAAWzE,GAAM3nE,MACpCosE,EAAQkB,OACRlB,EAAQhsG,EAAOkoC,SAGjB8jE,GAAWzE,GAAMr7G,QACf,CAAC,SAAU,MAAO,OAAQ,OAAQ,MAAO,QAAS,WACjDg8C,WACQ8jE,EAAQ9jE,EAAO,IAI1BloC,EAAOgsG,QAAU,GAAazqF,OAAOw3F,EAAgB/M,GAGrD,MAAMgN,EAA0B,GAChC,IAAIC,GAAiC,EACrCl4H,KAAK43H,aAAavR,QAAQl7G,SAAQ,SAAoCgtH,GACjC,oBAAxBA,EAAYhP,UAA0D,IAAhCgP,EAAYhP,QAAQlqG,KAIrEi5G,EAAiCA,GAAkCC,EAAYjP,YAE/E+O,EAAwBr3H,QAAQu3H,EAAYnP,UAAWmP,EAAYlP,UACrE,IAEA,MAAMmP,EAA2B,GAKjC,IAAIC,EAJJr4H,KAAK43H,aAAatR,SAASn7G,SAAQ,SAAkCgtH,GACnEC,EAAyB53H,KAAK23H,EAAYnP,UAAWmP,EAAYlP,SACnE,IAGA,IACIt9G,EADApN,EAAI,EAGR,IAAK25H,EAAgC,CACnC,MAAM/uD,EAAQ,CAACusD,GAAgBjtG,KAAKzoB,WAAOoG,GAC3C+iE,EAAMvoE,QAAQ6G,MAAM0hE,EAAO8uD,GAC3B9uD,EAAM3oE,KAAKiH,MAAM0hE,EAAOivD,GACxBzsH,EAAMw9D,EAAMxoE,OAEZ03H,EAAU7+G,QAAQC,QAAQwF,GAE1B,MAAO1gB,EAAIoN,EACT0sH,EAAUA,EAAQz5G,KAAKuqD,EAAM5qE,KAAM4qE,EAAM5qE,MAG3C,OAAO85H,CACT,CAEA1sH,EAAMssH,EAAwBt3H,OAE9B,IAAIukF,EAAYjmE,EAEhB1gB,EAAI,EAEJ,MAAOA,EAAIoN,EAAK,CACd,MAAM2sH,EAAcL,EAAwB15H,KACtCg6H,EAAaN,EAAwB15H,KAC3C,IACE2mF,EAAYozC,EAAYpzC,EAC1B,CAAE,MAAOv9E,GACP4wH,EAAW31H,KAAK5C,KAAM2H,GACtB,KACF,CACF,CAEA,IACE0wH,EAAU3C,GAAgB9yH,KAAK5C,KAAMklF,EACvC,CAAE,MAAOv9E,GACP,OAAO6R,QAAQg2G,OAAO7nH,EACxB,CAEApJ,EAAI,EACJoN,EAAMysH,EAAyBz3H,OAE/B,MAAOpC,EAAIoN,EACT0sH,EAAUA,EAAQz5G,KAAKw5G,EAAyB75H,KAAM65H,EAAyB75H,MAGjF,OAAO85H,CACT,CAEA,MAAAG,CAAOv5G,GACLA,EAAS22G,GAAY51H,KAAK6qH,SAAU5rG,GACpC,MAAMo0G,EAAW/C,GAAcrxG,EAAOmxG,QAASnxG,EAAOhI,KACtD,OAAOwxG,GAAS4K,EAAUp0G,EAAO9W,OAAQ8W,EAAO00G,iBAClD,EAIFnN,GAAMr7G,QAAQ,CAAC,SAAU,MAAO,OAAQ,YAAY,SAA6Bg8C,GAE/EuwE,GAAM70H,UAAUskD,GAAU,SAASlwC,EAAKgI,GACtC,OAAOjf,KAAKqmH,QAAQuP,GAAY32G,GAAU,CAAC,EAAG,CAC5CkoC,SACAlwC,MACAuD,MAAOyE,GAAU,CAAC,GAAGzE,OAEzB,CACF,IAEAgsG,GAAMr7G,QAAQ,CAAC,OAAQ,MAAO,UAAU,SAA+Bg8C,GAGrE,SAASsxE,EAAmBC,GAC1B,OAAO,SAAoBzhH,EAAKuD,EAAMyE,GACpC,OAAOjf,KAAKqmH,QAAQuP,GAAY32G,GAAU,CAAC,EAAG,CAC5CkoC,SACA8jE,QAASyN,EAAS,CAChB,eAAgB,uBACd,CAAC,EACLzhH,MACAuD,SAEJ,CACF,CAEAk9G,GAAM70H,UAAUskD,GAAUsxE,IAE1Bf,GAAM70H,UAAUskD,EAAS,QAAUsxE,GAAmB,EACxD,IAEA,YC7LA,MAAME,GACJ,WAAAxgH,CAAYygH,GACV,GAAwB,oBAAbA,EACT,MAAM,IAAI7tH,UAAU,gCAGtB,IAAI8tH,EAEJ74H,KAAKq4H,QAAU,IAAI7+G,SAAQ,SAAyBC,GAClDo/G,EAAiBp/G,CACnB,IAEA,MAAM9a,EAAQqB,KAGdA,KAAKq4H,QAAQz5G,MAAKnQ,IAChB,IAAK9P,EAAMm6H,WAAY,OAEvB,IAAIv6H,EAAII,EAAMm6H,WAAWn4H,OAEzB,MAAOpC,KAAM,EACXI,EAAMm6H,WAAWv6H,GAAGkQ,GAEtB9P,EAAMm6H,WAAa,IAAI,IAIzB94H,KAAKq4H,QAAQz5G,KAAOm6G,IAClB,IAAIC,EAEJ,MAAMX,EAAU,IAAI7+G,SAAQC,IAC1B9a,EAAMi2H,UAAUn7G,GAChBu/G,EAAWv/G,CAAO,IACjBmF,KAAKm6G,GAMR,OAJAV,EAAQ5pH,OAAS,WACf9P,EAAMm0H,YAAYkG,EACpB,EAEOX,CAAO,EAGhBO,GAAS,SAAgBj9G,EAASsD,EAAQonG,GACpC1nH,EAAMs2H,SAKVt2H,EAAMs2H,OAAS,IAAI,GAAct5G,EAASsD,EAAQonG,GAClDwS,EAAel6H,EAAMs2H,QACvB,GACF,CAKA,gBAAAQ,GACE,GAAIz1H,KAAKi1H,OACP,MAAMj1H,KAAKi1H,MAEf,CAMA,SAAAL,CAAU3sG,GACJjoB,KAAKi1H,OACPhtG,EAASjoB,KAAKi1H,QAIZj1H,KAAK84H,WACP94H,KAAK84H,WAAWt4H,KAAKynB,GAErBjoB,KAAK84H,WAAa,CAAC7wG,EAEvB,CAMA,WAAA6qG,CAAY7qG,GACV,IAAKjoB,KAAK84H,WACR,OAEF,MAAM90H,EAAQhE,KAAK84H,WAAWtwH,QAAQyf,IACvB,IAAXjkB,GACFhE,KAAK84H,WAAWjrH,OAAO7J,EAAO,EAElC,CAMA,aAAOiH,GACL,IAAIwD,EACJ,MAAM9P,EAAQ,IAAIg6H,IAAY,SAAkBl5H,GAC9CgP,EAAShP,CACX,IACA,MAAO,CACLd,QACA8P,SAEJ,EAGF,YCjGe,SAASwqH,GAAOlxH,GAC7B,OAAO,SAAcyF,GACnB,OAAOzF,EAASN,MAAM,KAAM+F,EAC9B,CACF,CChBe,SAAS0rH,GAAa9xH,GACnC,OAAOo/G,GAAMjZ,SAASnmG,KAAsC,IAAzBA,EAAQ8xH,YAC7C,CCbA,MAAMC,GAAiB,CACrBC,SAAU,IACVC,mBAAoB,IACpBC,WAAY,IACZC,WAAY,IACZC,GAAI,IACJC,QAAS,IACTC,SAAU,IACVC,4BAA6B,IAC7BC,UAAW,IACXC,aAAc,IACdC,eAAgB,IAChBC,YAAa,IACbC,gBAAiB,IACjBC,OAAQ,IACRC,gBAAiB,IACjBC,iBAAkB,IAClBC,MAAO,IACPC,SAAU,IACVC,YAAa,IACbC,SAAU,IACVC,OAAQ,IACRC,kBAAmB,IACnBC,kBAAmB,IACnBC,WAAY,IACZC,aAAc,IACdC,gBAAiB,IACjBC,UAAW,IACXC,SAAU,IACVC,iBAAkB,IAClBC,cAAe,IACfC,4BAA6B,IAC7BC,eAAgB,IAChBC,SAAU,IACVC,KAAM,IACNC,eAAgB,IAChBC,mBAAoB,IACpBC,gBAAiB,IACjBC,WAAY,IACZC,qBAAsB,IACtBC,oBAAqB,IACrBC,kBAAmB,IACnBC,UAAW,IACXC,mBAAoB,IACpBC,oBAAqB,IACrBC,OAAQ,IACRC,iBAAkB,IAClBC,SAAU,IACVC,gBAAiB,IACjBC,qBAAsB,IACtBC,gBAAiB,IACjBC,4BAA6B,IAC7BC,2BAA4B,IAC5BC,oBAAqB,IACrBC,eAAgB,IAChBC,WAAY,IACZC,mBAAoB,IACpBC,eAAgB,IAChBC,wBAAyB,IACzBC,sBAAuB,IACvBC,oBAAqB,IACrBC,aAAc,IACdC,YAAa,IACbC,8BAA+B,KAGjCj1H,OAAOwiH,QAAQ0O,IAAgBhuH,SAAQ,EAAEC,EAAKnK,MAC5Ck4H,GAAel4H,GAASmK,CAAG,IAG7B,YC3CA,SAAS+xH,GAAeC,GACtB,MAAMjtG,EAAU,IAAI,GAAMitG,GACpBC,EAAW50G,EAAK,GAAM5lB,UAAUwjH,QAASl2F,GAa/C,OAVAq2F,GAAM3kG,OAAOw7G,EAAU,GAAMx6H,UAAWstB,EAAS,CAAC8yF,YAAY,IAG9DuD,GAAM3kG,OAAOw7G,EAAUltG,EAAS,KAAM,CAAC8yF,YAAY,IAGnDoa,EAAS1vH,OAAS,SAAgBgqH,GAChC,OAAOwF,GAAevH,GAAYwH,EAAezF,GACnD,EAEO0F,CACT,CAGA,MAAMC,GAAQH,GAAe,IAG7BG,GAAM5F,MAAQ,GAGd4F,GAAMjO,cAAgB,GACtBiO,GAAM3E,YAAc,GACpB2E,GAAMnO,SAAWA,GACjBmO,GAAMxG,QAAUA,GAChBwG,GAAMjW,WAAa,GAGnBiW,GAAMlX,WAAa,GAGnBkX,GAAMC,OAASD,GAAMjO,cAGrBiO,GAAMngH,IAAM,SAAaqgH,GACvB,OAAOhkH,QAAQ2D,IAAIqgH,EACrB,EAEAF,GAAMrE,OAASA,GAGfqE,GAAMpE,aAAeA,GAGrBoE,GAAM1H,YAAcA,GAEpB0H,GAAM9P,aAAe,GAErB8P,GAAMG,WAAa7b,GAAS,GAAe4E,GAAMjC,WAAW3C,GAAS,IAAImB,SAASnB,GAASA,GAE3F0b,GAAMnI,WAAaC,GAASD,WAE5BmI,GAAMnE,eAAiB,GAEvBmE,GAAMz+G,QAAUy+G,GAGhB,W","sources":["webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/ace-builds/src-min-noconflict/mode-ruby.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/ace-builds/src-min-noconflict/theme-twilight.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/ace-builds/src-noconflict/ace.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/sprintf-js/src/sprintf.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/an-instance.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/array-buffer-basic-detection.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/array-buffer-view-core.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/array-buffer.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/array-fill.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/array-from-constructor-and-list.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/array-iteration-from-last.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/array-iteration.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/array-slice-simple.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/array-sort.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/array-species-constructor.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/array-species-create.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/array-to-reversed.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/array-with.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/check-correctness-of-iteration.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/create-property.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/define-built-in-accessor.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/define-built-ins.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/engine-ff-version.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/engine-is-ie-or-edge.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/engine-webkit-version.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/function-bind-context.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/get-iterator-method.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/get-iterator.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/ieee754.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/is-array-iterator-method.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/is-big-int-array.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/is-integral-number.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/is-regexp.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/math-float-round.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/math-fround.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/math-sign.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/regexp-get-flags.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/set-species.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/to-big-int.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/to-index.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/to-offset.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/to-positive-integer.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/to-uint8-clamped.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/typed-array-constructor.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/typed-array-constructors-require-wrappers.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/typed-array-from.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.array.unscopables.flat-map.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.string.replace-all.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.at.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.fill.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.find-last-index.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.find-last.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.set.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.sort.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.to-reversed.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.to-sorted.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.uint8-array.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.with.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/bind.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/utils.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/core/AxiosError.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/null.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/toFormData.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/buildURL.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/core/InterceptorManager.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/defaults/transitional.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/platform/browser/classes/FormData.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/platform/browser/classes/Blob.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/platform/browser/index.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/platform/common/utils.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/platform/index.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/toURLEncodedForm.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/formDataToJSON.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/defaults/index.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/parseHeaders.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/core/AxiosHeaders.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/core/transformData.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/cancel/isCancel.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/cancel/CanceledError.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/core/settle.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/cookies.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/combineURLs.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/core/buildFullPath.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/parseProtocol.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/speedometer.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/adapters/xhr.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/adapters/adapters.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/core/dispatchRequest.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/core/mergeConfig.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/env/data.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/validator.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/core/Axios.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/cancel/CancelToken.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/spread.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/isAxiosError.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/HttpStatusCode.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/axios.js"],"sourcesContent":["ace.define(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.constantOtherSymbol={token:\"constant.other.symbol.ruby\",regex:\"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"};t.qString={token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},t.qqString={token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},t.tString={token:\"string\",regex:\"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"};var o=t.constantNumericHex={token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"},u=t.constantNumericBinary={token:\"constant.numeric\",regex:/\\b(0[bB][01](?:[01]|_(?=[01]))*)\\b/},a=t.constantNumericDecimal={token:\"constant.numeric\",regex:/\\b(0[dD](?:[1-9](?:[\\d]|_(?=[\\d]))*|0))\\b/},f=t.constantNumericDecimal={token:\"constant.numeric\",regex:/\\b(0[oO]?(?:[1-7](?:[0-7]|_(?=[0-7]))*|0))\\b/},l=t.constantNumericRational={token:\"constant.numeric\",regex:/\\b([\\d]+(?:[./][\\d]+)?ri?)\\b/},c=t.constantNumericComplex={token:\"constant.numeric\",regex:/\\b([\\d]i)\\b/},h=t.constantNumericFloat={token:\"constant.numeric\",regex:\"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?i?\\\\b\"},p=t.instanceVariable={token:\"variable.instance\",regex:\"@{1,2}[a-zA-Z_\\\\d]+\"},d=function(){var e=\"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|validates_inclusion_of|validates_numericality_of|validates_with|validates_each|authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|cache|expire_fragment|expire_cache_for|observe|cache_sweeper|has_many|has_one|belongs_to|has_and_belongs_to_many|p|warn|refine|using|module_function|extend|alias_method|private_class_method|remove_method|undef_method\",t=\"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield|__ENCODING__|prepend\",n=\"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING|RUBY_PATCHLEVEL|RUBY_REVISION|RUBY_COPYRIGHT|RUBY_ENGINE|RUBY_ENGINE_VERSION|RUBY_DESCRIPTION\",r=\"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|$!|root_url|flash|session|cookies|params|request|response|logger|self\",i=this.$keywords=this.createKeywordMapper({keyword:t,\"constant.language\":n,\"variable.language\":r,\"support.function\":e,\"invalid.deprecated\":\"debugger\"},\"identifier\"),d=\"\\\\\\\\(?:n(?:[1-7][0-7]{0,2}|0)|[nsrtvfbae'\\\"\\\\\\\\]|c(?:\\\\\\\\M-)?.|M-(?:\\\\\\\\C-|\\\\\\\\c)?.|C-(?:\\\\\\\\M-)?.|[0-7]{3}|x[\\\\da-fA-F]{2}|u[\\\\da-fA-F]{4}|u{[\\\\da-fA-F]{1,6}(?:\\\\s[\\\\da-fA-F]{1,6})*})\",v={\"(\":\")\",\"[\":\"]\",\"{\":\"}\",\"<\":\">\",\"^\":\"^\",\"|\":\"|\",\"%\":\"%\"};this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"comment.multiline\",regex:\"^=begin(?=$|\\\\s.*$)\",next:\"comment\"},{token:\"string.regexp\",regex:/[/](?=.*\\/)/,next:\"regex\"},[{token:[\"constant.other.symbol.ruby\",\"string.start\"],regex:/(:)?(\")/,push:[{token:\"constant.language.escape\",regex:d},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/\"/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:d},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string\"}]},{token:[\"constant.other.symbol.ruby\",\"string.start\"],regex:/(:)?(')/,push:[{token:\"constant.language.escape\",regex:/\\\\['\\\\]/},{token:\"string.end\",regex:/'/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/%[qwx]([(\\[<{^|%])/,onMatch:function(e,t,n){n.length&&(n=[]);var r=e[e.length-1];return n.unshift(r,t),this.next=\"qStateWithoutInterpolation\",this.token}},{token:\"string.start\",regex:/%[QWX]?([(\\[<{^|%])/,onMatch:function(e,t,n){n.length&&(n=[]);var r=e[e.length-1];return n.unshift(r,t),this.next=\"qStateWithInterpolation\",this.token}},{token:\"constant.other.symbol.ruby\",regex:/%[si]([(\\[<{^|%])/,onMatch:function(e,t,n){n.length&&(n=[]);var r=e[e.length-1];return n.unshift(r,t),this.next=\"sStateWithoutInterpolation\",this.token}},{token:\"constant.other.symbol.ruby\",regex:/%[SI]([(\\[<{^|%])/,onMatch:function(e,t,n){n.length&&(n=[]);var r=e[e.length-1];return n.unshift(r,t),this.next=\"sStateWithInterpolation\",this.token}},{token:\"string.regexp\",regex:/%[r]([(\\[<{^|%])/,onMatch:function(e,t,n){n.length&&(n=[]);var r=e[e.length-1];return n.unshift(r,t),this.next=\"rState\",this.token}}],{token:\"punctuation\",regex:\"::\"},p,{token:\"variable.global\",regex:\"[$][a-zA-Z_\\\\d]+\"},{token:\"support.class\",regex:\"[A-Z][a-zA-Z_\\\\d]*\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)([a-zA-Z_\\d]+)(?=\\()/},{token:[\"punctuation.operator\",\"identifier\"],regex:/(\\.)([a-zA-Z_][a-zA-Z_\\d]*)/},{token:\"string.character\",regex:\"\\\\B\\\\?(?:\"+d+\"|\\\\S)\"},{token:\"punctuation.operator\",regex:/\\?(?=.+:)/},l,c,s,o,h,u,a,f,{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:i,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"punctuation.separator.key-value\",regex:\"=>\"},{stateName:\"heredoc\",onMatch:function(e,t,n){var r=e[2]==\"-\"||e[2]==\"~\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[3]),[{type:\"constant\",value:i[1]},{type:\"string\",value:i[2]},{type:\"support.class\",value:i[3]},{type:\"string\",value:i[4]}]},regex:\"(<<[-~]?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^ +\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|/|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\||\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\",onMatch:function(e,t,n){return this.next=\"\",e==\"}\"&&n.length>1&&n[1]!=\"start\"&&(n.shift(),this.next=n.shift()),this.token}},{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.operator\",regex:/[?:,;.]/}],comment:[{token:\"comment.multiline\",regex:\"^=end(?=$|\\\\s.*$)\",next:\"start\"},{token:\"comment\",regex:\".+\"}],qStateWithInterpolation:[{token:\"string.start\",regex:/[(\\[<{]/,onMatch:function(e,t,n){return n.length&&e===n[0]?(n.unshift(e,t),this.token):\"string\"}},{token:\"constant.language.escape\",regex:d},{token:\"constant.language.escape\",regex:/\\\\./},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/[)\\]>}^|%]/,onMatch:function(e,t,n){return n.length&&e===v[n[0]]?(n.shift(),this.next=n.shift(),this.token):(this.next=\"\",\"string\")}},{defaultToken:\"string\"}],qStateWithoutInterpolation:[{token:\"string.start\",regex:/[(\\[<{]/,onMatch:function(e,t,n){return n.length&&e===n[0]?(n.unshift(e,t),this.token):\"string\"}},{token:\"constant.language.escape\",regex:/\\\\['\\\\]/},{token:\"constant.language.escape\",regex:/\\\\./},{token:\"string.end\",regex:/[)\\]>}^|%]/,onMatch:function(e,t,n){return n.length&&e===v[n[0]]?(n.shift(),this.next=n.shift(),this.token):(this.next=\"\",\"string\")}},{defaultToken:\"string\"}],sStateWithoutInterpolation:[{token:\"constant.other.symbol.ruby\",regex:/[(\\[<{]/,onMatch:function(e,t,n){return n.length&&e===n[0]?(n.unshift(e,t),this.token):\"constant.other.symbol.ruby\"}},{token:\"constant.other.symbol.ruby\",regex:/[)\\]>}^|%]/,onMatch:function(e,t,n){return n.length&&e===v[n[0]]?(n.shift(),this.next=n.shift(),this.token):(this.next=\"\",\"constant.other.symbol.ruby\")}},{defaultToken:\"constant.other.symbol.ruby\"}],sStateWithInterpolation:[{token:\"constant.other.symbol.ruby\",regex:/[(\\[<{]/,onMatch:function(e,t,n){return n.length&&e===n[0]?(n.unshift(e,t),this.token):\"constant.other.symbol.ruby\"}},{token:\"constant.language.escape\",regex:d},{token:\"constant.language.escape\",regex:/\\\\./},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"constant.other.symbol.ruby\",regex:/[)\\]>}^|%]/,onMatch:function(e,t,n){return n.length&&e===v[n[0]]?(n.shift(),this.next=n.shift(),this.token):(this.next=\"\",\"constant.other.symbol.ruby\")}},{defaultToken:\"constant.other.symbol.ruby\"}],rState:[{token:\"string.regexp\",regex:/[(\\[<{]/,onMatch:function(e,t,n){return n.length&&e===n[0]?(n.unshift(e,t),this.token):\"constant.language.escape\"}},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.regexp\",regex:/\\//},{token:\"string.regexp\",regex:/[)\\]>}^|%][imxouesn]*/,onMatch:function(e,t,n){return n.length&&e[0]===v[n[0]]?(n.shift(),this.next=n.shift(),this.token):(this.next=\"\",\"constant.language.escape\")}},{include:\"regex\"},{defaultToken:\"string.regexp\"}],regex:[{token:\"regexp.keyword\",regex:/\\\\[wWdDhHsS]/},{token:\"constant.language.escape\",regex:/\\\\[AGbBzZ]/},{token:\"constant.language.escape\",regex:/\\\\g<[a-zA-Z0-9]*>/},{token:[\"constant.language.escape\",\"regexp.keyword\",\"constant.language.escape\"],regex:/(\\\\p{\\^?)(Alnum|Alpha|Blank|Cntrl|Digit|Graph|Lower|Print|Punct|Space|Upper|XDigit|Word|ASCII|Any|Assigned|Arabic|Armenian|Balinese|Bengali|Bopomofo|Braille|Buginese|Buhid|Canadian_Aboriginal|Carian|Cham|Cherokee|Common|Coptic|Cuneiform|Cypriot|Cyrillic|Deseret|Devanagari|Ethiopic|Georgian|Glagolitic|Gothic|Greek|Gujarati|Gurmukhi|Han|Hangul|Hanunoo|Hebrew|Hiragana|Inherited|Kannada|Katakana|Kayah_Li|Kharoshthi|Khmer|Lao|Latin|Lepcha|Limbu|Linear_B|Lycian|Lydian|Malayalam|Mongolian|Myanmar|New_Tai_Lue|Nko|Ogham|Ol_Chiki|Old_Italic|Old_Persian|Oriya|Osmanya|Phags_Pa|Phoenician|Rejang|Runic|Saurashtra|Shavian|Sinhala|Sundanese|Syloti_Nagri|Syriac|Tagalog|Tagbanwa|Tai_Le|Tamil|Telugu|Thaana|Thai|Tibetan|Tifinagh|Ugaritic|Vai|Yi|Ll|Lm|Lt|Lu|Lo|Mn|Mc|Me|Nd|Nl|Pc|Pd|Ps|Pe|Pi|Pf|Po|No|Sm|Sc|Sk|So|Zs|Zl|Zp|Cc|Cf|Cn|Co|Cs|N|L|M|P|S|Z|C)(})/},{token:[\"constant.language.escape\",\"invalid\",\"constant.language.escape\"],regex:/(\\\\p{\\^?)([^/]*)(})/},{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:/[/][imxouesn]*/,next:\"start\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?(?:[:=!>]|<'?[a-zA-Z]*'?>|<[=!])|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"regexp.keyword\",regex:/\\[\\[:(?:alnum|alpha|blank|cntrl|digit|graph|lower|print|punct|space|upper|xdigit|word|ascii):\\]\\]/},{token:\"constant.language.escape\",regex:/\\[\\^?/,push:\"regex_character_class\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.keyword\",regex:/\\\\[wWdDhHsS]/},{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:/&?&?\\[\\^?/,push:\"regex_character_class\"},{token:\"constant.language.escape\",regex:\"]\",next:\"pop\"},{token:\"constant.language.escape\",regex:\"-\"},{defaultToken:\"string.regexp.characterclass\"}]},this.normalizeRules()};r.inherits(d,i),t.RubyHighlightRules=d}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=e(\"../../token_iterator\").TokenIterator,u=t.FoldMode=function(){};r.inherits(u,i),function(){this.indentKeywords={\"class\":1,def:1,module:1,\"do\":1,unless:1,\"if\":1,\"while\":1,\"for\":1,until:1,begin:1,\"else\":0,elsif:0,rescue:0,ensure:0,when:0,end:-1,\"case\":1,\"=begin\":1,\"=end\":-1},this.foldingStartMarker=/(?:\\s|^)(def|do|while|class|unless|module|if|for|until|begin|else|elsif|case|rescue|ensure|when)\\b|({\\s*$)|(=begin)/,this.foldingStopMarker=/(=end(?=$|\\s.*$))|(^\\s*})|\\b(end)\\b/,this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=this.foldingStartMarker.test(r),s=this.foldingStopMarker.test(r);if(i&&!s){var o=r.match(this.foldingStartMarker);if(o[1]){if(o[1]==\"if\"||o[1]==\"else\"||o[1]==\"while\"||o[1]==\"until\"||o[1]==\"unless\"){if(o[1]==\"else\"&&/^\\s*else\\s*$/.test(r)===!1)return;if(/^\\s*(?:if|else|while|until|unless)\\s*/.test(r)===!1)return}if(o[1]==\"when\"&&/\\sthen\\s/.test(r)===!0)return;if(e.getTokenAt(n,o.index+2).type===\"keyword\")return\"start\"}else{if(!o[3])return\"start\";if(e.getTokenAt(n,o.index+1).type===\"comment.multiline\")return\"start\"}}if(t!=\"markbeginend\"||!s||i&&s)return\"\";var o=r.match(this.foldingStopMarker);if(o[3]===\"end\"){if(e.getTokenAt(n,o.index+1).type===\"keyword\")return\"end\"}else{if(!o[1])return\"end\";if(e.getTokenAt(n,o.index+1).type===\"comment.multiline\")return\"end\"}},this.getFoldWidgetRange=function(e,t,n){var r=e.doc.getLine(n),i=this.foldingStartMarker.exec(r);if(i)return i[1]||i[3]?this.rubyBlock(e,n,i.index+2):this.openingBracketBlock(e,\"{\",n,i.index);var i=this.foldingStopMarker.exec(r);if(i)return i[3]===\"end\"&&e.getTokenAt(n,i.index+1).type===\"keyword\"?this.rubyBlock(e,n,i.index+1):i[1]===\"=end\"&&e.getTokenAt(n,i.index+1).type===\"comment.multiline\"?this.rubyBlock(e,n,i.index+1):this.closingBracketBlock(e,\"}\",n,i.index+i[0].length)},this.rubyBlock=function(e,t,n,r){var i=new o(e,t,n),u=i.getCurrentToken();if(!u||u.type!=\"keyword\"&&u.type!=\"comment.multiline\")return;var a=u.value,f=e.getLine(t);switch(u.value){case\"if\":case\"unless\":case\"while\":case\"until\":var l=new RegExp(\"^\\\\s*\"+u.value);if(!l.test(f))return;var c=this.indentKeywords[a];break;case\"when\":if(/\\sthen\\s/.test(f))return;case\"elsif\":case\"rescue\":case\"ensure\":var c=1;break;case\"else\":var l=new RegExp(\"^\\\\s*\"+u.value+\"\\\\s*$\");if(!l.test(f))return;var c=1;break;default:var c=this.indentKeywords[a]}var h=[a];if(!c)return;var p=c===-1?e.getLine(t-1).length:e.getLine(t).length,d=t,v=[];v.push(i.getCurrentTokenRange()),i.step=c===-1?i.stepBackward:i.stepForward;if(u.type==\"comment.multiline\")while(u=i.step()){if(u.type!==\"comment.multiline\")continue;if(c==1){p=6;if(u.value==\"=end\")break}else if(u.value==\"=begin\")break}else while(u=i.step()){var m=!1;if(u.type!==\"keyword\")continue;var g=c*this.indentKeywords[u.value];f=e.getLine(i.getCurrentTokenRow());switch(u.value){case\"do\":for(var y=i.$tokenIndex-1;y>=0;y--){var b=i.$rowTokens[y];if(b&&(b.value==\"while\"||b.value==\"until\"||b.value==\"for\")){g=0;break}}break;case\"else\":var l=new RegExp(\"^\\\\s*\"+u.value+\"\\\\s*$\");if(!l.test(f)||a==\"case\")g=0,m=!0;break;case\"if\":case\"unless\":case\"while\":case\"until\":var l=new RegExp(\"^\\\\s*\"+u.value);l.test(f)||(g=0,m=!0);break;case\"when\":if(/\\sthen\\s/.test(f)||a==\"case\")g=0,m=!0}if(g>0)h.unshift(u.value);else if(g<=0&&m===!1){h.shift();if(!h.length){if((a==\"while\"||a==\"until\"||a==\"for\")&&u.value!=\"do\")break;if(u.value==\"do\"&&c==-1&&g!=0)break;if(u.value!=\"do\")break}g===0&&h.unshift(u.value)}}if(!u)return null;if(r)return v.push(i.getCurrentTokenRange()),v;var t=i.getCurrentTokenRow();if(c===-1){if(u.type===\"comment.multiline\")var w=6;else var w=e.getLine(t).length;return new s(t,w,d-1,p)}return new s(d,p,t-1,e.getLine(t-1).length)}}.call(u.prototype)}),ace.define(\"ace/mode/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ruby_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/folding/ruby\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./ruby_highlight_rules\").RubyHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./folding/ruby\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=this.$defaultBehaviour,this.foldingRules=new a,this.indentKeywords=this.foldingRules.indentKeywords};r.inherits(f,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/),u=t.match(/^\\s*(class|def|module)\\s.*$/),a=t.match(/.*do(\\s*|\\s+\\|.*\\|\\s*)$/),f=t.match(/^\\s*(if|else|when|elsif|unless|while|for|begin|rescue|ensure)\\s*/);if(o||u||a||f)r+=n}return r},this.checkOutdent=function(e,t,n){return/^\\s+(end|else|rescue|ensure)$/.test(t+n)||this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){var r=t.getLine(n);if(/}/.test(r))return this.$outdent.autoOutdent(t,n);var i=this.$getIndent(r),s=t.getLine(n-1),o=this.$getIndent(s),a=t.getTabString();o.length<=i.length&&i.slice(-a.length)==a&&t.remove(new u(n,i.length-a.length,n,i.length))},this.getMatching=function(e,t,n){if(t==undefined){var r=e.selection.lead;n=r.column,t=r.row}var i=e.getTokenAt(t,n);if(i&&i.value in this.indentKeywords)return this.foldingRules.rubyBlock(e,t,n,!0)},this.$id=\"ace/mode/ruby\",this.snippetFileId=\"ace/snippets/ruby\"}.call(f.prototype),t.Mode=f}); (function() {\n ace.require([\"ace/mode/ruby\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","ace.define(\"ace/theme/twilight-css\",[\"require\",\"exports\",\"module\"],function(e,t,n){n.exports=\".ace-twilight .ace_gutter {\\n background: #232323;\\n color: #E2E2E2\\n}\\n\\n.ace-twilight .ace_print-margin {\\n width: 1px;\\n background: #232323\\n}\\n\\n.ace-twilight {\\n background-color: #141414;\\n color: #F8F8F8\\n}\\n\\n.ace-twilight .ace_cursor {\\n color: #A7A7A7\\n}\\n\\n.ace-twilight .ace_marker-layer .ace_selection {\\n background: rgba(221, 240, 255, 0.20)\\n}\\n\\n.ace-twilight.ace_multiselect .ace_selection.ace_start {\\n box-shadow: 0 0 3px 0px #141414;\\n}\\n\\n.ace-twilight .ace_marker-layer .ace_step {\\n background: rgb(102, 82, 0)\\n}\\n\\n.ace-twilight .ace_marker-layer .ace_bracket {\\n margin: -1px 0 0 -1px;\\n border: 1px solid rgba(255, 255, 255, 0.25)\\n}\\n\\n.ace-twilight .ace_marker-layer .ace_active-line {\\n background: rgba(255, 255, 255, 0.031)\\n}\\n\\n.ace-twilight .ace_gutter-active-line {\\n background-color: rgba(255, 255, 255, 0.031)\\n}\\n\\n.ace-twilight .ace_marker-layer .ace_selected-word {\\n border: 1px solid rgba(221, 240, 255, 0.20)\\n}\\n\\n.ace-twilight .ace_invisible {\\n color: rgba(255, 255, 255, 0.25)\\n}\\n\\n.ace-twilight .ace_keyword,\\n.ace-twilight .ace_meta {\\n color: #CDA869\\n}\\n\\n.ace-twilight .ace_constant,\\n.ace-twilight .ace_constant.ace_character,\\n.ace-twilight .ace_constant.ace_character.ace_escape,\\n.ace-twilight .ace_constant.ace_other,\\n.ace-twilight .ace_heading,\\n.ace-twilight .ace_markup.ace_heading,\\n.ace-twilight .ace_support.ace_constant {\\n color: #CF6A4C\\n}\\n\\n.ace-twilight .ace_invalid.ace_illegal {\\n color: #F8F8F8;\\n background-color: rgba(86, 45, 86, 0.75)\\n}\\n\\n.ace-twilight .ace_invalid.ace_deprecated {\\n text-decoration: underline;\\n font-style: italic;\\n color: #D2A8A1\\n}\\n\\n.ace-twilight .ace_support {\\n color: #9B859D\\n}\\n\\n.ace-twilight .ace_fold {\\n background-color: #AC885B;\\n border-color: #F8F8F8\\n}\\n\\n.ace-twilight .ace_support.ace_function {\\n color: #DAD085\\n}\\n\\n.ace-twilight .ace_list,\\n.ace-twilight .ace_markup.ace_list,\\n.ace-twilight .ace_storage {\\n color: #F9EE98\\n}\\n\\n.ace-twilight .ace_entity.ace_name.ace_function,\\n.ace-twilight .ace_meta.ace_tag {\\n color: #AC885B\\n}\\n\\n.ace-twilight .ace_string {\\n color: #8F9D6A\\n}\\n\\n.ace-twilight .ace_string.ace_regexp {\\n color: #E9C062\\n}\\n\\n.ace-twilight .ace_comment {\\n font-style: italic;\\n color: #5F5A60\\n}\\n\\n.ace-twilight .ace_variable {\\n color: #7587A6\\n}\\n\\n.ace-twilight .ace_xml-pe {\\n color: #494949\\n}\\n\\n.ace-twilight .ace_indent-guide {\\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQERFpYLC1tf0PAAgOAnPnhxyiAAAAAElFTkSuQmCC) right repeat-y\\n}\\n\\n.ace-twilight .ace_indent-guide-active {\\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQIW2PQ1dX9zzBz5sz/ABCcBFFentLlAAAAAElFTkSuQmCC) right repeat-y;\\n}\\n\"}),ace.define(\"ace/theme/twilight\",[\"require\",\"exports\",\"module\",\"ace/theme/twilight-css\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-twilight\",t.cssText=e(\"./twilight-css\");var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass,!1)}); (function() {\n ace.require([\"ace/theme/twilight\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * * Neither the name of Ajax.org B.V. nor the\n * names of its contributors may be used to endorse or promote products\n * derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/**\n * Define a module along with a payload\n * @param module a name for the payload\n * @param payload a function to call with (require, exports, module) params\n */\n\n(function() {\n\nvar ACE_NAMESPACE = \"ace\";\n\nvar global = (function() { return this; })();\nif (!global && typeof window != \"undefined\") global = window; // strict mode\n\n\nif (!ACE_NAMESPACE && typeof requirejs !== \"undefined\")\n return;\n\n\nvar define = function(module, deps, payload) {\n if (typeof module !== \"string\") {\n if (define.original)\n define.original.apply(this, arguments);\n else {\n console.error(\"dropping module because define wasn\\'t a string.\");\n console.trace();\n }\n return;\n }\n if (arguments.length == 2)\n payload = deps;\n if (!define.modules[module]) {\n define.payloads[module] = payload;\n define.modules[module] = null;\n }\n};\n\ndefine.modules = {};\ndefine.payloads = {};\n\n/**\n * Get at functionality define()ed using the function above\n */\nvar _require = function(parentId, module, callback) {\n if (typeof module === \"string\") {\n var payload = lookup(parentId, module);\n if (payload != undefined) {\n callback && callback();\n return payload;\n }\n } else if (Object.prototype.toString.call(module) === \"[object Array]\") {\n var params = [];\n for (var i = 0, l = module.length; i < l; ++i) {\n var dep = lookup(parentId, module[i]);\n if (dep == undefined && require.original)\n return;\n params.push(dep);\n }\n return callback && callback.apply(null, params) || true;\n }\n};\n\nvar require = function(module, callback) {\n var packagedModule = _require(\"\", module, callback);\n if (packagedModule == undefined && require.original)\n return require.original.apply(this, arguments);\n return packagedModule;\n};\n\nvar normalizeModule = function(parentId, moduleName) {\n // normalize plugin requires\n if (moduleName.indexOf(\"!\") !== -1) {\n var chunks = moduleName.split(\"!\");\n return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\n }\n // normalize relative requires\n if (moduleName.charAt(0) == \".\") {\n var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n moduleName = base + \"/\" + moduleName;\n\n while(moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n var previous = moduleName;\n moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n }\n }\n return moduleName;\n};\n\n/**\n * Internal function to lookup moduleNames and resolve them by calling the\n * definition function if needed.\n */\nvar lookup = function(parentId, moduleName) {\n moduleName = normalizeModule(parentId, moduleName);\n\n var module = define.modules[moduleName];\n if (!module) {\n module = define.payloads[moduleName];\n if (typeof module === 'function') {\n var exports = {};\n var mod = {\n id: moduleName,\n uri: '',\n exports: exports,\n packaged: true\n };\n\n var req = function(module, callback) {\n return _require(moduleName, module, callback);\n };\n\n var returnValue = module(req, exports, mod);\n exports = returnValue || mod.exports;\n define.modules[moduleName] = exports;\n delete define.payloads[moduleName];\n }\n module = define.modules[moduleName] = exports || module;\n }\n return module;\n};\n\nfunction exportAce(ns) {\n var root = global;\n if (ns) {\n if (!global[ns])\n global[ns] = {};\n root = global[ns];\n }\n\n if (!root.define || !root.define.packaged) {\n define.original = root.define;\n root.define = define;\n root.define.packaged = true;\n }\n\n if (!root.require || !root.require.packaged) {\n require.original = root.require;\n root.require = require;\n root.require.packaged = true;\n }\n}\n\nexportAce(ACE_NAMESPACE);\n\n})();\n\nace.define(\"ace/lib/es6-shim\",[\"require\",\"exports\",\"module\"], function(require, exports, module){function defineProp(obj, name, val) {\n Object.defineProperty(obj, name, {\n value: val,\n enumerable: false,\n writable: true,\n configurable: true\n });\n}\nif (!String.prototype.startsWith) {\n defineProp(String.prototype, \"startsWith\", function (searchString, position) {\n position = position || 0;\n return this.lastIndexOf(searchString, position) === position;\n });\n}\nif (!String.prototype.endsWith) {\n defineProp(String.prototype, \"endsWith\", function (searchString, position) {\n var subjectString = this;\n if (position === undefined || position > subjectString.length) {\n position = subjectString.length;\n }\n position -= searchString.length;\n var lastIndex = subjectString.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n });\n}\nif (!String.prototype.repeat) {\n defineProp(String.prototype, \"repeat\", function (count) {\n var result = \"\";\n var string = this;\n while (count > 0) {\n if (count & 1)\n result += string;\n if ((count >>= 1))\n string += string;\n }\n return result;\n });\n}\nif (!String.prototype.includes) {\n defineProp(String.prototype, \"includes\", function (str, position) {\n return this.indexOf(str, position) != -1;\n });\n}\nif (!Object.assign) {\n Object.assign = function (target) {\n if (target === undefined || target === null) {\n throw new TypeError(\"Cannot convert undefined or null to object\");\n }\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n Object.keys(source).forEach(function (key) {\n output[key] = source[key];\n });\n }\n }\n return output;\n };\n}\nif (!Object.values) {\n Object.values = function (o) {\n return Object.keys(o).map(function (k) {\n return o[k];\n });\n };\n}\nif (!Array.prototype.find) {\n defineProp(Array.prototype, \"find\", function (predicate) {\n var len = this.length;\n var thisArg = arguments[1];\n for (var k = 0; k < len; k++) {\n var kValue = this[k];\n if (predicate.call(thisArg, kValue, k, this)) {\n return kValue;\n }\n }\n });\n}\nif (!Array.prototype.findIndex) {\n defineProp(Array.prototype, \"findIndex\", function (predicate) {\n var len = this.length;\n var thisArg = arguments[1];\n for (var k = 0; k < len; k++) {\n var kValue = this[k];\n if (predicate.call(thisArg, kValue, k, this)) {\n return k;\n }\n }\n });\n}\nif (!Array.prototype.includes) {\n defineProp(Array.prototype, \"includes\", function (item, position) {\n return this.indexOf(item, position) != -1;\n });\n}\nif (!Array.prototype.fill) {\n defineProp(Array.prototype, \"fill\", function (value) {\n var O = this;\n var len = O.length >>> 0;\n var start = arguments[1];\n var relativeStart = start >> 0;\n var k = relativeStart < 0\n ? Math.max(len + relativeStart, 0)\n : Math.min(relativeStart, len);\n var end = arguments[2];\n var relativeEnd = end === undefined ? len : end >> 0;\n var final = relativeEnd < 0\n ? Math.max(len + relativeEnd, 0)\n : Math.min(relativeEnd, len);\n while (k < final) {\n O[k] = value;\n k++;\n }\n return O;\n });\n}\nif (!Array.of) {\n defineProp(Array, \"of\", function () {\n return Array.prototype.slice.call(arguments);\n });\n}\n\n});\n\nace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/es6-shim\"], function(require, exports, module){// vim:set ts=4 sts=4 sw=4 st:\n\"use strict\";\nrequire(\"./es6-shim\");\n\n});\n\nace.define(\"ace/lib/deep_copy\",[\"require\",\"exports\",\"module\"], function(require, exports, module){exports.deepCopy = function deepCopy(obj) {\n if (typeof obj !== \"object\" || !obj)\n return obj;\n var copy;\n if (Array.isArray(obj)) {\n copy = [];\n for (var key = 0; key < obj.length; key++) {\n copy[key] = deepCopy(obj[key]);\n }\n return copy;\n }\n if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n return obj;\n copy = {};\n for (var key in obj)\n copy[key] = deepCopy(obj[key]);\n return copy;\n};\n\n});\n\nace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\",\"ace/lib/deep_copy\"], function(require, exports, module){\"use strict\";\nexports.last = function (a) {\n return a[a.length - 1];\n};\nexports.stringReverse = function (string) {\n return string.split(\"\").reverse().join(\"\");\n};\nexports.stringRepeat = function (string, count) {\n var result = '';\n while (count > 0) {\n if (count & 1)\n result += string;\n if (count >>= 1)\n string += string;\n }\n return result;\n};\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\nexports.stringTrimLeft = function (string) {\n return string.replace(trimBeginRegexp, '');\n};\nexports.stringTrimRight = function (string) {\n return string.replace(trimEndRegexp, '');\n};\nexports.copyObject = function (obj) {\n var copy = {};\n for (var key in obj) {\n copy[key] = obj[key];\n }\n return copy;\n};\nexports.copyArray = function (array) {\n var copy = [];\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] && typeof array[i] == \"object\")\n copy[i] = this.copyObject(array[i]);\n else\n copy[i] = array[i];\n }\n return copy;\n};\nexports.deepCopy = require(\"./deep_copy\").deepCopy;\nexports.arrayToMap = function (arr) {\n var map = {};\n for (var i = 0; i < arr.length; i++) {\n map[arr[i]] = 1;\n }\n return map;\n};\nexports.createMap = function (props) {\n var map = Object.create(null);\n for (var i in props) {\n map[i] = props[i];\n }\n return map;\n};\nexports.arrayRemove = function (array, value) {\n for (var i = 0; i <= array.length; i++) {\n if (value === array[i]) {\n array.splice(i, 1);\n }\n }\n};\nexports.escapeRegExp = function (str) {\n return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\nexports.escapeHTML = function (str) {\n return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\nexports.getMatchOffsets = function (string, regExp) {\n var matches = [];\n string.replace(regExp, function (str) {\n matches.push({\n offset: arguments[arguments.length - 2],\n length: str.length\n });\n });\n return matches;\n};\nexports.deferredCall = function (fcn) {\n var timer = null;\n var callback = function () {\n timer = null;\n fcn();\n };\n var deferred = function (timeout) {\n deferred.cancel();\n timer = setTimeout(callback, timeout || 0);\n return deferred;\n };\n deferred.schedule = deferred;\n deferred.call = function () {\n this.cancel();\n fcn();\n return deferred;\n };\n deferred.cancel = function () {\n clearTimeout(timer);\n timer = null;\n return deferred;\n };\n deferred.isPending = function () {\n return timer;\n };\n return deferred;\n};\nexports.delayedCall = function (fcn, defaultTimeout) {\n var timer = null;\n var callback = function () {\n timer = null;\n fcn();\n };\n var _self = function (timeout) {\n if (timer == null)\n timer = setTimeout(callback, timeout || defaultTimeout);\n };\n _self.delay = function (timeout) {\n timer && clearTimeout(timer);\n timer = setTimeout(callback, timeout || defaultTimeout);\n };\n _self.schedule = _self;\n _self.call = function () {\n this.cancel();\n fcn();\n };\n _self.cancel = function () {\n timer && clearTimeout(timer);\n timer = null;\n };\n _self.isPending = function () {\n return timer;\n };\n return _self;\n};\nexports.supportsLookbehind = function () {\n try {\n new RegExp('(?<=.)');\n }\n catch (e) {\n return false;\n }\n return true;\n};\nexports.skipEmptyMatch = function (line, last, supportsUnicodeFlag) {\n return supportsUnicodeFlag && line.codePointAt(last) > 0xffff ? 2 : 1;\n};\n\n});\n\nace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.OS = {\n LINUX: \"LINUX\",\n MAC: \"MAC\",\n WINDOWS: \"WINDOWS\"\n};\nexports.getOS = function () {\n if (exports.isMac) {\n return exports.OS.MAC;\n }\n else if (exports.isLinux) {\n return exports.OS.LINUX;\n }\n else {\n return exports.OS.WINDOWS;\n }\n};\nvar _navigator = typeof navigator == \"object\" ? navigator : {};\nvar os = (/mac|win|linux/i.exec(_navigator.platform) || [\"other\"])[0].toLowerCase();\nvar ua = _navigator.userAgent || \"\";\nvar appName = _navigator.appName || \"\";\nexports.isWin = (os == \"win\");\nexports.isMac = (os == \"mac\");\nexports.isLinux = (os == \"linux\");\nexports.isIE =\n (appName == \"Microsoft Internet Explorer\" || appName.indexOf(\"MSAppHost\") >= 0)\n ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1])\n : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1]); // for ie\nexports.isOldIE = exports.isIE && exports.isIE < 9;\nexports.isGecko = exports.isMozilla = ua.match(/ Gecko\\/\\d+/);\nexports.isOpera = typeof opera == \"object\" && Object.prototype.toString.call(window[\"opera\"]) == \"[object Opera]\";\nexports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\nexports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\nexports.isSafari = parseFloat(ua.split(\" Safari/\")[1]) && !exports.isChrome || undefined;\nexports.isEdge = parseFloat(ua.split(\" Edge/\")[1]) || undefined;\nexports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\nexports.isAndroid = ua.indexOf(\"Android\") >= 0;\nexports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\nexports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window[\"MSStream\"];\nif (exports.isIOS)\n exports.isMac = true;\nexports.isMobile = exports.isIOS || exports.isAndroid;\n\n});\n\nace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar useragent = require(\"./useragent\");\nvar XHTML_NS = \"http://www.w3.org/1999/xhtml\";\nexports.buildDom = function buildDom(arr, parent, refs) {\n if (typeof arr == \"string\" && arr) {\n var txt = document.createTextNode(arr);\n if (parent)\n parent.appendChild(txt);\n return txt;\n }\n if (!Array.isArray(arr)) {\n if (arr && arr.appendChild && parent)\n parent.appendChild(arr);\n return arr;\n }\n if (typeof arr[0] != \"string\" || !arr[0]) {\n var els = [];\n for (var i = 0; i < arr.length; i++) {\n var ch = buildDom(arr[i], parent, refs);\n ch && els.push(ch);\n }\n return els;\n }\n var el = document.createElement(arr[0]);\n var options = arr[1];\n var childIndex = 1;\n if (options && typeof options == \"object\" && !Array.isArray(options))\n childIndex = 2;\n for (var i = childIndex; i < arr.length; i++)\n buildDom(arr[i], el, refs);\n if (childIndex == 2) {\n Object.keys(options).forEach(function (n) {\n var val = options[n];\n if (n === \"class\") {\n el.className = Array.isArray(val) ? val.join(\" \") : val;\n }\n else if (typeof val == \"function\" || n == \"value\" || n[0] == \"$\") {\n el[n] = val;\n }\n else if (n === \"ref\") {\n if (refs)\n refs[val] = el;\n }\n else if (n === \"style\") {\n if (typeof val == \"string\")\n el.style.cssText = val;\n }\n else if (val != null) {\n el.setAttribute(n, val);\n }\n });\n }\n if (parent)\n parent.appendChild(el);\n return el;\n};\nexports.getDocumentHead = function (doc) {\n if (!doc)\n doc = document;\n return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n};\nexports.createElement = function (tag, ns) {\n return document.createElementNS ?\n document.createElementNS(ns || XHTML_NS, tag) :\n document.createElement(tag);\n};\nexports.removeChildren = function (element) {\n element.innerHTML = \"\";\n};\nexports.createTextNode = function (textContent, element) {\n var doc = element ? element.ownerDocument : document;\n return doc.createTextNode(textContent);\n};\nexports.createFragment = function (element) {\n var doc = element ? element.ownerDocument : document;\n return doc.createDocumentFragment();\n};\nexports.hasCssClass = function (el, name) {\n var classes = (el.className + \"\").split(/\\s+/g);\n return classes.indexOf(name) !== -1;\n};\nexports.addCssClass = function (el, name) {\n if (!exports.hasCssClass(el, name)) {\n el.className += \" \" + name;\n }\n};\nexports.removeCssClass = function (el, name) {\n var classes = el.className.split(/\\s+/g);\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n classes.splice(index, 1);\n }\n el.className = classes.join(\" \");\n};\nexports.toggleCssClass = function (el, name) {\n var classes = el.className.split(/\\s+/g), add = true;\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n add = false;\n classes.splice(index, 1);\n }\n if (add)\n classes.push(name);\n el.className = classes.join(\" \");\n return add;\n};\nexports.setCssClass = function (node, className, include) {\n if (include) {\n exports.addCssClass(node, className);\n }\n else {\n exports.removeCssClass(node, className);\n }\n};\nexports.hasCssString = function (id, doc) {\n var index = 0, sheets;\n doc = doc || document;\n if ((sheets = doc.querySelectorAll(\"style\"))) {\n while (index < sheets.length) {\n if (sheets[index++].id === id) {\n return true;\n }\n }\n }\n};\nexports.removeElementById = function (id, doc) {\n doc = doc || document;\n if (doc.getElementById(id)) {\n doc.getElementById(id).remove();\n }\n};\nvar strictCSP;\nvar cssCache = [];\nexports.useStrictCSP = function (value) {\n strictCSP = value;\n if (value == false)\n insertPendingStyles();\n else if (!cssCache)\n cssCache = [];\n};\nfunction insertPendingStyles() {\n var cache = cssCache;\n cssCache = null;\n cache && cache.forEach(function (item) {\n importCssString(item[0], item[1]);\n });\n}\nfunction importCssString(cssText, id, target) {\n if (typeof document == \"undefined\")\n return;\n if (cssCache) {\n if (target) {\n insertPendingStyles();\n }\n else if (target === false) {\n return cssCache.push([cssText, id]);\n }\n }\n if (strictCSP)\n return;\n var container = target;\n if (!target || !target.getRootNode) {\n container = document;\n }\n else {\n container = target.getRootNode();\n if (!container || container == target)\n container = document;\n }\n var doc = container.ownerDocument || container;\n if (id && exports.hasCssString(id, container))\n return null;\n if (id)\n cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n var style = exports.createElement(\"style\");\n style.appendChild(doc.createTextNode(cssText));\n if (id)\n style.id = id;\n if (container == doc)\n container = exports.getDocumentHead(doc);\n container.insertBefore(style, container.firstChild);\n}\nexports.importCssString = importCssString;\nexports.importCssStylsheet = function (uri, doc) {\n exports.buildDom([\"link\", { rel: \"stylesheet\", href: uri }], exports.getDocumentHead(doc));\n};\nexports.scrollbarWidth = function (doc) {\n var inner = exports.createElement(\"ace_inner\");\n inner.style.width = \"100%\";\n inner.style.minWidth = \"0px\";\n inner.style.height = \"200px\";\n inner.style.display = \"block\";\n var outer = exports.createElement(\"ace_outer\");\n var style = outer.style;\n style.position = \"absolute\";\n style.left = \"-10000px\";\n style.overflow = \"hidden\";\n style.width = \"200px\";\n style.minWidth = \"0px\";\n style.height = \"150px\";\n style.display = \"block\";\n outer.appendChild(inner);\n var body = (doc && doc.documentElement) || (document && document.documentElement);\n if (!body)\n return 0;\n body.appendChild(outer);\n var noScrollbar = inner.offsetWidth;\n style.overflow = \"scroll\";\n var withScrollbar = inner.offsetWidth;\n if (noScrollbar === withScrollbar) {\n withScrollbar = outer.clientWidth;\n }\n body.removeChild(outer);\n return noScrollbar - withScrollbar;\n};\nexports.computedStyle = function (element, style) {\n return window.getComputedStyle(element, \"\") || {};\n};\nexports.setStyle = function (styles, property, value) {\n if (styles[property] !== value) {\n styles[property] = value;\n }\n};\nexports.HAS_CSS_ANIMATION = false;\nexports.HAS_CSS_TRANSFORMS = false;\nexports.HI_DPI = useragent.isWin\n ? typeof window !== \"undefined\" && window.devicePixelRatio >= 1.5\n : true;\nif (useragent.isChromeOS)\n exports.HI_DPI = false;\nif (typeof document !== \"undefined\") {\n var div = document.createElement(\"div\");\n if (exports.HI_DPI && div.style.transform !== undefined)\n exports.HAS_CSS_TRANSFORMS = true;\n if (!useragent.isEdge && typeof div.style.animationName !== \"undefined\")\n exports.HAS_CSS_ANIMATION = true;\n div = null;\n}\nif (exports.HAS_CSS_TRANSFORMS) {\n exports.translate = function (element, tx, ty) {\n element.style.transform = \"translate(\" + Math.round(tx) + \"px, \" + Math.round(ty) + \"px)\";\n };\n}\nelse {\n exports.translate = function (element, tx, ty) {\n element.style.top = Math.round(ty) + \"px\";\n element.style.left = Math.round(tx) + \"px\";\n };\n}\n\n});\n\nace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){/*\n * based on code from:\n *\n * @license RequireJS text 0.25.0 Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\"use strict\";\nvar dom = require(\"./dom\");\nexports.get = function (url, callback) {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n callback(xhr.responseText);\n }\n };\n xhr.send(null);\n};\nexports.loadScript = function (path, callback) {\n var head = dom.getDocumentHead();\n var s = document.createElement('script');\n s.src = path;\n head.appendChild(s);\n s.onload = s.onreadystatechange = function (_, isAbort) {\n if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\n s = s.onload = s.onreadystatechange = null;\n if (!isAbort)\n callback();\n }\n };\n};\nexports.qualifyURL = function (url) {\n var a = document.createElement('a');\n a.href = url;\n return a.href;\n};\n\n});\n\nace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.inherits = function (ctor, superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n};\nexports.mixin = function (obj, mixin) {\n for (var key in mixin) {\n obj[key] = mixin[key];\n }\n return obj;\n};\nexports.implement = function (proto, mixin) {\n exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar EventEmitter = {};\nvar stopPropagation = function () { this.propagationStopped = true; };\nvar preventDefault = function () { this.defaultPrevented = true; };\nEventEmitter._emit =\n EventEmitter._dispatchEvent = function (eventName, e) {\n this._eventRegistry || (this._eventRegistry = {});\n this._defaultHandlers || (this._defaultHandlers = {});\n var listeners = this._eventRegistry[eventName] || [];\n var defaultHandler = this._defaultHandlers[eventName];\n if (!listeners.length && !defaultHandler)\n return;\n if (typeof e != \"object\" || !e)\n e = {};\n if (!e.type)\n e.type = eventName;\n if (!e.stopPropagation)\n e.stopPropagation = stopPropagation;\n if (!e.preventDefault)\n e.preventDefault = preventDefault;\n listeners = listeners.slice();\n for (var i = 0; i < listeners.length; i++) {\n listeners[i](e, this);\n if (e.propagationStopped)\n break;\n }\n if (defaultHandler && !e.defaultPrevented)\n return defaultHandler(e, this);\n };\nEventEmitter._signal = function (eventName, e) {\n var listeners = (this._eventRegistry || {})[eventName];\n if (!listeners)\n return;\n listeners = listeners.slice();\n for (var i = 0; i < listeners.length; i++)\n listeners[i](e, this);\n};\nEventEmitter.once = function (eventName, callback) {\n var _self = this;\n this.on(eventName, function newCallback() {\n _self.off(eventName, newCallback);\n callback.apply(null, arguments);\n });\n if (!callback) {\n return new Promise(function (resolve) {\n callback = resolve;\n });\n }\n};\nEventEmitter.setDefaultHandler = function (eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers)\n handlers = this._defaultHandlers = { _disabled_: {} };\n if (handlers[eventName]) {\n var old = handlers[eventName];\n var disabled = handlers._disabled_[eventName];\n if (!disabled)\n handlers._disabled_[eventName] = disabled = [];\n disabled.push(old);\n var i = disabled.indexOf(callback);\n if (i != -1)\n disabled.splice(i, 1);\n }\n handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function (eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers)\n return;\n var disabled = handlers._disabled_[eventName];\n if (handlers[eventName] == callback) {\n if (disabled)\n this.setDefaultHandler(eventName, disabled.pop());\n }\n else if (disabled) {\n var i = disabled.indexOf(callback);\n if (i != -1)\n disabled.splice(i, 1);\n }\n};\nEventEmitter.on =\n EventEmitter.addEventListener = function (eventName, callback, capturing) {\n this._eventRegistry = this._eventRegistry || {};\n var listeners = this._eventRegistry[eventName];\n if (!listeners)\n listeners = this._eventRegistry[eventName] = [];\n if (listeners.indexOf(callback) == -1)\n listeners[capturing ? \"unshift\" : \"push\"](callback);\n return callback;\n };\nEventEmitter.off =\n EventEmitter.removeListener =\n EventEmitter.removeEventListener = function (eventName, callback) {\n this._eventRegistry = this._eventRegistry || {};\n var listeners = this._eventRegistry[eventName];\n if (!listeners)\n return;\n var index = listeners.indexOf(callback);\n if (index !== -1)\n listeners.splice(index, 1);\n };\nEventEmitter.removeAllListeners = function (eventName) {\n if (!eventName)\n this._eventRegistry = this._defaultHandlers = undefined;\n if (this._eventRegistry)\n this._eventRegistry[eventName] = undefined;\n if (this._defaultHandlers)\n this._defaultHandlers[eventName] = undefined;\n};\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/lib/report_error\",[\"require\",\"exports\",\"module\"], function(require, exports, module){exports.reportError = function reportError(msg, data) {\n var e = new Error(msg);\n e[\"data\"] = data;\n if (typeof console == \"object\" && console.error)\n console.error(e);\n setTimeout(function () { throw e; });\n};\n\n});\n\nace.define(\"ace/lib/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/report_error\"], function(require, exports, module){\"no use strict\";\nvar oop = require(\"./oop\");\nvar EventEmitter = require(\"./event_emitter\").EventEmitter;\nvar reportError = require(\"./report_error\").reportError;\nvar optionsProvider = {\n setOptions: function (optList) {\n Object.keys(optList).forEach(function (key) {\n this.setOption(key, optList[key]);\n }, this);\n },\n getOptions: function (optionNames) {\n var result = {};\n if (!optionNames) {\n var options = this.$options;\n optionNames = Object.keys(options).filter(function (key) {\n return !options[key].hidden;\n });\n }\n else if (!Array.isArray(optionNames)) {\n result = optionNames;\n optionNames = Object.keys(result);\n }\n optionNames.forEach(function (key) {\n result[key] = this.getOption(key);\n }, this);\n return result;\n },\n setOption: function (name, value) {\n if (this[\"$\" + name] === value)\n return;\n var opt = this.$options[name];\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n if (opt.forwardTo)\n return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value);\n if (!opt.handlesSet)\n this[\"$\" + name] = value;\n if (opt && opt.set)\n opt.set.call(this, value);\n },\n getOption: function (name) {\n var opt = this.$options[name];\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n if (opt.forwardTo)\n return this[opt.forwardTo] && this[opt.forwardTo].getOption(name);\n return opt && opt.get ? opt.get.call(this) : this[\"$\" + name];\n }\n};\nfunction warn(message) {\n if (typeof console != \"undefined\" && console.warn)\n console.warn.apply(console, arguments);\n}\nvar messages;\nvar AppConfig = /** @class */ (function () {\n function AppConfig() {\n this.$defaultOptions = {};\n }\n AppConfig.prototype.defineOptions = function (obj, path, options) {\n if (!obj.$options)\n this.$defaultOptions[path] = obj.$options = {};\n Object.keys(options).forEach(function (key) {\n var opt = options[key];\n if (typeof opt == \"string\")\n opt = { forwardTo: opt };\n opt.name || (opt.name = key);\n obj.$options[opt.name] = opt;\n if (\"initialValue\" in opt)\n obj[\"$\" + opt.name] = opt.initialValue;\n });\n oop.implement(obj, optionsProvider);\n return this;\n };\n AppConfig.prototype.resetOptions = function (obj) {\n Object.keys(obj.$options).forEach(function (key) {\n var opt = obj.$options[key];\n if (\"value\" in opt)\n obj.setOption(key, opt.value);\n });\n };\n AppConfig.prototype.setDefaultValue = function (path, name, value) {\n if (!path) {\n for (path in this.$defaultOptions)\n if (this.$defaultOptions[path][name])\n break;\n if (!this.$defaultOptions[path][name])\n return false;\n }\n var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {});\n if (opts[name]) {\n if (opts.forwardTo)\n this.setDefaultValue(opts.forwardTo, name, value);\n else\n opts[name].value = value;\n }\n };\n AppConfig.prototype.setDefaultValues = function (path, optionHash) {\n Object.keys(optionHash).forEach(function (key) {\n this.setDefaultValue(path, key, optionHash[key]);\n }, this);\n };\n AppConfig.prototype.setMessages = function (value) {\n messages = value;\n };\n AppConfig.prototype.nls = function (string, params) {\n if (messages && !messages[string]) {\n warn(\"No message found for '\" + string + \"' in the provided messages, falling back to default English message.\");\n }\n var translated = messages && messages[string] || string;\n if (params) {\n translated = translated.replace(/\\$(\\$|[\\d]+)/g, function (_, name) {\n if (name == \"$\")\n return \"$\";\n return params[name];\n });\n }\n return translated;\n };\n return AppConfig;\n}());\nAppConfig.prototype.warn = warn;\nAppConfig.prototype.reportError = reportError;\noop.implement(AppConfig.prototype, EventEmitter);\nexports.AppConfig = AppConfig;\n\n});\n\nace.define(\"ace/theme/textmate-css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-tm .ace_gutter {\\n background: #f0f0f0;\\n color: #333;\\n}\\n\\n.ace-tm .ace_print-margin {\\n width: 1px;\\n background: #e8e8e8;\\n}\\n\\n.ace-tm .ace_fold {\\n background-color: #6B72E6;\\n}\\n\\n.ace-tm {\\n background-color: #FFFFFF;\\n color: black;\\n}\\n\\n.ace-tm .ace_cursor {\\n color: black;\\n}\\n \\n.ace-tm .ace_invisible {\\n color: rgb(191, 191, 191);\\n}\\n\\n.ace-tm .ace_storage,\\n.ace-tm .ace_keyword {\\n color: blue;\\n}\\n\\n.ace-tm .ace_constant {\\n color: rgb(197, 6, 11);\\n}\\n\\n.ace-tm .ace_constant.ace_buildin {\\n color: rgb(88, 72, 246);\\n}\\n\\n.ace-tm .ace_constant.ace_language {\\n color: rgb(88, 92, 246);\\n}\\n\\n.ace-tm .ace_constant.ace_library {\\n color: rgb(6, 150, 14);\\n}\\n\\n.ace-tm .ace_invalid {\\n background-color: rgba(255, 0, 0, 0.1);\\n color: red;\\n}\\n\\n.ace-tm .ace_support.ace_function {\\n color: rgb(60, 76, 114);\\n}\\n\\n.ace-tm .ace_support.ace_constant {\\n color: rgb(6, 150, 14);\\n}\\n\\n.ace-tm .ace_support.ace_type,\\n.ace-tm .ace_support.ace_class {\\n color: rgb(109, 121, 222);\\n}\\n\\n.ace-tm .ace_keyword.ace_operator {\\n color: rgb(104, 118, 135);\\n}\\n\\n.ace-tm .ace_string {\\n color: rgb(3, 106, 7);\\n}\\n\\n.ace-tm .ace_comment {\\n color: rgb(76, 136, 107);\\n}\\n\\n.ace-tm .ace_comment.ace_doc {\\n color: rgb(0, 102, 255);\\n}\\n\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\n color: rgb(128, 159, 191);\\n}\\n\\n.ace-tm .ace_constant.ace_numeric {\\n color: rgb(0, 0, 205);\\n}\\n\\n.ace-tm .ace_variable {\\n color: rgb(49, 132, 149);\\n}\\n\\n.ace-tm .ace_xml-pe {\\n color: rgb(104, 104, 91);\\n}\\n\\n.ace-tm .ace_entity.ace_name.ace_function {\\n color: #0000A2;\\n}\\n\\n\\n.ace-tm .ace_heading {\\n color: rgb(12, 7, 255);\\n}\\n\\n.ace-tm .ace_list {\\n color:rgb(185, 6, 144);\\n}\\n\\n.ace-tm .ace_meta.ace_tag {\\n color:rgb(0, 22, 142);\\n}\\n\\n.ace-tm .ace_string.ace_regex {\\n color: rgb(255, 0, 0)\\n}\\n\\n.ace-tm .ace_marker-layer .ace_selection {\\n background: rgb(181, 213, 255);\\n}\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\n box-shadow: 0 0 3px 0px white;\\n}\\n.ace-tm .ace_marker-layer .ace_step {\\n background: rgb(252, 255, 0);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_stack {\\n background: rgb(164, 229, 101);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_bracket {\\n margin: -1px 0 0 -1px;\\n border: 1px solid rgb(192, 192, 192);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_active-line {\\n background: rgba(0, 0, 0, 0.07);\\n}\\n\\n.ace-tm .ace_gutter-active-line {\\n background-color : #dcdcdc;\\n}\\n\\n.ace-tm .ace_marker-layer .ace_selected-word {\\n background: rgb(250, 250, 255);\\n border: 1px solid rgb(200, 200, 250);\\n}\\n\\n.ace-tm .ace_indent-guide {\\n background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\n}\\n\\n.ace-tm .ace_indent-guide-active {\\n background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/theme/textmate-css\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = require(\"./textmate-css\");\nexports.$id = \"ace/theme/textmate\";\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});\n\nace.define(\"ace/config\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/net\",\"ace/lib/dom\",\"ace/lib/app_config\",\"ace/theme/textmate\"], function(require, exports, module){\"no use strict\";\nvar lang = require(\"./lib/lang\");\nvar net = require(\"./lib/net\");\nvar dom = require(\"./lib/dom\");\nvar AppConfig = require(\"./lib/app_config\").AppConfig;\nmodule.exports = exports = new AppConfig();\nvar options = {\n packaged: false,\n workerPath: null,\n modePath: null,\n themePath: null,\n basePath: \"\",\n suffix: \".js\",\n $moduleUrls: {},\n loadWorkerFromBlob: true,\n sharedPopups: false,\n useStrictCSP: null\n};\nexports.get = function (key) {\n if (!options.hasOwnProperty(key))\n throw new Error(\"Unknown config key: \" + key);\n return options[key];\n};\nexports.set = function (key, value) {\n if (options.hasOwnProperty(key))\n options[key] = value;\n else if (this.setDefaultValue(\"\", key, value) == false)\n throw new Error(\"Unknown config key: \" + key);\n if (key == \"useStrictCSP\")\n dom.useStrictCSP(value);\n};\nexports.all = function () {\n return lang.copyObject(options);\n};\nexports.$modes = {};\nexports.moduleUrl = function (name, component) {\n if (options.$moduleUrls[name])\n return options.$moduleUrls[name];\n var parts = name.split(\"/\");\n component = component || parts[parts.length - 2] || \"\";\n var sep = component == \"snippets\" ? \"/\" : \"-\";\n var base = parts[parts.length - 1];\n if (component == \"worker\" && sep == \"-\") {\n var re = new RegExp(\"^\" + component + \"[\\\\-_]|[\\\\-_]\" + component + \"$\", \"g\");\n base = base.replace(re, \"\");\n }\n if ((!base || base == component) && parts.length > 1)\n base = parts[parts.length - 2];\n var path = options[component + \"Path\"];\n if (path == null) {\n path = options.basePath;\n }\n else if (sep == \"/\") {\n component = sep = \"\";\n }\n if (path && path.slice(-1) != \"/\")\n path += \"/\";\n return path + component + sep + base + this.get(\"suffix\");\n};\nexports.setModuleUrl = function (name, subst) {\n return options.$moduleUrls[name] = subst;\n};\nvar loader = function (moduleName, cb) {\n if (moduleName === \"ace/theme/textmate\" || moduleName === \"./theme/textmate\")\n return cb(null, require(\"./theme/textmate\"));\n if (customLoader)\n return customLoader(moduleName, cb);\n console.error(\"loader is not configured\");\n};\nvar customLoader;\nexports.setLoader = function (cb) {\n customLoader = cb;\n};\nexports.dynamicModules = Object.create(null);\nexports.$loading = {};\nexports.$loaded = {};\nexports.loadModule = function (moduleId, onLoad) {\n var loadedModule;\n if (Array.isArray(moduleId)) {\n var moduleType = moduleId[0];\n var moduleName = moduleId[1];\n }\n else if (typeof moduleId == \"string\") {\n var moduleName = moduleId;\n }\n var load = function (module) {\n if (module && !exports.$loading[moduleName])\n return onLoad && onLoad(module);\n if (!exports.$loading[moduleName])\n exports.$loading[moduleName] = [];\n exports.$loading[moduleName].push(onLoad);\n if (exports.$loading[moduleName].length > 1)\n return;\n var afterLoad = function () {\n loader(moduleName, function (err, module) {\n if (module)\n exports.$loaded[moduleName] = module;\n exports._emit(\"load.module\", { name: moduleName, module: module });\n var listeners = exports.$loading[moduleName];\n exports.$loading[moduleName] = null;\n listeners.forEach(function (onLoad) {\n onLoad && onLoad(module);\n });\n });\n };\n if (!exports.get(\"packaged\"))\n return afterLoad();\n net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n reportErrorIfPathIsNotConfigured();\n };\n if (exports.dynamicModules[moduleName]) {\n exports.dynamicModules[moduleName]().then(function (module) {\n if (module.default) {\n load(module.default);\n }\n else {\n load(module);\n }\n });\n }\n else {\n try {\n loadedModule = this.$require(moduleName);\n }\n catch (e) { }\n load(loadedModule || exports.$loaded[moduleName]);\n }\n};\nexports.$require = function (moduleName) {\n if (typeof module[\"require\"] == \"function\") {\n var req = \"require\";\n return module[req](moduleName);\n }\n};\nexports.setModuleLoader = function (moduleName, onLoad) {\n exports.dynamicModules[moduleName] = onLoad;\n};\nvar reportErrorIfPathIsNotConfigured = function () {\n if (!options.basePath && !options.workerPath\n && !options.modePath && !options.themePath\n && !Object.keys(options.$moduleUrls).length) {\n console.error(\"Unable to infer path to ace from script src,\", \"use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes\", \"or with webpack use ace/webpack-resolver\");\n reportErrorIfPathIsNotConfigured = function () { };\n }\n};\nexports.version = \"1.32.1\";\n\n});\n\nace.define(\"ace/loader_build\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./lib/fixoldbrowsers\");\nvar config = require(\"./config\");\nconfig.setLoader(function(moduleName, cb) {\n require([moduleName], function(module) {\n cb(null, module);\n });\n});\n\nvar global = (function() {\n return this || typeof window != \"undefined\" && window;\n})();\n\nmodule.exports = function(ace) {\n config.init = init;\n config.$require = require;\n ace.require = require;\n\n if (typeof define === \"function\")\n ace.define = define;\n};\ninit(true);function init(packaged) {\n\n if (!global || !global.document)\n return;\n \n config.set(\"packaged\", packaged || require.packaged || module.packaged || (global.define && define.packaged));\n\n var scriptOptions = {};\n var scriptUrl = \"\";\n var currentScript = (document.currentScript || document._currentScript ); // native or polyfill\n var currentDocument = currentScript && currentScript.ownerDocument || document;\n \n if (currentScript && currentScript.src) {\n scriptUrl = currentScript.src.split(/[?#]/)[0].split(\"/\").slice(0, -1).join(\"/\") || \"\";\n }\n \n var scripts = currentDocument.getElementsByTagName(\"script\");\n for (var i=0; i<scripts.length; i++) {\n var script = scripts[i];\n\n var src = script.src || script.getAttribute(\"src\");\n if (!src)\n continue;\n\n var attributes = script.attributes;\n for (var j=0, l=attributes.length; j < l; j++) {\n var attr = attributes[j];\n if (attr.name.indexOf(\"data-ace-\") === 0) {\n scriptOptions[deHyphenate(attr.name.replace(/^data-ace-/, \"\"))] = attr.value;\n }\n }\n\n var m = src.match(/^(.*)\\/ace([\\-.]\\w+)?\\.js(\\?|$)/);\n if (m)\n scriptUrl = m[1];\n }\n\n if (scriptUrl) {\n scriptOptions.base = scriptOptions.base || scriptUrl;\n scriptOptions.packaged = true;\n }\n\n scriptOptions.basePath = scriptOptions.base;\n scriptOptions.workerPath = scriptOptions.workerPath || scriptOptions.base;\n scriptOptions.modePath = scriptOptions.modePath || scriptOptions.base;\n scriptOptions.themePath = scriptOptions.themePath || scriptOptions.base;\n delete scriptOptions.base;\n\n for (var key in scriptOptions)\n if (typeof scriptOptions[key] !== \"undefined\")\n config.set(key, scriptOptions[key]);\n}\n\nfunction deHyphenate(str) {\n return str.replace(/-(.)/g, function(m, m1) { return m1.toUpperCase(); });\n}\n});\n\nace.define(\"ace/range\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar Range = /** @class */ (function () {\n function Range(startRow, startColumn, endRow, endColumn) {\n this.start = {\n row: startRow,\n column: startColumn\n };\n this.end = {\n row: endRow,\n column: endColumn\n };\n }\n Range.prototype.isEqual = function (range) {\n return this.start.row === range.start.row &&\n this.end.row === range.end.row &&\n this.start.column === range.start.column &&\n this.end.column === range.end.column;\n };\n Range.prototype.toString = function () {\n return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n };\n Range.prototype.contains = function (row, column) {\n return this.compare(row, column) == 0;\n };\n Range.prototype.compareRange = function (range) {\n var cmp, end = range.end, start = range.start;\n cmp = this.compare(end.row, end.column);\n if (cmp == 1) {\n cmp = this.compare(start.row, start.column);\n if (cmp == 1) {\n return 2;\n }\n else if (cmp == 0) {\n return 1;\n }\n else {\n return 0;\n }\n }\n else if (cmp == -1) {\n return -2;\n }\n else {\n cmp = this.compare(start.row, start.column);\n if (cmp == -1) {\n return -1;\n }\n else if (cmp == 1) {\n return 42;\n }\n else {\n return 0;\n }\n }\n };\n Range.prototype.comparePoint = function (p) {\n return this.compare(p.row, p.column);\n };\n Range.prototype.containsRange = function (range) {\n return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n };\n Range.prototype.intersects = function (range) {\n var cmp = this.compareRange(range);\n return (cmp == -1 || cmp == 0 || cmp == 1);\n };\n Range.prototype.isEnd = function (row, column) {\n return this.end.row == row && this.end.column == column;\n };\n Range.prototype.isStart = function (row, column) {\n return this.start.row == row && this.start.column == column;\n };\n Range.prototype.setStart = function (row, column) {\n if (typeof row == \"object\") {\n this.start.column = row.column;\n this.start.row = row.row;\n }\n else {\n this.start.row = row;\n this.start.column = column;\n }\n };\n Range.prototype.setEnd = function (row, column) {\n if (typeof row == \"object\") {\n this.end.column = row.column;\n this.end.row = row.row;\n }\n else {\n this.end.row = row;\n this.end.column = column;\n }\n };\n Range.prototype.inside = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column) || this.isStart(row, column)) {\n return false;\n }\n else {\n return true;\n }\n }\n return false;\n };\n Range.prototype.insideStart = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column)) {\n return false;\n }\n else {\n return true;\n }\n }\n return false;\n };\n Range.prototype.insideEnd = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isStart(row, column)) {\n return false;\n }\n else {\n return true;\n }\n }\n return false;\n };\n Range.prototype.compare = function (row, column) {\n if (!this.isMultiLine()) {\n if (row === this.start.row) {\n return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n }\n }\n if (row < this.start.row)\n return -1;\n if (row > this.end.row)\n return 1;\n if (this.start.row === row)\n return column >= this.start.column ? 0 : -1;\n if (this.end.row === row)\n return column <= this.end.column ? 0 : 1;\n return 0;\n };\n Range.prototype.compareStart = function (row, column) {\n if (this.start.row == row && this.start.column == column) {\n return -1;\n }\n else {\n return this.compare(row, column);\n }\n };\n Range.prototype.compareEnd = function (row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n }\n else {\n return this.compare(row, column);\n }\n };\n Range.prototype.compareInside = function (row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n }\n else if (this.start.row == row && this.start.column == column) {\n return -1;\n }\n else {\n return this.compare(row, column);\n }\n };\n Range.prototype.clipRows = function (firstRow, lastRow) {\n if (this.end.row > lastRow)\n var end = { row: lastRow + 1, column: 0 };\n else if (this.end.row < firstRow)\n var end = { row: firstRow, column: 0 };\n if (this.start.row > lastRow)\n var start = { row: lastRow + 1, column: 0 };\n else if (this.start.row < firstRow)\n var start = { row: firstRow, column: 0 };\n return Range.fromPoints(start || this.start, end || this.end);\n };\n Range.prototype.extend = function (row, column) {\n var cmp = this.compare(row, column);\n if (cmp == 0)\n return this;\n else if (cmp == -1)\n var start = { row: row, column: column };\n else\n var end = { row: row, column: column };\n return Range.fromPoints(start || this.start, end || this.end);\n };\n Range.prototype.isEmpty = function () {\n return (this.start.row === this.end.row && this.start.column === this.end.column);\n };\n Range.prototype.isMultiLine = function () {\n return (this.start.row !== this.end.row);\n };\n Range.prototype.clone = function () {\n return Range.fromPoints(this.start, this.end);\n };\n Range.prototype.collapseRows = function () {\n if (this.end.column == 0)\n return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0);\n else\n return new Range(this.start.row, 0, this.end.row, 0);\n };\n Range.prototype.toScreenRange = function (session) {\n var screenPosStart = session.documentToScreenPosition(this.start);\n var screenPosEnd = session.documentToScreenPosition(this.end);\n return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column);\n };\n Range.prototype.moveBy = function (row, column) {\n this.start.row += row;\n this.start.column += column;\n this.end.row += row;\n this.end.column += column;\n };\n return Range;\n}());\nRange.fromPoints = function (start, end) {\n return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = function (p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n};\nexports.Range = Range;\n\n});\n\nace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\"], function(require, exports, module){/*! @license\n==========================================================================\nSproutCore -- JavaScript Application Framework\ncopyright 2006-2009, Sprout Systems Inc., Apple Inc. and contributors.\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the \"Software\"),\nto deal in the Software without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE.\n\nSproutCore and the SproutCore logo are trademarks of Sprout Systems, Inc.\n\nFor more information about SproutCore, visit http://www.sproutcore.com\n\n\n==========================================================================\n@license */\n\"use strict\";\nvar oop = require(\"./oop\");\nvar Keys = (function () {\n var ret = {\n MODIFIER_KEYS: {\n 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta',\n 91: 'MetaLeft', 92: 'MetaRight', 93: 'ContextMenu'\n },\n KEY_MODS: {\n \"ctrl\": 1, \"alt\": 2, \"option\": 2, \"shift\": 4,\n \"super\": 8, \"meta\": 8, \"command\": 8, \"cmd\": 8,\n \"control\": 1\n },\n FUNCTION_KEYS: {\n 8: \"Backspace\",\n 9: \"Tab\",\n 13: \"Return\",\n 19: \"Pause\",\n 27: \"Esc\",\n 32: \"Space\",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"Left\",\n 38: \"Up\",\n 39: \"Right\",\n 40: \"Down\",\n 44: \"Print\",\n 45: \"Insert\",\n 46: \"Delete\",\n 96: \"Numpad0\",\n 97: \"Numpad1\",\n 98: \"Numpad2\",\n 99: \"Numpad3\",\n 100: \"Numpad4\",\n 101: \"Numpad5\",\n 102: \"Numpad6\",\n 103: \"Numpad7\",\n 104: \"Numpad8\",\n 105: \"Numpad9\",\n '-13': \"NumpadEnter\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"Numlock\",\n 145: \"Scrolllock\"\n },\n PRINTABLE_KEYS: {\n 32: ' ', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5',\n 54: '6', 55: '7', 56: '8', 57: '9', 59: ';', 61: '=', 65: 'a',\n 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h',\n 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o',\n 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v',\n 87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.',\n 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\n 219: '[', 220: '\\\\', 221: ']', 222: \"'\", 111: '/', 106: '*'\n }\n };\n ret.PRINTABLE_KEYS[173] = '-';\n var name, i;\n for (i in ret.FUNCTION_KEYS) {\n name = ret.FUNCTION_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n for (i in ret.PRINTABLE_KEYS) {\n name = ret.PRINTABLE_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n oop.mixin(ret, ret.MODIFIER_KEYS);\n oop.mixin(ret, ret.PRINTABLE_KEYS);\n oop.mixin(ret, ret.FUNCTION_KEYS);\n ret.enter = ret[\"return\"];\n ret.escape = ret.esc;\n ret.del = ret[\"delete\"];\n (function () {\n var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\n for (var i = Math.pow(2, mods.length); i--;) {\n ret.KEY_MODS[i] = mods.filter(function (x) {\n return i & ret.KEY_MODS[x];\n }).join(\"-\") + \"-\";\n }\n })();\n ret.KEY_MODS[0] = \"\";\n ret.KEY_MODS[-1] = \"input-\";\n return ret;\n})();\noop.mixin(exports, Keys);\nexports.default = exports;\nexports.keyCodeToString = function (keyCode) {\n var keyString = Keys[keyCode];\n if (typeof keyString != \"string\")\n keyString = String.fromCharCode(keyCode);\n return keyString.toLowerCase();\n};\n\n});\n\nace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\"; var keys = require(\"./keys\");\nvar useragent = require(\"./useragent\");\nvar pressedKeys = null;\nvar ts = 0;\nvar activeListenerOptions;\nfunction detectListenerOptionsSupport() {\n activeListenerOptions = false;\n try {\n document.createComment(\"\").addEventListener(\"test\", function () { }, {\n get passive() {\n activeListenerOptions = { passive: false };\n return true;\n }\n });\n }\n catch (e) { }\n}\nfunction getListenerOptions() {\n if (activeListenerOptions == undefined)\n detectListenerOptionsSupport();\n return activeListenerOptions;\n}\nfunction EventListener(elem, type, callback) {\n this.elem = elem;\n this.type = type;\n this.callback = callback;\n}\nEventListener.prototype.destroy = function () {\n removeListener(this.elem, this.type, this.callback);\n this.elem = this.type = this.callback = undefined;\n};\nvar addListener = exports.addListener = function (elem, type, callback, /**@type{any?}*/ destroyer) {\n elem.addEventListener(type, callback, getListenerOptions());\n if (destroyer)\n destroyer.$toDestroy.push(new EventListener(elem, type, callback));\n};\nvar removeListener = exports.removeListener = function (elem, type, callback) {\n elem.removeEventListener(type, callback, getListenerOptions());\n};\nexports.stopEvent = function (e) {\n exports.stopPropagation(e);\n exports.preventDefault(e);\n return false;\n};\nexports.stopPropagation = function (e) {\n if (e.stopPropagation)\n e.stopPropagation();\n};\nexports.preventDefault = function (e) {\n if (e.preventDefault)\n e.preventDefault();\n};\nexports.getButton = function (e) {\n if (e.type == \"dblclick\")\n return 0;\n if (e.type == \"contextmenu\" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey)))\n return 2;\n return e.button;\n};\nexports.capture = function (el, eventHandler, releaseCaptureHandler) {\n var ownerDocument = el && el.ownerDocument || document;\n function onMouseUp(e) {\n eventHandler && eventHandler(e);\n releaseCaptureHandler && releaseCaptureHandler(e);\n removeListener(ownerDocument, \"mousemove\", eventHandler);\n removeListener(ownerDocument, \"mouseup\", onMouseUp);\n removeListener(ownerDocument, \"dragstart\", onMouseUp);\n }\n addListener(ownerDocument, \"mousemove\", eventHandler);\n addListener(ownerDocument, \"mouseup\", onMouseUp);\n addListener(ownerDocument, \"dragstart\", onMouseUp);\n return onMouseUp;\n};\nexports.addMouseWheelListener = function (el, callback, destroyer) {\n addListener(el, \"wheel\", function (e) {\n var factor = 0.15;\n var deltaX = e.deltaX || 0;\n var deltaY = e.deltaY || 0;\n switch (e.deltaMode) {\n case e.DOM_DELTA_PIXEL:\n e.wheelX = deltaX * factor;\n e.wheelY = deltaY * factor;\n break;\n case e.DOM_DELTA_LINE:\n var linePixels = 15;\n e.wheelX = deltaX * linePixels;\n e.wheelY = deltaY * linePixels;\n break;\n case e.DOM_DELTA_PAGE:\n var pagePixels = 150;\n e.wheelX = deltaX * pagePixels;\n e.wheelY = deltaY * pagePixels;\n break;\n }\n callback(e);\n }, destroyer);\n};\nexports.addMultiMouseDownListener = function (elements, timeouts, eventHandler, callbackName, destroyer) {\n var clicks = 0;\n var startX, startY, timer;\n var eventNames = {\n 2: \"dblclick\",\n 3: \"tripleclick\",\n 4: \"quadclick\"\n };\n function onMousedown(e) {\n if (exports.getButton(e) !== 0) {\n clicks = 0;\n }\n else if (e.detail > 1) {\n clicks++;\n if (clicks > 4)\n clicks = 1;\n }\n else {\n clicks = 1;\n }\n if (useragent.isIE) {\n var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n if (!timer || isNewClick)\n clicks = 1;\n if (timer)\n clearTimeout(timer);\n timer = setTimeout(function () { timer = null; }, timeouts[clicks - 1] || 600);\n if (clicks == 1) {\n startX = e.clientX;\n startY = e.clientY;\n }\n }\n e._clicks = clicks;\n eventHandler[callbackName](\"mousedown\", e);\n if (clicks > 4)\n clicks = 0;\n else if (clicks > 1)\n return eventHandler[callbackName](eventNames[clicks], e);\n }\n if (!Array.isArray(elements))\n elements = [elements];\n elements.forEach(function (el) {\n addListener(el, \"mousedown\", onMousedown, destroyer);\n });\n};\nvar getModifierHash = function (e) {\n return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n};\nexports.getModifierString = function (e) {\n return keys.KEY_MODS[getModifierHash(e)];\n};\nfunction normalizeCommandKeys(callback, e, keyCode) {\n var hashId = getModifierHash(e);\n if (!useragent.isMac && pressedKeys) {\n if (e.getModifierState && (e.getModifierState(\"OS\") || e.getModifierState(\"Win\")))\n hashId |= 8;\n if (pressedKeys.altGr) {\n if ((3 & hashId) != 3)\n pressedKeys.altGr = 0;\n else\n return;\n }\n if (keyCode === 18 || keyCode === 17) {\n var location = \"location\" in e ? e.location : e.keyLocation;\n if (keyCode === 17 && location === 1) {\n if (pressedKeys[keyCode] == 1)\n ts = e.timeStamp;\n }\n else if (keyCode === 18 && hashId === 3 && location === 2) {\n var dt = e.timeStamp - ts;\n if (dt < 50)\n pressedKeys.altGr = true;\n }\n }\n }\n if (keyCode in keys.MODIFIER_KEYS) {\n keyCode = -1;\n }\n if (!hashId && keyCode === 13) {\n var location = \"location\" in e ? e.location : e.keyLocation;\n if (location === 3) {\n callback(e, hashId, -keyCode);\n if (e.defaultPrevented)\n return;\n }\n }\n if (useragent.isChromeOS && hashId & 8) {\n callback(e, hashId, keyCode);\n if (e.defaultPrevented)\n return;\n else\n hashId &= ~8;\n }\n if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\n return false;\n }\n return callback(e, hashId, keyCode);\n}\nexports.addCommandKeyListener = function (el, callback, destroyer) {\n var lastDefaultPrevented = null;\n addListener(el, \"keydown\", function (e) {\n pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1;\n var result = normalizeCommandKeys(callback, e, e.keyCode);\n lastDefaultPrevented = e.defaultPrevented;\n return result;\n }, destroyer);\n addListener(el, \"keypress\", function (e) {\n if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {\n exports.stopEvent(e);\n lastDefaultPrevented = null;\n }\n }, destroyer);\n addListener(el, \"keyup\", function (e) {\n pressedKeys[e.keyCode] = null;\n }, destroyer);\n if (!pressedKeys) {\n resetPressedKeys();\n addListener(window, \"focus\", resetPressedKeys);\n }\n};\nfunction resetPressedKeys() {\n pressedKeys = Object.create(null);\n}\nif (typeof window == \"object\" && window.postMessage && !useragent.isOldIE) {\n var postMessageId = 1;\n exports.nextTick = function (callback, win) {\n win = win || window;\n var messageName = \"zero-timeout-message-\" + (postMessageId++);\n var listener = function (e) {\n if (e.data == messageName) {\n exports.stopPropagation(e);\n removeListener(win, \"message\", listener);\n callback();\n }\n };\n addListener(win, \"message\", listener);\n win.postMessage(messageName, \"*\");\n };\n}\nexports.$idleBlocked = false;\nexports.onIdle = function (cb, timeout) {\n return setTimeout(function handler() {\n if (!exports.$idleBlocked) {\n cb();\n }\n else {\n setTimeout(handler, 100);\n }\n }, timeout);\n};\nexports.$idleBlockId = null;\nexports.blockIdle = function (delay) {\n if (exports.$idleBlockId)\n clearTimeout(exports.$idleBlockId);\n exports.$idleBlocked = true;\n exports.$idleBlockId = setTimeout(function () {\n exports.$idleBlocked = false;\n }, delay || 100);\n};\nexports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame\n || window[\"mozRequestAnimationFrame\"]\n || window[\"webkitRequestAnimationFrame\"]\n || window[\"msRequestAnimationFrame\"]\n || window[\"oRequestAnimationFrame\"]);\nif (exports.nextFrame)\n exports.nextFrame = exports.nextFrame.bind(window);\nelse\n exports.nextFrame = function (callback) {\n setTimeout(callback, 17);\n };\n\n});\n\nace.define(\"ace/clipboard\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar $cancelT;\nmodule.exports = {\n lineMode: false,\n pasteCancelled: function () {\n if ($cancelT && $cancelT > Date.now() - 50)\n return true;\n return $cancelT = false;\n },\n cancel: function () {\n $cancelT = Date.now();\n }\n};\n\n});\n\nace.define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/config\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/clipboard\",\"ace/lib/keys\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar nls = require(\"../config\").nls;\nvar useragent = require(\"../lib/useragent\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar clipboard = require(\"../clipboard\");\nvar BROKEN_SETDATA = useragent.isChrome < 18;\nvar USE_IE_MIME_TYPE = useragent.isIE;\nvar HAS_FOCUS_ARGS = useragent.isChrome > 63;\nvar MAX_LINE_LENGTH = 400;\nvar KEYS = require(\"../lib/keys\");\nvar MODS = KEYS.KEY_MODS;\nvar isIOS = useragent.isIOS;\nvar valueResetRegex = isIOS ? /\\s/ : /\\n/;\nvar isMobile = useragent.isMobile;\nvar TextInput;\nTextInput = function (parentNode, host) {\n var text = dom.createElement(\"textarea\");\n text.className = \"ace_text-input\";\n text.setAttribute(\"wrap\", \"off\");\n text.setAttribute(\"autocorrect\", \"off\");\n text.setAttribute(\"autocapitalize\", \"off\");\n text.setAttribute(\"spellcheck\", \"false\");\n text.style.opacity = \"0\";\n parentNode.insertBefore(text, parentNode.firstChild);\n var copied = false;\n var pasted = false;\n var inComposition = false;\n var sendingText = false;\n var tempStyle = '';\n if (!isMobile)\n text.style.fontSize = \"1px\";\n var commandMode = false;\n var ignoreFocusEvents = false;\n var lastValue = \"\";\n var lastSelectionStart = 0;\n var lastSelectionEnd = 0;\n var lastRestoreEnd = 0;\n var rowStart = Number.MAX_SAFE_INTEGER;\n var rowEnd = Number.MIN_SAFE_INTEGER;\n var numberOfExtraLines = 0;\n try {\n var isFocused = document.activeElement === text;\n }\n catch (e) { }\n this.setNumberOfExtraLines = function (number) {\n rowStart = Number.MAX_SAFE_INTEGER;\n rowEnd = Number.MIN_SAFE_INTEGER;\n if (number < 0) {\n numberOfExtraLines = 0;\n return;\n }\n numberOfExtraLines = number;\n };\n this.setAriaOptions = function (options) {\n if (options.activeDescendant) {\n text.setAttribute(\"aria-haspopup\", \"true\");\n text.setAttribute(\"aria-autocomplete\", options.inline ? \"both\" : \"list\");\n text.setAttribute(\"aria-activedescendant\", options.activeDescendant);\n }\n else {\n text.setAttribute(\"aria-haspopup\", \"false\");\n text.setAttribute(\"aria-autocomplete\", \"both\");\n text.removeAttribute(\"aria-activedescendant\");\n }\n if (options.role) {\n text.setAttribute(\"role\", options.role);\n }\n if (options.setLabel) {\n text.setAttribute(\"aria-roledescription\", nls(\"editor\"));\n if (host.session) {\n var row = host.session.selection.cursor.row;\n text.setAttribute(\"aria-label\", nls(\"Cursor at row $0\", [row + 1]));\n }\n }\n };\n this.setAriaOptions({ role: \"textbox\" });\n event.addListener(text, \"blur\", function (e) {\n if (ignoreFocusEvents)\n return;\n host.onBlur(e);\n isFocused = false;\n }, host);\n event.addListener(text, \"focus\", function (e) {\n if (ignoreFocusEvents)\n return;\n isFocused = true;\n if (useragent.isEdge) {\n try {\n if (!document.hasFocus())\n return;\n }\n catch (e) { }\n }\n host.onFocus(e);\n if (useragent.isEdge)\n setTimeout(resetSelection);\n else\n resetSelection();\n }, host);\n this.$focusScroll = false;\n this.focus = function () {\n this.setAriaOptions({\n setLabel: host.renderer.enableKeyboardAccessibility\n });\n if (tempStyle || HAS_FOCUS_ARGS || this.$focusScroll == \"browser\")\n return text.focus({ preventScroll: true });\n var top = text.style.top;\n text.style.position = \"fixed\";\n text.style.top = \"0px\";\n try {\n var isTransformed = text.getBoundingClientRect().top != 0;\n }\n catch (e) {\n return;\n }\n var ancestors = [];\n if (isTransformed) {\n var t = text.parentElement;\n while (t && t.nodeType == 1) {\n ancestors.push(t);\n t.setAttribute(\"ace_nocontext\", \"true\");\n if (!t.parentElement && t.getRootNode)\n t = t.getRootNode()[\"host\"];\n else\n t = t.parentElement;\n }\n }\n text.focus({ preventScroll: true });\n if (isTransformed) {\n ancestors.forEach(function (p) {\n p.removeAttribute(\"ace_nocontext\");\n });\n }\n setTimeout(function () {\n text.style.position = \"\";\n if (text.style.top == \"0px\")\n text.style.top = top;\n }, 0);\n };\n this.blur = function () {\n text.blur();\n };\n this.isFocused = function () {\n return isFocused;\n };\n host.on(\"beforeEndOperation\", function () {\n var curOp = host.curOp;\n var commandName = curOp && curOp.command && curOp.command.name;\n if (commandName == \"insertstring\")\n return;\n var isUserAction = commandName && (curOp.docChanged || curOp.selectionChanged);\n if (inComposition && isUserAction) {\n lastValue = text.value = \"\";\n onCompositionEnd();\n }\n resetSelection();\n });\n var positionToSelection = function (row, column) {\n var selection = column;\n for (var i = 1; i <= row - rowStart && i < 2 * numberOfExtraLines + 1; i++) {\n selection += host.session.getLine(row - i).length + 1;\n }\n return selection;\n };\n var resetSelection = isIOS\n ? function (value) {\n if (!isFocused || (copied && !value) || sendingText)\n return;\n if (!value)\n value = \"\";\n var newValue = \"\\n ab\" + value + \"cde fg\\n\";\n if (newValue != text.value)\n text.value = lastValue = newValue;\n var selectionStart = 4;\n var selectionEnd = 4 + (value.length || (host.selection.isEmpty() ? 0 : 1));\n if (lastSelectionStart != selectionStart || lastSelectionEnd != selectionEnd) {\n text.setSelectionRange(selectionStart, selectionEnd);\n }\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n }\n : function () {\n if (inComposition || sendingText)\n return;\n if (!isFocused && !afterContextMenu)\n return;\n inComposition = true;\n var selectionStart = 0;\n var selectionEnd = 0;\n var line = \"\";\n if (host.session) {\n var selection = host.selection;\n var range = selection.getRange();\n var row = selection.cursor.row;\n if (row === rowEnd + 1) {\n rowStart = rowEnd + 1;\n rowEnd = rowStart + 2 * numberOfExtraLines;\n }\n else if (row === rowStart - 1) {\n rowEnd = rowStart - 1;\n rowStart = rowEnd - 2 * numberOfExtraLines;\n }\n else if (row < rowStart - 1 || row > rowEnd + 1) {\n rowStart = row > numberOfExtraLines ? row - numberOfExtraLines : 0;\n rowEnd = row > numberOfExtraLines ? row + numberOfExtraLines : 2 * numberOfExtraLines;\n }\n var lines = [];\n for (var i = rowStart; i <= rowEnd; i++) {\n lines.push(host.session.getLine(i));\n }\n line = lines.join('\\n');\n selectionStart = positionToSelection(range.start.row, range.start.column);\n selectionEnd = positionToSelection(range.end.row, range.end.column);\n if (range.start.row < rowStart) {\n var prevLine = host.session.getLine(rowStart - 1);\n selectionStart = range.start.row < rowStart - 1 ? 0 : selectionStart;\n selectionEnd += prevLine.length + 1;\n line = prevLine + \"\\n\" + line;\n }\n else if (range.end.row > rowEnd) {\n var nextLine = host.session.getLine(rowEnd + 1);\n selectionEnd = range.end.row > rowEnd + 1 ? nextLine.length : range.end.column;\n selectionEnd += line.length + 1;\n line = line + \"\\n\" + nextLine;\n }\n else if (isMobile && row > 0) {\n line = \"\\n\" + line;\n selectionEnd += 1;\n selectionStart += 1;\n }\n if (line.length > MAX_LINE_LENGTH) {\n if (selectionStart < MAX_LINE_LENGTH && selectionEnd < MAX_LINE_LENGTH) {\n line = line.slice(0, MAX_LINE_LENGTH);\n }\n else {\n line = \"\\n\";\n if (selectionStart == selectionEnd) {\n selectionStart = selectionEnd = 0;\n }\n else {\n selectionStart = 0;\n selectionEnd = 1;\n }\n }\n }\n var newValue = line + \"\\n\\n\";\n if (newValue != lastValue) {\n text.value = lastValue = newValue;\n lastSelectionStart = lastSelectionEnd = newValue.length;\n }\n }\n if (afterContextMenu) {\n lastSelectionStart = text.selectionStart;\n lastSelectionEnd = text.selectionEnd;\n }\n if (lastSelectionEnd != selectionEnd\n || lastSelectionStart != selectionStart\n || text.selectionEnd != lastSelectionEnd // on ie edge selectionEnd changes silently after the initialization\n ) {\n try {\n text.setSelectionRange(selectionStart, selectionEnd);\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n }\n catch (e) { }\n }\n inComposition = false;\n };\n this.resetSelection = resetSelection;\n if (isFocused)\n host.onFocus();\n var isAllSelected = function (text) {\n return text.selectionStart === 0 && text.selectionEnd >= lastValue.length\n && text.value === lastValue && lastValue\n && text.selectionEnd !== lastSelectionEnd;\n };\n var onSelect = function (e) {\n if (inComposition)\n return;\n if (copied) {\n copied = false;\n }\n else if (isAllSelected(text)) {\n host.selectAll();\n resetSelection();\n }\n else if (isMobile && text.selectionStart != lastSelectionStart) {\n resetSelection();\n }\n };\n var inputHandler = null;\n this.setInputHandler = function (cb) { inputHandler = cb; };\n this.getInputHandler = function () { return inputHandler; };\n var afterContextMenu = false;\n var sendText = function (value, fromInput) {\n if (afterContextMenu)\n afterContextMenu = false;\n if (pasted) {\n resetSelection();\n if (value)\n host.onPaste(value);\n pasted = false;\n return \"\";\n }\n else {\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n var extendLeft = lastSelectionStart;\n var extendRight = lastValue.length - lastSelectionEnd;\n var inserted = value;\n var restoreStart = value.length - selectionStart;\n var restoreEnd = value.length - selectionEnd;\n var i = 0;\n while (extendLeft > 0 && lastValue[i] == value[i]) {\n i++;\n extendLeft--;\n }\n inserted = inserted.slice(i);\n i = 1;\n while (extendRight > 0 && lastValue.length - i > lastSelectionStart - 1 && lastValue[lastValue.length - i] == value[value.length - i]) {\n i++;\n extendRight--;\n }\n restoreStart -= i - 1;\n restoreEnd -= i - 1;\n var endIndex = inserted.length - i + 1;\n if (endIndex < 0) {\n extendLeft = -endIndex;\n endIndex = 0;\n }\n inserted = inserted.slice(0, endIndex);\n if (!fromInput && !inserted && !restoreStart && !extendLeft && !extendRight && !restoreEnd)\n return \"\";\n sendingText = true;\n var shouldReset = false;\n if (useragent.isAndroid && inserted == \". \") {\n inserted = \" \";\n shouldReset = true;\n }\n if (inserted && !extendLeft && !extendRight && !restoreStart && !restoreEnd || commandMode) {\n host.onTextInput(inserted);\n }\n else {\n host.onTextInput(inserted, {\n extendLeft: extendLeft,\n extendRight: extendRight,\n restoreStart: restoreStart,\n restoreEnd: restoreEnd\n });\n }\n sendingText = false;\n lastValue = value;\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n lastRestoreEnd = restoreEnd;\n return shouldReset ? \"\\n\" : inserted;\n }\n };\n var onInput = function (e) {\n if (inComposition)\n return onCompositionUpdate();\n if (e && e.inputType) {\n if (e.inputType == \"historyUndo\")\n return host.execCommand(\"undo\");\n if (e.inputType == \"historyRedo\")\n return host.execCommand(\"redo\");\n }\n var data = text.value;\n var inserted = sendText(data, true);\n if (data.length > MAX_LINE_LENGTH + 100\n || valueResetRegex.test(inserted)\n || isMobile && lastSelectionStart < 1 && lastSelectionStart == lastSelectionEnd) {\n resetSelection();\n }\n };\n var handleClipboardData = function (e, data, forceIEMime) {\n var clipboardData = e.clipboardData || window[\"clipboardData\"];\n if (!clipboardData || BROKEN_SETDATA)\n return;\n var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n try {\n if (data) {\n return clipboardData.setData(mime, data) !== false;\n }\n else {\n return clipboardData.getData(mime);\n }\n }\n catch (e) {\n if (!forceIEMime)\n return handleClipboardData(e, data, true);\n }\n };\n var doCopy = function (e, isCut) {\n var data = host.getCopyText();\n if (!data)\n return event.preventDefault(e);\n if (handleClipboardData(e, data)) {\n if (isIOS) {\n resetSelection(data);\n copied = data;\n setTimeout(function () {\n copied = false;\n }, 10);\n }\n isCut ? host.onCut() : host.onCopy();\n event.preventDefault(e);\n }\n else {\n copied = true;\n text.value = data;\n text.select();\n setTimeout(function () {\n copied = false;\n resetSelection();\n isCut ? host.onCut() : host.onCopy();\n });\n }\n };\n var onCut = function (e) {\n doCopy(e, true);\n };\n var onCopy = function (e) {\n doCopy(e, false);\n };\n var onPaste = function (e) {\n var data = handleClipboardData(e);\n if (clipboard.pasteCancelled())\n return;\n if (typeof data == \"string\") {\n if (data)\n host.onPaste(data, e);\n if (useragent.isIE)\n setTimeout(resetSelection);\n event.preventDefault(e);\n }\n else {\n text.value = \"\";\n pasted = true;\n }\n };\n event.addCommandKeyListener(text, host.onCommandKey.bind(host), host);\n event.addListener(text, \"select\", onSelect, host);\n event.addListener(text, \"input\", onInput, host);\n event.addListener(text, \"cut\", onCut, host);\n event.addListener(text, \"copy\", onCopy, host);\n event.addListener(text, \"paste\", onPaste, host);\n if (!('oncut' in text) || !('oncopy' in text) || !('onpaste' in text)) {\n event.addListener(parentNode, \"keydown\", function (e) {\n if ((useragent.isMac && !e.metaKey) || !e.ctrlKey)\n return;\n switch (e.keyCode) {\n case 67:\n onCopy(e);\n break;\n case 86:\n onPaste(e);\n break;\n case 88:\n onCut(e);\n break;\n }\n }, host);\n }\n var onCompositionStart = function (e) {\n if (inComposition || !host.onCompositionStart || host.$readOnly)\n return;\n inComposition = {};\n if (commandMode)\n return;\n if (e.data)\n inComposition.useTextareaForIME = false;\n setTimeout(onCompositionUpdate, 0);\n host._signal(\"compositionStart\");\n host.on(\"mousedown\", cancelComposition);\n var range = host.getSelectionRange();\n range.end.row = range.start.row;\n range.end.column = range.start.column;\n inComposition.markerRange = range;\n inComposition.selectionStart = lastSelectionStart;\n host.onCompositionStart(inComposition);\n if (inComposition.useTextareaForIME) {\n lastValue = text.value = \"\";\n lastSelectionStart = 0;\n lastSelectionEnd = 0;\n }\n else {\n if (text.msGetInputContext)\n inComposition.context = text.msGetInputContext();\n if (text.getInputContext)\n inComposition.context = text.getInputContext();\n }\n };\n var onCompositionUpdate = function () {\n if (!inComposition || !host.onCompositionUpdate || host.$readOnly)\n return;\n if (commandMode)\n return cancelComposition();\n if (inComposition.useTextareaForIME) {\n host.onCompositionUpdate(text.value);\n }\n else {\n var data = text.value;\n sendText(data);\n if (inComposition.markerRange) {\n if (inComposition.context) {\n inComposition.markerRange.start.column = inComposition.selectionStart\n = inComposition.context.compositionStartOffset;\n }\n inComposition.markerRange.end.column = inComposition.markerRange.start.column\n + lastSelectionEnd - inComposition.selectionStart + lastRestoreEnd;\n }\n }\n };\n var onCompositionEnd = function (e) {\n if (!host.onCompositionEnd || host.$readOnly)\n return;\n inComposition = false;\n host.onCompositionEnd();\n host.off(\"mousedown\", cancelComposition);\n if (e)\n onInput();\n };\n function cancelComposition() {\n ignoreFocusEvents = true;\n text.blur();\n text.focus();\n ignoreFocusEvents = false;\n }\n var syncComposition = lang.delayedCall(onCompositionUpdate, 50).schedule.bind(null, null);\n function onKeyup(e) {\n if (e.keyCode == 27 && text.value.length < text.selectionStart) {\n if (!inComposition)\n lastValue = text.value;\n lastSelectionStart = lastSelectionEnd = -1;\n resetSelection();\n }\n syncComposition();\n }\n event.addListener(text, \"compositionstart\", onCompositionStart, host);\n event.addListener(text, \"compositionupdate\", onCompositionUpdate, host);\n event.addListener(text, \"keyup\", onKeyup, host);\n event.addListener(text, \"keydown\", syncComposition, host);\n event.addListener(text, \"compositionend\", onCompositionEnd, host);\n this.getElement = function () {\n return text;\n };\n this.setCommandMode = function (value) {\n commandMode = value;\n text.readOnly = false;\n };\n this.setReadOnly = function (readOnly) {\n if (!commandMode)\n text.readOnly = readOnly;\n };\n this.setCopyWithEmptySelection = function (value) {\n };\n this.onContextMenu = function (e) {\n afterContextMenu = true;\n resetSelection();\n host._emit(\"nativecontextmenu\", { target: host, domEvent: e });\n this.moveToMouse(e, true);\n };\n this.moveToMouse = function (e, bringToFront) {\n if (!tempStyle)\n tempStyle = text.style.cssText;\n text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\")\n + (useragent.isIE ? \"opacity:0.1;\" : \"\")\n + \"text-indent: -\" + (lastSelectionStart + lastSelectionEnd) * host.renderer.characterWidth * 0.5 + \"px;\";\n var rect = host.container.getBoundingClientRect();\n var style = dom.computedStyle(host.container);\n var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);\n var maxTop = rect.bottom - top - text.clientHeight - 2;\n var move = function (e) {\n dom.translate(text, e.clientX - left - 2, Math.min(e.clientY - top - 2, maxTop));\n };\n move(e);\n if (e.type != \"mousedown\")\n return;\n host.renderer.$isMousePressed = true;\n clearTimeout(closeTimeout);\n if (useragent.isWin)\n event.capture(host.container, move, onContextMenuClose);\n };\n this.onContextMenuClose = onContextMenuClose;\n var closeTimeout;\n function onContextMenuClose() {\n clearTimeout(closeTimeout);\n closeTimeout = setTimeout(function () {\n if (tempStyle) {\n text.style.cssText = tempStyle;\n tempStyle = '';\n }\n host.renderer.$isMousePressed = false;\n if (host.renderer.$keepTextAreaAtCursor)\n host.renderer.$moveTextAreaToCursor();\n }, 0);\n }\n var onContextMenu = function (e) {\n host.textInput.onContextMenu(e);\n onContextMenuClose();\n };\n event.addListener(text, \"mouseup\", onContextMenu, host);\n event.addListener(text, \"mousedown\", function (e) {\n e.preventDefault();\n onContextMenuClose();\n }, host);\n event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu, host);\n event.addListener(text, \"contextmenu\", onContextMenu, host);\n if (isIOS)\n addIosSelectionHandler(parentNode, host, text);\n function addIosSelectionHandler(parentNode, host, text) {\n var typingResetTimeout = null;\n var typing = false;\n text.addEventListener(\"keydown\", function (e) {\n if (typingResetTimeout)\n clearTimeout(typingResetTimeout);\n typing = true;\n }, true);\n text.addEventListener(\"keyup\", function (e) {\n typingResetTimeout = setTimeout(function () {\n typing = false;\n }, 100);\n }, true);\n var detectArrowKeys = function (e) {\n if (document.activeElement !== text)\n return;\n if (typing || inComposition || host.$mouseHandler.isMousePressed)\n return;\n if (copied) {\n return;\n }\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n var key = null;\n var modifier = 0;\n if (selectionStart == 0) {\n key = KEYS.up;\n }\n else if (selectionStart == 1) {\n key = KEYS.home;\n }\n else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd] == \"\\n\") {\n key = KEYS.end;\n }\n else if (selectionStart < lastSelectionStart && lastValue[selectionStart - 1] == \" \") {\n key = KEYS.left;\n modifier = MODS.option;\n }\n else if (selectionStart < lastSelectionStart\n || (selectionStart == lastSelectionStart\n && lastSelectionEnd != lastSelectionStart\n && selectionStart == selectionEnd)) {\n key = KEYS.left;\n }\n else if (selectionEnd > lastSelectionEnd && lastValue.slice(0, selectionEnd).split(\"\\n\").length > 2) {\n key = KEYS.down;\n }\n else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd - 1] == \" \") {\n key = KEYS.right;\n modifier = MODS.option;\n }\n else if (selectionEnd > lastSelectionEnd\n || (selectionEnd == lastSelectionEnd\n && lastSelectionEnd != lastSelectionStart\n && selectionStart == selectionEnd)) {\n key = KEYS.right;\n }\n if (selectionStart !== selectionEnd)\n modifier |= MODS.shift;\n if (key) {\n var result = host.onCommandKey({}, modifier, key);\n if (!result && host.commands) {\n key = KEYS.keyCodeToString(key);\n var command = host.commands.findKeyCommand(modifier, key);\n if (command)\n host.execCommand(command);\n }\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n resetSelection(\"\");\n }\n };\n document.addEventListener(\"selectionchange\", detectArrowKeys);\n host.on(\"destroy\", function () {\n document.removeEventListener(\"selectionchange\", detectArrowKeys);\n });\n }\n this.destroy = function () {\n if (text.parentElement)\n text.parentElement.removeChild(text);\n };\n};\nexports.TextInput = TextInput;\nexports.$setUserAgentForTests = function (_isMobile, _isIOS) {\n isMobile = _isMobile;\n isIOS = _isIOS;\n};\n\n});\n\nace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar useragent = require(\"../lib/useragent\");\nvar DRAG_OFFSET = 0; // pixels\nvar SCROLL_COOLDOWN_T = 550; // milliseconds\nvar DefaultHandlers = /** @class */ (function () {\n function DefaultHandlers(mouseHandler) {\n mouseHandler.$clickSelection = null;\n var editor = mouseHandler.editor;\n editor.setDefaultHandler(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n editor.setDefaultHandler(\"dblclick\", this.onDoubleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"tripleclick\", this.onTripleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"quadclick\", this.onQuadClick.bind(mouseHandler));\n editor.setDefaultHandler(\"mousewheel\", this.onMouseWheel.bind(mouseHandler));\n var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\",\n \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n exports.forEach(function (x) {\n mouseHandler[x] = this[x];\n }, this);\n mouseHandler[\"selectByLines\"] = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n mouseHandler[\"selectByWords\"] = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n }\n DefaultHandlers.prototype.onMouseDown = function (ev) {\n var inSelection = ev.inSelection();\n var pos = ev.getDocumentPosition();\n this.mousedownEvent = ev;\n var editor = this.editor;\n var button = ev.getButton();\n if (button !== 0) {\n var selectionRange = editor.getSelectionRange();\n var selectionEmpty = selectionRange.isEmpty();\n if (selectionEmpty || button == 1)\n editor.selection.moveToPosition(pos);\n if (button == 2) {\n editor.textInput.onContextMenu(ev.domEvent);\n if (!useragent.isMozilla)\n ev.preventDefault();\n }\n return;\n }\n this.mousedownEvent.time = Date.now();\n if (inSelection && !editor.isFocused()) {\n editor.focus();\n if (this.$focusTimeout && !this.$clickSelection && !editor.inMultiSelectMode) {\n this.setState(\"focusWait\");\n this.captureMouse(ev);\n return;\n }\n }\n this.captureMouse(ev);\n this.startSelect(pos, ev.domEvent._clicks > 1);\n return ev.preventDefault();\n };\n DefaultHandlers.prototype.startSelect = function (pos, waitForClickSelection) {\n pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n var editor = this.editor;\n if (!this.mousedownEvent)\n return;\n if (this.mousedownEvent.getShiftKey())\n editor.selection.selectToPosition(pos);\n else if (!waitForClickSelection)\n editor.selection.moveToPosition(pos);\n if (!waitForClickSelection)\n this.select();\n editor.setStyle(\"ace_selecting\");\n this.setState(\"select\");\n };\n DefaultHandlers.prototype.select = function () {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n if (this.$clickSelection) {\n var cmp = this.$clickSelection.comparePoint(cursor);\n if (cmp == -1) {\n anchor = this.$clickSelection.end;\n }\n else if (cmp == 1) {\n anchor = this.$clickSelection.start;\n }\n else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n };\n DefaultHandlers.prototype.extendSelectionBy = function (unitName) {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n var range = editor.selection[unitName](cursor.row, cursor.column);\n if (this.$clickSelection) {\n var cmpStart = this.$clickSelection.comparePoint(range.start);\n var cmpEnd = this.$clickSelection.comparePoint(range.end);\n if (cmpStart == -1 && cmpEnd <= 0) {\n anchor = this.$clickSelection.end;\n if (range.end.row != cursor.row || range.end.column != cursor.column)\n cursor = range.start;\n }\n else if (cmpEnd == 1 && cmpStart >= 0) {\n anchor = this.$clickSelection.start;\n if (range.start.row != cursor.row || range.start.column != cursor.column)\n cursor = range.end;\n }\n else if (cmpStart == -1 && cmpEnd == 1) {\n cursor = range.end;\n anchor = range.start;\n }\n else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n };\n DefaultHandlers.prototype.selectByLinesEnd = function () {\n this.$clickSelection = null;\n this.editor.unsetStyle(\"ace_selecting\");\n };\n DefaultHandlers.prototype.focusWait = function () {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n var time = Date.now();\n if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimeout)\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n };\n DefaultHandlers.prototype.onDoubleClick = function (ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n var session = editor.session;\n var range = session.getBracketRange(pos);\n if (range) {\n if (range.isEmpty()) {\n range.start.column--;\n range.end.column++;\n }\n this.setState(\"select\");\n }\n else {\n range = editor.selection.getWordRange(pos.row, pos.column);\n this.setState(\"selectByWords\");\n }\n this.$clickSelection = range;\n this.select();\n };\n DefaultHandlers.prototype.onTripleClick = function (ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n this.setState(\"selectByLines\");\n var range = editor.getSelectionRange();\n if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\n this.$clickSelection = editor.selection.getLineRange(range.start.row);\n this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\n }\n else {\n this.$clickSelection = editor.selection.getLineRange(pos.row);\n }\n this.select();\n };\n DefaultHandlers.prototype.onQuadClick = function (ev) {\n var editor = this.editor;\n editor.selectAll();\n this.$clickSelection = editor.getSelectionRange();\n this.setState(\"selectAll\");\n };\n DefaultHandlers.prototype.onMouseWheel = function (ev) {\n if (ev.getAccelKey())\n return;\n if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\n ev.wheelX = ev.wheelY;\n ev.wheelY = 0;\n }\n var editor = this.editor;\n if (!this.$lastScroll)\n this.$lastScroll = { t: 0, vx: 0, vy: 0, allowed: 0 };\n var prevScroll = this.$lastScroll;\n var t = ev.domEvent.timeStamp;\n var dt = t - prevScroll.t;\n var vx = dt ? ev.wheelX / dt : prevScroll.vx;\n var vy = dt ? ev.wheelY / dt : prevScroll.vy;\n if (dt < SCROLL_COOLDOWN_T) {\n vx = (vx + prevScroll.vx) / 2;\n vy = (vy + prevScroll.vy) / 2;\n }\n var direction = Math.abs(vx / vy);\n var canScroll = false;\n if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0))\n canScroll = true;\n if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed))\n canScroll = true;\n if (canScroll) {\n prevScroll.allowed = t;\n }\n else if (t - prevScroll.allowed < SCROLL_COOLDOWN_T) {\n var isSlower = Math.abs(vx) <= 1.5 * Math.abs(prevScroll.vx)\n && Math.abs(vy) <= 1.5 * Math.abs(prevScroll.vy);\n if (isSlower) {\n canScroll = true;\n prevScroll.allowed = t;\n }\n else {\n prevScroll.allowed = 0;\n }\n }\n prevScroll.t = t;\n prevScroll.vx = vx;\n prevScroll.vy = vy;\n if (canScroll) {\n editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n return ev.stop();\n }\n };\n return DefaultHandlers;\n}());\nDefaultHandlers.prototype.selectEnd = DefaultHandlers.prototype.selectByLinesEnd;\nDefaultHandlers.prototype.selectAllEnd = DefaultHandlers.prototype.selectByLinesEnd;\nDefaultHandlers.prototype.selectByWordsEnd = DefaultHandlers.prototype.selectByLinesEnd;\nexports.DefaultHandlers = DefaultHandlers;\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\nfunction calcRangeOrientation(range, cursor) {\n if (range.start.row == range.end.row)\n var cmp = 2 * cursor.column - range.start.column - range.end.column;\n else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column)\n var cmp = cursor.column - 4;\n else\n var cmp = 2 * cursor.row - range.start.row - range.end.row;\n if (cmp < 0)\n return { cursor: range.start, anchor: range.end };\n else\n return { cursor: range.end, anchor: range.start };\n}\n\n});\n\nace.define(\"ace/lib/scroll\",[\"require\",\"exports\",\"module\"], function(require, exports, module){exports.preventParentScroll = function preventParentScroll(event) {\n event.stopPropagation();\n var target = event.currentTarget;\n var contentOverflows = target.scrollHeight > target.clientHeight;\n if (!contentOverflows) {\n event.preventDefault();\n }\n};\n\n});\n\nace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/range\",\"ace/lib/scroll\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar Range = require(\"./range\").Range;\nvar preventParentScroll = require(\"./lib/scroll\").preventParentScroll;\nvar CLASSNAME = \"ace_tooltip\";\nvar Tooltip = /** @class */ (function () {\n function Tooltip(parentNode) {\n this.isOpen = false;\n this.$element = null;\n this.$parentNode = parentNode;\n }\n Tooltip.prototype.$init = function () {\n this.$element = dom.createElement(\"div\");\n this.$element.className = CLASSNAME;\n this.$element.style.display = \"none\";\n this.$parentNode.appendChild(this.$element);\n return this.$element;\n };\n Tooltip.prototype.getElement = function () {\n return this.$element || this.$init();\n };\n Tooltip.prototype.setText = function (text) {\n this.getElement().textContent = text;\n };\n Tooltip.prototype.setHtml = function (html) {\n this.getElement().innerHTML = html;\n };\n Tooltip.prototype.setPosition = function (x, y) {\n this.getElement().style.left = x + \"px\";\n this.getElement().style.top = y + \"px\";\n };\n Tooltip.prototype.setClassName = function (className) {\n dom.addCssClass(this.getElement(), className);\n };\n Tooltip.prototype.setTheme = function (theme) {\n this.$element.className = CLASSNAME + \" \" +\n (theme.isDark ? \"ace_dark \" : \"\") + (theme.cssClass || \"\");\n };\n Tooltip.prototype.show = function (text, x, y) {\n if (text != null)\n this.setText(text);\n if (x != null && y != null)\n this.setPosition(x, y);\n if (!this.isOpen) {\n this.getElement().style.display = \"block\";\n this.isOpen = true;\n }\n };\n Tooltip.prototype.hide = function (e) {\n if (this.isOpen) {\n this.getElement().style.display = \"none\";\n this.getElement().className = CLASSNAME;\n this.isOpen = false;\n }\n };\n Tooltip.prototype.getHeight = function () {\n return this.getElement().offsetHeight;\n };\n Tooltip.prototype.getWidth = function () {\n return this.getElement().offsetWidth;\n };\n Tooltip.prototype.destroy = function () {\n this.isOpen = false;\n if (this.$element && this.$element.parentNode) {\n this.$element.parentNode.removeChild(this.$element);\n }\n };\n return Tooltip;\n}());\nvar PopupManager = /** @class */ (function () {\n function PopupManager() {\n this.popups = [];\n }\n PopupManager.prototype.addPopup = function (popup) {\n this.popups.push(popup);\n this.updatePopups();\n };\n PopupManager.prototype.removePopup = function (popup) {\n var index = this.popups.indexOf(popup);\n if (index !== -1) {\n this.popups.splice(index, 1);\n this.updatePopups();\n }\n };\n PopupManager.prototype.updatePopups = function () {\n var e_1, _a, e_2, _b;\n this.popups.sort(function (a, b) { return b.priority - a.priority; });\n var visiblepopups = [];\n try {\n for (var _c = __values(this.popups), _d = _c.next(); !_d.done; _d = _c.next()) {\n var popup = _d.value;\n var shouldDisplay = true;\n try {\n for (var visiblepopups_1 = (e_2 = void 0, __values(visiblepopups)), visiblepopups_1_1 = visiblepopups_1.next(); !visiblepopups_1_1.done; visiblepopups_1_1 = visiblepopups_1.next()) {\n var visiblePopup = visiblepopups_1_1.value;\n if (this.doPopupsOverlap(visiblePopup, popup)) {\n shouldDisplay = false;\n break;\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (visiblepopups_1_1 && !visiblepopups_1_1.done && (_b = visiblepopups_1.return)) _b.call(visiblepopups_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n if (shouldDisplay) {\n visiblepopups.push(popup);\n }\n else {\n popup.hide();\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n }\n finally { if (e_1) throw e_1.error; }\n }\n };\n PopupManager.prototype.doPopupsOverlap = function (popupA, popupB) {\n var rectA = popupA.getElement().getBoundingClientRect();\n var rectB = popupB.getElement().getBoundingClientRect();\n return (rectA.left < rectB.right && rectA.right > rectB.left && rectA.top < rectB.bottom && rectA.bottom\n > rectB.top);\n };\n return PopupManager;\n}());\nvar popupManager = new PopupManager();\nexports.popupManager = popupManager;\nexports.Tooltip = Tooltip;\nvar HoverTooltip = /** @class */ (function (_super) {\n __extends(HoverTooltip, _super);\n function HoverTooltip(parentNode) {\n if (parentNode === void 0) { parentNode = document.body; }\n var _this = _super.call(this, parentNode) || this;\n _this.timeout = undefined;\n _this.lastT = 0;\n _this.idleTime = 350;\n _this.lastEvent = undefined;\n _this.onMouseOut = _this.onMouseOut.bind(_this);\n _this.onMouseMove = _this.onMouseMove.bind(_this);\n _this.waitForHover = _this.waitForHover.bind(_this);\n _this.hide = _this.hide.bind(_this);\n var el = _this.getElement();\n el.style.whiteSpace = \"pre-wrap\";\n el.style.pointerEvents = \"auto\";\n el.addEventListener(\"mouseout\", _this.onMouseOut);\n el.tabIndex = -1;\n el.addEventListener(\"blur\", function () {\n if (!el.contains(document.activeElement))\n this.hide();\n }.bind(_this));\n el.addEventListener(\"wheel\", preventParentScroll);\n return _this;\n }\n HoverTooltip.prototype.addToEditor = function (editor) {\n editor.on(\"mousemove\", this.onMouseMove);\n editor.on(\"mousedown\", this.hide);\n editor.renderer.getMouseEventTarget().addEventListener(\"mouseout\", this.onMouseOut, true);\n };\n HoverTooltip.prototype.removeFromEditor = function (editor) {\n editor.off(\"mousemove\", this.onMouseMove);\n editor.off(\"mousedown\", this.hide);\n editor.renderer.getMouseEventTarget().removeEventListener(\"mouseout\", this.onMouseOut, true);\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n };\n HoverTooltip.prototype.onMouseMove = function (e, editor) {\n this.lastEvent = e;\n this.lastT = Date.now();\n var isMousePressed = editor.$mouseHandler.isMousePressed;\n if (this.isOpen) {\n var pos = this.lastEvent && this.lastEvent.getDocumentPosition();\n if (!this.range\n || !this.range.contains(pos.row, pos.column)\n || isMousePressed\n || this.isOutsideOfText(this.lastEvent)) {\n this.hide();\n }\n }\n if (this.timeout || isMousePressed)\n return;\n this.lastEvent = e;\n this.timeout = setTimeout(this.waitForHover, this.idleTime);\n };\n HoverTooltip.prototype.waitForHover = function () {\n if (this.timeout)\n clearTimeout(this.timeout);\n var dt = Date.now() - this.lastT;\n if (this.idleTime - dt > 10) {\n this.timeout = setTimeout(this.waitForHover, this.idleTime - dt);\n return;\n }\n this.timeout = null;\n if (this.lastEvent && !this.isOutsideOfText(this.lastEvent)) {\n this.$gatherData(this.lastEvent, this.lastEvent.editor);\n }\n };\n HoverTooltip.prototype.isOutsideOfText = function (e) {\n var editor = e.editor;\n var docPos = e.getDocumentPosition();\n var line = editor.session.getLine(docPos.row);\n if (docPos.column == line.length) {\n var screenPos = editor.renderer.pixelToScreenCoordinates(e.clientX, e.clientY);\n var clippedPos = editor.session.documentToScreenPosition(docPos.row, docPos.column);\n if (clippedPos.column != screenPos.column\n || clippedPos.row != screenPos.row) {\n return true;\n }\n }\n return false;\n };\n HoverTooltip.prototype.setDataProvider = function (value) {\n this.$gatherData = value;\n };\n HoverTooltip.prototype.showForRange = function (editor, range, domNode, startingEvent) {\n var MARGIN = 10;\n if (startingEvent && startingEvent != this.lastEvent)\n return;\n if (this.isOpen && document.activeElement == this.getElement())\n return;\n var renderer = editor.renderer;\n if (!this.isOpen) {\n popupManager.addPopup(this);\n this.$registerCloseEvents();\n this.setTheme(renderer.theme);\n }\n this.isOpen = true;\n this.addMarker(range, editor.session);\n this.range = Range.fromPoints(range.start, range.end);\n var position = renderer.textToScreenCoordinates(range.start.row, range.start.column);\n var rect = renderer.scroller.getBoundingClientRect();\n if (position.pageX < rect.left)\n position.pageX = rect.left;\n var element = this.getElement();\n element.innerHTML = \"\";\n element.appendChild(domNode);\n element.style.maxHeight = \"\";\n element.style.display = \"block\";\n var labelHeight = element.clientHeight;\n var labelWidth = element.clientWidth;\n var spaceBelow = window.innerHeight - position.pageY - renderer.lineHeight;\n var isAbove = true;\n if (position.pageY - labelHeight < 0 && position.pageY < spaceBelow) {\n isAbove = false;\n }\n element.style.maxHeight = (isAbove ? position.pageY : spaceBelow) - MARGIN + \"px\";\n element.style.top = isAbove ? \"\" : position.pageY + renderer.lineHeight + \"px\";\n element.style.bottom = isAbove ? window.innerHeight - position.pageY + \"px\" : \"\";\n element.style.left = Math.min(position.pageX, window.innerWidth - labelWidth - MARGIN) + \"px\";\n };\n HoverTooltip.prototype.addMarker = function (range, session) {\n if (this.marker) {\n this.$markerSession.removeMarker(this.marker);\n }\n this.$markerSession = session;\n this.marker = session && session.addMarker(range, \"ace_highlight-marker\", \"text\");\n };\n HoverTooltip.prototype.hide = function (e) {\n if (!e && document.activeElement == this.getElement())\n return;\n if (e && e.target && (e.type != \"keydown\" || e.ctrlKey || e.metaKey) && this.$element.contains(e.target))\n return;\n this.lastEvent = null;\n if (this.timeout)\n clearTimeout(this.timeout);\n this.timeout = null;\n this.addMarker(null);\n if (this.isOpen) {\n this.$removeCloseEvents();\n this.getElement().style.display = \"none\";\n this.isOpen = false;\n popupManager.removePopup(this);\n }\n };\n HoverTooltip.prototype.$registerCloseEvents = function () {\n window.addEventListener(\"keydown\", this.hide, true);\n window.addEventListener(\"wheel\", this.hide, true);\n window.addEventListener(\"mousedown\", this.hide, true);\n };\n HoverTooltip.prototype.$removeCloseEvents = function () {\n window.removeEventListener(\"keydown\", this.hide, true);\n window.removeEventListener(\"wheel\", this.hide, true);\n window.removeEventListener(\"mousedown\", this.hide, true);\n };\n HoverTooltip.prototype.onMouseOut = function (e) {\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n this.lastEvent = null;\n if (!this.isOpen)\n return;\n if (!e.relatedTarget || this.getElement().contains(e.relatedTarget))\n return;\n if (e && e.currentTarget.contains(e.relatedTarget))\n return;\n if (!e.relatedTarget.classList.contains(\"ace_content\"))\n this.hide();\n };\n return HoverTooltip;\n}(Tooltip));\nexports.HoverTooltip = HoverTooltip;\n\n});\n\nace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/tooltip\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar Tooltip = require(\"../tooltip\").Tooltip;\nvar nls = require(\"../config\").nls;\nfunction GutterHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var gutter = editor.renderer.$gutterLayer;\n var tooltip = new GutterTooltip(editor);\n mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function (e) {\n if (!editor.isFocused() || e.getButton() != 0)\n return;\n var gutterRegion = gutter.getRegion(e);\n if (gutterRegion == \"foldWidgets\")\n return;\n var row = e.getDocumentPosition().row;\n var selection = editor.session.selection;\n if (e.getShiftKey())\n selection.selectTo(row, 0);\n else {\n if (e.domEvent.detail == 2) {\n editor.selectAll();\n return e.preventDefault();\n }\n mouseHandler.$clickSelection = editor.selection.getLineRange(row);\n }\n mouseHandler.setState(\"selectByLines\");\n mouseHandler.captureMouse(e);\n return e.preventDefault();\n });\n var tooltipTimeout, mouseEvent;\n function showTooltip() {\n var row = mouseEvent.getDocumentPosition().row;\n var maxRow = editor.session.getLength();\n if (row == maxRow) {\n var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;\n var pos = mouseEvent.$pos;\n if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column))\n return hideTooltip();\n }\n tooltip.showTooltip(row);\n if (!tooltip.isOpen)\n return;\n editor.on(\"mousewheel\", hideTooltip);\n if (mouseHandler.$tooltipFollowsMouse) {\n moveTooltip(mouseEvent);\n }\n else {\n var gutterRow = mouseEvent.getGutterRow();\n var gutterCell = gutter.$lines.get(gutterRow);\n if (gutterCell) {\n var gutterElement = gutterCell.element.querySelector(\".ace_gutter_annotation\");\n var rect = gutterElement.getBoundingClientRect();\n var style = tooltip.getElement().style;\n style.left = rect.right + \"px\";\n style.top = rect.bottom + \"px\";\n }\n else {\n moveTooltip(mouseEvent);\n }\n }\n }\n function hideTooltip() {\n if (tooltipTimeout)\n tooltipTimeout = clearTimeout(tooltipTimeout);\n if (tooltip.isOpen) {\n tooltip.hideTooltip();\n editor.off(\"mousewheel\", hideTooltip);\n }\n }\n function moveTooltip(e) {\n tooltip.setPosition(e.x, e.y);\n }\n mouseHandler.editor.setDefaultHandler(\"guttermousemove\", function (e) {\n var target = e.domEvent.target || e.domEvent.srcElement;\n if (dom.hasCssClass(target, \"ace_fold-widget\"))\n return hideTooltip();\n if (tooltip.isOpen && mouseHandler.$tooltipFollowsMouse)\n moveTooltip(e);\n mouseEvent = e;\n if (tooltipTimeout)\n return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n if (mouseEvent && !mouseHandler.isMousePressed)\n showTooltip();\n else\n hideTooltip();\n }, 50);\n });\n event.addListener(editor.renderer.$gutter, \"mouseout\", function (e) {\n mouseEvent = null;\n if (!tooltip.isOpen || tooltipTimeout)\n return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n hideTooltip();\n }, 50);\n }, editor);\n editor.on(\"changeSession\", hideTooltip);\n editor.on(\"input\", hideTooltip);\n}\nexports.GutterHandler = GutterHandler;\nvar GutterTooltip = /** @class */ (function (_super) {\n __extends(GutterTooltip, _super);\n function GutterTooltip(editor) {\n var _this = _super.call(this, editor.container) || this;\n _this.editor = editor;\n return _this;\n }\n GutterTooltip.prototype.setPosition = function (x, y) {\n var windowWidth = window.innerWidth || document.documentElement.clientWidth;\n var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n var width = this.getWidth();\n var height = this.getHeight();\n x += 15;\n y += 15;\n if (x + width > windowWidth) {\n x -= (x + width) - windowWidth;\n }\n if (y + height > windowHeight) {\n y -= 20 + height;\n }\n Tooltip.prototype.setPosition.call(this, x, y);\n };\n Object.defineProperty(GutterTooltip, \"annotationLabels\", {\n get: function () {\n return {\n error: { singular: nls(\"error\"), plural: nls(\"errors\") },\n warning: { singular: nls(\"warning\"), plural: nls(\"warnings\") },\n info: { singular: nls(\"information message\"), plural: nls(\"information messages\") }\n };\n },\n enumerable: false,\n configurable: true\n });\n GutterTooltip.prototype.showTooltip = function (row) {\n var gutter = this.editor.renderer.$gutterLayer;\n var annotationsInRow = gutter.$annotations[row];\n var annotation;\n if (annotationsInRow)\n annotation = { text: Array.from(annotationsInRow.text), type: Array.from(annotationsInRow.type) };\n else\n annotation = { text: [], type: [] };\n var fold = gutter.session.getFoldLine(row);\n if (fold && gutter.$showFoldedAnnotations) {\n var annotationsInFold = { error: [], warning: [], info: [] };\n var mostSevereAnnotationInFoldType;\n for (var i = row + 1; i <= fold.end.row; i++) {\n if (!gutter.$annotations[i])\n continue;\n for (var j = 0; j < gutter.$annotations[i].text.length; j++) {\n var annotationType = gutter.$annotations[i].type[j];\n annotationsInFold[annotationType].push(gutter.$annotations[i].text[j]);\n if (annotationType === \"error\") {\n mostSevereAnnotationInFoldType = \"error_fold\";\n continue;\n }\n if (annotationType === \"warning\") {\n mostSevereAnnotationInFoldType = \"warning_fold\";\n continue;\n }\n }\n }\n if (mostSevereAnnotationInFoldType === \"error_fold\" || mostSevereAnnotationInFoldType === \"warning_fold\") {\n var summaryFoldedAnnotations = \"\".concat(GutterTooltip.annotationsToSummaryString(annotationsInFold), \" in folded code.\");\n annotation.text.push(summaryFoldedAnnotations);\n annotation.type.push(mostSevereAnnotationInFoldType);\n }\n }\n if (annotation.text.length === 0)\n return this.hide();\n var annotationMessages = { error: [], warning: [], info: [] };\n var iconClassName = gutter.$useSvgGutterIcons ? \"ace_icon_svg\" : \"ace_icon\";\n for (var i = 0; i < annotation.text.length; i++) {\n var line = \"<span class='ace_\".concat(annotation.type[i], \" \").concat(iconClassName, \"' aria-label='\").concat(GutterTooltip.annotationLabels[annotation.type[i].replace(\"_fold\", \"\")].singular, \"' role=img> </span> \").concat(annotation.text[i]);\n annotationMessages[annotation.type[i].replace(\"_fold\", \"\")].push(line);\n }\n var tooltipContent = [].concat(annotationMessages.error, annotationMessages.warning, annotationMessages.info).join(\"<br>\");\n this.setHtml(tooltipContent);\n this.$element.setAttribute(\"aria-live\", \"polite\");\n if (!this.isOpen) {\n this.setTheme(this.editor.renderer.theme);\n this.setClassName(\"ace_gutter-tooltip\");\n }\n this.show();\n this.editor._signal(\"showGutterTooltip\", this);\n };\n GutterTooltip.prototype.hideTooltip = function () {\n this.$element.removeAttribute(\"aria-live\");\n this.hide();\n this.editor._signal(\"hideGutterTooltip\", this);\n };\n GutterTooltip.annotationsToSummaryString = function (annotations) {\n var e_1, _a;\n var summary = [];\n var annotationTypes = ['error', 'warning', 'info'];\n try {\n for (var annotationTypes_1 = __values(annotationTypes), annotationTypes_1_1 = annotationTypes_1.next(); !annotationTypes_1_1.done; annotationTypes_1_1 = annotationTypes_1.next()) {\n var annotationType = annotationTypes_1_1.value;\n if (!annotations[annotationType].length)\n continue;\n var label = annotations[annotationType].length === 1 ? GutterTooltip.annotationLabels[annotationType].singular : GutterTooltip.annotationLabels[annotationType].plural;\n summary.push(\"\".concat(annotations[annotationType].length, \" \").concat(label));\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (annotationTypes_1_1 && !annotationTypes_1_1.done && (_a = annotationTypes_1.return)) _a.call(annotationTypes_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return summary.join(\", \");\n };\n return GutterTooltip;\n}(Tooltip));\nexports.GutterTooltip = GutterTooltip;\n\n});\n\nace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar MouseEvent = /** @class */ (function () {\n function MouseEvent(domEvent, editor) { this.speed; this.wheelX; this.wheelY;\n this.domEvent = domEvent;\n this.editor = editor;\n this.x = this.clientX = domEvent.clientX;\n this.y = this.clientY = domEvent.clientY;\n this.$pos = null;\n this.$inSelection = null;\n this.propagationStopped = false;\n this.defaultPrevented = false;\n }\n MouseEvent.prototype.stopPropagation = function () {\n event.stopPropagation(this.domEvent);\n this.propagationStopped = true;\n };\n MouseEvent.prototype.preventDefault = function () {\n event.preventDefault(this.domEvent);\n this.defaultPrevented = true;\n };\n MouseEvent.prototype.stop = function () {\n this.stopPropagation();\n this.preventDefault();\n };\n MouseEvent.prototype.getDocumentPosition = function () {\n if (this.$pos)\n return this.$pos;\n this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\n return this.$pos;\n };\n MouseEvent.prototype.getGutterRow = function () {\n var documentRow = this.getDocumentPosition().row;\n var screenRow = this.editor.session.documentToScreenRow(documentRow, 0);\n var screenTopRow = this.editor.session.documentToScreenRow(this.editor.renderer.$gutterLayer.$lines.get(0).row, 0);\n return screenRow - screenTopRow;\n };\n MouseEvent.prototype.inSelection = function () {\n if (this.$inSelection !== null)\n return this.$inSelection;\n var editor = this.editor;\n var selectionRange = editor.getSelectionRange();\n if (selectionRange.isEmpty())\n this.$inSelection = false;\n else {\n var pos = this.getDocumentPosition();\n this.$inSelection = selectionRange.contains(pos.row, pos.column);\n }\n return this.$inSelection;\n };\n MouseEvent.prototype.getButton = function () {\n return event.getButton(this.domEvent);\n };\n MouseEvent.prototype.getShiftKey = function () {\n return this.domEvent.shiftKey;\n };\n MouseEvent.prototype.getAccelKey = function () {\n return useragent.isMac ? this.domEvent.metaKey : this.domEvent.ctrlKey;\n };\n return MouseEvent;\n}());\nexports.MouseEvent = MouseEvent;\n\n});\n\nace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar AUTOSCROLL_DELAY = 200;\nvar SCROLL_CURSOR_DELAY = 200;\nvar SCROLL_CURSOR_HYSTERESIS = 5;\nfunction DragdropHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var dragImage = dom.createElement(\"div\");\n dragImage.style.cssText = \"top:-100px;position:absolute;z-index:2147483647;opacity:0.5\";\n dragImage.textContent = \"\\xa0\";\n var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n exports.forEach(function (x) {\n mouseHandler[x] = this[x];\n }, this);\n editor.on(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n var mouseTarget = editor.container;\n var dragSelectionMarker, x, y;\n var timerId, range;\n var dragCursor, counter = 0;\n var dragOperation;\n var isInternal;\n var autoScrollStartTime;\n var cursorMovedTime;\n var cursorPointOnCaretMoved;\n this.onDragStart = function (e) {\n if (this.cancelDrag || !mouseTarget.draggable) {\n var self = this;\n setTimeout(function () {\n self.startSelect();\n self.captureMouse(e);\n }, 0);\n return e.preventDefault();\n }\n range = editor.getSelectionRange();\n var dataTransfer = e.dataTransfer;\n dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n editor.container.appendChild(dragImage);\n dataTransfer.setDragImage && dataTransfer.setDragImage(dragImage, 0, 0);\n setTimeout(function () {\n editor.container.removeChild(dragImage);\n });\n dataTransfer.clearData();\n dataTransfer.setData(\"Text\", editor.session.getTextRange());\n isInternal = true;\n this.setState(\"drag\");\n };\n this.onDragEnd = function (e) {\n mouseTarget.draggable = false;\n isInternal = false;\n this.setState(null);\n if (!editor.getReadOnly()) {\n var dropEffect = e.dataTransfer.dropEffect;\n if (!dragOperation && dropEffect == \"move\")\n editor.session.remove(editor.getSelectionRange());\n editor.$resetCursorStyle();\n }\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n };\n this.onDragEnter = function (e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker)\n addDragMarker();\n counter++;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n this.onDragOver = function (e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker) {\n addDragMarker();\n counter++;\n }\n if (onMouseMoveTimer !== null)\n onMouseMoveTimer = null;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n this.onDragLeave = function (e) {\n counter--;\n if (counter <= 0 && dragSelectionMarker) {\n clearDragMarker();\n dragOperation = null;\n return event.preventDefault(e);\n }\n };\n this.onDrop = function (e) {\n if (!dragCursor)\n return;\n var dataTransfer = e.dataTransfer;\n if (isInternal) {\n switch (dragOperation) {\n case \"move\":\n if (range.contains(dragCursor.row, dragCursor.column)) {\n range = {\n start: dragCursor,\n end: dragCursor\n };\n }\n else {\n range = editor.moveText(range, dragCursor);\n }\n break;\n case \"copy\":\n range = editor.moveText(range, dragCursor, true);\n break;\n }\n }\n else {\n var dropData = dataTransfer.getData('Text');\n range = {\n start: dragCursor,\n end: editor.session.insert(dragCursor, dropData)\n };\n editor.focus();\n dragOperation = null;\n }\n clearDragMarker();\n return event.preventDefault(e);\n };\n event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler), editor);\n function scrollCursorIntoView(cursor, prevCursor) {\n var now = Date.now();\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n var hMovement = !prevCursor || cursor.column != prevCursor.column;\n if (!cursorMovedTime || vMovement || hMovement) {\n editor.moveCursorToPosition(cursor);\n cursorMovedTime = now;\n cursorPointOnCaretMoved = { x: x, y: y };\n }\n else {\n var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n if (distance > SCROLL_CURSOR_HYSTERESIS) {\n cursorMovedTime = null;\n }\n else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n editor.renderer.scrollCursorIntoView();\n cursorMovedTime = null;\n }\n }\n }\n function autoScroll(cursor, prevCursor) {\n var now = Date.now();\n var lineHeight = editor.renderer.layerConfig.lineHeight;\n var characterWidth = editor.renderer.layerConfig.characterWidth;\n var editorRect = editor.renderer.scroller.getBoundingClientRect();\n var offsets = {\n x: {\n left: x - editorRect.left,\n right: editorRect.right - x\n },\n y: {\n top: y - editorRect.top,\n bottom: editorRect.bottom - y\n }\n };\n var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\n var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\n var scrollCursor = { row: cursor.row, column: cursor.column };\n if (nearestXOffset / characterWidth <= 2) {\n scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);\n }\n if (nearestYOffset / lineHeight <= 1) {\n scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);\n }\n var vScroll = cursor.row != scrollCursor.row;\n var hScroll = cursor.column != scrollCursor.column;\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n if (vScroll || (hScroll && !vMovement)) {\n if (!autoScrollStartTime)\n autoScrollStartTime = now;\n else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)\n editor.renderer.scrollCursorIntoView(scrollCursor);\n }\n else {\n autoScrollStartTime = null;\n }\n }\n function onDragInterval() {\n var prevCursor = dragCursor;\n dragCursor = editor.renderer.screenToTextCoordinates(x, y);\n scrollCursorIntoView(dragCursor, prevCursor);\n autoScroll(dragCursor, prevCursor);\n }\n function addDragMarker() {\n range = editor.selection.toOrientedRange();\n dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\n editor.clearSelection();\n if (editor.isFocused())\n editor.renderer.$cursorLayer.setBlinking(false);\n clearInterval(timerId);\n onDragInterval();\n timerId = setInterval(onDragInterval, 20);\n counter = 0;\n event.addListener(document, \"mousemove\", onMouseMove);\n }\n function clearDragMarker() {\n clearInterval(timerId);\n editor.session.removeMarker(dragSelectionMarker);\n dragSelectionMarker = null;\n editor.selection.fromOrientedRange(range);\n if (editor.isFocused() && !isInternal)\n editor.$resetCursorStyle();\n range = null;\n dragCursor = null;\n counter = 0;\n autoScrollStartTime = null;\n cursorMovedTime = null;\n event.removeListener(document, \"mousemove\", onMouseMove);\n }\n var onMouseMoveTimer = null;\n function onMouseMove() {\n if (onMouseMoveTimer == null) {\n onMouseMoveTimer = setTimeout(function () {\n if (onMouseMoveTimer != null && dragSelectionMarker)\n clearDragMarker();\n }, 20);\n }\n }\n function canAccept(dataTransfer) {\n var types = dataTransfer.types;\n return !types || Array.prototype.some.call(types, function (type) {\n return type == 'text/plain' || type == 'Text';\n });\n }\n function getDropEffect(e) {\n var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\n var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n var effectAllowed = \"uninitialized\";\n try {\n effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n }\n catch (e) { }\n var dropEffect = \"none\";\n if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n else if (moveAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"move\";\n else if (copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n return dropEffect;\n }\n}\n(function () {\n this.dragWait = function () {\n var interval = Date.now() - this.mousedownEvent.time;\n if (interval > this.editor.getDragDelay())\n this.startDrag();\n };\n this.dragWaitEnd = function () {\n var target = this.editor.container;\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n this.selectEnd();\n };\n this.dragReadyEnd = function (e) {\n this.editor.$resetCursorStyle();\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n this.dragWaitEnd();\n };\n this.startDrag = function () {\n this.cancelDrag = false;\n var editor = this.editor;\n var target = editor.container;\n target.draggable = true;\n editor.renderer.$cursorLayer.setBlinking(false);\n editor.setStyle(\"ace_dragging\");\n var cursorStyle = useragent.isWin ? \"default\" : \"move\";\n editor.renderer.setCursorStyle(cursorStyle);\n this.setState(\"dragReady\");\n };\n this.onMouseDrag = function (e) {\n var target = this.editor.container;\n if (useragent.isIE && this.state == \"dragReady\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 3)\n target.dragDrop();\n }\n if (this.state === \"dragWait\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 0) {\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n }\n }\n };\n this.onMouseDown = function (e) {\n if (!this.$dragEnabled)\n return;\n this.mousedownEvent = e;\n var editor = this.editor;\n var inSelection = e.inSelection();\n var button = e.getButton();\n var clickCount = e.domEvent.detail || 1;\n if (clickCount === 1 && button === 0 && inSelection) {\n if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()))\n return;\n this.mousedownEvent.time = Date.now();\n var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n if (\"unselectable\" in eventTarget)\n eventTarget.unselectable = \"on\";\n if (editor.getDragDelay()) {\n if (useragent.isWebKit) {\n this.cancelDrag = true;\n var mouseTarget = editor.container;\n mouseTarget.draggable = true;\n }\n this.setState(\"dragWait\");\n }\n else {\n this.startDrag();\n }\n this.captureMouse(e, this.onMouseDrag.bind(this));\n e.defaultPrevented = true;\n }\n };\n}).call(DragdropHandler.prototype);\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\nexports.DragdropHandler = DragdropHandler;\n\n});\n\nace.define(\"ace/mouse/touch_handler\",[\"require\",\"exports\",\"module\",\"ace/mouse/mouse_event\",\"ace/lib/event\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar event = require(\"../lib/event\");\nvar dom = require(\"../lib/dom\");\nexports.addTouchListeners = function (el, editor) {\n var mode = \"scroll\";\n var startX;\n var startY;\n var touchStartT;\n var lastT;\n var longTouchTimer;\n var animationTimer;\n var animationSteps = 0;\n var pos;\n var clickCount = 0;\n var vX = 0;\n var vY = 0;\n var pressed;\n var contextMenu;\n function createContextMenu() {\n var clipboard = window.navigator && window.navigator.clipboard;\n var isOpen = false;\n var updateMenu = function () {\n var selected = editor.getCopyText();\n var hasUndo = editor.session.getUndoManager().hasUndo();\n contextMenu.replaceChild(dom.buildDom(isOpen ? [\"span\",\n !selected && [\"span\", { class: \"ace_mobile-button\", action: \"selectall\" }, \"Select All\"],\n selected && [\"span\", { class: \"ace_mobile-button\", action: \"copy\" }, \"Copy\"],\n selected && [\"span\", { class: \"ace_mobile-button\", action: \"cut\" }, \"Cut\"],\n clipboard && [\"span\", { class: \"ace_mobile-button\", action: \"paste\" }, \"Paste\"],\n hasUndo && [\"span\", { class: \"ace_mobile-button\", action: \"undo\" }, \"Undo\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"find\" }, \"Find\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"openCommandPalette\" }, \"Palette\"]\n ] : [\"span\"]), contextMenu.firstChild);\n };\n var handleClick = function (e) {\n var action = e.target.getAttribute(\"action\");\n if (action == \"more\" || !isOpen) {\n isOpen = !isOpen;\n return updateMenu();\n }\n if (action == \"paste\") {\n clipboard.readText().then(function (text) {\n editor.execCommand(action, text);\n });\n }\n else if (action) {\n if (action == \"cut\" || action == \"copy\") {\n if (clipboard)\n clipboard.writeText(editor.getCopyText());\n else\n document.execCommand(\"copy\");\n }\n editor.execCommand(action);\n }\n contextMenu.firstChild.style.display = \"none\";\n isOpen = false;\n if (action != \"openCommandPalette\")\n editor.focus();\n };\n contextMenu = dom.buildDom([\"div\",\n {\n class: \"ace_mobile-menu\",\n ontouchstart: function (e) {\n mode = \"menu\";\n e.stopPropagation();\n e.preventDefault();\n editor.textInput.focus();\n },\n ontouchend: function (e) {\n e.stopPropagation();\n e.preventDefault();\n handleClick(e);\n },\n onclick: handleClick\n },\n [\"span\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"more\" }, \"...\"]\n ], editor.container);\n }\n function showContextMenu() {\n if (!contextMenu)\n createContextMenu();\n var cursor = editor.selection.cursor;\n var pagePos = editor.renderer.textToScreenCoordinates(cursor.row, cursor.column);\n var leftOffset = editor.renderer.textToScreenCoordinates(0, 0).pageX;\n var scrollLeft = editor.renderer.scrollLeft;\n var rect = editor.container.getBoundingClientRect();\n contextMenu.style.top = pagePos.pageY - rect.top - 3 + \"px\";\n if (pagePos.pageX - rect.left < rect.width - 70) {\n contextMenu.style.left = \"\";\n contextMenu.style.right = \"10px\";\n }\n else {\n contextMenu.style.right = \"\";\n contextMenu.style.left = leftOffset + scrollLeft - rect.left + \"px\";\n }\n contextMenu.style.display = \"\";\n contextMenu.firstChild.style.display = \"none\";\n editor.on(\"input\", hideContextMenu);\n }\n function hideContextMenu(e) {\n if (contextMenu)\n contextMenu.style.display = \"none\";\n editor.off(\"input\", hideContextMenu);\n }\n function handleLongTap() {\n longTouchTimer = null;\n clearTimeout(longTouchTimer);\n var range = editor.selection.getRange();\n var inSelection = range.contains(pos.row, pos.column);\n if (range.isEmpty() || !inSelection) {\n editor.selection.moveToPosition(pos);\n editor.selection.selectWord();\n }\n mode = \"wait\";\n showContextMenu();\n }\n function switchToSelectionMode() {\n longTouchTimer = null;\n clearTimeout(longTouchTimer);\n editor.selection.moveToPosition(pos);\n var range = clickCount >= 2\n ? editor.selection.getLineRange(pos.row)\n : editor.session.getBracketRange(pos);\n if (range && !range.isEmpty()) {\n editor.selection.setRange(range);\n }\n else {\n editor.selection.selectWord();\n }\n mode = \"wait\";\n }\n event.addListener(el, \"contextmenu\", function (e) {\n if (!pressed)\n return;\n var textarea = editor.textInput.getElement();\n textarea.focus();\n }, editor);\n event.addListener(el, \"touchstart\", function (e) {\n var touches = e.touches;\n if (longTouchTimer || touches.length > 1) {\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n touchStartT = -1;\n mode = \"zoom\";\n return;\n }\n pressed = editor.$mouseHandler.isMousePressed = true;\n var h = editor.renderer.layerConfig.lineHeight;\n var w = editor.renderer.layerConfig.lineHeight;\n var t = e.timeStamp;\n lastT = t;\n var touchObj = touches[0];\n var x = touchObj.clientX;\n var y = touchObj.clientY;\n if (Math.abs(startX - x) + Math.abs(startY - y) > h)\n touchStartT = -1;\n startX = e.clientX = x;\n startY = e.clientY = y;\n vX = vY = 0;\n var ev = new MouseEvent(e, editor);\n pos = ev.getDocumentPosition();\n if (t - touchStartT < 500 && touches.length == 1 && !animationSteps) {\n clickCount++;\n e.preventDefault();\n e.button = 0;\n switchToSelectionMode();\n }\n else {\n clickCount = 0;\n var cursor = editor.selection.cursor;\n var anchor = editor.selection.isEmpty() ? cursor : editor.selection.anchor;\n var cursorPos = editor.renderer.$cursorLayer.getPixelPosition(cursor, true);\n var anchorPos = editor.renderer.$cursorLayer.getPixelPosition(anchor, true);\n var rect = editor.renderer.scroller.getBoundingClientRect();\n var offsetTop = editor.renderer.layerConfig.offset;\n var offsetLeft = editor.renderer.scrollLeft;\n var weightedDistance = function (x, y) {\n x = x / w;\n y = y / h - 0.75;\n return x * x + y * y;\n };\n if (e.clientX < rect.left) {\n mode = \"zoom\";\n return;\n }\n var diff1 = weightedDistance(e.clientX - rect.left - cursorPos.left + offsetLeft, e.clientY - rect.top - cursorPos.top + offsetTop);\n var diff2 = weightedDistance(e.clientX - rect.left - anchorPos.left + offsetLeft, e.clientY - rect.top - anchorPos.top + offsetTop);\n if (diff1 < 3.5 && diff2 < 3.5)\n mode = diff1 > diff2 ? \"cursor\" : \"anchor\";\n if (diff2 < 3.5)\n mode = \"anchor\";\n else if (diff1 < 3.5)\n mode = \"cursor\";\n else\n mode = \"scroll\";\n longTouchTimer = setTimeout(handleLongTap, 450);\n }\n touchStartT = t;\n }, editor);\n event.addListener(el, \"touchend\", function (e) {\n pressed = editor.$mouseHandler.isMousePressed = false;\n if (animationTimer)\n clearInterval(animationTimer);\n if (mode == \"zoom\") {\n mode = \"\";\n animationSteps = 0;\n }\n else if (longTouchTimer) {\n editor.selection.moveToPosition(pos);\n animationSteps = 0;\n showContextMenu();\n }\n else if (mode == \"scroll\") {\n animate();\n hideContextMenu();\n }\n else {\n showContextMenu();\n }\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n }, editor);\n event.addListener(el, \"touchmove\", function (e) {\n if (longTouchTimer) {\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n }\n var touches = e.touches;\n if (touches.length > 1 || mode == \"zoom\")\n return;\n var touchObj = touches[0];\n var wheelX = startX - touchObj.clientX;\n var wheelY = startY - touchObj.clientY;\n if (mode == \"wait\") {\n if (wheelX * wheelX + wheelY * wheelY > 4)\n mode = \"cursor\";\n else\n return e.preventDefault();\n }\n startX = touchObj.clientX;\n startY = touchObj.clientY;\n e.clientX = touchObj.clientX;\n e.clientY = touchObj.clientY;\n var t = e.timeStamp;\n var dt = t - lastT;\n lastT = t;\n if (mode == \"scroll\") {\n var mouseEvent = new MouseEvent(e, editor);\n mouseEvent.speed = 1;\n mouseEvent.wheelX = wheelX;\n mouseEvent.wheelY = wheelY;\n if (10 * Math.abs(wheelX) < Math.abs(wheelY))\n wheelX = 0;\n if (10 * Math.abs(wheelY) < Math.abs(wheelX))\n wheelY = 0;\n if (dt != 0) {\n vX = wheelX / dt;\n vY = wheelY / dt;\n }\n editor._emit(\"mousewheel\", mouseEvent);\n if (!mouseEvent.propagationStopped) {\n vX = vY = 0;\n }\n }\n else {\n var ev = new MouseEvent(e, editor);\n var pos = ev.getDocumentPosition();\n if (mode == \"cursor\")\n editor.selection.moveCursorToPosition(pos);\n else if (mode == \"anchor\")\n editor.selection.setSelectionAnchor(pos.row, pos.column);\n editor.renderer.scrollCursorIntoView(pos);\n e.preventDefault();\n }\n }, editor);\n function animate() {\n animationSteps += 60;\n animationTimer = setInterval(function () {\n if (animationSteps-- <= 0) {\n clearInterval(animationTimer);\n animationTimer = null;\n }\n if (Math.abs(vX) < 0.01)\n vX = 0;\n if (Math.abs(vY) < 0.01)\n vY = 0;\n if (animationSteps < 20)\n vX = 0.9 * vX;\n if (animationSteps < 20)\n vY = 0.9 * vY;\n var oldScrollTop = editor.session.getScrollTop();\n editor.renderer.scrollBy(10 * vX, 10 * vY);\n if (oldScrollTop == editor.session.getScrollTop())\n animationSteps = 0;\n }, 10);\n }\n};\n\n});\n\nace.define(\"ace/mouse/mouse_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/mouse/default_handlers\",\"ace/mouse/default_gutter_handler\",\"ace/mouse/mouse_event\",\"ace/mouse/dragdrop_handler\",\"ace/mouse/touch_handler\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar DefaultHandlers = require(\"./default_handlers\").DefaultHandlers;\nvar DefaultGutterHandler = require(\"./default_gutter_handler\").GutterHandler;\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar DragdropHandler = require(\"./dragdrop_handler\").DragdropHandler;\nvar addTouchListeners = require(\"./touch_handler\").addTouchListeners;\nvar config = require(\"../config\");\nvar MouseHandler = /** @class */ (function () {\n function MouseHandler(editor) { this.$dragDelay; this.$dragEnabled; this.$mouseMoved; this.mouseEvent; this.$focusTimeout;\n var _self = this;\n this.editor = editor;\n new DefaultHandlers(this);\n new DefaultGutterHandler(this);\n new DragdropHandler(this);\n var focusEditor = function (e) {\n var windowBlurred = !document.hasFocus || !document.hasFocus()\n || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement());\n if (windowBlurred)\n window.focus();\n editor.focus();\n setTimeout(function () {\n if (!editor.isFocused())\n editor.focus();\n });\n };\n var mouseTarget = editor.renderer.getMouseEventTarget();\n event.addListener(mouseTarget, \"click\", this.onMouseEvent.bind(this, \"click\"), editor);\n event.addListener(mouseTarget, \"mousemove\", this.onMouseMove.bind(this, \"mousemove\"), editor);\n event.addMultiMouseDownListener([\n mouseTarget,\n editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner,\n editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner,\n editor.textInput && editor.textInput.getElement()\n ].filter(Boolean), [400, 300, 250], this, \"onMouseEvent\", editor);\n event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, \"mousewheel\"), editor);\n addTouchListeners(editor.container, editor);\n var gutterEl = editor.renderer.$gutter;\n event.addListener(gutterEl, \"mousedown\", this.onMouseEvent.bind(this, \"guttermousedown\"), editor);\n event.addListener(gutterEl, \"click\", this.onMouseEvent.bind(this, \"gutterclick\"), editor);\n event.addListener(gutterEl, \"dblclick\", this.onMouseEvent.bind(this, \"gutterdblclick\"), editor);\n event.addListener(gutterEl, \"mousemove\", this.onMouseEvent.bind(this, \"guttermousemove\"), editor);\n event.addListener(mouseTarget, \"mousedown\", focusEditor, editor);\n event.addListener(gutterEl, \"mousedown\", focusEditor, editor);\n if (useragent.isIE && editor.renderer.scrollBarV) {\n event.addListener(editor.renderer.scrollBarV.element, \"mousedown\", focusEditor, editor);\n event.addListener(editor.renderer.scrollBarH.element, \"mousedown\", focusEditor, editor);\n }\n editor.on(\"mousemove\", function (e) {\n if (_self.state || _self.$dragDelay || !_self.$dragEnabled)\n return;\n var character = editor.renderer.screenToTextCoordinates(e.x, e.y);\n var range = editor.session.selection.getRange();\n var renderer = editor.renderer;\n if (!range.isEmpty() && range.insideStart(character.row, character.column)) {\n renderer.setCursorStyle(\"default\");\n }\n else {\n renderer.setCursorStyle(\"\");\n }\n }, //@ts-expect-error TODO: seems mistyping - should be boolean\n editor);\n }\n MouseHandler.prototype.onMouseEvent = function (name, e) {\n if (!this.editor.session)\n return;\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n MouseHandler.prototype.onMouseMove = function (name, e) {\n var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;\n if (!listeners || !listeners.length)\n return;\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n MouseHandler.prototype.onMouseWheel = function (name, e) {\n var mouseEvent = new MouseEvent(e, this.editor);\n mouseEvent.speed = this.$scrollSpeed * 2;\n mouseEvent.wheelX = e.wheelX;\n mouseEvent.wheelY = e.wheelY;\n this.editor._emit(name, mouseEvent);\n };\n MouseHandler.prototype.setState = function (state) {\n this.state = state;\n };\n MouseHandler.prototype.captureMouse = function (ev, mouseMoveHandler) {\n this.x = ev.x;\n this.y = ev.y;\n this.isMousePressed = true;\n var editor = this.editor;\n var renderer = this.editor.renderer;\n renderer.$isMousePressed = true;\n var self = this;\n var onMouseMove = function (e) {\n if (!e)\n return;\n if (useragent.isWebKit && !e.which && self.releaseMouse)\n return self.releaseMouse();\n self.x = e.clientX;\n self.y = e.clientY;\n mouseMoveHandler && mouseMoveHandler(e);\n self.mouseEvent = new MouseEvent(e, self.editor);\n self.$mouseMoved = true;\n };\n var onCaptureEnd = function (e) {\n editor.off(\"beforeEndOperation\", onOperationEnd);\n clearInterval(timerId);\n if (editor.session)\n onCaptureInterval();\n self[self.state + \"End\"] && self[self.state + \"End\"](e);\n self.state = \"\";\n self.isMousePressed = renderer.$isMousePressed = false;\n if (renderer.$keepTextAreaAtCursor)\n renderer.$moveTextAreaToCursor();\n self.$onCaptureMouseMove = self.releaseMouse = null;\n e && self.onMouseEvent(\"mouseup\", e);\n editor.endOperation();\n };\n var onCaptureInterval = function () {\n self[self.state] && self[self.state]();\n self.$mouseMoved = false;\n };\n if (useragent.isOldIE && ev.domEvent.type == \"dblclick\") {\n return setTimeout(function () { onCaptureEnd(ev); });\n }\n var onOperationEnd = function (e) {\n if (!self.releaseMouse)\n return;\n if (editor.curOp.command.name && editor.curOp.selectionChanged) {\n self[self.state + \"End\"] && self[self.state + \"End\"]();\n self.state = \"\";\n self.releaseMouse();\n }\n };\n editor.on(\"beforeEndOperation\", onOperationEnd);\n editor.startOperation({ command: { name: \"mouse\" } });\n self.$onCaptureMouseMove = onMouseMove;\n self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd);\n var timerId = setInterval(onCaptureInterval, 20);\n };\n MouseHandler.prototype.cancelContextMenu = function () {\n var stop = function (e) {\n if (e && e.domEvent && e.domEvent.type != \"contextmenu\")\n return;\n this.editor.off(\"nativecontextmenu\", stop);\n if (e && e.domEvent)\n event.stopEvent(e.domEvent);\n }.bind(this);\n setTimeout(stop, 10);\n this.editor.on(\"nativecontextmenu\", stop);\n };\n MouseHandler.prototype.destroy = function () {\n if (this.releaseMouse)\n this.releaseMouse();\n };\n return MouseHandler;\n}());\nMouseHandler.prototype.releaseMouse = null;\nconfig.defineOptions(MouseHandler.prototype, \"mouseHandler\", {\n scrollSpeed: { initialValue: 2 },\n dragDelay: { initialValue: (useragent.isMac ? 150 : 0) },\n dragEnabled: { initialValue: true },\n focusTimeout: { initialValue: 0 },\n tooltipFollowsMouse: { initialValue: true }\n});\nexports.MouseHandler = MouseHandler;\n\n});\n\nace.define(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar FoldHandler = /** @class */ (function () {\n function FoldHandler(editor) {\n editor.on(\"click\", function (e) {\n var position = e.getDocumentPosition();\n var session = editor.session;\n var fold = session.getFoldAt(position.row, position.column, 1);\n if (fold) {\n if (e.getAccelKey())\n session.removeFold(fold);\n else\n session.expandFold(fold);\n e.stop();\n }\n var target = e.domEvent && e.domEvent.target;\n if (target && dom.hasCssClass(target, \"ace_inline_button\")) {\n if (dom.hasCssClass(target, \"ace_toggle_wrap\")) {\n session.setOption(\"wrap\", !session.getUseWrapMode());\n editor.renderer.scrollCursorIntoView();\n }\n }\n });\n editor.on(\"gutterclick\", function (e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n if (session.foldWidgets && session.foldWidgets[row])\n editor.session.onFoldWidgetClick(row, e);\n if (!editor.isFocused())\n editor.focus();\n e.stop();\n }\n });\n editor.on(\"gutterdblclick\", function (e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n var data = session.getParentFoldRangeData(row, true);\n var range = data.range || data.firstRange;\n if (range) {\n row = range.start.row;\n var fold = session.getFoldAt(row, session.getLine(row).length, 1);\n if (fold) {\n session.removeFold(fold);\n }\n else {\n session.addFold(\"...\", range);\n editor.renderer.scrollCursorIntoView({ row: range.start.row, column: 0 });\n }\n }\n e.stop();\n }\n });\n }\n return FoldHandler;\n}());\nexports.FoldHandler = FoldHandler;\n\n});\n\nace.define(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"], function(require, exports, module){\"use strict\";\nvar keyUtil = require(\"../lib/keys\");\nvar event = require(\"../lib/event\");\nvar KeyBinding = /** @class */ (function () {\n function KeyBinding(editor) {\n this.$editor = editor;\n this.$data = { editor: editor };\n this.$handlers = [];\n this.setDefaultHandler(editor.commands);\n }\n KeyBinding.prototype.setDefaultHandler = function (kb) {\n this.removeKeyboardHandler(this.$defaultHandler);\n this.$defaultHandler = kb;\n this.addKeyboardHandler(kb, 0);\n };\n KeyBinding.prototype.setKeyboardHandler = function (kb) {\n var h = this.$handlers;\n if (h[h.length - 1] == kb)\n return;\n while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler)\n this.removeKeyboardHandler(h[h.length - 1]);\n this.addKeyboardHandler(kb, 1);\n };\n KeyBinding.prototype.addKeyboardHandler = function (kb, pos) {\n if (!kb)\n return;\n if (typeof kb == \"function\" && !kb.handleKeyboard)\n kb.handleKeyboard = kb;\n var i = this.$handlers.indexOf(kb);\n if (i != -1)\n this.$handlers.splice(i, 1);\n if (pos == undefined)\n this.$handlers.push(kb);\n else\n this.$handlers.splice(pos, 0, kb);\n if (i == -1 && kb.attach)\n kb.attach(this.$editor);\n };\n KeyBinding.prototype.removeKeyboardHandler = function (kb) {\n var i = this.$handlers.indexOf(kb);\n if (i == -1)\n return false;\n this.$handlers.splice(i, 1);\n kb.detach && kb.detach(this.$editor);\n return true;\n };\n KeyBinding.prototype.getKeyboardHandler = function () {\n return this.$handlers[this.$handlers.length - 1];\n };\n KeyBinding.prototype.getStatusText = function () {\n var data = this.$data;\n var editor = data.editor;\n return this.$handlers.map(function (h) {\n return h.getStatusText && h.getStatusText(editor, data) || \"\";\n }).filter(Boolean).join(\" \");\n };\n KeyBinding.prototype.$callKeyboardHandlers = function (hashId, keyString, keyCode, e) {\n var toExecute;\n var success = false;\n var commands = this.$editor.commands;\n for (var i = this.$handlers.length; i--;) {\n toExecute = this.$handlers[i].handleKeyboard(\n this.$data, hashId, keyString, keyCode, e);\n if (!toExecute || !toExecute.command)\n continue;\n if (toExecute.command == \"null\") {\n success = true;\n }\n else {\n success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);\n }\n if (success && e && hashId != -1 &&\n toExecute[\"passEvent\"] != true && toExecute.command[\"passEvent\"] != true) {\n event.stopEvent(e);\n }\n if (success)\n break;\n }\n if (!success && hashId == -1) {\n toExecute = { command: \"insertstring\" };\n success = commands.exec(\"insertstring\", this.$editor, keyString);\n }\n if (success && this.$editor._signal)\n this.$editor._signal(\"keyboardActivity\", toExecute);\n return success;\n };\n KeyBinding.prototype.onCommandKey = function (e, hashId, keyCode) {\n var keyString = keyUtil.keyCodeToString(keyCode);\n return this.$callKeyboardHandlers(hashId, keyString, keyCode, e);\n };\n KeyBinding.prototype.onTextInput = function (text) {\n return this.$callKeyboardHandlers(-1, text);\n };\n return KeyBinding;\n}());\nexports.KeyBinding = KeyBinding;\n\n});\n\nace.define(\"ace/lib/bidiutil\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar ArabicAlefBetIntervalsBegine = ['\\u0621', '\\u0641'];\nvar ArabicAlefBetIntervalsEnd = ['\\u063A', '\\u064a'];\nvar dir = 0, hiLevel = 0;\nvar lastArabic = false, hasUBAT_AL = false, hasUBAT_B = false, hasUBAT_S = false, hasBlockSep = false, hasSegSep = false;\nvar impTab_LTR = [ [0, 3, 0, 1, 0, 0, 0], [0, 3, 0, 1, 2, 2, 0], [0, 3, 0, 0x11, 2, 0, 1], [0, 3, 5, 5, 4, 1, 0], [0, 3, 0x15, 0x15, 4, 0, 1], [0, 3, 5, 5, 4, 2, 0]\n];\nvar impTab_RTL = [ [2, 0, 1, 1, 0, 1, 0], [2, 0, 1, 1, 0, 2, 0], [2, 0, 2, 1, 3, 2, 0], [2, 0, 2, 0x21, 3, 1, 1]\n];\nvar LTR = 0, RTL = 1;\nvar L = 0;\nvar R = 1;\nvar EN = 2;\nvar AN = 3;\nvar ON = 4;\nvar B = 5;\nvar S = 6;\nvar AL = 7;\nvar WS = 8;\nvar CS = 9;\nvar ES = 10;\nvar ET = 11;\nvar NSM = 12;\nvar LRE = 13;\nvar RLE = 14;\nvar PDF = 15;\nvar LRO = 16;\nvar RLO = 17;\nvar BN = 18;\nvar UnicodeTBL00 = [\n BN, BN, BN, BN, BN, BN, BN, BN, BN, S, B, S, WS, B, BN, BN,\n BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, B, B, B, S,\n WS, ON, ON, ET, ET, ET, ON, ON, ON, ON, ON, ES, CS, ES, CS, CS,\n EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, CS, ON, ON, ON, ON, ON,\n ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,\n L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, ON,\n ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,\n L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, BN,\n BN, BN, BN, BN, BN, B, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,\n BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,\n CS, ON, ET, ET, ET, ET, ON, ON, ON, ON, L, ON, ON, BN, ON, ON,\n ET, ET, EN, EN, ON, L, ON, ON, ON, EN, L, ON, ON, ON, ON, ON\n];\nvar UnicodeTBL20 = [\n WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, BN, BN, BN, L, R,\n ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n ON, ON, ON, ON, ON, ON, ON, ON, WS, B, LRE, RLE, PDF, LRO, RLO, CS,\n ET, ET, ET, ET, ET, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n ON, ON, ON, ON, CS, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, WS\n];\nfunction _computeLevels(chars, levels, len, charTypes) {\n var impTab = dir ? impTab_RTL : impTab_LTR, prevState = null, newClass = null, newLevel = null, newState = 0, action = null, cond = null, condPos = -1, i = null, ix = null, classes = [];\n if (!charTypes) {\n for (i = 0, charTypes = []; i < len; i++) {\n charTypes[i] = _getCharacterType(chars[i]);\n }\n }\n hiLevel = dir;\n lastArabic = false;\n hasUBAT_AL = false;\n hasUBAT_B = false;\n hasUBAT_S = false;\n for (ix = 0; ix < len; ix++) {\n prevState = newState;\n classes[ix] = newClass = _getCharClass(chars, charTypes, classes, ix);\n newState = impTab[prevState][newClass];\n action = newState & 0xF0;\n newState &= 0x0F;\n levels[ix] = newLevel = impTab[newState][5];\n if (action > 0) {\n if (action == 0x10) {\n for (i = condPos; i < ix; i++) {\n levels[i] = 1;\n }\n condPos = -1;\n }\n else {\n condPos = -1;\n }\n }\n cond = impTab[newState][6];\n if (cond) {\n if (condPos == -1) {\n condPos = ix;\n }\n }\n else {\n if (condPos > -1) {\n for (i = condPos; i < ix; i++) {\n levels[i] = newLevel;\n }\n condPos = -1;\n }\n }\n if (charTypes[ix] == B) {\n levels[ix] = 0;\n }\n hiLevel |= newLevel;\n }\n if (hasUBAT_S) {\n for (i = 0; i < len; i++) {\n if (charTypes[i] == S) {\n levels[i] = dir;\n for (var j = i - 1; j >= 0; j--) {\n if (charTypes[j] == WS) {\n levels[j] = dir;\n }\n else {\n break;\n }\n }\n }\n }\n }\n}\nfunction _invertLevel(lev, levels, _array) {\n if (hiLevel < lev) {\n return;\n }\n if (lev == 1 && dir == RTL && !hasUBAT_B) {\n _array.reverse();\n return;\n }\n var len = _array.length, start = 0, end, lo, hi, tmp;\n while (start < len) {\n if (levels[start] >= lev) {\n end = start + 1;\n while (end < len && levels[end] >= lev) {\n end++;\n }\n for (lo = start, hi = end - 1; lo < hi; lo++, hi--) {\n tmp = _array[lo];\n _array[lo] = _array[hi];\n _array[hi] = tmp;\n }\n start = end;\n }\n start++;\n }\n}\nfunction _getCharClass(chars, types, classes, ix) {\n var cType = types[ix], wType, nType, len, i;\n switch (cType) {\n case L:\n case R:\n lastArabic = false;\n case ON:\n case AN:\n return cType;\n case EN:\n return lastArabic ? AN : EN;\n case AL:\n lastArabic = true;\n hasUBAT_AL = true;\n return R;\n case WS:\n return ON;\n case CS:\n if (ix < 1 || (ix + 1) >= types.length ||\n ((wType = classes[ix - 1]) != EN && wType != AN) ||\n ((nType = types[ix + 1]) != EN && nType != AN)) {\n return ON;\n }\n if (lastArabic) {\n nType = AN;\n }\n return nType == wType ? nType : ON;\n case ES:\n wType = ix > 0 ? classes[ix - 1] : B;\n if (wType == EN && (ix + 1) < types.length && types[ix + 1] == EN) {\n return EN;\n }\n return ON;\n case ET:\n if (ix > 0 && classes[ix - 1] == EN) {\n return EN;\n }\n if (lastArabic) {\n return ON;\n }\n i = ix + 1;\n len = types.length;\n while (i < len && types[i] == ET) {\n i++;\n }\n if (i < len && types[i] == EN) {\n return EN;\n }\n return ON;\n case NSM:\n len = types.length;\n i = ix + 1;\n while (i < len && types[i] == NSM) {\n i++;\n }\n if (i < len) {\n var c = chars[ix], rtlCandidate = (c >= 0x0591 && c <= 0x08FF) || c == 0xFB1E;\n wType = types[i];\n if (rtlCandidate && (wType == R || wType == AL)) {\n return R;\n }\n }\n if (ix < 1 || (wType = types[ix - 1]) == B) {\n return ON;\n }\n return classes[ix - 1];\n case B:\n lastArabic = false;\n hasUBAT_B = true;\n return dir;\n case S:\n hasUBAT_S = true;\n return ON;\n case LRE:\n case RLE:\n case LRO:\n case RLO:\n case PDF:\n lastArabic = false;\n case BN:\n return ON;\n }\n}\nfunction _getCharacterType(ch) {\n var uc = ch.charCodeAt(0), hi = uc >> 8;\n if (hi == 0) {\n return ((uc > 0x00BF) ? L : UnicodeTBL00[uc]);\n }\n else if (hi == 5) {\n return (/[\\u0591-\\u05f4]/.test(ch) ? R : L);\n }\n else if (hi == 6) {\n if (/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(ch))\n return NSM;\n else if (/[\\u0660-\\u0669\\u066b-\\u066c]/.test(ch))\n return AN;\n else if (uc == 0x066A)\n return ET;\n else if (/[\\u06f0-\\u06f9]/.test(ch))\n return EN;\n else\n return AL;\n }\n else if (hi == 0x20 && uc <= 0x205F) {\n return UnicodeTBL20[uc & 0xFF];\n }\n else if (hi == 0xFE) {\n return (uc >= 0xFE70 ? AL : ON);\n }\n return ON;\n}\nfunction _isArabicDiacritics(ch) {\n return (ch >= '\\u064b' && ch <= '\\u0655');\n}\nexports.L = L;\nexports.R = R;\nexports.EN = EN;\nexports.ON_R = 3;\nexports.AN = 4;\nexports.R_H = 5;\nexports.B = 6;\nexports.RLE = 7;\nexports.DOT = \"\\xB7\";\nexports.doBidiReorder = function (text, textCharTypes, isRtl) {\n if (text.length < 2)\n return {};\n var chars = text.split(\"\"), logicalFromVisual = new Array(chars.length), bidiLevels = new Array(chars.length), levels = [];\n dir = isRtl ? RTL : LTR;\n _computeLevels(chars, levels, chars.length, textCharTypes);\n for (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++)\n ;\n _invertLevel(2, levels, logicalFromVisual);\n _invertLevel(1, levels, logicalFromVisual);\n for (var i = 0; i < logicalFromVisual.length - 1; i++) { //fix levels to reflect character width\n if (textCharTypes[i] === AN) {\n levels[i] = exports.AN;\n }\n else if (levels[i] === R && ((textCharTypes[i] > AL && textCharTypes[i] < LRE)\n || textCharTypes[i] === ON || textCharTypes[i] === BN)) {\n levels[i] = exports.ON_R;\n }\n else if ((i > 0 && chars[i - 1] === '\\u0644') && /\\u0622|\\u0623|\\u0625|\\u0627/.test(chars[i])) {\n levels[i - 1] = levels[i] = exports.R_H;\n i++;\n }\n }\n if (chars[chars.length - 1] === exports.DOT)\n levels[chars.length - 1] = exports.B;\n if (chars[0] === '\\u202B')\n levels[0] = exports.RLE;\n for (var i = 0; i < logicalFromVisual.length; i++) {\n bidiLevels[i] = levels[logicalFromVisual[i]];\n }\n return { 'logicalFromVisual': logicalFromVisual, 'bidiLevels': bidiLevels };\n};\nexports.hasBidiCharacters = function (text, textCharTypes) {\n var ret = false;\n for (var i = 0; i < text.length; i++) {\n textCharTypes[i] = _getCharacterType(text.charAt(i));\n if (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL || textCharTypes[i] == AN))\n ret = true;\n }\n return ret;\n};\nexports.getVisualFromLogicalIdx = function (logIdx, rowMap) {\n for (var i = 0; i < rowMap.logicalFromVisual.length; i++) {\n if (rowMap.logicalFromVisual[i] == logIdx)\n return i;\n }\n return 0;\n};\n\n});\n\nace.define(\"ace/bidihandler\",[\"require\",\"exports\",\"module\",\"ace/lib/bidiutil\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar bidiUtil = require(\"./lib/bidiutil\");\nvar lang = require(\"./lib/lang\");\nvar bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\u202B]/;\nvar BidiHandler = /** @class */ (function () {\n function BidiHandler(session) {\n this.session = session;\n this.bidiMap = {};\n this.currentRow = null;\n this.bidiUtil = bidiUtil;\n this.charWidths = [];\n this.EOL = \"\\xAC\";\n this.showInvisibles = true;\n this.isRtlDir = false;\n this.$isRtl = false;\n this.line = \"\";\n this.wrapIndent = 0;\n this.EOF = \"\\xB6\";\n this.RLE = \"\\u202B\";\n this.contentWidth = 0;\n this.fontMetrics = null;\n this.rtlLineOffset = 0;\n this.wrapOffset = 0;\n this.isMoveLeftOperation = false;\n this.seenBidi = bidiRE.test(session.getValue());\n }\n BidiHandler.prototype.isBidiRow = function (screenRow, docRow, splitIndex) {\n if (!this.seenBidi)\n return false;\n if (screenRow !== this.currentRow) {\n this.currentRow = screenRow;\n this.updateRowLine(docRow, splitIndex);\n this.updateBidiMap();\n }\n return this.bidiMap.bidiLevels;\n };\n BidiHandler.prototype.onChange = function (delta) {\n if (!this.seenBidi) {\n if (delta.action == \"insert\" && bidiRE.test(delta.lines.join(\"\\n\"))) {\n this.seenBidi = true;\n this.currentRow = null;\n }\n }\n else {\n this.currentRow = null;\n }\n };\n BidiHandler.prototype.getDocumentRow = function () {\n var docRow = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var index = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n if (index >= 0)\n docRow = this.session.$docRowCache[index];\n }\n return docRow;\n };\n BidiHandler.prototype.getSplitIndex = function () {\n var splitIndex = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var currentIndex, prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n while (this.currentRow - splitIndex > 0) {\n currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1);\n if (currentIndex !== prevIndex)\n break;\n prevIndex = currentIndex;\n splitIndex++;\n }\n }\n else {\n splitIndex = this.currentRow;\n }\n return splitIndex;\n };\n BidiHandler.prototype.updateRowLine = function (docRow, splitIndex) {\n if (docRow === undefined)\n docRow = this.getDocumentRow();\n var isLastRow = (docRow === this.session.getLength() - 1), endOfLine = isLastRow ? this.EOF : this.EOL;\n this.wrapIndent = 0;\n this.line = this.session.getLine(docRow);\n this.isRtlDir = this.$isRtl || this.line.charAt(0) === this.RLE;\n if (this.session.$useWrapMode) {\n var splits = this.session.$wrapData[docRow];\n if (splits) {\n if (splitIndex === undefined)\n splitIndex = this.getSplitIndex();\n if (splitIndex > 0 && splits.length) {\n this.wrapIndent = splits.indent;\n this.wrapOffset = this.wrapIndent * this.charWidths[bidiUtil.L];\n this.line = (splitIndex < splits.length) ?\n this.line.substring(splits[splitIndex - 1], splits[splitIndex]) :\n this.line.substring(splits[splits.length - 1]);\n }\n else {\n this.line = this.line.substring(0, splits[splitIndex]);\n }\n if (splitIndex == splits.length) {\n this.line += (this.showInvisibles) ? endOfLine : bidiUtil.DOT;\n }\n }\n }\n else {\n this.line += this.showInvisibles ? endOfLine : bidiUtil.DOT;\n }\n var session = this.session, shift = 0, size;\n this.line = this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g, function (ch, i) {\n if (ch === '\\t' || session.isFullWidth(ch.charCodeAt(0))) {\n size = (ch === '\\t') ? session.getScreenTabSize(i + shift) : 2;\n shift += size - 1;\n return lang.stringRepeat(bidiUtil.DOT, size);\n }\n return ch;\n });\n if (this.isRtlDir) {\n this.fontMetrics.$main.textContent = (this.line.charAt(this.line.length - 1) == bidiUtil.DOT) ? this.line.substr(0, this.line.length - 1) : this.line;\n this.rtlLineOffset = this.contentWidth - this.fontMetrics.$main.getBoundingClientRect().width;\n }\n };\n BidiHandler.prototype.updateBidiMap = function () {\n var textCharTypes = [];\n if (bidiUtil.hasBidiCharacters(this.line, textCharTypes) || this.isRtlDir) {\n this.bidiMap = bidiUtil.doBidiReorder(this.line, textCharTypes, this.isRtlDir);\n }\n else {\n this.bidiMap = {};\n }\n };\n BidiHandler.prototype.markAsDirty = function () {\n this.currentRow = null;\n };\n BidiHandler.prototype.updateCharacterWidths = function (fontMetrics) {\n if (this.characterWidth === fontMetrics.$characterSize.width)\n return;\n this.fontMetrics = fontMetrics;\n var characterWidth = this.characterWidth = fontMetrics.$characterSize.width;\n var bidiCharWidth = fontMetrics.$measureCharWidth(\"\\u05d4\");\n this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth;\n this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth;\n this.charWidths[bidiUtil.R_H] = bidiCharWidth * 0.45;\n this.charWidths[bidiUtil.B] = this.charWidths[bidiUtil.RLE] = 0;\n this.currentRow = null;\n };\n BidiHandler.prototype.setShowInvisibles = function (showInvisibles) {\n this.showInvisibles = showInvisibles;\n this.currentRow = null;\n };\n BidiHandler.prototype.setEolChar = function (eolChar) {\n this.EOL = eolChar;\n };\n BidiHandler.prototype.setContentWidth = function (width) {\n this.contentWidth = width;\n };\n BidiHandler.prototype.isRtlLine = function (row) {\n if (this.$isRtl)\n return true;\n if (row != undefined)\n return (this.session.getLine(row).charAt(0) == this.RLE);\n else\n return this.isRtlDir;\n };\n BidiHandler.prototype.setRtlDirection = function (editor, isRtlDir) {\n var cursor = editor.getCursorPosition();\n for (var row = editor.selection.getSelectionAnchor().row; row <= cursor.row; row++) {\n if (!isRtlDir && editor.session.getLine(row).charAt(0) === editor.session.$bidiHandler.RLE)\n editor.session.doc.removeInLine(row, 0, 1);\n else if (isRtlDir && editor.session.getLine(row).charAt(0) !== editor.session.$bidiHandler.RLE)\n editor.session.doc.insert({ column: 0, row: row }, editor.session.$bidiHandler.RLE);\n }\n };\n BidiHandler.prototype.getPosLeft = function (col) {\n col -= this.wrapIndent;\n var leftBoundary = (this.line.charAt(0) === this.RLE) ? 1 : 0;\n var logicalIdx = (col > leftBoundary) ? (this.session.getOverwrite() ? col : col - 1) : leftBoundary;\n var visualIdx = bidiUtil.getVisualFromLogicalIdx(logicalIdx, this.bidiMap), levels = this.bidiMap.bidiLevels, left = 0;\n if (!this.session.getOverwrite() && col <= leftBoundary && levels[visualIdx] % 2 !== 0)\n visualIdx++;\n for (var i = 0; i < visualIdx; i++) {\n left += this.charWidths[levels[i]];\n }\n if (!this.session.getOverwrite() && (col > leftBoundary) && (levels[visualIdx] % 2 === 0))\n left += this.charWidths[levels[visualIdx]];\n if (this.wrapIndent)\n left += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n if (this.isRtlDir)\n left += this.rtlLineOffset;\n return left;\n };\n BidiHandler.prototype.getSelections = function (startCol, endCol) {\n var map = this.bidiMap, levels = map.bidiLevels, level, selections = [], offset = 0, selColMin = Math.min(startCol, endCol) - this.wrapIndent, selColMax = Math.max(startCol, endCol) - this.wrapIndent, isSelected = false, isSelectedPrev = false, selectionStart = 0;\n if (this.wrapIndent)\n offset += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) {\n logIdx = map.logicalFromVisual[visIdx];\n level = levels[visIdx];\n isSelected = (logIdx >= selColMin) && (logIdx < selColMax);\n if (isSelected && !isSelectedPrev) {\n selectionStart = offset;\n }\n else if (!isSelected && isSelectedPrev) {\n selections.push({ left: selectionStart, width: offset - selectionStart });\n }\n offset += this.charWidths[level];\n isSelectedPrev = isSelected;\n }\n if (isSelected && (visIdx === levels.length)) {\n selections.push({ left: selectionStart, width: offset - selectionStart });\n }\n if (this.isRtlDir) {\n for (var i = 0; i < selections.length; i++) {\n selections[i].left += this.rtlLineOffset;\n }\n }\n return selections;\n };\n BidiHandler.prototype.offsetToCol = function (posX) {\n if (this.isRtlDir)\n posX -= this.rtlLineOffset;\n var logicalIdx = 0, posX = Math.max(posX, 0), offset = 0, visualIdx = 0, levels = this.bidiMap.bidiLevels, charWidth = this.charWidths[levels[visualIdx]];\n if (this.wrapIndent)\n posX -= this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n while (posX > offset + charWidth / 2) {\n offset += charWidth;\n if (visualIdx === levels.length - 1) {\n charWidth = 0;\n break;\n }\n charWidth = this.charWidths[levels[++visualIdx]];\n }\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && (levels[visualIdx] % 2 === 0)) {\n if (posX < offset)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n else if (visualIdx > 0 && (levels[visualIdx - 1] % 2 === 0) && (levels[visualIdx] % 2 !== 0)) {\n logicalIdx = 1 + ((posX > offset) ? this.bidiMap.logicalFromVisual[visualIdx]\n : this.bidiMap.logicalFromVisual[visualIdx - 1]);\n }\n else if ((this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && (levels[visualIdx - 1] % 2 === 0))\n || (!this.isRtlDir && visualIdx === 0 && (levels[visualIdx] % 2 !== 0))) {\n logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx];\n }\n else {\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && charWidth !== 0)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n if (logicalIdx === 0 && this.isRtlDir)\n logicalIdx++;\n return (logicalIdx + this.wrapIndent);\n };\n return BidiHandler;\n}());\nexports.BidiHandler = BidiHandler;\n\n});\n\nace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Selection = /** @class */ (function () {\n function Selection(session) {\n this.session = session;\n this.doc = session.getDocument();\n this.clearSelection();\n this.cursor = this.lead = this.doc.createAnchor(0, 0);\n this.anchor = this.doc.createAnchor(0, 0);\n this.$silent = false;\n var self = this;\n this.cursor.on(\"change\", function (e) {\n self.$cursorChanged = true;\n if (!self.$silent)\n self._emit(\"changeCursor\");\n if (!self.$isEmpty && !self.$silent)\n self._emit(\"changeSelection\");\n if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)\n self.$desiredColumn = null;\n });\n this.anchor.on(\"change\", function () {\n self.$anchorChanged = true;\n if (!self.$isEmpty && !self.$silent)\n self._emit(\"changeSelection\");\n });\n }\n Selection.prototype.isEmpty = function () {\n return this.$isEmpty || (this.anchor.row == this.lead.row &&\n this.anchor.column == this.lead.column);\n };\n Selection.prototype.isMultiLine = function () {\n return !this.$isEmpty && this.anchor.row != this.cursor.row;\n };\n Selection.prototype.getCursor = function () {\n return this.lead.getPosition();\n };\n Selection.prototype.setAnchor = function (row, column) {\n this.$isEmpty = false;\n this.anchor.setPosition(row, column);\n };\n Selection.prototype.getAnchor = function () {\n if (this.$isEmpty)\n return this.getSelectionLead();\n return this.anchor.getPosition();\n };\n Selection.prototype.getSelectionLead = function () {\n return this.lead.getPosition();\n };\n Selection.prototype.isBackwards = function () {\n var anchor = this.anchor;\n var lead = this.lead;\n return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));\n };\n Selection.prototype.getRange = function () {\n var anchor = this.anchor;\n var lead = this.lead;\n if (this.$isEmpty)\n return Range.fromPoints(lead, lead);\n return this.isBackwards()\n ? Range.fromPoints(lead, anchor)\n : Range.fromPoints(anchor, lead);\n };\n Selection.prototype.clearSelection = function () {\n if (!this.$isEmpty) {\n this.$isEmpty = true;\n this._emit(\"changeSelection\");\n }\n };\n Selection.prototype.selectAll = function () {\n this.$setSelection(0, 0, Number.MAX_VALUE, Number.MAX_VALUE);\n };\n Selection.prototype.setRange = function (range, reverse) {\n var start = reverse ? range.end : range.start;\n var end = reverse ? range.start : range.end;\n this.$setSelection(start.row, start.column, end.row, end.column);\n };\n Selection.prototype.$setSelection = function (anchorRow, anchorColumn, cursorRow, cursorColumn) {\n if (this.$silent)\n return;\n var wasEmpty = this.$isEmpty;\n var wasMultiselect = this.inMultiSelectMode;\n this.$silent = true;\n this.$cursorChanged = this.$anchorChanged = false;\n this.anchor.setPosition(anchorRow, anchorColumn);\n this.cursor.setPosition(cursorRow, cursorColumn);\n this.$isEmpty = !Range.comparePoints(this.anchor, this.cursor);\n this.$silent = false;\n if (this.$cursorChanged)\n this._emit(\"changeCursor\");\n if (this.$cursorChanged || this.$anchorChanged || wasEmpty != this.$isEmpty || wasMultiselect)\n this._emit(\"changeSelection\");\n };\n Selection.prototype.$moveSelection = function (mover) {\n var lead = this.lead;\n if (this.$isEmpty)\n this.setSelectionAnchor(lead.row, lead.column);\n mover.call(this);\n };\n Selection.prototype.selectTo = function (row, column) {\n this.$moveSelection(function () {\n this.moveCursorTo(row, column);\n });\n };\n Selection.prototype.selectToPosition = function (pos) {\n this.$moveSelection(function () {\n this.moveCursorToPosition(pos);\n });\n };\n Selection.prototype.moveTo = function (row, column) {\n this.clearSelection();\n this.moveCursorTo(row, column);\n };\n Selection.prototype.moveToPosition = function (pos) {\n this.clearSelection();\n this.moveCursorToPosition(pos);\n };\n Selection.prototype.selectUp = function () {\n this.$moveSelection(this.moveCursorUp);\n };\n Selection.prototype.selectDown = function () {\n this.$moveSelection(this.moveCursorDown);\n };\n Selection.prototype.selectRight = function () {\n this.$moveSelection(this.moveCursorRight);\n };\n Selection.prototype.selectLeft = function () {\n this.$moveSelection(this.moveCursorLeft);\n };\n Selection.prototype.selectLineStart = function () {\n this.$moveSelection(this.moveCursorLineStart);\n };\n Selection.prototype.selectLineEnd = function () {\n this.$moveSelection(this.moveCursorLineEnd);\n };\n Selection.prototype.selectFileEnd = function () {\n this.$moveSelection(this.moveCursorFileEnd);\n };\n Selection.prototype.selectFileStart = function () {\n this.$moveSelection(this.moveCursorFileStart);\n };\n Selection.prototype.selectWordRight = function () {\n this.$moveSelection(this.moveCursorWordRight);\n };\n Selection.prototype.selectWordLeft = function () {\n this.$moveSelection(this.moveCursorWordLeft);\n };\n Selection.prototype.getWordRange = function (row, column) {\n if (typeof column == \"undefined\") {\n var cursor = row || this.lead;\n row = cursor.row;\n column = cursor.column;\n }\n return this.session.getWordRange(row, column);\n };\n Selection.prototype.selectWord = function () {\n this.setSelectionRange(this.getWordRange());\n };\n Selection.prototype.selectAWord = function () {\n var cursor = this.getCursor();\n var range = this.session.getAWordRange(cursor.row, cursor.column);\n this.setSelectionRange(range);\n };\n Selection.prototype.getLineRange = function (row, excludeLastChar) {\n var rowStart = typeof row == \"number\" ? row : this.lead.row;\n var rowEnd;\n var foldLine = this.session.getFoldLine(rowStart);\n if (foldLine) {\n rowStart = foldLine.start.row;\n rowEnd = foldLine.end.row;\n }\n else {\n rowEnd = rowStart;\n }\n if (excludeLastChar === true)\n return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);\n else\n return new Range(rowStart, 0, rowEnd + 1, 0);\n };\n Selection.prototype.selectLine = function () {\n this.setSelectionRange(this.getLineRange());\n };\n Selection.prototype.moveCursorUp = function () {\n this.moveCursorBy(-1, 0);\n };\n Selection.prototype.moveCursorDown = function () {\n this.moveCursorBy(1, 0);\n };\n Selection.prototype.wouldMoveIntoSoftTab = function (cursor, tabSize, direction) {\n var start = cursor.column;\n var end = cursor.column + tabSize;\n if (direction < 0) {\n start = cursor.column - tabSize;\n end = cursor.column;\n }\n return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(\" \").length - 1 == tabSize;\n };\n Selection.prototype.moveCursorLeft = function () {\n var cursor = this.lead.getPosition(), fold;\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n }\n else if (cursor.column === 0) {\n if (cursor.row > 0) {\n this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, -tabSize);\n }\n else {\n this.moveCursorBy(0, -1);\n }\n }\n };\n Selection.prototype.moveCursorRight = function () {\n var cursor = this.lead.getPosition(), fold;\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n }\n else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\n if (this.lead.row < this.doc.getLength() - 1) {\n this.moveCursorTo(this.lead.row + 1, 0);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n var cursor = this.lead;\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, tabSize);\n }\n else {\n this.moveCursorBy(0, 1);\n }\n }\n };\n Selection.prototype.moveCursorLineStart = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var screenRow = this.session.documentToScreenRow(row, column);\n var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\n var beforeCursor = this.session.getDisplayLine(row, null, firstColumnPosition.row, firstColumnPosition.column);\n var leadingSpace = beforeCursor.match(/^\\s*/);\n if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)\n firstColumnPosition.column += leadingSpace[0].length;\n this.moveCursorToPosition(firstColumnPosition);\n };\n Selection.prototype.moveCursorLineEnd = function () {\n var lead = this.lead;\n var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\n if (this.lead.column == lineEnd.column) {\n var line = this.session.getLine(lineEnd.row);\n if (lineEnd.column == line.length) {\n var textEnd = line.search(/\\s+$/);\n if (textEnd > 0)\n lineEnd.column = textEnd;\n }\n }\n this.moveCursorTo(lineEnd.row, lineEnd.column);\n };\n Selection.prototype.moveCursorFileEnd = function () {\n var row = this.doc.getLength() - 1;\n var column = this.doc.getLine(row).length;\n this.moveCursorTo(row, column);\n };\n Selection.prototype.moveCursorFileStart = function () {\n this.moveCursorTo(0, 0);\n };\n Selection.prototype.moveCursorLongWordRight = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n return;\n }\n if (this.session.nonTokenRe.exec(rightOfCursor)) {\n column += this.session.nonTokenRe.lastIndex;\n this.session.nonTokenRe.lastIndex = 0;\n rightOfCursor = line.substring(column);\n }\n if (column >= line.length) {\n this.moveCursorTo(row, line.length);\n this.moveCursorRight();\n if (row < this.doc.getLength() - 1)\n this.moveCursorWordRight();\n return;\n }\n if (this.session.tokenRe.exec(rightOfCursor)) {\n column += this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n this.moveCursorTo(row, column);\n };\n Selection.prototype.moveCursorLongWordLeft = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n return;\n }\n var str = this.session.getFoldStringAt(row, column, -1);\n if (str == null) {\n str = this.doc.getLine(row).substring(0, column);\n }\n var leftOfCursor = lang.stringReverse(str);\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n if (this.session.nonTokenRe.exec(leftOfCursor)) {\n column -= this.session.nonTokenRe.lastIndex;\n leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\n this.session.nonTokenRe.lastIndex = 0;\n }\n if (column <= 0) {\n this.moveCursorTo(row, 0);\n this.moveCursorLeft();\n if (row > 0)\n this.moveCursorWordLeft();\n return;\n }\n if (this.session.tokenRe.exec(leftOfCursor)) {\n column -= this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n this.moveCursorTo(row, column);\n };\n Selection.prototype.$shortWordEndIndex = function (rightOfCursor) {\n var index = 0, ch;\n var whitespaceRe = /\\s/;\n var tokenRe = this.session.tokenRe;\n tokenRe.lastIndex = 0;\n if (this.session.tokenRe.exec(rightOfCursor)) {\n index = this.session.tokenRe.lastIndex;\n }\n else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index++;\n if (index < 1) {\n tokenRe.lastIndex = 0;\n while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\n tokenRe.lastIndex = 0;\n index++;\n if (whitespaceRe.test(ch)) {\n if (index > 2) {\n index--;\n break;\n }\n else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index++;\n if (index > 2)\n break;\n }\n }\n }\n }\n }\n tokenRe.lastIndex = 0;\n return index;\n };\n Selection.prototype.moveCursorShortWordRight = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold)\n return this.moveCursorTo(fold.end.row, fold.end.column);\n if (column == line.length) {\n var l = this.doc.getLength();\n do {\n row++;\n rightOfCursor = this.doc.getLine(row);\n } while (row < l && /^\\s*$/.test(rightOfCursor));\n if (!/^\\s+/.test(rightOfCursor))\n rightOfCursor = \"\";\n column = 0;\n }\n var index = this.$shortWordEndIndex(rightOfCursor);\n this.moveCursorTo(row, column + index);\n };\n Selection.prototype.moveCursorShortWordLeft = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1))\n return this.moveCursorTo(fold.start.row, fold.start.column);\n var line = this.session.getLine(row).substring(0, column);\n if (column === 0) {\n do {\n row--;\n line = this.doc.getLine(row);\n } while (row > 0 && /^\\s*$/.test(line));\n column = line.length;\n if (!/\\s+$/.test(line))\n line = \"\";\n }\n var leftOfCursor = lang.stringReverse(line);\n var index = this.$shortWordEndIndex(leftOfCursor);\n return this.moveCursorTo(row, column - index);\n };\n Selection.prototype.moveCursorWordRight = function () {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordRight();\n else\n this.moveCursorShortWordRight();\n };\n Selection.prototype.moveCursorWordLeft = function () {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordLeft();\n else\n this.moveCursorShortWordLeft();\n };\n Selection.prototype.moveCursorBy = function (rows, chars) {\n var screenPos = this.session.documentToScreenPosition(this.lead.row, this.lead.column);\n var offsetX;\n if (chars === 0) {\n if (rows !== 0) {\n if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) {\n offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column);\n screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]);\n }\n else {\n offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0];\n }\n }\n if (this.$desiredColumn)\n screenPos.column = this.$desiredColumn;\n else\n this.$desiredColumn = screenPos.column;\n }\n if (rows != 0 && this.session.lineWidgets && this.session.lineWidgets[this.lead.row]) {\n var widget = this.session.lineWidgets[this.lead.row];\n if (rows < 0)\n rows -= widget.rowsAbove || 0;\n else if (rows > 0)\n rows += widget.rowCount - (widget.rowsAbove || 0);\n }\n var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX);\n if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\n }\n this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\n };\n Selection.prototype.moveCursorToPosition = function (position) {\n this.moveCursorTo(position.row, position.column);\n };\n Selection.prototype.moveCursorTo = function (row, column, keepDesiredColumn) {\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n row = fold.start.row;\n column = fold.start.column;\n }\n this.$keepDesiredColumnOnChange = true;\n var line = this.session.getLine(row);\n if (/[\\uDC00-\\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) {\n if (this.lead.row == row && this.lead.column == column + 1)\n column = column - 1;\n else\n column = column + 1;\n }\n this.lead.setPosition(row, column);\n this.$keepDesiredColumnOnChange = false;\n if (!keepDesiredColumn)\n this.$desiredColumn = null;\n };\n Selection.prototype.moveCursorToScreen = function (row, column, keepDesiredColumn) {\n var pos = this.session.screenToDocumentPosition(row, column);\n this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n };\n Selection.prototype.detach = function () {\n this.lead.detach();\n this.anchor.detach();\n };\n Selection.prototype.fromOrientedRange = function (range) {\n this.setSelectionRange(range, range.cursor == range.start);\n this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n };\n Selection.prototype.toOrientedRange = function (range) {\n var r = this.getRange();\n if (range) {\n range.start.column = r.start.column;\n range.start.row = r.start.row;\n range.end.column = r.end.column;\n range.end.row = r.end.row;\n }\n else {\n range = r;\n }\n range.cursor = this.isBackwards() ? range.start : range.end;\n range.desiredColumn = this.$desiredColumn;\n return range;\n };\n Selection.prototype.getRangeOfMovements = function (func) {\n var start = this.getCursor();\n try {\n func(this);\n var end = this.getCursor();\n return Range.fromPoints(start, end);\n }\n catch (e) {\n return Range.fromPoints(start, start);\n }\n finally {\n this.moveCursorToPosition(start);\n }\n };\n Selection.prototype.toJSON = function () {\n if (this.rangeCount) { var data = this.ranges.map(function (r) {\n var r1 = r.clone();\n r1.isBackwards = r.cursor == r.start;\n return r1;\n });\n }\n else { var data = this.getRange();\n data.isBackwards = this.isBackwards();\n }\n return data;\n };\n Selection.prototype.fromJSON = function (data) {\n if (data.start == undefined) {\n if (this.rangeList && data.length > 1) {\n this.toSingleRange(data[0]);\n for (var i = data.length; i--;) {\n var r = Range.fromPoints(data[i].start, data[i].end);\n if (data[i].isBackwards)\n r.cursor = r.start;\n this.addRange(r, true);\n }\n return;\n }\n else {\n data = data[0];\n }\n }\n if (this.rangeList)\n this.toSingleRange(data);\n this.setSelectionRange(data, data.isBackwards);\n };\n Selection.prototype.isEqual = function (data) {\n if ((data.length || this.rangeCount) && data.length != this.rangeCount)\n return false;\n if (!data.length || !this.ranges)\n return this.getRange().isEqual(data);\n for (var i = this.ranges.length; i--;) {\n if (!this.ranges[i].isEqual(data[i]))\n return false;\n }\n return true;\n };\n return Selection;\n}());\nSelection.prototype.setSelectionAnchor = Selection.prototype.setAnchor;\nSelection.prototype.getSelectionAnchor = Selection.prototype.getAnchor;\nSelection.prototype.setSelectionRange = Selection.prototype.setRange;\noop.implement(Selection.prototype, EventEmitter);\nexports.Selection = Selection;\n\n});\n\nace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/report_error\"], function(require, exports, module){\"use strict\";\nvar reportError = require(\"./lib/report_error\").reportError;\nvar MAX_TOKEN_COUNT = 2000;\nvar Tokenizer = /** @class */ (function () {\n function Tokenizer(rules) {\n this.splitRegex;\n this.states = rules;\n this.regExps = {};\n this.matchMappings = {};\n for (var key in this.states) {\n var state = this.states[key];\n var ruleRegExps = [];\n var matchTotal = 0;\n var mapping = this.matchMappings[key] = { defaultToken: \"text\" };\n var flag = \"g\";\n var splitterRurles = [];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.defaultToken)\n mapping.defaultToken = rule.defaultToken;\n if (rule.caseInsensitive && flag.indexOf(\"i\") === -1)\n flag += \"i\";\n if (rule.unicode && flag.indexOf(\"u\") === -1)\n flag += \"u\";\n if (rule.regex == null)\n continue;\n if (rule.regex instanceof RegExp)\n rule.regex = rule.regex.toString().slice(1, -1);\n var adjustedregex = rule.regex;\n var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\n if (Array.isArray(rule.token)) {\n if (rule.token.length == 1 || matchcount == 1) {\n rule.token = rule.token[0];\n }\n else if (matchcount - 1 != rule.token.length) {\n this.reportError(\"number of classes and regexp groups doesn't match\", {\n rule: rule,\n groupCount: matchcount - 1\n });\n rule.token = rule.token[0];\n }\n else {\n rule.tokenArray = rule.token;\n rule.token = null;\n rule.onMatch = this.$arrayTokens;\n }\n }\n else if (typeof rule.token == \"function\" && !rule.onMatch) {\n if (matchcount > 1)\n rule.onMatch = this.$applyToken;\n else\n rule.onMatch = rule.token;\n }\n if (matchcount > 1) {\n if (/\\\\\\d/.test(rule.regex)) {\n adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function (match, digit) {\n return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\n });\n }\n else {\n matchcount = 1;\n adjustedregex = this.removeCapturingGroups(rule.regex);\n }\n if (!rule.splitRegex && typeof rule.token != \"string\")\n splitterRurles.push(rule); // flag will be known only at the very end\n }\n mapping[matchTotal] = i;\n matchTotal += matchcount;\n ruleRegExps.push(adjustedregex);\n if (!rule.onMatch)\n rule.onMatch = null;\n }\n if (!ruleRegExps.length) {\n mapping[0] = 0;\n ruleRegExps.push(\"$\");\n }\n splitterRurles.forEach(function (rule) {\n rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n }, this);\n this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n }\n }\n Tokenizer.prototype.$setMaxTokenCount = function (m) {\n MAX_TOKEN_COUNT = m | 0;\n };\n Tokenizer.prototype.$applyToken = function (str) {\n var values = this.splitRegex.exec(str).slice(1);\n var types = this.token.apply(this, values);\n if (typeof types === \"string\")\n return [{ type: types, value: str }];\n var tokens = [];\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i]\n };\n }\n return tokens;\n };\n Tokenizer.prototype.$arrayTokens = function (str) {\n if (!str)\n return [];\n var values = this.splitRegex.exec(str);\n if (!values)\n return \"text\";\n var tokens = [];\n var types = this.tokenArray;\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i + 1])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i + 1]\n };\n }\n return tokens;\n };\n Tokenizer.prototype.removeCapturingGroups = function (src) {\n var r = src.replace(/\\\\.|\\[(?:\\\\.|[^\\\\\\]])*|\\(\\?[:=!<]|(\\()/g, function (x, y) { return y ? \"(?:\" : x; });\n return r;\n };\n Tokenizer.prototype.createSplitterRegexp = function (src, flag) {\n if (src.indexOf(\"(?=\") != -1) {\n var stack = 0;\n var inChClass = false;\n var lastCapture = {};\n src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function (m, esc, parenOpen, parenClose, square, index) {\n if (inChClass) {\n inChClass = square != \"]\";\n }\n else if (square) {\n inChClass = true;\n }\n else if (parenClose) {\n if (stack == lastCapture.stack) {\n lastCapture.end = index + 1;\n lastCapture.stack = -1;\n }\n stack--;\n }\n else if (parenOpen) {\n stack++;\n if (parenOpen.length != 1) {\n lastCapture.stack = stack;\n lastCapture.start = index;\n }\n }\n return m;\n });\n if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end)))\n src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\n }\n if (src.charAt(0) != \"^\")\n src = \"^\" + src;\n if (src.charAt(src.length - 1) != \"$\")\n src += \"$\";\n return new RegExp(src, (flag || \"\").replace(\"g\", \"\"));\n };\n Tokenizer.prototype.getLineTokens = function (line, startState) {\n if (startState && typeof startState != \"string\") {\n var stack = startState.slice(0);\n startState = stack[0];\n if (startState === \"#tmp\") {\n stack.shift();\n startState = stack.shift();\n }\n }\n else\n var stack = [];\n var currentState = /**@type{string}*/ (startState) || \"start\";\n var state = this.states[currentState];\n if (!state) {\n currentState = \"start\";\n state = this.states[currentState];\n }\n var mapping = this.matchMappings[currentState];\n var re = this.regExps[currentState];\n re.lastIndex = 0;\n var match, tokens = [];\n var lastIndex = 0;\n var matchAttempts = 0;\n var token = { type: null, value: \"\" };\n while (match = re.exec(line)) {\n var type = mapping.defaultToken;\n var rule = null;\n var value = match[0];\n var index = re.lastIndex;\n if (index - value.length > lastIndex) {\n var skipped = line.substring(lastIndex, index - value.length);\n if (token.type == type) {\n token.value += skipped;\n }\n else {\n if (token.type)\n tokens.push(token);\n token = { type: type, value: skipped };\n }\n }\n for (var i = 0; i < match.length - 2; i++) {\n if (match[i + 1] === undefined)\n continue;\n rule = state[mapping[i]];\n if (rule.onMatch)\n type = rule.onMatch(value, currentState, stack, line);\n else\n type = rule.token;\n if (rule.next) {\n if (typeof rule.next == \"string\") {\n currentState = rule.next;\n }\n else {\n currentState = rule.next(currentState, stack);\n }\n state = this.states[currentState];\n if (!state) {\n this.reportError(\"state doesn't exist\", currentState);\n currentState = \"start\";\n state = this.states[currentState];\n }\n mapping = this.matchMappings[currentState];\n lastIndex = index;\n re = this.regExps[currentState];\n re.lastIndex = index;\n }\n if (rule.consumeLineEnd)\n lastIndex = index;\n break;\n }\n if (value) {\n if (typeof type === \"string\") {\n if ((!rule || rule.merge !== false) && token.type === type) {\n token.value += value;\n }\n else {\n if (token.type)\n tokens.push(token);\n token = { type: type, value: value };\n }\n }\n else if (type) {\n if (token.type)\n tokens.push(token);\n token = { type: null, value: \"\" };\n for (var i = 0; i < type.length; i++)\n tokens.push(type[i]);\n }\n }\n if (lastIndex == line.length)\n break;\n lastIndex = index;\n if (matchAttempts++ > MAX_TOKEN_COUNT) {\n if (matchAttempts > 2 * line.length) {\n this.reportError(\"infinite loop with in ace tokenizer\", {\n startState: startState,\n line: line\n });\n }\n while (lastIndex < line.length) {\n if (token.type)\n tokens.push(token);\n token = {\n value: line.substring(lastIndex, lastIndex += 500),\n type: \"overflow\"\n };\n }\n currentState = \"start\";\n stack = [];\n break;\n }\n }\n if (token.type)\n tokens.push(token);\n if (stack.length > 1) {\n if (stack[0] !== currentState)\n stack.unshift(\"#tmp\", currentState);\n }\n return {\n tokens: tokens,\n state: stack.length ? stack : currentState\n };\n };\n return Tokenizer;\n}());\nTokenizer.prototype.reportError = reportError;\nexports.Tokenizer = Tokenizer;\n\n});\n\nace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/deep_copy\"], function(require, exports, module){\"use strict\";\nvar deepCopy = require(\"../lib/deep_copy\").deepCopy;\nvar TextHighlightRules;\nTextHighlightRules = function () {\n this.$rules = {\n \"start\": [{\n token: \"empty_line\",\n regex: '^$'\n }, {\n defaultToken: \"text\"\n }]\n };\n};\n(function () {\n this.addRules = function (rules, prefix) {\n if (!prefix) {\n for (var key in rules)\n this.$rules[key] = rules[key];\n return;\n }\n for (var key in rules) {\n var state = rules[key];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.next || rule.onMatch) {\n if (typeof rule.next == \"string\") {\n if (rule.next.indexOf(prefix) !== 0)\n rule.next = prefix + rule.next;\n }\n if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)\n rule.nextState = prefix + rule.nextState;\n }\n }\n this.$rules[prefix + key] = state;\n }\n };\n this.getRules = function () {\n return this.$rules;\n };\n this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\n var embedRules = typeof HighlightRules == \"function\"\n ? new HighlightRules().getRules()\n : HighlightRules;\n if (states) {\n for (var i = 0; i < states.length; i++)\n states[i] = prefix + states[i];\n }\n else {\n states = [];\n for (var key in embedRules)\n states.push(prefix + key);\n }\n this.addRules(embedRules, prefix);\n if (escapeRules) {\n var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\n for (var i = 0; i < states.length; i++)\n addRules.apply(this.$rules[states[i]], deepCopy(escapeRules));\n }\n if (!this.$embeds)\n this.$embeds = [];\n this.$embeds.push(prefix);\n };\n this.getEmbeds = function () {\n return this.$embeds;\n };\n var pushState = function (currentState, stack) {\n if (currentState != \"start\" || stack.length)\n stack.unshift(this.nextState, currentState);\n return this.nextState;\n };\n var popState = function (currentState, stack) {\n stack.shift();\n return stack.shift() || \"start\";\n };\n this.normalizeRules = function () {\n var id = 0;\n var rules = this.$rules;\n function processState(key) {\n var state = rules[key];\n state[\"processed\"] = true;\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n var toInsert = null;\n if (Array.isArray(rule)) {\n toInsert = rule;\n rule = {};\n }\n if (!rule.regex && rule.start) {\n rule.regex = rule.start;\n if (!rule.next)\n rule.next = [];\n rule.next.push({\n defaultToken: rule.token\n }, {\n token: rule.token + \".end\",\n regex: rule.end || rule.start,\n next: \"pop\"\n });\n rule.token = rule.token + \".start\";\n rule.push = true;\n }\n var next = rule.next || rule.push;\n if (next && Array.isArray(next)) {\n var stateName = rule.stateName;\n if (!stateName) {\n stateName = rule.token;\n if (typeof stateName != \"string\")\n stateName = stateName[0] || \"\";\n if (rules[stateName])\n stateName += id++;\n }\n rules[stateName] = next;\n rule.next = stateName;\n processState(stateName);\n }\n else if (next == \"pop\") {\n rule.next = popState;\n }\n if (rule.push) {\n rule.nextState = rule.next || rule.push;\n rule.next = pushState;\n delete rule.push;\n }\n if (rule.rules) {\n for (var r in rule.rules) {\n if (rules[r]) {\n if (rules[r].push)\n rules[r].push.apply(rules[r], rule.rules[r]);\n }\n else {\n rules[r] = rule.rules[r];\n }\n }\n }\n var includeName = typeof rule == \"string\" ? rule : rule.include;\n if (includeName) {\n if (includeName === \"$self\")\n includeName = \"start\";\n if (Array.isArray(includeName))\n toInsert = includeName.map(function (x) { return rules[x]; });\n else\n toInsert = rules[includeName];\n }\n if (toInsert) {\n var args = [i, 1].concat(toInsert);\n if (rule.noEscape)\n args = args.filter(function (x) { return !x.next; });\n state.splice.apply(state, args);\n i--;\n }\n if (rule.keywordMap) {\n rule.token = this.createKeywordMapper(rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive);\n delete rule.defaultToken;\n }\n }\n }\n Object.keys(rules).forEach(processState, this);\n };\n this.createKeywordMapper = function (map, defaultToken, ignoreCase, splitChar) {\n var keywords = Object.create(null);\n this.$keywordList = [];\n Object.keys(map).forEach(function (className) {\n var a = map[className];\n var list = a.split(splitChar || \"|\");\n for (var i = list.length; i--;) {\n var word = list[i];\n this.$keywordList.push(word);\n if (ignoreCase)\n word = word.toLowerCase();\n keywords[word] = className;\n }\n }, this);\n map = null;\n return ignoreCase\n ? function (value) { return keywords[value.toLowerCase()] || defaultToken; }\n : function (value) { return keywords[value] || defaultToken; };\n };\n this.getKeywords = function () {\n return this.$keywords;\n };\n}).call(TextHighlightRules.prototype);\nexports.TextHighlightRules = TextHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar Behaviour;\nBehaviour = function () {\n this.$behaviours = {};\n};\n(function () {\n this.add = function (name, action, callback) {\n switch (undefined) {\n case this.$behaviours:\n this.$behaviours = {};\n case this.$behaviours[name]:\n this.$behaviours[name] = {};\n }\n this.$behaviours[name][action] = callback;\n };\n this.addBehaviours = function (behaviours) {\n for (var key in behaviours) {\n for (var action in behaviours[key]) {\n this.add(key, action, behaviours[key][action]);\n }\n }\n };\n this.remove = function (name) {\n if (this.$behaviours && this.$behaviours[name]) {\n delete this.$behaviours[name];\n }\n };\n this.inherit = function (mode, filter) {\n if (typeof mode === \"function\") {\n var behaviours = new mode().getBehaviours(filter);\n }\n else {\n var behaviours = mode.getBehaviours(filter);\n }\n this.addBehaviours(behaviours);\n };\n this.getBehaviours = function (filter) {\n if (!filter) {\n return this.$behaviours;\n }\n else {\n var ret = {};\n for (var i = 0; i < filter.length; i++) {\n if (this.$behaviours[filter[i]]) {\n ret[filter[i]] = this.$behaviours[filter[i]];\n }\n }\n return ret;\n }\n };\n}).call(Behaviour.prototype);\nexports.Behaviour = Behaviour;\n\n});\n\nace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar TokenIterator = /** @class */ (function () {\n function TokenIterator(session, initialRow, initialColumn) {\n this.$session = session;\n this.$row = initialRow;\n this.$rowTokens = session.getTokens(initialRow);\n var token = session.getTokenAt(initialRow, initialColumn);\n this.$tokenIndex = token ? token.index : -1;\n }\n TokenIterator.prototype.stepBackward = function () {\n this.$tokenIndex -= 1;\n while (this.$tokenIndex < 0) {\n this.$row -= 1;\n if (this.$row < 0) {\n this.$row = 0;\n return null;\n }\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = this.$rowTokens.length - 1;\n }\n return this.$rowTokens[this.$tokenIndex];\n };\n TokenIterator.prototype.stepForward = function () {\n this.$tokenIndex += 1;\n var rowCount;\n while (this.$tokenIndex >= this.$rowTokens.length) {\n this.$row += 1;\n if (!rowCount)\n rowCount = this.$session.getLength();\n if (this.$row >= rowCount) {\n this.$row = rowCount - 1;\n return null;\n }\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = 0;\n }\n return this.$rowTokens[this.$tokenIndex];\n };\n TokenIterator.prototype.getCurrentToken = function () {\n return this.$rowTokens[this.$tokenIndex];\n };\n TokenIterator.prototype.getCurrentTokenRow = function () {\n return this.$row;\n };\n TokenIterator.prototype.getCurrentTokenColumn = function () {\n var rowTokens = this.$rowTokens;\n var tokenIndex = this.$tokenIndex;\n var column = rowTokens[tokenIndex].start;\n if (column !== undefined)\n return column;\n column = 0;\n while (tokenIndex > 0) {\n tokenIndex -= 1;\n column += rowTokens[tokenIndex].value.length;\n }\n return column;\n };\n TokenIterator.prototype.getCurrentTokenPosition = function () {\n return { row: this.$row, column: this.getCurrentTokenColumn() };\n };\n TokenIterator.prototype.getCurrentTokenRange = function () {\n var token = this.$rowTokens[this.$tokenIndex];\n var column = this.getCurrentTokenColumn();\n return new Range(this.$row, column, this.$row, column + token.value.length);\n };\n return TokenIterator;\n}());\nexports.TokenIterator = TokenIterator;\n\n});\n\nace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nvar SAFE_INSERT_IN_TOKENS = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\"];\nvar SAFE_INSERT_BEFORE_TOKENS = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\", \"comment\"];\nvar context;\nvar contextCache = {};\nvar defaultQuotes = { '\"': '\"', \"'\": \"'\" };\nvar initContext = function (editor) {\n var id = -1;\n if (editor.multiSelect) {\n id = editor.selection.index;\n if (contextCache.rangeCount != editor.multiSelect.rangeCount)\n contextCache = { rangeCount: editor.multiSelect.rangeCount };\n }\n if (contextCache[id])\n return context = contextCache[id];\n context = contextCache[id] = {\n autoInsertedBrackets: 0,\n autoInsertedRow: -1,\n autoInsertedLineEnd: \"\",\n maybeInsertedBrackets: 0,\n maybeInsertedRow: -1,\n maybeInsertedLineStart: \"\",\n maybeInsertedLineEnd: \"\"\n };\n};\nvar getWrapped = function (selection, selected, opening, closing) {\n var rowDiff = selection.end.row - selection.start.row;\n return {\n text: opening + selected + closing,\n selection: [\n 0,\n selection.start.column + 1,\n rowDiff,\n selection.end.column + (rowDiff ? 0 : 1)\n ]\n };\n};\nvar CstyleBehaviour;\nCstyleBehaviour = function (options) {\n options = options || {};\n this.add(\"braces\", \"insertion\", function (state, action, editor, session, text) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (text == '{') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '{', '}');\n }\n else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options.braces) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n return {\n text: '{}',\n selection: [1, 1]\n };\n }\n else {\n CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n return {\n text: '{',\n selection: [1, 1]\n };\n }\n }\n }\n else if (text == '}') {\n initContext(editor);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == '}') {\n var matching = session.$findOpeningBracket('}', { column: cursor.column + 1, row: cursor.row });\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n else if (text == \"\\n\" || text == \"\\r\\n\") {\n initContext(editor);\n var closing = \"\";\n if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar === '}') {\n var openBracePos = session.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 }, '}');\n if (!openBracePos)\n return null;\n var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n }\n else if (closing) {\n var next_indent = this.$getIndent(line);\n }\n else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n return;\n }\n var indent = next_indent + session.getTabString();\n return {\n text: '\\n' + indent + '\\n' + next_indent + closing,\n selection: [1, indent.length, 1, indent.length]\n };\n }\n else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n });\n this.add(\"braces\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '{') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.end.column, range.end.column + 1);\n if (rightChar == '}') {\n range.end.column++;\n return range;\n }\n else {\n context.maybeInsertedBrackets--;\n }\n }\n });\n this.add(\"parens\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '(') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '(', ')');\n }\n else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n return {\n text: '()',\n selection: [1, 1]\n };\n }\n }\n else if (text == ')') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ')') {\n var matching = session.$findOpeningBracket(')', { column: cursor.column + 1, row: cursor.row });\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"parens\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '(') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ')') {\n range.end.column++;\n return range;\n }\n }\n });\n this.add(\"brackets\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '[') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '[', ']');\n }\n else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n return {\n text: '[]',\n selection: [1, 1]\n };\n }\n }\n else if (text == ']') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ']') {\n var matching = session.$findOpeningBracket(']', { column: cursor.column + 1, row: cursor.row });\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"brackets\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '[') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ']') {\n range.end.column++;\n return range;\n }\n }\n });\n this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n if (text.length == 1 && quotes[text]) {\n if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1)\n return;\n initContext(editor);\n var quote = text;\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, quote, quote);\n }\n else if (!selected) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var leftChar = line.substring(cursor.column - 1, cursor.column);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n var token = session.getTokenAt(cursor.row, cursor.column);\n var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\n return null;\n var stringBefore = token && /string|escape/.test(token.type);\n var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n var pair;\n if (rightChar == quote) {\n pair = stringBefore !== stringAfter;\n if (pair && /string\\.end/.test(rightToken.type))\n pair = false;\n }\n else {\n if (stringBefore && !stringAfter)\n return null; // wrap string with different quote\n if (stringBefore && stringAfter)\n return null; // do not pair quotes inside strings\n var wordRe = session.$mode.tokenRe;\n wordRe.lastIndex = 0;\n var isWordBefore = wordRe.test(leftChar);\n wordRe.lastIndex = 0;\n var isWordAfter = wordRe.test(rightChar);\n var pairQuotesAfter = session.$mode.$pairQuotesAfter;\n var shouldPairQuotes = pairQuotesAfter && pairQuotesAfter[quote] && pairQuotesAfter[quote].test(leftChar);\n if ((!shouldPairQuotes && isWordBefore) || isWordAfter)\n return null; // before or after alphanumeric\n if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\n return null; // there is rightChar and it isn't closing\n var charBefore = line[cursor.column - 2];\n if (leftChar == quote && (charBefore == quote || wordRe.test(charBefore)))\n return null;\n pair = true;\n }\n return {\n text: pair ? quote + quote : \"\",\n selection: [1, 1]\n };\n }\n }\n });\n this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && quotes.hasOwnProperty(selected)) {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == selected) {\n range.end.column++;\n return range;\n }\n }\n });\n if (options.closeDocComment !== false) {\n this.add(\"doc comment end\", \"insertion\", function (state, action, editor, session, text) {\n if (state === \"doc-start\" && (text === \"\\n\" || text === \"\\r\\n\") && editor.selection.isEmpty()) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var nextLine = session.doc.getLine(cursor.row + 1);\n var indent = this.$getIndent(line);\n if (/\\s*\\*/.test(nextLine)) {\n if (/^\\s*\\*/.test(line)) {\n return {\n text: text + indent + \"* \",\n selection: [1, 3 + indent.length, 1, 3 + indent.length]\n };\n }\n else {\n return {\n text: text + indent + \" * \",\n selection: [1, 3 + indent.length, 1, 3 + indent.length]\n };\n }\n }\n if (/\\/\\*\\*/.test(line.substring(0, cursor.column))) {\n return {\n text: text + indent + \" * \" + text + \" \" + indent + \"*/\",\n selection: [1, 4 + indent.length, 1, 4 + indent.length]\n };\n }\n }\n });\n }\n};\nCstyleBehaviour.isSaneInsertion = function (editor, session) {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n if (/[)}\\]]/.test(editor.session.getLine(cursor.row)[cursor.column]))\n return true;\n var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\n return false;\n }\n iterator.stepForward();\n return iterator.getCurrentTokenRow() !== cursor.row ||\n this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n};\nCstyleBehaviour[\"$matchTokenType\"] = function (token, types) {\n return types.indexOf(token.type || token) > -1;\n};\nCstyleBehaviour[\"recordAutoInsert\"] = function (editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this[\"isAutoInsertedClosing\"](cursor, line, context.autoInsertedLineEnd[0]))\n context.autoInsertedBrackets = 0;\n context.autoInsertedRow = cursor.row;\n context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n context.autoInsertedBrackets++;\n};\nCstyleBehaviour[\"recordMaybeInsert\"] = function (editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this[\"isMaybeInsertedClosing\"](cursor, line))\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = cursor.row;\n context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n context.maybeInsertedLineEnd = line.substr(cursor.column);\n context.maybeInsertedBrackets++;\n};\nCstyleBehaviour[\"isAutoInsertedClosing\"] = function (cursor, line, bracket) {\n return context.autoInsertedBrackets > 0 &&\n cursor.row === context.autoInsertedRow &&\n bracket === context.autoInsertedLineEnd[0] &&\n line.substr(cursor.column) === context.autoInsertedLineEnd;\n};\nCstyleBehaviour[\"isMaybeInsertedClosing\"] = function (cursor, line) {\n return context.maybeInsertedBrackets > 0 &&\n cursor.row === context.maybeInsertedRow &&\n line.substr(cursor.column) === context.maybeInsertedLineEnd &&\n line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n};\nCstyleBehaviour[\"popAutoInsertedClosing\"] = function () {\n context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n context.autoInsertedBrackets--;\n};\nCstyleBehaviour[\"clearMaybeInsertedClosing\"] = function () {\n if (context) {\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = -1;\n }\n};\noop.inherits(CstyleBehaviour, Behaviour);\nexports.CstyleBehaviour = CstyleBehaviour;\n\n});\n\nace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar wordChars = [48, 9, 8, 25, 5, 0, 2, 25, 48, 0, 11, 0, 5, 0, 6, 22, 2, 30, 2, 457, 5, 11, 15, 4, 8, 0, 2, 0, 18, 116, 2, 1, 3, 3, 9, 0, 2, 2, 2, 0, 2, 19, 2, 82, 2, 138, 2, 4, 3, 155, 12, 37, 3, 0, 8, 38, 10, 44, 2, 0, 2, 1, 2, 1, 2, 0, 9, 26, 6, 2, 30, 10, 7, 61, 2, 9, 5, 101, 2, 7, 3, 9, 2, 18, 3, 0, 17, 58, 3, 100, 15, 53, 5, 0, 6, 45, 211, 57, 3, 18, 2, 5, 3, 11, 3, 9, 2, 1, 7, 6, 2, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 0, 4, 3, 3, 8, 3, 1, 3, 3, 9, 0, 5, 1, 2, 4, 3, 11, 16, 2, 2, 5, 5, 1, 3, 21, 2, 6, 2, 1, 2, 1, 2, 1, 3, 0, 2, 4, 5, 1, 3, 2, 4, 0, 8, 3, 2, 0, 8, 15, 12, 2, 2, 8, 2, 2, 2, 21, 2, 6, 2, 1, 2, 4, 3, 9, 2, 2, 2, 2, 3, 0, 16, 3, 3, 9, 18, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 3, 8, 3, 1, 3, 2, 9, 1, 5, 1, 2, 4, 3, 9, 2, 0, 17, 1, 2, 5, 4, 2, 2, 3, 4, 1, 2, 0, 2, 1, 4, 1, 4, 2, 4, 11, 5, 4, 4, 2, 2, 3, 3, 0, 7, 0, 15, 9, 18, 2, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 4, 7, 2, 2, 2, 3, 8, 1, 2, 1, 7, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 3, 8, 2, 2, 2, 3, 8, 1, 8, 0, 2, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 15, 4, 7, 2, 2, 2, 3, 10, 0, 9, 3, 3, 9, 11, 5, 3, 1, 2, 17, 4, 23, 2, 8, 2, 0, 3, 6, 4, 0, 5, 5, 2, 0, 2, 7, 19, 1, 14, 57, 6, 14, 2, 9, 40, 1, 2, 0, 3, 1, 2, 0, 3, 0, 7, 3, 2, 6, 2, 2, 2, 0, 2, 0, 3, 1, 2, 12, 2, 2, 3, 4, 2, 0, 2, 5, 3, 9, 3, 1, 35, 0, 24, 1, 7, 9, 12, 0, 2, 0, 2, 0, 5, 9, 2, 35, 5, 19, 2, 5, 5, 7, 2, 35, 10, 0, 58, 73, 7, 77, 3, 37, 11, 42, 2, 0, 4, 328, 2, 3, 3, 6, 2, 0, 2, 3, 3, 40, 2, 3, 3, 32, 2, 3, 3, 6, 2, 0, 2, 3, 3, 14, 2, 56, 2, 3, 3, 66, 5, 0, 33, 15, 17, 84, 13, 619, 3, 16, 2, 25, 6, 74, 22, 12, 2, 6, 12, 20, 12, 19, 13, 12, 2, 2, 2, 1, 13, 51, 3, 29, 4, 0, 5, 1, 3, 9, 34, 2, 3, 9, 7, 87, 9, 42, 6, 69, 11, 28, 4, 11, 5, 11, 11, 39, 3, 4, 12, 43, 5, 25, 7, 10, 38, 27, 5, 62, 2, 28, 3, 10, 7, 9, 14, 0, 89, 75, 5, 9, 18, 8, 13, 42, 4, 11, 71, 55, 9, 9, 4, 48, 83, 2, 2, 30, 14, 230, 23, 280, 3, 5, 3, 37, 3, 5, 3, 7, 2, 0, 2, 0, 2, 0, 2, 30, 3, 52, 2, 6, 2, 0, 4, 2, 2, 6, 4, 3, 3, 5, 5, 12, 6, 2, 2, 6, 67, 1, 20, 0, 29, 0, 14, 0, 17, 4, 60, 12, 5, 0, 4, 11, 18, 0, 5, 0, 3, 9, 2, 0, 4, 4, 7, 0, 2, 0, 2, 0, 2, 3, 2, 10, 3, 3, 6, 4, 5, 0, 53, 1, 2684, 46, 2, 46, 2, 132, 7, 6, 15, 37, 11, 53, 10, 0, 17, 22, 10, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 31, 48, 0, 470, 1, 36, 5, 2, 4, 6, 1, 5, 85, 3, 1, 3, 2, 2, 89, 2, 3, 6, 40, 4, 93, 18, 23, 57, 15, 513, 6581, 75, 20939, 53, 1164, 68, 45, 3, 268, 4, 27, 21, 31, 3, 13, 13, 1, 2, 24, 9, 69, 11, 1, 38, 8, 3, 102, 3, 1, 111, 44, 25, 51, 13, 68, 12, 9, 7, 23, 4, 0, 5, 45, 3, 35, 13, 28, 4, 64, 15, 10, 39, 54, 10, 13, 3, 9, 7, 22, 4, 1, 5, 66, 25, 2, 227, 42, 2, 1, 3, 9, 7, 11171, 13, 22, 5, 48, 8453, 301, 3, 61, 3, 105, 39, 6, 13, 4, 6, 11, 2, 12, 2, 4, 2, 0, 2, 1, 2, 1, 2, 107, 34, 362, 19, 63, 3, 53, 41, 11, 5, 15, 17, 6, 13, 1, 25, 2, 33, 4, 2, 134, 20, 9, 8, 25, 5, 0, 2, 25, 12, 88, 4, 5, 3, 5, 3, 5, 3, 2];\nvar code = 0;\nvar str = [];\nfor (var i = 0; i < wordChars.length; i += 2) {\n str.push(code += wordChars[i]);\n if (wordChars[i + 1])\n str.push(45, code += wordChars[i + 1]);\n}\nexports.wordChars = String.fromCharCode.apply(null, str);\n\n});\n\nace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar config = require(\"../config\");\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar unicode = require(\"../unicode\");\nvar lang = require(\"../lib/lang\");\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\nvar Mode;\nMode = function () {\n this.HighlightRules = TextHighlightRules;\n};\n(function () {\n this.$defaultBehaviour = new CstyleBehaviour();\n this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"\\\\$_]+\", \"g\");\n this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"\\\\$_]|\\\\s])+\", \"g\");\n this.getTokenizer = function () {\n if (!this.$tokenizer) {\n this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig);\n this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\n }\n return this.$tokenizer;\n };\n this.lineCommentStart = \"\";\n this.blockComment = \"\";\n this.toggleCommentLines = function (state, session, startRow, endRow) {\n var doc = session.doc;\n var ignoreBlankLines = true;\n var shouldRemove = true;\n var minIndent = Infinity;\n var tabSize = session.getTabSize();\n var insertAtTabStop = false;\n if (!this.lineCommentStart) {\n if (!this.blockComment)\n return false;\n var lineCommentStart = this.blockComment.start;\n var lineCommentEnd = this.blockComment.end;\n var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\n var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\n var comment = function (line, i) {\n if (testRemove(line, i))\n return;\n if (!ignoreBlankLines || /\\S/.test(line)) {\n doc.insertInLine({ row: i, column: line.length }, lineCommentEnd);\n doc.insertInLine({ row: i, column: minIndent }, lineCommentStart);\n }\n };\n var uncomment = function (line, i) {\n var m;\n if (m = line.match(regexpEnd))\n doc.removeInLine(i, line.length - m[0].length, line.length);\n if (m = line.match(regexpStart))\n doc.removeInLine(i, m[1].length, m[0].length);\n };\n var testRemove = function (line, row) {\n if (regexpStart.test(line))\n return true;\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n if (tokens[i].type === \"comment\")\n return true;\n }\n };\n }\n else {\n if (Array.isArray(this.lineCommentStart)) {\n var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\n var lineCommentStart = this.lineCommentStart[0];\n }\n else {\n var regexpStart = lang.escapeRegExp(this.lineCommentStart);\n var lineCommentStart = this.lineCommentStart;\n }\n regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\n insertAtTabStop = session.getUseSoftTabs();\n var uncomment = function (line, i) {\n var m = line.match(regexpStart);\n if (!m)\n return;\n var start = m[1].length, end = m[0].length;\n if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \")\n end--;\n doc.removeInLine(i, start, end);\n };\n var commentWithSpace = lineCommentStart + \" \";\n var comment = function (line, i) {\n if (!ignoreBlankLines || /\\S/.test(line)) {\n if (shouldInsertSpace(line, minIndent, minIndent))\n doc.insertInLine({ row: i, column: minIndent }, commentWithSpace);\n else\n doc.insertInLine({ row: i, column: minIndent }, lineCommentStart);\n }\n };\n var testRemove = function (line, i) {\n return regexpStart.test(line);\n };\n var shouldInsertSpace = function (line, before, after) {\n var spaces = 0;\n while (before-- && line.charAt(before) == \" \")\n spaces++;\n if (spaces % tabSize != 0)\n return false;\n var spaces = 0;\n while (line.charAt(after++) == \" \")\n spaces++;\n if (tabSize > 2)\n return spaces % tabSize != tabSize - 1;\n else\n return spaces % tabSize == 0;\n };\n }\n function iter(fun) {\n for (var i = startRow; i <= endRow; i++)\n fun(doc.getLine(i), i);\n }\n var minEmptyLength = Infinity;\n iter(function (line, i) {\n var indent = line.search(/\\S/);\n if (indent !== -1) {\n if (indent < minIndent)\n minIndent = indent;\n if (shouldRemove && !testRemove(line, i))\n shouldRemove = false;\n }\n else if (minEmptyLength > line.length) {\n minEmptyLength = line.length;\n }\n });\n if (minIndent == Infinity) {\n minIndent = minEmptyLength;\n ignoreBlankLines = false;\n shouldRemove = false;\n }\n if (insertAtTabStop && minIndent % tabSize != 0)\n minIndent = Math.floor(minIndent / tabSize) * tabSize;\n iter(shouldRemove ? uncomment : comment);\n };\n this.toggleBlockComment = function (state, session, range, cursor) {\n var comment = this.blockComment;\n if (!comment)\n return;\n if (!comment.start && comment[0])\n comment = comment[0];\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n var sel = session.selection;\n var initialRange = session.selection.toOrientedRange();\n var startRow, colDiff;\n if (token && /comment/.test(token.type)) {\n var startRange, endRange;\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.start);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n startRange = new Range(row, column, row, column + comment.start.length);\n break;\n }\n token = iterator.stepBackward();\n }\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.end);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n endRange = new Range(row, column, row, column + comment.end.length);\n break;\n }\n token = iterator.stepForward();\n }\n if (endRange)\n session.remove(endRange);\n if (startRange) {\n session.remove(startRange);\n startRow = startRange.start.row;\n colDiff = -comment.start.length;\n }\n }\n else {\n colDiff = comment.start.length;\n startRow = range.start.row;\n session.insert(range.end, comment.end);\n session.insert(range.start, comment.start);\n }\n if (initialRange.start.row == startRow)\n initialRange.start.column += colDiff;\n if (initialRange.end.row == startRow)\n initialRange.end.column += colDiff;\n session.selection.fromOrientedRange(initialRange);\n };\n this.getNextLineIndent = function (state, line, tab) {\n return this.$getIndent(line);\n };\n this.checkOutdent = function (state, line, input) {\n return false;\n };\n this.autoOutdent = function (state, doc, row) {\n };\n this.$getIndent = function (line) {\n return line.match(/^\\s*/)[0];\n };\n this.createWorker = function (session) {\n return null;\n };\n this.createModeDelegates = function (mapping) {\n this.$embeds = [];\n this.$modes = {};\n for (var i in mapping) {\n if (mapping[i]) {\n var Mode = mapping[i];\n var id = Mode.prototype.$id;\n var mode = config.$modes[id];\n if (!mode)\n config.$modes[id] = mode = new Mode();\n if (!config.$modes[i])\n config.$modes[i] = mode;\n this.$embeds.push(i);\n this.$modes[i] = mode;\n }\n }\n var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\",\n \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\n var _loop_1 = function (i) {\n (function (scope) {\n var functionName = delegations[i];\n var defaultHandler = scope[functionName];\n scope[delegations[i]] =\n function () {\n return this.$delegator(functionName, arguments, defaultHandler);\n };\n }(this_1));\n };\n var this_1 = this;\n for (var i = 0; i < delegations.length; i++) {\n _loop_1(i);\n }\n };\n this.$delegator = function (method, args, defaultHandler) {\n var state = args[0] || \"start\";\n if (typeof state != \"string\") {\n if (Array.isArray(state[2])) {\n var language = state[2][state[2].length - 1];\n var mode = this.$modes[language];\n if (mode)\n return mode[method].apply(mode, [state[1]].concat([].slice.call(args, 1)));\n }\n state = state[0] || \"start\";\n }\n for (var i = 0; i < this.$embeds.length; i++) {\n if (!this.$modes[this.$embeds[i]])\n continue;\n var split = state.split(this.$embeds[i]);\n if (!split[0] && split[1]) {\n args[0] = split[1];\n var mode = this.$modes[this.$embeds[i]];\n return mode[method].apply(mode, args);\n }\n }\n var ret = defaultHandler.apply(this, args);\n return defaultHandler ? ret : undefined;\n };\n this.transformAction = function (state, action, editor, session, param) {\n if (this.$behaviour) {\n var behaviours = this.$behaviour.getBehaviours();\n for (var key in behaviours) {\n if (behaviours[key][action]) {\n var ret = behaviours[key][action].apply(this, arguments);\n if (ret) {\n return ret;\n }\n }\n }\n }\n };\n this.getKeywords = function (append) {\n if (!this.completionKeywords) {\n var rules = this.$tokenizer[\"rules\"];\n var completionKeywords = [];\n for (var rule in rules) {\n var ruleItr = rules[rule];\n for (var r = 0, l = ruleItr.length; r < l; r++) {\n if (typeof ruleItr[r].token === \"string\") {\n if (/keyword|support|storage/.test(ruleItr[r].token))\n completionKeywords.push(ruleItr[r].regex);\n }\n else if (typeof ruleItr[r].token === \"object\") {\n for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) {\n if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\n var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\n completionKeywords.push(rule.substr(1, rule.length - 2));\n }\n }\n }\n }\n }\n this.completionKeywords = completionKeywords;\n }\n if (!append)\n return this.$keywordList;\n return completionKeywords.concat(this.$keywordList || []);\n };\n this.$createKeywordList = function () {\n if (!this.$highlightRules)\n this.getTokenizer();\n return this.$keywordList = this.$highlightRules.$keywordList || [];\n };\n this.getCompletions = function (state, session, pos, prefix) {\n var keywords = this.$keywordList || this.$createKeywordList();\n return keywords.map(function (word) {\n return {\n name: word,\n value: word,\n score: 0,\n meta: \"keyword\"\n };\n });\n };\n this.$id = \"ace/mode/text\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nfunction throwDeltaError(delta, errorText) {\n console.log(\"Invalid Delta:\", delta);\n throw \"Invalid Delta: \" + errorText;\n}\nfunction positionInDocument(docLines, position) {\n return position.row >= 0 && position.row < docLines.length &&\n position.column >= 0 && position.column <= docLines[position.row].length;\n}\nfunction validateDelta(docLines, delta) {\n if (delta.action != \"insert\" && delta.action != \"remove\")\n throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n if (!(delta.lines instanceof Array))\n throwDeltaError(delta, \"delta.lines must be an Array\");\n if (!delta.start || !delta.end)\n throwDeltaError(delta, \"delta.start/end must be an present\");\n var start = delta.start;\n if (!positionInDocument(docLines, delta.start))\n throwDeltaError(delta, \"delta.start must be contained in document\");\n var end = delta.end;\n if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n var numRangeRows = end.row - start.row;\n var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n throwDeltaError(delta, \"delta.range must match delta lines\");\n}\nexports.applyDelta = function (docLines, delta, doNotValidate) {\n var row = delta.start.row;\n var startColumn = delta.start.column;\n var line = docLines[row] || \"\";\n switch (delta.action) {\n case \"insert\":\n var lines = delta.lines;\n if (lines.length === 1) {\n docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n }\n else {\n var args = [row, 1].concat(delta.lines);\n docLines.splice.apply(docLines, args);\n docLines[row] = line.substring(0, startColumn) + docLines[row];\n docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n }\n break;\n case \"remove\":\n var endColumn = delta.end.column;\n var endRow = delta.end.row;\n if (row === endRow) {\n docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n }\n else {\n docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn));\n }\n break;\n }\n};\n\n});\n\nace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Anchor = /** @class */ (function () {\n function Anchor(doc, row, column) {\n this.$onChange = this.onChange.bind(this);\n this.attach(doc);\n if (typeof row != \"number\")\n this.setPosition(row.row, row.column);\n else\n this.setPosition(row, column);\n }\n Anchor.prototype.getPosition = function () {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n Anchor.prototype.getDocument = function () {\n return this.document;\n };\n Anchor.prototype.onChange = function (delta) {\n if (delta.start.row == delta.end.row && delta.start.row != this.row)\n return;\n if (delta.start.row > this.row)\n return;\n var point = $getTransformedPoint(delta, { row: this.row, column: this.column }, this.$insertRight);\n this.setPosition(point.row, point.column, true);\n };\n Anchor.prototype.setPosition = function (row, column, noClip) {\n var pos;\n if (noClip) {\n pos = {\n row: row,\n column: column\n };\n }\n else {\n pos = this.$clipPositionToDocument(row, column);\n }\n if (this.row == pos.row && this.column == pos.column)\n return;\n var old = {\n row: this.row,\n column: this.column\n };\n this.row = pos.row;\n this.column = pos.column;\n this._signal(\"change\", {\n old: old,\n value: pos\n });\n };\n Anchor.prototype.detach = function () {\n this.document.off(\"change\", this.$onChange);\n };\n Anchor.prototype.attach = function (doc) {\n this.document = doc || this.document;\n this.document.on(\"change\", this.$onChange);\n };\n Anchor.prototype.$clipPositionToDocument = function (row, column) {\n var pos = {};\n if (row >= this.document.getLength()) {\n pos.row = Math.max(0, this.document.getLength() - 1);\n pos.column = this.document.getLine(pos.row).length;\n }\n else if (row < 0) {\n pos.row = 0;\n pos.column = 0;\n }\n else {\n pos.row = row;\n pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n }\n if (column < 0)\n pos.column = 0;\n return pos;\n };\n return Anchor;\n}());\nAnchor.prototype.$insertRight = false;\noop.implement(Anchor.prototype, EventEmitter);\nfunction $pointsInOrder(point1, point2, equalPointsInOrder) {\n var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n}\nfunction $getTransformedPoint(delta, point, moveIfEqual) {\n var deltaIsInsert = delta.action == \"insert\";\n var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n var deltaStart = delta.start;\n var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n return {\n row: point.row,\n column: point.column\n };\n }\n if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n return {\n row: point.row + deltaRowShift,\n column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n };\n }\n return {\n row: deltaStart.row,\n column: deltaStart.column\n };\n}\nexports.Anchor = Anchor;\n\n});\n\nace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar Document = /** @class */ (function () {\n function Document(textOrLines) {\n this.$lines = [\"\"];\n if (textOrLines.length === 0) {\n this.$lines = [\"\"];\n }\n else if (Array.isArray(textOrLines)) {\n this.insertMergedLines({ row: 0, column: 0 }, textOrLines);\n }\n else {\n this.insert({ row: 0, column: 0 }, textOrLines);\n }\n }\n Document.prototype.setValue = function (text) {\n var len = this.getLength() - 1;\n this.remove(new Range(0, 0, len, this.getLine(len).length));\n this.insert({ row: 0, column: 0 }, text || \"\");\n };\n Document.prototype.getValue = function () {\n return this.getAllLines().join(this.getNewLineCharacter());\n };\n Document.prototype.createAnchor = function (row, column) {\n return new Anchor(this, row, column);\n };\n Document.prototype.$detectNewLine = function (text) {\n var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n this.$autoNewLine = match ? match[1] : \"\\n\";\n this._signal(\"changeNewLineMode\");\n };\n Document.prototype.getNewLineCharacter = function () {\n switch (this.$newLineMode) {\n case \"windows\":\n return \"\\r\\n\";\n case \"unix\":\n return \"\\n\";\n default:\n return this.$autoNewLine || \"\\n\";\n }\n };\n Document.prototype.setNewLineMode = function (newLineMode) {\n if (this.$newLineMode === newLineMode)\n return;\n this.$newLineMode = newLineMode;\n this._signal(\"changeNewLineMode\");\n };\n Document.prototype.getNewLineMode = function () {\n return this.$newLineMode;\n };\n Document.prototype.isNewLine = function (text) {\n return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n };\n Document.prototype.getLine = function (row) {\n return this.$lines[row] || \"\";\n };\n Document.prototype.getLines = function (firstRow, lastRow) {\n return this.$lines.slice(firstRow, lastRow + 1);\n };\n Document.prototype.getAllLines = function () {\n return this.getLines(0, this.getLength());\n };\n Document.prototype.getLength = function () {\n return this.$lines.length;\n };\n Document.prototype.getTextRange = function (range) {\n return this.getLinesForRange(range).join(this.getNewLineCharacter());\n };\n Document.prototype.getLinesForRange = function (range) {\n var lines;\n if (range.start.row === range.end.row) {\n lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n }\n else {\n lines = this.getLines(range.start.row, range.end.row);\n lines[0] = (lines[0] || \"\").substring(range.start.column);\n var l = lines.length - 1;\n if (range.end.row - range.start.row == l)\n lines[l] = lines[l].substring(0, range.end.column);\n }\n return lines;\n };\n Document.prototype.insertLines = function (row, lines) {\n console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n return this.insertFullLines(row, lines);\n };\n Document.prototype.removeLines = function (firstRow, lastRow) {\n console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n return this.removeFullLines(firstRow, lastRow);\n };\n Document.prototype.insertNewLine = function (position) {\n console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n return this.insertMergedLines(position, [\"\", \"\"]);\n };\n Document.prototype.insert = function (position, text) {\n if (this.getLength() <= 1)\n this.$detectNewLine(text);\n return this.insertMergedLines(position, this.$split(text));\n };\n Document.prototype.insertInLine = function (position, text) {\n var start = this.clippedPos(position.row, position.column);\n var end = this.pos(position.row, position.column + text.length);\n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: [text]\n }, true);\n return this.clonePos(end);\n };\n Document.prototype.clippedPos = function (row, column) {\n var length = this.getLength();\n if (row === undefined) {\n row = length;\n }\n else if (row < 0) {\n row = 0;\n }\n else if (row >= length) {\n row = length - 1;\n column = undefined;\n }\n var line = this.getLine(row);\n if (column == undefined)\n column = line.length;\n column = Math.min(Math.max(column, 0), line.length);\n return { row: row, column: column };\n };\n Document.prototype.clonePos = function (pos) {\n return { row: pos.row, column: pos.column };\n };\n Document.prototype.pos = function (row, column) {\n return { row: row, column: column };\n };\n Document.prototype.$clipPosition = function (position) {\n var length = this.getLength();\n if (position.row >= length) {\n position.row = Math.max(0, length - 1);\n position.column = this.getLine(length - 1).length;\n }\n else {\n position.row = Math.max(0, position.row);\n position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n }\n return position;\n };\n Document.prototype.insertFullLines = function (row, lines) {\n row = Math.min(Math.max(row, 0), this.getLength());\n var column = 0;\n if (row < this.getLength()) {\n lines = lines.concat([\"\"]);\n column = 0;\n }\n else {\n lines = [\"\"].concat(lines);\n row--;\n column = this.$lines[row].length;\n }\n this.insertMergedLines({ row: row, column: column }, lines);\n };\n Document.prototype.insertMergedLines = function (position, lines) {\n var start = this.clippedPos(position.row, position.column);\n var end = {\n row: start.row + lines.length - 1,\n column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n };\n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: lines\n });\n return this.clonePos(end);\n };\n Document.prototype.remove = function (range) {\n var start = this.clippedPos(range.start.row, range.start.column);\n var end = this.clippedPos(range.end.row, range.end.column);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({ start: start, end: end })\n });\n return this.clonePos(start);\n };\n Document.prototype.removeInLine = function (row, startColumn, endColumn) {\n var start = this.clippedPos(row, startColumn);\n var end = this.clippedPos(row, endColumn);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({ start: start, end: end })\n }, true);\n return this.clonePos(start);\n };\n Document.prototype.removeFullLines = function (firstRow, lastRow) {\n firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1);\n var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n var deleteLastNewLine = lastRow < this.getLength() - 1;\n var startRow = (deleteFirstNewLine ? firstRow - 1 : firstRow);\n var startCol = (deleteFirstNewLine ? this.getLine(startRow).length : 0);\n var endRow = (deleteLastNewLine ? lastRow + 1 : lastRow);\n var endCol = (deleteLastNewLine ? 0 : this.getLine(endRow).length);\n var range = new Range(startRow, startCol, endRow, endCol);\n var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n this.applyDelta({\n start: range.start,\n end: range.end,\n action: \"remove\",\n lines: this.getLinesForRange(range)\n });\n return deletedLines;\n };\n Document.prototype.removeNewLine = function (row) {\n if (row < this.getLength() - 1 && row >= 0) {\n this.applyDelta({\n start: this.pos(row, this.getLine(row).length),\n end: this.pos(row + 1, 0),\n action: \"remove\",\n lines: [\"\", \"\"]\n });\n }\n };\n Document.prototype.replace = function (range, text) {\n if (!(range instanceof Range))\n range = Range.fromPoints(range.start, range.end);\n if (text.length === 0 && range.isEmpty())\n return range.start;\n if (text == this.getTextRange(range))\n return range.end;\n this.remove(range);\n var end;\n if (text) {\n end = this.insert(range.start, text);\n }\n else {\n end = range.start;\n }\n return end;\n };\n Document.prototype.applyDeltas = function (deltas) {\n for (var i = 0; i < deltas.length; i++) {\n this.applyDelta(deltas[i]);\n }\n };\n Document.prototype.revertDeltas = function (deltas) {\n for (var i = deltas.length - 1; i >= 0; i--) {\n this.revertDelta(deltas[i]);\n }\n };\n Document.prototype.applyDelta = function (delta, doNotValidate) {\n var isInsert = delta.action == \"insert\";\n if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n : !Range.comparePoints(delta.start, delta.end)) {\n return;\n }\n if (isInsert && delta.lines.length > 20000) {\n this.$splitAndapplyLargeDelta(delta, 20000);\n }\n else {\n applyDelta(this.$lines, delta, doNotValidate);\n this._signal(\"change\", delta);\n }\n };\n Document.prototype.$safeApplyDelta = function (delta) {\n var docLength = this.$lines.length;\n if (delta.action == \"remove\" && delta.start.row < docLength && delta.end.row < docLength\n || delta.action == \"insert\" && delta.start.row <= docLength) {\n this.applyDelta(delta);\n }\n };\n Document.prototype.$splitAndapplyLargeDelta = function (delta, MAX) {\n var lines = delta.lines;\n var l = lines.length - MAX + 1;\n var row = delta.start.row;\n var column = delta.start.column;\n for (var from = 0, to = 0; from < l; from = to) {\n to += MAX - 1;\n var chunk = lines.slice(from, to);\n chunk.push(\"\");\n this.applyDelta({\n start: this.pos(row + from, column),\n end: this.pos(row + to, column = 0),\n action: delta.action,\n lines: chunk\n }, true);\n }\n delta.lines = lines.slice(from);\n delta.start.row = row + from;\n delta.start.column = column;\n this.applyDelta(delta, true);\n };\n Document.prototype.revertDelta = function (delta) {\n this.$safeApplyDelta({\n start: this.clonePos(delta.start),\n end: this.clonePos(delta.end),\n action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n lines: delta.lines.slice()\n });\n };\n Document.prototype.indexToPosition = function (index, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n for (var i = startRow || 0, l = lines.length; i < l; i++) {\n index -= lines[i].length + newlineLength;\n if (index < 0)\n return { row: i, column: index + lines[i].length + newlineLength };\n }\n return { row: l - 1, column: index + lines[l - 1].length + newlineLength };\n };\n Document.prototype.positionToIndex = function (pos, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n var index = 0;\n var row = Math.min(pos.row, lines.length);\n for (var i = startRow || 0; i < row; ++i)\n index += lines[i].length + newlineLength;\n return index + pos.column;\n };\n Document.prototype.$split = function (text) {\n return text.split(/\\r\\n|\\r|\\n/);\n };\n return Document;\n}());\nDocument.prototype.$autoNewLine = \"\";\nDocument.prototype.$newLineMode = \"auto\";\noop.implement(Document.prototype, EventEmitter);\nexports.Document = Document;\n\n});\n\nace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar BackgroundTokenizer = /** @class */ (function () {\n function BackgroundTokenizer(tokenizer, session) {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.tokenizer = tokenizer;\n var self = this;\n this.$worker = function () {\n if (!self.running) {\n return;\n }\n var workerStart = new Date();\n var currentLine = self.currentLine;\n var endLine = -1;\n var doc = self.doc;\n var startLine = currentLine;\n while (self.lines[currentLine])\n currentLine++;\n var len = doc.getLength();\n var processedLines = 0;\n self.running = false;\n while (currentLine < len) {\n self.$tokenizeRow(currentLine);\n endLine = currentLine;\n do {\n currentLine++;\n } while (self.lines[currentLine]);\n processedLines++;\n if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) {\n self.running = setTimeout(self.$worker, 20);\n break;\n }\n }\n self.currentLine = currentLine;\n if (endLine == -1)\n endLine = currentLine;\n if (startLine <= endLine)\n self.fireUpdateEvent(startLine, endLine);\n };\n }\n BackgroundTokenizer.prototype.setTokenizer = function (tokenizer) {\n this.tokenizer = tokenizer;\n this.lines = [];\n this.states = [];\n this.start(0);\n };\n BackgroundTokenizer.prototype.setDocument = function (doc) {\n this.doc = doc;\n this.lines = [];\n this.states = [];\n this.stop();\n };\n BackgroundTokenizer.prototype.fireUpdateEvent = function (firstRow, lastRow) {\n var data = {\n first: firstRow,\n last: lastRow\n };\n this._signal(\"update\", { data: data });\n };\n BackgroundTokenizer.prototype.start = function (startRow) {\n this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\n this.lines.splice(this.currentLine, this.lines.length);\n this.states.splice(this.currentLine, this.states.length);\n this.stop();\n this.running = setTimeout(this.$worker, 700);\n };\n BackgroundTokenizer.prototype.scheduleStart = function () {\n if (!this.running)\n this.running = setTimeout(this.$worker, 700);\n };\n BackgroundTokenizer.prototype.$updateOnChange = function (delta) {\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n if (len === 0) {\n this.lines[startRow] = null;\n }\n else if (delta.action == \"remove\") {\n this.lines.splice(startRow, len + 1, null);\n this.states.splice(startRow, len + 1, null);\n }\n else {\n var args = Array(len + 1);\n args.unshift(startRow, 1);\n this.lines.splice.apply(this.lines, args);\n this.states.splice.apply(this.states, args);\n }\n this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n this.stop();\n };\n BackgroundTokenizer.prototype.stop = function () {\n if (this.running)\n clearTimeout(this.running);\n this.running = false;\n };\n BackgroundTokenizer.prototype.getTokens = function (row) {\n return this.lines[row] || this.$tokenizeRow(row);\n };\n BackgroundTokenizer.prototype.getState = function (row) {\n if (this.currentLine == row)\n this.$tokenizeRow(row);\n return this.states[row] || \"start\";\n };\n BackgroundTokenizer.prototype.$tokenizeRow = function (row) {\n var line = this.doc.getLine(row);\n var state = this.states[row - 1];\n var data = this.tokenizer.getLineTokens(line, state, row);\n if (this.states[row] + \"\" !== data.state + \"\") {\n this.states[row] = data.state;\n this.lines[row + 1] = null;\n if (this.currentLine > row + 1)\n this.currentLine = row + 1;\n }\n else if (this.currentLine == row) {\n this.currentLine = row + 1;\n }\n return this.lines[row] = data.tokens;\n };\n BackgroundTokenizer.prototype.cleanup = function () {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.removeAllListeners();\n };\n return BackgroundTokenizer;\n}());\noop.implement(BackgroundTokenizer.prototype, EventEmitter);\nexports.BackgroundTokenizer = BackgroundTokenizer;\n\n});\n\nace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar SearchHighlight = /** @class */ (function () {\n function SearchHighlight(regExp, clazz, type) {\n if (type === void 0) { type = \"text\"; }\n this.setRegexp(regExp);\n this.clazz = clazz;\n this.type = type;\n }\n SearchHighlight.prototype.setRegexp = function (regExp) {\n if (this.regExp + \"\" == regExp + \"\")\n return;\n this.regExp = regExp;\n this.cache = [];\n };\n SearchHighlight.prototype.update = function (html, markerLayer, session, config) {\n if (!this.regExp)\n return;\n var start = config.firstRow, end = config.lastRow;\n var renderedMarkerRanges = {};\n for (var i = start; i <= end; i++) {\n var ranges = this.cache[i];\n if (ranges == null) {\n ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\n if (ranges.length > this.MAX_RANGES)\n ranges = ranges.slice(0, this.MAX_RANGES);\n ranges = ranges.map(function (match) {\n return new Range(i, match.offset, i, match.offset + match.length);\n });\n this.cache[i] = ranges.length ? ranges : \"\";\n }\n for (var j = ranges.length; j--;) {\n var rangeToAddMarkerTo = ranges[j].toScreenRange(session);\n var rangeAsString = rangeToAddMarkerTo.toString();\n if (renderedMarkerRanges[rangeAsString])\n continue;\n renderedMarkerRanges[rangeAsString] = true;\n markerLayer.drawSingleLineMarker(html, rangeToAddMarkerTo, this.clazz, config);\n }\n }\n };\n return SearchHighlight;\n}());\nSearchHighlight.prototype.MAX_RANGES = 500;\nexports.SearchHighlight = SearchHighlight;\n\n});\n\nace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar UndoManager = /** @class */ (function () {\n function UndoManager() {\n this.$keepRedoStack;\n this.$maxRev = 0;\n this.$fromUndo = false;\n this.$undoDepth = Infinity;\n this.reset();\n }\n UndoManager.prototype.addSession = function (session) {\n this.$session = session;\n };\n UndoManager.prototype.add = function (delta, allowMerge, session) {\n if (this.$fromUndo)\n return;\n if (delta == this.$lastDelta)\n return;\n if (!this.$keepRedoStack)\n this.$redoStack.length = 0;\n if (allowMerge === false || !this.lastDeltas) {\n this.lastDeltas = [];\n var undoStackLength = this.$undoStack.length;\n if (undoStackLength > this.$undoDepth - 1) {\n this.$undoStack.splice(0, undoStackLength - this.$undoDepth + 1);\n }\n this.$undoStack.push(this.lastDeltas);\n delta.id = this.$rev = ++this.$maxRev;\n }\n if (delta.action == \"remove\" || delta.action == \"insert\")\n this.$lastDelta = delta;\n this.lastDeltas.push(delta);\n };\n UndoManager.prototype.addSelection = function (selection, rev) {\n this.selections.push({\n value: selection,\n rev: rev || this.$rev\n });\n };\n UndoManager.prototype.startNewGroup = function () {\n this.lastDeltas = null;\n return this.$rev;\n };\n UndoManager.prototype.markIgnored = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n var stack = this.$undoStack;\n for (var i = stack.length; i--;) {\n var delta = stack[i][0];\n if (delta.id <= from)\n break;\n if (delta.id < to)\n delta.ignore = true;\n }\n this.lastDeltas = null;\n };\n UndoManager.prototype.getSelection = function (rev, after) {\n var stack = this.selections;\n for (var i = stack.length; i--;) {\n var selection = stack[i];\n if (selection.rev < rev) {\n if (after)\n selection = stack[i + 1];\n return selection;\n }\n }\n };\n UndoManager.prototype.getRevision = function () {\n return this.$rev;\n };\n UndoManager.prototype.getDeltas = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n var stack = this.$undoStack;\n var end = null, start = 0;\n for (var i = stack.length; i--;) {\n var delta = stack[i][0];\n if (delta.id < to && !end)\n end = i + 1;\n if (delta.id <= from) {\n start = i + 1;\n break;\n }\n }\n return stack.slice(start, end);\n };\n UndoManager.prototype.getChangedRanges = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n };\n UndoManager.prototype.getChangedLines = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n };\n UndoManager.prototype.undo = function (session, dontSelect) {\n this.lastDeltas = null;\n var stack = this.$undoStack;\n if (!rearrangeUndoStack(stack, stack.length))\n return;\n if (!session)\n session = this.$session;\n if (this.$redoStackBaseRev !== this.$rev && this.$redoStack.length)\n this.$redoStack = [];\n this.$fromUndo = true;\n var deltaSet = stack.pop();\n var undoSelectionRange = null;\n if (deltaSet) {\n undoSelectionRange = session.undoChanges(deltaSet, dontSelect);\n this.$redoStack.push(deltaSet);\n this.$syncRev();\n }\n this.$fromUndo = false;\n return undoSelectionRange;\n };\n UndoManager.prototype.redo = function (session, dontSelect) {\n this.lastDeltas = null;\n if (!session)\n session = this.$session;\n this.$fromUndo = true;\n if (this.$redoStackBaseRev != this.$rev) {\n var diff = this.getDeltas(this.$redoStackBaseRev, this.$rev + 1);\n rebaseRedoStack(this.$redoStack, diff);\n this.$redoStackBaseRev = this.$rev;\n this.$redoStack.forEach(function (x) {\n x[0].id = ++this.$maxRev;\n }, this);\n }\n var deltaSet = this.$redoStack.pop();\n var redoSelectionRange = null;\n if (deltaSet) {\n redoSelectionRange = session.redoChanges(deltaSet, dontSelect);\n this.$undoStack.push(deltaSet);\n this.$syncRev();\n }\n this.$fromUndo = false;\n return redoSelectionRange;\n };\n UndoManager.prototype.$syncRev = function () {\n var stack = this.$undoStack;\n var nextDelta = stack[stack.length - 1];\n var id = nextDelta && nextDelta[0].id || 0;\n this.$redoStackBaseRev = id;\n this.$rev = id;\n };\n UndoManager.prototype.reset = function () {\n this.lastDeltas = null;\n this.$lastDelta = null;\n this.$undoStack = [];\n this.$redoStack = [];\n this.$rev = 0;\n this.mark = 0;\n this.$redoStackBaseRev = this.$rev;\n this.selections = [];\n };\n UndoManager.prototype.canUndo = function () {\n return this.$undoStack.length > 0;\n };\n UndoManager.prototype.canRedo = function () {\n return this.$redoStack.length > 0;\n };\n UndoManager.prototype.bookmark = function (rev) {\n if (rev == undefined)\n rev = this.$rev;\n this.mark = rev;\n };\n UndoManager.prototype.isAtBookmark = function () {\n return this.$rev === this.mark;\n };\n UndoManager.prototype.toJSON = function () {\n return {\n $redoStack: this.$redoStack,\n $undoStack: this.$undoStack\n };\n };\n UndoManager.prototype.fromJSON = function (json) {\n this.reset();\n this.$undoStack = json.$undoStack;\n this.$redoStack = json.$redoStack;\n };\n UndoManager.prototype.$prettyPrint = function (delta) {\n if (delta)\n return stringifyDelta(delta);\n return stringifyDelta(this.$undoStack) + \"\\n---\\n\" + stringifyDelta(this.$redoStack);\n };\n return UndoManager;\n}());\nUndoManager.prototype.hasUndo = UndoManager.prototype.canUndo;\nUndoManager.prototype.hasRedo = UndoManager.prototype.canRedo;\nUndoManager.prototype.isClean = UndoManager.prototype.isAtBookmark;\nUndoManager.prototype.markClean = UndoManager.prototype.bookmark;\nfunction rearrangeUndoStack(stack, pos) {\n for (var i = pos; i--;) {\n var deltaSet = stack[i];\n if (deltaSet && !deltaSet[0].ignore) {\n while (i < pos - 1) {\n var swapped = swapGroups(stack[i], stack[i + 1]);\n stack[i] = swapped[0];\n stack[i + 1] = swapped[1];\n i++;\n }\n return true;\n }\n }\n}\nvar Range = require(\"./range\").Range;\nvar cmp = Range.comparePoints;\nvar comparePoints = Range.comparePoints;\nfunction $updateMarkers(delta) {\n var isInsert = delta.action == \"insert\";\n var start = delta.start;\n var end = delta.end;\n var rowShift = (end.row - start.row) * (isInsert ? 1 : -1);\n var colShift = (end.column - start.column) * (isInsert ? 1 : -1);\n if (isInsert)\n end = start;\n for (var i in this.marks) {\n var point = this.marks[i];\n var cmp = comparePoints(point, start);\n if (cmp < 0) {\n continue; // delta starts after the range\n }\n if (cmp === 0) {\n if (isInsert) {\n if (point.bias == 1) {\n cmp = 1;\n }\n else {\n point.bias == -1;\n continue;\n }\n }\n }\n var cmp2 = isInsert ? cmp : comparePoints(point, end);\n if (cmp2 > 0) {\n point.row += rowShift;\n point.column += point.row == end.row ? colShift : 0;\n continue;\n }\n if (!isInsert && cmp2 <= 0) {\n point.row = start.row;\n point.column = start.column;\n if (cmp2 === 0)\n point.bias = 1;\n }\n }\n}\nfunction clonePos(pos) {\n return { row: pos.row, column: pos.column };\n}\nfunction cloneDelta(d) {\n return {\n start: clonePos(d.start),\n end: clonePos(d.end),\n action: d.action,\n lines: d.lines.slice()\n };\n}\nfunction stringifyDelta(d) {\n d = d || this;\n if (Array.isArray(d)) {\n return d.map(stringifyDelta).join(\"\\n\");\n }\n var type = \"\";\n if (d.action) {\n type = d.action == \"insert\" ? \"+\" : \"-\";\n type += \"[\" + d.lines + \"]\";\n }\n else if (d.value) {\n if (Array.isArray(d.value)) {\n type = d.value.map(stringifyRange).join(\"\\n\");\n }\n else {\n type = stringifyRange(d.value);\n }\n }\n if (d.start) {\n type += stringifyRange(d);\n }\n if (d.id || d.rev) {\n type += \"\\t(\" + (d.id || d.rev) + \")\";\n }\n return type;\n}\nfunction stringifyRange(r) {\n return r.start.row + \":\" + r.start.column\n + \"=>\" + r.end.row + \":\" + r.end.column;\n}\nfunction swap(d1, d2) {\n var i1 = d1.action == \"insert\";\n var i2 = d2.action == \"insert\";\n if (i1 && i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n }\n else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n }\n else {\n return null;\n }\n }\n else if (i1 && !i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n }\n else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n }\n else {\n return null;\n }\n }\n else if (!i1 && i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n }\n else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n }\n else {\n return null;\n }\n }\n else if (!i1 && !i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n }\n else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n }\n else {\n return null;\n }\n }\n return [d2, d1];\n}\nfunction swapGroups(ds1, ds2) {\n for (var i = ds1.length; i--;) {\n for (var j = 0; j < ds2.length; j++) {\n if (!swap(ds1[i], ds2[j])) {\n while (i < ds1.length) {\n while (j--) {\n swap(ds2[j], ds1[i]);\n }\n j = ds2.length;\n i++;\n }\n return [ds1, ds2];\n }\n }\n }\n ds1.selectionBefore = ds2.selectionBefore =\n ds1.selectionAfter = ds2.selectionAfter = null;\n return [ds2, ds1];\n}\nfunction xform(d1, c1) {\n var i1 = d1.action == \"insert\";\n var i2 = c1.action == \"insert\";\n if (i1 && i2) {\n if (cmp(d1.start, c1.start) < 0) {\n shift(c1, d1, 1);\n }\n else {\n shift(d1, c1, 1);\n }\n }\n else if (i1 && !i2) {\n if (cmp(d1.start, c1.end) >= 0) {\n shift(d1, c1, -1);\n }\n else if (cmp(d1.start, c1.start) <= 0) {\n shift(c1, d1, +1);\n }\n else {\n shift(d1, Range.fromPoints(c1.start, d1.start), -1);\n shift(c1, d1, +1);\n }\n }\n else if (!i1 && i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n }\n else if (cmp(c1.start, d1.start) <= 0) {\n shift(d1, c1, +1);\n }\n else {\n shift(c1, Range.fromPoints(d1.start, c1.start), -1);\n shift(d1, c1, +1);\n }\n }\n else if (!i1 && !i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n }\n else if (cmp(c1.end, d1.start) <= 0) {\n shift(d1, c1, -1);\n }\n else {\n var before, after;\n if (cmp(d1.start, c1.start) < 0) {\n before = d1;\n d1 = splitDelta(d1, c1.start);\n }\n if (cmp(d1.end, c1.end) > 0) {\n after = splitDelta(d1, c1.end);\n }\n shiftPos(c1.end, d1.start, d1.end, -1);\n if (after && !before) {\n d1.lines = after.lines;\n d1.start = after.start;\n d1.end = after.end;\n after = d1;\n }\n return [c1, before, after].filter(Boolean);\n }\n }\n return [c1, d1];\n}\nfunction shift(d1, d2, dir) {\n shiftPos(d1.start, d2.start, d2.end, dir);\n shiftPos(d1.end, d2.start, d2.end, dir);\n}\nfunction shiftPos(pos, start, end, dir) {\n if (pos.row == (dir == 1 ? start : end).row) {\n pos.column += dir * (end.column - start.column);\n }\n pos.row += dir * (end.row - start.row);\n}\nfunction splitDelta(c, pos) {\n var lines = c.lines;\n var end = c.end;\n c.end = clonePos(pos);\n var rowsBefore = c.end.row - c.start.row;\n var otherLines = lines.splice(rowsBefore, lines.length);\n var col = rowsBefore ? pos.column : pos.column - c.start.column;\n lines.push(otherLines[0].substring(0, col));\n otherLines[0] = otherLines[0].substr(col);\n var rest = {\n start: clonePos(pos),\n end: end,\n lines: otherLines,\n action: c.action\n };\n return rest;\n}\nfunction moveDeltasByOne(redoStack, d) {\n d = cloneDelta(d);\n for (var j = redoStack.length; j--;) {\n var deltaSet = redoStack[j];\n for (var i = 0; i < deltaSet.length; i++) {\n var x = deltaSet[i];\n var xformed = xform(x, d);\n d = xformed[0];\n if (xformed.length != 2) {\n if (xformed[2]) {\n deltaSet.splice(i + 1, 1, xformed[1], xformed[2]);\n i++;\n }\n else if (!xformed[1]) {\n deltaSet.splice(i, 1);\n i--;\n }\n }\n }\n if (!deltaSet.length) {\n redoStack.splice(j, 1);\n }\n }\n return redoStack;\n}\nfunction rebaseRedoStack(redoStack, deltaSets) {\n for (var i = 0; i < deltaSets.length; i++) {\n var deltas = deltaSets[i];\n for (var j = 0; j < deltas.length; j++) {\n moveDeltasByOne(redoStack, deltas[j]);\n }\n }\n}\nexports.UndoManager = UndoManager;\n\n});\n\nace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar FoldLine = /** @class */ (function () {\n function FoldLine(foldData, folds) {\n this.foldData = foldData;\n if (Array.isArray(folds)) {\n this.folds = folds;\n }\n else {\n folds = this.folds = [folds];\n }\n var last = folds[folds.length - 1];\n this.range = new Range(folds[0].start.row, folds[0].start.column, last.end.row, last.end.column);\n this.start = this.range.start;\n this.end = this.range.end;\n this.folds.forEach(function (fold) {\n fold.setFoldLine(this);\n }, this);\n }\n FoldLine.prototype.shiftRow = function (shift) {\n this.start.row += shift;\n this.end.row += shift;\n this.folds.forEach(function (fold) {\n fold.start.row += shift;\n fold.end.row += shift;\n });\n };\n FoldLine.prototype.addFold = function (fold) {\n if (fold.sameRow) {\n if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\n throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\n }\n this.folds.push(fold);\n this.folds.sort(function (a, b) {\n return -a.range.compareEnd(b.start.row, b.start.column);\n });\n if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n }\n else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n }\n else if (fold.start.row == this.end.row) {\n this.folds.push(fold);\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n }\n else if (fold.end.row == this.start.row) {\n this.folds.unshift(fold);\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n else {\n throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\n }\n fold.foldLine = this;\n };\n FoldLine.prototype.containsRow = function (row) {\n return row >= this.start.row && row <= this.end.row;\n };\n FoldLine.prototype.walk = function (callback, endRow, endColumn) {\n var lastEnd = 0, folds = this.folds, fold, cmp, stop, isNewRow = true;\n if (endRow == null) {\n endRow = this.end.row;\n endColumn = this.end.column;\n }\n for (var i = 0; i < folds.length; i++) {\n fold = folds[i];\n cmp = fold.range.compareStart(endRow, endColumn);\n if (cmp == -1) {\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n return;\n }\n stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\n stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\n if (stop || cmp === 0) {\n return;\n }\n isNewRow = !fold.sameRow;\n lastEnd = fold.end.column;\n }\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n };\n FoldLine.prototype.getNextFoldTo = function (row, column) {\n var fold, cmp;\n for (var i = 0; i < this.folds.length; i++) {\n fold = this.folds[i];\n cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n return {\n fold: fold,\n kind: \"after\"\n };\n }\n else if (cmp === 0) {\n return {\n fold: fold,\n kind: \"inside\"\n };\n }\n }\n return null;\n };\n FoldLine.prototype.addRemoveChars = function (row, column, len) {\n var ret = this.getNextFoldTo(row, column), fold, folds;\n if (ret) {\n fold = ret.fold;\n if (ret.kind == \"inside\"\n && fold.start.column != column\n && fold.start.row != row) {\n window.console && window.console.log(row, column, fold);\n }\n else if (fold.start.row == row) {\n folds = this.folds;\n var i = folds.indexOf(fold);\n if (i === 0) {\n this.start.column += len;\n }\n for (i; i < folds.length; i++) {\n fold = folds[i];\n fold.start.column += len;\n if (!fold.sameRow) {\n return;\n }\n fold.end.column += len;\n }\n this.end.column += len;\n }\n }\n };\n FoldLine.prototype.split = function (row, column) {\n var pos = this.getNextFoldTo(row, column);\n if (!pos || pos.kind == \"inside\")\n return null;\n var fold = pos.fold;\n var folds = this.folds;\n var foldData = this.foldData;\n var i = folds.indexOf(fold);\n var foldBefore = folds[i - 1];\n this.end.row = foldBefore.end.row;\n this.end.column = foldBefore.end.column;\n folds = folds.splice(i, folds.length - i);\n var newFoldLine = new FoldLine(foldData, folds);\n foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n return newFoldLine;\n };\n FoldLine.prototype.merge = function (foldLineNext) {\n var folds = foldLineNext.folds;\n for (var i = 0; i < folds.length; i++) {\n this.addFold(folds[i]);\n }\n var foldData = this.foldData;\n foldData.splice(foldData.indexOf(foldLineNext), 1);\n };\n FoldLine.prototype.toString = function () {\n var ret = [this.range.toString() + \": [\"];\n this.folds.forEach(function (fold) {\n ret.push(\" \" + fold.toString());\n });\n ret.push(\"]\");\n return ret.join(\"\\n\");\n };\n FoldLine.prototype.idxToPosition = function (idx) {\n var lastFoldEndColumn = 0;\n for (var i = 0; i < this.folds.length; i++) {\n var fold = this.folds[i];\n idx -= fold.start.column - lastFoldEndColumn;\n if (idx < 0) {\n return {\n row: fold.start.row,\n column: fold.start.column + idx\n };\n }\n idx -= fold.placeholder.length;\n if (idx < 0) {\n return fold.start;\n }\n lastFoldEndColumn = fold.end.column;\n }\n return {\n row: this.end.row,\n column: this.end.column + idx\n };\n };\n return FoldLine;\n}());\nexports.FoldLine = FoldLine;\n\n});\n\nace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar comparePoints = Range.comparePoints;\nvar RangeList = /** @class */ (function () {\n function RangeList() {\n this.ranges = [];\n this.$bias = 1;\n }\n RangeList.prototype.pointIndex = function (pos, excludeEdges, startIndex) {\n var list = this.ranges;\n for (var i = startIndex || 0; i < list.length; i++) {\n var range = list[i];\n var cmpEnd = comparePoints(pos, range.end);\n if (cmpEnd > 0)\n continue;\n var cmpStart = comparePoints(pos, range.start);\n if (cmpEnd === 0)\n return excludeEdges && cmpStart !== 0 ? -i - 2 : i;\n if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))\n return i;\n return -i - 1;\n }\n return -i - 1;\n };\n RangeList.prototype.add = function (range) {\n var excludeEdges = !range.isEmpty();\n var startIndex = this.pointIndex(range.start, excludeEdges);\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n else\n endIndex++;\n return this.ranges.splice(startIndex, endIndex - startIndex, range);\n };\n RangeList.prototype.addList = function (list) {\n var removed = [];\n for (var i = list.length; i--;) {\n removed.push.apply(removed, this.add(list[i]));\n }\n return removed;\n };\n RangeList.prototype.substractPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges.splice(i, 1);\n };\n RangeList.prototype.merge = function () {\n var removed = [];\n var list = this.ranges;\n list = list.sort(function (a, b) {\n return comparePoints(a.start, b.start);\n });\n var next = list[0], range;\n for (var i = 1; i < list.length; i++) {\n range = next;\n next = list[i];\n var cmp = comparePoints(range.end, next.start);\n if (cmp < 0)\n continue;\n if (cmp == 0 && !range.isEmpty() && !next.isEmpty())\n continue;\n if (comparePoints(range.end, next.end) < 0) {\n range.end.row = next.end.row;\n range.end.column = next.end.column;\n }\n list.splice(i, 1);\n removed.push(next);\n next = range;\n i--;\n }\n this.ranges = list;\n return removed;\n };\n RangeList.prototype.contains = function (row, column) {\n return this.pointIndex({ row: row, column: column }) >= 0;\n };\n RangeList.prototype.containsPoint = function (pos) {\n return this.pointIndex(pos) >= 0;\n };\n RangeList.prototype.rangeAtPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges[i];\n };\n RangeList.prototype.clipRows = function (startRow, endRow) {\n var list = this.ranges;\n if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)\n return [];\n var startIndex = this.pointIndex({ row: startRow, column: 0 });\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n var endIndex = this.pointIndex({ row: endRow, column: 0 }, startIndex);\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n var clipped = [];\n for (var i = startIndex; i < endIndex; i++) {\n clipped.push(list[i]);\n }\n return clipped;\n };\n RangeList.prototype.removeAll = function () {\n return this.ranges.splice(0, this.ranges.length);\n };\n RangeList.prototype.attach = function (session) {\n if (this.session)\n this.detach();\n this.session = session;\n this.onChange = this.$onChange.bind(this);\n this.session.on('change', this.onChange);\n };\n RangeList.prototype.detach = function () {\n if (!this.session)\n return;\n this.session.removeListener('change', this.onChange);\n this.session = null;\n };\n RangeList.prototype.$onChange = function (delta) {\n var start = delta.start;\n var end = delta.end;\n var startRow = start.row;\n var endRow = end.row;\n var ranges = this.ranges;\n for (var i = 0, n = ranges.length; i < n; i++) {\n var r = ranges[i];\n if (r.end.row >= startRow)\n break;\n }\n if (delta.action == \"insert\") {\n var lineDif = endRow - startRow;\n var colDiff = -start.column + end.column;\n for (; i < n; i++) {\n var r = ranges[i];\n if (r.start.row > startRow)\n break;\n if (r.start.row == startRow && r.start.column >= start.column) {\n if (r.start.column == start.column && this.$bias <= 0) {\n }\n else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n if (r.end.row == startRow && r.end.column >= start.column) {\n if (r.end.column == start.column && this.$bias < 0) {\n continue;\n }\n if (r.end.column == start.column && colDiff > 0 && i < n - 1) {\n if (r.end.column > r.start.column && r.end.column == ranges[i + 1].start.column)\n r.end.column -= colDiff;\n }\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n }\n else {\n var lineDif = startRow - endRow;\n var colDiff = start.column - end.column;\n for (; i < n; i++) {\n var r = ranges[i];\n if (r.start.row > endRow)\n break;\n if (r.end.row < endRow\n && (startRow < r.end.row\n || startRow == r.end.row && start.column < r.end.column)) {\n r.end.row = startRow;\n r.end.column = start.column;\n }\n else if (r.end.row == endRow) {\n if (r.end.column <= end.column) {\n if (lineDif || r.end.column > start.column) {\n r.end.column = start.column;\n r.end.row = start.row;\n }\n }\n else {\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n else if (r.end.row > endRow) {\n r.end.row += lineDif;\n }\n if (r.start.row < endRow\n && (startRow < r.start.row\n || startRow == r.start.row && start.column < r.start.column)) {\n r.start.row = startRow;\n r.start.column = start.column;\n }\n else if (r.start.row == endRow) {\n if (r.start.column <= end.column) {\n if (lineDif || r.start.column > start.column) {\n r.start.column = start.column;\n r.start.row = start.row;\n }\n }\n else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n else if (r.start.row > endRow) {\n r.start.row += lineDif;\n }\n }\n }\n if (lineDif != 0 && i < n) {\n for (; i < n; i++) {\n var r = ranges[i];\n r.start.row += lineDif;\n r.end.row += lineDif;\n }\n }\n };\n return RangeList;\n}());\nRangeList.prototype.comparePoints = comparePoints;\nexports.RangeList = RangeList;\n\n});\n\nace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range_list\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar RangeList = require(\"../range_list\").RangeList;\nvar Fold = /** @class */ (function (_super) {\n __extends(Fold, _super);\n function Fold(range, placeholder) {\n var _this = _super.call(this) || this;\n _this.foldLine = null;\n _this.placeholder = placeholder;\n _this.range = range;\n _this.start = range.start;\n _this.end = range.end;\n _this.sameRow = range.start.row == range.end.row;\n _this.subFolds = _this.ranges = [];\n return _this;\n }\n Fold.prototype.toString = function () {\n return '\"' + this.placeholder + '\" ' + this.range.toString();\n };\n Fold.prototype.setFoldLine = function (foldLine) {\n this.foldLine = foldLine;\n this.subFolds.forEach(function (fold) {\n fold.setFoldLine(foldLine);\n });\n };\n Fold.prototype.clone = function () {\n var range = this.range.clone();\n var fold = new Fold(range, this.placeholder);\n this.subFolds.forEach(function (subFold) {\n fold.subFolds.push(subFold.clone());\n });\n fold.collapseChildren = this.collapseChildren;\n return fold;\n };\n Fold.prototype.addSubFold = function (fold) {\n if (this.range.isEqual(fold))\n return;\n consumeRange(fold, this.start);\n var row = fold.start.row, column = fold.start.column;\n for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\n cmp = this.subFolds[i].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n var afterStart = this.subFolds[i];\n var firstConsumed = 0;\n if (cmp == 0) {\n if (afterStart.range.containsRange(fold))\n return afterStart.addSubFold(fold);\n else\n firstConsumed = 1;\n }\n var row = fold.range.end.row, column = fold.range.end.column;\n for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\n cmp = this.subFolds[j].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n if (cmp == 0)\n j++;\n var consumedFolds = this.subFolds.splice(i, j - i, fold);\n var last = cmp == 0 ? consumedFolds.length - 1 : consumedFolds.length;\n for (var k = firstConsumed; k < last; k++) {\n fold.addSubFold(consumedFolds[k]);\n }\n fold.setFoldLine(this.foldLine);\n return fold;\n };\n Fold.prototype.restoreRange = function (range) {\n return restoreRange(range, this.start);\n };\n return Fold;\n}(RangeList));\nfunction consumePoint(point, anchor) {\n point.row -= anchor.row;\n if (point.row == 0)\n point.column -= anchor.column;\n}\nfunction consumeRange(range, anchor) {\n consumePoint(range.start, anchor);\n consumePoint(range.end, anchor);\n}\nfunction restorePoint(point, anchor) {\n if (point.row == 0)\n point.column += anchor.column;\n point.row += anchor.row;\n}\nfunction restoreRange(range, anchor) {\n restorePoint(range.start, anchor);\n restorePoint(range.end, anchor);\n}\nexports.Fold = Fold;\n\n});\n\nace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\",\"ace/mouse/mouse_event\"], function(require, exports, module){// @ts-nocheck\n\"use strict\";\nvar Range = require(\"../range\").Range;\nvar FoldLine = require(\"./fold_line\").FoldLine;\nvar Fold = require(\"./fold\").Fold;\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar MouseEvent = require(\"../mouse/mouse_event\").MouseEvent;\nfunction Folding() {\n this.getFoldAt = function (row, column, side) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine)\n return null;\n var folds = foldLine.folds;\n for (var i = 0; i < folds.length; i++) {\n var range = folds[i].range;\n if (range.contains(row, column)) {\n if (side == 1 && range.isEnd(row, column) && !range.isEmpty()) {\n continue;\n }\n else if (side == -1 && range.isStart(row, column) && !range.isEmpty()) {\n continue;\n }\n return folds[i];\n }\n }\n };\n this.getFoldsInRange = function (range) {\n var start = range.start;\n var end = range.end;\n var foldLines = this.$foldData;\n var foundFolds = [];\n start.column += 1;\n end.column -= 1;\n for (var i = 0; i < foldLines.length; i++) {\n var cmp = foldLines[i].range.compareRange(range);\n if (cmp == 2) {\n continue;\n }\n else if (cmp == -2) {\n break;\n }\n var folds = foldLines[i].folds;\n for (var j = 0; j < folds.length; j++) {\n var fold = folds[j];\n cmp = fold.range.compareRange(range);\n if (cmp == -2) {\n break;\n }\n else if (cmp == 2) {\n continue;\n }\n else \n if (cmp == 42) {\n break;\n }\n foundFolds.push(fold);\n }\n }\n start.column -= 1;\n end.column += 1;\n return foundFolds;\n };\n this.getFoldsInRangeList = function (ranges) {\n if (Array.isArray(ranges)) {\n var folds = [];\n ranges.forEach(function (range) {\n folds = folds.concat(this.getFoldsInRange(range));\n }, this);\n }\n else {\n var folds = this.getFoldsInRange(ranges);\n }\n return folds;\n };\n this.getAllFolds = function () {\n var folds = [];\n var foldLines = this.$foldData;\n for (var i = 0; i < foldLines.length; i++)\n for (var j = 0; j < foldLines[i].folds.length; j++)\n folds.push(foldLines[i].folds[j]);\n return folds;\n };\n this.getFoldStringAt = function (row, column, trim, foldLine) {\n foldLine = foldLine || this.getFoldLine(row);\n if (!foldLine)\n return null;\n var lastFold = {\n end: { column: 0 }\n };\n var str, fold;\n for (var i = 0; i < foldLine.folds.length; i++) {\n fold = foldLine.folds[i];\n var cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n str = this\n .getLine(fold.start.row)\n .substring(lastFold.end.column, fold.start.column);\n break;\n }\n else if (cmp === 0) {\n return null;\n }\n lastFold = fold;\n }\n if (!str)\n str = this.getLine(fold.start.row).substring(lastFold.end.column);\n if (trim == -1)\n return str.substring(0, column - lastFold.end.column);\n else if (trim == 1)\n return str.substring(column - lastFold.end.column);\n else\n return str;\n };\n this.getFoldLine = function (docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\n return foldLine;\n }\n else if (foldLine.end.row > docRow) {\n return null;\n }\n }\n return null;\n };\n this.getNextFoldLine = function (docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.end.row >= docRow) {\n return foldLine;\n }\n }\n return null;\n };\n this.getFoldedRowCount = function (first, last) {\n var foldData = this.$foldData, rowCount = last - first + 1;\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i], end = foldLine.end.row, start = foldLine.start.row;\n if (end >= last) {\n if (start < last) {\n if (start >= first)\n rowCount -= last - start;\n else\n rowCount = 0; // in one fold\n }\n break;\n }\n else if (end >= first) {\n if (start >= first) // fold inside range\n rowCount -= end - start;\n else\n rowCount -= end - first + 1;\n }\n }\n return rowCount;\n };\n this.$addFoldLine = function (foldLine) {\n this.$foldData.push(foldLine);\n this.$foldData.sort(function (a, b) {\n return a.start.row - b.start.row;\n });\n return foldLine;\n };\n this.addFold = function (placeholder, range) {\n var foldData = this.$foldData;\n var added = false;\n var fold;\n if (placeholder instanceof Fold)\n fold = placeholder;\n else {\n fold = new Fold(range, placeholder);\n fold.collapseChildren = range.collapseChildren;\n }\n this.$clipRangeToDocument(fold.range);\n var startRow = fold.start.row;\n var startColumn = fold.start.column;\n var endRow = fold.end.row;\n var endColumn = fold.end.column;\n var startFold = this.getFoldAt(startRow, startColumn, 1);\n var endFold = this.getFoldAt(endRow, endColumn, -1);\n if (startFold && endFold == startFold)\n return startFold.addSubFold(fold);\n if (startFold && !startFold.range.isStart(startRow, startColumn))\n this.removeFold(startFold);\n if (endFold && !endFold.range.isEnd(endRow, endColumn))\n this.removeFold(endFold);\n var folds = this.getFoldsInRange(fold.range);\n if (folds.length > 0) {\n this.removeFolds(folds);\n if (!fold.collapseChildren) {\n folds.forEach(function (subFold) {\n fold.addSubFold(subFold);\n });\n }\n }\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (endRow == foldLine.start.row) {\n foldLine.addFold(fold);\n added = true;\n break;\n }\n else if (startRow == foldLine.end.row) {\n foldLine.addFold(fold);\n added = true;\n if (!fold.sameRow) {\n var foldLineNext = foldData[i + 1];\n if (foldLineNext && foldLineNext.start.row == endRow) {\n foldLine.merge(foldLineNext);\n break;\n }\n }\n break;\n }\n else if (endRow <= foldLine.start.row) {\n break;\n }\n }\n if (!added)\n foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n if (this.$useWrapMode)\n this.$updateWrapData(foldLine.start.row, foldLine.start.row);\n else\n this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"add\" });\n return fold;\n };\n this.addFolds = function (folds) {\n folds.forEach(function (fold) {\n this.addFold(fold);\n }, this);\n };\n this.removeFold = function (fold) {\n var foldLine = fold.foldLine;\n var startRow = foldLine.start.row;\n var endRow = foldLine.end.row;\n var foldLines = this.$foldData;\n var folds = foldLine.folds;\n if (folds.length == 1) {\n foldLines.splice(foldLines.indexOf(foldLine), 1);\n }\n else \n if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\n folds.pop();\n foldLine.end.row = folds[folds.length - 1].end.row;\n foldLine.end.column = folds[folds.length - 1].end.column;\n }\n else \n if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\n folds.shift();\n foldLine.start.row = folds[0].start.row;\n foldLine.start.column = folds[0].start.column;\n }\n else \n if (fold.sameRow) {\n folds.splice(folds.indexOf(fold), 1);\n }\n else \n {\n var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\n folds = newFoldLine.folds;\n folds.shift();\n newFoldLine.start.row = folds[0].start.row;\n newFoldLine.start.column = folds[0].start.column;\n }\n if (!this.$updating) {\n if (this.$useWrapMode)\n this.$updateWrapData(startRow, endRow);\n else\n this.$updateRowLengthCache(startRow, endRow);\n }\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"remove\" });\n };\n this.removeFolds = function (folds) {\n var cloneFolds = [];\n for (var i = 0; i < folds.length; i++) {\n cloneFolds.push(folds[i]);\n }\n cloneFolds.forEach(function (fold) {\n this.removeFold(fold);\n }, this);\n this.$modified = true;\n };\n this.expandFold = function (fold) {\n this.removeFold(fold);\n fold.subFolds.forEach(function (subFold) {\n fold.restoreRange(subFold);\n this.addFold(subFold);\n }, this);\n if (fold.collapseChildren > 0) {\n this.foldAll(fold.start.row + 1, fold.end.row, fold.collapseChildren - 1);\n }\n fold.subFolds = [];\n };\n this.expandFolds = function (folds) {\n folds.forEach(function (fold) {\n this.expandFold(fold);\n }, this);\n };\n this.unfold = function (location, expandInner) {\n var range, folds;\n if (location == null) {\n range = new Range(0, 0, this.getLength(), 0);\n if (expandInner == null)\n expandInner = true;\n }\n else if (typeof location == \"number\") {\n range = new Range(location, 0, location, this.getLine(location).length);\n }\n else if (\"row\" in location) {\n range = Range.fromPoints(location, location);\n }\n else if (Array.isArray(location)) {\n folds = [];\n location.forEach(function (range) {\n folds = folds.concat(this.unfold(range));\n }, this);\n return folds;\n }\n else {\n range = location;\n }\n folds = this.getFoldsInRangeList(range);\n var outermostFolds = folds;\n while (folds.length == 1\n && Range.comparePoints(folds[0].start, range.start) < 0\n && Range.comparePoints(folds[0].end, range.end) > 0) {\n this.expandFolds(folds);\n folds = this.getFoldsInRangeList(range);\n }\n if (expandInner != false) {\n this.removeFolds(folds);\n }\n else {\n this.expandFolds(folds);\n }\n if (outermostFolds.length)\n return outermostFolds;\n };\n this.isRowFolded = function (docRow, startFoldRow) {\n return !!this.getFoldLine(docRow, startFoldRow);\n };\n this.getRowFoldEnd = function (docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.end.row : docRow;\n };\n this.getRowFoldStart = function (docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.start.row : docRow;\n };\n this.getFoldDisplayLine = function (foldLine, endRow, endColumn, startRow, startColumn) {\n if (startRow == null)\n startRow = foldLine.start.row;\n if (startColumn == null)\n startColumn = 0;\n if (endRow == null)\n endRow = foldLine.end.row;\n if (endColumn == null)\n endColumn = this.getLine(endRow).length;\n var doc = this.doc;\n var textLine = \"\";\n foldLine.walk(function (placeholder, row, column, lastColumn) {\n if (row < startRow)\n return;\n if (row == startRow) {\n if (column < startColumn)\n return;\n lastColumn = Math.max(startColumn, lastColumn);\n }\n if (placeholder != null) {\n textLine += placeholder;\n }\n else {\n textLine += doc.getLine(row).substring(lastColumn, column);\n }\n }, endRow, endColumn);\n return textLine;\n };\n this.getDisplayLine = function (row, endColumn, startRow, startColumn) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine) {\n var line;\n line = this.doc.getLine(row);\n return line.substring(startColumn || 0, endColumn || line.length);\n }\n else {\n return this.getFoldDisplayLine(foldLine, row, endColumn, startRow, startColumn);\n }\n };\n this.$cloneFoldData = function () {\n var fd = [];\n fd = this.$foldData.map(function (foldLine) {\n var folds = foldLine.folds.map(function (fold) {\n return fold.clone();\n });\n return new FoldLine(fd, folds);\n });\n return fd;\n };\n this.toggleFold = function (tryToUnfold) {\n var selection = this.selection;\n var range = selection.getRange();\n var fold;\n var bracketPos;\n if (range.isEmpty()) {\n var cursor = range.start;\n fold = this.getFoldAt(cursor.row, cursor.column);\n if (fold) {\n this.expandFold(fold);\n return;\n }\n else if (bracketPos = this.findMatchingBracket(cursor)) {\n if (range.comparePoint(bracketPos) == 1) {\n range.end = bracketPos;\n }\n else {\n range.start = bracketPos;\n range.start.column++;\n range.end.column--;\n }\n }\n else if (bracketPos = this.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 })) {\n if (range.comparePoint(bracketPos) == 1)\n range.end = bracketPos;\n else\n range.start = bracketPos;\n range.start.column++;\n }\n else {\n range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\n }\n }\n else {\n var folds = this.getFoldsInRange(range);\n if (tryToUnfold && folds.length) {\n this.expandFolds(folds);\n return;\n }\n else if (folds.length == 1) {\n fold = folds[0];\n }\n }\n if (!fold)\n fold = this.getFoldAt(range.start.row, range.start.column);\n if (fold && fold.range.toString() == range.toString()) {\n this.expandFold(fold);\n return;\n }\n var placeholder = \"...\";\n if (!range.isMultiLine()) {\n placeholder = this.getTextRange(range);\n if (placeholder.length < 4)\n return;\n placeholder = placeholder.trim().substring(0, 2) + \"..\";\n }\n this.addFold(placeholder, range);\n };\n this.getCommentFoldRange = function (row, column, dir) {\n var iterator = new TokenIterator(this, row, column);\n var token = iterator.getCurrentToken();\n var type = token && token.type;\n if (token && /^comment|string/.test(type)) {\n type = type.match(/comment|string/)[0];\n if (type == \"comment\")\n type += \"|doc-start|\\\\.doc\";\n var re = new RegExp(type);\n var range = new Range();\n if (dir != 1) {\n do {\n token = iterator.stepBackward();\n } while (token && re.test(token.type) && !/^comment.end/.test(token.type));\n token = iterator.stepForward();\n }\n range.start.row = iterator.getCurrentTokenRow();\n range.start.column = iterator.getCurrentTokenColumn() + (/^comment.start/.test(token.type) ? token.value.length : 2);\n iterator = new TokenIterator(this, row, column);\n if (dir != -1) {\n var lastRow = -1;\n do {\n token = iterator.stepForward();\n if (lastRow == -1) {\n var state = this.getState(iterator.$row);\n if (!re.test(state))\n lastRow = iterator.$row;\n }\n else if (iterator.$row > lastRow) {\n break;\n }\n } while (token && re.test(token.type) && !/^comment.start/.test(token.type));\n token = iterator.stepBackward();\n }\n else\n token = iterator.getCurrentToken();\n range.end.row = iterator.getCurrentTokenRow();\n range.end.column = iterator.getCurrentTokenColumn();\n if (!/^comment.end/.test(token.type)) {\n range.end.column += token.value.length - 2;\n }\n return range;\n }\n };\n this.foldAll = function (startRow, endRow, depth, test) {\n if (depth == undefined)\n depth = 100000; // JSON.stringify doesn't hanle Infinity\n var foldWidgets = this.foldWidgets;\n if (!foldWidgets)\n return; // mode doesn't support folding\n endRow = endRow || this.getLength();\n startRow = startRow || 0;\n for (var row = startRow; row < endRow; row++) {\n if (foldWidgets[row] == null)\n foldWidgets[row] = this.getFoldWidget(row);\n if (foldWidgets[row] != \"start\")\n continue;\n if (test && !test(row))\n continue;\n var range = this.getFoldWidgetRange(row);\n if (range && range.isMultiLine()\n && range.end.row <= endRow\n && range.start.row >= startRow) {\n row = range.end.row;\n range.collapseChildren = depth;\n this.addFold(\"...\", range);\n }\n }\n };\n this.foldToLevel = function (level) {\n this.foldAll();\n while (level-- > 0)\n this.unfold(null, false);\n };\n this.foldAllComments = function () {\n var session = this;\n this.foldAll(null, null, null, function (row) {\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token.type == \"text\" && /^\\s+$/.test(token.value))\n continue;\n if (/comment/.test(token.type))\n return true;\n return false;\n }\n });\n };\n this.$foldStyles = {\n \"manual\": 1,\n \"markbegin\": 1,\n \"markbeginend\": 1\n };\n this.$foldStyle = \"markbegin\";\n this.setFoldStyle = function (style) {\n if (!this.$foldStyles[style])\n throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n if (this.$foldStyle == style)\n return;\n this.$foldStyle = style;\n if (style == \"manual\")\n this.unfold();\n var mode = this.$foldMode;\n this.$setFolding(null);\n this.$setFolding(mode);\n };\n this.$setFolding = function (foldMode) {\n if (this.$foldMode == foldMode)\n return;\n this.$foldMode = foldMode;\n this.off('change', this.$updateFoldWidgets);\n this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n this._signal(\"changeAnnotation\");\n if (!foldMode || this.$foldStyle == \"manual\") {\n this.foldWidgets = null;\n return;\n }\n this.foldWidgets = [];\n this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\n this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\n this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\n this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\n this.on('change', this.$updateFoldWidgets);\n this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n };\n this.getParentFoldRangeData = function (row, ignoreCurrent) {\n var fw = this.foldWidgets;\n if (!fw || (ignoreCurrent && fw[row]))\n return {};\n var i = row - 1, firstRange;\n while (i >= 0) {\n var c = fw[i];\n if (c == null)\n c = fw[i] = this.getFoldWidget(i);\n if (c == \"start\") {\n var range = this.getFoldWidgetRange(i);\n if (!firstRange)\n firstRange = range;\n if (range && range.end.row >= row)\n break;\n }\n i--;\n }\n return {\n range: i !== -1 && range,\n firstRange: firstRange\n };\n };\n this.onFoldWidgetClick = function (row, e) {\n if (e instanceof MouseEvent)\n e = e.domEvent;\n var options = {\n children: e.shiftKey,\n all: e.ctrlKey || e.metaKey,\n siblings: e.altKey\n };\n var range = this.$toggleFoldWidget(row, options);\n if (!range) {\n var el = (e.target || e.srcElement);\n if (el && /ace_fold-widget/.test(el.className))\n el.className += \" ace_invalid\";\n }\n };\n this.$toggleFoldWidget = function (row, options) {\n if (!this.getFoldWidget)\n return;\n var type = this.getFoldWidget(row);\n var line = this.getLine(row);\n var dir = type === \"end\" ? -1 : 1;\n var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n if (fold) {\n if (options.children || options.all)\n this.removeFold(fold);\n else\n this.expandFold(fold);\n return fold;\n }\n var range = this.getFoldWidgetRange(row, true);\n if (range && !range.isMultiLine()) {\n fold = this.getFoldAt(range.start.row, range.start.column, 1);\n if (fold && range.isEqual(fold.range)) {\n this.removeFold(fold);\n return fold;\n }\n }\n if (options.siblings) {\n var data = this.getParentFoldRangeData(row);\n if (data.range) {\n var startRow = data.range.start.row + 1;\n var endRow = data.range.end.row;\n }\n this.foldAll(startRow, endRow, options.all ? 10000 : 0);\n }\n else if (options.children) {\n endRow = range ? range.end.row : this.getLength();\n this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\n }\n else if (range) {\n if (options.all)\n range.collapseChildren = 10000;\n this.addFold(\"...\", range);\n }\n return range;\n };\n this.toggleFoldWidget = function (toggleParent) {\n var row = this.selection.getCursor().row;\n row = this.getRowFoldStart(row);\n var range = this.$toggleFoldWidget(row, {});\n if (range)\n return;\n var data = this.getParentFoldRangeData(row, true);\n range = data.range || data.firstRange;\n if (range) {\n row = range.start.row;\n var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n if (fold) {\n this.removeFold(fold);\n }\n else {\n this.addFold(\"...\", range);\n }\n }\n };\n this.updateFoldWidgets = function (delta) {\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n if (len === 0) {\n this.foldWidgets[firstRow] = null;\n }\n else if (delta.action == 'remove') {\n this.foldWidgets.splice(firstRow, len + 1, null);\n }\n else {\n var args = Array(len + 1);\n args.unshift(firstRow, 1);\n this.foldWidgets.splice.apply(this.foldWidgets, args);\n }\n };\n this.tokenizerUpdateFoldWidgets = function (e) {\n var rows = e.data;\n if (rows.first != rows.last) {\n if (this.foldWidgets.length > rows.first)\n this.foldWidgets.splice(rows.first, this.foldWidgets.length);\n }\n };\n}\nexports.Folding = Folding;\n\n});\n\nace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\nfunction BracketMatch() {\n this.findMatchingBracket = function (position, chr) {\n if (position.column == 0)\n return null;\n var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column - 1);\n if (charBeforeCursor == \"\")\n return null;\n var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match)\n return null;\n if (match[1])\n return this.$findClosingBracket(match[1], position);\n else\n return this.$findOpeningBracket(match[2], position);\n };\n this.getBracketRange = function (pos) {\n var line = this.getLine(pos.row);\n var before = true, range;\n var chr = line.charAt(pos.column - 1);\n var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match) {\n chr = line.charAt(pos.column);\n pos = { row: pos.row, column: pos.column + 1 };\n match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n before = false;\n }\n if (!match)\n return null;\n if (match[1]) {\n var bracketPos = this.$findClosingBracket(match[1], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(pos, bracketPos);\n if (!before) {\n range.end.column++;\n range.start.column--;\n }\n range.cursor = range.end;\n }\n else {\n var bracketPos = this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(bracketPos, pos);\n if (!before) {\n range.start.column++;\n range.end.column--;\n }\n range.cursor = range.start;\n }\n return range;\n };\n this.getMatchingBracketRanges = function (pos, isBackwards) {\n var line = this.getLine(pos.row);\n var bracketsRegExp = /([\\(\\[\\{])|([\\)\\]\\}])/;\n var chr = !isBackwards && line.charAt(pos.column - 1);\n var match = chr && chr.match(bracketsRegExp);\n if (!match) {\n chr = (isBackwards === undefined || isBackwards) && line.charAt(pos.column);\n pos = {\n row: pos.row,\n column: pos.column + 1\n };\n match = chr && chr.match(bracketsRegExp);\n }\n if (!match)\n return null;\n var startRange = new Range(pos.row, pos.column - 1, pos.row, pos.column);\n var bracketPos = match[1] ? this.$findClosingBracket(match[1], pos)\n : this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return [startRange];\n var endRange = new Range(bracketPos.row, bracketPos.column, bracketPos.row, bracketPos.column + 1);\n return [startRange, endRange];\n };\n this.$brackets = {\n \")\": \"(\",\n \"(\": \")\",\n \"]\": \"[\",\n \"[\": \"]\",\n \"{\": \"}\",\n \"}\": \"{\",\n \"<\": \">\",\n \">\": \"<\"\n };\n this.$findOpeningBracket = function (bracket, position, typeRe) {\n var openBracket = this.$brackets[bracket];\n var depth = 1;\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n if (!typeRe) {\n typeRe = new RegExp(\"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\")\n .replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\")\n .replace(/-close\\b/, \"-(close|open)\")\n + \")+\");\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n var value = token.value;\n while (true) {\n while (valueIndex >= 0) {\n var chr = value.charAt(valueIndex);\n if (chr == openBracket) {\n depth -= 1;\n if (depth == 0) {\n return { row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn() };\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex -= 1;\n }\n do {\n token = iterator.stepBackward();\n } while (token && !typeRe.test(token.type));\n if (token == null)\n break;\n value = token.value;\n valueIndex = value.length - 1;\n }\n return null;\n };\n this.$findClosingBracket = function (bracket, position, typeRe) {\n var closingBracket = this.$brackets[bracket];\n var depth = 1;\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n if (!typeRe) {\n typeRe = new RegExp(\"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\")\n .replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\")\n .replace(/-open\\b/, \"-(close|open)\")\n + \")+\");\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn();\n while (true) {\n var value = token.value;\n var valueLength = value.length;\n while (valueIndex < valueLength) {\n var chr = value.charAt(valueIndex);\n if (chr == closingBracket) {\n depth -= 1;\n if (depth == 0) {\n return { row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn() };\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex += 1;\n }\n do {\n token = iterator.stepForward();\n } while (token && !typeRe.test(token.type));\n if (token == null)\n break;\n valueIndex = 0;\n }\n return null;\n };\n this.getMatchingTags = function (pos) {\n var iterator = new TokenIterator(this, pos.row, pos.column);\n var token = this.$findTagName(iterator);\n if (!token)\n return;\n var prevToken = iterator.stepBackward();\n if (prevToken.value === '<') {\n return this.$findClosingTag(iterator, token);\n }\n else {\n return this.$findOpeningTag(iterator, token);\n }\n };\n this.$findTagName = function (iterator) {\n var token = iterator.getCurrentToken();\n var found = false;\n var backward = false;\n if (token && token.type.indexOf('tag-name') === -1) {\n do {\n if (backward)\n token = iterator.stepBackward();\n else\n token = iterator.stepForward();\n if (token) {\n if (token.value === \"/>\") {\n backward = true;\n }\n else if (token.type.indexOf('tag-name') !== -1) {\n found = true;\n }\n }\n } while (token && !found);\n }\n return token;\n };\n this.$findClosingTag = function (iterator, token) {\n var prevToken;\n var currentTag = token.value;\n var tag = token.value;\n var depth = 0;\n var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1);\n token = iterator.stepForward();\n var openTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n var foundOpenTagEnd = false;\n do {\n prevToken = token;\n token = iterator.stepForward();\n if (token) {\n if (token.value === '>' && !foundOpenTagEnd) {\n var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for `>`\n foundOpenTagEnd = true;\n }\n if (token.type.indexOf('tag-name') !== -1) {\n currentTag = token.value;\n if (tag === currentTag) {\n if (prevToken.value === '<') {\n depth++;\n }\n else if (prevToken.value === '</') {\n depth--;\n if (depth < 0) { //found closing tag\n iterator.stepBackward();\n var closeTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 2); //Range for </\n token = iterator.stepForward();\n var closeTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n token = iterator.stepForward();\n if (token && token.value === '>') {\n var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n }\n else {\n return;\n }\n }\n }\n }\n }\n else if (tag === currentTag && token.value === '/>') { // self-closing tag\n depth--;\n if (depth < 0) { //found self-closing tag end\n var closeTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 2);\n var closeTagName = closeTagStart;\n var closeTagEnd = closeTagName;\n var openTagEnd = new Range(openTagName.end.row, openTagName.end.column, openTagName.end.row, openTagName.end.column + 1);\n }\n }\n }\n } while (token && depth >= 0);\n if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) {\n return {\n openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column),\n closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column),\n openTagName: openTagName,\n closeTagName: closeTagName\n };\n }\n };\n this.$findOpeningTag = function (iterator, token) {\n var prevToken = iterator.getCurrentToken();\n var tag = token.value;\n var depth = 0;\n var startRow = iterator.getCurrentTokenRow();\n var startColumn = iterator.getCurrentTokenColumn();\n var endColumn = startColumn + 2;\n var closeTagStart = new Range(startRow, startColumn, startRow, endColumn); //Range for </\n iterator.stepForward();\n var closeTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n token = iterator.stepForward();\n if (!token || token.value !== \">\")\n return;\n var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n iterator.stepBackward();\n iterator.stepBackward();\n do {\n token = prevToken;\n startRow = iterator.getCurrentTokenRow();\n startColumn = iterator.getCurrentTokenColumn();\n endColumn = startColumn + token.value.length;\n prevToken = iterator.stepBackward();\n if (token) {\n if (token.type.indexOf('tag-name') !== -1) {\n if (tag === token.value) {\n if (prevToken.value === '<') {\n depth++;\n if (depth > 0) { //found opening tag\n var openTagName = new Range(startRow, startColumn, startRow, endColumn);\n var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for <\n do {\n token = iterator.stepForward();\n } while (token && token.value !== '>');\n var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n }\n }\n else if (prevToken.value === '</') {\n depth--;\n }\n }\n }\n else if (token.value === '/>') { // self-closing tag\n var stepCount = 0;\n var tmpToken = prevToken;\n while (tmpToken) {\n if (tmpToken.type.indexOf('tag-name') !== -1 && tmpToken.value === tag) {\n depth--;\n break;\n }\n else if (tmpToken.value === '<') {\n break;\n }\n tmpToken = iterator.stepBackward();\n stepCount++;\n }\n for (var i = 0; i < stepCount; i++) {\n iterator.stepForward();\n }\n }\n }\n } while (prevToken && depth <= 0);\n if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) {\n return {\n openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column),\n closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column),\n openTagName: openTagName,\n closeTagName: closeTagName\n };\n }\n };\n}\nexports.BracketMatch = BracketMatch;\n\n});\n\nace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/bidihandler\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/undomanager\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar BidiHandler = require(\"./bidihandler\").BidiHandler;\nvar config = require(\"./config\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Selection = require(\"./selection\").Selection;\nvar TextMode = require(\"./mode/text\").Mode;\nvar Range = require(\"./range\").Range;\nvar Document = require(\"./document\").Document;\nvar BackgroundTokenizer = require(\"./background_tokenizer\").BackgroundTokenizer;\nvar SearchHighlight = require(\"./search_highlight\").SearchHighlight;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar EditSession = /** @class */ (function () {\n function EditSession(text, mode) { this.doc;\n this.$breakpoints = [];\n this.$decorations = [];\n this.$frontMarkers = {};\n this.$backMarkers = {};\n this.$markerId = 1;\n this.$undoSelect = true;\n this.$foldData = [];\n this.id = \"session\" + (++EditSession.$uid);\n this.$foldData.toString = function () {\n return this.join(\"\\n\");\n };\n this.bgTokenizer = new BackgroundTokenizer((new TextMode()).getTokenizer(), this);\n var _self = this;\n this.bgTokenizer.on(\"update\", function (e) {\n _self._signal(\"tokenizerUpdate\", e);\n });\n this.on(\"changeFold\", this.onChangeFold.bind(this));\n this.$onChange = this.onChange.bind(this);\n if (typeof text != \"object\" || !text.getLine)\n text = new Document(/**@type{string}*/ (text));\n this.setDocument(text);\n this.selection = new Selection(this);\n this.$bidiHandler = new BidiHandler(this);\n config.resetOptions(this);\n this.setMode(mode);\n config._signal(\"session\", this);\n this.destroyed = false;\n }\n EditSession.prototype.setDocument = function (doc) {\n if (this.doc)\n this.doc.off(\"change\", this.$onChange);\n this.doc = doc;\n doc.on(\"change\", this.$onChange, true);\n this.bgTokenizer.setDocument(this.getDocument());\n this.resetCaches();\n };\n EditSession.prototype.getDocument = function () {\n return this.doc;\n };\n EditSession.prototype.$resetRowCache = function (docRow) {\n if (!docRow) {\n this.$docRowCache = [];\n this.$screenRowCache = [];\n return;\n }\n var l = this.$docRowCache.length;\n var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\n if (l > i) {\n this.$docRowCache.splice(i, l);\n this.$screenRowCache.splice(i, l);\n }\n };\n EditSession.prototype.$getRowCacheIndex = function (cacheArray, val) {\n var low = 0;\n var hi = cacheArray.length - 1;\n while (low <= hi) {\n var mid = (low + hi) >> 1;\n var c = cacheArray[mid];\n if (val > c)\n low = mid + 1;\n else if (val < c)\n hi = mid - 1;\n else\n return mid;\n }\n return low - 1;\n };\n EditSession.prototype.resetCaches = function () {\n this.$modified = true;\n this.$wrapData = [];\n this.$rowLengthCache = [];\n this.$resetRowCache(0);\n if (!this.destroyed)\n this.bgTokenizer.start(0);\n };\n EditSession.prototype.onChangeFold = function (e) {\n var fold = e.data;\n this.$resetRowCache(fold.start.row);\n };\n EditSession.prototype.onChange = function (delta) {\n this.$modified = true;\n this.$bidiHandler.onChange(delta);\n this.$resetRowCache(delta.start.row);\n var removedFolds = this.$updateInternalDataOnChange(delta);\n if (!this.$fromUndo && this.$undoManager) {\n if (removedFolds && removedFolds.length) {\n this.$undoManager.add({\n action: \"removeFolds\",\n folds: removedFolds\n }, this.mergeUndoDeltas);\n this.mergeUndoDeltas = true;\n }\n this.$undoManager.add(delta, this.mergeUndoDeltas);\n this.mergeUndoDeltas = true;\n this.$informUndoManager.schedule();\n }\n this.bgTokenizer.$updateOnChange(delta);\n this._signal(\"change\", delta);\n };\n EditSession.prototype.setValue = function (text) {\n this.doc.setValue(text);\n this.selection.moveTo(0, 0);\n this.$resetRowCache(0);\n this.setUndoManager(this.$undoManager);\n this.getUndoManager().reset();\n };\n EditSession.fromJSON = function (session) {\n if (typeof session == \"string\")\n session = JSON.parse(session);\n var undoManager = new UndoManager();\n undoManager.$undoStack = session.history.undo;\n undoManager.$redoStack = session.history.redo;\n undoManager.mark = session.history.mark;\n undoManager.$rev = session.history.rev;\n var editSession = new EditSession(session.value);\n session.folds.forEach(function (fold) {\n editSession.addFold(\"...\", Range.fromPoints(fold.start, fold.end));\n });\n editSession.setAnnotations(session.annotations);\n editSession.setBreakpoints(session.breakpoints);\n editSession.setMode(session.mode);\n editSession.setScrollLeft(session.scrollLeft);\n editSession.setScrollTop(session.scrollTop);\n editSession.setUndoManager(undoManager);\n editSession.selection.fromJSON(session.selection);\n return editSession;\n };\n EditSession.prototype.toJSON = function () {\n return {\n annotations: this.$annotations,\n breakpoints: this.$breakpoints,\n folds: this.getAllFolds().map(function (fold) {\n return fold.range;\n }),\n history: this.getUndoManager(),\n mode: this.$mode.$id,\n scrollLeft: this.$scrollLeft,\n scrollTop: this.$scrollTop,\n selection: this.selection.toJSON(),\n value: this.doc.getValue()\n };\n };\n EditSession.prototype.toString = function () {\n return this.doc.getValue();\n };\n EditSession.prototype.getSelection = function () {\n return this.selection;\n };\n EditSession.prototype.getState = function (row) {\n return this.bgTokenizer.getState(row);\n };\n EditSession.prototype.getTokens = function (row) {\n return this.bgTokenizer.getTokens(row);\n };\n EditSession.prototype.getTokenAt = function (row, column) {\n var tokens = this.bgTokenizer.getTokens(row);\n var token, c = 0;\n if (column == null) {\n var i = tokens.length - 1;\n c = this.getLine(row).length;\n }\n else {\n for (var i = 0; i < tokens.length; i++) {\n c += tokens[i].value.length;\n if (c >= column)\n break;\n }\n }\n token = tokens[i];\n if (!token)\n return null;\n token.index = i;\n token.start = c - token.value.length;\n return token;\n };\n EditSession.prototype.setUndoManager = function (undoManager) {\n this.$undoManager = undoManager;\n if (this.$informUndoManager)\n this.$informUndoManager.cancel();\n if (undoManager) {\n var self = this;\n undoManager.addSession(this);\n this.$syncInformUndoManager = function () {\n self.$informUndoManager.cancel();\n self.mergeUndoDeltas = false;\n };\n this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\n }\n else {\n this.$syncInformUndoManager = function () { };\n }\n };\n EditSession.prototype.markUndoGroup = function () {\n if (this.$syncInformUndoManager)\n this.$syncInformUndoManager();\n };\n EditSession.prototype.getUndoManager = function () {\n return this.$undoManager || this.$defaultUndoManager;\n };\n EditSession.prototype.getTabString = function () {\n if (this.getUseSoftTabs()) {\n return lang.stringRepeat(\" \", this.getTabSize());\n }\n else {\n return \"\\t\";\n }\n };\n EditSession.prototype.setUseSoftTabs = function (val) {\n this.setOption(\"useSoftTabs\", val);\n };\n EditSession.prototype.getUseSoftTabs = function () {\n return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n };\n EditSession.prototype.setTabSize = function (tabSize) {\n this.setOption(\"tabSize\", tabSize);\n };\n EditSession.prototype.getTabSize = function () {\n return this.$tabSize;\n };\n EditSession.prototype.isTabStop = function (position) {\n return this.$useSoftTabs && (position.column % this.$tabSize === 0);\n };\n EditSession.prototype.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) {\n this.setOption(\"navigateWithinSoftTabs\", navigateWithinSoftTabs);\n };\n EditSession.prototype.getNavigateWithinSoftTabs = function () {\n return this.$navigateWithinSoftTabs;\n };\n EditSession.prototype.setOverwrite = function (overwrite) {\n this.setOption(\"overwrite\", overwrite);\n };\n EditSession.prototype.getOverwrite = function () {\n return this.$overwrite;\n };\n EditSession.prototype.toggleOverwrite = function () {\n this.setOverwrite(!this.$overwrite);\n };\n EditSession.prototype.addGutterDecoration = function (row, className) {\n if (!this.$decorations[row])\n this.$decorations[row] = \"\";\n this.$decorations[row] += \" \" + className;\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.removeGutterDecoration = function (row, className) {\n this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.getBreakpoints = function () {\n return this.$breakpoints;\n };\n EditSession.prototype.setBreakpoints = function (rows) {\n this.$breakpoints = [];\n for (var i = 0; i < rows.length; i++) {\n this.$breakpoints[rows[i]] = \"ace_breakpoint\";\n }\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.clearBreakpoints = function () {\n this.$breakpoints = [];\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.setBreakpoint = function (row, className) {\n if (className === undefined)\n className = \"ace_breakpoint\";\n if (className)\n this.$breakpoints[row] = className;\n else\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.clearBreakpoint = function (row) {\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.addMarker = function (range, clazz, type, inFront) {\n var id = this.$markerId++;\n var marker = {\n range: range,\n type: type || \"line\",\n renderer: typeof type == \"function\" ? type : null,\n clazz: clazz,\n inFront: !!inFront,\n id: id\n };\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n }\n else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n return id;\n };\n EditSession.prototype.addDynamicMarker = function (marker, inFront) {\n if (!marker.update)\n return;\n var id = this.$markerId++;\n marker.id = id;\n marker.inFront = !!inFront;\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n }\n else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n return marker;\n };\n EditSession.prototype.removeMarker = function (markerId) {\n var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId];\n if (!marker)\n return;\n var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;\n delete (markers[markerId]);\n this._signal(marker.inFront ? \"changeFrontMarker\" : \"changeBackMarker\");\n };\n EditSession.prototype.getMarkers = function (inFront) {\n return inFront ? this.$frontMarkers : this.$backMarkers;\n };\n EditSession.prototype.highlight = function (re) {\n if (!this.$searchHighlight) {\n var highlight = new SearchHighlight(null, \"ace_selected-word\", \"text\");\n this.$searchHighlight = this.addDynamicMarker(highlight);\n }\n this.$searchHighlight.setRegexp(re);\n };\n EditSession.prototype.highlightLines = function (startRow, endRow, clazz, inFront) {\n if (typeof endRow != \"number\") {\n clazz = endRow;\n endRow = startRow;\n }\n if (!clazz)\n clazz = \"ace_step\";\n var range = new Range(startRow, 0, endRow, Infinity);\n range.id = this.addMarker(range, clazz, \"fullLine\", inFront);\n return range;\n };\n EditSession.prototype.setAnnotations = function (annotations) {\n this.$annotations = annotations;\n this._signal(\"changeAnnotation\", {});\n };\n EditSession.prototype.getAnnotations = function () {\n return this.$annotations || [];\n };\n EditSession.prototype.clearAnnotations = function () {\n this.setAnnotations([]);\n };\n EditSession.prototype.$detectNewLine = function (text) {\n var match = text.match(/^.*?(\\r?\\n)/m);\n if (match) {\n this.$autoNewLine = match[1];\n }\n else {\n this.$autoNewLine = \"\\n\";\n }\n };\n EditSession.prototype.getWordRange = function (row, column) {\n var line = this.getLine(row);\n var inToken = false;\n if (column > 0)\n inToken = !!line.charAt(column - 1).match(this.tokenRe);\n if (!inToken)\n inToken = !!line.charAt(column).match(this.tokenRe);\n if (inToken)\n var re = this.tokenRe;\n else if (/^\\s+$/.test(line.slice(column - 1, column + 1)))\n var re = /\\s/;\n else\n var re = this.nonTokenRe;\n var start = column;\n if (start > 0) {\n do {\n start--;\n } while (start >= 0 && line.charAt(start).match(re));\n start++;\n }\n var end = column;\n while (end < line.length && line.charAt(end).match(re)) {\n end++;\n }\n return new Range(row, start, row, end);\n };\n EditSession.prototype.getAWordRange = function (row, column) {\n var wordRange = this.getWordRange(row, column);\n var line = this.getLine(wordRange.end.row);\n while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\n wordRange.end.column += 1;\n }\n return wordRange;\n };\n EditSession.prototype.setNewLineMode = function (newLineMode) {\n this.doc.setNewLineMode(newLineMode);\n };\n EditSession.prototype.getNewLineMode = function () {\n return this.doc.getNewLineMode();\n };\n EditSession.prototype.setUseWorker = function (useWorker) { this.setOption(\"useWorker\", useWorker); };\n EditSession.prototype.getUseWorker = function () { return this.$useWorker; };\n EditSession.prototype.onReloadTokenizer = function (e) {\n var rows = e.data;\n this.bgTokenizer.start(rows.first);\n this._signal(\"tokenizerUpdate\", e);\n };\n EditSession.prototype.setMode = function (mode, cb) {\n if (mode && typeof mode === \"object\") {\n if (mode.getTokenizer)\n return this.$onChangeMode(mode);\n var options = mode;\n var path = options.path;\n }\n else {\n path = /**@type{string}*/ (mode) || \"ace/mode/text\";\n }\n if (!this.$modes[\"ace/mode/text\"])\n this.$modes[\"ace/mode/text\"] = new TextMode();\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n cb && cb();\n return;\n }\n this.$modeId = path;\n config.loadModule([\"mode\", path], function (m) {\n if (this.$modeId !== path)\n return cb && cb();\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n }\n else if (m && m.Mode) {\n m = new m.Mode(options);\n if (!options) {\n this.$modes[path] = m;\n m.$id = path;\n }\n this.$onChangeMode(m);\n }\n cb && cb();\n }.bind(this));\n if (!this.$mode)\n this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\n };\n EditSession.prototype.$onChangeMode = function (mode, $isPlaceholder) {\n if (!$isPlaceholder)\n this.$modeId = mode.$id;\n if (this.$mode === mode)\n return;\n var oldMode = this.$mode;\n this.$mode = mode;\n this.$stopWorker();\n if (this.$useWorker)\n this.$startWorker();\n var tokenizer = mode.getTokenizer();\n if (tokenizer.on !== undefined) {\n var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n tokenizer.on(\"update\", onReloadTokenizer);\n }\n this.bgTokenizer.setTokenizer(tokenizer);\n this.bgTokenizer.setDocument(this.getDocument());\n this.tokenRe = mode.tokenRe;\n this.nonTokenRe = mode.nonTokenRe;\n if (!$isPlaceholder) {\n if (mode.attachToSession)\n mode.attachToSession(this);\n this.$options.wrapMethod.set.call(this, this.$wrapMethod);\n this.$setFolding(mode.foldingRules);\n this.bgTokenizer.start(0);\n this._emit(\"changeMode\", { oldMode: oldMode, mode: mode });\n }\n };\n EditSession.prototype.$stopWorker = function () {\n if (this.$worker) {\n this.$worker.terminate();\n this.$worker = null;\n }\n };\n EditSession.prototype.$startWorker = function () {\n try {\n this.$worker = this.$mode.createWorker(this);\n }\n catch (e) {\n config.warn(\"Could not load worker\", e);\n this.$worker = null;\n }\n };\n EditSession.prototype.getMode = function () {\n return this.$mode;\n };\n EditSession.prototype.setScrollTop = function (scrollTop) {\n if (this.$scrollTop === scrollTop || isNaN(scrollTop))\n return;\n this.$scrollTop = scrollTop;\n this._signal(\"changeScrollTop\", scrollTop);\n };\n EditSession.prototype.getScrollTop = function () {\n return this.$scrollTop;\n };\n EditSession.prototype.setScrollLeft = function (scrollLeft) {\n if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\n return;\n this.$scrollLeft = scrollLeft;\n this._signal(\"changeScrollLeft\", scrollLeft);\n };\n EditSession.prototype.getScrollLeft = function () {\n return this.$scrollLeft;\n };\n EditSession.prototype.getScreenWidth = function () {\n this.$computeWidth();\n if (this.lineWidgets)\n return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n return this.screenWidth;\n };\n EditSession.prototype.getLineWidgetMaxWidth = function () {\n if (this.lineWidgetsWidth != null)\n return this.lineWidgetsWidth;\n var width = 0;\n this.lineWidgets.forEach(function (w) {\n if (w && w.screenWidth > width)\n width = w.screenWidth;\n });\n return this.lineWidgetWidth = width;\n };\n EditSession.prototype.$computeWidth = function (force) {\n if (this.$modified || force) {\n this.$modified = false;\n if (this.$useWrapMode)\n return this.screenWidth = this.$wrapLimit;\n var lines = this.doc.getAllLines();\n var cache = this.$rowLengthCache;\n var longestScreenLine = 0;\n var foldIndex = 0;\n var foldLine = this.$foldData[foldIndex];\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n var len = lines.length;\n for (var i = 0; i < len; i++) {\n if (i > foldStart) {\n i = foldLine.end.row + 1;\n if (i >= len)\n break;\n foldLine = this.$foldData[foldIndex++];\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (cache[i] == null)\n cache[i] = this.$getStringScreenWidth(lines[i])[0];\n if (cache[i] > longestScreenLine)\n longestScreenLine = cache[i];\n }\n this.screenWidth = longestScreenLine;\n }\n };\n EditSession.prototype.getLine = function (row) {\n return this.doc.getLine(row);\n };\n EditSession.prototype.getLines = function (firstRow, lastRow) {\n return this.doc.getLines(firstRow, lastRow);\n };\n EditSession.prototype.getLength = function () {\n return this.doc.getLength();\n };\n EditSession.prototype.getTextRange = function (range) {\n return this.doc.getTextRange(range || this.selection.getRange());\n };\n EditSession.prototype.insert = function (position, text) {\n return this.doc.insert(position, text);\n };\n EditSession.prototype.remove = function (range) {\n return this.doc.remove(range);\n };\n EditSession.prototype.removeFullLines = function (firstRow, lastRow) {\n return this.doc.removeFullLines(firstRow, lastRow);\n };\n EditSession.prototype.undoChanges = function (deltas, dontSelect) {\n if (!deltas.length)\n return;\n this.$fromUndo = true;\n for (var i = deltas.length - 1; i != -1; i--) {\n var delta = deltas[i];\n if (delta.action == \"insert\" || delta.action == \"remove\") {\n this.doc.revertDelta(delta);\n }\n else if (delta.folds) {\n this.addFolds(delta.folds);\n }\n }\n if (!dontSelect && this.$undoSelect) {\n if (deltas.selectionBefore)\n this.selection.fromJSON(deltas.selectionBefore);\n else\n this.selection.setRange(this.$getUndoSelection(deltas, true));\n }\n this.$fromUndo = false;\n };\n EditSession.prototype.redoChanges = function (deltas, dontSelect) {\n if (!deltas.length)\n return;\n this.$fromUndo = true;\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (delta.action == \"insert\" || delta.action == \"remove\") {\n this.doc.$safeApplyDelta(delta);\n }\n }\n if (!dontSelect && this.$undoSelect) {\n if (deltas.selectionAfter)\n this.selection.fromJSON(deltas.selectionAfter);\n else\n this.selection.setRange(this.$getUndoSelection(deltas, false));\n }\n this.$fromUndo = false;\n };\n EditSession.prototype.setUndoSelect = function (enable) {\n this.$undoSelect = enable;\n };\n EditSession.prototype.$getUndoSelection = function (deltas, isUndo) {\n function isInsert(delta) {\n return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n }\n var range, point;\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (!delta.start)\n continue; // skip folds\n if (!range) {\n if (isInsert(delta)) {\n range = Range.fromPoints(delta.start, delta.end);\n }\n else {\n range = Range.fromPoints(delta.start, delta.start);\n }\n continue;\n }\n if (isInsert(delta)) {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range.setStart(point);\n }\n point = delta.end;\n if (range.compare(point.row, point.column) == 1) {\n range.setEnd(point);\n }\n }\n else {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range = Range.fromPoints(delta.start, delta.start);\n }\n }\n }\n return range;\n };\n EditSession.prototype.replace = function (range, text) {\n return this.doc.replace(range, text);\n };\n EditSession.prototype.moveText = function (fromRange, toPosition, copy) {\n var text = this.getTextRange(fromRange);\n var folds = this.getFoldsInRange(fromRange);\n var toRange = Range.fromPoints(toPosition, toPosition);\n if (!copy) {\n this.remove(fromRange);\n var rowDiff = fromRange.start.row - fromRange.end.row;\n var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\n if (collDiff) {\n if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)\n toRange.start.column += collDiff;\n if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)\n toRange.end.column += collDiff;\n }\n if (rowDiff && toRange.start.row >= fromRange.end.row) {\n toRange.start.row += rowDiff;\n toRange.end.row += rowDiff;\n }\n }\n toRange.end = this.insert(toRange.start, text);\n if (folds.length) {\n var oldStart = fromRange.start;\n var newStart = toRange.start;\n var rowDiff = newStart.row - oldStart.row;\n var collDiff = newStart.column - oldStart.column;\n this.addFolds(folds.map(function (x) {\n x = x.clone();\n if (x.start.row == oldStart.row)\n x.start.column += collDiff;\n if (x.end.row == oldStart.row)\n x.end.column += collDiff;\n x.start.row += rowDiff;\n x.end.row += rowDiff;\n return x;\n }));\n }\n return toRange;\n };\n EditSession.prototype.indentRows = function (startRow, endRow, indentString) {\n indentString = indentString.replace(/\\t/g, this.getTabString());\n for (var row = startRow; row <= endRow; row++)\n this.doc.insertInLine({ row: row, column: 0 }, indentString);\n };\n EditSession.prototype.outdentRows = function (range) {\n var rowRange = range.collapseRows();\n var deleteRange = new Range(0, 0, 0, 0);\n var size = this.getTabSize();\n for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n var line = this.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n for (var j = 0; j < size; ++j)\n if (line.charAt(j) != ' ')\n break;\n if (j < size && line.charAt(j) == '\\t') {\n deleteRange.start.column = j;\n deleteRange.end.column = j + 1;\n }\n else {\n deleteRange.start.column = 0;\n deleteRange.end.column = j;\n }\n this.remove(deleteRange);\n }\n };\n EditSession.prototype.$moveLines = function (firstRow, lastRow, dir) {\n firstRow = this.getRowFoldStart(firstRow);\n lastRow = this.getRowFoldEnd(lastRow);\n if (dir < 0) {\n var row = this.getRowFoldStart(firstRow + dir);\n if (row < 0)\n return 0;\n var diff = row - firstRow;\n }\n else if (dir > 0) {\n var row = this.getRowFoldEnd(lastRow + dir);\n if (row > this.doc.getLength() - 1)\n return 0;\n var diff = row - lastRow;\n }\n else {\n firstRow = this.$clipRowToDocument(firstRow);\n lastRow = this.$clipRowToDocument(lastRow);\n var diff = lastRow - firstRow + 1;\n }\n var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\n var folds = this.getFoldsInRange(range).map(function (x) {\n x = x.clone();\n x.start.row += diff;\n x.end.row += diff;\n return x;\n });\n var lines = dir == 0\n ? this.doc.getLines(firstRow, lastRow)\n : this.doc.removeFullLines(firstRow, lastRow);\n this.doc.insertFullLines(firstRow + diff, lines);\n folds.length && this.addFolds(folds);\n return diff;\n };\n EditSession.prototype.moveLinesUp = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, -1);\n };\n EditSession.prototype.moveLinesDown = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 1);\n };\n EditSession.prototype.duplicateLines = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 0);\n };\n EditSession.prototype.$clipRowToDocument = function (row) {\n return Math.max(0, Math.min(row, this.doc.getLength() - 1));\n };\n EditSession.prototype.$clipColumnToRow = function (row, column) {\n if (column < 0)\n return 0;\n return Math.min(this.doc.getLine(row).length, column);\n };\n EditSession.prototype.$clipPositionToDocument = function (row, column) {\n column = Math.max(0, column);\n if (row < 0) {\n row = 0;\n column = 0;\n }\n else {\n var len = this.doc.getLength();\n if (row >= len) {\n row = len - 1;\n column = this.doc.getLine(len - 1).length;\n }\n else {\n column = Math.min(this.doc.getLine(row).length, column);\n }\n }\n return {\n row: row,\n column: column\n };\n };\n EditSession.prototype.$clipRangeToDocument = function (range) {\n if (range.start.row < 0) {\n range.start.row = 0;\n range.start.column = 0;\n }\n else {\n range.start.column = this.$clipColumnToRow(range.start.row, range.start.column);\n }\n var len = this.doc.getLength() - 1;\n if (range.end.row > len) {\n range.end.row = len;\n range.end.column = this.doc.getLine(len).length;\n }\n else {\n range.end.column = this.$clipColumnToRow(range.end.row, range.end.column);\n }\n return range;\n };\n EditSession.prototype.setUseWrapMode = function (useWrapMode) {\n if (useWrapMode != this.$useWrapMode) {\n this.$useWrapMode = useWrapMode;\n this.$modified = true;\n this.$resetRowCache(0);\n if (useWrapMode) {\n var len = this.getLength();\n this.$wrapData = Array(len);\n this.$updateWrapData(0, len - 1);\n }\n this._signal(\"changeWrapMode\");\n }\n };\n EditSession.prototype.getUseWrapMode = function () {\n return this.$useWrapMode;\n };\n EditSession.prototype.setWrapLimitRange = function (min, max) {\n if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\n this.$wrapLimitRange = { min: min, max: max };\n this.$modified = true;\n this.$bidiHandler.markAsDirty();\n if (this.$useWrapMode)\n this._signal(\"changeWrapMode\");\n }\n };\n EditSession.prototype.adjustWrapLimit = function (desiredLimit, $printMargin) {\n var limits = this.$wrapLimitRange;\n if (limits.max < 0)\n limits = { min: $printMargin, max: $printMargin };\n var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\n if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\n this.$wrapLimit = wrapLimit;\n this.$modified = true;\n if (this.$useWrapMode) {\n this.$updateWrapData(0, this.getLength() - 1);\n this.$resetRowCache(0);\n this._signal(\"changeWrapLimit\");\n }\n return true;\n }\n return false;\n };\n EditSession.prototype.$constrainWrapLimit = function (wrapLimit, min, max) {\n if (min)\n wrapLimit = Math.max(min, wrapLimit);\n if (max)\n wrapLimit = Math.min(max, wrapLimit);\n return wrapLimit;\n };\n EditSession.prototype.getWrapLimit = function () {\n return this.$wrapLimit;\n };\n EditSession.prototype.setWrapLimit = function (limit) {\n this.setWrapLimitRange(limit, limit);\n };\n EditSession.prototype.getWrapLimitRange = function () {\n return {\n min: this.$wrapLimitRange.min,\n max: this.$wrapLimitRange.max\n };\n };\n EditSession.prototype.$updateInternalDataOnChange = function (delta) {\n var useWrapMode = this.$useWrapMode;\n var action = delta.action;\n var start = delta.start;\n var end = delta.end;\n var firstRow = start.row;\n var lastRow = end.row;\n var len = lastRow - firstRow;\n var removedFolds = null;\n this.$updating = true;\n if (len != 0) {\n if (action === \"remove\") {\n this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n var foldLines = this.$foldData;\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n var foldLine = this.getFoldLine(end.row);\n var idx = 0;\n if (foldLine) {\n foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\n foldLine.shiftRow(-len);\n var foldLineBefore = this.getFoldLine(firstRow);\n if (foldLineBefore && foldLineBefore !== foldLine) {\n foldLineBefore.merge(foldLine);\n foldLine = foldLineBefore;\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= end.row) {\n foldLine.shiftRow(-len);\n }\n }\n lastRow = firstRow;\n }\n else {\n var args = Array(len);\n args.unshift(firstRow, 0);\n var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache;\n arr.splice.apply(arr, args);\n var foldLines = this.$foldData;\n var foldLine = this.getFoldLine(firstRow);\n var idx = 0;\n if (foldLine) {\n var cmp = foldLine.range.compareInside(start.row, start.column);\n if (cmp == 0) {\n foldLine = foldLine.split(start.row, start.column);\n if (foldLine) {\n foldLine.shiftRow(len);\n foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\n }\n }\n else \n if (cmp == -1) {\n foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\n foldLine.shiftRow(len);\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= firstRow) {\n foldLine.shiftRow(len);\n }\n }\n }\n }\n else {\n len = Math.abs(delta.start.column - delta.end.column);\n if (action === \"remove\") {\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n len = -len;\n }\n var foldLine = this.getFoldLine(firstRow);\n if (foldLine) {\n foldLine.addRemoveChars(firstRow, start.column, len);\n }\n }\n if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\n console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\n }\n this.$updating = false;\n if (useWrapMode)\n this.$updateWrapData(firstRow, lastRow);\n else\n this.$updateRowLengthCache(firstRow, lastRow);\n return removedFolds;\n };\n EditSession.prototype.$updateRowLengthCache = function (firstRow, lastRow) {\n this.$rowLengthCache[firstRow] = null;\n this.$rowLengthCache[lastRow] = null;\n };\n EditSession.prototype.$updateWrapData = function (firstRow, lastRow) {\n var lines = this.doc.getAllLines();\n var tabSize = this.getTabSize();\n var wrapData = this.$wrapData;\n var wrapLimit = this.$wrapLimit;\n var tokens;\n var foldLine;\n var row = firstRow;\n lastRow = Math.min(lastRow, lines.length - 1);\n while (row <= lastRow) {\n foldLine = this.getFoldLine(row, foldLine);\n if (!foldLine) {\n tokens = this.$getDisplayTokens(lines[row]);\n wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row++;\n }\n else {\n tokens = [];\n foldLine.walk(function (placeholder, row, column, lastColumn) {\n var walkTokens;\n if (placeholder != null) {\n walkTokens = this.$getDisplayTokens(placeholder, tokens.length);\n walkTokens[0] = PLACEHOLDER_START;\n for (var i = 1; i < walkTokens.length; i++) {\n walkTokens[i] = PLACEHOLDER_BODY;\n }\n }\n else {\n walkTokens = this.$getDisplayTokens(lines[row].substring(lastColumn, column), tokens.length);\n }\n tokens = tokens.concat(walkTokens);\n }.bind(this), foldLine.end.row, lines[foldLine.end.row].length + 1);\n wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row = foldLine.end.row + 1;\n }\n }\n };\n EditSession.prototype.$computeWrapSplits = function (tokens, wrapLimit, tabSize) {\n if (tokens.length == 0) {\n return [];\n }\n var splits = [];\n var displayLength = tokens.length;\n var lastSplit = 0, lastDocSplit = 0;\n var isCode = this.$wrapAsCode;\n var indentedSoftWrap = this.$indentedSoftWrap;\n var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)\n || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n function getWrapIndent() {\n var indentation = 0;\n if (maxIndent === 0)\n return indentation;\n if (indentedSoftWrap) {\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token == SPACE)\n indentation += 1;\n else if (token == TAB)\n indentation += tabSize;\n else if (token == TAB_SPACE)\n continue;\n else\n break;\n }\n }\n if (isCode && indentedSoftWrap !== false)\n indentation += tabSize;\n return Math.min(indentation, maxIndent);\n }\n function addSplit(screenPos) {\n var len = screenPos - lastSplit;\n for (var i = lastSplit; i < screenPos; i++) {\n var ch = tokens[i];\n if (ch === 12 || ch === 2)\n len -= 1;\n }\n if (!splits.length) {\n indent = getWrapIndent();\n splits.indent = indent;\n }\n lastDocSplit += len;\n splits.push(lastDocSplit);\n lastSplit = screenPos;\n }\n var indent = 0;\n while (displayLength - lastSplit > wrapLimit - indent) {\n var split = lastSplit + wrapLimit - indent;\n if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\n addSplit(split);\n continue;\n }\n if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\n for (split; split != lastSplit - 1; split--) {\n if (tokens[split] == PLACEHOLDER_START) {\n break;\n }\n }\n if (split > lastSplit) {\n addSplit(split);\n continue;\n }\n split = lastSplit + wrapLimit;\n for (split; split < tokens.length; split++) {\n if (tokens[split] != PLACEHOLDER_BODY) {\n break;\n }\n }\n if (split == tokens.length) {\n break; // Breaks the while-loop.\n }\n addSplit(split);\n continue;\n }\n var minSplit = Math.max(split - (wrapLimit - (wrapLimit >> 2)), lastSplit - 1);\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split--;\n }\n if (isCode) {\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split--;\n }\n while (split > minSplit && tokens[split] == PUNCTUATION) {\n split--;\n }\n }\n else {\n while (split > minSplit && tokens[split] < SPACE) {\n split--;\n }\n }\n if (split > minSplit) {\n addSplit(++split);\n continue;\n }\n split = lastSplit + wrapLimit;\n if (tokens[split] == CHAR_EXT)\n split--;\n addSplit(split - indent);\n }\n return splits;\n };\n EditSession.prototype.$getDisplayTokens = function (str, offset) {\n var arr = [];\n var tabSize;\n offset = offset || 0;\n for (var i = 0; i < str.length; i++) {\n var c = str.charCodeAt(i);\n if (c == 9) {\n tabSize = this.getScreenTabSize(arr.length + offset);\n arr.push(TAB);\n for (var n = 1; n < tabSize; n++) {\n arr.push(TAB_SPACE);\n }\n }\n else if (c == 32) {\n arr.push(SPACE);\n }\n else if ((c > 39 && c < 48) || (c > 57 && c < 64)) {\n arr.push(PUNCTUATION);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n arr.push(CHAR, CHAR_EXT);\n }\n else {\n arr.push(CHAR);\n }\n }\n return arr;\n };\n EditSession.prototype.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn == 0)\n return [0, 0];\n if (maxScreenColumn == null)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charCodeAt(column);\n if (c == 9) {\n screenColumn += this.getScreenTabSize(screenColumn);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n screenColumn += 2;\n }\n else {\n screenColumn += 1;\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n return [screenColumn, column];\n };\n EditSession.prototype.getRowLength = function (row) {\n var h = 1;\n if (this.lineWidgets)\n h += this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n if (!this.$useWrapMode || !this.$wrapData[row])\n return h;\n else\n return this.$wrapData[row].length + h;\n };\n EditSession.prototype.getRowLineCount = function (row) {\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1;\n }\n else {\n return this.$wrapData[row].length + 1;\n }\n };\n EditSession.prototype.getRowWrapIndent = function (screenRow) {\n if (this.$useWrapMode) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n var splits = this.$wrapData[pos.row];\n return splits.length && splits[0] < pos.column ? splits.indent : 0;\n }\n else {\n return 0;\n }\n };\n EditSession.prototype.getScreenLastRowColumn = function (screenRow) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n return this.documentToScreenColumn(pos.row, pos.column);\n };\n EditSession.prototype.getDocumentLastRowColumn = function (docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.getScreenLastRowColumn(screenRow);\n };\n EditSession.prototype.getDocumentLastRowColumnPosition = function (docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n };\n EditSession.prototype.getRowSplitData = function (row) {\n if (!this.$useWrapMode) {\n return undefined;\n }\n else {\n return this.$wrapData[row];\n }\n };\n EditSession.prototype.getScreenTabSize = function (screenColumn) {\n return this.$tabSize - (screenColumn % this.$tabSize | 0);\n };\n EditSession.prototype.screenToDocumentRow = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).row;\n };\n EditSession.prototype.screenToDocumentColumn = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).column;\n };\n EditSession.prototype.screenToDocumentPosition = function (screenRow, screenColumn, offsetX) {\n if (screenRow < 0)\n return { row: 0, column: 0 };\n var line;\n var docRow = 0;\n var docColumn = 0;\n var column;\n var row = 0;\n var rowLength = 0;\n var rowCache = this.$screenRowCache;\n var i = this.$getRowCacheIndex(rowCache, screenRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var docRow = this.$docRowCache[i];\n var doCache = screenRow > rowCache[l - 1];\n }\n else {\n var doCache = !l;\n }\n var maxRow = this.getLength() - 1;\n var foldLine = this.getNextFoldLine(docRow);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (row <= screenRow) {\n rowLength = this.getRowLength(docRow);\n if (row + rowLength > screenRow || docRow >= maxRow) {\n break;\n }\n else {\n row += rowLength;\n docRow++;\n if (docRow > foldStart) {\n docRow = foldLine.end.row + 1;\n foldLine = this.getNextFoldLine(docRow, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n }\n if (doCache) {\n this.$docRowCache.push(docRow);\n this.$screenRowCache.push(row);\n }\n }\n if (foldLine && foldLine.start.row <= docRow) {\n line = this.getFoldDisplayLine(foldLine);\n docRow = foldLine.start.row;\n }\n else if (row + rowLength <= screenRow || docRow > maxRow) {\n return {\n row: maxRow,\n column: this.getLine(maxRow).length\n };\n }\n else {\n line = this.getLine(docRow);\n foldLine = null;\n }\n var wrapIndent = 0, splitIndex = Math.floor(screenRow - row);\n if (this.$useWrapMode) {\n var splits = this.$wrapData[docRow];\n if (splits) {\n column = splits[splitIndex];\n if (splitIndex > 0 && splits.length) {\n wrapIndent = splits.indent;\n docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\n line = line.substring(docColumn);\n }\n }\n }\n if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex))\n screenColumn = this.$bidiHandler.offsetToCol(offsetX);\n docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n if (this.$useWrapMode && docColumn >= column)\n docColumn = column - 1;\n if (foldLine)\n return foldLine.idxToPosition(docColumn);\n return { row: docRow, column: docColumn };\n };\n EditSession.prototype.documentToScreenPosition = function (docRow, docColumn) {\n if (typeof docColumn === \"undefined\")\n var pos = this.$clipPositionToDocument(/**@type{Point}*/ (docRow).row, /**@type{Point}*/ (docRow).column);\n else\n pos = this.$clipPositionToDocument(/**@type{number}*/ (docRow), docColumn);\n docRow = pos.row;\n docColumn = pos.column;\n var screenRow = 0;\n var foldStartRow = null;\n var fold = null;\n fold = this.getFoldAt(docRow, docColumn, 1);\n if (fold) {\n docRow = fold.start.row;\n docColumn = fold.start.column;\n }\n var rowEnd, row = 0;\n var rowCache = this.$docRowCache;\n var i = this.$getRowCacheIndex(rowCache, docRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var screenRow = this.$screenRowCache[i];\n var doCache = docRow > rowCache[l - 1];\n }\n else {\n var doCache = !l;\n }\n var foldLine = this.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (row < docRow) {\n if (row >= foldStart) {\n rowEnd = foldLine.end.row + 1;\n if (rowEnd > docRow)\n break;\n foldLine = this.getNextFoldLine(rowEnd, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n else {\n rowEnd = row + 1;\n }\n screenRow += this.getRowLength(row);\n row = rowEnd;\n if (doCache) {\n this.$docRowCache.push(row);\n this.$screenRowCache.push(screenRow);\n }\n }\n var textLine = \"\";\n if (foldLine && row >= foldStart) {\n textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\n foldStartRow = foldLine.start.row;\n }\n else {\n textLine = this.getLine(docRow).substring(0, docColumn);\n foldStartRow = docRow;\n }\n var wrapIndent = 0;\n if (this.$useWrapMode) {\n var wrapRow = this.$wrapData[foldStartRow];\n if (wrapRow) {\n var screenRowOffset = 0;\n while (textLine.length >= wrapRow[screenRowOffset]) {\n screenRow++;\n screenRowOffset++;\n }\n textLine = textLine.substring(wrapRow[screenRowOffset - 1] || 0, textLine.length);\n wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n }\n }\n if (this.lineWidgets && this.lineWidgets[row] && this.lineWidgets[row].rowsAbove)\n screenRow += this.lineWidgets[row].rowsAbove;\n return {\n row: screenRow,\n column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\n };\n };\n EditSession.prototype.documentToScreenColumn = function (row, docColumn) {\n return this.documentToScreenPosition(row, docColumn).column;\n };\n EditSession.prototype.documentToScreenRow = function (docRow, docColumn) {\n return this.documentToScreenPosition(docRow, docColumn).row;\n };\n EditSession.prototype.getScreenLength = function () {\n var screenRows = 0;\n var fold = null;\n if (!this.$useWrapMode) {\n screenRows = this.getLength();\n var foldData = this.$foldData;\n for (var i = 0; i < foldData.length; i++) {\n fold = foldData[i];\n screenRows -= fold.end.row - fold.start.row;\n }\n }\n else {\n var lastRow = this.$wrapData.length;\n var row = 0, i = 0;\n var fold = this.$foldData[i++];\n var foldStart = fold ? fold.start.row : Infinity;\n while (row < lastRow) {\n var splits = this.$wrapData[row];\n screenRows += splits ? splits.length + 1 : 1;\n row++;\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = this.$foldData[i++];\n foldStart = fold ? fold.start.row : Infinity;\n }\n }\n }\n if (this.lineWidgets)\n screenRows += this.$getWidgetScreenLength();\n return screenRows;\n };\n EditSession.prototype.$setFontMetrics = function (fm) {\n if (!this.$enableVarChar)\n return;\n this.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn === 0)\n return [0, 0];\n if (!maxScreenColumn)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charAt(column);\n if (c === \"\\t\") {\n screenColumn += this.getScreenTabSize(screenColumn);\n }\n else {\n screenColumn += fm.getCharacterWidth(c);\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n return [screenColumn, column];\n };\n };\n EditSession.prototype.destroy = function () {\n if (!this.destroyed) {\n this.bgTokenizer.setDocument(null);\n this.bgTokenizer.cleanup();\n this.destroyed = true;\n }\n this.$stopWorker();\n this.removeAllListeners();\n if (this.doc) {\n this.doc.off(\"change\", this.$onChange);\n }\n this.selection.detach();\n };\n return EditSession;\n}());\nEditSession.$uid = 0;\nEditSession.prototype.$modes = config.$modes;\nEditSession.prototype.getValue = EditSession.prototype.toString;\nEditSession.prototype.$defaultUndoManager = {\n undo: function () { },\n redo: function () { },\n hasUndo: function () { },\n hasRedo: function () { },\n reset: function () { },\n add: function () { },\n addSelection: function () { },\n startNewGroup: function () { },\n addSession: function () { }\n};\nEditSession.prototype.$overwrite = false;\nEditSession.prototype.$mode = null;\nEditSession.prototype.$modeId = null;\nEditSession.prototype.$scrollTop = 0;\nEditSession.prototype.$scrollLeft = 0;\nEditSession.prototype.$wrapLimit = 80;\nEditSession.prototype.$useWrapMode = false;\nEditSession.prototype.$wrapLimitRange = {\n min: null,\n max: null\n};\nEditSession.prototype.lineWidgets = null;\nEditSession.prototype.isFullWidth = isFullWidth;\noop.implement(EditSession.prototype, EventEmitter);\nvar CHAR = 1, CHAR_EXT = 2, PLACEHOLDER_START = 3, PLACEHOLDER_BODY = 4, PUNCTUATION = 9, SPACE = 10, TAB = 11, TAB_SPACE = 12;\nfunction isFullWidth(c) {\n if (c < 0x1100)\n return false;\n return c >= 0x1100 && c <= 0x115F ||\n c >= 0x11A3 && c <= 0x11A7 ||\n c >= 0x11FA && c <= 0x11FF ||\n c >= 0x2329 && c <= 0x232A ||\n c >= 0x2E80 && c <= 0x2E99 ||\n c >= 0x2E9B && c <= 0x2EF3 ||\n c >= 0x2F00 && c <= 0x2FD5 ||\n c >= 0x2FF0 && c <= 0x2FFB ||\n c >= 0x3000 && c <= 0x303E ||\n c >= 0x3041 && c <= 0x3096 ||\n c >= 0x3099 && c <= 0x30FF ||\n c >= 0x3105 && c <= 0x312D ||\n c >= 0x3131 && c <= 0x318E ||\n c >= 0x3190 && c <= 0x31BA ||\n c >= 0x31C0 && c <= 0x31E3 ||\n c >= 0x31F0 && c <= 0x321E ||\n c >= 0x3220 && c <= 0x3247 ||\n c >= 0x3250 && c <= 0x32FE ||\n c >= 0x3300 && c <= 0x4DBF ||\n c >= 0x4E00 && c <= 0xA48C ||\n c >= 0xA490 && c <= 0xA4C6 ||\n c >= 0xA960 && c <= 0xA97C ||\n c >= 0xAC00 && c <= 0xD7A3 ||\n c >= 0xD7B0 && c <= 0xD7C6 ||\n c >= 0xD7CB && c <= 0xD7FB ||\n c >= 0xF900 && c <= 0xFAFF ||\n c >= 0xFE10 && c <= 0xFE19 ||\n c >= 0xFE30 && c <= 0xFE52 ||\n c >= 0xFE54 && c <= 0xFE66 ||\n c >= 0xFE68 && c <= 0xFE6B ||\n c >= 0xFF01 && c <= 0xFF60 ||\n c >= 0xFFE0 && c <= 0xFFE6;\n}\nrequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\nrequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\nconfig.defineOptions(EditSession.prototype, \"session\", {\n wrap: {\n set: function (value) {\n if (!value || value == \"off\")\n value = false;\n else if (value == \"free\")\n value = true;\n else if (value == \"printMargin\")\n value = -1;\n else if (typeof value == \"string\")\n value = parseInt(value, 10) || false;\n if (this.$wrap == value)\n return;\n this.$wrap = value;\n if (!value) {\n this.setUseWrapMode(false);\n }\n else {\n var col = typeof value == \"number\" ? value : null;\n this.setWrapLimitRange(col, col);\n this.setUseWrapMode(true);\n }\n },\n get: function () {\n if (this.getUseWrapMode()) {\n if (this.$wrap == -1)\n return \"printMargin\";\n if (!this.getWrapLimitRange().min)\n return \"free\";\n return this.$wrap;\n }\n return \"off\";\n },\n handlesSet: true\n },\n wrapMethod: {\n set: function (val) {\n val = val == \"auto\"\n ? this.$mode.type != \"text\"\n : val != \"text\";\n if (val != this.$wrapAsCode) {\n this.$wrapAsCode = val;\n if (this.$useWrapMode) {\n this.$useWrapMode = false;\n this.setUseWrapMode(true);\n }\n }\n },\n initialValue: \"auto\"\n },\n indentedSoftWrap: {\n set: function () {\n if (this.$useWrapMode) {\n this.$useWrapMode = false;\n this.setUseWrapMode(true);\n }\n },\n initialValue: true\n },\n firstLineNumber: {\n set: function () { this._signal(\"changeBreakpoint\"); },\n initialValue: 1\n },\n useWorker: {\n set: function (useWorker) {\n this.$useWorker = useWorker;\n this.$stopWorker();\n if (useWorker)\n this.$startWorker();\n },\n initialValue: true\n },\n useSoftTabs: { initialValue: true },\n tabSize: {\n set: function (tabSize) {\n tabSize = parseInt(tabSize);\n if (tabSize > 0 && this.$tabSize !== tabSize) {\n this.$modified = true;\n this.$rowLengthCache = [];\n this.$tabSize = tabSize;\n this._signal(\"changeTabSize\");\n }\n },\n initialValue: 4,\n handlesSet: true\n },\n navigateWithinSoftTabs: { initialValue: false },\n foldStyle: {\n set: function (val) { this.setFoldStyle(val); },\n handlesSet: true\n },\n overwrite: {\n set: function (val) { this._signal(\"changeOverwrite\"); },\n initialValue: false\n },\n newLineMode: {\n set: function (val) { this.doc.setNewLineMode(val); },\n get: function () { return this.doc.getNewLineMode(); },\n handlesSet: true\n },\n mode: {\n set: function (val) { this.setMode(val); },\n get: function () { return this.$modeId; },\n handlesSet: true\n }\n});\nexports.EditSession = EditSession;\n\n});\n\nace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\nvar Search = /** @class */ (function () {\n function Search() {\n this.$options = {};\n }\n Search.prototype.set = function (options) {\n oop.mixin(this.$options, options);\n return this;\n };\n Search.prototype.getOptions = function () {\n return lang.copyObject(this.$options);\n };\n Search.prototype.setOptions = function (options) {\n this.$options = options;\n };\n Search.prototype.find = function (session) {\n var options = this.$options;\n var iterator = this.$matchIterator(session, options);\n if (!iterator)\n return false;\n var firstRange = null;\n iterator.forEach(function (sr, sc, er, ec) {\n firstRange = new Range(sr, sc, er, ec);\n if (sc == ec && options.start && /**@type{Range}*/ (options.start).start\n && options.skipCurrent != false && firstRange.isEqual(/**@type{Range}*/ (options.start))) {\n firstRange = null;\n return false;\n }\n return true;\n });\n return firstRange;\n };\n Search.prototype.findAll = function (session) {\n var options = this.$options;\n if (!options.needle)\n return [];\n this.$assembleRegExp(options);\n var range = options.range;\n var lines = range\n ? session.getLines(range.start.row, range.end.row)\n : session.doc.getAllLines();\n var ranges = [];\n var re = options.re;\n if (options.$isMultiLine) {\n var len = re.length;\n var maxRow = lines.length - len;\n var prevRange;\n outer: for (var row = re.offset || 0; row <= maxRow; row++) {\n for (var j = 0; j < len; j++)\n if (lines[row + j].search(re[j]) == -1)\n continue outer;\n var startLine = lines[row];\n var line = lines[row + len - 1];\n var startIndex = startLine.length - startLine.match(re[0])[0].length;\n var endIndex = line.match(re[len - 1])[0].length;\n if (prevRange && prevRange.end.row === row &&\n prevRange.end.column > startIndex) {\n continue;\n }\n ranges.push(prevRange = new Range(row, startIndex, row + len - 1, endIndex));\n if (len > 2)\n row = row + len - 2;\n }\n }\n else {\n for (var i = 0; i < lines.length; i++) {\n var matches = lang.getMatchOffsets(lines[i], re);\n for (var j = 0; j < matches.length; j++) {\n var match = matches[j];\n ranges.push(new Range(i, match.offset, i, match.offset + match.length));\n }\n }\n }\n if (range) {\n var startColumn = range.start.column;\n var endColumn = range.end.column;\n var i = 0, j = ranges.length - 1;\n while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == 0)\n i++;\n var endRow = range.end.row - range.start.row;\n while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == endRow)\n j--;\n ranges = ranges.slice(i, j + 1);\n for (i = 0, j = ranges.length; i < j; i++) {\n ranges[i].start.row += range.start.row;\n ranges[i].end.row += range.start.row;\n }\n }\n return ranges;\n };\n Search.prototype.replace = function (input, replacement) {\n var options = this.$options;\n var re = this.$assembleRegExp(options);\n if (options.$isMultiLine)\n return replacement;\n if (!re)\n return;\n var match = re.exec(input);\n if (!match || match[0].length != input.length)\n return null;\n replacement = input.replace(re, replacement);\n if (options.preserveCase) {\n replacement = replacement.split(\"\");\n for (var i = Math.min(input.length, input.length); i--;) {\n var ch = input[i];\n if (ch && ch.toLowerCase() != ch)\n replacement[i] = replacement[i].toUpperCase();\n else\n replacement[i] = replacement[i].toLowerCase();\n }\n replacement = replacement.join(\"\");\n }\n return replacement;\n };\n Search.prototype.$assembleRegExp = function (options, $disableFakeMultiline) {\n if (options.needle instanceof RegExp)\n return options.re = options.needle;\n var needle = options.needle;\n if (!options.needle)\n return options.re = false;\n if (!options.regExp)\n needle = lang.escapeRegExp(needle);\n var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n try {\n new RegExp(needle, \"u\");\n options.$supportsUnicodeFlag = true;\n modifier += \"u\";\n }\n catch (e) {\n options.$supportsUnicodeFlag = false; //left for backward compatibility with previous versions for cases like /ab\\{2}/gu\n }\n if (options.wholeWord)\n needle = addWordBoundary(needle, options);\n options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n if (options.$isMultiLine)\n return options.re = this.$assembleMultilineRegExp(needle, modifier);\n try {\n var re = new RegExp(needle, modifier);\n }\n catch (e) {\n re = false;\n }\n return options.re = re;\n };\n Search.prototype.$assembleMultilineRegExp = function (needle, modifier) {\n var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\n var re = [];\n for (var i = 0; i < parts.length; i++)\n try {\n re.push(new RegExp(parts[i], modifier));\n }\n catch (e) {\n return false;\n }\n return re;\n };\n Search.prototype.$matchIterator = function (session, options) {\n var re = this.$assembleRegExp(options);\n if (!re)\n return false;\n var backwards = options.backwards == true;\n var skipCurrent = options.skipCurrent != false;\n var supportsUnicodeFlag = re.unicode;\n var range = options.range;\n var start = options.start;\n if (!start)\n start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n if (start.start)\n start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n var firstRow = range ? range.start.row : 0;\n var lastRow = range ? range.end.row : session.getLength() - 1;\n if (backwards) {\n var forEach = function (callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row--; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = lastRow, firstRow = start.row; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n };\n }\n else {\n var forEach = function (callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row = row + 1; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = firstRow, lastRow = start.row; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n };\n }\n if (options.$isMultiLine) {\n var len = re.length;\n var forEachInLine = function (row, offset, callback) {\n var startRow = backwards ? row - len + 1 : row;\n if (startRow < 0 || startRow + len > session.getLength())\n return;\n var line = session.getLine(startRow);\n var startIndex = line.search(re[0]);\n if (!backwards && startIndex < offset || startIndex === -1)\n return;\n for (var i = 1; i < len; i++) {\n line = session.getLine(startRow + i);\n if (line.search(re[i]) == -1)\n return;\n }\n var endIndex = line.match(re[len - 1])[0].length;\n if (backwards && endIndex > offset)\n return;\n if (callback(startRow, startIndex, startRow + len - 1, endIndex))\n return true;\n };\n }\n else if (backwards) {\n var forEachInLine = function (row, endIndex, callback) {\n var line = session.getLine(row);\n var matches = [];\n var m, last = 0;\n re.lastIndex = 0;\n while ((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (!length) {\n if (last >= line.length)\n break;\n re.lastIndex = last += lang.skipEmptyMatch(line, last, supportsUnicodeFlag);\n }\n if (m.index + length > endIndex)\n break;\n matches.push(m.index, length);\n }\n for (var i = matches.length - 1; i >= 0; i -= 2) {\n var column = matches[i - 1];\n var length = matches[i];\n if (callback(row, column, row, column + length))\n return true;\n }\n };\n }\n else {\n var forEachInLine = function (row, startIndex, callback) {\n var line = session.getLine(row);\n var last;\n var m;\n re.lastIndex = startIndex;\n while ((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (callback(row, last, row, last + length))\n return true;\n if (!length) {\n re.lastIndex = last += lang.skipEmptyMatch(line, last, supportsUnicodeFlag);\n if (last >= line.length)\n return false;\n }\n }\n };\n }\n return { forEach: forEach };\n };\n return Search;\n}());\nfunction addWordBoundary(needle, options) {\n var supportsLookbehind = lang.supportsLookbehind();\n function wordBoundary(c, firstChar) {\n if (firstChar === void 0) { firstChar = true; }\n var wordRegExp = supportsLookbehind && options.$supportsUnicodeFlag ? new RegExp(\"[\\\\p{L}\\\\p{N}_]\", \"u\") : new RegExp(\"\\\\w\");\n if (wordRegExp.test(c) || options.regExp) {\n if (supportsLookbehind && options.$supportsUnicodeFlag) {\n if (firstChar)\n return \"(?<=^|[^\\\\p{L}\\\\p{N}_])\";\n return \"(?=[^\\\\p{L}\\\\p{N}_]|$)\";\n }\n return \"\\\\b\";\n }\n return \"\";\n }\n var needleArray = Array.from(needle);\n var firstChar = needleArray[0];\n var lastChar = needleArray[needleArray.length - 1];\n return wordBoundary(firstChar) + needle + wordBoundary(lastChar, false);\n}\nexports.Search = Search;\n\n});\n\nace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})(); var keyUtil = require(\"../lib/keys\");\nvar useragent = require(\"../lib/useragent\");\nvar KEY_MODS = keyUtil.KEY_MODS;\nvar MultiHashHandler = /** @class */ (function () {\n function MultiHashHandler(config, platform) {\n this.$init(config, platform, false);\n }\n MultiHashHandler.prototype.$init = function (config, platform, $singleCommand) {\n this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n this.commands = {};\n this.commandKeyBinding = {};\n this.addCommands(config);\n this.$singleCommand = $singleCommand;\n };\n MultiHashHandler.prototype.addCommand = function (command) {\n if (this.commands[command.name])\n this.removeCommand(command);\n this.commands[command.name] = command;\n if (command.bindKey)\n this._buildKeyHash(command);\n };\n MultiHashHandler.prototype.removeCommand = function (command, keepCommand) {\n var name = command && (typeof command === 'string' ? command : command.name);\n command = this.commands[name];\n if (!keepCommand)\n delete this.commands[name];\n var ckb = this.commandKeyBinding;\n for (var keyId in ckb) {\n var cmdGroup = ckb[keyId];\n if (cmdGroup == command) {\n delete ckb[keyId];\n }\n else if (Array.isArray(cmdGroup)) {\n var i = cmdGroup.indexOf(command);\n if (i != -1) {\n cmdGroup.splice(i, 1);\n if (cmdGroup.length == 1)\n ckb[keyId] = cmdGroup[0];\n }\n }\n }\n };\n MultiHashHandler.prototype.bindKey = function (key, command, position) {\n if (typeof key == \"object\" && key) {\n if (position == undefined)\n position = key.position;\n key = key[this.platform];\n }\n if (!key)\n return;\n if (typeof command == \"function\")\n return this.addCommand({ exec: command, bindKey: key, name: command.name || /**@type{string}*/ (key) }); (key).split(\"|\").forEach(function (keyPart) {\n var chain = \"\";\n if (keyPart.indexOf(\" \") != -1) {\n var parts = keyPart.split(/\\s+/);\n keyPart = parts.pop();\n parts.forEach(function (keyPart) {\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n chain += (chain ? \" \" : \"\") + id;\n this._addCommandToBinding(chain, \"chainKeys\");\n }, this);\n chain += \" \";\n }\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n this._addCommandToBinding(chain + id, command, position);\n }, this);\n };\n MultiHashHandler.prototype._addCommandToBinding = function (keyId, command, position) {\n var ckb = this.commandKeyBinding, i;\n if (!command) {\n delete ckb[keyId];\n }\n else if (!ckb[keyId] || this.$singleCommand) {\n ckb[keyId] = command;\n }\n else {\n if (!Array.isArray(ckb[keyId])) {\n ckb[keyId] = [ckb[keyId]];\n }\n else if ((i = ckb[keyId].indexOf(command)) != -1) {\n ckb[keyId].splice(i, 1);\n }\n if (typeof position != \"number\") {\n position = getPosition(command);\n }\n var commands = ckb[keyId];\n for (i = 0; i < commands.length; i++) {\n var other = commands[i];\n var otherPos = getPosition(other);\n if (otherPos > position)\n break;\n }\n commands.splice(i, 0, command);\n }\n };\n MultiHashHandler.prototype.addCommands = function (commands) {\n commands && Object.keys(commands).forEach(function (name) {\n var command = commands[name];\n if (!command)\n return;\n if (typeof command === \"string\")\n return this.bindKey(command, name);\n if (typeof command === \"function\")\n command = { exec: command };\n if (typeof command !== \"object\")\n return;\n if (!command.name)\n command.name = name;\n this.addCommand(command);\n }, this);\n };\n MultiHashHandler.prototype.removeCommands = function (commands) {\n Object.keys(commands).forEach(function (name) {\n this.removeCommand(commands[name]);\n }, this);\n };\n MultiHashHandler.prototype.bindKeys = function (keyList) {\n Object.keys(keyList).forEach(function (key) {\n this.bindKey(key, keyList[key]);\n }, this);\n };\n MultiHashHandler.prototype._buildKeyHash = function (command) {\n this.bindKey(command.bindKey, command);\n };\n MultiHashHandler.prototype.parseKeys = function (keys) {\n var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function (x) { return x; });\n var key = parts.pop();\n var keyCode = keyUtil[key];\n if (keyUtil.FUNCTION_KEYS[keyCode])\n key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();\n else if (!parts.length)\n return { key: key, hashId: -1 };\n else if (parts.length == 1 && parts[0] == \"shift\")\n return { key: key.toUpperCase(), hashId: -1 };\n var hashId = 0;\n for (var i = parts.length; i--;) {\n var modifier = keyUtil.KEY_MODS[parts[i]];\n if (modifier == null) {\n if (typeof console != \"undefined\")\n console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\n return false;\n }\n hashId |= modifier;\n }\n return { key: key, hashId: hashId };\n };\n MultiHashHandler.prototype.findKeyCommand = function (hashId, keyString) {\n var key = KEY_MODS[hashId] + keyString;\n return this.commandKeyBinding[key];\n };\n MultiHashHandler.prototype.handleKeyboard = function (data, hashId, keyString, keyCode) {\n if (keyCode < 0)\n return;\n var key = KEY_MODS[hashId] + keyString;\n var command = this.commandKeyBinding[key];\n if (data.$keyChain) {\n data.$keyChain += \" \" + key;\n command = this.commandKeyBinding[data.$keyChain] || command;\n }\n if (command) {\n if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\n data.$keyChain = data.$keyChain || key;\n return { command: \"null\" };\n }\n }\n if (data.$keyChain) {\n if ((!hashId || hashId == 4) && keyString.length == 1)\n data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\n else if (hashId == -1 || keyCode > 0)\n data.$keyChain = \"\"; // reset keyChain\n }\n return { command: command };\n };\n MultiHashHandler.prototype.getStatusText = function (editor, data) {\n return data.$keyChain || \"\";\n };\n return MultiHashHandler;\n}());\nfunction getPosition(command) {\n return typeof command == \"object\" && command.bindKey\n && command.bindKey.position\n || (command.isDefault ? -100 : 0);\n}\nvar HashHandler = /** @class */ (function (_super) {\n __extends(HashHandler, _super);\n function HashHandler(config, platform) {\n var _this = _super.call(this, config, platform) || this;\n _this.$singleCommand = true;\n return _this;\n }\n return HashHandler;\n}(MultiHashHandler));\nHashHandler.call = function (thisArg, config, platform) {\n MultiHashHandler.prototype.$init.call(thisArg, config, platform, true);\n};\nMultiHashHandler.call = function (thisArg, config, platform) {\n MultiHashHandler.prototype.$init.call(thisArg, config, platform, false);\n};\nexports.HashHandler = HashHandler;\nexports.MultiHashHandler = MultiHashHandler;\n\n});\n\nace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar oop = require(\"../lib/oop\");\nvar MultiHashHandler = require(\"../keyboard/hash_handler\").MultiHashHandler;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar CommandManager = /** @class */ (function (_super) {\n __extends(CommandManager, _super);\n function CommandManager(platform, commands) {\n var _this = _super.call(this, commands, platform) || this;\n _this.byName = _this.commands;\n _this.setDefaultHandler(\"exec\", function (e) {\n if (!e.args) {\n return e.command.exec(e.editor, {}, e.event, true);\n }\n return e.command.exec(e.editor, e.args, e.event, false);\n });\n return _this;\n }\n CommandManager.prototype.exec = function (command, editor, args) {\n if (Array.isArray(command)) {\n for (var i = command.length; i--;) {\n if (this.exec(command[i], editor, args))\n return true;\n }\n return false;\n }\n if (typeof command === \"string\")\n command = this.commands[command];\n if (!command)\n return false;\n if (editor && editor.$readOnly && !command.readOnly)\n return false;\n if (this.$checkCommandState != false && command.isAvailable && !command.isAvailable(editor))\n return false;\n var e = { editor: editor, command: command, args: args };\n e.returnValue = this._emit(\"exec\", e);\n this._signal(\"afterExec\", e);\n return e.returnValue === false ? false : true;\n };\n CommandManager.prototype.toggleRecording = function (editor) {\n if (this.$inReplay)\n return;\n editor && editor._emit(\"changeStatus\");\n if (this.recording) {\n this.macro.pop();\n this.off(\"exec\", this.$addCommandToMacro);\n if (!this.macro.length)\n this.macro = this.oldMacro;\n return this.recording = false;\n }\n if (!this.$addCommandToMacro) {\n this.$addCommandToMacro = function (e) {\n this.macro.push([e.command, e.args]);\n }.bind(this);\n }\n this.oldMacro = this.macro;\n this.macro = [];\n this.on(\"exec\", this.$addCommandToMacro);\n return this.recording = true;\n };\n CommandManager.prototype.replay = function (editor) {\n if (this.$inReplay || !this.macro)\n return;\n if (this.recording)\n return this.toggleRecording(editor);\n try {\n this.$inReplay = true;\n this.macro.forEach(function (x) {\n if (typeof x == \"string\")\n this.exec(x, editor);\n else\n this.exec(x[0], editor, x[1]);\n }, this);\n }\n finally {\n this.$inReplay = false;\n }\n };\n CommandManager.prototype.trimMacro = function (m) {\n return m.map(function (x) {\n if (typeof x[0] != \"string\")\n x[0] = x[0].name;\n if (!x[1])\n x = x[0];\n return x;\n });\n };\n return CommandManager;\n}(MultiHashHandler));\noop.implement(CommandManager.prototype, EventEmitter);\nexports.CommandManager = CommandManager;\n\n});\n\nace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"../lib/lang\");\nvar config = require(\"../config\");\nvar Range = require(\"../range\").Range;\nfunction bindKey(win, mac) {\n return { win: win, mac: mac };\n}\nexports.commands = [{\n name: \"showSettingsMenu\",\n description: \"Show settings menu\",\n bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/settings_menu\", function (module) {\n module.init(editor);\n editor.showSettingsMenu();\n });\n },\n readOnly: true\n }, {\n name: \"goToNextError\",\n description: \"Go to next error\",\n bindKey: bindKey(\"Alt-E\", \"F4\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/error_marker\", function (module) {\n module.showErrorMarker(editor, 1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"goToPreviousError\",\n description: \"Go to previous error\",\n bindKey: bindKey(\"Alt-Shift-E\", \"Shift-F4\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/error_marker\", function (module) {\n module.showErrorMarker(editor, -1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"selectall\",\n description: \"Select all\",\n bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\n exec: function (editor) { editor.selectAll(); },\n readOnly: true\n }, {\n name: \"centerselection\",\n description: \"Center selection\",\n bindKey: bindKey(null, \"Ctrl-L\"),\n exec: function (editor) { editor.centerSelection(); },\n readOnly: true\n }, {\n name: \"gotoline\",\n description: \"Go to line...\",\n bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\n exec: function (editor, line) {\n if (typeof line === \"number\" && !isNaN(line))\n editor.gotoLine(line);\n editor.prompt({ $type: \"gotoLine\" });\n },\n readOnly: true\n }, {\n name: \"fold\",\n bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\n exec: function (editor) { editor.session.toggleFold(false); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"unfold\",\n bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\n exec: function (editor) { editor.session.toggleFold(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"toggleFoldWidget\",\n description: \"Toggle fold widget\",\n bindKey: bindKey(\"F2\", \"F2\"),\n exec: function (editor) { editor.session.toggleFoldWidget(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"toggleParentFoldWidget\",\n description: \"Toggle parent fold widget\",\n bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\n exec: function (editor) { editor.session.toggleFoldWidget(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldall\",\n description: \"Fold all\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function (editor) { editor.session.foldAll(); },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldAllComments\",\n description: \"Fold all comments\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function (editor) { editor.session.foldAllComments(); },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldOther\",\n description: \"Fold other\",\n bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\n exec: function (editor) {\n editor.session.foldAll();\n editor.session.unfold(editor.selection.getAllRanges());\n },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"unfoldall\",\n description: \"Unfold all\",\n bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\n exec: function (editor) { editor.session.unfold(); },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"findnext\",\n description: \"Find next\",\n bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\n exec: function (editor) { editor.findNext(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"findprevious\",\n description: \"Find previous\",\n bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n exec: function (editor) { editor.findPrevious(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"selectOrFindNext\",\n description: \"Select or find next\",\n bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\n exec: function (editor) {\n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findNext();\n },\n readOnly: true\n }, {\n name: \"selectOrFindPrevious\",\n description: \"Select or find previous\",\n bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n exec: function (editor) {\n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findPrevious();\n },\n readOnly: true\n }, {\n name: \"find\",\n description: \"Find\",\n bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/searchbox\", function (e) { e.Search(editor); });\n },\n readOnly: true\n }, {\n name: \"overwrite\",\n description: \"Overwrite\",\n bindKey: \"Insert\",\n exec: function (editor) { editor.toggleOverwrite(); },\n readOnly: true\n }, {\n name: \"selecttostart\",\n description: \"Select to start\",\n bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n exec: function (editor) { editor.getSelection().selectFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotostart\",\n description: \"Go to start\",\n bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n exec: function (editor) { editor.navigateFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectup\",\n description: \"Select up\",\n bindKey: bindKey(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n exec: function (editor) { editor.getSelection().selectUp(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"golineup\",\n description: \"Go line up\",\n bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\n exec: function (editor, args) { editor.navigateUp(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttoend\",\n description: \"Select to end\",\n bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n exec: function (editor) { editor.getSelection().selectFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotoend\",\n description: \"Go to end\",\n bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\n exec: function (editor) { editor.navigateFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectdown\",\n description: \"Select down\",\n bindKey: bindKey(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n exec: function (editor) { editor.getSelection().selectDown(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"golinedown\",\n description: \"Go line down\",\n bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\n exec: function (editor, args) { editor.navigateDown(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectwordleft\",\n description: \"Select word left\",\n bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n exec: function (editor) { editor.getSelection().selectWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotowordleft\",\n description: \"Go to word left\",\n bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\n exec: function (editor) { editor.navigateWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttolinestart\",\n description: \"Select to line start\",\n bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n exec: function (editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotolinestart\",\n description: \"Go to line start\",\n bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n exec: function (editor) { editor.navigateLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectleft\",\n description: \"Select left\",\n bindKey: bindKey(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n exec: function (editor) { editor.getSelection().selectLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotoleft\",\n description: \"Go to left\",\n bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\n exec: function (editor, args) { editor.navigateLeft(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectwordright\",\n description: \"Select word right\",\n bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n exec: function (editor) { editor.getSelection().selectWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotowordright\",\n description: \"Go to word right\",\n bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\n exec: function (editor) { editor.navigateWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttolineend\",\n description: \"Select to line end\",\n bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n exec: function (editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotolineend\",\n description: \"Go to line end\",\n bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n exec: function (editor) { editor.navigateLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectright\",\n description: \"Select right\",\n bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\n exec: function (editor) { editor.getSelection().selectRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotoright\",\n description: \"Go to right\",\n bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\n exec: function (editor, args) { editor.navigateRight(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectpagedown\",\n description: \"Select page down\",\n bindKey: \"Shift-PageDown\",\n exec: function (editor) { editor.selectPageDown(); },\n readOnly: true\n }, {\n name: \"pagedown\",\n description: \"Page down\",\n bindKey: bindKey(null, \"Option-PageDown\"),\n exec: function (editor) { editor.scrollPageDown(); },\n readOnly: true\n }, {\n name: \"gotopagedown\",\n description: \"Go to page down\",\n bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\n exec: function (editor) { editor.gotoPageDown(); },\n readOnly: true\n }, {\n name: \"selectpageup\",\n description: \"Select page up\",\n bindKey: \"Shift-PageUp\",\n exec: function (editor) { editor.selectPageUp(); },\n readOnly: true\n }, {\n name: \"pageup\",\n description: \"Page up\",\n bindKey: bindKey(null, \"Option-PageUp\"),\n exec: function (editor) { editor.scrollPageUp(); },\n readOnly: true\n }, {\n name: \"gotopageup\",\n description: \"Go to page up\",\n bindKey: \"PageUp\",\n exec: function (editor) { editor.gotoPageUp(); },\n readOnly: true\n }, {\n name: \"scrollup\",\n description: \"Scroll up\",\n bindKey: bindKey(\"Ctrl-Up\", null),\n exec: function (e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n }, {\n name: \"scrolldown\",\n description: \"Scroll down\",\n bindKey: bindKey(\"Ctrl-Down\", null),\n exec: function (e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n }, {\n name: \"selectlinestart\",\n description: \"Select line start\",\n bindKey: \"Shift-Home\",\n exec: function (editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectlineend\",\n description: \"Select line end\",\n bindKey: \"Shift-End\",\n exec: function (editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"togglerecording\",\n description: \"Toggle recording\",\n bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n exec: function (editor) { editor.commands.toggleRecording(editor); },\n readOnly: true\n }, {\n name: \"replaymacro\",\n description: \"Replay macro\",\n bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n exec: function (editor) { editor.commands.replay(editor); },\n readOnly: true\n }, {\n name: \"jumptomatching\",\n description: \"Jump to matching\",\n bindKey: bindKey(\"Ctrl-\\\\|Ctrl-P\", \"Command-\\\\\"),\n exec: function (editor) { editor.jumpToMatching(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"selecttomatching\",\n description: \"Select to matching\",\n bindKey: bindKey(\"Ctrl-Shift-\\\\|Ctrl-Shift-P\", \"Command-Shift-\\\\\"),\n exec: function (editor) { editor.jumpToMatching(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"expandToMatching\",\n description: \"Expand to matching\",\n bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\n exec: function (editor) { editor.jumpToMatching(true, true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"passKeysToBrowser\",\n description: \"Pass keys to browser\",\n bindKey: bindKey(null, null),\n exec: function () { },\n passEvent: true,\n readOnly: true\n }, {\n name: \"copy\",\n description: \"Copy\",\n exec: function (editor) {\n },\n readOnly: true\n },\n {\n name: \"cut\",\n description: \"Cut\",\n exec: function (editor) {\n var cutLine = editor.$copyWithEmptySelection && editor.selection.isEmpty();\n var range = cutLine ? editor.selection.getLineRange() : editor.selection.getRange();\n editor._emit(\"cut\", range);\n if (!range.isEmpty())\n editor.session.remove(range);\n editor.clearSelection();\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"paste\",\n description: \"Paste\",\n exec: function (editor, args) {\n editor.$handlePaste(args);\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"removeline\",\n description: \"Remove line\",\n bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\n exec: function (editor) { editor.removeLines(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"duplicateSelection\",\n description: \"Duplicate selection\",\n bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n exec: function (editor) { editor.duplicateSelection(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"sortlines\",\n description: \"Sort lines\",\n bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n exec: function (editor) { editor.sortLines(); },\n scrollIntoView: \"selection\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"togglecomment\",\n description: \"Toggle comment\",\n bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\n exec: function (editor) { editor.toggleCommentLines(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"toggleBlockComment\",\n description: \"Toggle block comment\",\n bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n exec: function (editor) { editor.toggleBlockComment(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"modifyNumberUp\",\n description: \"Modify number up\",\n bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n exec: function (editor) { editor.modifyNumber(1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"modifyNumberDown\",\n description: \"Modify number down\",\n bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n exec: function (editor) { editor.modifyNumber(-1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"replace\",\n description: \"Replace\",\n bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/searchbox\", function (e) { e.Search(editor, true); });\n }\n }, {\n name: \"undo\",\n description: \"Undo\",\n bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\n exec: function (editor) { editor.undo(); }\n }, {\n name: \"redo\",\n description: \"Redo\",\n bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n exec: function (editor) { editor.redo(); }\n }, {\n name: \"copylinesup\",\n description: \"Copy lines up\",\n bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n exec: function (editor) { editor.copyLinesUp(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesup\",\n description: \"Move lines up\",\n bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\n exec: function (editor) { editor.moveLinesUp(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"copylinesdown\",\n description: \"Copy lines down\",\n bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n exec: function (editor) { editor.copyLinesDown(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesdown\",\n description: \"Move lines down\",\n bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\n exec: function (editor) { editor.moveLinesDown(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"del\",\n description: \"Delete\",\n bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n exec: function (editor) { editor.remove(\"right\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"backspace\",\n description: \"Backspace\",\n bindKey: bindKey(\"Shift-Backspace|Backspace\", \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"),\n exec: function (editor) { editor.remove(\"left\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"cut_or_delete\",\n description: \"Cut or delete\",\n bindKey: bindKey(\"Shift-Delete\", null),\n exec: function (editor) {\n if (editor.selection.isEmpty()) {\n editor.remove(\"left\");\n }\n else {\n return false;\n }\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestart\",\n description: \"Remove to line start\",\n bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\n exec: function (editor) { editor.removeToLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineend\",\n description: \"Remove to line end\",\n bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K|Command-Delete\"),\n exec: function (editor) { editor.removeToLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestarthard\",\n description: \"Remove to line start hard\",\n bindKey: bindKey(\"Ctrl-Shift-Backspace\", null),\n exec: function (editor) {\n var range = editor.selection.getRange();\n range.start.column = 0;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineendhard\",\n description: \"Remove to line end hard\",\n bindKey: bindKey(\"Ctrl-Shift-Delete\", null),\n exec: function (editor) {\n var range = editor.selection.getRange();\n range.end.column = Number.MAX_VALUE;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordleft\",\n description: \"Remove word left\",\n bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\n exec: function (editor) { editor.removeWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordright\",\n description: \"Remove word right\",\n bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\n exec: function (editor) { editor.removeWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"outdent\",\n description: \"Outdent\",\n bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\n exec: function (editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"indent\",\n description: \"Indent\",\n bindKey: bindKey(\"Tab\", \"Tab\"),\n exec: function (editor) { editor.indent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockoutdent\",\n description: \"Block outdent\",\n bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\n exec: function (editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockindent\",\n description: \"Block indent\",\n bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\n exec: function (editor) { editor.blockIndent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"insertstring\",\n description: \"Insert string\",\n exec: function (editor, str) { editor.insert(str); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"inserttext\",\n description: \"Insert text\",\n exec: function (editor, args) {\n editor.insert(lang.stringRepeat(args.text || \"\", args.times || 1));\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"splitline\",\n description: \"Split line\",\n bindKey: bindKey(null, \"Ctrl-O\"),\n exec: function (editor) { editor.splitLine(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"transposeletters\",\n description: \"Transpose letters\",\n bindKey: bindKey(\"Alt-Shift-X\", \"Ctrl-T\"),\n exec: function (editor) { editor.transposeLetters(); },\n multiSelectAction: function (editor) { editor.transposeSelections(1); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"touppercase\",\n description: \"To uppercase\",\n bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\n exec: function (editor) { editor.toUpperCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"tolowercase\",\n description: \"To lowercase\",\n bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n exec: function (editor) { editor.toLowerCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"autoindent\",\n description: \"Auto Indent\",\n bindKey: bindKey(null, null),\n exec: function (editor) { editor.autoIndent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"animate\"\n }, {\n name: \"expandtoline\",\n description: \"Expand to line\",\n bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\n exec: function (editor) {\n var range = editor.selection.getRange();\n range.start.column = range.end.column = 0;\n range.end.row++;\n editor.selection.setRange(range, false);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"openlink\",\n bindKey: bindKey(\"Ctrl+F3\", \"F3\"),\n exec: function (editor) { editor.openLink(); }\n }, {\n name: \"joinlines\",\n description: \"Join lines\",\n bindKey: bindKey(null, null),\n exec: function (editor) {\n var isBackwards = editor.selection.isBackwards();\n var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\n var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\n var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\n var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\n var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\n var insertLine = editor.session.doc.getLine(selectionStart.row);\n for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\n var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\n if (curLine.length !== 0) {\n curLine = \" \" + curLine;\n }\n insertLine += curLine;\n }\n if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {\n insertLine += editor.session.doc.getNewLineCharacter();\n }\n editor.clearSelection();\n editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\n if (selectedCount > 0) {\n editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\n editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\n }\n else {\n firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;\n editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\n }\n },\n multiSelectAction: \"forEach\",\n readOnly: true\n }, {\n name: \"invertSelection\",\n description: \"Invert selection\",\n bindKey: bindKey(null, null),\n exec: function (editor) {\n var endRow = editor.session.doc.getLength() - 1;\n var endCol = editor.session.doc.getLine(endRow).length;\n var ranges = editor.selection.rangeList.ranges;\n var newRanges = [];\n if (ranges.length < 1) {\n ranges = [editor.selection.getRange()];\n }\n for (var i = 0; i < ranges.length; i++) {\n if (i == (ranges.length - 1)) {\n if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\n newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\n }\n }\n if (i === 0) {\n if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\n newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\n }\n }\n else {\n newRanges.push(new Range(ranges[i - 1].end.row, ranges[i - 1].end.column, ranges[i].start.row, ranges[i].start.column));\n }\n }\n editor.exitMultiSelectMode();\n editor.clearSelection();\n for (var i = 0; i < newRanges.length; i++) {\n editor.selection.addRange(newRanges[i], false);\n }\n },\n readOnly: true,\n scrollIntoView: \"none\"\n }, {\n name: \"addLineAfter\",\n description: \"Add new line after the current line\",\n exec: function (editor) {\n editor.selection.clearSelection();\n editor.navigateLineEnd();\n editor.insert(\"\\n\");\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"addLineBefore\",\n description: \"Add new line before the current line\",\n exec: function (editor) {\n editor.selection.clearSelection();\n var cursor = editor.getCursorPosition();\n editor.selection.moveTo(cursor.row - 1, Number.MAX_VALUE);\n editor.insert(\"\\n\");\n if (cursor.row === 0)\n editor.navigateUp();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"openCommandPallete\",\n exec: function (editor) {\n console.warn(\"This is an obsolete command. Please use `openCommandPalette` instead.\");\n editor.prompt({ $type: \"commands\" });\n },\n readOnly: true\n }, {\n name: \"openCommandPalette\",\n description: \"Open command palette\",\n bindKey: bindKey(\"F1\", \"F1\"),\n exec: function (editor) {\n editor.prompt({ $type: \"commands\" });\n },\n readOnly: true\n }, {\n name: \"modeSelect\",\n description: \"Change language mode...\",\n bindKey: bindKey(null, null),\n exec: function (editor) {\n editor.prompt({ $type: \"modes\" });\n },\n readOnly: true\n }];\nfor (var i = 1; i < 9; i++) {\n exports.commands.push({\n name: \"foldToLevel\" + i,\n description: \"Fold To Level \" + i,\n level: i,\n exec: function (editor) { editor.session.foldToLevel(this.level); },\n scrollIntoView: \"center\",\n readOnly: true\n });\n}\n\n});\n\nace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"./lib/dom\");\nvar LineWidgets = /** @class */ (function () {\n function LineWidgets(session) {\n this.session = session;\n this.session.widgetManager = this;\n this.session.getRowLength = this.getRowLength;\n this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\n this.updateOnChange = this.updateOnChange.bind(this);\n this.renderWidgets = this.renderWidgets.bind(this);\n this.measureWidgets = this.measureWidgets.bind(this);\n this.session._changedWidgets = [];\n this.$onChangeEditor = this.$onChangeEditor.bind(this);\n this.session.on(\"change\", this.updateOnChange);\n this.session.on(\"changeFold\", this.updateOnFold);\n this.session.on(\"changeEditor\", this.$onChangeEditor);\n }\n LineWidgets.prototype.getRowLength = function (row) {\n var h;\n if (this.lineWidgets)\n h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n else\n h = 0;\n if (!this[\"$useWrapMode\"] || !this[\"$wrapData\"][row]) {\n return 1 + h;\n }\n else {\n return this[\"$wrapData\"][row].length + 1 + h;\n }\n };\n LineWidgets.prototype.$getWidgetScreenLength = function () {\n var screenRows = 0;\n this.lineWidgets.forEach(function (w) {\n if (w && w.rowCount && !w.hidden)\n screenRows += w.rowCount;\n });\n return screenRows;\n };\n LineWidgets.prototype.$onChangeEditor = function (e) {\n this.attach(e.editor);\n };\n LineWidgets.prototype.attach = function (editor) {\n if (editor && editor.widgetManager && editor.widgetManager != this)\n editor.widgetManager.detach();\n if (this.editor == editor)\n return;\n this.detach();\n this.editor = editor;\n if (editor) {\n editor.widgetManager = this;\n editor.renderer.on(\"beforeRender\", this.measureWidgets);\n editor.renderer.on(\"afterRender\", this.renderWidgets);\n }\n };\n LineWidgets.prototype.detach = function (e) {\n var editor = this.editor;\n if (!editor)\n return;\n this.editor = null;\n editor.widgetManager = null;\n editor.renderer.off(\"beforeRender\", this.measureWidgets);\n editor.renderer.off(\"afterRender\", this.renderWidgets);\n var lineWidgets = this.session.lineWidgets;\n lineWidgets && lineWidgets.forEach(function (w) {\n if (w && w.el && w.el.parentNode) {\n w._inDocument = false;\n w.el.parentNode.removeChild(w.el);\n }\n });\n };\n LineWidgets.prototype.updateOnFold = function (e, session) {\n var lineWidgets = session.lineWidgets;\n if (!lineWidgets || !e.action)\n return;\n var fold = e.data;\n var start = fold.start.row;\n var end = fold.end.row;\n var hide = e.action == \"add\";\n for (var i = start + 1; i < end; i++) {\n if (lineWidgets[i])\n lineWidgets[i].hidden = hide;\n }\n if (lineWidgets[end]) {\n if (hide) {\n if (!lineWidgets[start])\n lineWidgets[start] = lineWidgets[end];\n else\n lineWidgets[end].hidden = hide;\n }\n else {\n if (lineWidgets[start] == lineWidgets[end])\n lineWidgets[start] = undefined;\n lineWidgets[end].hidden = hide;\n }\n }\n };\n LineWidgets.prototype.updateOnChange = function (delta) {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n if (len === 0) {\n }\n else if (delta.action == \"remove\") {\n var removed = lineWidgets.splice(startRow + 1, len);\n if (!lineWidgets[startRow] && removed[removed.length - 1]) {\n lineWidgets[startRow] = removed.pop();\n }\n removed.forEach(function (w) {\n w && this.removeLineWidget(w);\n }, this);\n this.$updateRows();\n }\n else {\n var args = new Array(len);\n if (lineWidgets[startRow] && lineWidgets[startRow].column != null) {\n if (delta.start.column > lineWidgets[startRow].column)\n startRow++;\n }\n args.unshift(startRow, 0);\n lineWidgets.splice.apply(lineWidgets, args);\n this.$updateRows();\n }\n };\n LineWidgets.prototype.$updateRows = function () {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var noWidgets = true;\n lineWidgets.forEach(function (w, i) {\n if (w) {\n noWidgets = false;\n w.row = i;\n while (w.$oldWidget) {\n w.$oldWidget.row = i;\n w = w.$oldWidget;\n }\n }\n });\n if (noWidgets)\n this.session.lineWidgets = null;\n };\n LineWidgets.prototype.$registerLineWidget = function (w) {\n if (!this.session.lineWidgets)\n this.session.lineWidgets = new Array(this.session.getLength());\n var old = this.session.lineWidgets[w.row];\n if (old) {\n w.$oldWidget = old;\n if (old.el && old.el.parentNode) {\n old.el.parentNode.removeChild(old.el);\n old._inDocument = false;\n }\n }\n this.session.lineWidgets[w.row] = w;\n return w;\n };\n LineWidgets.prototype.addLineWidget = function (w) {\n this.$registerLineWidget(w);\n w.session = this.session;\n if (!this.editor)\n return w;\n var renderer = this.editor.renderer;\n if (w.html && !w.el) {\n w.el = dom.createElement(\"div\");\n w.el.innerHTML = w.html;\n }\n if (w.text && !w.el) {\n w.el = dom.createElement(\"div\");\n w.el.textContent = w.text;\n }\n if (w.el) {\n dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\n if (w.className) {\n dom.addCssClass(w.el, w.className);\n }\n w.el.style.position = \"absolute\";\n w.el.style.zIndex = \"5\";\n renderer.container.appendChild(w.el);\n w._inDocument = true;\n if (!w.coverGutter) {\n w.el.style.zIndex = \"3\";\n }\n if (w.pixelHeight == null) {\n w.pixelHeight = w.el.offsetHeight;\n }\n }\n if (w.rowCount == null) {\n w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\n }\n var fold = this.session.getFoldAt(w.row, 0);\n w.$fold = fold;\n if (fold) {\n var lineWidgets = this.session.lineWidgets;\n if (w.row == fold.end.row && !lineWidgets[fold.start.row])\n lineWidgets[fold.start.row] = w;\n else\n w.hidden = true;\n }\n this.session._emit(\"changeFold\", { data: { start: { row: w.row } } });\n this.$updateRows();\n this.renderWidgets(null, renderer);\n this.onWidgetChanged(w);\n return w;\n };\n LineWidgets.prototype.removeLineWidget = function (w) {\n w._inDocument = false;\n w.session = null;\n if (w.el && w.el.parentNode)\n w.el.parentNode.removeChild(w.el);\n if (w.editor && w.editor.destroy)\n try {\n w.editor.destroy();\n }\n catch (e) { }\n if (this.session.lineWidgets) {\n var w1 = this.session.lineWidgets[w.row];\n if (w1 == w) {\n this.session.lineWidgets[w.row] = w.$oldWidget;\n if (w.$oldWidget)\n this.onWidgetChanged(w.$oldWidget);\n }\n else {\n while (w1) {\n if (w1.$oldWidget == w) {\n w1.$oldWidget = w.$oldWidget;\n break;\n }\n w1 = w1.$oldWidget;\n }\n }\n }\n this.session._emit(\"changeFold\", { data: { start: { row: w.row } } });\n this.$updateRows();\n };\n LineWidgets.prototype.getWidgetsAtRow = function (row) {\n var lineWidgets = this.session.lineWidgets;\n var w = lineWidgets && lineWidgets[row];\n var list = [];\n while (w) {\n list.push(w);\n w = w.$oldWidget;\n }\n return list;\n };\n LineWidgets.prototype.onWidgetChanged = function (w) {\n this.session._changedWidgets.push(w);\n this.editor && this.editor.renderer.updateFull();\n };\n LineWidgets.prototype.measureWidgets = function (e, renderer) {\n var changedWidgets = this.session._changedWidgets;\n var config = renderer.layerConfig;\n if (!changedWidgets || !changedWidgets.length)\n return;\n var min = Infinity;\n for (var i = 0; i < changedWidgets.length; i++) {\n var w = changedWidgets[i];\n if (!w || !w.el)\n continue;\n if (w.session != this.session)\n continue;\n if (!w._inDocument) {\n if (this.session.lineWidgets[w.row] != w)\n continue;\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n w.h = w.el.offsetHeight;\n if (!w.fixedWidth) {\n w.w = w.el.offsetWidth;\n w.screenWidth = Math.ceil(w.w / config.characterWidth);\n }\n var rowCount = w.h / config.lineHeight;\n if (w.coverLine) {\n rowCount -= this.session.getRowLineCount(w.row);\n if (rowCount < 0)\n rowCount = 0;\n }\n if (w.rowCount != rowCount) {\n w.rowCount = rowCount;\n if (w.row < min)\n min = w.row;\n }\n }\n if (min != Infinity) {\n this.session._emit(\"changeFold\", { data: { start: { row: min } } });\n this.session.lineWidgetWidth = null;\n }\n this.session._changedWidgets = [];\n };\n LineWidgets.prototype.renderWidgets = function (e, renderer) {\n var config = renderer.layerConfig;\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var first = Math.min(this.firstRow, config.firstRow);\n var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\n while (first > 0 && !lineWidgets[first])\n first--;\n this.firstRow = config.firstRow;\n this.lastRow = config.lastRow;\n renderer.$cursorLayer.config = config;\n for (var i = first; i <= last; i++) {\n var w = lineWidgets[i];\n if (!w || !w.el)\n continue;\n if (w.hidden) {\n w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\n continue;\n }\n if (!w._inDocument) {\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n var top = renderer.$cursorLayer.getPixelPosition({ row: i, column: 0 }, true).top;\n if (!w.coverLine)\n top += config.lineHeight * this.session.getRowLineCount(w.row);\n w.el.style.top = top - config.offset + \"px\";\n var left = w.coverGutter ? 0 : renderer.gutterWidth;\n if (!w.fixedWidth)\n left -= renderer.scrollLeft;\n w.el.style.left = left + \"px\";\n if (w.fullWidth && w.screenWidth) {\n w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\n }\n if (w.fixedWidth) {\n w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\n }\n else {\n w.el.style.right = \"\";\n }\n }\n };\n return LineWidgets;\n}());\nexports.LineWidgets = LineWidgets;\n\n});\n\nace.define(\"ace/keyboard/gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/mouse/default_gutter_handler\"], function(require, exports, module){\"use strict\";\nvar keys = require('../lib/keys');\nvar GutterTooltip = require(\"../mouse/default_gutter_handler\").GutterTooltip;\nvar GutterKeyboardHandler = /** @class */ (function () {\n function GutterKeyboardHandler(editor) {\n this.editor = editor;\n this.gutterLayer = editor.renderer.$gutterLayer;\n this.element = editor.renderer.$gutter;\n this.lines = editor.renderer.$gutterLayer.$lines;\n this.activeRowIndex = null;\n this.activeLane = null;\n this.annotationTooltip = new GutterTooltip(this.editor);\n }\n GutterKeyboardHandler.prototype.addListener = function () {\n this.element.addEventListener(\"keydown\", this.$onGutterKeyDown.bind(this));\n this.element.addEventListener(\"focusout\", this.$blurGutter.bind(this));\n this.editor.on(\"mousewheel\", this.$blurGutter.bind(this));\n };\n GutterKeyboardHandler.prototype.removeListener = function () {\n this.element.removeEventListener(\"keydown\", this.$onGutterKeyDown.bind(this));\n this.element.removeEventListener(\"focusout\", this.$blurGutter.bind(this));\n this.editor.off(\"mousewheel\", this.$blurGutter.bind(this));\n };\n GutterKeyboardHandler.prototype.$onGutterKeyDown = function (e) {\n if (this.annotationTooltip.isOpen) {\n e.preventDefault();\n if (e.keyCode === keys[\"escape\"])\n this.annotationTooltip.hideTooltip();\n return;\n }\n if (e.target === this.element) {\n if (e.keyCode != keys[\"enter\"]) {\n return;\n }\n e.preventDefault();\n var row = this.editor.getCursorPosition().row;\n if (!this.editor.isRowVisible(row))\n this.editor.scrollToLine(row, true, true);\n setTimeout(\n function () {\n var index = this.$rowToRowIndex(this.gutterLayer.$cursorCell.row);\n var nearestFoldIndex = this.$findNearestFoldWidget(index);\n var nearestAnnotationIndex = this.$findNearestAnnotation(index);\n if (nearestFoldIndex === null && nearestAnnotationIndex === null)\n return;\n if (nearestFoldIndex === null && nearestAnnotationIndex !== null) {\n this.activeRowIndex = nearestAnnotationIndex;\n this.activeLane = \"annotation\";\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n if (nearestFoldIndex !== null && nearestAnnotationIndex === null) {\n this.activeRowIndex = nearestFoldIndex;\n this.activeLane = \"fold\";\n this.$focusFoldWidget(this.activeRowIndex);\n return;\n }\n if (Math.abs(nearestAnnotationIndex - index) < Math.abs(nearestFoldIndex - index)) {\n this.activeRowIndex = nearestAnnotationIndex;\n this.activeLane = \"annotation\";\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n else {\n this.activeRowIndex = nearestFoldIndex;\n this.activeLane = \"fold\";\n this.$focusFoldWidget(this.activeRowIndex);\n return;\n }\n }.bind(this), 10);\n return;\n }\n this.$handleGutterKeyboardInteraction(e);\n setTimeout(function () {\n this.editor._signal(\"gutterkeydown\", new GutterKeyboardEvent(e, this));\n }.bind(this), 10);\n };\n GutterKeyboardHandler.prototype.$handleGutterKeyboardInteraction = function (e) {\n if (e.keyCode === keys[\"tab\"]) {\n e.preventDefault();\n return;\n }\n if (e.keyCode === keys[\"escape\"]) {\n e.preventDefault();\n this.$blurGutter();\n this.element.focus();\n this.lane = null;\n return;\n }\n if (e.keyCode === keys[\"up\"]) {\n e.preventDefault();\n switch (this.activeLane) {\n case \"fold\":\n this.$moveFoldWidgetUp();\n break;\n case \"annotation\":\n this.$moveAnnotationUp();\n break;\n }\n return;\n }\n if (e.keyCode === keys[\"down\"]) {\n e.preventDefault();\n switch (this.activeLane) {\n case \"fold\":\n this.$moveFoldWidgetDown();\n break;\n case \"annotation\":\n this.$moveAnnotationDown();\n break;\n }\n return;\n }\n if (e.keyCode === keys[\"left\"]) {\n e.preventDefault();\n this.$switchLane(\"annotation\");\n return;\n }\n if (e.keyCode === keys[\"right\"]) {\n e.preventDefault();\n this.$switchLane(\"fold\");\n return;\n }\n if (e.keyCode === keys[\"enter\"] || e.keyCode === keys[\"space\"]) {\n e.preventDefault();\n switch (this.activeLane) {\n case \"fold\":\n if (this.gutterLayer.session.foldWidgets[this.$rowIndexToRow(this.activeRowIndex)] === 'start') {\n var rowFoldingWidget = this.$rowIndexToRow(this.activeRowIndex);\n this.editor.session.onFoldWidgetClick(this.$rowIndexToRow(this.activeRowIndex), e);\n setTimeout(\n function () {\n if (this.$rowIndexToRow(this.activeRowIndex) !== rowFoldingWidget) {\n this.$blurFoldWidget(this.activeRowIndex);\n this.activeRowIndex = this.$rowToRowIndex(rowFoldingWidget);\n this.$focusFoldWidget(this.activeRowIndex);\n }\n }.bind(this), 10);\n break;\n }\n else if (this.gutterLayer.session.foldWidgets[this.$rowIndexToRow(this.activeRowIndex)] === 'end') {\n break;\n }\n return;\n case \"annotation\":\n var gutterElement = this.lines.cells[this.activeRowIndex].element.childNodes[2];\n var rect = gutterElement.getBoundingClientRect();\n var style = this.annotationTooltip.getElement().style;\n style.left = rect.right + \"px\";\n style.top = rect.bottom + \"px\";\n this.annotationTooltip.showTooltip(this.$rowIndexToRow(this.activeRowIndex));\n break;\n }\n return;\n }\n };\n GutterKeyboardHandler.prototype.$blurGutter = function () {\n if (this.activeRowIndex !== null) {\n switch (this.activeLane) {\n case \"fold\":\n this.$blurFoldWidget(this.activeRowIndex);\n break;\n case \"annotation\":\n this.$blurAnnotation(this.activeRowIndex);\n break;\n }\n }\n if (this.annotationTooltip.isOpen)\n this.annotationTooltip.hideTooltip();\n return;\n };\n GutterKeyboardHandler.prototype.$isFoldWidgetVisible = function (index) {\n var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index));\n var isIconVisible = this.$getFoldWidget(index).style.display !== \"none\";\n return isRowFullyVisible && isIconVisible;\n };\n GutterKeyboardHandler.prototype.$isAnnotationVisible = function (index) {\n var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index));\n var isIconVisible = this.$getAnnotation(index).style.display !== \"none\";\n return isRowFullyVisible && isIconVisible;\n };\n GutterKeyboardHandler.prototype.$getFoldWidget = function (index) {\n var cell = this.lines.get(index);\n var element = cell.element;\n return element.childNodes[1];\n };\n GutterKeyboardHandler.prototype.$getAnnotation = function (index) {\n var cell = this.lines.get(index);\n var element = cell.element;\n return element.childNodes[2];\n };\n GutterKeyboardHandler.prototype.$findNearestFoldWidget = function (index) {\n if (this.$isFoldWidgetVisible(index))\n return index;\n var i = 0;\n while (index - i > 0 || index + i < this.lines.getLength() - 1) {\n i++;\n if (index - i >= 0 && this.$isFoldWidgetVisible(index - i))\n return index - i;\n if (index + i <= this.lines.getLength() - 1 && this.$isFoldWidgetVisible(index + i))\n return index + i;\n }\n return null;\n };\n GutterKeyboardHandler.prototype.$findNearestAnnotation = function (index) {\n if (this.$isAnnotationVisible(index))\n return index;\n var i = 0;\n while (index - i > 0 || index + i < this.lines.getLength() - 1) {\n i++;\n if (index - i >= 0 && this.$isAnnotationVisible(index - i))\n return index - i;\n if (index + i <= this.lines.getLength() - 1 && this.$isAnnotationVisible(index + i))\n return index + i;\n }\n return null;\n };\n GutterKeyboardHandler.prototype.$focusFoldWidget = function (index) {\n if (index == null)\n return;\n var foldWidget = this.$getFoldWidget(index);\n foldWidget.classList.add(this.editor.renderer.keyboardFocusClassName);\n foldWidget.focus();\n };\n GutterKeyboardHandler.prototype.$focusAnnotation = function (index) {\n if (index == null)\n return;\n var annotation = this.$getAnnotation(index);\n annotation.classList.add(this.editor.renderer.keyboardFocusClassName);\n annotation.focus();\n };\n GutterKeyboardHandler.prototype.$blurFoldWidget = function (index) {\n var foldWidget = this.$getFoldWidget(index);\n foldWidget.classList.remove(this.editor.renderer.keyboardFocusClassName);\n foldWidget.blur();\n };\n GutterKeyboardHandler.prototype.$blurAnnotation = function (index) {\n var annotation = this.$getAnnotation(index);\n annotation.classList.remove(this.editor.renderer.keyboardFocusClassName);\n annotation.blur();\n };\n GutterKeyboardHandler.prototype.$moveFoldWidgetUp = function () {\n var index = this.activeRowIndex;\n while (index > 0) {\n index--;\n if (this.$isFoldWidgetVisible(index)) {\n this.$blurFoldWidget(this.activeRowIndex);\n this.activeRowIndex = index;\n this.$focusFoldWidget(this.activeRowIndex);\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$moveFoldWidgetDown = function () {\n var index = this.activeRowIndex;\n while (index < this.lines.getLength() - 1) {\n index++;\n if (this.$isFoldWidgetVisible(index)) {\n this.$blurFoldWidget(this.activeRowIndex);\n this.activeRowIndex = index;\n this.$focusFoldWidget(this.activeRowIndex);\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$moveAnnotationUp = function () {\n var index = this.activeRowIndex;\n while (index > 0) {\n index--;\n if (this.$isAnnotationVisible(index)) {\n this.$blurAnnotation(this.activeRowIndex);\n this.activeRowIndex = index;\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$moveAnnotationDown = function () {\n var index = this.activeRowIndex;\n while (index < this.lines.getLength() - 1) {\n index++;\n if (this.$isAnnotationVisible(index)) {\n this.$blurAnnotation(this.activeRowIndex);\n this.activeRowIndex = index;\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$switchLane = function (desinationLane) {\n switch (desinationLane) {\n case \"annotation\":\n if (this.activeLane === \"annotation\") {\n break;\n }\n var annotationIndex = this.$findNearestAnnotation(this.activeRowIndex);\n if (annotationIndex == null) {\n break;\n }\n this.activeLane = \"annotation\";\n this.$blurFoldWidget(this.activeRowIndex);\n this.activeRowIndex = annotationIndex;\n this.$focusAnnotation(this.activeRowIndex);\n break;\n case \"fold\":\n if (this.activeLane === \"fold\") {\n break;\n }\n var foldWidgetIndex = this.$findNearestFoldWidget(this.activeRowIndex);\n if (foldWidgetIndex == null) {\n break;\n }\n this.activeLane = \"fold\";\n this.$blurAnnotation(this.activeRowIndex);\n this.activeRowIndex = foldWidgetIndex;\n this.$focusFoldWidget(this.activeRowIndex);\n break;\n }\n return;\n };\n GutterKeyboardHandler.prototype.$rowIndexToRow = function (index) {\n var cell = this.lines.get(index);\n if (cell)\n return cell.row;\n return null;\n };\n GutterKeyboardHandler.prototype.$rowToRowIndex = function (row) {\n for (var i = 0; i < this.lines.getLength(); i++) {\n var cell = this.lines.get(i);\n if (cell.row == row)\n return i;\n }\n return null;\n };\n return GutterKeyboardHandler;\n}());\nexports.GutterKeyboardHandler = GutterKeyboardHandler;\nvar GutterKeyboardEvent = /** @class */ (function () {\n function GutterKeyboardEvent(domEvent, gutterKeyboardHandler) {\n this.gutterKeyboardHandler = gutterKeyboardHandler;\n this.domEvent = domEvent;\n }\n GutterKeyboardEvent.prototype.getKey = function () {\n return keys.keyCodeToString(this.domEvent.keyCode);\n };\n GutterKeyboardEvent.prototype.getRow = function () {\n return this.gutterKeyboardHandler.$rowIndexToRow(this.gutterKeyboardHandler.activeRowIndex);\n };\n GutterKeyboardEvent.prototype.isInAnnotationLane = function () {\n return this.gutterKeyboardHandler.activeLane === \"annotation\";\n };\n GutterKeyboardEvent.prototype.isInFoldLane = function () {\n return this.gutterKeyboardHandler.activeLane === \"fold\";\n };\n return GutterKeyboardEvent;\n}());\nexports.GutterKeyboardEvent = GutterKeyboardEvent;\n\n});\n\nace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\",\"ace/line_widgets\",\"ace/keyboard/gutter_handler\",\"ace/config\",\"ace/clipboard\",\"ace/lib/keys\"], function(require, exports, module){\"use strict\";\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar useragent = require(\"./lib/useragent\");\nvar TextInput = require(\"./keyboard/textinput\").TextInput;\nvar MouseHandler = require(\"./mouse/mouse_handler\").MouseHandler;\nvar FoldHandler = require(\"./mouse/fold_handler\").FoldHandler;\nvar KeyBinding = require(\"./keyboard/keybinding\").KeyBinding;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Search = require(\"./search\").Search;\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar CommandManager = require(\"./commands/command_manager\").CommandManager;\nvar defaultCommands = require(\"./commands/default_commands\").commands;\nvar config = require(\"./config\");\nvar TokenIterator = require(\"./token_iterator\").TokenIterator;\nvar LineWidgets = require(\"./line_widgets\").LineWidgets;\nvar GutterKeyboardHandler = require(\"./keyboard/gutter_handler\").GutterKeyboardHandler;\nvar nls = require(\"./config\").nls;\nvar clipboard = require(\"./clipboard\");\nvar keys = require('./lib/keys');\nvar Editor = /** @class */ (function () {\n function Editor(renderer, session, options) { this.session;\n this.$toDestroy = [];\n var container = renderer.getContainerElement();\n this.container = container;\n this.renderer = renderer;\n this.id = \"editor\" + (++Editor.$uid);\n this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\n if (typeof document == \"object\") {\n this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\n this.renderer.textarea = this.textInput.getElement();\n this.$mouseHandler = new MouseHandler(this);\n new FoldHandler(this);\n }\n this.keyBinding = new KeyBinding(this);\n this.$search = new Search().set({\n wrap: true\n });\n this.$historyTracker = this.$historyTracker.bind(this);\n this.commands.on(\"exec\", this.$historyTracker);\n this.$initOperationListeners();\n this._$emitInputEvent = lang.delayedCall(function () {\n this._signal(\"input\", {});\n if (this.session && !this.session.destroyed)\n this.session.bgTokenizer.scheduleStart();\n }.bind(this));\n this.on(\"change\", function (_, _self) {\n _self._$emitInputEvent.schedule(31);\n });\n this.setSession(session || options && options.session || new EditSession(\"\"));\n config.resetOptions(this);\n if (options)\n this.setOptions(options);\n config._signal(\"editor\", this);\n }\n Editor.prototype.$initOperationListeners = function () {\n this.commands.on(\"exec\", this.startOperation.bind(this), true);\n this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\n this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this, true));\n this.on(\"change\", function () {\n if (!this.curOp) {\n this.startOperation();\n this.curOp.selectionBefore = this.$lastSel;\n }\n this.curOp.docChanged = true;\n }.bind(this), true);\n this.on(\"changeSelection\", function () {\n if (!this.curOp) {\n this.startOperation();\n this.curOp.selectionBefore = this.$lastSel;\n }\n this.curOp.selectionChanged = true;\n }.bind(this), true);\n };\n Editor.prototype.startOperation = function (commandEvent) {\n if (this.curOp) {\n if (!commandEvent || this.curOp.command)\n return;\n this.prevOp = this.curOp;\n }\n if (!commandEvent) {\n this.previousCommand = null;\n commandEvent = {};\n }\n this.$opResetTimer.schedule();\n this.curOp = this.session.curOp = {\n command: commandEvent.command || {},\n args: commandEvent.args,\n scrollTop: this.renderer.scrollTop\n };\n this.curOp.selectionBefore = this.selection.toJSON();\n };\n Editor.prototype.endOperation = function (e) {\n if (this.curOp && this.session) {\n if (e && e.returnValue === false || !this.session)\n return (this.curOp = null);\n if (e == true && this.curOp.command && this.curOp.command.name == \"mouse\")\n return;\n this._signal(\"beforeEndOperation\");\n if (!this.curOp)\n return;\n var command = this.curOp.command;\n var scrollIntoView = command && command.scrollIntoView;\n if (scrollIntoView) {\n switch (scrollIntoView) {\n case \"center-animate\":\n scrollIntoView = \"animate\";\n case \"center\":\n this.renderer.scrollCursorIntoView(null, 0.5);\n break;\n case \"animate\":\n case \"cursor\":\n this.renderer.scrollCursorIntoView();\n break;\n case \"selectionPart\":\n var range = this.selection.getRange();\n var config = this.renderer.layerConfig;\n if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\n this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\n }\n break;\n default:\n break;\n }\n if (scrollIntoView == \"animate\")\n this.renderer.animateScrolling(this.curOp.scrollTop);\n }\n var sel = this.selection.toJSON();\n this.curOp.selectionAfter = sel;\n this.$lastSel = this.selection.toJSON();\n this.session.getUndoManager().addSelection(sel);\n this.prevOp = this.curOp;\n this.curOp = null;\n }\n };\n Editor.prototype.$historyTracker = function (e) {\n if (!this.$mergeUndoDeltas)\n return;\n var prev = this.prevOp;\n var mergeableCommands = this.$mergeableCommands;\n var shouldMerge = prev.command && (e.command.name == prev.command.name);\n if (e.command.name == \"insertstring\") {\n var text = e.args;\n if (this.mergeNextCommand === undefined)\n this.mergeNextCommand = true;\n shouldMerge = shouldMerge\n && this.mergeNextCommand // previous command allows to coalesce with\n && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\n this.mergeNextCommand = true;\n }\n else {\n shouldMerge = shouldMerge\n && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n }\n if (this.$mergeUndoDeltas != \"always\"\n && Date.now() - this.sequenceStartTime > 2000) {\n shouldMerge = false; // the sequence is too long\n }\n if (shouldMerge)\n this.session.mergeUndoDeltas = true;\n else if (mergeableCommands.indexOf(e.command.name) !== -1)\n this.sequenceStartTime = Date.now();\n };\n Editor.prototype.setKeyboardHandler = function (keyboardHandler, cb) {\n if (keyboardHandler && typeof keyboardHandler === \"string\" && keyboardHandler != \"ace\") {\n this.$keybindingId = keyboardHandler;\n var _self = this;\n config.loadModule([\"keybinding\", keyboardHandler], function (module) {\n if (_self.$keybindingId == keyboardHandler)\n _self.keyBinding.setKeyboardHandler(module && module.handler);\n cb && cb();\n });\n }\n else {\n this.$keybindingId = null;\n this.keyBinding.setKeyboardHandler(keyboardHandler);\n cb && cb();\n }\n };\n Editor.prototype.getKeyboardHandler = function () {\n return this.keyBinding.getKeyboardHandler();\n };\n Editor.prototype.setSession = function (session) {\n if (this.session == session)\n return;\n if (this.curOp)\n this.endOperation();\n this.curOp = {};\n var oldSession = this.session;\n if (oldSession) {\n this.session.off(\"change\", this.$onDocumentChange);\n this.session.off(\"changeMode\", this.$onChangeMode);\n this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.session.off(\"changeTabSize\", this.$onChangeTabSize);\n this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\n this.session.off(\"changeFold\", this.$onChangeFold);\n this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\n this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\n this.session.off(\"changeOverwrite\", this.$onCursorChange);\n this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\n this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\n var selection = this.session.getSelection();\n selection.off(\"changeCursor\", this.$onCursorChange);\n selection.off(\"changeSelection\", this.$onSelectionChange);\n }\n this.session = session;\n if (session) {\n this.$onDocumentChange = this.onDocumentChange.bind(this);\n session.on(\"change\", this.$onDocumentChange);\n this.renderer.setSession(session);\n this.$onChangeMode = this.onChangeMode.bind(this);\n session.on(\"changeMode\", this.$onChangeMode);\n this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n session.on(\"changeTabSize\", this.$onChangeTabSize);\n this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n this.$onChangeFold = this.onChangeFold.bind(this);\n session.on(\"changeFold\", this.$onChangeFold);\n this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n this.$onCursorChange = this.onCursorChange.bind(this);\n this.session.on(\"changeOverwrite\", this.$onCursorChange);\n this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n this.selection = session.getSelection();\n this.selection.on(\"changeCursor\", this.$onCursorChange);\n this.$onSelectionChange = this.onSelectionChange.bind(this);\n this.selection.on(\"changeSelection\", this.$onSelectionChange);\n this.onChangeMode();\n this.onCursorChange();\n this.onScrollTopChange();\n this.onScrollLeftChange();\n this.onSelectionChange();\n this.onChangeFrontMarker();\n this.onChangeBackMarker();\n this.onChangeBreakpoint();\n this.onChangeAnnotation();\n this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\n this.renderer.updateFull();\n }\n else {\n this.selection = null;\n this.renderer.setSession(session);\n }\n this._signal(\"changeSession\", {\n session: session,\n oldSession: oldSession\n });\n this.curOp = null;\n oldSession && oldSession._signal(\"changeEditor\", { oldEditor: this });\n session && session._signal(\"changeEditor\", { editor: this });\n if (session && !session.destroyed)\n session.bgTokenizer.scheduleStart();\n };\n Editor.prototype.getSession = function () {\n return this.session;\n };\n Editor.prototype.setValue = function (val, cursorPos) {\n this.session.doc.setValue(val);\n if (!cursorPos)\n this.selectAll();\n else if (cursorPos == 1)\n this.navigateFileEnd();\n else if (cursorPos == -1)\n this.navigateFileStart();\n return val;\n };\n Editor.prototype.getValue = function () {\n return this.session.getValue();\n };\n Editor.prototype.getSelection = function () {\n return this.selection;\n };\n Editor.prototype.resize = function (force) {\n this.renderer.onResize(force);\n };\n Editor.prototype.setTheme = function (theme, cb) {\n this.renderer.setTheme(theme, cb);\n };\n Editor.prototype.getTheme = function () {\n return this.renderer.getTheme();\n };\n Editor.prototype.setStyle = function (style) {\n this.renderer.setStyle(style);\n };\n Editor.prototype.unsetStyle = function (style) {\n this.renderer.unsetStyle(style);\n };\n Editor.prototype.getFontSize = function () {\n return this.getOption(\"fontSize\") ||\n dom.computedStyle(this.container).fontSize;\n };\n Editor.prototype.setFontSize = function (size) {\n this.setOption(\"fontSize\", size);\n };\n Editor.prototype.$highlightBrackets = function () {\n if (this.$highlightPending) {\n return;\n }\n var self = this;\n this.$highlightPending = true;\n setTimeout(function () {\n self.$highlightPending = false;\n var session = self.session;\n if (!session || session.destroyed)\n return;\n if (session.$bracketHighlight) {\n session.$bracketHighlight.markerIds.forEach(function (id) {\n session.removeMarker(id);\n });\n session.$bracketHighlight = null;\n }\n var pos = self.getCursorPosition();\n var handler = self.getKeyboardHandler();\n var isBackwards = handler && handler.$getDirectionForHighlight && handler.$getDirectionForHighlight(self);\n var ranges = session.getMatchingBracketRanges(pos, isBackwards);\n if (!ranges) {\n var iterator = new TokenIterator(session, pos.row, pos.column);\n var token = iterator.getCurrentToken();\n if (token && /\\b(?:tag-open|tag-name)/.test(token.type)) {\n var tagNamesRanges = session.getMatchingTags(pos);\n if (tagNamesRanges)\n ranges = [tagNamesRanges.openTagName, tagNamesRanges.closeTagName];\n }\n }\n if (!ranges && session.$mode.getMatching)\n ranges = session.$mode.getMatching(self.session);\n if (!ranges) {\n if (self.getHighlightIndentGuides())\n self.renderer.$textLayer.$highlightIndentGuide();\n return;\n }\n var markerType = \"ace_bracket\";\n if (!Array.isArray(ranges)) {\n ranges = [ranges];\n }\n else if (ranges.length == 1) {\n markerType = \"ace_error_bracket\";\n }\n if (ranges.length == 2) {\n if (Range.comparePoints(ranges[0].end, ranges[1].start) == 0)\n ranges = [Range.fromPoints(ranges[0].start, ranges[1].end)];\n else if (Range.comparePoints(ranges[0].start, ranges[1].end) == 0)\n ranges = [Range.fromPoints(ranges[1].start, ranges[0].end)];\n }\n session.$bracketHighlight = {\n ranges: ranges,\n markerIds: ranges.map(function (range) {\n return session.addMarker(range, markerType, \"text\");\n })\n };\n if (self.getHighlightIndentGuides())\n self.renderer.$textLayer.$highlightIndentGuide();\n }, 50);\n };\n Editor.prototype.focus = function () {\n this.textInput.focus();\n };\n Editor.prototype.isFocused = function () {\n return this.textInput.isFocused();\n };\n Editor.prototype.blur = function () {\n this.textInput.blur();\n };\n Editor.prototype.onFocus = function (e) {\n if (this.$isFocused)\n return;\n this.$isFocused = true;\n this.renderer.showCursor();\n this.renderer.visualizeFocus();\n this._emit(\"focus\", e);\n };\n Editor.prototype.onBlur = function (e) {\n if (!this.$isFocused)\n return;\n this.$isFocused = false;\n this.renderer.hideCursor();\n this.renderer.visualizeBlur();\n this._emit(\"blur\", e);\n };\n Editor.prototype.$cursorChange = function () {\n this.renderer.updateCursor();\n this.$highlightBrackets();\n this.$updateHighlightActiveLine();\n };\n Editor.prototype.onDocumentChange = function (delta) {\n var wrap = this.session.$useWrapMode;\n var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity);\n this.renderer.updateLines(delta.start.row, lastRow, wrap);\n this._signal(\"change\", delta);\n this.$cursorChange();\n };\n Editor.prototype.onTokenizerUpdate = function (e) {\n var rows = e.data;\n this.renderer.updateLines(rows.first, rows.last);\n };\n Editor.prototype.onScrollTopChange = function () {\n this.renderer.scrollToY(this.session.getScrollTop());\n };\n Editor.prototype.onScrollLeftChange = function () {\n this.renderer.scrollToX(this.session.getScrollLeft());\n };\n Editor.prototype.onCursorChange = function () {\n this.$cursorChange();\n this._signal(\"changeSelection\");\n };\n Editor.prototype.$updateHighlightActiveLine = function () {\n var session = this.getSession();\n var highlight;\n if (this.$highlightActiveLine) {\n if (this.$selectionStyle != \"line\" || !this.selection.isMultiLine())\n highlight = this.getCursorPosition();\n if (this.renderer.theme && this.renderer.theme.$selectionColorConflict && !this.selection.isEmpty())\n highlight = false;\n if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1))\n highlight = false;\n }\n if (session.$highlightLineMarker && !highlight) {\n session.removeMarker(session.$highlightLineMarker.id);\n session.$highlightLineMarker = null;\n }\n else if (!session.$highlightLineMarker && highlight) {\n var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\n range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\n session.$highlightLineMarker = range;\n }\n else if (highlight) {\n session.$highlightLineMarker.start.row = highlight.row;\n session.$highlightLineMarker.end.row = highlight.row;\n session.$highlightLineMarker.start.column = highlight.column;\n session._signal(\"changeBackMarker\");\n }\n };\n Editor.prototype.onSelectionChange = function (e) {\n var session = this.session;\n if (session.$selectionMarker) {\n session.removeMarker(session.$selectionMarker);\n }\n session.$selectionMarker = null;\n if (!this.selection.isEmpty()) {\n var range = this.selection.getRange();\n var style = this.getSelectionStyle();\n session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\n }\n else {\n this.$updateHighlightActiveLine();\n }\n var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n this.session.highlight(re);\n this._signal(\"changeSelection\");\n };\n Editor.prototype.$getSelectionHighLightRegexp = function () {\n var session = this.session;\n var selection = this.getSelectionRange();\n if (selection.isEmpty() || selection.isMultiLine())\n return;\n var startColumn = selection.start.column;\n var endColumn = selection.end.column;\n var line = session.getLine(selection.start.row);\n var needle = line.substring(startColumn, endColumn);\n if (needle.length > 5000 || !/[\\w\\d]/.test(needle))\n return;\n var re = this.$search.$assembleRegExp({\n wholeWord: true,\n caseSensitive: true,\n needle: needle\n });\n var wordWithBoundary = line.substring(startColumn - 1, endColumn + 1);\n if (!re.test(wordWithBoundary))\n return;\n return re;\n };\n Editor.prototype.onChangeFrontMarker = function () {\n this.renderer.updateFrontMarkers();\n };\n Editor.prototype.onChangeBackMarker = function () {\n this.renderer.updateBackMarkers();\n };\n Editor.prototype.onChangeBreakpoint = function () {\n this.renderer.updateBreakpoints();\n };\n Editor.prototype.onChangeAnnotation = function () {\n this.renderer.setAnnotations(this.session.getAnnotations());\n };\n Editor.prototype.onChangeMode = function (e) {\n this.renderer.updateText();\n this._emit(\"changeMode\", e);\n };\n Editor.prototype.onChangeWrapLimit = function () {\n this.renderer.updateFull();\n };\n Editor.prototype.onChangeWrapMode = function () {\n this.renderer.onResize(true);\n };\n Editor.prototype.onChangeFold = function () {\n this.$updateHighlightActiveLine();\n this.renderer.updateFull();\n };\n Editor.prototype.getSelectedText = function () {\n return this.session.getTextRange(this.getSelectionRange());\n };\n Editor.prototype.getCopyText = function () {\n var text = this.getSelectedText();\n var nl = this.session.doc.getNewLineCharacter();\n var copyLine = false;\n if (!text && this.$copyWithEmptySelection) {\n copyLine = true;\n var ranges = this.selection.getAllRanges();\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n if (i && ranges[i - 1].start.row == range.start.row)\n continue;\n text += this.session.getLine(range.start.row) + nl;\n }\n }\n var e = { text: text };\n this._signal(\"copy\", e);\n clipboard.lineMode = copyLine ? e.text : false;\n return e.text;\n };\n Editor.prototype.onCopy = function () {\n this.commands.exec(\"copy\", this);\n };\n Editor.prototype.onCut = function () {\n this.commands.exec(\"cut\", this);\n };\n Editor.prototype.onPaste = function (text, event) {\n var e = { text: text, event: event };\n this.commands.exec(\"paste\", this, e);\n };\n Editor.prototype.$handlePaste = function (e) {\n if (typeof e == \"string\")\n e = { text: e };\n this._signal(\"paste\", e);\n var text = e.text;\n var lineMode = text === clipboard.lineMode;\n var session = this.session;\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\n if (lineMode)\n session.insert({ row: this.selection.lead.row, column: 0 }, text);\n else\n this.insert(text);\n }\n else if (lineMode) {\n this.selection.rangeList.ranges.forEach(function (range) {\n session.insert({ row: range.start.row, column: 0 }, text);\n });\n }\n else {\n var lines = text.split(/\\r\\n|\\r|\\n/);\n var ranges = this.selection.rangeList.ranges;\n var isFullLine = lines.length == 2 && (!lines[0] || !lines[1]);\n if (lines.length != ranges.length || isFullLine)\n return this.commands.exec(\"insertstring\", this, text);\n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.isEmpty())\n session.remove(range);\n session.insert(range.start, lines[i]);\n }\n }\n };\n Editor.prototype.execCommand = function (command, args) {\n return this.commands.exec(command, this, args);\n };\n Editor.prototype.insert = function (text, pasted) {\n var session = this.session;\n var mode = session.getMode();\n var cursor = this.getCursorPosition();\n if (this.getBehavioursEnabled() && !pasted) {\n var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\n if (transform) {\n if (text !== transform.text) {\n if (!this.inVirtualSelectionMode) {\n this.session.mergeUndoDeltas = false;\n this.mergeNextCommand = false;\n }\n }\n text = transform.text;\n }\n }\n if (text == \"\\t\")\n text = this.session.getTabString();\n if (!this.selection.isEmpty()) {\n var range = this.getSelectionRange();\n cursor = this.session.remove(range);\n this.clearSelection();\n }\n else if (this.session.getOverwrite() && text.indexOf(\"\\n\") == -1) {\n var range = Range.fromPoints(cursor, cursor);\n range.end.column += text.length;\n this.session.remove(range);\n }\n if (text == \"\\n\" || text == \"\\r\\n\") {\n var line = session.getLine(cursor.row);\n if (cursor.column > line.search(/\\S|$/)) {\n var d = line.substr(cursor.column).search(/\\S|$/);\n session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\n }\n }\n this.clearSelection();\n var start = cursor.column;\n var lineState = session.getState(cursor.row);\n var line = session.getLine(cursor.row);\n var shouldOutdent = mode.checkOutdent(lineState, line, text);\n session.insert(cursor, text);\n if (transform && transform.selection) {\n if (transform.selection.length == 2) { // Transform relative to the current column\n this.selection.setSelectionRange(new Range(cursor.row, start + transform.selection[0], cursor.row, start + transform.selection[1]));\n }\n else { // Transform relative to the current row.\n this.selection.setSelectionRange(new Range(cursor.row + transform.selection[0], transform.selection[1], cursor.row + transform.selection[2], transform.selection[3]));\n }\n }\n if (this.$enableAutoIndent) {\n if (session.getDocument().isNewLine(text)) {\n var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n session.insert({ row: cursor.row + 1, column: 0 }, lineIndent);\n }\n if (shouldOutdent)\n mode.autoOutdent(lineState, session, cursor.row);\n }\n };\n Editor.prototype.autoIndent = function () {\n var session = this.session;\n var mode = session.getMode();\n var startRow, endRow;\n if (this.selection.isEmpty()) {\n startRow = 0;\n endRow = session.doc.getLength() - 1;\n }\n else {\n var selectedRange = this.getSelectionRange();\n startRow = selectedRange.start.row;\n endRow = selectedRange.end.row;\n }\n var prevLineState = \"\";\n var prevLine = \"\";\n var lineIndent = \"\";\n var line, currIndent, range;\n var tab = session.getTabString();\n for (var row = startRow; row <= endRow; row++) {\n if (row > 0) {\n prevLineState = session.getState(row - 1);\n prevLine = session.getLine(row - 1);\n lineIndent = mode.getNextLineIndent(prevLineState, prevLine, tab);\n }\n line = session.getLine(row);\n currIndent = mode.$getIndent(line);\n if (lineIndent !== currIndent) {\n if (currIndent.length > 0) {\n range = new Range(row, 0, row, currIndent.length);\n session.remove(range);\n }\n if (lineIndent.length > 0) {\n session.insert({ row: row, column: 0 }, lineIndent);\n }\n }\n mode.autoOutdent(prevLineState, session, row);\n }\n };\n Editor.prototype.onTextInput = function (text, composition) {\n if (!composition)\n return this.keyBinding.onTextInput(text);\n this.startOperation({ command: { name: \"insertstring\" } });\n var applyComposition = this.applyComposition.bind(this, text, composition);\n if (this.selection.rangeCount)\n this.forEachSelection(applyComposition);\n else\n applyComposition();\n this.endOperation();\n };\n Editor.prototype.applyComposition = function (text, composition) {\n if (composition.extendLeft || composition.extendRight) {\n var r = this.selection.getRange();\n r.start.column -= composition.extendLeft;\n r.end.column += composition.extendRight;\n if (r.start.column < 0) {\n r.start.row--;\n r.start.column += this.session.getLine(r.start.row).length + 1;\n }\n this.selection.setRange(r);\n if (!text && !r.isEmpty())\n this.remove();\n }\n if (text || !this.selection.isEmpty())\n this.insert(text, true);\n if (composition.restoreStart || composition.restoreEnd) {\n var r = this.selection.getRange();\n r.start.column -= composition.restoreStart;\n r.end.column -= composition.restoreEnd;\n this.selection.setRange(r);\n }\n };\n Editor.prototype.onCommandKey = function (e, hashId, keyCode) {\n return this.keyBinding.onCommandKey(e, hashId, keyCode);\n };\n Editor.prototype.setOverwrite = function (overwrite) {\n this.session.setOverwrite(overwrite);\n };\n Editor.prototype.getOverwrite = function () {\n return this.session.getOverwrite();\n };\n Editor.prototype.toggleOverwrite = function () {\n this.session.toggleOverwrite();\n };\n Editor.prototype.setScrollSpeed = function (speed) {\n this.setOption(\"scrollSpeed\", speed);\n };\n Editor.prototype.getScrollSpeed = function () {\n return this.getOption(\"scrollSpeed\");\n };\n Editor.prototype.setDragDelay = function (dragDelay) {\n this.setOption(\"dragDelay\", dragDelay);\n };\n Editor.prototype.getDragDelay = function () {\n return this.getOption(\"dragDelay\");\n };\n Editor.prototype.setSelectionStyle = function (val) {\n this.setOption(\"selectionStyle\", val);\n };\n Editor.prototype.getSelectionStyle = function () {\n return this.getOption(\"selectionStyle\");\n };\n Editor.prototype.setHighlightActiveLine = function (shouldHighlight) {\n this.setOption(\"highlightActiveLine\", shouldHighlight);\n };\n Editor.prototype.getHighlightActiveLine = function () {\n return this.getOption(\"highlightActiveLine\");\n };\n Editor.prototype.setHighlightGutterLine = function (shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n Editor.prototype.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n };\n Editor.prototype.setHighlightSelectedWord = function (shouldHighlight) {\n this.setOption(\"highlightSelectedWord\", shouldHighlight);\n };\n Editor.prototype.getHighlightSelectedWord = function () {\n return this.$highlightSelectedWord;\n };\n Editor.prototype.setAnimatedScroll = function (shouldAnimate) {\n this.renderer.setAnimatedScroll(shouldAnimate);\n };\n Editor.prototype.getAnimatedScroll = function () {\n return this.renderer.getAnimatedScroll();\n };\n Editor.prototype.setShowInvisibles = function (showInvisibles) {\n this.renderer.setShowInvisibles(showInvisibles);\n };\n Editor.prototype.getShowInvisibles = function () {\n return this.renderer.getShowInvisibles();\n };\n Editor.prototype.setDisplayIndentGuides = function (display) {\n this.renderer.setDisplayIndentGuides(display);\n };\n Editor.prototype.getDisplayIndentGuides = function () {\n return this.renderer.getDisplayIndentGuides();\n };\n Editor.prototype.setHighlightIndentGuides = function (highlight) {\n this.renderer.setHighlightIndentGuides(highlight);\n };\n Editor.prototype.getHighlightIndentGuides = function () {\n return this.renderer.getHighlightIndentGuides();\n };\n Editor.prototype.setShowPrintMargin = function (showPrintMargin) {\n this.renderer.setShowPrintMargin(showPrintMargin);\n };\n Editor.prototype.getShowPrintMargin = function () {\n return this.renderer.getShowPrintMargin();\n };\n Editor.prototype.setPrintMarginColumn = function (showPrintMargin) {\n this.renderer.setPrintMarginColumn(showPrintMargin);\n };\n Editor.prototype.getPrintMarginColumn = function () {\n return this.renderer.getPrintMarginColumn();\n };\n Editor.prototype.setReadOnly = function (readOnly) {\n this.setOption(\"readOnly\", readOnly);\n };\n Editor.prototype.getReadOnly = function () {\n return this.getOption(\"readOnly\");\n };\n Editor.prototype.setBehavioursEnabled = function (enabled) {\n this.setOption(\"behavioursEnabled\", enabled);\n };\n Editor.prototype.getBehavioursEnabled = function () {\n return this.getOption(\"behavioursEnabled\");\n };\n Editor.prototype.setWrapBehavioursEnabled = function (enabled) {\n this.setOption(\"wrapBehavioursEnabled\", enabled);\n };\n Editor.prototype.getWrapBehavioursEnabled = function () {\n return this.getOption(\"wrapBehavioursEnabled\");\n };\n Editor.prototype.setShowFoldWidgets = function (show) {\n this.setOption(\"showFoldWidgets\", show);\n };\n Editor.prototype.getShowFoldWidgets = function () {\n return this.getOption(\"showFoldWidgets\");\n };\n Editor.prototype.setFadeFoldWidgets = function (fade) {\n this.setOption(\"fadeFoldWidgets\", fade);\n };\n Editor.prototype.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n };\n Editor.prototype.remove = function (dir) {\n if (this.selection.isEmpty()) {\n if (dir == \"left\")\n this.selection.selectLeft();\n else\n this.selection.selectRight();\n }\n var range = this.getSelectionRange();\n if (this.getBehavioursEnabled()) {\n var session = this.session;\n var state = session.getState(range.start.row);\n var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\n if (range.end.column === 0) {\n var text = session.getTextRange(range);\n if (text[text.length - 1] == \"\\n\") {\n var line = session.getLine(range.end.row);\n if (/^\\s+$/.test(line)) {\n range.end.column = line.length;\n }\n }\n }\n if (new_range)\n range = new_range;\n }\n this.session.remove(range);\n this.clearSelection();\n };\n Editor.prototype.removeWordRight = function () {\n if (this.selection.isEmpty())\n this.selection.selectWordRight();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n Editor.prototype.removeWordLeft = function () {\n if (this.selection.isEmpty())\n this.selection.selectWordLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n Editor.prototype.removeToLineStart = function () {\n if (this.selection.isEmpty())\n this.selection.selectLineStart();\n if (this.selection.isEmpty())\n this.selection.selectLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n Editor.prototype.removeToLineEnd = function () {\n if (this.selection.isEmpty())\n this.selection.selectLineEnd();\n var range = this.getSelectionRange();\n if (range.start.column == range.end.column && range.start.row == range.end.row) {\n range.end.column = 0;\n range.end.row++;\n }\n this.session.remove(range);\n this.clearSelection();\n };\n Editor.prototype.splitLine = function () {\n if (!this.selection.isEmpty()) {\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n }\n var cursor = this.getCursorPosition();\n this.insert(\"\\n\");\n this.moveCursorToPosition(cursor);\n };\n Editor.prototype.setGhostText = function (text, position) {\n if (!this.session.widgetManager) {\n this.session.widgetManager = new LineWidgets(this.session);\n this.session.widgetManager.attach(this);\n }\n this.renderer.setGhostText(text, position);\n };\n Editor.prototype.removeGhostText = function () {\n if (!this.session.widgetManager)\n return;\n this.renderer.removeGhostText();\n };\n Editor.prototype.transposeLetters = function () {\n if (!this.selection.isEmpty()) {\n return;\n }\n var cursor = this.getCursorPosition();\n var column = cursor.column;\n if (column === 0)\n return;\n var line = this.session.getLine(cursor.row);\n var swap, range;\n if (column < line.length) {\n swap = line.charAt(column) + line.charAt(column - 1);\n range = new Range(cursor.row, column - 1, cursor.row, column + 1);\n }\n else {\n swap = line.charAt(column - 1) + line.charAt(column - 2);\n range = new Range(cursor.row, column - 2, cursor.row, column);\n }\n this.session.replace(range, swap);\n this.session.selection.moveToPosition(range.end);\n };\n Editor.prototype.toLowerCase = function () {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toLowerCase());\n this.selection.setSelectionRange(originalRange);\n };\n Editor.prototype.toUpperCase = function () {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toUpperCase());\n this.selection.setSelectionRange(originalRange);\n };\n Editor.prototype.indent = function () {\n var session = this.session;\n var range = this.getSelectionRange();\n if (range.start.row < range.end.row) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n else if (range.start.column < range.end.column) {\n var text = session.getTextRange(range);\n if (!/^\\s+$/.test(text)) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n }\n var line = session.getLine(range.start.row);\n var position = range.start;\n var size = session.getTabSize();\n var column = session.documentToScreenColumn(position.row, position.column);\n if (this.session.getUseSoftTabs()) {\n var count = (size - column % size);\n var indentString = lang.stringRepeat(\" \", count);\n }\n else {\n var count = column % size;\n while (line[range.start.column - 1] == \" \" && count) {\n range.start.column--;\n count--;\n }\n this.selection.setSelectionRange(range);\n indentString = \"\\t\";\n }\n return this.insert(indentString);\n };\n Editor.prototype.blockIndent = function () {\n var rows = this.$getSelectedRows();\n this.session.indentRows(rows.first, rows.last, \"\\t\");\n };\n Editor.prototype.blockOutdent = function () {\n var selection = this.session.getSelection();\n this.session.outdentRows(selection.getRange());\n };\n Editor.prototype.sortLines = function () {\n var rows = this.$getSelectedRows();\n var session = this.session;\n var lines = [];\n for (var i = rows.first; i <= rows.last; i++)\n lines.push(session.getLine(i));\n lines.sort(function (a, b) {\n if (a.toLowerCase() < b.toLowerCase())\n return -1;\n if (a.toLowerCase() > b.toLowerCase())\n return 1;\n return 0;\n });\n var deleteRange = new Range(0, 0, 0, 0);\n for (var i = rows.first; i <= rows.last; i++) {\n var line = session.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n deleteRange.end.column = line.length;\n session.replace(deleteRange, lines[i - rows.first]);\n }\n };\n Editor.prototype.toggleCommentLines = function () {\n var state = this.session.getState(this.getCursorPosition().row);\n var rows = this.$getSelectedRows();\n this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\n };\n Editor.prototype.toggleBlockComment = function () {\n var cursor = this.getCursorPosition();\n var state = this.session.getState(cursor.row);\n var range = this.getSelectionRange();\n this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\n };\n Editor.prototype.getNumberAt = function (row, column) {\n var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\n _numberRx.lastIndex = 0;\n var s = this.session.getLine(row);\n while (_numberRx.lastIndex < column) {\n var m = _numberRx.exec(s);\n if (m.index <= column && m.index + m[0].length >= column) {\n var number = {\n value: m[0],\n start: m.index,\n end: m.index + m[0].length\n };\n return number;\n }\n }\n return null;\n };\n Editor.prototype.modifyNumber = function (amount) {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n var charRange = new Range(row, column - 1, row, column);\n var c = this.session.getTextRange(charRange);\n if (!isNaN(parseFloat(c)) && isFinite(c)) {\n var nr = this.getNumberAt(row, column);\n if (nr) {\n var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\n var decimals = nr.start + nr.value.length - fp;\n var t = parseFloat(nr.value);\n t *= Math.pow(10, decimals);\n if (fp !== nr.end && column < fp) {\n amount *= Math.pow(10, nr.end - column - 1);\n }\n else {\n amount *= Math.pow(10, nr.end - column);\n }\n t += amount;\n t /= Math.pow(10, decimals);\n var nnr = t.toFixed(decimals);\n var replaceRange = new Range(row, nr.start, row, nr.end);\n this.session.replace(replaceRange, nnr);\n this.moveCursorTo(row, Math.max(nr.start + 1, column + nnr.length - nr.value.length));\n }\n }\n else {\n this.toggleWord();\n }\n };\n Editor.prototype.toggleWord = function () {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n this.selection.selectWord();\n var currentState = this.getSelectedText();\n var currWordStart = this.selection.getWordRange().start.column;\n var wordParts = currentState.replace(/([a-z]+|[A-Z]+)(?=[A-Z_]|$)/g, '$1 ').split(/\\s/);\n var delta = column - currWordStart - 1;\n if (delta < 0)\n delta = 0;\n var curLength = 0, itLength = 0;\n var that = this;\n if (currentState.match(/[A-Za-z0-9_]+/)) {\n wordParts.forEach(function (item, i) {\n itLength = curLength + item.length;\n if (delta >= curLength && delta <= itLength) {\n currentState = item;\n that.selection.clearSelection();\n that.moveCursorTo(row, curLength + currWordStart);\n that.selection.selectTo(row, itLength + currWordStart);\n }\n curLength = itLength;\n });\n }\n var wordPairs = this.$toggleWordPairs;\n var reg;\n for (var i = 0; i < wordPairs.length; i++) {\n var item = wordPairs[i];\n for (var j = 0; j <= 1; j++) {\n var negate = +!j;\n var firstCondition = currentState.match(new RegExp('^\\\\s?_?(' + lang.escapeRegExp(item[j]) + ')\\\\s?$', 'i'));\n if (firstCondition) {\n var secondCondition = currentState.match(new RegExp('([_]|^|\\\\s)(' + lang.escapeRegExp(firstCondition[1]) + ')($|\\\\s)', 'g'));\n if (secondCondition) {\n reg = currentState.replace(new RegExp(lang.escapeRegExp(item[j]), 'i'), function (result) {\n var res = item[negate];\n if (result.toUpperCase() == result) {\n res = res.toUpperCase();\n }\n else if (result.charAt(0).toUpperCase() == result.charAt(0)) {\n res = res.substr(0, 0) + item[negate].charAt(0).toUpperCase() + res.substr(1);\n }\n return res;\n });\n this.insert(reg);\n reg = \"\";\n }\n }\n }\n }\n };\n Editor.prototype.findLinkAt = function (row, column) {\n var e_1, _a;\n var line = this.session.getLine(row);\n var wordParts = line.split(/((?:https?|ftp):\\/\\/[\\S]+)/);\n var columnPosition = column;\n if (columnPosition < 0)\n columnPosition = 0;\n var previousPosition = 0, currentPosition = 0, match;\n try {\n for (var wordParts_1 = __values(wordParts), wordParts_1_1 = wordParts_1.next(); !wordParts_1_1.done; wordParts_1_1 = wordParts_1.next()) {\n var item = wordParts_1_1.value;\n currentPosition = previousPosition + item.length;\n if (columnPosition >= previousPosition && columnPosition <= currentPosition) {\n if (item.match(/((?:https?|ftp):\\/\\/[\\S]+)/)) {\n match = item.replace(/[\\s:.,'\";}\\]]+$/, \"\");\n break;\n }\n }\n previousPosition = currentPosition;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (wordParts_1_1 && !wordParts_1_1.done && (_a = wordParts_1.return)) _a.call(wordParts_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return match;\n };\n Editor.prototype.openLink = function () {\n var cursor = this.selection.getCursor();\n var url = this.findLinkAt(cursor.row, cursor.column);\n if (url)\n window.open(url, '_blank');\n return url != null;\n };\n Editor.prototype.removeLines = function () {\n var rows = this.$getSelectedRows();\n this.session.removeFullLines(rows.first, rows.last);\n this.clearSelection();\n };\n Editor.prototype.duplicateSelection = function () {\n var sel = this.selection;\n var doc = this.session;\n var range = sel.getRange();\n var reverse = sel.isBackwards();\n if (range.isEmpty()) {\n var row = range.start.row;\n doc.duplicateLines(row, row);\n }\n else {\n var point = reverse ? range.start : range.end;\n var endPoint = doc.insert(point, doc.getTextRange(range));\n range.start = point;\n range.end = endPoint;\n sel.setSelectionRange(range, reverse);\n }\n };\n Editor.prototype.moveLinesDown = function () {\n this.$moveLines(1, false);\n };\n Editor.prototype.moveLinesUp = function () {\n this.$moveLines(-1, false);\n };\n Editor.prototype.moveText = function (range, toPosition, copy) {\n return this.session.moveText(range, toPosition, copy);\n };\n Editor.prototype.copyLinesUp = function () {\n this.$moveLines(-1, true);\n };\n Editor.prototype.copyLinesDown = function () {\n this.$moveLines(1, true);\n };\n Editor.prototype.$moveLines = function (dir, copy) {\n var rows, moved;\n var selection = this.selection;\n if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\n var range = selection.toOrientedRange();\n rows = this.$getSelectedRows(range);\n moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\n if (copy && dir == -1)\n moved = 0;\n range.moveBy(moved, 0);\n selection.fromOrientedRange(range);\n }\n else {\n var ranges = selection.rangeList.ranges;\n selection.rangeList.detach(this.session);\n this.inVirtualSelectionMode = true;\n var diff = 0;\n var totalDiff = 0;\n var l = ranges.length;\n for (var i = 0; i < l; i++) {\n var rangeIndex = i;\n ranges[i].moveBy(diff, 0);\n rows = this.$getSelectedRows(ranges[i]);\n var first = rows.first;\n var last = rows.last;\n while (++i < l) {\n if (totalDiff)\n ranges[i].moveBy(totalDiff, 0);\n var subRows = this.$getSelectedRows(ranges[i]);\n if (copy && subRows.first != last)\n break;\n else if (!copy && subRows.first > last + 1)\n break;\n last = subRows.last;\n }\n i--;\n diff = this.session.$moveLines(first, last, copy ? 0 : dir);\n if (copy && dir == -1)\n rangeIndex = i + 1;\n while (rangeIndex <= i) {\n ranges[rangeIndex].moveBy(diff, 0);\n rangeIndex++;\n }\n if (!copy)\n diff = 0;\n totalDiff += diff;\n }\n selection.fromOrientedRange(selection.ranges[0]);\n selection.rangeList.attach(this.session);\n this.inVirtualSelectionMode = false;\n }\n };\n Editor.prototype.$getSelectedRows = function (range) {\n range = (range || this.getSelectionRange()).collapseRows();\n return {\n first: this.session.getRowFoldStart(range.start.row),\n last: this.session.getRowFoldEnd(range.end.row)\n };\n };\n Editor.prototype.onCompositionStart = function (compositionState) {\n this.renderer.showComposition(compositionState);\n };\n Editor.prototype.onCompositionUpdate = function (text) {\n this.renderer.setCompositionText(text);\n };\n Editor.prototype.onCompositionEnd = function () {\n this.renderer.hideComposition();\n };\n Editor.prototype.getFirstVisibleRow = function () {\n return this.renderer.getFirstVisibleRow();\n };\n Editor.prototype.getLastVisibleRow = function () {\n return this.renderer.getLastVisibleRow();\n };\n Editor.prototype.isRowVisible = function (row) {\n return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\n };\n Editor.prototype.isRowFullyVisible = function (row) {\n return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\n };\n Editor.prototype.$getVisibleRowCount = function () {\n return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n };\n Editor.prototype.$moveByPage = function (dir, select) {\n var renderer = this.renderer;\n var config = this.renderer.layerConfig;\n var rows = dir * Math.floor(config.height / config.lineHeight);\n if (select === true) {\n this.selection.$moveSelection(function () {\n this.moveCursorBy(rows, 0);\n });\n }\n else if (select === false) {\n this.selection.moveCursorBy(rows, 0);\n this.selection.clearSelection();\n }\n var scrollTop = renderer.scrollTop;\n renderer.scrollBy(0, rows * config.lineHeight);\n if (select != null)\n renderer.scrollCursorIntoView(null, 0.5);\n renderer.animateScrolling(scrollTop);\n };\n Editor.prototype.selectPageDown = function () {\n this.$moveByPage(1, true);\n };\n Editor.prototype.selectPageUp = function () {\n this.$moveByPage(-1, true);\n };\n Editor.prototype.gotoPageDown = function () {\n this.$moveByPage(1, false);\n };\n Editor.prototype.gotoPageUp = function () {\n this.$moveByPage(-1, false);\n };\n Editor.prototype.scrollPageDown = function () {\n this.$moveByPage(1);\n };\n Editor.prototype.scrollPageUp = function () {\n this.$moveByPage(-1);\n };\n Editor.prototype.scrollToRow = function (row) {\n this.renderer.scrollToRow(row);\n };\n Editor.prototype.scrollToLine = function (line, center, animate, callback) {\n this.renderer.scrollToLine(line, center, animate, callback);\n };\n Editor.prototype.centerSelection = function () {\n var range = this.getSelectionRange();\n var pos = {\n row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\n column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\n };\n this.renderer.alignCursor(pos, 0.5);\n };\n Editor.prototype.getCursorPosition = function () {\n return this.selection.getCursor();\n };\n Editor.prototype.getCursorPositionScreen = function () {\n return this.session.documentToScreenPosition(this.getCursorPosition());\n };\n Editor.prototype.getSelectionRange = function () {\n return this.selection.getRange();\n };\n Editor.prototype.selectAll = function () {\n this.selection.selectAll();\n };\n Editor.prototype.clearSelection = function () {\n this.selection.clearSelection();\n };\n Editor.prototype.moveCursorTo = function (row, column) {\n this.selection.moveCursorTo(row, column);\n };\n Editor.prototype.moveCursorToPosition = function (pos) {\n this.selection.moveCursorToPosition(pos);\n };\n Editor.prototype.jumpToMatching = function (select, expand) {\n var cursor = this.getCursorPosition();\n var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\n var prevToken = iterator.getCurrentToken();\n var tokenCount = 0;\n if (prevToken && prevToken.type.indexOf('tag-name') !== -1) {\n prevToken = iterator.stepBackward();\n }\n var token = prevToken || iterator.stepForward();\n if (!token)\n return;\n var matchType;\n var found = false;\n var depth = {};\n var i = cursor.column - token.start;\n var bracketType;\n var brackets = {\n \")\": \"(\",\n \"(\": \"(\",\n \"]\": \"[\",\n \"[\": \"[\",\n \"{\": \"{\",\n \"}\": \"{\"\n };\n do {\n if (token.value.match(/[{}()\\[\\]]/g)) {\n for (; i < token.value.length && !found; i++) {\n if (!brackets[token.value[i]]) {\n continue;\n }\n bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n if (isNaN(depth[bracketType])) {\n depth[bracketType] = 0;\n }\n switch (token.value[i]) {\n case '(':\n case '[':\n case '{':\n depth[bracketType]++;\n break;\n case ')':\n case ']':\n case '}':\n depth[bracketType]--;\n if (depth[bracketType] === -1) {\n matchType = 'bracket';\n found = true;\n }\n break;\n }\n }\n }\n else if (token.type.indexOf('tag-name') !== -1) {\n if (isNaN(depth[token.value])) {\n depth[token.value] = 0;\n }\n if (prevToken.value === '<' && tokenCount > 1) {\n depth[token.value]++;\n }\n else if (prevToken.value === '</') {\n depth[token.value]--;\n }\n if (depth[token.value] === -1) {\n matchType = 'tag';\n found = true;\n }\n }\n if (!found) {\n prevToken = token;\n tokenCount++;\n token = iterator.stepForward();\n i = 0;\n }\n } while (token && !found);\n if (!matchType)\n return;\n var range, pos;\n if (matchType === 'bracket') {\n range = this.session.getBracketRange(cursor);\n if (!range) {\n range = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + i - 1, iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + i - 1);\n pos = range.start;\n if (expand || pos.row === cursor.row && Math.abs(pos.column - cursor.column)\n < 2)\n range = this.session.getBracketRange(pos);\n }\n }\n else if (matchType === 'tag') {\n if (!token || token.type.indexOf('tag-name') === -1)\n return;\n range = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() - 2, iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() - 2);\n if (range.compare(cursor.row, cursor.column) === 0) {\n var tagsRanges = this.session.getMatchingTags(cursor);\n if (tagsRanges) {\n if (tagsRanges.openTag.contains(cursor.row, cursor.column)) {\n range = tagsRanges.closeTag;\n pos = range.start;\n }\n else {\n range = tagsRanges.openTag;\n if (tagsRanges.closeTag.start.row === cursor.row && tagsRanges.closeTag.start.column\n === cursor.column)\n pos = range.end;\n else\n pos = range.start;\n }\n }\n }\n pos = pos || range.start;\n }\n pos = range && range.cursor || pos;\n if (pos) {\n if (select) {\n if (range && expand) {\n this.selection.setRange(range);\n }\n else if (range && range.isEqual(this.getSelectionRange())) {\n this.clearSelection();\n }\n else {\n this.selection.selectTo(pos.row, pos.column);\n }\n }\n else {\n this.selection.moveTo(pos.row, pos.column);\n }\n }\n };\n Editor.prototype.gotoLine = function (lineNumber, column, animate) {\n this.selection.clearSelection();\n this.session.unfold({ row: lineNumber - 1, column: column || 0 });\n this.exitMultiSelectMode && this.exitMultiSelectMode();\n this.moveCursorTo(lineNumber - 1, column || 0);\n if (!this.isRowFullyVisible(lineNumber - 1))\n this.scrollToLine(lineNumber - 1, true, animate);\n };\n Editor.prototype.navigateTo = function (row, column) {\n this.selection.moveTo(row, column);\n };\n Editor.prototype.navigateUp = function (times) {\n if (this.selection.isMultiLine() && !this.selection.isBackwards()) {\n var selectionStart = this.selection.anchor.getPosition();\n return this.moveCursorToPosition(selectionStart);\n }\n this.selection.clearSelection();\n this.selection.moveCursorBy(-times || -1, 0);\n };\n Editor.prototype.navigateDown = function (times) {\n if (this.selection.isMultiLine() && this.selection.isBackwards()) {\n var selectionEnd = this.selection.anchor.getPosition();\n return this.moveCursorToPosition(selectionEnd);\n }\n this.selection.clearSelection();\n this.selection.moveCursorBy(times || 1, 0);\n };\n Editor.prototype.navigateLeft = function (times) {\n if (!this.selection.isEmpty()) {\n var selectionStart = this.getSelectionRange().start;\n this.moveCursorToPosition(selectionStart);\n }\n else {\n times = times || 1;\n while (times--) {\n this.selection.moveCursorLeft();\n }\n }\n this.clearSelection();\n };\n Editor.prototype.navigateRight = function (times) {\n if (!this.selection.isEmpty()) {\n var selectionEnd = this.getSelectionRange().end;\n this.moveCursorToPosition(selectionEnd);\n }\n else {\n times = times || 1;\n while (times--) {\n this.selection.moveCursorRight();\n }\n }\n this.clearSelection();\n };\n Editor.prototype.navigateLineStart = function () {\n this.selection.moveCursorLineStart();\n this.clearSelection();\n };\n Editor.prototype.navigateLineEnd = function () {\n this.selection.moveCursorLineEnd();\n this.clearSelection();\n };\n Editor.prototype.navigateFileEnd = function () {\n this.selection.moveCursorFileEnd();\n this.clearSelection();\n };\n Editor.prototype.navigateFileStart = function () {\n this.selection.moveCursorFileStart();\n this.clearSelection();\n };\n Editor.prototype.navigateWordRight = function () {\n this.selection.moveCursorWordRight();\n this.clearSelection();\n };\n Editor.prototype.navigateWordLeft = function () {\n this.selection.moveCursorWordLeft();\n this.clearSelection();\n };\n Editor.prototype.replace = function (replacement, options) {\n if (options)\n this.$search.set(options);\n var range = this.$search.find(this.session);\n var replaced = 0;\n if (!range)\n return replaced;\n if (this.$tryReplace(range, replacement)) {\n replaced = 1;\n }\n this.selection.setSelectionRange(range);\n this.renderer.scrollSelectionIntoView(range.start, range.end);\n return replaced;\n };\n Editor.prototype.replaceAll = function (replacement, options) {\n if (options) {\n this.$search.set(options);\n }\n var ranges = this.$search.findAll(this.session);\n var replaced = 0;\n if (!ranges.length)\n return replaced;\n var selection = this.getSelectionRange();\n this.selection.moveTo(0, 0);\n for (var i = ranges.length - 1; i >= 0; --i) {\n if (this.$tryReplace(ranges[i], replacement)) {\n replaced++;\n }\n }\n this.selection.setSelectionRange(selection);\n return replaced;\n };\n Editor.prototype.$tryReplace = function (range, replacement) {\n var input = this.session.getTextRange(range);\n replacement = this.$search.replace(input, replacement);\n if (replacement !== null) {\n range.end = this.session.replace(range, replacement);\n return range;\n }\n else {\n return null;\n }\n };\n Editor.prototype.getLastSearchOptions = function () {\n return this.$search.getOptions();\n };\n Editor.prototype.find = function (needle, options, animate) {\n if (!options)\n options = {};\n if (typeof needle == \"string\" || needle instanceof RegExp)\n options.needle = needle;\n else if (typeof needle == \"object\")\n oop.mixin(options, needle);\n var range = this.selection.getRange();\n if (options.needle == null) {\n needle = this.session.getTextRange(range)\n || this.$search.$options.needle;\n if (!needle) {\n range = this.session.getWordRange(range.start.row, range.start.column);\n needle = this.session.getTextRange(range);\n }\n this.$search.set({ needle: needle });\n }\n this.$search.set(options);\n if (!options.start)\n this.$search.set({ start: range });\n var newRange = this.$search.find(this.session);\n if (options.preventScroll)\n return newRange;\n if (newRange) {\n this.revealRange(newRange, animate);\n return newRange;\n }\n if (options.backwards)\n range.start = range.end;\n else\n range.end = range.start;\n this.selection.setRange(range);\n };\n Editor.prototype.findNext = function (options, animate) {\n this.find({ skipCurrent: true, backwards: false }, options, animate);\n };\n Editor.prototype.findPrevious = function (options, animate) {\n this.find(options, { skipCurrent: true, backwards: true }, animate);\n };\n Editor.prototype.revealRange = function (range, animate) {\n this.session.unfold(range);\n this.selection.setSelectionRange(range);\n var scrollTop = this.renderer.scrollTop;\n this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\n if (animate !== false)\n this.renderer.animateScrolling(scrollTop);\n };\n Editor.prototype.undo = function () {\n this.session.getUndoManager().undo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n Editor.prototype.redo = function () {\n this.session.getUndoManager().redo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n Editor.prototype.destroy = function () {\n if (this.$toDestroy) {\n this.$toDestroy.forEach(function (el) {\n el.destroy();\n });\n this.$toDestroy = null;\n }\n if (this.$mouseHandler)\n this.$mouseHandler.destroy();\n this.renderer.destroy();\n this._signal(\"destroy\", this);\n if (this.session)\n this.session.destroy();\n if (this._$emitInputEvent)\n this._$emitInputEvent.cancel();\n this.removeAllListeners();\n };\n Editor.prototype.setAutoScrollEditorIntoView = function (enable) {\n if (!enable)\n return;\n var rect;\n var self = this;\n var shouldScroll = false;\n if (!this.$scrollAnchor)\n this.$scrollAnchor = document.createElement(\"div\");\n var scrollAnchor = this.$scrollAnchor;\n scrollAnchor.style.cssText = \"position:absolute\";\n this.container.insertBefore(scrollAnchor, this.container.firstChild);\n var onChangeSelection = this.on(\"changeSelection\", function () {\n shouldScroll = true;\n });\n var onBeforeRender = this.renderer.on(\"beforeRender\", function () {\n if (shouldScroll)\n rect = self.renderer.container.getBoundingClientRect();\n });\n var onAfterRender = this.renderer.on(\"afterRender\", function () {\n if (shouldScroll && rect && (self.isFocused()\n || self.searchBox && self.searchBox.isFocused())) {\n var renderer = self.renderer;\n var pos = renderer.$cursorLayer.$pixelPos;\n var config = renderer.layerConfig;\n var top = pos.top - config.offset;\n if (pos.top >= 0 && top + rect.top < 0) {\n shouldScroll = true;\n }\n else if (pos.top < config.height &&\n pos.top + rect.top + config.lineHeight > window.innerHeight) {\n shouldScroll = false;\n }\n else {\n shouldScroll = null;\n }\n if (shouldScroll != null) {\n scrollAnchor.style.top = top + \"px\";\n scrollAnchor.style.left = pos.left + \"px\";\n scrollAnchor.style.height = config.lineHeight + \"px\";\n scrollAnchor.scrollIntoView(shouldScroll);\n }\n shouldScroll = rect = null;\n }\n });\n this.setAutoScrollEditorIntoView = function (enable) {\n if (enable)\n return;\n delete this.setAutoScrollEditorIntoView;\n this.off(\"changeSelection\", onChangeSelection);\n this.renderer.off(\"afterRender\", onAfterRender);\n this.renderer.off(\"beforeRender\", onBeforeRender);\n };\n };\n Editor.prototype.$resetCursorStyle = function () {\n var style = this.$cursorStyle || \"ace\";\n var cursorLayer = this.renderer.$cursorLayer;\n if (!cursorLayer)\n return;\n cursorLayer.setSmoothBlinking(/smooth/.test(style));\n cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\n dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\n };\n Editor.prototype.prompt = function (message, options, callback) {\n var editor = this;\n config.loadModule(\"ace/ext/prompt\", function (module) {\n module.prompt(editor, message, options, callback);\n });\n };\n return Editor;\n}());\nEditor.$uid = 0;\nEditor.prototype.curOp = null;\nEditor.prototype.prevOp = {};\nEditor.prototype.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\nEditor.prototype.$toggleWordPairs = [\n [\"first\", \"last\"],\n [\"true\", \"false\"],\n [\"yes\", \"no\"],\n [\"width\", \"height\"],\n [\"top\", \"bottom\"],\n [\"right\", \"left\"],\n [\"on\", \"off\"],\n [\"x\", \"y\"],\n [\"get\", \"set\"],\n [\"max\", \"min\"],\n [\"horizontal\", \"vertical\"],\n [\"show\", \"hide\"],\n [\"add\", \"remove\"],\n [\"up\", \"down\"],\n [\"before\", \"after\"],\n [\"even\", \"odd\"],\n [\"in\", \"out\"],\n [\"inside\", \"outside\"],\n [\"next\", \"previous\"],\n [\"increase\", \"decrease\"],\n [\"attach\", \"detach\"],\n [\"&&\", \"||\"],\n [\"==\", \"!=\"]\n];\noop.implement(Editor.prototype, EventEmitter);\nconfig.defineOptions(Editor.prototype, \"editor\", {\n selectionStyle: {\n set: function (style) {\n this.onSelectionChange();\n this._signal(\"changeSelectionStyle\", { data: style });\n },\n initialValue: \"line\"\n },\n highlightActiveLine: {\n set: function () { this.$updateHighlightActiveLine(); },\n initialValue: true\n },\n highlightSelectedWord: {\n set: function (shouldHighlight) { this.$onSelectionChange(); },\n initialValue: true\n },\n readOnly: {\n set: function (readOnly) {\n this.textInput.setReadOnly(readOnly);\n this.$resetCursorStyle();\n },\n initialValue: false\n },\n copyWithEmptySelection: {\n set: function (value) {\n this.textInput.setCopyWithEmptySelection(value);\n },\n initialValue: false\n },\n cursorStyle: {\n set: function (val) { this.$resetCursorStyle(); },\n values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n initialValue: \"ace\"\n },\n mergeUndoDeltas: {\n values: [false, true, \"always\"],\n initialValue: true\n },\n behavioursEnabled: { initialValue: true },\n wrapBehavioursEnabled: { initialValue: true },\n enableAutoIndent: { initialValue: true },\n autoScrollEditorIntoView: {\n set: function (val) { this.setAutoScrollEditorIntoView(val); }\n },\n keyboardHandler: {\n set: function (val) { this.setKeyboardHandler(val); },\n get: function () { return this.$keybindingId; },\n handlesSet: true\n },\n value: {\n set: function (val) { this.session.setValue(val); },\n get: function () { return this.getValue(); },\n handlesSet: true,\n hidden: true\n },\n session: {\n set: function (val) { this.setSession(val); },\n get: function () { return this.session; },\n handlesSet: true,\n hidden: true\n },\n showLineNumbers: {\n set: function (show) {\n this.renderer.$gutterLayer.setShowLineNumbers(show);\n this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER);\n if (show && this.$relativeLineNumbers)\n relativeNumberRenderer.attach(this);\n else\n relativeNumberRenderer.detach(this);\n },\n initialValue: true\n },\n relativeLineNumbers: {\n set: function (value) {\n if (this.$showLineNumbers && value)\n relativeNumberRenderer.attach(this);\n else\n relativeNumberRenderer.detach(this);\n }\n },\n placeholder: {\n set: function (message) {\n if (!this.$updatePlaceholder) {\n this.$updatePlaceholder = function () {\n var hasValue = this.session && (this.renderer.$composition ||\n this.session.getLength() > 1 || this.session.getLine(0).length > 0);\n if (hasValue && this.renderer.placeholderNode) {\n this.renderer.off(\"afterRender\", this.$updatePlaceholder);\n dom.removeCssClass(this.container, \"ace_hasPlaceholder\");\n this.renderer.placeholderNode.remove();\n this.renderer.placeholderNode = null;\n }\n else if (!hasValue && !this.renderer.placeholderNode) {\n this.renderer.on(\"afterRender\", this.$updatePlaceholder);\n dom.addCssClass(this.container, \"ace_hasPlaceholder\");\n var el = dom.createElement(\"div\");\n el.className = \"ace_placeholder\";\n el.textContent = this.$placeholder || \"\";\n this.renderer.placeholderNode = el;\n this.renderer.content.appendChild(this.renderer.placeholderNode);\n }\n else if (!hasValue && this.renderer.placeholderNode) {\n this.renderer.placeholderNode.textContent = this.$placeholder || \"\";\n }\n }.bind(this);\n this.on(\"input\", this.$updatePlaceholder);\n }\n this.$updatePlaceholder();\n }\n },\n enableKeyboardAccessibility: {\n set: function (value) {\n var blurCommand = {\n name: \"blurTextInput\",\n description: \"Set focus to the editor content div to allow tabbing through the page\",\n bindKey: \"Esc\",\n exec: function (editor) {\n editor.blur();\n editor.renderer.scroller.focus();\n },\n readOnly: true\n };\n var focusOnEnterKeyup = function (e) {\n if (e.target == this.renderer.scroller && e.keyCode === keys['enter']) {\n e.preventDefault();\n var row = this.getCursorPosition().row;\n if (!this.isRowVisible(row))\n this.scrollToLine(row, true, true);\n this.focus();\n }\n };\n var gutterKeyboardHandler;\n if (value) {\n this.renderer.enableKeyboardAccessibility = true;\n this.renderer.keyboardFocusClassName = \"ace_keyboard-focus\";\n this.textInput.getElement().setAttribute(\"tabindex\", -1);\n this.textInput.setNumberOfExtraLines(useragent.isWin ? 3 : 0);\n this.renderer.scroller.setAttribute(\"tabindex\", 0);\n this.renderer.scroller.setAttribute(\"role\", \"group\");\n this.renderer.scroller.setAttribute(\"aria-roledescription\", nls(\"editor\"));\n this.renderer.scroller.classList.add(this.renderer.keyboardFocusClassName);\n this.renderer.scroller.setAttribute(\"aria-label\", nls(\"Editor content, press Enter to start editing, press Escape to exit\"));\n this.renderer.scroller.addEventListener(\"keyup\", focusOnEnterKeyup.bind(this));\n this.commands.addCommand(blurCommand);\n this.renderer.$gutter.setAttribute(\"tabindex\", 0);\n this.renderer.$gutter.setAttribute(\"aria-hidden\", false);\n this.renderer.$gutter.setAttribute(\"role\", \"group\");\n this.renderer.$gutter.setAttribute(\"aria-roledescription\", nls(\"editor\"));\n this.renderer.$gutter.setAttribute(\"aria-label\", nls(\"Editor gutter, press Enter to interact with controls using arrow keys, press Escape to exit\"));\n this.renderer.$gutter.classList.add(this.renderer.keyboardFocusClassName);\n this.renderer.content.setAttribute(\"aria-hidden\", true);\n if (!gutterKeyboardHandler)\n gutterKeyboardHandler = new GutterKeyboardHandler(this);\n gutterKeyboardHandler.addListener();\n }\n else {\n this.renderer.enableKeyboardAccessibility = false;\n this.textInput.getElement().setAttribute(\"tabindex\", 0);\n this.textInput.setNumberOfExtraLines(0);\n this.renderer.scroller.setAttribute(\"tabindex\", -1);\n this.renderer.scroller.removeAttribute(\"role\");\n this.renderer.scroller.removeAttribute(\"aria-roledescription\");\n this.renderer.scroller.classList.remove(this.renderer.keyboardFocusClassName);\n this.renderer.scroller.removeAttribute(\"aria-label\");\n this.renderer.scroller.removeEventListener(\"keyup\", focusOnEnterKeyup.bind(this));\n this.commands.removeCommand(blurCommand);\n this.renderer.content.removeAttribute(\"aria-hidden\");\n this.renderer.$gutter.setAttribute(\"tabindex\", -1);\n this.renderer.$gutter.setAttribute(\"aria-hidden\", true);\n this.renderer.$gutter.removeAttribute(\"role\");\n this.renderer.$gutter.removeAttribute(\"aria-roledescription\");\n this.renderer.$gutter.removeAttribute(\"aria-label\");\n this.renderer.$gutter.classList.remove(this.renderer.keyboardFocusClassName);\n if (gutterKeyboardHandler)\n gutterKeyboardHandler.removeListener();\n }\n },\n initialValue: false\n },\n customScrollbar: \"renderer\",\n hScrollBarAlwaysVisible: \"renderer\",\n vScrollBarAlwaysVisible: \"renderer\",\n highlightGutterLine: \"renderer\",\n animatedScroll: \"renderer\",\n showInvisibles: \"renderer\",\n showPrintMargin: \"renderer\",\n printMarginColumn: \"renderer\",\n printMargin: \"renderer\",\n fadeFoldWidgets: \"renderer\",\n showFoldWidgets: \"renderer\",\n displayIndentGuides: \"renderer\",\n highlightIndentGuides: \"renderer\",\n showGutter: \"renderer\",\n fontSize: \"renderer\",\n fontFamily: \"renderer\",\n maxLines: \"renderer\",\n minLines: \"renderer\",\n scrollPastEnd: \"renderer\",\n fixedWidthGutter: \"renderer\",\n theme: \"renderer\",\n hasCssTransforms: \"renderer\",\n maxPixelHeight: \"renderer\",\n useTextareaForIME: \"renderer\",\n useResizeObserver: \"renderer\",\n useSvgGutterIcons: \"renderer\",\n showFoldedAnnotations: \"renderer\",\n scrollSpeed: \"$mouseHandler\",\n dragDelay: \"$mouseHandler\",\n dragEnabled: \"$mouseHandler\",\n focusTimeout: \"$mouseHandler\",\n tooltipFollowsMouse: \"$mouseHandler\",\n firstLineNumber: \"session\",\n overwrite: \"session\",\n newLineMode: \"session\",\n useWorker: \"session\",\n useSoftTabs: \"session\",\n navigateWithinSoftTabs: \"session\",\n tabSize: \"session\",\n wrap: \"session\",\n indentedSoftWrap: \"session\",\n foldStyle: \"session\",\n mode: \"session\"\n});\nvar relativeNumberRenderer = {\n getText: function (/**@type{EditSession}*/ session, /**@type{number}*/ row) {\n return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9 ? \"\\xb7\" : \"\"))) + \"\";\n },\n getWidth: function (session, /**@type{number}*/ lastLineNumber, config) {\n return Math.max(lastLineNumber.toString().length, (config.lastRow + 1).toString().length, 2) * config.characterWidth;\n },\n update: function (e, /**@type{Editor}*/ editor) {\n editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER);\n },\n attach: function (/**@type{Editor}*/ editor) {\n editor.renderer.$gutterLayer.$renderer = this;\n editor.on(\"changeSelection\", this.update);\n this.update(null, editor);\n },\n detach: function (/**@type{Editor}*/ editor) {\n if (editor.renderer.$gutterLayer.$renderer == this)\n editor.renderer.$gutterLayer.$renderer = null;\n editor.off(\"changeSelection\", this.update);\n this.update(null, editor);\n }\n};\nexports.Editor = Editor;\n\n});\n\nace.define(\"ace/layer/lines\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Lines = /** @class */ (function () {\n function Lines(element, canvasHeight) {\n this.element = element;\n this.canvasHeight = canvasHeight || 500000;\n this.element.style.height = (this.canvasHeight * 2) + \"px\";\n this.cells = [];\n this.cellCache = [];\n this.$offsetCoefficient = 0;\n }\n Lines.prototype.moveContainer = function (config) {\n dom.translate(this.element, 0, -((config.firstRowScreen * config.lineHeight) % this.canvasHeight) - config.offset * this.$offsetCoefficient);\n };\n Lines.prototype.pageChanged = function (oldConfig, newConfig) {\n return (Math.floor((oldConfig.firstRowScreen * oldConfig.lineHeight) / this.canvasHeight) !==\n Math.floor((newConfig.firstRowScreen * newConfig.lineHeight) / this.canvasHeight));\n };\n Lines.prototype.computeLineTop = function (row, config, session) {\n var screenTop = config.firstRowScreen * config.lineHeight;\n var screenPage = Math.floor(screenTop / this.canvasHeight);\n var lineTop = session.documentToScreenRow(row, 0) * config.lineHeight;\n return lineTop - (screenPage * this.canvasHeight);\n };\n Lines.prototype.computeLineHeight = function (row, config, session) {\n return config.lineHeight * session.getRowLineCount(row);\n };\n Lines.prototype.getLength = function () {\n return this.cells.length;\n };\n Lines.prototype.get = function (index) {\n return this.cells[index];\n };\n Lines.prototype.shift = function () {\n this.$cacheCell(this.cells.shift());\n };\n Lines.prototype.pop = function () {\n this.$cacheCell(this.cells.pop());\n };\n Lines.prototype.push = function (cell) {\n if (Array.isArray(cell)) {\n this.cells.push.apply(this.cells, cell);\n var fragment = dom.createFragment(this.element);\n for (var i = 0; i < cell.length; i++) {\n fragment.appendChild(cell[i].element);\n }\n this.element.appendChild(fragment);\n }\n else {\n this.cells.push(cell);\n this.element.appendChild(cell.element);\n }\n };\n Lines.prototype.unshift = function (cell) {\n if (Array.isArray(cell)) {\n this.cells.unshift.apply(this.cells, cell);\n var fragment = dom.createFragment(this.element);\n for (var i = 0; i < cell.length; i++) {\n fragment.appendChild(cell[i].element);\n }\n if (this.element.firstChild)\n this.element.insertBefore(fragment, this.element.firstChild);\n else\n this.element.appendChild(fragment);\n }\n else {\n this.cells.unshift(cell);\n this.element.insertAdjacentElement(\"afterbegin\", cell.element);\n }\n };\n Lines.prototype.last = function () {\n if (this.cells.length)\n return this.cells[this.cells.length - 1];\n else\n return null;\n };\n Lines.prototype.$cacheCell = function (cell) {\n if (!cell)\n return;\n cell.element.remove();\n this.cellCache.push(cell);\n };\n Lines.prototype.createCell = function (row, config, session, initElement) {\n var cell = this.cellCache.pop();\n if (!cell) {\n var element = dom.createElement(\"div\");\n if (initElement)\n initElement(element);\n this.element.appendChild(element);\n cell = {\n element: element,\n text: \"\",\n row: row\n };\n }\n cell.row = row;\n return cell;\n };\n return Lines;\n}());\nexports.Lines = Lines;\n\n});\n\nace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/layer/lines\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Lines = require(\"./lines\").Lines;\nvar nls = require(\"../config\").nls;\nvar Gutter = /** @class */ (function () {\n function Gutter(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_gutter-layer\";\n parentEl.appendChild(this.element);\n this.setShowFoldWidgets(this.$showFoldWidgets);\n this.gutterWidth = 0;\n this.$annotations = [];\n this.$updateAnnotations = this.$updateAnnotations.bind(this);\n this.$lines = new Lines(this.element);\n this.$lines.$offsetCoefficient = 1;\n }\n Gutter.prototype.setSession = function (session) {\n if (this.session)\n this.session.off(\"change\", this.$updateAnnotations);\n this.session = session;\n if (session)\n session.on(\"change\", this.$updateAnnotations);\n };\n Gutter.prototype.addGutterDecoration = function (row, className) {\n if (window.console)\n console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\n this.session.addGutterDecoration(row, className);\n };\n Gutter.prototype.removeGutterDecoration = function (row, className) {\n if (window.console)\n console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\n this.session.removeGutterDecoration(row, className);\n };\n Gutter.prototype.setAnnotations = function (annotations) {\n this.$annotations = [];\n for (var i = 0; i < annotations.length; i++) {\n var annotation = annotations[i];\n var row = annotation.row;\n var rowInfo = this.$annotations[row];\n if (!rowInfo)\n rowInfo = this.$annotations[row] = { text: [], type: [] };\n var annoText = annotation.text;\n var annoType = annotation.type;\n annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n if (rowInfo.text.indexOf(annoText) === -1) {\n rowInfo.text.push(annoText);\n rowInfo.type.push(annoType);\n }\n var className = annotation.className;\n if (className)\n rowInfo.className = className;\n else if (annoType == \"error\")\n rowInfo.className = \" ace_error\";\n else if (annoType == \"warning\" && rowInfo.className != \" ace_error\")\n rowInfo.className = \" ace_warning\";\n else if (annoType == \"info\" && (!rowInfo.className))\n rowInfo.className = \" ace_info\";\n }\n };\n Gutter.prototype.$updateAnnotations = function (delta) {\n if (!this.$annotations.length)\n return;\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n if (len === 0) {\n }\n else if (delta.action == 'remove') {\n this.$annotations.splice(firstRow, len + 1, null);\n }\n else {\n var args = new Array(len + 1);\n args.unshift(firstRow, 1);\n this.$annotations.splice.apply(this.$annotations, args);\n }\n };\n Gutter.prototype.update = function (config) {\n this.config = config;\n var session = this.session;\n var firstRow = config.firstRow;\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n session.getLength() - 1);\n this.oldLastRow = lastRow;\n this.config = config;\n this.$lines.moveContainer(config);\n this.$updateCursorRow();\n var fold = session.getNextFoldLine(firstRow);\n var foldStart = fold ? fold.start.row : Infinity;\n var cell = null;\n var index = -1;\n var row = firstRow;\n while (true) {\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = session.getNextFoldLine(row, fold);\n foldStart = fold ? fold.start.row : Infinity;\n }\n if (row > lastRow) {\n while (this.$lines.getLength() > index + 1)\n this.$lines.pop();\n break;\n }\n cell = this.$lines.get(++index);\n if (cell) {\n cell.row = row;\n }\n else {\n cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$lines.push(cell);\n }\n this.$renderCell(cell, config, fold, row);\n row++;\n }\n this._signal(\"afterRender\");\n this.$updateGutterWidth(config);\n };\n Gutter.prototype.$updateGutterWidth = function (config) {\n var session = this.session;\n var gutterRenderer = session.gutterRenderer || this.$renderer;\n var firstLineNumber = session.$firstLineNumber;\n var lastLineText = this.$lines.last() ? this.$lines.last().text : \"\";\n if (this.$fixedWidth || session.$useWrapMode)\n lastLineText = session.getLength() + firstLineNumber - 1;\n var gutterWidth = gutterRenderer\n ? gutterRenderer.getWidth(session, lastLineText, config)\n : lastLineText.toString().length * config.characterWidth;\n var padding = this.$padding || this.$computePadding();\n gutterWidth += padding.left + padding.right;\n if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\n this.gutterWidth = gutterWidth; (this.element.parentNode).style.width =\n this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\n this._signal(\"changeGutterWidth\", gutterWidth);\n }\n };\n Gutter.prototype.$updateCursorRow = function () {\n if (!this.$highlightGutterLine)\n return;\n var position = this.session.selection.getCursor();\n if (this.$cursorRow === position.row)\n return;\n this.$cursorRow = position.row;\n };\n Gutter.prototype.updateLineHighlight = function () {\n if (!this.$highlightGutterLine)\n return;\n var row = this.session.selection.cursor.row;\n this.$cursorRow = row;\n if (this.$cursorCell && this.$cursorCell.row == row)\n return;\n if (this.$cursorCell)\n this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n var cells = this.$lines.cells;\n this.$cursorCell = null;\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (cell.row >= this.$cursorRow) {\n if (cell.row > this.$cursorRow) {\n var fold = this.session.getFoldLine(this.$cursorRow);\n if (i > 0 && fold && fold.start.row == cells[i - 1].row)\n cell = cells[i - 1];\n else\n break;\n }\n cell.element.className = \"ace_gutter-active-line \" + cell.element.className;\n this.$cursorCell = cell;\n break;\n }\n }\n };\n Gutter.prototype.scrollLines = function (config) {\n var oldConfig = this.config;\n this.config = config;\n this.$updateCursorRow();\n if (this.$lines.pageChanged(oldConfig, config))\n return this.update(config);\n this.$lines.moveContainer(config);\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n this.session.getLength() - 1);\n var oldLastRow = this.oldLastRow;\n this.oldLastRow = lastRow;\n if (!oldConfig || oldLastRow < config.firstRow)\n return this.update(config);\n if (lastRow < oldConfig.firstRow)\n return this.update(config);\n if (oldConfig.firstRow < config.firstRow)\n for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--)\n this.$lines.shift();\n if (oldLastRow > lastRow)\n for (var row = this.session.getFoldedRowCount(lastRow + 1, oldLastRow); row > 0; row--)\n this.$lines.pop();\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLines(config, config.firstRow, oldConfig.firstRow - 1));\n }\n if (lastRow > oldLastRow) {\n this.$lines.push(this.$renderLines(config, oldLastRow + 1, lastRow));\n }\n this.updateLineHighlight();\n this._signal(\"afterRender\");\n this.$updateGutterWidth(config);\n };\n Gutter.prototype.$renderLines = function (config, firstRow, lastRow) {\n var fragment = [];\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n var cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$renderCell(cell, config, foldLine, row);\n fragment.push(cell);\n row++;\n }\n return fragment;\n };\n Gutter.prototype.$renderCell = function (cell, config, fold, row) {\n var element = cell.element;\n var session = this.session;\n var textNode = element.childNodes[0];\n var foldWidget = element.childNodes[1];\n var annotationNode = element.childNodes[2];\n var annotationIconNode = annotationNode.firstChild;\n var firstLineNumber = session.$firstLineNumber;\n var breakpoints = session.$breakpoints;\n var decorations = session.$decorations;\n var gutterRenderer = session.gutterRenderer || this.$renderer;\n var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\n var foldStart = fold ? fold.start.row : Number.MAX_VALUE;\n var lineHeight = config.lineHeight + \"px\";\n var className = this.$useSvgGutterIcons ? \"ace_gutter-cell_svg-icons \" : \"ace_gutter-cell \";\n var iconClassName = this.$useSvgGutterIcons ? \"ace_icon_svg\" : \"ace_icon\";\n var rowText = (gutterRenderer\n ? gutterRenderer.getText(session, row)\n : row + firstLineNumber).toString();\n if (this.$highlightGutterLine) {\n if (row == this.$cursorRow || (fold && row < this.$cursorRow && row >= foldStart && this.$cursorRow <= fold.end.row)) {\n className += \"ace_gutter-active-line \";\n if (this.$cursorCell != cell) {\n if (this.$cursorCell)\n this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n this.$cursorCell = cell;\n }\n }\n }\n if (breakpoints[row])\n className += breakpoints[row];\n if (decorations[row])\n className += decorations[row];\n if (this.$annotations[row] && row !== foldStart)\n className += this.$annotations[row].className;\n if (foldWidgets) {\n var c = foldWidgets[row];\n if (c == null)\n c = foldWidgets[row] = session.getFoldWidget(row);\n }\n if (c) {\n var foldClass = \"ace_fold-widget ace_\" + c;\n var isClosedFold = c == \"start\" && row == foldStart && row < fold.end.row;\n if (isClosedFold) {\n foldClass += \" ace_closed\";\n var foldAnnotationClass = '';\n var annotationInFold = false;\n for (var i = row + 1; i <= fold.end.row; i++) {\n if (!this.$annotations[i])\n continue;\n if (this.$annotations[i].className === \" ace_error\") {\n annotationInFold = true;\n foldAnnotationClass = \" ace_error_fold\";\n break;\n }\n if (this.$annotations[i].className === \" ace_warning\") {\n annotationInFold = true;\n foldAnnotationClass = \" ace_warning_fold\";\n continue;\n }\n }\n className += foldAnnotationClass;\n }\n else\n foldClass += \" ace_open\";\n if (foldWidget.className != foldClass)\n foldWidget.className = foldClass;\n dom.setStyle(foldWidget.style, \"height\", lineHeight);\n dom.setStyle(foldWidget.style, \"display\", \"inline-block\");\n foldWidget.setAttribute(\"role\", \"button\");\n foldWidget.setAttribute(\"tabindex\", \"-1\");\n var foldRange = session.getFoldWidgetRange(row);\n if (foldRange)\n foldWidget.setAttribute(\"aria-label\", nls(\"Toggle code folding, rows $0 through $1\", [foldRange.start.row + 1, foldRange.end.row + 1]));\n else {\n if (fold)\n foldWidget.setAttribute(\"aria-label\", nls(\"Toggle code folding, rows $0 through $1\", [fold.start.row + 1, fold.end.row + 1]));\n else\n foldWidget.setAttribute(\"aria-label\", nls(\"Toggle code folding, row $0\", [row + 1]));\n }\n if (isClosedFold) {\n foldWidget.setAttribute(\"aria-expanded\", \"false\");\n foldWidget.setAttribute(\"title\", nls(\"Unfold code\"));\n }\n else {\n foldWidget.setAttribute(\"aria-expanded\", \"true\");\n foldWidget.setAttribute(\"title\", nls(\"Fold code\"));\n }\n }\n else {\n if (foldWidget) {\n dom.setStyle(foldWidget.style, \"display\", \"none\");\n foldWidget.setAttribute(\"tabindex\", \"0\");\n foldWidget.removeAttribute(\"role\");\n foldWidget.removeAttribute(\"aria-label\");\n }\n }\n if (annotationInFold && this.$showFoldedAnnotations) {\n annotationNode.className = \"ace_gutter_annotation\";\n annotationIconNode.className = iconClassName;\n annotationIconNode.className += foldAnnotationClass;\n dom.setStyle(annotationIconNode.style, \"height\", lineHeight);\n dom.setStyle(annotationNode.style, \"display\", \"block\");\n dom.setStyle(annotationNode.style, \"height\", lineHeight);\n annotationNode.setAttribute(\"aria-label\", nls(\"Read annotations row $0\", [rowText]));\n annotationNode.setAttribute(\"tabindex\", \"-1\");\n annotationNode.setAttribute(\"role\", \"button\");\n }\n else if (this.$annotations[row]) {\n annotationNode.className = \"ace_gutter_annotation\";\n annotationIconNode.className = iconClassName;\n if (this.$useSvgGutterIcons)\n annotationIconNode.className += this.$annotations[row].className;\n else\n element.classList.add(this.$annotations[row].className.replace(\" \", \"\"));\n dom.setStyle(annotationIconNode.style, \"height\", lineHeight);\n dom.setStyle(annotationNode.style, \"display\", \"block\");\n dom.setStyle(annotationNode.style, \"height\", lineHeight);\n annotationNode.setAttribute(\"aria-label\", nls(\"Read annotations row $0\", [rowText]));\n annotationNode.setAttribute(\"tabindex\", \"-1\");\n annotationNode.setAttribute(\"role\", \"button\");\n }\n else {\n dom.setStyle(annotationNode.style, \"display\", \"none\");\n annotationNode.removeAttribute(\"aria-label\");\n annotationNode.removeAttribute(\"role\");\n annotationNode.setAttribute(\"tabindex\", \"0\");\n }\n if (rowText !== textNode.data) {\n textNode.data = rowText;\n }\n if (element.className != className)\n element.className = className;\n dom.setStyle(cell.element.style, \"height\", this.$lines.computeLineHeight(row, config, session) + \"px\");\n dom.setStyle(cell.element.style, \"top\", this.$lines.computeLineTop(row, config, session) + \"px\");\n cell.text = rowText;\n if (annotationNode.style.display === \"none\" && foldWidget.style.display === \"none\")\n cell.element.setAttribute(\"aria-hidden\", true);\n else\n cell.element.setAttribute(\"aria-hidden\", false);\n return cell;\n };\n Gutter.prototype.setHighlightGutterLine = function (highlightGutterLine) {\n this.$highlightGutterLine = highlightGutterLine;\n };\n Gutter.prototype.setShowLineNumbers = function (show) {\n this.$renderer = !show && {\n getWidth: function () { return 0; },\n getText: function () { return \"\"; }\n };\n };\n Gutter.prototype.getShowLineNumbers = function () {\n return this.$showLineNumbers;\n };\n Gutter.prototype.setShowFoldWidgets = function (show) {\n if (show)\n dom.addCssClass(this.element, \"ace_folding-enabled\");\n else\n dom.removeCssClass(this.element, \"ace_folding-enabled\");\n this.$showFoldWidgets = show;\n this.$padding = null;\n };\n Gutter.prototype.getShowFoldWidgets = function () {\n return this.$showFoldWidgets;\n };\n Gutter.prototype.$computePadding = function () {\n if (!this.element.firstChild)\n return { left: 0, right: 0 };\n var style = dom.computedStyle(/**@type{Element}*/ (this.element.firstChild));\n this.$padding = {};\n this.$padding.left = (parseInt(style.borderLeftWidth) || 0)\n + (parseInt(style.paddingLeft) || 0) + 1;\n this.$padding.right = (parseInt(style.borderRightWidth) || 0)\n + (parseInt(style.paddingRight) || 0);\n return this.$padding;\n };\n Gutter.prototype.getRegion = function (point) {\n var padding = this.$padding || this.$computePadding();\n var rect = this.element.getBoundingClientRect();\n if (point.x < padding.left + rect.left)\n return \"markers\";\n if (this.$showFoldWidgets && point.x > rect.right - padding.right)\n return \"foldWidgets\";\n };\n return Gutter;\n}());\nGutter.prototype.$fixedWidth = false;\nGutter.prototype.$highlightGutterLine = true;\nGutter.prototype.$renderer = \"\";\nGutter.prototype.$showLineNumbers = true;\nGutter.prototype.$showFoldWidgets = true;\noop.implement(Gutter.prototype, EventEmitter);\nfunction onCreateCell(element) {\n var textNode = document.createTextNode('');\n element.appendChild(textNode);\n var foldWidget = dom.createElement(\"span\");\n element.appendChild(foldWidget);\n var annotationNode = dom.createElement(\"span\");\n element.appendChild(annotationNode);\n var annotationIconNode = dom.createElement(\"span\");\n annotationNode.appendChild(annotationIconNode);\n return element;\n}\nexports.Gutter = Gutter;\n\n});\n\nace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar dom = require(\"../lib/dom\");\nvar Marker = /** @class */ (function () {\n function Marker(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_marker-layer\";\n parentEl.appendChild(this.element);\n }\n Marker.prototype.setPadding = function (padding) {\n this.$padding = padding;\n };\n Marker.prototype.setSession = function (session) {\n this.session = session;\n };\n Marker.prototype.setMarkers = function (markers) {\n this.markers = markers;\n };\n Marker.prototype.elt = function (className, css) {\n var x = this.i != -1 && this.element.childNodes[this.i];\n if (!x) {\n x = document.createElement(\"div\");\n this.element.appendChild(x);\n this.i = -1;\n }\n else {\n this.i++;\n }\n x.style.cssText = css;\n x.className = className;\n };\n Marker.prototype.update = function (config) {\n if (!config)\n return;\n this.config = config;\n this.i = 0;\n var html;\n for (var key in this.markers) {\n var marker = this.markers[key];\n if (!marker.range) {\n marker.update(html, this, this.session, config);\n continue;\n }\n var range = marker.range.clipRows(config.firstRow, config.lastRow);\n if (range.isEmpty())\n continue;\n range = range.toScreenRange(this.session);\n if (marker.renderer) {\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n marker.renderer(html, range, left, top, config);\n }\n else if (marker.type == \"fullLine\") {\n this.drawFullLineMarker(html, range, marker.clazz, config);\n }\n else if (marker.type == \"screenLine\") {\n this.drawScreenLineMarker(html, range, marker.clazz, config);\n }\n else if (range.isMultiLine()) {\n if (marker.type == \"text\")\n this.drawTextMarker(html, range, marker.clazz, config);\n else\n this.drawMultiLineMarker(html, range, marker.clazz, config);\n }\n else {\n this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n }\n }\n if (this.i != -1) {\n while (this.i < this.element.childElementCount)\n this.element.removeChild(this.element.lastChild);\n }\n };\n Marker.prototype.$getTop = function (row, layerConfig) {\n return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n };\n Marker.prototype.drawTextMarker = function (stringBuilder, range, clazz, layerConfig, extraStyle) {\n var session = this.session;\n var start = range.start.row;\n var end = range.end.row;\n var row = start;\n var prev = 0;\n var curr = 0;\n var next = session.getScreenLastRowColumn(row);\n var lineRange = new Range(row, range.start.column, row, curr);\n for (; row <= end; row++) {\n lineRange.start.row = lineRange.end.row = row;\n lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\n lineRange.end.column = next;\n prev = curr;\n curr = next;\n next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\n this.drawSingleLineMarker(stringBuilder, lineRange, clazz + (row == start ? \" ace_start\" : \"\") + \" ace_br\"\n + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end), layerConfig, row == end ? 0 : 1, extraStyle);\n }\n };\n Marker.prototype.drawMultiLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var padding = this.$padding;\n var height = config.lineHeight;\n var top = this.$getTop(range.start.row, config);\n var left = padding + range.start.column * config.characterWidth;\n extraStyle = extraStyle || \"\";\n if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n var range1 = range.clone();\n range1.end.row = range1.start.row;\n range1.end.column = this.session.getLine(range1.start.row).length;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br1 ace_start\", config, null, extraStyle);\n }\n else {\n this.elt(clazz + \" ace_br1 ace_start\", \"height:\" + height + \"px;\" + \"right:0;\" + \"top:\" + top + \"px;left:\" + left + \"px;\" + (extraStyle || \"\"));\n }\n if (this.session.$bidiHandler.isBidiRow(range.end.row)) {\n var range1 = range.clone();\n range1.start.row = range1.end.row;\n range1.start.column = 0;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br12\", config, null, extraStyle);\n }\n else {\n top = this.$getTop(range.end.row, config);\n var width = range.end.column * config.characterWidth;\n this.elt(clazz + \" ace_br12\", \"height:\" + height + \"px;\" +\n \"width:\" + width + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + padding + \"px;\" + (extraStyle || \"\"));\n }\n height = (range.end.row - range.start.row - 1) * config.lineHeight;\n if (height <= 0)\n return;\n top = this.$getTop(range.start.row + 1, config);\n var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\n this.elt(clazz + (radiusClass ? \" ace_br\" + radiusClass : \"\"), \"height:\" + height + \"px;\" +\n \"right:0;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + padding + \"px;\" + (extraStyle || \"\"));\n };\n Marker.prototype.drawSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n if (this.session.$bidiHandler.isBidiRow(range.start.row))\n return this.drawBidiSingleLineMarker(stringBuilder, range, clazz, config, extraLength, extraStyle);\n var height = config.lineHeight;\n var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"width:\" + width + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + left + \"px;\" + (extraStyle || \"\"));\n };\n Marker.prototype.drawBidiSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n var height = config.lineHeight, top = this.$getTop(range.start.row, config), padding = this.$padding;\n var selections = this.session.$bidiHandler.getSelections(range.start.column, range.end.column);\n selections.forEach(function (selection) {\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"width:\" + (selection.width + (extraLength || 0)) + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + (padding + selection.left) + \"px;\" + (extraStyle || \"\"));\n }, this);\n };\n Marker.prototype.drawFullLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n if (range.start.row != range.end.row)\n height += this.$getTop(range.end.row, config) - top;\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:0;right:0;\" + (extraStyle || \"\"));\n };\n Marker.prototype.drawScreenLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:0;right:0;\" + (extraStyle || \"\"));\n };\n return Marker;\n}());\nMarker.prototype.$padding = 0;\nfunction getBorderClass(tl, tr, br, bl) {\n return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n}\nexports.Marker = Marker;\n\n});\n\nace.define(\"ace/layer/text_util\",[\"require\",\"exports\",\"module\"], function(require, exports, module){// Tokens for which Ace just uses a simple TextNode and does not add any special className.\nvar textTokens = new Set([\"text\", \"rparen\", \"lparen\"]);\nexports.isTextToken = function (tokenType) {\n return textTokens.has(tokenType);\n};\n\n});\n\nace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/layer/lines\",\"ace/lib/event_emitter\",\"ace/config\",\"ace/layer/text_util\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar Lines = require(\"./lines\").Lines;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar nls = require(\"../config\").nls;\nvar isTextToken = require(\"./text_util\").isTextToken;\nvar Text = /** @class */ (function () {\n function Text(parentEl) {\n this.dom = dom;\n this.element = this.dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_text-layer\";\n parentEl.appendChild(this.element);\n this.$updateEolChar = this.$updateEolChar.bind(this);\n this.$lines = new Lines(this.element);\n }\n Text.prototype.$updateEolChar = function () {\n var doc = this.session.doc;\n var unixMode = doc.getNewLineCharacter() == \"\\n\" && doc.getNewLineMode() != \"windows\";\n var EOL_CHAR = unixMode ? this.EOL_CHAR_LF : this.EOL_CHAR_CRLF;\n if (this.EOL_CHAR != EOL_CHAR) {\n this.EOL_CHAR = EOL_CHAR;\n return true;\n }\n };\n Text.prototype.setPadding = function (padding) {\n this.$padding = padding;\n this.element.style.margin = \"0 \" + padding + \"px\";\n };\n Text.prototype.getLineHeight = function () {\n return this.$fontMetrics.$characterSize.height || 0;\n };\n Text.prototype.getCharacterWidth = function () {\n return this.$fontMetrics.$characterSize.width || 0;\n };\n Text.prototype.$setFontMetrics = function (measure) {\n this.$fontMetrics = measure;\n this.$fontMetrics.on(\"changeCharacterSize\", \n function (e) {\n this._signal(\"changeCharacterSize\", e);\n }.bind(this));\n this.$pollSizeChanges();\n };\n Text.prototype.checkForSizeChanges = function () {\n this.$fontMetrics.checkForSizeChanges();\n };\n Text.prototype.$pollSizeChanges = function () {\n return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\n };\n Text.prototype.setSession = function (session) {\n this.session = session;\n if (session)\n this.$computeTabString();\n };\n Text.prototype.setShowInvisibles = function (showInvisibles) {\n if (this.showInvisibles == showInvisibles)\n return false;\n this.showInvisibles = showInvisibles;\n if (typeof showInvisibles == \"string\") {\n this.showSpaces = /tab/i.test(showInvisibles);\n this.showTabs = /space/i.test(showInvisibles);\n this.showEOL = /eol/i.test(showInvisibles);\n }\n else {\n this.showSpaces = this.showTabs = this.showEOL = showInvisibles;\n }\n this.$computeTabString();\n return true;\n };\n Text.prototype.setDisplayIndentGuides = function (display) {\n if (this.displayIndentGuides == display)\n return false;\n this.displayIndentGuides = display;\n this.$computeTabString();\n return true;\n };\n Text.prototype.setHighlightIndentGuides = function (highlight) {\n if (this.$highlightIndentGuides === highlight)\n return false;\n this.$highlightIndentGuides = highlight;\n return highlight;\n };\n Text.prototype.$computeTabString = function () {\n var tabSize = this.session.getTabSize();\n this.tabSize = tabSize; var tabStr = this.$tabStrings = [0];\n for (var i = 1; i < tabSize + 1; i++) {\n if (this.showTabs) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_tab\";\n span.textContent = lang.stringRepeat(this.TAB_CHAR, i);\n tabStr.push(span);\n }\n else {\n tabStr.push(this.dom.createTextNode(lang.stringRepeat(\" \", i), this.element));\n }\n }\n if (this.displayIndentGuides) {\n this.$indentGuideRe = /\\s\\S| \\t|\\t |\\s$/;\n var className = \"ace_indent-guide\";\n var spaceClass = this.showSpaces ? \" ace_invisible ace_invisible_space\" : \"\";\n var spaceContent = this.showSpaces\n ? lang.stringRepeat(this.SPACE_CHAR, this.tabSize)\n : lang.stringRepeat(\" \", this.tabSize);\n var tabClass = this.showTabs ? \" ace_invisible ace_invisible_tab\" : \"\";\n var tabContent = this.showTabs\n ? lang.stringRepeat(this.TAB_CHAR, this.tabSize)\n : spaceContent;\n var span = this.dom.createElement(\"span\");\n span.className = className + spaceClass;\n span.textContent = spaceContent;\n this.$tabStrings[\" \"] = span;\n var span = this.dom.createElement(\"span\");\n span.className = className + tabClass;\n span.textContent = tabContent;\n this.$tabStrings[\"\\t\"] = span;\n }\n };\n Text.prototype.updateLines = function (config, firstRow, lastRow) {\n if (this.config.lastRow != config.lastRow ||\n this.config.firstRow != config.firstRow) {\n return this.update(config);\n }\n this.config = config;\n var first = Math.max(firstRow, config.firstRow);\n var last = Math.min(lastRow, config.lastRow);\n var lineElements = this.element.childNodes;\n var lineElementsIdx = 0;\n for (var row = config.firstRow; row < first; row++) {\n var foldLine = this.session.getFoldLine(row);\n if (foldLine) {\n if (foldLine.containsRow(first)) {\n first = foldLine.start.row;\n break;\n }\n else {\n row = foldLine.end.row;\n }\n }\n lineElementsIdx++;\n }\n var heightChanged = false;\n var row = first;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > last)\n break; var lineElement = lineElements[lineElementsIdx++];\n if (lineElement) {\n this.dom.removeChildren(lineElement);\n this.$renderLine(lineElement, row, row == foldStart ? foldLine : false);\n if (heightChanged)\n lineElement.style.top = this.$lines.computeLineTop(row, config, this.session) + \"px\";\n var height = (config.lineHeight * this.session.getRowLength(row)) + \"px\";\n if (lineElement.style.height != height) {\n heightChanged = true;\n lineElement.style.height = height;\n }\n }\n row++;\n }\n if (heightChanged) {\n while (lineElementsIdx < this.$lines.cells.length) {\n var cell = this.$lines.cells[lineElementsIdx++];\n cell.element.style.top = this.$lines.computeLineTop(cell.row, config, this.session) + \"px\";\n }\n }\n };\n Text.prototype.scrollLines = function (config) {\n var oldConfig = this.config;\n this.config = config;\n if (this.$lines.pageChanged(oldConfig, config))\n return this.update(config);\n this.$lines.moveContainer(config);\n var lastRow = config.lastRow;\n var oldLastRow = oldConfig ? oldConfig.lastRow : -1;\n if (!oldConfig || oldLastRow < config.firstRow)\n return this.update(config);\n if (lastRow < oldConfig.firstRow)\n return this.update(config);\n if (!oldConfig || oldConfig.lastRow < config.firstRow)\n return this.update(config);\n if (config.lastRow < oldConfig.firstRow)\n return this.update(config);\n if (oldConfig.firstRow < config.firstRow)\n for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--)\n this.$lines.shift();\n if (oldConfig.lastRow > config.lastRow)\n for (var row = this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row > 0; row--)\n this.$lines.pop();\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1));\n }\n if (config.lastRow > oldConfig.lastRow) {\n this.$lines.push(this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow));\n }\n this.$highlightIndentGuide();\n };\n Text.prototype.$renderLinesFragment = function (config, firstRow, lastRow) {\n var fragment = [];\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n var line = this.$lines.createCell(row, config, this.session);\n var lineEl = line.element;\n this.dom.removeChildren(lineEl);\n dom.setStyle(lineEl.style, \"height\", this.$lines.computeLineHeight(row, config, this.session) + \"px\");\n dom.setStyle(lineEl.style, \"top\", this.$lines.computeLineTop(row, config, this.session) + \"px\");\n this.$renderLine(lineEl, row, row == foldStart ? foldLine : false);\n if (this.$useLineGroups()) {\n lineEl.className = \"ace_line_group\";\n }\n else {\n lineEl.className = \"ace_line\";\n }\n fragment.push(line);\n row++;\n }\n return fragment;\n };\n Text.prototype.update = function (config) {\n this.$lines.moveContainer(config);\n this.config = config;\n var firstRow = config.firstRow;\n var lastRow = config.lastRow;\n var lines = this.$lines;\n while (lines.getLength())\n lines.pop();\n lines.push(this.$renderLinesFragment(config, firstRow, lastRow));\n };\n Text.prototype.$renderToken = function (parent, screenColumn, token, value) {\n var self = this;\n var re = /(\\t)|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\uFEFF\\uFFF9-\\uFFFC\\u2066\\u2067\\u2068\\u202A\\u202B\\u202D\\u202E\\u202C\\u2069]+)|(\\u3000)|([\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3001-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g;\n var valueFragment = this.dom.createFragment(this.element);\n var m;\n var i = 0;\n while (m = re.exec(value)) {\n var tab = m[1];\n var simpleSpace = m[2];\n var controlCharacter = m[3];\n var cjkSpace = m[4];\n var cjk = m[5];\n if (!self.showSpaces && simpleSpace)\n continue;\n var before = i != m.index ? value.slice(i, m.index) : \"\";\n i = m.index + m[0].length;\n if (before) {\n valueFragment.appendChild(this.dom.createTextNode(before, this.element));\n }\n if (tab) {\n var tabSize = self.session.getScreenTabSize(screenColumn + m.index);\n valueFragment.appendChild(self.$tabStrings[tabSize].cloneNode(true));\n screenColumn += tabSize - 1;\n }\n else if (simpleSpace) {\n if (self.showSpaces) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_space\";\n span.textContent = lang.stringRepeat(self.SPACE_CHAR, simpleSpace.length);\n valueFragment.appendChild(span);\n }\n else {\n valueFragment.appendChild(this.dom.createTextNode(simpleSpace, this.element));\n }\n }\n else if (controlCharacter) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_space ace_invalid\";\n span.textContent = lang.stringRepeat(self.SPACE_CHAR, controlCharacter.length);\n valueFragment.appendChild(span);\n }\n else if (cjkSpace) {\n screenColumn += 1;\n var span = this.dom.createElement(\"span\");\n span.style.width = (self.config.characterWidth * 2) + \"px\";\n span.className = self.showSpaces ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\n span.textContent = self.showSpaces ? self.SPACE_CHAR : cjkSpace;\n valueFragment.appendChild(span);\n }\n else if (cjk) {\n screenColumn += 1;\n var span = this.dom.createElement(\"span\");\n span.style.width = (self.config.characterWidth * 2) + \"px\";\n span.className = \"ace_cjk\";\n span.textContent = cjk;\n valueFragment.appendChild(span);\n }\n }\n valueFragment.appendChild(this.dom.createTextNode(i ? value.slice(i) : value, this.element));\n if (!isTextToken(token.type)) {\n var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n var span = this.dom.createElement(\"span\");\n if (token.type == \"fold\") {\n span.style.width = (token.value.length * this.config.characterWidth) + \"px\";\n span.setAttribute(\"title\", nls(\"Unfold code\"));\n }\n span.className = classes;\n span.appendChild(valueFragment);\n parent.appendChild(span);\n }\n else {\n parent.appendChild(valueFragment);\n }\n return screenColumn + value.length;\n };\n Text.prototype.renderIndentGuide = function (parent, value, max) {\n var cols = value.search(this.$indentGuideRe);\n if (cols <= 0 || cols >= max)\n return value;\n if (value[0] == \" \") {\n cols -= cols % this.tabSize;\n var count = cols / this.tabSize;\n for (var i = 0; i < count; i++) {\n parent.appendChild(this.$tabStrings[\" \"].cloneNode(true));\n }\n this.$highlightIndentGuide();\n return value.substr(cols);\n }\n else if (value[0] == \"\\t\") {\n for (var i = 0; i < cols; i++) {\n parent.appendChild(this.$tabStrings[\"\\t\"].cloneNode(true));\n }\n this.$highlightIndentGuide();\n return value.substr(cols);\n }\n this.$highlightIndentGuide();\n return value;\n };\n Text.prototype.$highlightIndentGuide = function () {\n if (!this.$highlightIndentGuides || !this.displayIndentGuides)\n return;\n this.$highlightIndentGuideMarker = {\n indentLevel: undefined,\n start: undefined,\n end: undefined,\n dir: undefined\n };\n var lines = this.session.doc.$lines;\n if (!lines)\n return;\n var cursor = this.session.selection.getCursor();\n var initialIndent = /^\\s*/.exec(this.session.doc.getLine(cursor.row))[0].length;\n var elementIndentLevel = Math.floor(initialIndent / this.tabSize);\n this.$highlightIndentGuideMarker = {\n indentLevel: elementIndentLevel,\n start: cursor.row\n };\n var bracketHighlight = this.session.$bracketHighlight;\n if (bracketHighlight) {\n var ranges = this.session.$bracketHighlight.ranges;\n for (var i = 0; i < ranges.length; i++) {\n if (cursor.row !== ranges[i].start.row) {\n this.$highlightIndentGuideMarker.end = ranges[i].start.row;\n if (cursor.row > ranges[i].start.row) {\n this.$highlightIndentGuideMarker.dir = -1;\n }\n else {\n this.$highlightIndentGuideMarker.dir = 1;\n }\n break;\n }\n }\n }\n if (!this.$highlightIndentGuideMarker.end) {\n if (lines[cursor.row] !== '' && cursor.column === lines[cursor.row].length) {\n this.$highlightIndentGuideMarker.dir = 1;\n for (var i = cursor.row + 1; i < lines.length; i++) {\n var line = lines[i];\n var currentIndent = /^\\s*/.exec(line)[0].length;\n if (line !== '') {\n this.$highlightIndentGuideMarker.end = i;\n if (currentIndent <= initialIndent)\n break;\n }\n }\n }\n }\n this.$renderHighlightIndentGuide();\n };\n Text.prototype.$clearActiveIndentGuide = function () {\n var cells = this.$lines.cells;\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n var childNodes = cell.element.childNodes;\n if (childNodes.length > 0) {\n for (var j = 0; j < childNodes.length; j++) {\n if (childNodes[j].classList && childNodes[j].classList.contains(\"ace_indent-guide-active\")) {\n childNodes[j].classList.remove(\"ace_indent-guide-active\");\n break;\n }\n }\n }\n }\n };\n Text.prototype.$setIndentGuideActive = function (cell, indentLevel) {\n var line = this.session.doc.getLine(cell.row);\n if (line !== \"\") {\n var childNodes = cell.element.childNodes;\n if (childNodes) {\n var node = childNodes[indentLevel - 1];\n if (node && node.classList && node.classList.contains(\"ace_indent-guide\"))\n node.classList.add(\"ace_indent-guide-active\");\n }\n }\n };\n Text.prototype.$renderHighlightIndentGuide = function () {\n if (!this.$lines)\n return;\n var cells = this.$lines.cells;\n this.$clearActiveIndentGuide();\n var indentLevel = this.$highlightIndentGuideMarker.indentLevel;\n if (indentLevel !== 0) {\n if (this.$highlightIndentGuideMarker.dir === 1) {\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (this.$highlightIndentGuideMarker.end && cell.row >= this.$highlightIndentGuideMarker.start\n + 1) {\n if (cell.row >= this.$highlightIndentGuideMarker.end)\n break;\n this.$setIndentGuideActive(cell, indentLevel);\n }\n }\n }\n else {\n for (var i = cells.length - 1; i >= 0; i--) {\n var cell = cells[i];\n if (this.$highlightIndentGuideMarker.end && cell.row < this.$highlightIndentGuideMarker.start) {\n if (cell.row <= this.$highlightIndentGuideMarker.end)\n break;\n this.$setIndentGuideActive(cell, indentLevel);\n }\n }\n }\n }\n };\n Text.prototype.$createLineElement = function (parent) {\n var lineEl = this.dom.createElement(\"div\");\n lineEl.className = \"ace_line\";\n lineEl.style.height = this.config.lineHeight + \"px\";\n return lineEl;\n };\n Text.prototype.$renderWrappedLine = function (parent, tokens, splits) {\n var chars = 0;\n var split = 0;\n var splitChars = splits[0];\n var screenColumn = 0;\n var lineEl = this.$createLineElement();\n parent.appendChild(lineEl);\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n var value = token.value;\n if (i == 0 && this.displayIndentGuides) {\n chars = value.length;\n value = this.renderIndentGuide(lineEl, value, splitChars);\n if (!value)\n continue;\n chars -= value.length;\n }\n if (chars + value.length < splitChars) {\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n chars += value.length;\n }\n else {\n while (chars + value.length >= splitChars) {\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value.substring(0, splitChars - chars));\n value = value.substring(splitChars - chars);\n chars = splitChars;\n lineEl = this.$createLineElement();\n parent.appendChild(lineEl);\n lineEl.appendChild(this.dom.createTextNode(lang.stringRepeat(\"\\xa0\", splits.indent), this.element));\n split++;\n screenColumn = 0;\n splitChars = splits[split] || Number.MAX_VALUE;\n }\n if (value.length != 0) {\n chars += value.length;\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n }\n }\n }\n if (splits[splits.length - 1] > this.MAX_LINE_LENGTH)\n this.$renderOverflowMessage(lineEl, screenColumn, null, \"\", true);\n };\n Text.prototype.$renderSimpleLine = function (parent, tokens) {\n var screenColumn = 0;\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n var value = token.value;\n if (i == 0 && this.displayIndentGuides) {\n value = this.renderIndentGuide(parent, value);\n if (!value)\n continue;\n }\n if (screenColumn + value.length > this.MAX_LINE_LENGTH)\n return this.$renderOverflowMessage(parent, screenColumn, token, value);\n screenColumn = this.$renderToken(parent, screenColumn, token, value);\n }\n };\n Text.prototype.$renderOverflowMessage = function (parent, screenColumn, token, value, hide) {\n token && this.$renderToken(parent, screenColumn, token, value.slice(0, this.MAX_LINE_LENGTH - screenColumn));\n var overflowEl = this.dom.createElement(\"span\");\n overflowEl.className = \"ace_inline_button ace_keyword ace_toggle_wrap\";\n overflowEl.textContent = hide ? \"<hide>\" : \"<click to see more...>\";\n parent.appendChild(overflowEl);\n };\n Text.prototype.$renderLine = function (parent, row, foldLine) {\n if (!foldLine && foldLine != false)\n foldLine = this.session.getFoldLine(row);\n if (foldLine)\n var tokens = this.$getFoldLineTokens(row, foldLine);\n else\n var tokens = this.session.getTokens(row);\n var lastLineEl = parent;\n if (tokens.length) {\n var splits = this.session.getRowSplitData(row);\n if (splits && splits.length) {\n this.$renderWrappedLine(parent, tokens, splits);\n var lastLineEl = parent.lastChild;\n }\n else {\n var lastLineEl = parent;\n if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n this.$renderSimpleLine(lastLineEl, tokens);\n }\n }\n else if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n if (this.showEOL && lastLineEl) {\n if (foldLine)\n row = foldLine.end.row;\n var invisibleEl = this.dom.createElement(\"span\");\n invisibleEl.className = \"ace_invisible ace_invisible_eol\";\n invisibleEl.textContent = row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR;\n lastLineEl.appendChild(invisibleEl);\n }\n };\n Text.prototype.$getFoldLineTokens = function (row, foldLine) {\n var session = this.session;\n var renderTokens = [];\n function addTokens(tokens, from, to) {\n var idx = 0, col = 0;\n while ((col + tokens[idx].value.length) < from) {\n col += tokens[idx].value.length;\n idx++;\n if (idx == tokens.length)\n return;\n }\n if (col != from) {\n var value = tokens[idx].value.substring(from - col);\n if (value.length > (to - from))\n value = value.substring(0, to - from);\n renderTokens.push({\n type: tokens[idx].type,\n value: value\n });\n col = from + value.length;\n idx += 1;\n }\n while (col < to && idx < tokens.length) {\n var value = tokens[idx].value;\n if (value.length + col > to) {\n renderTokens.push({\n type: tokens[idx].type,\n value: value.substring(0, to - col)\n });\n }\n else\n renderTokens.push(tokens[idx]);\n col += value.length;\n idx += 1;\n }\n }\n var tokens = session.getTokens(row);\n foldLine.walk(function (placeholder, row, column, lastColumn, isNewRow) {\n if (placeholder != null) {\n renderTokens.push({\n type: \"fold\",\n value: placeholder\n });\n }\n else {\n if (isNewRow)\n tokens = session.getTokens(row);\n if (tokens.length)\n addTokens(tokens, lastColumn, column);\n }\n }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\n return renderTokens;\n };\n Text.prototype.$useLineGroups = function () {\n return this.session.getUseWrapMode();\n };\n return Text;\n}());\nText.prototype.EOF_CHAR = \"\\xB6\";\nText.prototype.EOL_CHAR_LF = \"\\xAC\";\nText.prototype.EOL_CHAR_CRLF = \"\\xa4\";\nText.prototype.EOL_CHAR = Text.prototype.EOL_CHAR_LF;\nText.prototype.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\nText.prototype.SPACE_CHAR = \"\\xB7\";\nText.prototype.$padding = 0;\nText.prototype.MAX_LINE_LENGTH = 10000;\nText.prototype.showInvisibles = false;\nText.prototype.showSpaces = false;\nText.prototype.showTabs = false;\nText.prototype.showEOL = false;\nText.prototype.displayIndentGuides = true;\nText.prototype.$highlightIndentGuides = true;\nText.prototype.$tabStrings = [];\nText.prototype.destroy = {};\nText.prototype.onChangeTabSize = Text.prototype.$computeTabString;\noop.implement(Text.prototype, EventEmitter);\nexports.Text = Text;\n\n});\n\nace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Cursor = /** @class */ (function () {\n function Cursor(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_cursor-layer\";\n parentEl.appendChild(this.element);\n this.isVisible = false;\n this.isBlinking = true;\n this.blinkInterval = 1000;\n this.smoothBlinking = false;\n this.cursors = [];\n this.cursor = this.addCursor();\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.$updateCursors = this.$updateOpacity.bind(this);\n }\n Cursor.prototype.$updateOpacity = function (val) {\n var cursors = this.cursors;\n for (var i = cursors.length; i--;)\n dom.setStyle(cursors[i].style, \"opacity\", val ? \"\" : \"0\");\n };\n Cursor.prototype.$startCssAnimation = function () {\n var cursors = this.cursors;\n for (var i = cursors.length; i--;)\n cursors[i].style.animationDuration = this.blinkInterval + \"ms\";\n this.$isAnimating = true;\n setTimeout(function () {\n if (this.$isAnimating) {\n dom.addCssClass(this.element, \"ace_animate-blinking\");\n }\n }.bind(this));\n };\n Cursor.prototype.$stopCssAnimation = function () {\n this.$isAnimating = false;\n dom.removeCssClass(this.element, \"ace_animate-blinking\");\n };\n Cursor.prototype.setPadding = function (padding) {\n this.$padding = padding;\n };\n Cursor.prototype.setSession = function (session) {\n this.session = session;\n };\n Cursor.prototype.setBlinking = function (blinking) {\n if (blinking != this.isBlinking) {\n this.isBlinking = blinking;\n this.restartTimer();\n }\n };\n Cursor.prototype.setBlinkInterval = function (blinkInterval) {\n if (blinkInterval != this.blinkInterval) {\n this.blinkInterval = blinkInterval;\n this.restartTimer();\n }\n };\n Cursor.prototype.setSmoothBlinking = function (smoothBlinking) {\n if (smoothBlinking != this.smoothBlinking) {\n this.smoothBlinking = smoothBlinking;\n dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\n this.$updateCursors(true);\n this.restartTimer();\n }\n };\n Cursor.prototype.addCursor = function () {\n var el = dom.createElement(\"div\");\n el.className = \"ace_cursor\";\n this.element.appendChild(el);\n this.cursors.push(el);\n return el;\n };\n Cursor.prototype.removeCursor = function () {\n if (this.cursors.length > 1) {\n var el = this.cursors.pop();\n el.parentNode.removeChild(el);\n return el;\n }\n };\n Cursor.prototype.hideCursor = function () {\n this.isVisible = false;\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n Cursor.prototype.showCursor = function () {\n this.isVisible = true;\n dom.removeCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n Cursor.prototype.restartTimer = function () {\n var update = this.$updateCursors;\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n this.$stopCssAnimation();\n if (this.smoothBlinking) {\n this.$isSmoothBlinking = false;\n dom.removeCssClass(this.element, \"ace_smooth-blinking\");\n }\n update(true);\n if (!this.isBlinking || !this.blinkInterval || !this.isVisible) {\n this.$stopCssAnimation();\n return;\n }\n if (this.smoothBlinking) {\n this.$isSmoothBlinking = true;\n setTimeout(function () {\n if (this.$isSmoothBlinking) {\n dom.addCssClass(this.element, \"ace_smooth-blinking\");\n }\n }.bind(this));\n }\n if (dom.HAS_CSS_ANIMATION) {\n this.$startCssAnimation();\n }\n else {\n var blink = /**@this{Cursor}*/ function () {\n this.timeoutId = setTimeout(function () {\n update(false);\n }, 0.6 * this.blinkInterval);\n }.bind(this);\n this.intervalId = setInterval(function () {\n update(true);\n blink();\n }, this.blinkInterval);\n blink();\n }\n };\n Cursor.prototype.getPixelPosition = function (position, onScreen) {\n if (!this.config || !this.session)\n return { left: 0, top: 0 };\n if (!position)\n position = this.session.selection.getCursor();\n var pos = this.session.documentToScreenPosition(position);\n var cursorLeft = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, position.row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : pos.column * this.config.characterWidth);\n var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *\n this.config.lineHeight;\n return { left: cursorLeft, top: cursorTop };\n };\n Cursor.prototype.isCursorInView = function (pixelPos, config) {\n return pixelPos.top >= 0 && pixelPos.top < config.maxHeight;\n };\n Cursor.prototype.update = function (config) {\n this.config = config;\n var selections = this.session.$selectionMarkers;\n var i = 0, cursorIndex = 0;\n if (selections === undefined || selections.length === 0) {\n selections = [{ cursor: null }];\n }\n for (var i = 0, n = selections.length; i < n; i++) {\n var pixelPos = this.getPixelPosition(selections[i].cursor, true);\n if ((pixelPos.top > config.height + config.offset ||\n pixelPos.top < 0) && i > 1) {\n continue;\n }\n var element = this.cursors[cursorIndex++] || this.addCursor();\n var style = element.style;\n if (!this.drawCursor) {\n if (!this.isCursorInView(pixelPos, config)) {\n dom.setStyle(style, \"display\", \"none\");\n }\n else {\n dom.setStyle(style, \"display\", \"block\");\n dom.translate(element, pixelPos.left, pixelPos.top);\n dom.setStyle(style, \"width\", Math.round(config.characterWidth) + \"px\");\n dom.setStyle(style, \"height\", config.lineHeight + \"px\");\n }\n }\n else {\n this.drawCursor(element, pixelPos, config, selections[i], this.session);\n }\n }\n while (this.cursors.length > cursorIndex)\n this.removeCursor();\n var overwrite = this.session.getOverwrite();\n this.$setOverwrite(overwrite);\n this.$pixelPos = pixelPos;\n this.restartTimer();\n };\n Cursor.prototype.$setOverwrite = function (overwrite) {\n if (overwrite != this.overwrite) {\n this.overwrite = overwrite;\n if (overwrite)\n dom.addCssClass(this.element, \"ace_overwrite-cursors\");\n else\n dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\n }\n };\n Cursor.prototype.destroy = function () {\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n };\n return Cursor;\n}());\nCursor.prototype.$padding = 0;\nCursor.prototype.drawCursor = null;\nexports.Cursor = Cursor;\n\n});\n\nace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar MAX_SCROLL_H = 0x8000;\nvar Scrollbar = /** @class */ (function () {\n function Scrollbar(parent, classSuffix) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_scrollbar ace_scrollbar\" + classSuffix;\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"ace_scrollbar-inner\";\n this.inner.textContent = \"\\xa0\";\n this.element.appendChild(this.inner);\n parent.appendChild(this.element);\n this.setVisible(false);\n this.skipEvent = false;\n event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\n event.addListener(this.element, \"mousedown\", event.preventDefault);\n }\n Scrollbar.prototype.setVisible = function (isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n return Scrollbar;\n}());\noop.implement(Scrollbar.prototype, EventEmitter);\nvar VScrollBar = /** @class */ (function (_super) {\n __extends(VScrollBar, _super);\n function VScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-v') || this;\n _this.scrollTop = 0;\n _this.scrollHeight = 0;\n renderer.$scrollbarWidth =\n _this.width = dom.scrollbarWidth(parent.ownerDocument);\n _this.inner.style.width =\n _this.element.style.width = (_this.width || 15) + 5 + \"px\";\n _this.$minWidth = 0;\n return _this;\n }\n VScrollBar.prototype.onScroll = function () {\n if (!this.skipEvent) {\n this.scrollTop = this.element.scrollTop;\n if (this.coeff != 1) {\n var h = this.element.clientHeight / this.scrollHeight;\n this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h);\n }\n this._emit(\"scroll\", { data: this.scrollTop });\n }\n this.skipEvent = false;\n };\n VScrollBar.prototype.getWidth = function () {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n VScrollBar.prototype.setHeight = function (height) {\n this.element.style.height = height + \"px\";\n };\n VScrollBar.prototype.setScrollHeight = function (height) {\n this.scrollHeight = height;\n if (height > MAX_SCROLL_H) {\n this.coeff = MAX_SCROLL_H / height;\n height = MAX_SCROLL_H;\n }\n else if (this.coeff != 1) {\n this.coeff = 1;\n }\n this.inner.style.height = height + \"px\";\n };\n VScrollBar.prototype.setScrollTop = function (scrollTop) {\n if (this.scrollTop != scrollTop) {\n this.skipEvent = true;\n this.scrollTop = scrollTop;\n this.element.scrollTop = scrollTop * this.coeff;\n }\n };\n return VScrollBar;\n}(Scrollbar));\nVScrollBar.prototype.setInnerHeight = VScrollBar.prototype.setScrollHeight;\nvar HScrollBar = /** @class */ (function (_super) {\n __extends(HScrollBar, _super);\n function HScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-h') || this;\n _this.scrollLeft = 0;\n _this.height = renderer.$scrollbarWidth;\n _this.inner.style.height =\n _this.element.style.height = (_this.height || 15) + 5 + \"px\";\n return _this;\n }\n HScrollBar.prototype.onScroll = function () {\n if (!this.skipEvent) {\n this.scrollLeft = this.element.scrollLeft;\n this._emit(\"scroll\", { data: this.scrollLeft });\n }\n this.skipEvent = false;\n };\n HScrollBar.prototype.getHeight = function () {\n return this.isVisible ? this.height : 0;\n };\n HScrollBar.prototype.setWidth = function (width) {\n this.element.style.width = width + \"px\";\n };\n HScrollBar.prototype.setInnerWidth = function (width) {\n this.inner.style.width = width + \"px\";\n };\n HScrollBar.prototype.setScrollWidth = function (width) {\n this.inner.style.width = width + \"px\";\n };\n HScrollBar.prototype.setScrollLeft = function (scrollLeft) {\n if (this.scrollLeft != scrollLeft) {\n this.skipEvent = true;\n this.scrollLeft = this.element.scrollLeft = scrollLeft;\n }\n };\n return HScrollBar;\n}(Scrollbar));\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n\n});\n\nace.define(\"ace/scrollbar_custom\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\ndom.importCssString(\".ace_editor>.ace_sb-v div, .ace_editor>.ace_sb-h div{\\n position: absolute;\\n background: rgba(128, 128, 128, 0.6);\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n border: 1px solid #bbb;\\n border-radius: 2px;\\n z-index: 8;\\n}\\n.ace_editor>.ace_sb-v, .ace_editor>.ace_sb-h {\\n position: absolute;\\n z-index: 6;\\n background: none;\\n overflow: hidden!important;\\n}\\n.ace_editor>.ace_sb-v {\\n z-index: 6;\\n right: 0;\\n top: 0;\\n width: 12px;\\n}\\n.ace_editor>.ace_sb-v div {\\n z-index: 8;\\n right: 0;\\n width: 100%;\\n}\\n.ace_editor>.ace_sb-h {\\n bottom: 0;\\n left: 0;\\n height: 12px;\\n}\\n.ace_editor>.ace_sb-h div {\\n bottom: 0;\\n height: 100%;\\n}\\n.ace_editor>.ace_sb_grabbed {\\n z-index: 8;\\n background: #000;\\n}\", \"ace_scrollbar.css\", false);\nvar ScrollBar = /** @class */ (function () {\n function ScrollBar(parent, classSuffix) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_sb\" + classSuffix;\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"\";\n this.element.appendChild(this.inner);\n this.VScrollWidth = 12;\n this.HScrollHeight = 12;\n parent.appendChild(this.element);\n this.setVisible(false);\n this.skipEvent = false;\n event.addMultiMouseDownListener(this.element, [500, 300, 300], this, \"onMouseDown\");\n }\n ScrollBar.prototype.setVisible = function (isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n return ScrollBar;\n}());\noop.implement(ScrollBar.prototype, EventEmitter);\nvar VScrollBar = /** @class */ (function (_super) {\n __extends(VScrollBar, _super);\n function VScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-v') || this;\n _this.scrollTop = 0;\n _this.scrollHeight = 0;\n _this.parent = parent;\n _this.width = _this.VScrollWidth;\n _this.renderer = renderer;\n _this.inner.style.width = _this.element.style.width = (_this.width || 15) + \"px\";\n _this.$minWidth = 0;\n return _this;\n }\n VScrollBar.prototype.onMouseDown = function (eType, e) {\n if (eType !== \"mousedown\")\n return;\n if (event.getButton(e) !== 0 || e.detail === 2) {\n return;\n }\n if (e.target === this.inner) {\n var self = this;\n var mousePageY = e.clientY;\n var onMouseMove = function (e) {\n mousePageY = e.clientY;\n };\n var onMouseUp = function () {\n clearInterval(timerId);\n };\n var startY = e.clientY;\n var startTop = this.thumbTop;\n var onScrollInterval = function () {\n if (mousePageY === undefined)\n return;\n var scrollTop = self.scrollTopFromThumbTop(startTop + mousePageY - startY);\n if (scrollTop === self.scrollTop)\n return;\n self._emit(\"scroll\", { data: scrollTop });\n };\n event.capture(this.inner, onMouseMove, onMouseUp);\n var timerId = setInterval(onScrollInterval, 20);\n return event.preventDefault(e);\n }\n var top = e.clientY - this.element.getBoundingClientRect().top - this.thumbHeight / 2;\n this._emit(\"scroll\", { data: this.scrollTopFromThumbTop(top) });\n return event.preventDefault(e);\n };\n VScrollBar.prototype.getHeight = function () {\n return this.height;\n };\n VScrollBar.prototype.scrollTopFromThumbTop = function (thumbTop) {\n var scrollTop = thumbTop * (this.pageHeight - this.viewHeight) / (this.slideHeight - this.thumbHeight);\n scrollTop = scrollTop >> 0;\n if (scrollTop < 0) {\n scrollTop = 0;\n }\n else if (scrollTop > this.pageHeight - this.viewHeight) {\n scrollTop = this.pageHeight - this.viewHeight;\n }\n return scrollTop;\n };\n VScrollBar.prototype.getWidth = function () {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n VScrollBar.prototype.setHeight = function (height) {\n this.height = Math.max(0, height);\n this.slideHeight = this.height;\n this.viewHeight = this.height;\n this.setScrollHeight(this.pageHeight, true);\n };\n VScrollBar.prototype.setScrollHeight = function (height, force) {\n if (this.pageHeight === height && !force)\n return;\n this.pageHeight = height;\n this.thumbHeight = this.slideHeight * this.viewHeight / this.pageHeight;\n if (this.thumbHeight > this.slideHeight)\n this.thumbHeight = this.slideHeight;\n if (this.thumbHeight < 15)\n this.thumbHeight = 15;\n this.inner.style.height = this.thumbHeight + \"px\";\n if (this.scrollTop > (this.pageHeight - this.viewHeight)) {\n this.scrollTop = (this.pageHeight - this.viewHeight);\n if (this.scrollTop < 0)\n this.scrollTop = 0;\n this._emit(\"scroll\", { data: this.scrollTop });\n }\n };\n VScrollBar.prototype.setScrollTop = function (scrollTop) {\n this.scrollTop = scrollTop;\n if (scrollTop < 0)\n scrollTop = 0;\n this.thumbTop = scrollTop * (this.slideHeight - this.thumbHeight) / (this.pageHeight - this.viewHeight);\n this.inner.style.top = this.thumbTop + \"px\";\n };\n return VScrollBar;\n}(ScrollBar));\nVScrollBar.prototype.setInnerHeight = VScrollBar.prototype.setScrollHeight;\nvar HScrollBar = /** @class */ (function (_super) {\n __extends(HScrollBar, _super);\n function HScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-h') || this;\n _this.scrollLeft = 0;\n _this.scrollWidth = 0;\n _this.height = _this.HScrollHeight;\n _this.inner.style.height = _this.element.style.height = (_this.height || 12) + \"px\";\n _this.renderer = renderer;\n return _this;\n }\n HScrollBar.prototype.onMouseDown = function (eType, e) {\n if (eType !== \"mousedown\")\n return;\n if (event.getButton(e) !== 0 || e.detail === 2) {\n return;\n }\n if (e.target === this.inner) {\n var self = this;\n var mousePageX = e.clientX;\n var onMouseMove = function (e) {\n mousePageX = e.clientX;\n };\n var onMouseUp = function () {\n clearInterval(timerId);\n };\n var startX = e.clientX;\n var startLeft = this.thumbLeft;\n var onScrollInterval = function () {\n if (mousePageX === undefined)\n return;\n var scrollLeft = self.scrollLeftFromThumbLeft(startLeft + mousePageX - startX);\n if (scrollLeft === self.scrollLeft)\n return;\n self._emit(\"scroll\", { data: scrollLeft });\n };\n event.capture(this.inner, onMouseMove, onMouseUp);\n var timerId = setInterval(onScrollInterval, 20);\n return event.preventDefault(e);\n }\n var left = e.clientX - this.element.getBoundingClientRect().left - this.thumbWidth / 2;\n this._emit(\"scroll\", { data: this.scrollLeftFromThumbLeft(left) });\n return event.preventDefault(e);\n };\n HScrollBar.prototype.getHeight = function () {\n return this.isVisible ? this.height : 0;\n };\n HScrollBar.prototype.scrollLeftFromThumbLeft = function (thumbLeft) {\n var scrollLeft = thumbLeft * (this.pageWidth - this.viewWidth) / (this.slideWidth - this.thumbWidth);\n scrollLeft = scrollLeft >> 0;\n if (scrollLeft < 0) {\n scrollLeft = 0;\n }\n else if (scrollLeft > this.pageWidth - this.viewWidth) {\n scrollLeft = this.pageWidth - this.viewWidth;\n }\n return scrollLeft;\n };\n HScrollBar.prototype.setWidth = function (width) {\n this.width = Math.max(0, width);\n this.element.style.width = this.width + \"px\";\n this.slideWidth = this.width;\n this.viewWidth = this.width;\n this.setScrollWidth(this.pageWidth, true);\n };\n HScrollBar.prototype.setScrollWidth = function (width, force) {\n if (this.pageWidth === width && !force)\n return;\n this.pageWidth = width;\n this.thumbWidth = this.slideWidth * this.viewWidth / this.pageWidth;\n if (this.thumbWidth > this.slideWidth)\n this.thumbWidth = this.slideWidth;\n if (this.thumbWidth < 15)\n this.thumbWidth = 15;\n this.inner.style.width = this.thumbWidth + \"px\";\n if (this.scrollLeft > (this.pageWidth - this.viewWidth)) {\n this.scrollLeft = (this.pageWidth - this.viewWidth);\n if (this.scrollLeft < 0)\n this.scrollLeft = 0;\n this._emit(\"scroll\", { data: this.scrollLeft });\n }\n };\n HScrollBar.prototype.setScrollLeft = function (scrollLeft) {\n this.scrollLeft = scrollLeft;\n if (scrollLeft < 0)\n scrollLeft = 0;\n this.thumbLeft = scrollLeft * (this.slideWidth - this.thumbWidth) / (this.pageWidth - this.viewWidth);\n this.inner.style.left = (this.thumbLeft) + \"px\";\n };\n return HScrollBar;\n}(ScrollBar));\nHScrollBar.prototype.setInnerWidth = HScrollBar.prototype.setScrollWidth;\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n\n});\n\nace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"], function(require, exports, module){\"use strict\";\nvar event = require(\"./lib/event\");\nvar RenderLoop = /** @class */ (function () {\n function RenderLoop(onRender, win) {\n this.onRender = onRender;\n this.pending = false;\n this.changes = 0;\n this.$recursionLimit = 2;\n this.window = win || window;\n var _self = this;\n this._flush = function (ts) {\n _self.pending = false;\n var changes = _self.changes;\n if (changes) {\n event.blockIdle(100);\n _self.changes = 0;\n _self.onRender(changes);\n }\n if (_self.changes) {\n if (_self.$recursionLimit-- < 0)\n return;\n _self.schedule();\n }\n else {\n _self.$recursionLimit = 2;\n }\n };\n }\n RenderLoop.prototype.schedule = function (change) {\n this.changes = this.changes | change;\n if (this.changes && !this.pending) {\n event.nextFrame(this._flush);\n this.pending = true;\n }\n };\n RenderLoop.prototype.clear = function (change) {\n var changes = this.changes;\n this.changes = 0;\n return changes;\n };\n return RenderLoop;\n}());\nexports.RenderLoop = RenderLoop;\n\n});\n\nace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(require, exports, module){var oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar CHAR_COUNT = 512;\nvar USE_OBSERVER = typeof ResizeObserver == \"function\";\nvar L = 200;\nvar FontMetrics = /** @class */ (function () {\n function FontMetrics(parentEl) {\n this.el = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.el.style, true);\n this.$main = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$main.style);\n this.$measureNode = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$measureNode.style);\n this.el.appendChild(this.$main);\n this.el.appendChild(this.$measureNode);\n parentEl.appendChild(this.el);\n this.$measureNode.textContent = lang.stringRepeat(\"X\", CHAR_COUNT);\n this.$characterSize = { width: 0, height: 0 };\n if (USE_OBSERVER)\n this.$addObserver();\n else\n this.checkForSizeChanges();\n }\n FontMetrics.prototype.$setMeasureNodeStyles = function (style, isRoot) {\n style.width = style.height = \"auto\";\n style.left = style.top = \"0px\";\n style.visibility = \"hidden\";\n style.position = \"absolute\";\n style.whiteSpace = \"pre\";\n if (useragent.isIE < 8) {\n style[\"font-family\"] = \"inherit\";\n }\n else {\n style.font = \"inherit\";\n }\n style.overflow = isRoot ? \"hidden\" : \"visible\";\n };\n FontMetrics.prototype.checkForSizeChanges = function (size) {\n if (size === undefined)\n size = this.$measureSizes();\n if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {\n this.$measureNode.style.fontWeight = \"bold\";\n var boldSize = this.$measureSizes();\n this.$measureNode.style.fontWeight = \"\";\n this.$characterSize = size;\n this.charSizes = Object.create(null);\n this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;\n this._emit(\"changeCharacterSize\", { data: size });\n }\n };\n FontMetrics.prototype.$addObserver = function () {\n var self = this;\n this.$observer = new window.ResizeObserver(function (e) {\n self.checkForSizeChanges();\n });\n this.$observer.observe(this.$measureNode);\n };\n FontMetrics.prototype.$pollSizeChanges = function () {\n if (this.$pollSizeChangesTimer || this.$observer)\n return this.$pollSizeChangesTimer;\n var self = this;\n return this.$pollSizeChangesTimer = event.onIdle(function cb() {\n self.checkForSizeChanges();\n event.onIdle(cb, 500);\n }, 500);\n };\n FontMetrics.prototype.setPolling = function (val) {\n if (val) {\n this.$pollSizeChanges();\n }\n else if (this.$pollSizeChangesTimer) {\n clearInterval(this.$pollSizeChangesTimer);\n this.$pollSizeChangesTimer = 0;\n }\n };\n FontMetrics.prototype.$measureSizes = function (node) {\n var size = {\n height: (node || this.$measureNode).clientHeight,\n width: (node || this.$measureNode).clientWidth / CHAR_COUNT\n };\n if (size.width === 0 || size.height === 0)\n return null;\n return size;\n };\n FontMetrics.prototype.$measureCharWidth = function (ch) {\n this.$main.textContent = lang.stringRepeat(ch, CHAR_COUNT);\n var rect = this.$main.getBoundingClientRect();\n return rect.width / CHAR_COUNT;\n };\n FontMetrics.prototype.getCharacterWidth = function (ch) {\n var w = this.charSizes[ch];\n if (w === undefined) {\n w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\n }\n return w;\n };\n FontMetrics.prototype.destroy = function () {\n clearInterval(this.$pollSizeChangesTimer);\n if (this.$observer)\n this.$observer.disconnect();\n if (this.el && this.el.parentNode)\n this.el.parentNode.removeChild(this.el);\n };\n FontMetrics.prototype.$getZoom = function (element) {\n if (!element || !element.parentElement)\n return 1;\n return (window.getComputedStyle(element)[\"zoom\"] || 1) * this.$getZoom(element.parentElement);\n };\n FontMetrics.prototype.$initTransformMeasureNodes = function () {\n var t = function (t, l) {\n return [\"div\", {\n style: \"position: absolute;top:\" + t + \"px;left:\" + l + \"px;\"\n }];\n };\n this.els = dom.buildDom([t(0, 0), t(L, 0), t(0, L), t(L, L)], this.el);\n };\n FontMetrics.prototype.transformCoordinates = function (clientPos, elPos) {\n if (clientPos) {\n var zoom = this.$getZoom(this.el);\n clientPos = mul(1 / zoom, clientPos);\n }\n function solve(l1, l2, r) {\n var det = l1[1] * l2[0] - l1[0] * l2[1];\n return [\n (-l2[1] * r[0] + l2[0] * r[1]) / det,\n (+l1[1] * r[0] - l1[0] * r[1]) / det\n ];\n }\n function sub(a, b) { return [a[0] - b[0], a[1] - b[1]]; }\n function add(a, b) { return [a[0] + b[0], a[1] + b[1]]; }\n function mul(a, b) { return [a * b[0], a * b[1]]; }\n if (!this.els)\n this.$initTransformMeasureNodes();\n function p(el) {\n var r = el.getBoundingClientRect();\n return [r.left, r.top];\n }\n var a = p(this.els[0]);\n var b = p(this.els[1]);\n var c = p(this.els[2]);\n var d = p(this.els[3]);\n var h = solve(sub(d, b), sub(d, c), sub(add(b, c), add(d, a)));\n var m1 = mul(1 + h[0], sub(b, a));\n var m2 = mul(1 + h[1], sub(c, a));\n if (elPos) {\n var x = elPos;\n var k = h[0] * x[0] / L + h[1] * x[1] / L + 1;\n var ut = add(mul(x[0], m1), mul(x[1], m2));\n return add(mul(1 / k / L, ut), a);\n }\n var u = sub(clientPos, a);\n var f = solve(sub(m1, mul(h[0], u)), sub(m2, mul(h[1], u)), u);\n return mul(L, f);\n };\n return FontMetrics;\n}());\nFontMetrics.prototype.$characterSize = { width: 0, height: 0 };\noop.implement(FontMetrics.prototype, EventEmitter);\nexports.FontMetrics = FontMetrics;\n\n});\n\nace.define(\"ace/css/editor-css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){/*\nstyles = []\nfor (var i = 1; i < 16; i++) {\n styles.push(\".ace_br\" + i + \"{\" + (\n [\"top-left\", \"top-right\", \"bottom-right\", \"bottom-left\"]\n ).map(function(x, j) {\n return i & (1<<j) ? \"border-\" + x + \"-radius: 3px;\" : \"\"\n }).filter(Boolean).join(\" \") + \"}\")\n}\nstyles.join(\"\\\\n\")\n*/\nmodule.exports = \"\\n.ace_br1 {border-top-left-radius : 3px;}\\n.ace_br2 {border-top-right-radius : 3px;}\\n.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\\n.ace_br4 {border-bottom-right-radius: 3px;}\\n.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\\n.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\\n.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\\n.ace_br8 {border-bottom-left-radius : 3px;}\\n.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\\n.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\\n.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\\n.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\n.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\n.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\n.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\n\\n\\n.ace_editor {\\n position: relative;\\n overflow: hidden;\\n padding: 0;\\n font: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'Source Code Pro', 'source-code-pro', monospace;\\n direction: ltr;\\n text-align: left;\\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\n}\\n\\n.ace_scroller {\\n position: absolute;\\n overflow: hidden;\\n top: 0;\\n bottom: 0;\\n background-color: inherit;\\n -ms-user-select: none;\\n -moz-user-select: none;\\n -webkit-user-select: none;\\n user-select: none;\\n cursor: text;\\n}\\n\\n.ace_content {\\n position: absolute;\\n box-sizing: border-box;\\n min-width: 100%;\\n contain: style size layout;\\n font-variant-ligatures: no-common-ligatures;\\n}\\n\\n.ace_keyboard-focus:focus {\\n box-shadow: inset 0 0 0 2px #5E9ED6;\\n outline: none;\\n}\\n\\n.ace_dragging .ace_scroller:before{\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n content: '';\\n background: rgba(250, 250, 250, 0.01);\\n z-index: 1000;\\n}\\n.ace_dragging.ace_dark .ace_scroller:before{\\n background: rgba(0, 0, 0, 0.01);\\n}\\n\\n.ace_gutter {\\n position: absolute;\\n overflow : hidden;\\n width: auto;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n cursor: default;\\n z-index: 4;\\n -ms-user-select: none;\\n -moz-user-select: none;\\n -webkit-user-select: none;\\n user-select: none;\\n contain: style size layout;\\n}\\n\\n.ace_gutter-active-line {\\n position: absolute;\\n left: 0;\\n right: 0;\\n}\\n\\n.ace_scroller.ace_scroll-left:after {\\n content: \\\"\\\";\\n position: absolute;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n left: 0;\\n box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\\n pointer-events: none;\\n}\\n\\n.ace_gutter-cell, .ace_gutter-cell_svg-icons {\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n padding-left: 19px;\\n padding-right: 6px;\\n background-repeat: no-repeat;\\n}\\n\\n.ace_gutter-cell_svg-icons .ace_gutter_annotation {\\n margin-left: -14px;\\n float: left;\\n}\\n\\n.ace_gutter-cell .ace_gutter_annotation {\\n margin-left: -19px;\\n float: left;\\n}\\n\\n.ace_gutter-cell.ace_error, .ace_icon.ace_error, .ace_icon.ace_error_fold {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\\\");\\n background-repeat: no-repeat;\\n background-position: 2px center;\\n}\\n\\n.ace_gutter-cell.ace_warning, .ace_icon.ace_warning, .ace_icon.ace_warning_fold {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\\\");\\n background-repeat: no-repeat;\\n background-position: 2px center;\\n}\\n\\n.ace_gutter-cell.ace_info, .ace_icon.ace_info {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\\\");\\n background-repeat: no-repeat;\\n background-position: 2px center;\\n}\\n.ace_dark .ace_gutter-cell.ace_info, .ace_dark .ace_icon.ace_info {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\\\");\\n}\\n\\n.ace_icon_svg.ace_error {\\n -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJyZWQiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KPGNpcmNsZSBmaWxsPSJub25lIiBjeD0iOCIgY3k9IjgiIHI9IjciIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPGxpbmUgeDE9IjExIiB5MT0iNSIgeDI9IjUiIHkyPSIxMSIvPgo8bGluZSB4MT0iMTEiIHkxPSIxMSIgeDI9IjUiIHkyPSI1Ii8+CjwvZz4KPC9zdmc+\\\");\\n background-color: crimson;\\n}\\n.ace_icon_svg.ace_warning {\\n -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJkYXJrb3JhbmdlIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+Cjxwb2x5Z29uIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGZpbGw9Im5vbmUiIHBvaW50cz0iOCAxIDE1IDE1IDEgMTUgOCAxIi8+CjxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iMC4wMSIgaGVpZ2h0PSIwLjAxIi8+CjxsaW5lIHgxPSI4IiB5MT0iNiIgeDI9IjgiIHkyPSIxMCIvPgo8L2c+Cjwvc3ZnPg==\\\");\\n background-color: darkorange;\\n}\\n.ace_icon_svg.ace_info {\\n -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJibHVlIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+CjxjaXJjbGUgZmlsbD0ibm9uZSIgY3g9IjgiIGN5PSI4IiByPSI3IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjxwb2x5bGluZSBwb2ludHM9IjggMTEgOCA4Ii8+Cjxwb2x5bGluZSBwb2ludHM9IjkgOCA2IDgiLz4KPGxpbmUgeDE9IjEwIiB5MT0iMTEiIHgyPSI2IiB5Mj0iMTEiLz4KPHJlY3QgeD0iOCIgeT0iNSIgd2lkdGg9IjAuMDEiIGhlaWdodD0iMC4wMSIvPgo8L2c+Cjwvc3ZnPg==\\\");\\n background-color: royalblue;\\n}\\n\\n.ace_icon_svg.ace_error_fold {\\n -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiIgZmlsbD0ibm9uZSI+CiAgPHBhdGggZD0ibSAxOC45Mjk4NTEsNy44Mjk4MDc2IGMgMC4xNDYzNTMsNi4zMzc0NjA0IC02LjMyMzE0Nyw3Ljc3Nzg0NDQgLTcuNDc3OTEyLDcuNzc3ODQ0NCAtMi4xMDcyNzI2LC0wLjEyODc1IDUuMTE3Njc4LDAuMzU2MjQ5IDUuMDUxNjk4LC03Ljg3MDA2MTggLTAuNjA0NjcyLC04LjAwMzk3MzQ5IC03LjA3NzI3MDYsLTcuNTYzMTE4OSAtNC44NTczLC03LjQzMDM5NTU2IDEuNjA2LC0wLjExNTE0MjI1IDYuODk3NDg1LDEuMjYyNTQ1OTYgNy4yODM1MTQsNy41MjI2MTI5NiB6IiBmaWxsPSJjcmltc29uIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0ibSA4LjExNDc1NjIsMi4wNTI5ODI4IGMgMy4zNDkxNjk4LDAgNi4wNjQxMzI4LDIuNjc2ODYyNyA2LjA2NDEzMjgsNS45Nzg5NTMgMCwzLjMwMjExMjIgLTIuNzE0OTYzLDUuOTc4OTIwMiAtNi4wNjQxMzI4LDUuOTc4OTIwMiAtMy4zNDkxNDczLDAgLTYuMDY0MTc3MiwtMi42NzY4MDggLTYuMDY0MTc3MiwtNS45Nzg5MjAyIDAuMDA1MzksLTMuMjk5ODg2MSAyLjcxNzI2NTYsLTUuOTczNjQwOCA2LjA2NDE3NzIsLTUuOTc4OTUzIHogbSAwLC0xLjczNTgyNzE5IGMgLTQuMzIxNDgzNiwwIC03LjgyNDc0MDM4LDMuNDU0MDE4NDkgLTcuODI0NzQwMzgsNy43MTQ3ODAxOSAwLDQuMjYwNzI4MiAzLjUwMzI1Njc4LDcuNzE0NzQ1MiA3LjgyNDc0MDM4LDcuNzE0NzQ1MiA0LjMyMTQ0OTgsMCA3LjgyNDY5OTgsLTMuNDU0MDE3IDcuODI0Njk5OCwtNy43MTQ3NDUyIDAsLTIuMDQ2MDkxNCAtMC44MjQzOTIsLTQuMDA4MzY3MiAtMi4yOTE3NTYsLTUuNDU1MTc0NiBDIDEyLjE4MDIyNSwxLjEyOTk2NDggMTAuMTkwMDEzLDAuMzE3MTU1NjEgOC4xMTQ3NTYyLDAuMzE3MTU1NjEgWiBNIDYuOTM3NDU2Myw4LjI0MDU5ODUgNC42NzE4Njg1LDEwLjQ4NTg1MiA2LjAwODY4MTQsMTEuODc2NzI4IDguMzE3MDAzNSw5LjYwMDc5MTEgMTAuNjI1MzM3LDExLjg3NjcyOCAxMS45NjIxMzgsMTAuNDg1ODUyIDkuNjk2NTUwOCw4LjI0MDU5ODUgMTEuOTYyMTM4LDYuMDA2ODA2NiAxMC41NzMyNDYsNC42Mzc0MzM1IDguMzE3MDAzNSw2Ljg3MzQyOTcgNi4wNjA3NjA3LDQuNjM3NDMzNSA0LjY3MTg2ODUsNi4wMDY4MDY2IFoiIGZpbGw9ImNyaW1zb24iIHN0cm9rZS13aWR0aD0iMiIvPgo8L3N2Zz4=\\\");\\n background-color: crimson;\\n}\\n.ace_icon_svg.ace_warning_fold {\\n -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAyMCAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNC43NzY5IDE0LjczMzdMOC42NTE5MiAyLjQ4MzY5QzguMzI5NDYgMS44Mzg3NyA3LjQwOTEzIDEuODM4NzcgNy4wODY2NyAyLjQ4MzY5TDAuOTYxNjY5IDE0LjczMzdDMC42NzA3NzUgMTUuMzE1NSAxLjA5MzgzIDE2IDEuNzQ0MjkgMTZIMTMuOTk0M0MxNC42NDQ4IDE2IDE1LjA2NzggMTUuMzE1NSAxNC43NzY5IDE0LjczMzdaTTMuMTYwMDcgMTQuMjVMNy44NjkyOSA0LjgzMTU2TDEyLjU3ODUgMTQuMjVIMy4xNjAwN1pNOC43NDQyOSAxMS42MjVWMTMuMzc1SDYuOTk0MjlWMTEuNjI1SDguNzQ0MjlaTTYuOTk0MjkgMTAuNzVWNy4yNUg4Ljc0NDI5VjEwLjc1SDYuOTk0MjlaIiBmaWxsPSIjRUM3MjExIi8+CjxwYXRoIGQ9Ik0xMS4xOTkxIDIuOTUyMzhDMTAuODgwOSAyLjMxNDY3IDEwLjM1MzcgMS44MDUyNiA5LjcwNTUgMS41MDlMMTEuMDQxIDEuMDY5NzhDMTEuNjg4MyAwLjk0OTgxNCAxMi4zMzcgMS4yNzI2MyAxMi42MzE3IDEuODYxNDFMMTcuNjEzNiAxMS44MTYxQzE4LjM1MjcgMTMuMjkyOSAxNy41OTM4IDE1LjA4MDQgMTYuMDE4IDE1LjU3NDVDMTYuNDA0NCAxNC40NTA3IDE2LjMyMzEgMTMuMjE4OCAxNS43OTI0IDEyLjE1NTVMMTEuMTk5MSAyLjk1MjM4WiIgZmlsbD0iI0VDNzIxMSIvPgo8L3N2Zz4=\\\");\\n background-color: darkorange;\\n}\\n\\n.ace_scrollbar {\\n contain: strict;\\n position: absolute;\\n right: 0;\\n bottom: 0;\\n z-index: 6;\\n}\\n\\n.ace_scrollbar-inner {\\n position: absolute;\\n cursor: text;\\n left: 0;\\n top: 0;\\n}\\n\\n.ace_scrollbar-v{\\n overflow-x: hidden;\\n overflow-y: scroll;\\n top: 0;\\n}\\n\\n.ace_scrollbar-h {\\n overflow-x: scroll;\\n overflow-y: hidden;\\n left: 0;\\n}\\n\\n.ace_print-margin {\\n position: absolute;\\n height: 100%;\\n}\\n\\n.ace_text-input {\\n position: absolute;\\n z-index: 0;\\n width: 0.5em;\\n height: 1em;\\n opacity: 0;\\n background: transparent;\\n -moz-appearance: none;\\n appearance: none;\\n border: none;\\n resize: none;\\n outline: none;\\n overflow: hidden;\\n font: inherit;\\n padding: 0 1px;\\n margin: 0 -1px;\\n contain: strict;\\n -ms-user-select: text;\\n -moz-user-select: text;\\n -webkit-user-select: text;\\n user-select: text;\\n /*with `pre-line` chrome inserts &nbsp; instead of space*/\\n white-space: pre!important;\\n}\\n.ace_text-input.ace_composition {\\n background: transparent;\\n color: inherit;\\n z-index: 1000;\\n opacity: 1;\\n}\\n.ace_composition_placeholder { color: transparent }\\n.ace_composition_marker { \\n border-bottom: 1px solid;\\n position: absolute;\\n border-radius: 0;\\n margin-top: 1px;\\n}\\n\\n[ace_nocontext=true] {\\n transform: none!important;\\n filter: none!important;\\n clip-path: none!important;\\n mask : none!important;\\n contain: none!important;\\n perspective: none!important;\\n mix-blend-mode: initial!important;\\n z-index: auto;\\n}\\n\\n.ace_layer {\\n z-index: 1;\\n position: absolute;\\n overflow: hidden;\\n /* workaround for chrome bug https://github.com/ajaxorg/ace/issues/2312*/\\n word-wrap: normal;\\n white-space: pre;\\n height: 100%;\\n width: 100%;\\n box-sizing: border-box;\\n /* setting pointer-events: auto; on node under the mouse, which changes\\n during scroll, will break mouse wheel scrolling in Safari */\\n pointer-events: none;\\n}\\n\\n.ace_gutter-layer {\\n position: relative;\\n width: auto;\\n text-align: right;\\n pointer-events: auto;\\n height: 1000000px;\\n contain: style size layout;\\n}\\n\\n.ace_text-layer {\\n font: inherit !important;\\n position: absolute;\\n height: 1000000px;\\n width: 1000000px;\\n contain: style size layout;\\n}\\n\\n.ace_text-layer > .ace_line, .ace_text-layer > .ace_line_group {\\n contain: style size layout;\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n}\\n\\n.ace_hidpi .ace_text-layer,\\n.ace_hidpi .ace_gutter-layer,\\n.ace_hidpi .ace_content,\\n.ace_hidpi .ace_gutter {\\n contain: strict;\\n}\\n.ace_hidpi .ace_text-layer > .ace_line, \\n.ace_hidpi .ace_text-layer > .ace_line_group {\\n contain: strict;\\n}\\n\\n.ace_cjk {\\n display: inline-block;\\n text-align: center;\\n}\\n\\n.ace_cursor-layer {\\n z-index: 4;\\n}\\n\\n.ace_cursor {\\n z-index: 4;\\n position: absolute;\\n box-sizing: border-box;\\n border-left: 2px solid;\\n /* workaround for smooth cursor repaintng whole screen in chrome */\\n transform: translatez(0);\\n}\\n\\n.ace_multiselect .ace_cursor {\\n border-left-width: 1px;\\n}\\n\\n.ace_slim-cursors .ace_cursor {\\n border-left-width: 1px;\\n}\\n\\n.ace_overwrite-cursors .ace_cursor {\\n border-left-width: 0;\\n border-bottom: 1px solid;\\n}\\n\\n.ace_hidden-cursors .ace_cursor {\\n opacity: 0.2;\\n}\\n\\n.ace_hasPlaceholder .ace_hidden-cursors .ace_cursor {\\n opacity: 0;\\n}\\n\\n.ace_smooth-blinking .ace_cursor {\\n transition: opacity 0.18s;\\n}\\n\\n.ace_animate-blinking .ace_cursor {\\n animation-duration: 1000ms;\\n animation-timing-function: step-end;\\n animation-name: blink-ace-animate;\\n animation-iteration-count: infinite;\\n}\\n\\n.ace_animate-blinking.ace_smooth-blinking .ace_cursor {\\n animation-duration: 1000ms;\\n animation-timing-function: ease-in-out;\\n animation-name: blink-ace-animate-smooth;\\n}\\n \\n@keyframes blink-ace-animate {\\n from, to { opacity: 1; }\\n 60% { opacity: 0; }\\n}\\n\\n@keyframes blink-ace-animate-smooth {\\n from, to { opacity: 1; }\\n 45% { opacity: 1; }\\n 60% { opacity: 0; }\\n 85% { opacity: 0; }\\n}\\n\\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\n position: absolute;\\n z-index: 3;\\n}\\n\\n.ace_marker-layer .ace_selection {\\n position: absolute;\\n z-index: 5;\\n}\\n\\n.ace_marker-layer .ace_bracket {\\n position: absolute;\\n z-index: 6;\\n}\\n\\n.ace_marker-layer .ace_error_bracket {\\n position: absolute;\\n border-bottom: 1px solid #DE5555;\\n border-radius: 0;\\n}\\n\\n.ace_marker-layer .ace_active-line {\\n position: absolute;\\n z-index: 2;\\n}\\n\\n.ace_marker-layer .ace_selected-word {\\n position: absolute;\\n z-index: 4;\\n box-sizing: border-box;\\n}\\n\\n.ace_line .ace_fold {\\n box-sizing: border-box;\\n\\n display: inline-block;\\n height: 11px;\\n margin-top: -2px;\\n vertical-align: middle;\\n\\n background-image:\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\n background-repeat: no-repeat, repeat-x;\\n background-position: center center, top left;\\n color: transparent;\\n\\n border: 1px solid black;\\n border-radius: 2px;\\n\\n cursor: pointer;\\n pointer-events: auto;\\n}\\n\\n.ace_dark .ace_fold {\\n}\\n\\n.ace_fold:hover{\\n background-image:\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\n}\\n\\n.ace_tooltip {\\n background-color: #f5f5f5;\\n border: 1px solid gray;\\n border-radius: 1px;\\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\n color: black;\\n max-width: 100%;\\n padding: 3px 4px;\\n position: fixed;\\n z-index: 999999;\\n box-sizing: border-box;\\n cursor: default;\\n white-space: pre-wrap;\\n word-wrap: break-word;\\n line-height: normal;\\n font-style: normal;\\n font-weight: normal;\\n letter-spacing: normal;\\n pointer-events: none;\\n overflow: auto;\\n max-width: min(60em, 66vw);\\n overscroll-behavior: contain;\\n}\\n.ace_tooltip pre {\\n white-space: pre-wrap;\\n}\\n\\n.ace_tooltip.ace_dark {\\n background-color: #636363;\\n color: #fff;\\n}\\n\\n.ace_tooltip:focus {\\n outline: 1px solid #5E9ED6;\\n}\\n\\n.ace_icon {\\n display: inline-block;\\n width: 18px;\\n vertical-align: top;\\n}\\n\\n.ace_icon_svg {\\n display: inline-block;\\n width: 12px;\\n vertical-align: top;\\n -webkit-mask-repeat: no-repeat;\\n -webkit-mask-size: 12px;\\n -webkit-mask-position: center;\\n}\\n\\n.ace_folding-enabled > .ace_gutter-cell, .ace_folding-enabled > .ace_gutter-cell_svg-icons {\\n padding-right: 13px;\\n}\\n\\n.ace_fold-widget {\\n box-sizing: border-box;\\n\\n margin: 0 -12px 0 1px;\\n display: none;\\n width: 11px;\\n vertical-align: top;\\n\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\n background-repeat: no-repeat;\\n background-position: center;\\n\\n border-radius: 3px;\\n \\n border: 1px solid transparent;\\n cursor: pointer;\\n}\\n\\n.ace_folding-enabled .ace_fold-widget {\\n display: inline-block; \\n}\\n\\n.ace_fold-widget.ace_end {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\n}\\n\\n.ace_fold-widget.ace_closed {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\n}\\n\\n.ace_fold-widget:hover {\\n border: 1px solid rgba(0, 0, 0, 0.3);\\n background-color: rgba(255, 255, 255, 0.2);\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\n}\\n\\n.ace_fold-widget:active {\\n border: 1px solid rgba(0, 0, 0, 0.4);\\n background-color: rgba(0, 0, 0, 0.05);\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\n}\\n/**\\n * Dark version for fold widgets\\n */\\n.ace_dark .ace_fold-widget {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\n}\\n.ace_dark .ace_fold-widget.ace_end {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\n}\\n.ace_dark .ace_fold-widget.ace_closed {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\n}\\n.ace_dark .ace_fold-widget:hover {\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.ace_dark .ace_fold-widget:active {\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\n}\\n\\n.ace_inline_button {\\n border: 1px solid lightgray;\\n display: inline-block;\\n margin: -1px 8px;\\n padding: 0 5px;\\n pointer-events: auto;\\n cursor: pointer;\\n}\\n.ace_inline_button:hover {\\n border-color: gray;\\n background: rgba(200,200,200,0.2);\\n display: inline-block;\\n pointer-events: auto;\\n}\\n\\n.ace_fold-widget.ace_invalid {\\n background-color: #FFB4B4;\\n border-color: #DE5555;\\n}\\n\\n.ace_fade-fold-widgets .ace_fold-widget {\\n transition: opacity 0.4s ease 0.05s;\\n opacity: 0;\\n}\\n\\n.ace_fade-fold-widgets:hover .ace_fold-widget {\\n transition: opacity 0.05s ease 0.05s;\\n opacity:1;\\n}\\n\\n.ace_underline {\\n text-decoration: underline;\\n}\\n\\n.ace_bold {\\n font-weight: bold;\\n}\\n\\n.ace_nobold .ace_bold {\\n font-weight: normal;\\n}\\n\\n.ace_italic {\\n font-style: italic;\\n}\\n\\n\\n.ace_error-marker {\\n background-color: rgba(255, 0, 0,0.2);\\n position: absolute;\\n z-index: 9;\\n}\\n\\n.ace_highlight-marker {\\n background-color: rgba(255, 255, 0,0.2);\\n position: absolute;\\n z-index: 8;\\n}\\n\\n.ace_mobile-menu {\\n position: absolute;\\n line-height: 1.5;\\n border-radius: 4px;\\n -ms-user-select: none;\\n -moz-user-select: none;\\n -webkit-user-select: none;\\n user-select: none;\\n background: white;\\n box-shadow: 1px 3px 2px grey;\\n border: 1px solid #dcdcdc;\\n color: black;\\n}\\n.ace_dark > .ace_mobile-menu {\\n background: #333;\\n color: #ccc;\\n box-shadow: 1px 3px 2px grey;\\n border: 1px solid #444;\\n\\n}\\n.ace_mobile-button {\\n padding: 2px;\\n cursor: pointer;\\n overflow: hidden;\\n}\\n.ace_mobile-button:hover {\\n background-color: #eee;\\n opacity:1;\\n}\\n.ace_mobile-button:active {\\n background-color: #ddd;\\n}\\n\\n.ace_placeholder {\\n font-family: arial;\\n transform: scale(0.9);\\n transform-origin: left;\\n white-space: pre;\\n opacity: 0.7;\\n margin: 0 10px;\\n}\\n\\n.ace_ghost_text {\\n opacity: 0.5;\\n font-style: italic;\\n white-space: pre;\\n}\\n\\n.ace_screenreader-only {\\n position:absolute;\\n left:-10000px;\\n top:auto;\\n width:1px;\\n height:1px;\\n overflow:hidden;\\n}\";\n\n});\n\nace.define(\"ace/layer/decorators\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Decorator = /** @class */ (function () {\n function Decorator(parent, renderer) {\n this.canvas = dom.createElement(\"canvas\");\n this.renderer = renderer;\n this.pixelRatio = 1;\n this.maxHeight = renderer.layerConfig.maxHeight;\n this.lineHeight = renderer.layerConfig.lineHeight;\n this.canvasHeight = parent.parent.scrollHeight;\n this.heightRatio = this.canvasHeight / this.maxHeight;\n this.canvasWidth = parent.width;\n this.minDecorationHeight = (2 * this.pixelRatio) | 0;\n this.halfMinDecorationHeight = (this.minDecorationHeight / 2) | 0;\n this.canvas.width = this.canvasWidth;\n this.canvas.height = this.canvasHeight;\n this.canvas.style.top = 0 + \"px\";\n this.canvas.style.right = 0 + \"px\";\n this.canvas.style.zIndex = 7 + \"px\";\n this.canvas.style.position = \"absolute\";\n this.colors = {};\n this.colors.dark = {\n \"error\": \"rgba(255, 18, 18, 1)\",\n \"warning\": \"rgba(18, 136, 18, 1)\",\n \"info\": \"rgba(18, 18, 136, 1)\"\n };\n this.colors.light = {\n \"error\": \"rgb(255,51,51)\",\n \"warning\": \"rgb(32,133,72)\",\n \"info\": \"rgb(35,68,138)\"\n };\n parent.element.appendChild(this.canvas);\n }\n Decorator.prototype.$updateDecorators = function (config) {\n var colors = (this.renderer.theme.isDark === true) ? this.colors.dark : this.colors.light;\n if (config) {\n this.maxHeight = config.maxHeight;\n this.lineHeight = config.lineHeight;\n this.canvasHeight = config.height;\n var allLineHeight = (config.lastRow + 1) * this.lineHeight;\n if (allLineHeight < this.canvasHeight) {\n this.heightRatio = 1;\n }\n else {\n this.heightRatio = this.canvasHeight / this.maxHeight;\n }\n }\n var ctx = this.canvas.getContext(\"2d\");\n function compare(a, b) {\n if (a.priority < b.priority)\n return -1;\n if (a.priority > b.priority)\n return 1;\n return 0;\n }\n var annotations = this.renderer.session.$annotations;\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n if (annotations) {\n var priorities = {\n \"info\": 1,\n \"warning\": 2,\n \"error\": 3\n };\n annotations.forEach(function (item) {\n item.priority = priorities[item.type] || null;\n });\n annotations = annotations.sort(compare);\n var foldData = this.renderer.session.$foldData;\n for (var i = 0; i < annotations.length; i++) {\n var row = annotations[i].row;\n var compensateFold = this.compensateFoldRows(row, foldData);\n var currentY = Math.round((row - compensateFold) * this.lineHeight * this.heightRatio);\n var y1 = Math.round(((row - compensateFold) * this.lineHeight * this.heightRatio));\n var y2 = Math.round((((row - compensateFold) * this.lineHeight + this.lineHeight) * this.heightRatio));\n var height = y2 - y1;\n if (height < this.minDecorationHeight) {\n var yCenter = ((y1 + y2) / 2) | 0;\n if (yCenter < this.halfMinDecorationHeight) {\n yCenter = this.halfMinDecorationHeight;\n }\n else if (yCenter + this.halfMinDecorationHeight > this.canvasHeight) {\n yCenter = this.canvasHeight - this.halfMinDecorationHeight;\n }\n y1 = Math.round(yCenter - this.halfMinDecorationHeight);\n y2 = Math.round(yCenter + this.halfMinDecorationHeight);\n }\n ctx.fillStyle = colors[annotations[i].type] || null;\n ctx.fillRect(0, currentY, this.canvasWidth, y2 - y1);\n }\n }\n var cursor = this.renderer.session.selection.getCursor();\n if (cursor) {\n var compensateFold = this.compensateFoldRows(cursor.row, foldData);\n var currentY = Math.round((cursor.row - compensateFold) * this.lineHeight * this.heightRatio);\n ctx.fillStyle = \"rgba(0, 0, 0, 0.5)\";\n ctx.fillRect(0, currentY, this.canvasWidth, 2);\n }\n };\n Decorator.prototype.compensateFoldRows = function (row, foldData) {\n var compensateFold = 0;\n if (foldData && foldData.length > 0) {\n for (var j = 0; j < foldData.length; j++) {\n if (row > foldData[j].start.row && row < foldData[j].end.row) {\n compensateFold += row - foldData[j].start.row;\n }\n else if (row >= foldData[j].end.row) {\n compensateFold += foldData[j].end.row - foldData[j].start.row;\n }\n }\n }\n return compensateFold;\n };\n return Decorator;\n}());\noop.implement(Decorator.prototype, EventEmitter);\nexports.Decorator = Decorator;\n\n});\n\nace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/config\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/scrollbar_custom\",\"ace/scrollbar_custom\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\",\"ace/css/editor-css\",\"ace/layer/decorators\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar config = require(\"./config\");\nvar GutterLayer = require(\"./layer/gutter\").Gutter;\nvar MarkerLayer = require(\"./layer/marker\").Marker;\nvar TextLayer = require(\"./layer/text\").Text;\nvar CursorLayer = require(\"./layer/cursor\").Cursor;\nvar HScrollBar = require(\"./scrollbar\").HScrollBar;\nvar VScrollBar = require(\"./scrollbar\").VScrollBar;\nvar HScrollBarCustom = require(\"./scrollbar_custom\").HScrollBar;\nvar VScrollBarCustom = require(\"./scrollbar_custom\").VScrollBar;\nvar RenderLoop = require(\"./renderloop\").RenderLoop;\nvar FontMetrics = require(\"./layer/font_metrics\").FontMetrics;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar editorCss = require(\"./css/editor-css\");\nvar Decorator = require(\"./layer/decorators\").Decorator;\nvar useragent = require(\"./lib/useragent\");\ndom.importCssString(editorCss, \"ace_editor.css\", false);\nvar VirtualRenderer = /** @class */ (function () {\n function VirtualRenderer(container, theme) {\n var _self = this;\n this.container = container || dom.createElement(\"div\");\n dom.addCssClass(this.container, \"ace_editor\");\n if (dom.HI_DPI)\n dom.addCssClass(this.container, \"ace_hidpi\");\n this.setTheme(theme);\n if (config.get(\"useStrictCSP\") == null)\n config.set(\"useStrictCSP\", false);\n this.$gutter = dom.createElement(\"div\");\n this.$gutter.className = \"ace_gutter\";\n this.container.appendChild(this.$gutter);\n this.$gutter.setAttribute(\"aria-hidden\", \"true\");\n this.scroller = dom.createElement(\"div\");\n this.scroller.className = \"ace_scroller\";\n this.container.appendChild(this.scroller);\n this.content = dom.createElement(\"div\");\n this.content.className = \"ace_content\";\n this.scroller.appendChild(this.content);\n this.$gutterLayer = new GutterLayer(this.$gutter);\n this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\n this.$markerBack = new MarkerLayer(this.content);\n var textLayer = this.$textLayer = new TextLayer(this.content);\n this.canvas = textLayer.element;\n this.$markerFront = new MarkerLayer(this.content);\n this.$cursorLayer = new CursorLayer(this.content);\n this.$horizScroll = false;\n this.$vScroll = false;\n this.scrollBar =\n this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.on(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.on(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n this.scrollTop = 0;\n this.scrollLeft = 0;\n this.cursorPos = {\n row: 0,\n column: 0\n };\n this.$fontMetrics = new FontMetrics(this.container);\n this.$textLayer.$setFontMetrics(this.$fontMetrics);\n this.$textLayer.on(\"changeCharacterSize\", function (e) {\n _self.updateCharacterSize();\n _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);\n _self._signal(\"changeCharacterSize\", e);\n });\n this.$size = {\n width: 0,\n height: 0,\n scrollerHeight: 0,\n scrollerWidth: 0,\n $dirty: true\n };\n this.layerConfig = {\n width: 1,\n padding: 0,\n firstRow: 0,\n firstRowScreen: 0,\n lastRow: 0,\n lineHeight: 0,\n characterWidth: 0,\n minHeight: 1,\n maxHeight: 1,\n offset: 0,\n height: 1,\n gutterOffset: 1\n };\n this.scrollMargin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n this.margin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n this.$keepTextAreaAtCursor = !useragent.isIOS;\n this.$loop = new RenderLoop(this.$renderChanges.bind(this), this.container.ownerDocument.defaultView);\n this.$loop.schedule(this.CHANGE_FULL);\n this.updateCharacterSize();\n this.setPadding(4);\n this.$addResizeObserver();\n config.resetOptions(this);\n config._signal(\"renderer\", this);\n }\n VirtualRenderer.prototype.updateCharacterSize = function () {\n if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\n this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\n this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\n }\n this.layerConfig.characterWidth =\n this.characterWidth = this.$textLayer.getCharacterWidth();\n this.layerConfig.lineHeight =\n this.lineHeight = this.$textLayer.getLineHeight();\n this.$updatePrintMargin();\n dom.setStyle(this.scroller.style, \"line-height\", this.lineHeight + \"px\");\n };\n VirtualRenderer.prototype.setSession = function (session) {\n if (this.session)\n this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\n this.session = session;\n if (session && this.scrollMargin.top && session.getScrollTop() <= 0)\n session.setScrollTop(-this.scrollMargin.top);\n this.$cursorLayer.setSession(session);\n this.$markerBack.setSession(session);\n this.$markerFront.setSession(session);\n this.$gutterLayer.setSession(session);\n this.$textLayer.setSession(session);\n if (!session)\n return;\n this.$loop.schedule(this.CHANGE_FULL);\n this.session.$setFontMetrics(this.$fontMetrics);\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\n this.onChangeNewLineMode();\n this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\n };\n VirtualRenderer.prototype.updateLines = function (firstRow, lastRow, force) {\n if (lastRow === undefined)\n lastRow = Infinity;\n if (!this.$changedLines) {\n this.$changedLines = {\n firstRow: firstRow,\n lastRow: lastRow\n };\n }\n else {\n if (this.$changedLines.firstRow > firstRow)\n this.$changedLines.firstRow = firstRow;\n if (this.$changedLines.lastRow < lastRow)\n this.$changedLines.lastRow = lastRow;\n }\n if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\n if (force)\n this.$changedLines.lastRow = this.layerConfig.lastRow;\n else\n return;\n }\n if (this.$changedLines.firstRow > this.layerConfig.lastRow)\n return;\n this.$loop.schedule(this.CHANGE_LINES);\n };\n VirtualRenderer.prototype.onChangeNewLineMode = function () {\n this.$loop.schedule(this.CHANGE_TEXT);\n this.$textLayer.$updateEolChar();\n this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR);\n };\n VirtualRenderer.prototype.onChangeTabSize = function () {\n this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\n this.$textLayer.onChangeTabSize();\n };\n VirtualRenderer.prototype.updateText = function () {\n this.$loop.schedule(this.CHANGE_TEXT);\n };\n VirtualRenderer.prototype.updateFull = function (force) {\n if (force)\n this.$renderChanges(this.CHANGE_FULL, true);\n else\n this.$loop.schedule(this.CHANGE_FULL);\n };\n VirtualRenderer.prototype.updateFontSize = function () {\n this.$textLayer.checkForSizeChanges();\n };\n VirtualRenderer.prototype.$updateSizeAsync = function () {\n if (this.$loop.pending)\n this.$size.$dirty = true;\n else\n this.onResize();\n };\n VirtualRenderer.prototype.onResize = function (force, gutterWidth, width, height) {\n if (this.resizing > 2)\n return;\n else if (this.resizing > 0)\n this.resizing++;\n else\n this.resizing = force ? 1 : 0;\n var el = this.container;\n if (!height)\n height = el.clientHeight || el.scrollHeight;\n if (!width)\n width = el.clientWidth || el.scrollWidth;\n var changes = this.$updateCachedSize(force, gutterWidth, width, height);\n if (this.$resizeTimer)\n this.$resizeTimer.cancel();\n if (!this.$size.scrollerHeight || (!width && !height))\n return this.resizing = 0;\n if (force)\n this.$gutterLayer.$padding = null;\n if (force)\n this.$renderChanges(changes | this.$changes, true);\n else\n this.$loop.schedule(changes | this.$changes);\n if (this.resizing)\n this.resizing = 0;\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n if (this.$customScrollbar) {\n this.$updateCustomScrollbar(true);\n }\n };\n VirtualRenderer.prototype.$updateCachedSize = function (force, gutterWidth, width, height) {\n height -= (this.$extraHeight || 0);\n var changes = 0;\n var size = this.$size;\n var oldSize = {\n width: size.width,\n height: size.height,\n scrollerHeight: size.scrollerHeight,\n scrollerWidth: size.scrollerWidth\n };\n if (height && (force || size.height != height)) {\n size.height = height;\n changes |= this.CHANGE_SIZE;\n size.scrollerHeight = size.height;\n if (this.$horizScroll)\n size.scrollerHeight -= this.scrollBarH.getHeight();\n this.scrollBarV.setHeight(size.scrollerHeight);\n this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\n changes = changes | this.CHANGE_SCROLL;\n }\n if (width && (force || size.width != width)) {\n changes |= this.CHANGE_SIZE;\n size.width = width;\n if (gutterWidth == null)\n gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n this.gutterWidth = gutterWidth;\n dom.setStyle(this.scrollBarH.element.style, \"left\", gutterWidth + \"px\");\n dom.setStyle(this.scroller.style, \"left\", gutterWidth + this.margin.left + \"px\");\n size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth() - this.margin.h);\n dom.setStyle(this.$gutter.style, \"left\", this.margin.left + \"px\");\n var right = this.scrollBarV.getWidth() + \"px\";\n dom.setStyle(this.scrollBarH.element.style, \"right\", right);\n dom.setStyle(this.scroller.style, \"right\", right);\n dom.setStyle(this.scroller.style, \"bottom\", this.scrollBarH.getHeight());\n this.scrollBarH.setWidth(size.scrollerWidth);\n if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) {\n changes |= this.CHANGE_FULL;\n }\n }\n size.$dirty = !width || !height;\n if (changes)\n this._signal(\"resize\", oldSize);\n return changes;\n };\n VirtualRenderer.prototype.onGutterResize = function (width) {\n var gutterWidth = this.$showGutter ? width : 0;\n if (gutterWidth != this.gutterWidth)\n this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\n if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\n this.$loop.schedule(this.CHANGE_FULL);\n }\n else if (this.$size.$dirty) {\n this.$loop.schedule(this.CHANGE_FULL);\n }\n else {\n this.$computeLayerConfig();\n }\n };\n VirtualRenderer.prototype.adjustWrapLimit = function () {\n var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n var limit = Math.floor(availableWidth / this.characterWidth);\n return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);\n };\n VirtualRenderer.prototype.setAnimatedScroll = function (shouldAnimate) {\n this.setOption(\"animatedScroll\", shouldAnimate);\n };\n VirtualRenderer.prototype.getAnimatedScroll = function () {\n return this.$animatedScroll;\n };\n VirtualRenderer.prototype.setShowInvisibles = function (showInvisibles) {\n this.setOption(\"showInvisibles\", showInvisibles);\n this.session.$bidiHandler.setShowInvisibles(showInvisibles);\n };\n VirtualRenderer.prototype.getShowInvisibles = function () {\n return this.getOption(\"showInvisibles\");\n };\n VirtualRenderer.prototype.getDisplayIndentGuides = function () {\n return this.getOption(\"displayIndentGuides\");\n };\n VirtualRenderer.prototype.setDisplayIndentGuides = function (display) {\n this.setOption(\"displayIndentGuides\", display);\n };\n VirtualRenderer.prototype.getHighlightIndentGuides = function () {\n return this.getOption(\"highlightIndentGuides\");\n };\n VirtualRenderer.prototype.setHighlightIndentGuides = function (highlight) {\n this.setOption(\"highlightIndentGuides\", highlight);\n };\n VirtualRenderer.prototype.setShowPrintMargin = function (showPrintMargin) {\n this.setOption(\"showPrintMargin\", showPrintMargin);\n };\n VirtualRenderer.prototype.getShowPrintMargin = function () {\n return this.getOption(\"showPrintMargin\");\n };\n VirtualRenderer.prototype.setPrintMarginColumn = function (printMarginColumn) {\n this.setOption(\"printMarginColumn\", printMarginColumn);\n };\n VirtualRenderer.prototype.getPrintMarginColumn = function () {\n return this.getOption(\"printMarginColumn\");\n };\n VirtualRenderer.prototype.getShowGutter = function () {\n return this.getOption(\"showGutter\");\n };\n VirtualRenderer.prototype.setShowGutter = function (show) {\n return this.setOption(\"showGutter\", show);\n };\n VirtualRenderer.prototype.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n };\n VirtualRenderer.prototype.setFadeFoldWidgets = function (show) {\n this.setOption(\"fadeFoldWidgets\", show);\n };\n VirtualRenderer.prototype.setHighlightGutterLine = function (shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n VirtualRenderer.prototype.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n };\n VirtualRenderer.prototype.$updatePrintMargin = function () {\n if (!this.$showPrintMargin && !this.$printMarginEl)\n return;\n if (!this.$printMarginEl) {\n var containerEl = dom.createElement(\"div\");\n containerEl.className = \"ace_layer ace_print-margin-layer\";\n this.$printMarginEl = dom.createElement(\"div\");\n this.$printMarginEl.className = \"ace_print-margin\";\n containerEl.appendChild(this.$printMarginEl);\n this.content.insertBefore(containerEl, this.content.firstChild);\n }\n var style = this.$printMarginEl.style;\n style.left = Math.round(this.characterWidth * this.$printMarginColumn + this.$padding) + \"px\";\n style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\n if (this.session && this.session.$wrap == -1)\n this.adjustWrapLimit();\n };\n VirtualRenderer.prototype.getContainerElement = function () {\n return this.container;\n };\n VirtualRenderer.prototype.getMouseEventTarget = function () {\n return this.scroller;\n };\n VirtualRenderer.prototype.getTextAreaContainer = function () {\n return this.container;\n };\n VirtualRenderer.prototype.$moveTextAreaToCursor = function () {\n if (this.$isMousePressed)\n return;\n var style = this.textarea.style;\n var composition = this.$composition;\n if (!this.$keepTextAreaAtCursor && !composition) {\n dom.translate(this.textarea, -100, 0);\n return;\n }\n var pixelPos = this.$cursorLayer.$pixelPos;\n if (!pixelPos)\n return;\n if (composition && composition.markerRange)\n pixelPos = this.$cursorLayer.getPixelPosition(composition.markerRange.start, true);\n var config = this.layerConfig;\n var posTop = pixelPos.top;\n var posLeft = pixelPos.left;\n posTop -= config.offset;\n var h = composition && composition.useTextareaForIME || useragent.isMobile ? this.lineHeight : 1;\n if (posTop < 0 || posTop > config.height - h) {\n dom.translate(this.textarea, 0, 0);\n return;\n }\n var w = 1;\n var maxTop = this.$size.height - h;\n if (!composition) {\n posTop += this.lineHeight;\n }\n else {\n if (composition.useTextareaForIME) {\n var val = this.textarea.value;\n w = this.characterWidth * (this.session.$getStringScreenWidth(val)[0]);\n }\n else {\n posTop += this.lineHeight + 2;\n }\n }\n posLeft -= this.scrollLeft;\n if (posLeft > this.$size.scrollerWidth - w)\n posLeft = this.$size.scrollerWidth - w;\n posLeft += this.gutterWidth + this.margin.left;\n dom.setStyle(style, \"height\", h + \"px\");\n dom.setStyle(style, \"width\", w + \"px\");\n dom.translate(this.textarea, Math.min(posLeft, this.$size.scrollerWidth - w), Math.min(posTop, maxTop));\n };\n VirtualRenderer.prototype.getFirstVisibleRow = function () {\n return this.layerConfig.firstRow;\n };\n VirtualRenderer.prototype.getFirstFullyVisibleRow = function () {\n return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\n };\n VirtualRenderer.prototype.getLastFullyVisibleRow = function () {\n var config = this.layerConfig;\n var lastRow = config.lastRow;\n var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight;\n if (top - this.session.getScrollTop() > config.height - config.lineHeight)\n return lastRow - 1;\n return lastRow;\n };\n VirtualRenderer.prototype.getLastVisibleRow = function () {\n return this.layerConfig.lastRow;\n };\n VirtualRenderer.prototype.setPadding = function (padding) {\n this.$padding = padding;\n this.$textLayer.setPadding(padding);\n this.$cursorLayer.setPadding(padding);\n this.$markerFront.setPadding(padding);\n this.$markerBack.setPadding(padding);\n this.$loop.schedule(this.CHANGE_FULL);\n this.$updatePrintMargin();\n };\n VirtualRenderer.prototype.setScrollMargin = function (top, bottom, left, right) {\n var sm = this.scrollMargin;\n sm.top = top | 0;\n sm.bottom = bottom | 0;\n sm.right = right | 0;\n sm.left = left | 0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n if (sm.top && this.scrollTop <= 0 && this.session)\n this.session.setScrollTop(-sm.top);\n this.updateFull();\n };\n VirtualRenderer.prototype.setMargin = function (top, bottom, left, right) {\n var sm = this.margin;\n sm.top = top | 0;\n sm.bottom = bottom | 0;\n sm.right = right | 0;\n sm.left = left | 0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n this.$updateCachedSize(true, this.gutterWidth, this.$size.width, this.$size.height);\n this.updateFull();\n };\n VirtualRenderer.prototype.getHScrollBarAlwaysVisible = function () {\n return this.$hScrollBarAlwaysVisible;\n };\n VirtualRenderer.prototype.setHScrollBarAlwaysVisible = function (alwaysVisible) {\n this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\n };\n VirtualRenderer.prototype.getVScrollBarAlwaysVisible = function () {\n return this.$vScrollBarAlwaysVisible;\n };\n VirtualRenderer.prototype.setVScrollBarAlwaysVisible = function (alwaysVisible) {\n this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\n };\n VirtualRenderer.prototype.$updateScrollBarV = function () {\n var scrollHeight = this.layerConfig.maxHeight;\n var scrollerHeight = this.$size.scrollerHeight;\n if (!this.$maxLines && this.$scrollPastEnd) {\n scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\n if (this.scrollTop > scrollHeight - scrollerHeight) {\n scrollHeight = this.scrollTop + scrollerHeight;\n this.scrollBarV.scrollTop = null;\n }\n }\n this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\n this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\n };\n VirtualRenderer.prototype.$updateScrollBarH = function () {\n this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\n this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\n };\n VirtualRenderer.prototype.freeze = function () {\n this.$frozen = true;\n };\n VirtualRenderer.prototype.unfreeze = function () {\n this.$frozen = false;\n };\n VirtualRenderer.prototype.$renderChanges = function (changes, force) {\n if (this.$changes) {\n changes |= this.$changes;\n this.$changes = 0;\n }\n if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) {\n this.$changes |= changes;\n return;\n }\n if (this.$size.$dirty) {\n this.$changes |= changes;\n return this.onResize(true);\n }\n if (!this.lineHeight) {\n this.$textLayer.checkForSizeChanges();\n }\n this._signal(\"beforeRender\", changes);\n if (this.session && this.session.$bidiHandler)\n this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);\n var config = this.layerConfig;\n if (changes & this.CHANGE_FULL ||\n changes & this.CHANGE_SIZE ||\n changes & this.CHANGE_TEXT ||\n changes & this.CHANGE_LINES ||\n changes & this.CHANGE_SCROLL ||\n changes & this.CHANGE_H_SCROLL) {\n changes |= this.$computeLayerConfig() | this.$loop.clear();\n if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {\n var st = this.scrollTop + (config.firstRow - Math.max(this.layerConfig.firstRow, 0)) * this.lineHeight;\n if (st > 0) {\n this.scrollTop = st;\n changes = changes | this.CHANGE_SCROLL;\n changes |= this.$computeLayerConfig() | this.$loop.clear();\n }\n }\n config = this.layerConfig;\n this.$updateScrollBarV();\n if (changes & this.CHANGE_H_SCROLL)\n this.$updateScrollBarH();\n dom.translate(this.content, -this.scrollLeft, -config.offset);\n var width = config.width + 2 * this.$padding + \"px\";\n var height = config.minHeight + \"px\";\n dom.setStyle(this.content.style, \"width\", width);\n dom.setStyle(this.content.style, \"height\", height);\n }\n if (changes & this.CHANGE_H_SCROLL) {\n dom.translate(this.content, -this.scrollLeft, -config.offset);\n this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller \" : \"ace_scroller ace_scroll-left \";\n if (this.enableKeyboardAccessibility)\n this.scroller.className += this.keyboardFocusClassName;\n }\n if (changes & this.CHANGE_FULL) {\n this.$changedLines = null;\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\", changes);\n return;\n }\n if (changes & this.CHANGE_SCROLL) {\n this.$changedLines = null;\n if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)\n this.$textLayer.update(config);\n else\n this.$textLayer.scrollLines(config);\n if (this.$showGutter) {\n if (changes & this.CHANGE_GUTTER || changes & this.CHANGE_LINES)\n this.$gutterLayer.update(config);\n else\n this.$gutterLayer.scrollLines(config);\n }\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\", changes);\n return;\n }\n if (changes & this.CHANGE_TEXT) {\n this.$changedLines = null;\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n else if (changes & this.CHANGE_LINES) {\n if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n else if (changes & this.CHANGE_CURSOR) {\n if (this.$highlightGutterLine)\n this.$gutterLayer.updateLineHighlight(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n if (changes & this.CHANGE_CURSOR) {\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n }\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\n this.$markerFront.update(config);\n }\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\n this.$markerBack.update(config);\n }\n this._signal(\"afterRender\", changes);\n };\n VirtualRenderer.prototype.$autosize = function () {\n var height = this.session.getScreenLength() * this.lineHeight;\n var maxHeight = this.$maxLines * this.lineHeight;\n var desiredHeight = Math.min(maxHeight, Math.max((this.$minLines || 1) * this.lineHeight, height)) + this.scrollMargin.v + (this.$extraHeight || 0);\n if (this.$horizScroll)\n desiredHeight += this.scrollBarH.getHeight();\n if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight)\n desiredHeight = this.$maxPixelHeight;\n var hideScrollbars = desiredHeight <= 2 * this.lineHeight;\n var vScroll = !hideScrollbars && height > maxHeight;\n if (desiredHeight != this.desiredHeight ||\n this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\n if (vScroll != this.$vScroll) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n var w = this.container.clientWidth;\n this.container.style.height = desiredHeight + \"px\";\n this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\n this.desiredHeight = desiredHeight;\n this._signal(\"autosize\");\n }\n };\n VirtualRenderer.prototype.$computeLayerConfig = function () {\n var session = this.session;\n var size = this.$size;\n var hideScrollbars = size.height <= 2 * this.lineHeight;\n var screenLines = this.session.getScreenLength();\n var maxHeight = screenLines * this.lineHeight;\n var longestLine = this.$getLongestLine();\n var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\n size.scrollerWidth - longestLine - 2 * this.$padding < 0);\n var hScrollChanged = this.$horizScroll !== horizScroll;\n if (hScrollChanged) {\n this.$horizScroll = horizScroll;\n this.scrollBarH.setVisible(horizScroll);\n }\n var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\n if (this.$maxLines && this.lineHeight > 1)\n this.$autosize();\n var minHeight = size.scrollerHeight + this.lineHeight;\n var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd\n ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\n : 0;\n maxHeight += scrollPastEnd;\n var sm = this.scrollMargin;\n this.session.setScrollTop(Math.max(-sm.top, Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\n this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\n var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||\n size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\n var vScrollChanged = vScrollBefore !== vScroll;\n if (vScrollChanged) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n var offset = this.scrollTop % this.lineHeight;\n var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\n var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\n var lastRow = firstRow + lineCount;\n var firstRowScreen, firstRowHeight;\n var lineHeight = this.lineHeight;\n firstRow = session.screenToDocumentRow(firstRow, 0);\n var foldLine = session.getFoldLine(firstRow);\n if (foldLine) {\n firstRow = foldLine.start.row;\n }\n firstRowScreen = session.documentToScreenRow(firstRow, 0);\n firstRowHeight = session.getRowLength(firstRow) * lineHeight;\n lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\n minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +\n firstRowHeight;\n offset = this.scrollTop - firstRowScreen * lineHeight;\n var changes = 0;\n if (this.layerConfig.width != longestLine || hScrollChanged)\n changes = this.CHANGE_H_SCROLL;\n if (hScrollChanged || vScrollChanged) {\n changes |= this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\n this._signal(\"scrollbarVisibilityChanged\");\n if (vScrollChanged)\n longestLine = this.$getLongestLine();\n }\n this.layerConfig = {\n width: longestLine,\n padding: this.$padding,\n firstRow: firstRow,\n firstRowScreen: firstRowScreen,\n lastRow: lastRow,\n lineHeight: lineHeight,\n characterWidth: this.characterWidth,\n minHeight: minHeight,\n maxHeight: maxHeight,\n offset: offset,\n gutterOffset: lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0,\n height: this.$size.scrollerHeight\n };\n if (this.session.$bidiHandler)\n this.session.$bidiHandler.setContentWidth(longestLine - this.$padding);\n return changes;\n };\n VirtualRenderer.prototype.$updateLines = function () {\n if (!this.$changedLines)\n return;\n var firstRow = this.$changedLines.firstRow;\n var lastRow = this.$changedLines.lastRow;\n this.$changedLines = null;\n var layerConfig = this.layerConfig;\n if (firstRow > layerConfig.lastRow + 1) {\n return;\n }\n if (lastRow < layerConfig.firstRow) {\n return;\n }\n if (lastRow === Infinity) {\n if (this.$showGutter)\n this.$gutterLayer.update(layerConfig);\n this.$textLayer.update(layerConfig);\n return;\n }\n this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\n return true;\n };\n VirtualRenderer.prototype.$getLongestLine = function () {\n var charCount = this.session.getScreenWidth();\n if (this.showInvisibles && !this.session.$useWrapMode)\n charCount += 1;\n if (this.$textLayer && charCount > this.$textLayer.MAX_LINE_LENGTH)\n charCount = this.$textLayer.MAX_LINE_LENGTH + 30;\n return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\n };\n VirtualRenderer.prototype.updateFrontMarkers = function () {\n this.$markerFront.setMarkers(this.session.getMarkers(true));\n this.$loop.schedule(this.CHANGE_MARKER_FRONT);\n };\n VirtualRenderer.prototype.updateBackMarkers = function () {\n this.$markerBack.setMarkers(this.session.getMarkers());\n this.$loop.schedule(this.CHANGE_MARKER_BACK);\n };\n VirtualRenderer.prototype.addGutterDecoration = function (row, className) {\n this.$gutterLayer.addGutterDecoration(row, className);\n };\n VirtualRenderer.prototype.removeGutterDecoration = function (row, className) {\n this.$gutterLayer.removeGutterDecoration(row, className);\n };\n VirtualRenderer.prototype.updateBreakpoints = function (rows) {\n this._rows = rows;\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n VirtualRenderer.prototype.setAnnotations = function (annotations) {\n this.$gutterLayer.setAnnotations(annotations);\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n VirtualRenderer.prototype.updateCursor = function () {\n this.$loop.schedule(this.CHANGE_CURSOR);\n };\n VirtualRenderer.prototype.hideCursor = function () {\n this.$cursorLayer.hideCursor();\n };\n VirtualRenderer.prototype.showCursor = function () {\n this.$cursorLayer.showCursor();\n };\n VirtualRenderer.prototype.scrollSelectionIntoView = function (anchor, lead, offset) {\n this.scrollCursorIntoView(anchor, offset);\n this.scrollCursorIntoView(lead, offset);\n };\n VirtualRenderer.prototype.scrollCursorIntoView = function (cursor, offset, $viewMargin) {\n if (this.$size.scrollerHeight === 0)\n return;\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var newLeft = pos.left;\n var newTop = pos.top;\n var topMargin = $viewMargin && $viewMargin.top || 0;\n var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\n if (this.$scrollAnimation) {\n this.$stopAnimation = true;\n }\n var currentTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\n if (currentTop + topMargin > newTop) {\n if (offset && currentTop + topMargin > newTop + this.lineHeight)\n newTop -= offset * this.$size.scrollerHeight;\n if (newTop === 0)\n newTop = -this.scrollMargin.top;\n this.session.setScrollTop(newTop);\n }\n else if (currentTop + this.$size.scrollerHeight - bottomMargin < newTop + this.lineHeight) {\n if (offset && currentTop + this.$size.scrollerHeight - bottomMargin < newTop - this.lineHeight)\n newTop += offset * this.$size.scrollerHeight;\n this.session.setScrollTop(newTop + this.lineHeight + bottomMargin - this.$size.scrollerHeight);\n }\n var currentLeft = this.scrollLeft;\n var twoCharsWidth = 2 * this.layerConfig.characterWidth;\n if (newLeft - twoCharsWidth < currentLeft) {\n newLeft -= twoCharsWidth;\n if (newLeft < this.$padding + twoCharsWidth) {\n newLeft = -this.scrollMargin.left;\n }\n this.session.setScrollLeft(newLeft);\n }\n else {\n newLeft += twoCharsWidth;\n if (currentLeft + this.$size.scrollerWidth < newLeft + this.characterWidth) {\n this.session.setScrollLeft(Math.round(newLeft + this.characterWidth - this.$size.scrollerWidth));\n }\n else if (currentLeft <= this.$padding && newLeft - currentLeft < this.characterWidth) {\n this.session.setScrollLeft(0);\n }\n }\n };\n VirtualRenderer.prototype.getScrollTop = function () {\n return this.session.getScrollTop();\n };\n VirtualRenderer.prototype.getScrollLeft = function () {\n return this.session.getScrollLeft();\n };\n VirtualRenderer.prototype.getScrollTopRow = function () {\n return this.scrollTop / this.lineHeight;\n };\n VirtualRenderer.prototype.getScrollBottomRow = function () {\n return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\n };\n VirtualRenderer.prototype.scrollToRow = function (row) {\n this.session.setScrollTop(row * this.lineHeight);\n };\n VirtualRenderer.prototype.alignCursor = function (cursor, alignment) {\n if (typeof cursor == \"number\")\n cursor = { row: cursor, column: 0 };\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var h = this.$size.scrollerHeight - this.lineHeight;\n var offset = pos.top - h * (alignment || 0);\n this.session.setScrollTop(offset);\n return offset;\n };\n VirtualRenderer.prototype.$calcSteps = function (fromValue, toValue) {\n var i = 0;\n var l = this.STEPS;\n var steps = [];\n var func = function (t, x_min, dx) {\n return dx * (Math.pow(t - 1, 3) + 1) + x_min;\n };\n for (i = 0; i < l; ++i)\n steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\n return steps;\n };\n VirtualRenderer.prototype.scrollToLine = function (line, center, animate, callback) {\n var pos = this.$cursorLayer.getPixelPosition({ row: line, column: 0 });\n var offset = pos.top;\n if (center)\n offset -= this.$size.scrollerHeight / 2;\n var initialScroll = this.scrollTop;\n this.session.setScrollTop(offset);\n if (animate !== false)\n this.animateScrolling(initialScroll, callback);\n };\n VirtualRenderer.prototype.animateScrolling = function (fromValue, callback) {\n var toValue = this.scrollTop;\n if (!this.$animatedScroll)\n return;\n var _self = this;\n if (fromValue == toValue)\n return;\n if (this.$scrollAnimation) {\n var oldSteps = this.$scrollAnimation.steps;\n if (oldSteps.length) {\n fromValue = oldSteps[0];\n if (fromValue == toValue)\n return;\n }\n }\n var steps = _self.$calcSteps(fromValue, toValue);\n this.$scrollAnimation = { from: fromValue, to: toValue, steps: steps };\n clearInterval(this.$timer);\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n function endAnimation() {\n _self.$timer = clearInterval(_self.$timer);\n _self.$scrollAnimation = null;\n _self.$stopAnimation = false;\n callback && callback();\n }\n this.$timer = setInterval(function () {\n if (_self.$stopAnimation) {\n endAnimation();\n return;\n }\n if (!_self.session)\n return clearInterval(_self.$timer);\n if (steps.length) {\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n }\n else if (toValue != null) {\n _self.session.$scrollTop = -1;\n _self.session.setScrollTop(toValue);\n toValue = null;\n }\n else {\n endAnimation();\n }\n }, 10);\n };\n VirtualRenderer.prototype.scrollToY = function (scrollTop) {\n if (this.scrollTop !== scrollTop) {\n this.$loop.schedule(this.CHANGE_SCROLL);\n this.scrollTop = scrollTop;\n }\n };\n VirtualRenderer.prototype.scrollToX = function (scrollLeft) {\n if (this.scrollLeft !== scrollLeft)\n this.scrollLeft = scrollLeft;\n this.$loop.schedule(this.CHANGE_H_SCROLL);\n };\n VirtualRenderer.prototype.scrollTo = function (x, y) {\n this.session.setScrollTop(y);\n this.session.setScrollLeft(x);\n };\n VirtualRenderer.prototype.scrollBy = function (deltaX, deltaY) {\n deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\n deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\n };\n VirtualRenderer.prototype.isScrollableBy = function (deltaX, deltaY) {\n if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top)\n return true;\n if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight\n - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom)\n return true;\n if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)\n return true;\n if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth\n - this.layerConfig.width < -1 + this.scrollMargin.right)\n return true;\n };\n VirtualRenderer.prototype.pixelToScreenCoordinates = function (x, y) {\n var canvasPos;\n if (this.$hasCssTransforms) {\n canvasPos = { top: 0, left: 0 };\n var p = this.$fontMetrics.transformCoordinates([x, y]);\n x = p[1] - this.gutterWidth - this.margin.left;\n y = p[0];\n }\n else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n return { row: row, column: col, side: offset - col > 0 ? 1 : -1, offsetX: offsetX };\n };\n VirtualRenderer.prototype.screenToTextCoordinates = function (x, y) {\n var canvasPos;\n if (this.$hasCssTransforms) {\n canvasPos = { top: 0, left: 0 };\n var p = this.$fontMetrics.transformCoordinates([x, y]);\n x = p[1] - this.gutterWidth - this.margin.left;\n y = p[0];\n }\n else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n return this.session.screenToDocumentPosition(row, Math.max(col, 0), offsetX);\n };\n VirtualRenderer.prototype.textToScreenCoordinates = function (row, column) {\n var canvasPos = this.scroller.getBoundingClientRect();\n var pos = this.session.documentToScreenPosition(row, column);\n var x = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : Math.round(pos.column * this.characterWidth));\n var y = pos.row * this.lineHeight;\n return {\n pageX: canvasPos.left + x - this.scrollLeft,\n pageY: canvasPos.top + y - this.scrollTop\n };\n };\n VirtualRenderer.prototype.visualizeFocus = function () {\n dom.addCssClass(this.container, \"ace_focus\");\n };\n VirtualRenderer.prototype.visualizeBlur = function () {\n dom.removeCssClass(this.container, \"ace_focus\");\n };\n VirtualRenderer.prototype.showComposition = function (composition) {\n this.$composition = composition;\n if (!composition.cssText) {\n composition.cssText = this.textarea.style.cssText;\n }\n if (composition.useTextareaForIME == undefined)\n composition.useTextareaForIME = this.$useTextareaForIME;\n if (this.$useTextareaForIME) {\n dom.addCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = \"\";\n this.$moveTextAreaToCursor();\n this.$cursorLayer.element.style.display = \"none\";\n }\n else {\n composition.markerId = this.session.addMarker(composition.markerRange, \"ace_composition_marker\", \"text\");\n }\n };\n VirtualRenderer.prototype.setCompositionText = function (text) {\n var cursor = this.session.selection.cursor;\n this.addToken(text, \"composition_placeholder\", cursor.row, cursor.column);\n this.$moveTextAreaToCursor();\n };\n VirtualRenderer.prototype.hideComposition = function () {\n if (!this.$composition)\n return;\n if (this.$composition.markerId)\n this.session.removeMarker(this.$composition.markerId);\n dom.removeCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = this.$composition.cssText;\n var cursor = this.session.selection.cursor;\n this.removeExtraToken(cursor.row, cursor.column);\n this.$composition = null;\n this.$cursorLayer.element.style.display = \"\";\n };\n VirtualRenderer.prototype.setGhostText = function (text, position) {\n var cursor = this.session.selection.cursor;\n var insertPosition = position || { row: cursor.row, column: cursor.column };\n this.removeGhostText();\n var textLines = text.split(\"\\n\");\n this.addToken(textLines[0], \"ghost_text\", insertPosition.row, insertPosition.column);\n this.$ghostText = {\n text: text,\n position: {\n row: insertPosition.row,\n column: insertPosition.column\n }\n };\n if (textLines.length > 1) {\n this.$ghostTextWidget = {\n text: textLines.slice(1).join(\"\\n\"),\n row: insertPosition.row,\n column: insertPosition.column,\n className: \"ace_ghost_text\"\n };\n this.session.widgetManager.addLineWidget(this.$ghostTextWidget);\n var pixelPosition = this.$cursorLayer.getPixelPosition(insertPosition, true);\n var el = this.container;\n var height = el.getBoundingClientRect().height;\n var ghostTextHeight = textLines.length * this.lineHeight;\n var fitsY = ghostTextHeight < height - pixelPosition.top;\n if (fitsY)\n return;\n if (ghostTextHeight < height) {\n this.scrollBy(0, (textLines.length - 1) * this.lineHeight);\n }\n else {\n this.scrollBy(0, pixelPosition.top);\n }\n }\n };\n VirtualRenderer.prototype.removeGhostText = function () {\n if (!this.$ghostText)\n return;\n var position = this.$ghostText.position;\n this.removeExtraToken(position.row, position.column);\n if (this.$ghostTextWidget) {\n this.session.widgetManager.removeLineWidget(this.$ghostTextWidget);\n this.$ghostTextWidget = null;\n }\n this.$ghostText = null;\n };\n VirtualRenderer.prototype.addToken = function (text, type, row, column) {\n var session = this.session;\n session.bgTokenizer.lines[row] = null;\n var newToken = { type: type, value: text };\n var tokens = session.getTokens(row);\n if (column == null || !tokens.length) {\n tokens.push(newToken);\n }\n else {\n var l = 0;\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n l += token.value.length;\n if (column <= l) {\n var diff = token.value.length - (l - column);\n var before = token.value.slice(0, diff);\n var after = token.value.slice(diff);\n tokens.splice(i, 1, { type: token.type, value: before }, newToken, { type: token.type, value: after });\n break;\n }\n }\n }\n this.updateLines(row, row);\n };\n VirtualRenderer.prototype.removeExtraToken = function (row, column) {\n this.session.bgTokenizer.lines[row] = null;\n this.updateLines(row, row);\n };\n VirtualRenderer.prototype.setTheme = function (theme, cb) {\n var _self = this;\n this.$themeId = theme;\n _self._dispatchEvent('themeChange', { theme: theme });\n if (!theme || typeof theme == \"string\") {\n var moduleName = theme || this.$options.theme.initialValue;\n config.loadModule([\"theme\", moduleName], afterLoad);\n }\n else {\n afterLoad(theme);\n }\n function afterLoad(module) {\n if (_self.$themeId != theme)\n return cb && cb();\n if (!module || !module.cssClass)\n throw new Error(\"couldn't load module \" + theme + \" or it didn't call define\");\n if (module.$id)\n _self.$themeId = module.$id;\n dom.importCssString(module.cssText, module.cssClass, _self.container);\n if (_self.theme)\n dom.removeCssClass(_self.container, _self.theme.cssClass);\n var padding = \"padding\" in module ? module.padding\n : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\n if (_self.$padding && padding != _self.$padding)\n _self.setPadding(padding);\n _self.$theme = module.cssClass;\n _self.theme = module;\n dom.addCssClass(_self.container, module.cssClass);\n dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\n if (_self.$size) {\n _self.$size.width = 0;\n _self.$updateSizeAsync();\n }\n _self._dispatchEvent('themeLoaded', { theme: module });\n cb && cb();\n }\n };\n VirtualRenderer.prototype.getTheme = function () {\n return this.$themeId;\n };\n VirtualRenderer.prototype.setStyle = function (style, include) {\n dom.setCssClass(this.container, style, include !== false);\n };\n VirtualRenderer.prototype.unsetStyle = function (style) {\n dom.removeCssClass(this.container, style);\n };\n VirtualRenderer.prototype.setCursorStyle = function (style) {\n dom.setStyle(this.scroller.style, \"cursor\", style);\n };\n VirtualRenderer.prototype.setMouseCursor = function (cursorStyle) {\n dom.setStyle(this.scroller.style, \"cursor\", cursorStyle);\n };\n VirtualRenderer.prototype.attachToShadowRoot = function () {\n dom.importCssString(editorCss, \"ace_editor.css\", this.container);\n };\n VirtualRenderer.prototype.destroy = function () {\n this.freeze();\n this.$fontMetrics.destroy();\n this.$cursorLayer.destroy();\n this.removeAllListeners();\n this.container.textContent = \"\";\n this.setOption(\"useResizeObserver\", false);\n };\n VirtualRenderer.prototype.$updateCustomScrollbar = function (val) {\n var _self = this;\n this.$horizScroll = this.$vScroll = null;\n this.scrollBarV.element.remove();\n this.scrollBarH.element.remove();\n if (this.$scrollDecorator) {\n delete this.$scrollDecorator;\n }\n if (val === true) {\n this.scrollBarV = new VScrollBarCustom(this.container, this);\n this.scrollBarH = new HScrollBarCustom(this.container, this);\n this.scrollBarV.setHeight(this.$size.scrollerHeight);\n this.scrollBarH.setWidth(this.$size.scrollerWidth);\n this.scrollBarV.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n this.$scrollDecorator = new Decorator(this.scrollBarV, this);\n this.$scrollDecorator.$updateDecorators();\n }\n else {\n this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n }\n };\n VirtualRenderer.prototype.$addResizeObserver = function () {\n if (!window.ResizeObserver || this.$resizeObserver)\n return;\n var self = this;\n this.$resizeTimer = lang.delayedCall(function () {\n if (!self.destroyed)\n self.onResize();\n }, 50);\n this.$resizeObserver = new window.ResizeObserver(function (e) {\n var w = e[0].contentRect.width;\n var h = e[0].contentRect.height;\n if (Math.abs(self.$size.width - w) > 1\n || Math.abs(self.$size.height - h) > 1) {\n self.$resizeTimer.delay();\n }\n else {\n self.$resizeTimer.cancel();\n }\n });\n this.$resizeObserver.observe(this.container);\n };\n return VirtualRenderer;\n}());\nVirtualRenderer.prototype.CHANGE_CURSOR = 1;\nVirtualRenderer.prototype.CHANGE_MARKER = 2;\nVirtualRenderer.prototype.CHANGE_GUTTER = 4;\nVirtualRenderer.prototype.CHANGE_SCROLL = 8;\nVirtualRenderer.prototype.CHANGE_LINES = 16;\nVirtualRenderer.prototype.CHANGE_TEXT = 32;\nVirtualRenderer.prototype.CHANGE_SIZE = 64;\nVirtualRenderer.prototype.CHANGE_MARKER_BACK = 128;\nVirtualRenderer.prototype.CHANGE_MARKER_FRONT = 256;\nVirtualRenderer.prototype.CHANGE_FULL = 512;\nVirtualRenderer.prototype.CHANGE_H_SCROLL = 1024;\nVirtualRenderer.prototype.$changes = 0;\nVirtualRenderer.prototype.$padding = null;\nVirtualRenderer.prototype.$frozen = false;\nVirtualRenderer.prototype.STEPS = 8;\noop.implement(VirtualRenderer.prototype, EventEmitter);\nconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\n useResizeObserver: {\n set: function (value) {\n if (!value && this.$resizeObserver) {\n this.$resizeObserver.disconnect();\n this.$resizeTimer.cancel();\n this.$resizeTimer = this.$resizeObserver = null;\n }\n else if (value && !this.$resizeObserver) {\n this.$addResizeObserver();\n }\n }\n },\n animatedScroll: { initialValue: false },\n showInvisibles: {\n set: function (value) {\n if (this.$textLayer.setShowInvisibles(value))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: false\n },\n showPrintMargin: {\n set: function () { this.$updatePrintMargin(); },\n initialValue: true\n },\n printMarginColumn: {\n set: function () { this.$updatePrintMargin(); },\n initialValue: 80\n },\n printMargin: {\n set: function (val) {\n if (typeof val == \"number\")\n this.$printMarginColumn = val;\n this.$showPrintMargin = !!val;\n this.$updatePrintMargin();\n },\n get: function () {\n return this.$showPrintMargin && this.$printMarginColumn;\n }\n },\n showGutter: {\n set: function (show) {\n this.$gutter.style.display = show ? \"block\" : \"none\";\n this.$loop.schedule(this.CHANGE_FULL);\n this.onGutterResize();\n },\n initialValue: true\n },\n useSvgGutterIcons: {\n set: function (value) {\n this.$gutterLayer.$useSvgGutterIcons = value;\n },\n initialValue: false\n },\n showFoldedAnnotations: {\n set: function (value) {\n this.$gutterLayer.$showFoldedAnnotations = value;\n },\n initialValue: false\n },\n fadeFoldWidgets: {\n set: function (show) {\n dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\n },\n initialValue: false\n },\n showFoldWidgets: {\n set: function (show) {\n this.$gutterLayer.setShowFoldWidgets(show);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n displayIndentGuides: {\n set: function (show) {\n if (this.$textLayer.setDisplayIndentGuides(show))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: true\n },\n highlightIndentGuides: {\n set: function (show) {\n if (this.$textLayer.setHighlightIndentGuides(show) == true) {\n this.$textLayer.$highlightIndentGuide();\n }\n else {\n this.$textLayer.$clearActiveIndentGuide(this.$textLayer.$lines.cells);\n }\n },\n initialValue: true\n },\n highlightGutterLine: {\n set: function (shouldHighlight) {\n this.$gutterLayer.setHighlightGutterLine(shouldHighlight);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n hScrollBarAlwaysVisible: {\n set: function (val) {\n if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n vScrollBarAlwaysVisible: {\n set: function (val) {\n if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n fontSize: {\n set: function (size) {\n if (typeof size == \"number\")\n size = size + \"px\";\n this.container.style.fontSize = size;\n this.updateFontSize();\n },\n initialValue: 12\n },\n fontFamily: {\n set: function (name) {\n this.container.style.fontFamily = name;\n this.updateFontSize();\n }\n },\n maxLines: {\n set: function (val) {\n this.updateFull();\n }\n },\n minLines: {\n set: function (val) {\n if (!(this.$minLines < 0x1ffffffffffff))\n this.$minLines = 0;\n this.updateFull();\n }\n },\n maxPixelHeight: {\n set: function (val) {\n this.updateFull();\n },\n initialValue: 0\n },\n scrollPastEnd: {\n set: function (val) {\n val = +val || 0;\n if (this.$scrollPastEnd == val)\n return;\n this.$scrollPastEnd = val;\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: 0,\n handlesSet: true\n },\n fixedWidthGutter: {\n set: function (val) {\n this.$gutterLayer.$fixedWidth = !!val;\n this.$loop.schedule(this.CHANGE_GUTTER);\n }\n },\n customScrollbar: {\n set: function (val) {\n this.$updateCustomScrollbar(val);\n },\n initialValue: false\n },\n theme: {\n set: function (val) { this.setTheme(val); },\n get: function () { return this.$themeId || this.theme; },\n initialValue: \"./theme/textmate\",\n handlesSet: true\n },\n hasCssTransforms: {},\n useTextareaForIME: {\n initialValue: !useragent.isMobile && !useragent.isIE\n }\n});\nexports.VirtualRenderer = VirtualRenderer;\n\n});\n\nace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar net = require(\"../lib/net\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar config = require(\"../config\");\n\nfunction $workerBlob(workerUrl) {\n var script = \"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\n try {\n return new Blob([script], {\"type\": \"application/javascript\"});\n } catch (e) { // Backwards-compatibility\n var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\n var blobBuilder = new BlobBuilder();\n blobBuilder.append(script);\n return blobBuilder.getBlob(\"application/javascript\");\n }\n}\n\nfunction createWorker(workerUrl) {\n if (typeof Worker == \"undefined\")\n return { postMessage: function() {}, terminate: function() {} };\n if (config.get(\"loadWorkerFromBlob\")) {\n var blob = $workerBlob(workerUrl);\n var URL = window.URL || window.webkitURL;\n var blobURL = URL.createObjectURL(blob);\n return new Worker(blobURL);\n }\n return new Worker(workerUrl);\n}\n\nvar WorkerClient = function(worker) {\n if (!worker.postMessage)\n worker = this.$createWorkerFromOldConfig.apply(this, arguments);\n\n this.$worker = worker;\n this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.onMessage = this.onMessage.bind(this);\n\n this.callbackId = 1;\n this.callbacks = {};\n\n this.$worker.onmessage = this.onMessage;\n};\n\n(function(){\n\n oop.implement(this, EventEmitter);\n\n this.$createWorkerFromOldConfig = function(topLevelNamespaces, mod, classname, workerUrl, importScripts) {\n if (require.nameToUrl && !require.toUrl)\n require.toUrl = require.nameToUrl;\n\n if (config.get(\"packaged\") || !require.toUrl) {\n workerUrl = workerUrl || config.moduleUrl(mod, \"worker\");\n } else {\n var normalizePath = this.$normalizePath;\n workerUrl = workerUrl || normalizePath(require.toUrl(\"ace/worker/worker.js\", null, \"_\"));\n\n var tlns = {};\n topLevelNamespaces.forEach(function(ns) {\n tlns[ns] = normalizePath(require.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\n });\n }\n\n this.$worker = createWorker(workerUrl);\n if (importScripts) {\n this.send(\"importScripts\", importScripts);\n }\n this.$worker.postMessage({\n init : true,\n tlns : tlns,\n module : mod,\n classname : classname\n });\n return this.$worker;\n };\n\n this.onMessage = function(e) {\n var msg = e.data;\n switch (msg.type) {\n case \"event\":\n this._signal(msg.name, {data: msg.data});\n break;\n case \"call\":\n var callback = this.callbacks[msg.id];\n if (callback) {\n callback(msg.data);\n delete this.callbacks[msg.id];\n }\n break;\n case \"error\":\n this.reportError(msg.data);\n break;\n case \"log\":\n window.console && console.log && console.log.apply(console, msg.data);\n break;\n }\n };\n \n this.reportError = function(err) {\n window.console && console.error && console.error(err);\n };\n\n this.$normalizePath = function(path) {\n return net.qualifyURL(path);\n };\n\n this.terminate = function() {\n this._signal(\"terminate\", {});\n this.deltaQueue = null;\n this.$worker.terminate();\n this.$worker.onerror = function(e) {\n e.preventDefault();\n };\n this.$worker = null;\n if (this.$doc)\n this.$doc.off(\"change\", this.changeListener);\n this.$doc = null;\n };\n\n this.send = function(cmd, args) {\n this.$worker.postMessage({command: cmd, args: args});\n };\n\n this.call = function(cmd, args, callback) {\n if (callback) {\n var id = this.callbackId++;\n this.callbacks[id] = callback;\n args.push(id);\n }\n this.send(cmd, args);\n };\n\n this.emit = function(event, data) {\n try {\n if (data.data && data.data.err)\n data.data.err = {message: data.data.err.message, stack: data.data.err.stack, code: data.data.err.code};\n this.$worker && this.$worker.postMessage({event: event, data: {data: data.data}});\n }\n catch(ex) {\n console.error(ex.stack);\n }\n };\n\n this.attachToDocument = function(doc) {\n if (this.$doc)\n this.terminate();\n\n this.$doc = doc;\n this.call(\"setValue\", [doc.getValue()]);\n doc.on(\"change\", this.changeListener, true);\n };\n\n this.changeListener = function(delta) {\n if (!this.deltaQueue) {\n this.deltaQueue = [];\n setTimeout(this.$sendDeltaQueue, 0);\n }\n if (delta.action == \"insert\")\n this.deltaQueue.push(delta.start, delta.lines);\n else\n this.deltaQueue.push(delta.start, delta.end);\n };\n\n this.$sendDeltaQueue = function() {\n var q = this.deltaQueue;\n if (!q) return;\n this.deltaQueue = null;\n if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\n this.call(\"setValue\", [this.$doc.getValue()]);\n } else\n this.emit(\"change\", {data: q});\n };\n\n}).call(WorkerClient.prototype);\n\n\nvar UIWorkerClient = function(topLevelNamespaces, mod, classname) {\n var main = null;\n var emitSync = false;\n var sender = Object.create(EventEmitter);\n\n var messageBuffer = [];\n var workerClient = new WorkerClient({\n messageBuffer: messageBuffer,\n terminate: function() {},\n postMessage: function(e) {\n messageBuffer.push(e);\n if (!main) return;\n if (emitSync)\n setTimeout(processNext);\n else\n processNext();\n }\n });\n\n workerClient.setEmitSync = function(val) { emitSync = val; };\n\n var processNext = function() {\n var msg = messageBuffer.shift();\n if (msg.command)\n main[msg.command].apply(main, msg.args);\n else if (msg.event)\n sender._signal(msg.event, msg.data);\n };\n\n sender.postMessage = function(msg) {\n workerClient.onMessage({data: msg});\n };\n sender.callback = function(data, callbackId) {\n this.postMessage({type: \"call\", id: callbackId, data: data});\n };\n sender.emit = function(name, data) {\n this.postMessage({type: \"event\", name: name, data: data});\n };\n\n config.loadModule([\"worker\", mod], function(Main) {\n main = new Main[classname](sender);\n while (messageBuffer.length)\n processNext();\n });\n\n return workerClient;\n};\n\nexports.UIWorkerClient = UIWorkerClient;\nexports.WorkerClient = WorkerClient;\nexports.createWorker = createWorker;\n\n\n});\n\nace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar oop = require(\"./lib/oop\");\nvar PlaceHolder = /** @class */ (function () {\n function PlaceHolder(session, length, pos, others, mainClass, othersClass) {\n var _self = this;\n this.length = length;\n this.session = session;\n this.doc = session.getDocument();\n this.mainClass = mainClass;\n this.othersClass = othersClass;\n this.$onUpdate = this.onUpdate.bind(this);\n this.doc.on(\"change\", this.$onUpdate, true);\n this.$others = others;\n this.$onCursorChange = function () {\n setTimeout(function () {\n _self.onCursorChange();\n });\n };\n this.$pos = pos;\n var undoStack = session.getUndoManager().$undoStack || session.getUndoManager()[\"$undostack\"] || { length: -1 };\n this.$undoStackDepth = undoStack.length;\n this.setup();\n session.selection.on(\"changeCursor\", this.$onCursorChange);\n }\n PlaceHolder.prototype.setup = function () {\n var _self = this;\n var doc = this.doc;\n var session = this.session;\n this.selectionBefore = session.selection.toJSON();\n if (session.selection.inMultiSelectMode)\n session.selection.toSingleRange();\n this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\n var pos = this.pos;\n pos.$insertRight = true;\n pos.detach();\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\n this.others = [];\n this.$others.forEach(function (other) {\n var anchor = doc.createAnchor(other.row, other.column);\n anchor.$insertRight = true;\n anchor.detach();\n _self.others.push(anchor);\n });\n session.setUndoSelect(false);\n };\n PlaceHolder.prototype.showOtherMarkers = function () {\n if (this.othersActive)\n return;\n var session = this.session;\n var _self = this;\n this.othersActive = true;\n this.others.forEach(function (anchor) {\n anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column + _self.length), _self.othersClass, null, false);\n });\n };\n PlaceHolder.prototype.hideOtherMarkers = function () {\n if (!this.othersActive)\n return;\n this.othersActive = false;\n for (var i = 0; i < this.others.length; i++) {\n this.session.removeMarker(this.others[i].markerId);\n }\n };\n PlaceHolder.prototype.onUpdate = function (delta) {\n if (this.$updating)\n return this.updateAnchors(delta);\n var range = delta;\n if (range.start.row !== range.end.row)\n return;\n if (range.start.row !== this.pos.row)\n return;\n this.$updating = true;\n var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\n var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\n var distanceFromStart = range.start.column - this.pos.column;\n this.updateAnchors(delta);\n if (inMainRange)\n this.length += lengthDiff;\n if (inMainRange && !this.session.$fromUndo) {\n if (delta.action === 'insert') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart };\n this.doc.insertMergedLines(newPos, delta.lines);\n }\n }\n else if (delta.action === 'remove') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart };\n this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\n }\n }\n }\n this.$updating = false;\n this.updateMarkers();\n };\n PlaceHolder.prototype.updateAnchors = function (delta) {\n this.pos.onChange(delta);\n for (var i = this.others.length; i--;)\n this.others[i].onChange(delta);\n this.updateMarkers();\n };\n PlaceHolder.prototype.updateMarkers = function () {\n if (this.$updating)\n return;\n var _self = this;\n var session = this.session;\n var updateMarker = function (pos, className) {\n session.removeMarker(pos.markerId);\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + _self.length), className, null, false);\n };\n updateMarker(this.pos, this.mainClass);\n for (var i = this.others.length; i--;)\n updateMarker(this.others[i], this.othersClass);\n };\n PlaceHolder.prototype.onCursorChange = function (event) {\n if (this.$updating || !this.session)\n return;\n var pos = this.session.selection.getCursor();\n if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\n this.showOtherMarkers();\n this._emit(\"cursorEnter\", event);\n }\n else {\n this.hideOtherMarkers();\n this._emit(\"cursorLeave\", event);\n }\n };\n PlaceHolder.prototype.detach = function () {\n this.session.removeMarker(this.pos && this.pos.markerId);\n this.hideOtherMarkers();\n this.doc.off(\"change\", this.$onUpdate);\n this.session.selection.off(\"changeCursor\", this.$onCursorChange);\n this.session.setUndoSelect(true);\n this.session = null;\n };\n PlaceHolder.prototype.cancel = function () {\n if (this.$undoStackDepth === -1)\n return;\n var undoManager = this.session.getUndoManager();\n var undosRequired = (undoManager.$undoStack || undoManager[\"$undostack\"]).length - this.$undoStackDepth;\n for (var i = 0; i < undosRequired; i++) {\n undoManager.undo(this.session, true);\n }\n if (this.selectionBefore)\n this.session.selection.fromJSON(this.selectionBefore);\n };\n return PlaceHolder;\n}());\noop.implement(PlaceHolder.prototype, EventEmitter);\nexports.PlaceHolder = PlaceHolder;\n\n});\n\nace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){var event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\nfunction onMouseDown(e) {\n var ev = e.domEvent;\n var alt = ev.altKey;\n var shift = ev.shiftKey;\n var ctrl = ev.ctrlKey;\n var accel = e.getAccelKey();\n var button = e.getButton();\n if (ctrl && useragent.isMac)\n button = ev.button;\n if (e.editor.inMultiSelectMode && button == 2) {\n e.editor.textInput.onContextMenu(e.domEvent);\n return;\n }\n if (!ctrl && !alt && !accel) {\n if (button === 0 && e.editor.inMultiSelectMode)\n e.editor.exitMultiSelectMode();\n return;\n }\n if (button !== 0)\n return;\n var editor = e.editor;\n var selection = editor.selection;\n var isMultiSelect = editor.inMultiSelectMode;\n var pos = e.getDocumentPosition();\n var cursor = selection.getCursor();\n var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));\n var mouseX = e.x, mouseY = e.y;\n var onMouseSelection = function (e) {\n mouseX = e.clientX;\n mouseY = e.clientY;\n };\n var session = editor.session;\n var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var screenCursor = screenAnchor;\n var selectionMode;\n if (editor.$mouseHandler.$enableJumpToDef) {\n if (ctrl && alt || accel && alt)\n selectionMode = shift ? \"block\" : \"add\";\n else if (alt && editor.$blockSelectEnabled)\n selectionMode = \"block\";\n }\n else {\n if (accel && !alt) {\n selectionMode = \"add\";\n if (!isMultiSelect && shift)\n return;\n }\n else if (alt && editor.$blockSelectEnabled) {\n selectionMode = \"block\";\n }\n }\n if (selectionMode && useragent.isMac && ev.ctrlKey) {\n editor.$mouseHandler.cancelContextMenu();\n }\n if (selectionMode == \"add\") {\n if (!isMultiSelect && inSelection)\n return; // dragging\n if (!isMultiSelect) {\n var range = selection.toOrientedRange();\n editor.addSelectionMarker(range);\n }\n var oldRange = selection.rangeList.rangeAtPoint(pos);\n editor.inVirtualSelectionMode = true;\n if (shift) {\n oldRange = null;\n range = selection.ranges[0] || range;\n editor.removeSelectionMarker(range);\n }\n editor.once(\"mouseup\", function () {\n var tmpSel = selection.toOrientedRange();\n if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))\n selection.substractPoint(tmpSel.cursor);\n else {\n if (shift) {\n selection.substractPoint(range.cursor);\n }\n else if (range) {\n editor.removeSelectionMarker(range);\n selection.addRange(range);\n }\n selection.addRange(tmpSel);\n }\n editor.inVirtualSelectionMode = false;\n });\n }\n else if (selectionMode == \"block\") {\n e.stop();\n editor.inVirtualSelectionMode = true;\n var initialRange;\n var rectSel = [];\n var blockSelect = function () {\n var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column, newCursor.offsetX);\n if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))\n return;\n screenCursor = newCursor;\n editor.selection.moveToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n editor.removeSelectionMarkers(rectSel);\n rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\n if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())\n rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\n rectSel.forEach(editor.addSelectionMarker, editor);\n editor.updateSelectionMarkers();\n };\n if (isMultiSelect && !accel) {\n selection.toSingleRange();\n }\n else if (!isMultiSelect && accel) {\n initialRange = selection.toOrientedRange();\n editor.addSelectionMarker(initialRange);\n }\n if (shift)\n screenAnchor = session.documentToScreenPosition(selection.lead);\n else\n selection.moveToPosition(pos);\n screenCursor = { row: -1, column: -1 };\n var onMouseSelectionEnd = function (e) {\n blockSelect();\n clearInterval(timerId);\n editor.removeSelectionMarkers(rectSel);\n if (!rectSel.length)\n rectSel = [selection.toOrientedRange()];\n if (initialRange) {\n editor.removeSelectionMarker(initialRange);\n selection.toSingleRange(initialRange);\n }\n for (var i = 0; i < rectSel.length; i++)\n selection.addRange(rectSel[i]);\n editor.inVirtualSelectionMode = false;\n editor.$mouseHandler.$clickSelection = null;\n };\n var onSelectionInterval = blockSelect;\n event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\n var timerId = setInterval(function () { onSelectionInterval(); }, 20);\n return e.preventDefault();\n }\n}\nexports.onMouseDown = onMouseDown;\n\n});\n\nace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"], function(require, exports, module){/**\n * commands to enter multiselect mode\n * @type {import(\"../../ace-internal\").Ace.Command[]}\n */\nexports.defaultCommands = [{\n name: \"addCursorAbove\",\n description: \"Add cursor above\",\n exec: function (editor) { editor.selectMoreLines(-1); },\n bindKey: { win: \"Ctrl-Alt-Up\", mac: \"Ctrl-Alt-Up\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorBelow\",\n description: \"Add cursor below\",\n exec: function (editor) { editor.selectMoreLines(1); },\n bindKey: { win: \"Ctrl-Alt-Down\", mac: \"Ctrl-Alt-Down\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorAboveSkipCurrent\",\n description: \"Add cursor above (skip current)\",\n exec: function (editor) { editor.selectMoreLines(-1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Up\", mac: \"Ctrl-Alt-Shift-Up\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorBelowSkipCurrent\",\n description: \"Add cursor below (skip current)\",\n exec: function (editor) { editor.selectMoreLines(1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Down\", mac: \"Ctrl-Alt-Shift-Down\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectMoreBefore\",\n description: \"Select more before\",\n exec: function (editor) { editor.selectMore(-1); },\n bindKey: { win: \"Ctrl-Alt-Left\", mac: \"Ctrl-Alt-Left\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectMoreAfter\",\n description: \"Select more after\",\n exec: function (editor) { editor.selectMore(1); },\n bindKey: { win: \"Ctrl-Alt-Right\", mac: \"Ctrl-Alt-Right\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectNextBefore\",\n description: \"Select next before\",\n exec: function (editor) { editor.selectMore(-1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Left\", mac: \"Ctrl-Alt-Shift-Left\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectNextAfter\",\n description: \"Select next after\",\n exec: function (editor) { editor.selectMore(1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Right\", mac: \"Ctrl-Alt-Shift-Right\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"toggleSplitSelectionIntoLines\",\n description: \"Split selection into lines\",\n exec: function (editor) {\n if (editor.multiSelect.rangeCount > 1)\n editor.multiSelect.joinSelections();\n else\n editor.multiSelect.splitIntoLines();\n },\n bindKey: { win: \"Ctrl-Alt-L\", mac: \"Ctrl-Alt-L\" },\n readOnly: true\n }, {\n name: \"splitSelectionIntoLines\",\n description: \"Split into lines\",\n exec: function (editor) { editor.multiSelect.splitIntoLines(); },\n readOnly: true\n }, {\n name: \"alignCursors\",\n description: \"Align cursors\",\n exec: function (editor) { editor.alignCursors(); },\n bindKey: { win: \"Ctrl-Alt-A\", mac: \"Ctrl-Alt-A\" },\n scrollIntoView: \"cursor\"\n }, {\n name: \"findAll\",\n description: \"Find all\",\n exec: function (editor) { editor.findAll(); },\n bindKey: { win: \"Ctrl-Alt-K\", mac: \"Ctrl-Alt-G\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }];\nexports.multiSelectCommands = [{\n name: \"singleSelection\",\n description: \"Single selection\",\n bindKey: \"esc\",\n exec: function (editor) { editor.exitMultiSelectMode(); },\n scrollIntoView: \"cursor\",\n readOnly: true,\n isAvailable: function (editor) { return editor && editor.inMultiSelectMode; }\n }];\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nexports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\n\n});\n\nace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"], function(require, exports, module){/**\n * @typedef {import(\"./anchor\").Anchor} Anchor\n * @typedef {import(\"../ace-internal\").Ace.Point} Point\n * @typedef {import(\"../ace-internal\").Ace.ScreenCoordinates} ScreenCoordinates\n */\nvar RangeList = require(\"./range_list\").RangeList;\nvar Range = require(\"./range\").Range;\nvar Selection = require(\"./selection\").Selection;\nvar onMouseDown = require(\"./mouse/multi_select_handler\").onMouseDown;\nvar event = require(\"./lib/event\");\nvar lang = require(\"./lib/lang\");\nvar commands = require(\"./commands/multi_select_commands\");\nexports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\nvar Search = require(\"./search\").Search;\nvar search = new Search();\nfunction find(session, needle, dir) {\n search.$options.wrap = true;\n search.$options.needle = needle;\n search.$options.backwards = dir == -1;\n return search.find(session);\n}\nvar EditSession = require(\"./edit_session\").EditSession;\n(function () {\n this.getSelectionMarkers = function () {\n return this.$selectionMarkers;\n };\n}).call(EditSession.prototype);\n(function () {\n this.ranges = null;\n this.rangeList = null;\n this.addRange = function (range, $blockChangeEvents) {\n if (!range)\n return;\n if (!this.inMultiSelectMode && this.rangeCount === 0) {\n var oldRange = this.toOrientedRange();\n this.rangeList.add(oldRange);\n this.rangeList.add(range);\n if (this.rangeList.ranges.length != 2) {\n this.rangeList.removeAll();\n return $blockChangeEvents || this.fromOrientedRange(range);\n }\n this.rangeList.removeAll();\n this.rangeList.add(oldRange);\n this.$onAddRange(oldRange);\n }\n if (!range.cursor)\n range.cursor = range.end;\n var removed = this.rangeList.add(range);\n this.$onAddRange(range);\n if (removed.length)\n this.$onRemoveRange(removed);\n if (this.rangeCount > 1 && !this.inMultiSelectMode) {\n this._signal(\"multiSelect\");\n this.inMultiSelectMode = true;\n this.session.$undoSelect = false;\n this.rangeList.attach(this.session);\n }\n return $blockChangeEvents || this.fromOrientedRange(range);\n };\n this.toSingleRange = function (range) {\n range = range || this.ranges[0];\n var removed = this.rangeList.removeAll();\n if (removed.length)\n this.$onRemoveRange(removed);\n range && this.fromOrientedRange(range);\n };\n this.substractPoint = function (pos) {\n var removed = this.rangeList.substractPoint(pos);\n if (removed) {\n this.$onRemoveRange(removed);\n return removed[0];\n }\n };\n this.mergeOverlappingRanges = function () {\n var removed = this.rangeList.merge();\n if (removed.length)\n this.$onRemoveRange(removed);\n };\n this.$onAddRange = function (range) {\n this.rangeCount = this.rangeList.ranges.length;\n this.ranges.unshift(range);\n this._signal(\"addRange\", { range: range });\n };\n this.$onRemoveRange = function (removed) {\n this.rangeCount = this.rangeList.ranges.length;\n if (this.rangeCount == 1 && this.inMultiSelectMode) {\n var lastRange = this.rangeList.ranges.pop();\n removed.push(lastRange);\n this.rangeCount = 0;\n }\n for (var i = removed.length; i--;) {\n var index = this.ranges.indexOf(removed[i]);\n this.ranges.splice(index, 1);\n }\n this._signal(\"removeRange\", { ranges: removed });\n if (this.rangeCount === 0 && this.inMultiSelectMode) {\n this.inMultiSelectMode = false;\n this._signal(\"singleSelect\");\n this.session.$undoSelect = true;\n this.rangeList.detach(this.session);\n }\n lastRange = lastRange || this.ranges[0];\n if (lastRange && !lastRange.isEqual(this.getRange()))\n this.fromOrientedRange(lastRange);\n };\n this.$initRangeList = function () {\n if (this.rangeList)\n return;\n this.rangeList = new RangeList();\n this.ranges = [];\n this.rangeCount = 0;\n };\n this.getAllRanges = function () {\n return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\n };\n this.splitIntoLines = function () {\n var ranges = this.ranges.length ? this.ranges : [this.getRange()];\n var newRanges = [];\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n var row = range.start.row;\n var endRow = range.end.row;\n if (row === endRow) {\n newRanges.push(range.clone());\n }\n else {\n newRanges.push(new Range(row, range.start.column, row, this.session.getLine(row).length));\n while (++row < endRow)\n newRanges.push(this.getLineRange(row, true));\n newRanges.push(new Range(endRow, 0, endRow, range.end.column));\n }\n if (i == 0 && !this.isBackwards())\n newRanges = newRanges.reverse();\n }\n this.toSingleRange();\n for (var i = newRanges.length; i--;)\n this.addRange(newRanges[i]);\n };\n this.joinSelections = function () {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n };\n this.toggleBlockSelection = function () {\n if (this.rangeCount > 1) {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n }\n else {\n var cursor = this.session.documentToScreenPosition(this.cursor);\n var anchor = this.session.documentToScreenPosition(this.anchor);\n var rectSel = this.rectangularRangeBlock(cursor, anchor);\n rectSel.forEach(this.addRange, this);\n }\n };\n this.rectangularRangeBlock = function (screenCursor, screenAnchor, includeEmptyLines) {\n var rectSel = [];\n var xBackwards = screenCursor.column < screenAnchor.column;\n if (xBackwards) {\n var startColumn = screenCursor.column;\n var endColumn = screenAnchor.column;\n var startOffsetX = screenCursor.offsetX;\n var endOffsetX = screenAnchor.offsetX;\n }\n else {\n var startColumn = screenAnchor.column;\n var endColumn = screenCursor.column;\n var startOffsetX = screenAnchor.offsetX;\n var endOffsetX = screenCursor.offsetX;\n }\n var yBackwards = screenCursor.row < screenAnchor.row;\n if (yBackwards) {\n var startRow = screenCursor.row;\n var endRow = screenAnchor.row;\n }\n else {\n var startRow = screenAnchor.row;\n var endRow = screenCursor.row;\n }\n if (startColumn < 0)\n startColumn = 0;\n if (startRow < 0)\n startRow = 0;\n if (startRow == endRow)\n includeEmptyLines = true;\n var docEnd;\n for (var row = startRow; row <= endRow; row++) {\n var range = Range.fromPoints(this.session.screenToDocumentPosition(row, startColumn, startOffsetX), this.session.screenToDocumentPosition(row, endColumn, endOffsetX));\n if (range.isEmpty()) {\n if (docEnd && isSamePoint(range.end, docEnd))\n break;\n docEnd = range.end;\n }\n range.cursor = xBackwards ? range.start : range.end;\n rectSel.push(range);\n }\n if (yBackwards)\n rectSel.reverse();\n if (!includeEmptyLines) {\n var end = rectSel.length - 1;\n while (rectSel[end].isEmpty() && end > 0)\n end--;\n if (end > 0) {\n var start = 0;\n while (rectSel[start].isEmpty())\n start++;\n }\n for (var i = end; i >= start; i--) {\n if (rectSel[i].isEmpty())\n rectSel.splice(i, 1);\n }\n }\n return rectSel;\n };\n}).call(Selection.prototype);\nvar Editor = require(\"./editor\").Editor;\n(function () {\n this.updateSelectionMarkers = function () {\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.addSelectionMarker = function (orientedRange) {\n if (!orientedRange.cursor)\n orientedRange.cursor = orientedRange.end;\n var style = this.getSelectionStyle();\n orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\n this.session.$selectionMarkers.push(orientedRange);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n return orientedRange;\n };\n this.removeSelectionMarker = function (range) {\n if (!range.marker)\n return;\n this.session.removeMarker(range.marker);\n var index = this.session.$selectionMarkers.indexOf(range);\n if (index != -1)\n this.session.$selectionMarkers.splice(index, 1);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n };\n this.removeSelectionMarkers = function (ranges) {\n var markerList = this.session.$selectionMarkers;\n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.marker)\n continue;\n this.session.removeMarker(range.marker);\n var index = markerList.indexOf(range);\n if (index != -1)\n markerList.splice(index, 1);\n }\n this.session.selectionMarkerCount = markerList.length;\n };\n this.$onAddRange = function (e) {\n this.addSelectionMarker(e.range);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onRemoveRange = function (e) {\n this.removeSelectionMarkers(e.ranges);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onMultiSelect = function (e) {\n if (this.inMultiSelectMode)\n return;\n this.inMultiSelectMode = true;\n this.setStyle(\"ace_multiselect\");\n this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\n this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onSingleSelect = function (e) {\n if (this.session.multiSelect.inVirtualMode)\n return;\n this.inMultiSelectMode = false;\n this.unsetStyle(\"ace_multiselect\");\n this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\n this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n this._emit(\"changeSelection\");\n };\n this.$onMultiSelectExec = function (e) {\n var command = e.command;\n var editor = e.editor;\n if (!editor.multiSelect)\n return;\n if (!command.multiSelectAction) {\n var result = command.exec(editor, e.args || {});\n editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\n editor.multiSelect.mergeOverlappingRanges();\n }\n else if (command.multiSelectAction == \"forEach\") {\n result = editor.forEachSelection(command, e.args);\n }\n else if (command.multiSelectAction == \"forEachLine\") {\n result = editor.forEachSelection(command, e.args, true);\n }\n else if (command.multiSelectAction == \"single\") {\n editor.exitMultiSelectMode();\n result = command.exec(editor, e.args || {});\n }\n else {\n result = command.multiSelectAction(editor, e.args || {});\n }\n return result;\n };\n this.forEachSelection = function (cmd, args, options) {\n if (this.inVirtualSelectionMode)\n return;\n var keepOrder = options && options.keepOrder;\n var $byLines = options == true || options && options.$byLines;\n var session = this.session;\n var selection = this.selection;\n var rangeList = selection.rangeList;\n var ranges = (keepOrder ? selection : rangeList).ranges;\n var result;\n if (!ranges.length)\n return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n var reg = selection._eventRegistry;\n selection._eventRegistry = {};\n var tmpSel = new Selection(session);\n this.inVirtualSelectionMode = true;\n for (var i = ranges.length; i--;) {\n if ($byLines) {\n while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row)\n i--;\n }\n tmpSel.fromOrientedRange(ranges[i]);\n tmpSel.index = i;\n this.selection = session.selection = tmpSel;\n var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n if (!result && cmdResult !== undefined)\n result = cmdResult;\n tmpSel.toOrientedRange(ranges[i]);\n }\n tmpSel.detach();\n this.selection = session.selection = selection;\n this.inVirtualSelectionMode = false;\n selection._eventRegistry = reg;\n selection.mergeOverlappingRanges();\n if (selection.ranges[0])\n selection.fromOrientedRange(selection.ranges[0]);\n var anim = this.renderer.$scrollAnimation;\n this.onCursorChange();\n this.onSelectionChange();\n if (anim && anim.from == anim.to)\n this.renderer.animateScrolling(anim.from);\n return result;\n };\n this.exitMultiSelectMode = function () {\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode)\n return;\n this.multiSelect.toSingleRange();\n };\n this.getSelectedText = function () {\n var text = \"\";\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var ranges = this.multiSelect.rangeList.ranges;\n var buf = [];\n for (var i = 0; i < ranges.length; i++) {\n buf.push(this.session.getTextRange(ranges[i]));\n }\n var nl = this.session.getDocument().getNewLineCharacter();\n text = buf.join(nl);\n if (text.length == (buf.length - 1) * nl.length)\n text = \"\";\n }\n else if (!this.selection.isEmpty()) {\n text = this.session.getTextRange(this.getSelectionRange());\n }\n return text;\n };\n this.$checkMultiselectChange = function (e, anchor) {\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var range = this.multiSelect.ranges[0];\n if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor)\n return;\n var pos = anchor == this.multiSelect.anchor\n ? range.cursor == range.start ? range.end : range.start\n : range.cursor;\n if (pos.row != anchor.row\n || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column)\n this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());\n else\n this.multiSelect.mergeOverlappingRanges();\n }\n };\n this.findAll = function (needle, options, additive) {\n options = options || {};\n options.needle = needle || options.needle;\n if (options.needle == undefined) {\n var range = this.selection.isEmpty()\n ? this.selection.getWordRange()\n : this.selection.getRange();\n options.needle = this.session.getTextRange(range);\n }\n this.$search.set(options);\n var ranges = this.$search.findAll(this.session);\n if (!ranges.length)\n return 0;\n var selection = this.multiSelect;\n if (!additive)\n selection.toSingleRange(ranges[0]);\n for (var i = ranges.length; i--;)\n selection.addRange(ranges[i], true);\n if (range && selection.rangeList.rangeAtPoint(range.start))\n selection.addRange(range, true);\n return ranges.length;\n };\n this.selectMoreLines = function (dir, skip) {\n var range = this.selection.toOrientedRange();\n var isBackwards = range.cursor == range.end;\n var screenLead = this.session.documentToScreenPosition(range.cursor);\n if (this.selection.$desiredColumn)\n screenLead.column = this.selection.$desiredColumn;\n var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\n if (!range.isEmpty()) {\n var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\n var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\n }\n else {\n var anchor = lead;\n }\n if (isBackwards) {\n var newRange = Range.fromPoints(lead, anchor);\n newRange.cursor = newRange.start;\n }\n else {\n var newRange = Range.fromPoints(anchor, lead);\n newRange.cursor = newRange.end;\n }\n newRange.desiredColumn = screenLead.column;\n if (!this.selection.inMultiSelectMode) {\n this.selection.addRange(range);\n }\n else {\n if (skip)\n var toRemove = range.cursor;\n }\n this.selection.addRange(newRange);\n if (toRemove)\n this.selection.substractPoint(toRemove);\n };\n this.transposeSelections = function (dir) {\n var session = this.session;\n var sel = session.multiSelect;\n var all = sel.ranges;\n for (var i = all.length; i--;) {\n var range = all[i];\n if (range.isEmpty()) {\n var tmp_1 = session.getWordRange(range.start.row, range.start.column);\n range.start.row = tmp_1.start.row;\n range.start.column = tmp_1.start.column;\n range.end.row = tmp_1.end.row;\n range.end.column = tmp_1.end.column;\n }\n }\n sel.mergeOverlappingRanges();\n var words = [];\n for (var i = all.length; i--;) {\n var range = all[i];\n words.unshift(session.getTextRange(range));\n }\n if (dir < 0)\n words.unshift(words.pop());\n else\n words.push(words.shift());\n for (var i = all.length; i--;) {\n var range = all[i];\n var tmp = range.clone();\n session.replace(range, words[i]);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n }\n sel.fromOrientedRange(sel.ranges[0]);\n };\n this.selectMore = function (dir, skip, stopAtFirst) {\n var session = this.session;\n var sel = session.multiSelect;\n var range = sel.toOrientedRange();\n if (range.isEmpty()) {\n range = session.getWordRange(range.start.row, range.start.column);\n range.cursor = dir == -1 ? range.start : range.end;\n this.multiSelect.addRange(range);\n if (stopAtFirst)\n return;\n }\n var needle = session.getTextRange(range);\n var newRange = find(session, needle, dir);\n if (newRange) {\n newRange.cursor = dir == -1 ? newRange.start : newRange.end;\n this.session.unfold(newRange);\n this.multiSelect.addRange(newRange);\n this.renderer.scrollCursorIntoView(null, 0.5);\n }\n if (skip)\n this.multiSelect.substractPoint(range.cursor);\n };\n this.alignCursors = function () {\n var session = this.session;\n var sel = session.multiSelect;\n var ranges = sel.ranges;\n var row = -1;\n var sameRowRanges = ranges.filter(function (r) {\n if (r.cursor.row == row)\n return true;\n row = r.cursor.row;\n });\n if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\n var range = this.selection.getRange();\n var fr = range.start.row, lr = range.end.row;\n var guessRange = fr == lr;\n if (guessRange) {\n var max = this.session.getLength();\n var line;\n do {\n line = this.session.getLine(lr);\n } while (/[=:]/.test(line) && ++lr < max);\n do {\n line = this.session.getLine(fr);\n } while (/[=:]/.test(line) && --fr > 0);\n if (fr < 0)\n fr = 0;\n if (lr >= max)\n lr = max - 1;\n }\n var lines = this.session.removeFullLines(fr, lr);\n lines = this.$reAlignText(lines, guessRange);\n this.session.insert({ row: fr, column: 0 }, lines.join(\"\\n\") + \"\\n\");\n if (!guessRange) {\n range.start.column = 0;\n range.end.column = lines[lines.length - 1].length;\n }\n this.selection.setRange(range);\n }\n else {\n sameRowRanges.forEach(function (r) {\n sel.substractPoint(r.cursor);\n });\n var maxCol = 0;\n var minSpace = Infinity;\n var spaceOffsets = ranges.map(function (r) {\n var p = r.cursor;\n var line = session.getLine(p.row);\n var spaceOffset = line.substr(p.column).search(/\\S/g);\n if (spaceOffset == -1)\n spaceOffset = 0;\n if (p.column > maxCol)\n maxCol = p.column;\n if (spaceOffset < minSpace)\n minSpace = spaceOffset;\n return spaceOffset;\n });\n ranges.forEach(function (r, i) {\n var p = r.cursor;\n var l = maxCol - p.column;\n var d = spaceOffsets[i] - minSpace;\n if (l > d)\n session.insert(p, lang.stringRepeat(\" \", l - d));\n else\n session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\n r.start.column = r.end.column = maxCol;\n r.start.row = r.end.row = p.row;\n r.cursor = r.end;\n });\n sel.fromOrientedRange(ranges[0]);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n }\n };\n this.$reAlignText = function (lines, forceLeft) {\n var isLeftAligned = true, isRightAligned = true;\n var startW, textW, endW;\n return lines.map(function (line) {\n var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\n if (!m)\n return [line];\n if (startW == null) {\n startW = m[1].length;\n textW = m[2].length;\n endW = m[3].length;\n return m;\n }\n if (startW + textW + endW != m[1].length + m[2].length + m[3].length)\n isRightAligned = false;\n if (startW != m[1].length)\n isLeftAligned = false;\n if (startW > m[1].length)\n startW = m[1].length;\n if (textW < m[2].length)\n textW = m[2].length;\n if (endW > m[3].length)\n endW = m[3].length;\n return m;\n }).map(forceLeft ? alignLeft :\n isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\n function spaces(n) {\n return lang.stringRepeat(\" \", n);\n }\n function alignLeft(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(textW - m[2].length + endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function alignRight(m) {\n return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function unAlign(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n };\n}).call(Editor.prototype);\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\nexports.onSessionChange = function (e) {\n var session = e.session;\n if (session && !session.multiSelect) {\n session.$selectionMarkers = [];\n session.selection.$initRangeList();\n session.multiSelect = session.selection;\n }\n this.multiSelect = session && session.multiSelect;\n var oldSession = e.oldSession;\n if (oldSession) {\n oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\n oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\n oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\n oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\n oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\n oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\n }\n if (session) {\n session.multiSelect.on(\"addRange\", this.$onAddRange);\n session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\n session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\n session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\n session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\n session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\n }\n if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\n if (session.selection.inMultiSelectMode)\n this.$onMultiSelect();\n else\n this.$onSingleSelect();\n }\n};\nfunction MultiSelect(editor) {\n if (editor.$multiselectOnSessionChange)\n return;\n editor.$onAddRange = editor.$onAddRange.bind(editor);\n editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\n editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\n editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\n editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\n editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\n editor.$multiselectOnSessionChange(editor);\n editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\n editor.on(\"mousedown\", onMouseDown);\n editor.commands.addCommands(commands.defaultCommands);\n addAltCursorListeners(editor);\n}\nfunction addAltCursorListeners(editor) {\n if (!editor.textInput)\n return;\n var el = editor.textInput.getElement();\n var altCursor = false;\n event.addListener(el, \"keydown\", function (e) {\n var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);\n if (editor.$blockSelectEnabled && altDown) {\n if (!altCursor) {\n editor.renderer.setMouseCursor(\"crosshair\");\n altCursor = true;\n }\n }\n else if (altCursor) {\n reset();\n }\n }, editor);\n event.addListener(el, \"keyup\", reset, editor);\n event.addListener(el, \"blur\", reset, editor);\n function reset(e) {\n if (altCursor) {\n editor.renderer.setMouseCursor(\"\");\n altCursor = false;\n }\n }\n}\nexports.MultiSelect = MultiSelect;\nrequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n enableMultiselect: {\n set: function (val) {\n MultiSelect(this);\n if (val) {\n this.on(\"mousedown\", onMouseDown);\n }\n else {\n this.off(\"mousedown\", onMouseDown);\n }\n },\n value: true\n },\n enableBlockSelect: {\n set: function (val) {\n this.$blockSelectEnabled = val;\n },\n value: true\n }\n});\n\n});\n\nace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\n(function () {\n this.foldingStartMarker = null;\n this.foldingStopMarker = null;\n this.getFoldWidget = function (session, foldStyle, row) {\n var line = session.getLine(row);\n if (this.foldingStartMarker.test(line))\n return \"start\";\n if (foldStyle == \"markbeginend\"\n && this.foldingStopMarker\n && this.foldingStopMarker.test(line))\n return \"end\";\n return \"\";\n };\n this.getFoldWidgetRange = function (session, foldStyle, row) {\n return null;\n };\n this.indentationBlock = function (session, row, column) {\n var re = /\\S/;\n var line = session.getLine(row);\n var startLevel = line.search(re);\n if (startLevel == -1)\n return;\n var startColumn = column || line.length;\n var maxRow = session.getLength();\n var startRow = row;\n var endRow = row;\n while (++row < maxRow) {\n var level = session.getLine(row).search(re);\n if (level == -1)\n continue;\n if (level <= startLevel) {\n var token = session.getTokenAt(row, 0);\n if (!token || token.type !== \"string\")\n break;\n }\n endRow = row;\n }\n if (endRow > startRow) {\n var endColumn = session.getLine(endRow).length;\n return new Range(startRow, startColumn, endRow, endColumn);\n }\n };\n this.openingBracketBlock = function (session, bracket, row, column, typeRe) {\n var start = { row: row, column: column + 1 };\n var end = session.$findClosingBracket(bracket, start, typeRe);\n if (!end)\n return;\n var fw = session.foldWidgets[end.row];\n if (fw == null)\n fw = session.getFoldWidget(end.row);\n if (fw == \"start\" && end.row > start.row) {\n end.row--;\n end.column = session.getLine(end.row).length;\n }\n return Range.fromPoints(start, end);\n };\n this.closingBracketBlock = function (session, bracket, row, column, typeRe) {\n var end = { row: row, column: column };\n var start = session.$findOpeningBracket(bracket, end);\n if (!start)\n return;\n start.column++;\n end.column--;\n return Range.fromPoints(start, end);\n };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar LineWidgets = require(\"../line_widgets\").LineWidgets;\nvar dom = require(\"../lib/dom\");\nvar Range = require(\"../range\").Range;\nvar nls = require(\"../config\").nls;\nfunction binarySearch(array, needle, comparator) {\n var first = 0;\n var last = array.length - 1;\n while (first <= last) {\n var mid = (first + last) >> 1;\n var c = comparator(needle, array[mid]);\n if (c > 0)\n first = mid + 1;\n else if (c < 0)\n last = mid - 1;\n else\n return mid;\n }\n return -(first + 1);\n}\nfunction findAnnotations(session, row, dir) {\n var annotations = session.getAnnotations().sort(Range.comparePoints);\n if (!annotations.length)\n return;\n var i = binarySearch(annotations, { row: row, column: -1 }, Range.comparePoints);\n if (i < 0)\n i = -i - 1;\n if (i >= annotations.length)\n i = dir > 0 ? 0 : annotations.length - 1;\n else if (i === 0 && dir < 0)\n i = annotations.length - 1;\n var annotation = annotations[i];\n if (!annotation || !dir)\n return;\n if (annotation.row === row) {\n do {\n annotation = annotations[i += dir];\n } while (annotation && annotation.row === row);\n if (!annotation)\n return annotations.slice();\n }\n var matched = [];\n row = annotation.row;\n do {\n matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\n annotation = annotations[i += dir];\n } while (annotation && annotation.row == row);\n return matched.length && matched;\n}\nexports.showErrorMarker = function (editor, dir) {\n var session = editor.session;\n if (!session.widgetManager) {\n session.widgetManager = new LineWidgets(session);\n session.widgetManager.attach(editor);\n }\n var pos = editor.getCursorPosition();\n var row = pos.row;\n var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function (w) {\n return w.type == \"errorMarker\";\n })[0];\n if (oldWidget) {\n oldWidget.destroy();\n }\n else {\n row -= dir;\n }\n var annotations = findAnnotations(session, row, dir);\n var gutterAnno;\n if (annotations) {\n var annotation = annotations[0];\n pos.column = (annotation.pos && typeof annotation.column != \"number\"\n ? annotation.pos.sc\n : annotation.column) || 0;\n pos.row = annotation.row;\n gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\n }\n else if (oldWidget) {\n return;\n }\n else {\n gutterAnno = {\n text: [nls(\"Looks good!\")],\n className: \"ace_ok\"\n };\n }\n editor.session.unfold(pos.row);\n editor.selection.moveToPosition(pos);\n var w = {\n row: pos.row,\n fixedWidth: true,\n coverGutter: true,\n el: dom.createElement(\"div\"),\n type: \"errorMarker\"\n };\n var el = w.el.appendChild(dom.createElement(\"div\"));\n var arrow = w.el.appendChild(dom.createElement(\"div\"));\n arrow.className = \"error_widget_arrow \" + gutterAnno.className;\n var left = editor.renderer.$cursorLayer\n .getPixelPosition(pos).left;\n arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\n w.el.className = \"error_widget_wrapper\";\n el.className = \"error_widget \" + gutterAnno.className;\n el.innerHTML = gutterAnno.text.join(\"<br>\");\n el.appendChild(dom.createElement(\"div\"));\n var kb = function (_, hashId, keyString) {\n if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\n w.destroy();\n return { command: \"null\" };\n }\n };\n w.destroy = function () {\n if (editor.$mouseHandler.isMousePressed)\n return;\n editor.keyBinding.removeKeyboardHandler(kb);\n session.widgetManager.removeLineWidget(w);\n editor.off(\"changeSelection\", w.destroy);\n editor.off(\"changeSession\", w.destroy);\n editor.off(\"mouseup\", w.destroy);\n editor.off(\"change\", w.destroy);\n };\n editor.keyBinding.addKeyboardHandler(kb);\n editor.on(\"changeSelection\", w.destroy);\n editor.on(\"changeSession\", w.destroy);\n editor.on(\"mouseup\", w.destroy);\n editor.on(\"change\", w.destroy);\n editor.session.widgetManager.addLineWidget(w);\n w.el.onmousedown = editor.focus.bind(editor);\n editor.renderer.scrollCursorIntoView(null, 0.5, { bottom: w.el.offsetHeight });\n};\ndom.importCssString(\"\\n .error_widget_wrapper {\\n background: inherit;\\n color: inherit;\\n border:none\\n }\\n .error_widget {\\n border-top: solid 2px;\\n border-bottom: solid 2px;\\n margin: 5px 0;\\n padding: 10px 40px;\\n white-space: pre-wrap;\\n }\\n .error_widget.ace_error, .error_widget_arrow.ace_error{\\n border-color: #ff5a5a\\n }\\n .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\n border-color: #F1D817\\n }\\n .error_widget.ace_info, .error_widget_arrow.ace_info{\\n border-color: #5a5a5a\\n }\\n .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\n border-color: #5aaa5a\\n }\\n .error_widget_arrow {\\n position: absolute;\\n border: solid 5px;\\n border-top-color: transparent!important;\\n border-right-color: transparent!important;\\n border-left-color: transparent!important;\\n top: -5px;\\n }\\n\", \"error_marker.css\", false);\n\n});\n\nace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/range\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\",\"ace/loader_build\"], function(require, exports, module){/**\n * The main class required to set up an Ace instance in the browser.\n *\n * @namespace Ace\n **/\n\"use strict\";\nrequire(\"./loader_build\")(exports)\nvar dom = require(\"./lib/dom\");\nvar Range = require(\"./range\").Range;\nvar Editor = require(\"./editor\").Editor;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar Renderer = require(\"./virtual_renderer\").VirtualRenderer;\nrequire(\"./worker/worker_client\");\nrequire(\"./keyboard/hash_handler\");\nrequire(\"./placeholder\");\nrequire(\"./multi_select\");\nrequire(\"./mode/folding/fold_mode\");\nrequire(\"./theme/textmate\");\nrequire(\"./ext/error_marker\");\nexports.config = require(\"./config\");\nexports.edit = function (el, options) {\n if (typeof el == \"string\") {\n var _id = el;\n el = document.getElementById(_id);\n if (!el)\n throw new Error(\"ace.edit can't find div #\" + _id);\n }\n if (el && el.env && el.env.editor instanceof Editor)\n return el.env.editor;\n var value = \"\";\n if (el && /input|textarea/i.test(el.tagName)) {\n var oldNode = el;\n value = oldNode.value;\n el = dom.createElement(\"pre\");\n oldNode.parentNode.replaceChild(el, oldNode);\n }\n else if (el) {\n value = el.textContent;\n el.innerHTML = \"\";\n }\n var doc = exports.createEditSession(value);\n var editor = new Editor(new Renderer(el), doc, options);\n var env = {\n document: doc,\n editor: editor,\n onResize: editor.resize.bind(editor, null)\n };\n if (oldNode)\n env.textarea = oldNode;\n editor.on(\"destroy\", function () {\n env.editor.container.env = null; // prevent memory leak on old ie\n });\n editor.container.env = editor.env = env;\n return editor;\n};\nexports.createEditSession = function (text, mode) {\n var doc = new EditSession(text, mode);\n doc.setUndoManager(new UndoManager());\n return doc;\n};\nexports.Range = Range;\nexports.Editor = Editor;\nexports.EditSession = EditSession;\nexports.UndoManager = UndoManager;\nexports.VirtualRenderer = Renderer;\nexports.version = exports.config.version;\n\n}); (function() {\n ace.require([\"ace/ace\"], function(a) {\n if (a) {\n a.config.init(true);\n a.define = ace.define;\n }\n var global = (function () {\n return this;\n })();\n if (!global && typeof window != \"undefined\") global = window; // can happen in strict mode\n if (!global && typeof self != \"undefined\") global = self; // can happen in webworker\n \n if (!global.ace)\n global.ace = a;\n for (var key in a) if (a.hasOwnProperty(key))\n global.ace[key] = a[key];\n global.ace[\"default\"] = global.ace;\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = global.ace;\n }\n });\n })();\n ","/* global window, exports, define */\n\n!function() {\n 'use strict'\n\n var re = {\n not_string: /[^s]/,\n not_bool: /[^t]/,\n not_type: /[^T]/,\n not_primitive: /[^v]/,\n number: /[diefg]/,\n numeric_arg: /[bcdiefguxX]/,\n json: /[j]/,\n not_json: /[^j]/,\n text: /^[^\\x25]+/,\n modulo: /^\\x25{2}/,\n placeholder: /^\\x25(?:([1-9]\\d*)\\$|\\(([^)]+)\\))?(\\+)?(0|'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-gijostTuvxX])/,\n key: /^([a-z_][a-z_\\d]*)/i,\n key_access: /^\\.([a-z_][a-z_\\d]*)/i,\n index_access: /^\\[(\\d+)\\]/,\n sign: /^[+-]/\n }\n\n function sprintf(key) {\n // `arguments` is not an array, but should be fine for this call\n return sprintf_format(sprintf_parse(key), arguments)\n }\n\n function vsprintf(fmt, argv) {\n return sprintf.apply(null, [fmt].concat(argv || []))\n }\n\n function sprintf_format(parse_tree, argv) {\n var cursor = 1, tree_length = parse_tree.length, arg, output = '', i, k, ph, pad, pad_character, pad_length, is_positive, sign\n for (i = 0; i < tree_length; i++) {\n if (typeof parse_tree[i] === 'string') {\n output += parse_tree[i]\n }\n else if (typeof parse_tree[i] === 'object') {\n ph = parse_tree[i] // convenience purposes only\n if (ph.keys) { // keyword argument\n arg = argv[cursor]\n for (k = 0; k < ph.keys.length; k++) {\n if (arg == undefined) {\n throw new Error(sprintf('[sprintf] Cannot access property \"%s\" of undefined value \"%s\"', ph.keys[k], ph.keys[k-1]))\n }\n arg = arg[ph.keys[k]]\n }\n }\n else if (ph.param_no) { // positional argument (explicit)\n arg = argv[ph.param_no]\n }\n else { // positional argument (implicit)\n arg = argv[cursor++]\n }\n\n if (re.not_type.test(ph.type) && re.not_primitive.test(ph.type) && arg instanceof Function) {\n arg = arg()\n }\n\n if (re.numeric_arg.test(ph.type) && (typeof arg !== 'number' && isNaN(arg))) {\n throw new TypeError(sprintf('[sprintf] expecting number but found %T', arg))\n }\n\n if (re.number.test(ph.type)) {\n is_positive = arg >= 0\n }\n\n switch (ph.type) {\n case 'b':\n arg = parseInt(arg, 10).toString(2)\n break\n case 'c':\n arg = String.fromCharCode(parseInt(arg, 10))\n break\n case 'd':\n case 'i':\n arg = parseInt(arg, 10)\n break\n case 'j':\n arg = JSON.stringify(arg, null, ph.width ? parseInt(ph.width) : 0)\n break\n case 'e':\n arg = ph.precision ? parseFloat(arg).toExponential(ph.precision) : parseFloat(arg).toExponential()\n break\n case 'f':\n arg = ph.precision ? parseFloat(arg).toFixed(ph.precision) : parseFloat(arg)\n break\n case 'g':\n arg = ph.precision ? String(Number(arg.toPrecision(ph.precision))) : parseFloat(arg)\n break\n case 'o':\n arg = (parseInt(arg, 10) >>> 0).toString(8)\n break\n case 's':\n arg = String(arg)\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 't':\n arg = String(!!arg)\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 'T':\n arg = Object.prototype.toString.call(arg).slice(8, -1).toLowerCase()\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 'u':\n arg = parseInt(arg, 10) >>> 0\n break\n case 'v':\n arg = arg.valueOf()\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 'x':\n arg = (parseInt(arg, 10) >>> 0).toString(16)\n break\n case 'X':\n arg = (parseInt(arg, 10) >>> 0).toString(16).toUpperCase()\n break\n }\n if (re.json.test(ph.type)) {\n output += arg\n }\n else {\n if (re.number.test(ph.type) && (!is_positive || ph.sign)) {\n sign = is_positive ? '+' : '-'\n arg = arg.toString().replace(re.sign, '')\n }\n else {\n sign = ''\n }\n pad_character = ph.pad_char ? ph.pad_char === '0' ? '0' : ph.pad_char.charAt(1) : ' '\n pad_length = ph.width - (sign + arg).length\n pad = ph.width ? (pad_length > 0 ? pad_character.repeat(pad_length) : '') : ''\n output += ph.align ? sign + arg + pad : (pad_character === '0' ? sign + pad + arg : pad + sign + arg)\n }\n }\n }\n return output\n }\n\n var sprintf_cache = Object.create(null)\n\n function sprintf_parse(fmt) {\n if (sprintf_cache[fmt]) {\n return sprintf_cache[fmt]\n }\n\n var _fmt = fmt, match, parse_tree = [], arg_names = 0\n while (_fmt) {\n if ((match = re.text.exec(_fmt)) !== null) {\n parse_tree.push(match[0])\n }\n else if ((match = re.modulo.exec(_fmt)) !== null) {\n parse_tree.push('%')\n }\n else if ((match = re.placeholder.exec(_fmt)) !== null) {\n if (match[2]) {\n arg_names |= 1\n var field_list = [], replacement_field = match[2], field_match = []\n if ((field_match = re.key.exec(replacement_field)) !== null) {\n field_list.push(field_match[1])\n while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {\n if ((field_match = re.key_access.exec(replacement_field)) !== null) {\n field_list.push(field_match[1])\n }\n else if ((field_match = re.index_access.exec(replacement_field)) !== null) {\n field_list.push(field_match[1])\n }\n else {\n throw new SyntaxError('[sprintf] failed to parse named argument key')\n }\n }\n }\n else {\n throw new SyntaxError('[sprintf] failed to parse named argument key')\n }\n match[2] = field_list\n }\n else {\n arg_names |= 2\n }\n if (arg_names === 3) {\n throw new Error('[sprintf] mixing positional and named placeholders is not (yet) supported')\n }\n\n parse_tree.push(\n {\n placeholder: match[0],\n param_no: match[1],\n keys: match[2],\n sign: match[3],\n pad_char: match[4],\n align: match[5],\n width: match[6],\n precision: match[7],\n type: match[8]\n }\n )\n }\n else {\n throw new SyntaxError('[sprintf] unexpected placeholder')\n }\n _fmt = _fmt.substring(match[0].length)\n }\n return sprintf_cache[fmt] = parse_tree\n }\n\n /**\n * export to either browser or node.js\n */\n /* eslint-disable quote-props */\n if (typeof exports !== 'undefined') {\n exports['sprintf'] = sprintf\n exports['vsprintf'] = vsprintf\n }\n if (typeof window !== 'undefined') {\n window['sprintf'] = sprintf\n window['vsprintf'] = vsprintf\n\n if (typeof define === 'function' && define['amd']) {\n define(function() {\n return {\n 'sprintf': sprintf,\n 'vsprintf': vsprintf\n }\n })\n }\n }\n /* eslint-enable quote-props */\n}(); // eslint-disable-line\n","'use strict';\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (it, Prototype) {\n if (isPrototypeOf(Prototype, it)) return it;\n throw new $TypeError('Incorrect invocation');\n};\n","'use strict';\n// eslint-disable-next-line es/no-typed-arrays -- safe\nmodule.exports = typeof ArrayBuffer != 'undefined' && typeof DataView != 'undefined';\n","'use strict';\nvar NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-basic-detection');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar classof = require('../internals/classof');\nvar tryToString = require('../internals/try-to-string');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar uid = require('../internals/uid');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar Int8Array = global.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar Uint8ClampedArray = global.Uint8ClampedArray;\nvar Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype;\nvar TypedArray = Int8Array && getPrototypeOf(Int8Array);\nvar TypedArrayPrototype = Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype);\nvar ObjectPrototype = Object.prototype;\nvar TypeError = global.TypeError;\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG');\nvar TYPED_ARRAY_CONSTRUCTOR = 'TypedArrayConstructor';\n// Fixing native typed arrays in Opera Presto crashes the browser, see #595\nvar NATIVE_ARRAY_BUFFER_VIEWS = NATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(global.opera) !== 'Opera';\nvar TYPED_ARRAY_TAG_REQUIRED = false;\nvar NAME, Constructor, Prototype;\n\nvar TypedArrayConstructorsList = {\n Int8Array: 1,\n Uint8Array: 1,\n Uint8ClampedArray: 1,\n Int16Array: 2,\n Uint16Array: 2,\n Int32Array: 4,\n Uint32Array: 4,\n Float32Array: 4,\n Float64Array: 8\n};\n\nvar BigIntArrayConstructorsList = {\n BigInt64Array: 8,\n BigUint64Array: 8\n};\n\nvar isView = function isView(it) {\n if (!isObject(it)) return false;\n var klass = classof(it);\n return klass === 'DataView'\n || hasOwn(TypedArrayConstructorsList, klass)\n || hasOwn(BigIntArrayConstructorsList, klass);\n};\n\nvar getTypedArrayConstructor = function (it) {\n var proto = getPrototypeOf(it);\n if (!isObject(proto)) return;\n var state = getInternalState(proto);\n return (state && hasOwn(state, TYPED_ARRAY_CONSTRUCTOR)) ? state[TYPED_ARRAY_CONSTRUCTOR] : getTypedArrayConstructor(proto);\n};\n\nvar isTypedArray = function (it) {\n if (!isObject(it)) return false;\n var klass = classof(it);\n return hasOwn(TypedArrayConstructorsList, klass)\n || hasOwn(BigIntArrayConstructorsList, klass);\n};\n\nvar aTypedArray = function (it) {\n if (isTypedArray(it)) return it;\n throw new TypeError('Target is not a typed array');\n};\n\nvar aTypedArrayConstructor = function (C) {\n if (isCallable(C) && (!setPrototypeOf || isPrototypeOf(TypedArray, C))) return C;\n throw new TypeError(tryToString(C) + ' is not a typed array constructor');\n};\n\nvar exportTypedArrayMethod = function (KEY, property, forced, options) {\n if (!DESCRIPTORS) return;\n if (forced) for (var ARRAY in TypedArrayConstructorsList) {\n var TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && hasOwn(TypedArrayConstructor.prototype, KEY)) try {\n delete TypedArrayConstructor.prototype[KEY];\n } catch (error) {\n // old WebKit bug - some methods are non-configurable\n try {\n TypedArrayConstructor.prototype[KEY] = property;\n } catch (error2) { /* empty */ }\n }\n }\n if (!TypedArrayPrototype[KEY] || forced) {\n defineBuiltIn(TypedArrayPrototype, KEY, forced ? property\n : NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property, options);\n }\n};\n\nvar exportTypedArrayStaticMethod = function (KEY, property, forced) {\n var ARRAY, TypedArrayConstructor;\n if (!DESCRIPTORS) return;\n if (setPrototypeOf) {\n if (forced) for (ARRAY in TypedArrayConstructorsList) {\n TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && hasOwn(TypedArrayConstructor, KEY)) try {\n delete TypedArrayConstructor[KEY];\n } catch (error) { /* empty */ }\n }\n if (!TypedArray[KEY] || forced) {\n // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable\n try {\n return defineBuiltIn(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && TypedArray[KEY] || property);\n } catch (error) { /* empty */ }\n } else return;\n }\n for (ARRAY in TypedArrayConstructorsList) {\n TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {\n defineBuiltIn(TypedArrayConstructor, KEY, property);\n }\n }\n};\n\nfor (NAME in TypedArrayConstructorsList) {\n Constructor = global[NAME];\n Prototype = Constructor && Constructor.prototype;\n if (Prototype) enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;\n else NATIVE_ARRAY_BUFFER_VIEWS = false;\n}\n\nfor (NAME in BigIntArrayConstructorsList) {\n Constructor = global[NAME];\n Prototype = Constructor && Constructor.prototype;\n if (Prototype) enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;\n}\n\n// WebKit bug - typed arrays constructors prototype is Object.prototype\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !isCallable(TypedArray) || TypedArray === Function.prototype) {\n // eslint-disable-next-line no-shadow -- safe\n TypedArray = function TypedArray() {\n throw new TypeError('Incorrect invocation');\n };\n if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n if (global[NAME]) setPrototypeOf(global[NAME], TypedArray);\n }\n}\n\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype) {\n TypedArrayPrototype = TypedArray.prototype;\n if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n if (global[NAME]) setPrototypeOf(global[NAME].prototype, TypedArrayPrototype);\n }\n}\n\n// WebKit bug - one more object in Uint8ClampedArray prototype chain\nif (NATIVE_ARRAY_BUFFER_VIEWS && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype) {\n setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype);\n}\n\nif (DESCRIPTORS && !hasOwn(TypedArrayPrototype, TO_STRING_TAG)) {\n TYPED_ARRAY_TAG_REQUIRED = true;\n defineBuiltInAccessor(TypedArrayPrototype, TO_STRING_TAG, {\n configurable: true,\n get: function () {\n return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;\n }\n });\n for (NAME in TypedArrayConstructorsList) if (global[NAME]) {\n createNonEnumerableProperty(global[NAME], TYPED_ARRAY_TAG, NAME);\n }\n}\n\nmodule.exports = {\n NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS,\n TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQUIRED && TYPED_ARRAY_TAG,\n aTypedArray: aTypedArray,\n aTypedArrayConstructor: aTypedArrayConstructor,\n exportTypedArrayMethod: exportTypedArrayMethod,\n exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,\n getTypedArrayConstructor: getTypedArrayConstructor,\n isView: isView,\n isTypedArray: isTypedArray,\n TypedArray: TypedArray,\n TypedArrayPrototype: TypedArrayPrototype\n};\n","'use strict';\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-basic-detection');\nvar FunctionName = require('../internals/function-name');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar defineBuiltIns = require('../internals/define-built-ins');\nvar fails = require('../internals/fails');\nvar anInstance = require('../internals/an-instance');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toLength = require('../internals/to-length');\nvar toIndex = require('../internals/to-index');\nvar fround = require('../internals/math-fround');\nvar IEEE754 = require('../internals/ieee754');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar arrayFill = require('../internals/array-fill');\nvar arraySlice = require('../internals/array-slice-simple');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length';\nvar WRONG_INDEX = 'Wrong index';\nvar getInternalArrayBufferState = InternalStateModule.getterFor(ARRAY_BUFFER);\nvar getInternalDataViewState = InternalStateModule.getterFor(DATA_VIEW);\nvar setInternalState = InternalStateModule.set;\nvar NativeArrayBuffer = global[ARRAY_BUFFER];\nvar $ArrayBuffer = NativeArrayBuffer;\nvar ArrayBufferPrototype = $ArrayBuffer && $ArrayBuffer[PROTOTYPE];\nvar $DataView = global[DATA_VIEW];\nvar DataViewPrototype = $DataView && $DataView[PROTOTYPE];\nvar ObjectPrototype = Object.prototype;\nvar Array = global.Array;\nvar RangeError = global.RangeError;\nvar fill = uncurryThis(arrayFill);\nvar reverse = uncurryThis([].reverse);\n\nvar packIEEE754 = IEEE754.pack;\nvar unpackIEEE754 = IEEE754.unpack;\n\nvar packInt8 = function (number) {\n return [number & 0xFF];\n};\n\nvar packInt16 = function (number) {\n return [number & 0xFF, number >> 8 & 0xFF];\n};\n\nvar packInt32 = function (number) {\n return [number & 0xFF, number >> 8 & 0xFF, number >> 16 & 0xFF, number >> 24 & 0xFF];\n};\n\nvar unpackInt32 = function (buffer) {\n return buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0];\n};\n\nvar packFloat32 = function (number) {\n return packIEEE754(fround(number), 23, 4);\n};\n\nvar packFloat64 = function (number) {\n return packIEEE754(number, 52, 8);\n};\n\nvar addGetter = function (Constructor, key, getInternalState) {\n defineBuiltInAccessor(Constructor[PROTOTYPE], key, {\n configurable: true,\n get: function () {\n return getInternalState(this)[key];\n }\n });\n};\n\nvar get = function (view, count, index, isLittleEndian) {\n var store = getInternalDataViewState(view);\n var intIndex = toIndex(index);\n var boolIsLittleEndian = !!isLittleEndian;\n if (intIndex + count > store.byteLength) throw new RangeError(WRONG_INDEX);\n var bytes = store.bytes;\n var start = intIndex + store.byteOffset;\n var pack = arraySlice(bytes, start, start + count);\n return boolIsLittleEndian ? pack : reverse(pack);\n};\n\nvar set = function (view, count, index, conversion, value, isLittleEndian) {\n var store = getInternalDataViewState(view);\n var intIndex = toIndex(index);\n var pack = conversion(+value);\n var boolIsLittleEndian = !!isLittleEndian;\n if (intIndex + count > store.byteLength) throw new RangeError(WRONG_INDEX);\n var bytes = store.bytes;\n var start = intIndex + store.byteOffset;\n for (var i = 0; i < count; i++) bytes[start + i] = pack[boolIsLittleEndian ? i : count - i - 1];\n};\n\nif (!NATIVE_ARRAY_BUFFER) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, ArrayBufferPrototype);\n var byteLength = toIndex(length);\n setInternalState(this, {\n type: ARRAY_BUFFER,\n bytes: fill(Array(byteLength), 0),\n byteLength: byteLength\n });\n if (!DESCRIPTORS) {\n this.byteLength = byteLength;\n this.detached = false;\n }\n };\n\n ArrayBufferPrototype = $ArrayBuffer[PROTOTYPE];\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, DataViewPrototype);\n anInstance(buffer, ArrayBufferPrototype);\n var bufferState = getInternalArrayBufferState(buffer);\n var bufferLength = bufferState.byteLength;\n var offset = toIntegerOrInfinity(byteOffset);\n if (offset < 0 || offset > bufferLength) throw new RangeError('Wrong offset');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw new RangeError(WRONG_LENGTH);\n setInternalState(this, {\n type: DATA_VIEW,\n buffer: buffer,\n byteLength: byteLength,\n byteOffset: offset,\n bytes: bufferState.bytes\n });\n if (!DESCRIPTORS) {\n this.buffer = buffer;\n this.byteLength = byteLength;\n this.byteOffset = offset;\n }\n };\n\n DataViewPrototype = $DataView[PROTOTYPE];\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, 'byteLength', getInternalArrayBufferState);\n addGetter($DataView, 'buffer', getInternalDataViewState);\n addGetter($DataView, 'byteLength', getInternalDataViewState);\n addGetter($DataView, 'byteOffset', getInternalDataViewState);\n }\n\n defineBuiltIns(DataViewPrototype, {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : false);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : false);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : false));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : false)) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : false), 23);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments.length > 1 ? arguments[1] : false), 52);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packInt8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packInt8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : false);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : false);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : false);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : false);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packFloat32, value, arguments.length > 2 ? arguments[2] : false);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packFloat64, value, arguments.length > 2 ? arguments[2] : false);\n }\n });\n} else {\n var INCORRECT_ARRAY_BUFFER_NAME = PROPER_FUNCTION_NAME && NativeArrayBuffer.name !== ARRAY_BUFFER;\n /* eslint-disable no-new -- required for testing */\n if (!fails(function () {\n NativeArrayBuffer(1);\n }) || !fails(function () {\n new NativeArrayBuffer(-1);\n }) || fails(function () {\n new NativeArrayBuffer();\n new NativeArrayBuffer(1.5);\n new NativeArrayBuffer(NaN);\n return NativeArrayBuffer.length !== 1 || INCORRECT_ARRAY_BUFFER_NAME && !CONFIGURABLE_FUNCTION_NAME;\n })) {\n /* eslint-enable no-new -- required for testing */\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, ArrayBufferPrototype);\n return new NativeArrayBuffer(toIndex(length));\n };\n\n $ArrayBuffer[PROTOTYPE] = ArrayBufferPrototype;\n\n for (var keys = getOwnPropertyNames(NativeArrayBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) {\n createNonEnumerableProperty($ArrayBuffer, key, NativeArrayBuffer[key]);\n }\n }\n\n ArrayBufferPrototype.constructor = $ArrayBuffer;\n } else if (INCORRECT_ARRAY_BUFFER_NAME && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(NativeArrayBuffer, 'name', ARRAY_BUFFER);\n }\n\n // WebKit bug - the same parent prototype for typed arrays and data view\n if (setPrototypeOf && getPrototypeOf(DataViewPrototype) !== ObjectPrototype) {\n setPrototypeOf(DataViewPrototype, ObjectPrototype);\n }\n\n // iOS Safari 7.x bug\n var testView = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = uncurryThis(DataViewPrototype.setInt8);\n testView.setInt8(0, 2147483648);\n testView.setInt8(1, 2147483649);\n if (testView.getInt8(0) || !testView.getInt8(1)) defineBuiltIns(DataViewPrototype, {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8(this, byteOffset, value << 24 >> 24);\n }\n }, { unsafe: true });\n}\n\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\n\nmodule.exports = {\n ArrayBuffer: $ArrayBuffer,\n DataView: $DataView\n};\n","'use strict';\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.fill` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.fill\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = lengthOfArrayLike(O);\n var argumentsLength = arguments.length;\n var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length);\n var end = argumentsLength > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","'use strict';\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\nmodule.exports = function (Constructor, list, $length) {\n var index = 0;\n var length = arguments.length > 2 ? $length : lengthOfArrayLike(list);\n var result = new Constructor(length);\n while (length > index) result[index] = list[index++];\n return result;\n};\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ findLast, findLastIndex }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_FIND_LAST_INDEX = TYPE === 1;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var index = lengthOfArrayLike(self);\n var boundFunction = bind(callbackfn, that);\n var value, result;\n while (index-- > 0) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (result) switch (TYPE) {\n case 0: return value; // findLast\n case 1: return index; // findLastIndex\n }\n }\n return IS_FIND_LAST_INDEX ? -1 : undefined;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.findLast` method\n // https://github.com/tc39/proposal-array-find-from-last\n findLast: createMethod(0),\n // `Array.prototype.findLastIndex` method\n // https://github.com/tc39/proposal-array-find-from-last\n findLastIndex: createMethod(1)\n};\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = uncurryThis([].push);\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE === 1;\n var IS_FILTER = TYPE === 2;\n var IS_SOME = TYPE === 3;\n var IS_EVERY = TYPE === 4;\n var IS_FIND_INDEX = TYPE === 6;\n var IS_FILTER_REJECT = TYPE === 7;\n var NO_HOLES = TYPE === 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var length = lengthOfArrayLike(self);\n var boundFunction = bind(callbackfn, that);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push(target, value); // filter\n } else switch (TYPE) {\n case 4: return false; // every\n case 7: push(target, value); // filterReject\n }\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.es/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.es/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.es/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.es/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.es/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.es/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6),\n // `Array.prototype.filterReject` method\n // https://github.com/tc39/proposal-array-filtering\n filterReject: createMethod(7)\n};\n","'use strict';\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\n\nvar $Array = Array;\nvar max = Math.max;\n\nmodule.exports = function (O, start, end) {\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n var result = $Array(max(fin - k, 0));\n var n = 0;\n for (; k < fin; k++, n++) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n};\n","'use strict';\nvar arraySlice = require('../internals/array-slice-simple');\n\nvar floor = Math.floor;\n\nvar mergeSort = function (array, comparefn) {\n var length = array.length;\n var middle = floor(length / 2);\n return length < 8 ? insertionSort(array, comparefn) : merge(\n array,\n mergeSort(arraySlice(array, 0, middle), comparefn),\n mergeSort(arraySlice(array, middle), comparefn),\n comparefn\n );\n};\n\nvar insertionSort = function (array, comparefn) {\n var length = array.length;\n var i = 1;\n var element, j;\n\n while (i < length) {\n j = i;\n element = array[i];\n while (j && comparefn(array[j - 1], element) > 0) {\n array[j] = array[--j];\n }\n if (j !== i++) array[j] = element;\n } return array;\n};\n\nvar merge = function (array, left, right, comparefn) {\n var llength = left.length;\n var rlength = right.length;\n var lindex = 0;\n var rindex = 0;\n\n while (lindex < llength || rindex < rlength) {\n array[lindex + rindex] = (lindex < llength && rindex < rlength)\n ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]\n : lindex < llength ? left[lindex++] : right[rindex++];\n } return array;\n};\n\nmodule.exports = mergeSort;\n","'use strict';\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\nvar $Array = Array;\n\n// a part of `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (isConstructor(C) && (C === $Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? $Array : C;\n};\n","'use strict';\nvar arraySpeciesConstructor = require('../internals/array-species-constructor');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\n};\n","'use strict';\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// https://tc39.es/proposal-change-array-by-copy/#sec-array.prototype.toReversed\n// https://tc39.es/proposal-change-array-by-copy/#sec-%typedarray%.prototype.toReversed\nmodule.exports = function (O, C) {\n var len = lengthOfArrayLike(O);\n var A = new C(len);\n var k = 0;\n for (; k < len; k++) A[k] = O[len - k - 1];\n return A;\n};\n","'use strict';\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar $RangeError = RangeError;\n\n// https://tc39.es/proposal-change-array-by-copy/#sec-array.prototype.with\n// https://tc39.es/proposal-change-array-by-copy/#sec-%typedarray%.prototype.with\nmodule.exports = function (O, C, index, value) {\n var len = lengthOfArrayLike(O);\n var relativeIndex = toIntegerOrInfinity(index);\n var actualIndex = relativeIndex < 0 ? len + relativeIndex : relativeIndex;\n if (actualIndex >= len || actualIndex < 0) throw new $RangeError('Incorrect index');\n var A = new C(len);\n var k = 0;\n for (; k < len; k++) A[k] = k === actualIndex ? value : O[k];\n return A;\n};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n try {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n } catch (error) { return false; } // workaround of old WebKit + `eval` bug\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n","'use strict';\nvar toPropertyKey = require('../internals/to-property-key');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPropertyKey(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","'use strict';\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineProperty = require('../internals/object-define-property');\n\nmodule.exports = function (target, name, descriptor) {\n if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });\n if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });\n return defineProperty.f(target, name, descriptor);\n};\n","'use strict';\nvar defineBuiltIn = require('../internals/define-built-in');\n\nmodule.exports = function (target, src, options) {\n for (var key in src) defineBuiltIn(target, key, src[key], options);\n return target;\n};\n","'use strict';\nvar userAgent = require('../internals/engine-user-agent');\n\nvar firefox = userAgent.match(/firefox\\/(\\d+)/i);\n\nmodule.exports = !!firefox && +firefox[1];\n","'use strict';\nvar UA = require('../internals/engine-user-agent');\n\nmodule.exports = /MSIE|Trident/.test(UA);\n","'use strict';\nvar userAgent = require('../internals/engine-user-agent');\n\nvar webkit = userAgent.match(/AppleWebKit\\/(\\d+)\\./);\n\nmodule.exports = !!webkit && +webkit[1];\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar aCallable = require('../internals/a-callable');\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n aCallable(fn);\n return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","'use strict';\nvar classof = require('../internals/classof');\nvar getMethod = require('../internals/get-method');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (!isNullOrUndefined(it)) return getMethod(it, ITERATOR)\n || getMethod(it, '@@iterator')\n || Iterators[classof(it)];\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument, usingIterator) {\n var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n throw new $TypeError(tryToString(argument) + ' is not iterable');\n};\n","'use strict';\n// IEEE754 conversions based on https://github.com/feross/ieee754\nvar $Array = Array;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\n\nvar pack = function (number, mantissaLength, bytes) {\n var buffer = $Array(bytes);\n var exponentLength = bytes * 8 - mantissaLength - 1;\n var eMax = (1 << exponentLength) - 1;\n var eBias = eMax >> 1;\n var rt = mantissaLength === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var sign = number < 0 || number === 0 && 1 / number < 0 ? 1 : 0;\n var index = 0;\n var exponent, mantissa, c;\n number = abs(number);\n // eslint-disable-next-line no-self-compare -- NaN check\n if (number !== number || number === Infinity) {\n // eslint-disable-next-line no-self-compare -- NaN check\n mantissa = number !== number ? 1 : 0;\n exponent = eMax;\n } else {\n exponent = floor(log(number) / LN2);\n c = pow(2, -exponent);\n if (number * c < 1) {\n exponent--;\n c *= 2;\n }\n if (exponent + eBias >= 1) {\n number += rt / c;\n } else {\n number += rt * pow(2, 1 - eBias);\n }\n if (number * c >= 2) {\n exponent++;\n c /= 2;\n }\n if (exponent + eBias >= eMax) {\n mantissa = 0;\n exponent = eMax;\n } else if (exponent + eBias >= 1) {\n mantissa = (number * c - 1) * pow(2, mantissaLength);\n exponent += eBias;\n } else {\n mantissa = number * pow(2, eBias - 1) * pow(2, mantissaLength);\n exponent = 0;\n }\n }\n while (mantissaLength >= 8) {\n buffer[index++] = mantissa & 255;\n mantissa /= 256;\n mantissaLength -= 8;\n }\n exponent = exponent << mantissaLength | mantissa;\n exponentLength += mantissaLength;\n while (exponentLength > 0) {\n buffer[index++] = exponent & 255;\n exponent /= 256;\n exponentLength -= 8;\n }\n buffer[--index] |= sign * 128;\n return buffer;\n};\n\nvar unpack = function (buffer, mantissaLength) {\n var bytes = buffer.length;\n var exponentLength = bytes * 8 - mantissaLength - 1;\n var eMax = (1 << exponentLength) - 1;\n var eBias = eMax >> 1;\n var nBits = exponentLength - 7;\n var index = bytes - 1;\n var sign = buffer[index--];\n var exponent = sign & 127;\n var mantissa;\n sign >>= 7;\n while (nBits > 0) {\n exponent = exponent * 256 + buffer[index--];\n nBits -= 8;\n }\n mantissa = exponent & (1 << -nBits) - 1;\n exponent >>= -nBits;\n nBits += mantissaLength;\n while (nBits > 0) {\n mantissa = mantissa * 256 + buffer[index--];\n nBits -= 8;\n }\n if (exponent === 0) {\n exponent = 1 - eBias;\n } else if (exponent === eMax) {\n return mantissa ? NaN : sign ? -Infinity : Infinity;\n } else {\n mantissa += pow(2, mantissaLength);\n exponent -= eBias;\n } return (sign ? -1 : 1) * mantissa * pow(2, exponent - mantissaLength);\n};\n\nmodule.exports = {\n pack: pack,\n unpack: unpack\n};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","'use strict';\nvar classof = require('../internals/classof');\n\nmodule.exports = function (it) {\n var klass = classof(it);\n return klass === 'BigInt64Array' || klass === 'BigUint64Array';\n};\n","'use strict';\nvar isObject = require('../internals/is-object');\n\nvar floor = Math.floor;\n\n// `IsIntegralNumber` abstract operation\n// https://tc39.es/ecma262/#sec-isintegralnumber\n// eslint-disable-next-line es/no-number-isinteger -- safe\nmodule.exports = Number.isInteger || function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","'use strict';\nvar isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) === 'RegExp');\n};\n","'use strict';\nvar sign = require('../internals/math-sign');\n\nvar abs = Math.abs;\n\nvar EPSILON = 2.220446049250313e-16; // Number.EPSILON\nvar INVERSE_EPSILON = 1 / EPSILON;\n\nvar roundTiesToEven = function (n) {\n return n + INVERSE_EPSILON - INVERSE_EPSILON;\n};\n\nmodule.exports = function (x, FLOAT_EPSILON, FLOAT_MAX_VALUE, FLOAT_MIN_VALUE) {\n var n = +x;\n var absolute = abs(n);\n var s = sign(n);\n if (absolute < FLOAT_MIN_VALUE) return s * roundTiesToEven(absolute / FLOAT_MIN_VALUE / FLOAT_EPSILON) * FLOAT_MIN_VALUE * FLOAT_EPSILON;\n var a = (1 + FLOAT_EPSILON / EPSILON) * absolute;\n var result = a - (a - absolute);\n // eslint-disable-next-line no-self-compare -- NaN check\n if (result > FLOAT_MAX_VALUE || result !== result) return s * Infinity;\n return s * result;\n};\n","'use strict';\nvar floatRound = require('../internals/math-float-round');\n\nvar FLOAT32_EPSILON = 1.1920928955078125e-7; // 2 ** -23;\nvar FLOAT32_MAX_VALUE = 3.4028234663852886e+38; // 2 ** 128 - 2 ** 104\nvar FLOAT32_MIN_VALUE = 1.1754943508222875e-38; // 2 ** -126;\n\n// `Math.fround` method implementation\n// https://tc39.es/ecma262/#sec-math.fround\n// eslint-disable-next-line es/no-math-fround -- safe\nmodule.exports = Math.fround || function fround(x) {\n return floatRound(x, FLOAT32_EPSILON, FLOAT32_MAX_VALUE, FLOAT32_MIN_VALUE);\n};\n","'use strict';\n// `Math.sign` method implementation\n// https://tc39.es/ecma262/#sec-math.sign\n// eslint-disable-next-line es/no-math-sign -- safe\nmodule.exports = Math.sign || function sign(x) {\n var n = +x;\n // eslint-disable-next-line no-self-compare -- NaN check\n return n === 0 || n !== n ? n : n < 0 ? -1 : 1;\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar hasOwn = require('../internals/has-own-property');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar regExpFlags = require('../internals/regexp-flags');\n\nvar RegExpPrototype = RegExp.prototype;\n\nmodule.exports = function (R) {\n var flags = R.flags;\n return flags === undefined && !('flags' in RegExpPrototype) && !hasOwn(R, 'flags') && isPrototypeOf(RegExpPrototype, R)\n ? call(regExpFlags, R) : flags;\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineBuiltInAccessor(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\n\nvar $TypeError = TypeError;\n\n// `ToBigInt` abstract operation\n// https://tc39.es/ecma262/#sec-tobigint\nmodule.exports = function (argument) {\n var prim = toPrimitive(argument, 'number');\n if (typeof prim == 'number') throw new $TypeError(\"Can't convert number to bigint\");\n // eslint-disable-next-line es/no-bigint -- safe\n return BigInt(prim);\n};\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toLength = require('../internals/to-length');\n\nvar $RangeError = RangeError;\n\n// `ToIndex` abstract operation\n// https://tc39.es/ecma262/#sec-toindex\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toIntegerOrInfinity(it);\n var length = toLength(number);\n if (number !== length) throw new $RangeError('Wrong length or index');\n return length;\n};\n","'use strict';\nvar toPositiveInteger = require('../internals/to-positive-integer');\n\nvar $RangeError = RangeError;\n\nmodule.exports = function (it, BYTES) {\n var offset = toPositiveInteger(it);\n if (offset % BYTES) throw new $RangeError('Wrong offset');\n return offset;\n};\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar $RangeError = RangeError;\n\nmodule.exports = function (it) {\n var result = toIntegerOrInfinity(it);\n if (result < 0) throw new $RangeError(\"The argument can't be less than 0\");\n return result;\n};\n","'use strict';\nvar round = Math.round;\n\nmodule.exports = function (it) {\n var value = round(it);\n return value < 0 ? 0 : value > 0xFF ? 0xFF : value & 0xFF;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = require('../internals/typed-array-constructors-require-wrappers');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar ArrayBufferModule = require('../internals/array-buffer');\nvar anInstance = require('../internals/an-instance');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar isIntegralNumber = require('../internals/is-integral-number');\nvar toLength = require('../internals/to-length');\nvar toIndex = require('../internals/to-index');\nvar toOffset = require('../internals/to-offset');\nvar toUint8Clamped = require('../internals/to-uint8-clamped');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar classof = require('../internals/classof');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar create = require('../internals/object-create');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar typedArrayFrom = require('../internals/typed-array-from');\nvar forEach = require('../internals/array-iteration').forEach;\nvar setSpecies = require('../internals/set-species');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar definePropertyModule = require('../internals/object-define-property');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar InternalStateModule = require('../internals/internal-state');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar enforceInternalState = InternalStateModule.enforce;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar RangeError = global.RangeError;\nvar ArrayBuffer = ArrayBufferModule.ArrayBuffer;\nvar ArrayBufferPrototype = ArrayBuffer.prototype;\nvar DataView = ArrayBufferModule.DataView;\nvar NATIVE_ARRAY_BUFFER_VIEWS = ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS;\nvar TYPED_ARRAY_TAG = ArrayBufferViewCore.TYPED_ARRAY_TAG;\nvar TypedArray = ArrayBufferViewCore.TypedArray;\nvar TypedArrayPrototype = ArrayBufferViewCore.TypedArrayPrototype;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar isTypedArray = ArrayBufferViewCore.isTypedArray;\nvar BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\nvar WRONG_LENGTH = 'Wrong length';\n\nvar fromList = function (C, list) {\n aTypedArrayConstructor(C);\n var index = 0;\n var length = list.length;\n var result = new C(length);\n while (length > index) result[index] = list[index++];\n return result;\n};\n\nvar addGetter = function (it, key) {\n defineBuiltInAccessor(it, key, {\n configurable: true,\n get: function () {\n return getInternalState(this)[key];\n }\n });\n};\n\nvar isArrayBuffer = function (it) {\n var klass;\n return isPrototypeOf(ArrayBufferPrototype, it) || (klass = classof(it)) === 'ArrayBuffer' || klass === 'SharedArrayBuffer';\n};\n\nvar isTypedArrayIndex = function (target, key) {\n return isTypedArray(target)\n && !isSymbol(key)\n && key in target\n && isIntegralNumber(+key)\n && key >= 0;\n};\n\nvar wrappedGetOwnPropertyDescriptor = function getOwnPropertyDescriptor(target, key) {\n key = toPropertyKey(key);\n return isTypedArrayIndex(target, key)\n ? createPropertyDescriptor(2, target[key])\n : nativeGetOwnPropertyDescriptor(target, key);\n};\n\nvar wrappedDefineProperty = function defineProperty(target, key, descriptor) {\n key = toPropertyKey(key);\n if (isTypedArrayIndex(target, key)\n && isObject(descriptor)\n && hasOwn(descriptor, 'value')\n && !hasOwn(descriptor, 'get')\n && !hasOwn(descriptor, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !descriptor.configurable\n && (!hasOwn(descriptor, 'writable') || descriptor.writable)\n && (!hasOwn(descriptor, 'enumerable') || descriptor.enumerable)\n ) {\n target[key] = descriptor.value;\n return target;\n } return nativeDefineProperty(target, key, descriptor);\n};\n\nif (DESCRIPTORS) {\n if (!NATIVE_ARRAY_BUFFER_VIEWS) {\n getOwnPropertyDescriptorModule.f = wrappedGetOwnPropertyDescriptor;\n definePropertyModule.f = wrappedDefineProperty;\n addGetter(TypedArrayPrototype, 'buffer');\n addGetter(TypedArrayPrototype, 'byteOffset');\n addGetter(TypedArrayPrototype, 'byteLength');\n addGetter(TypedArrayPrototype, 'length');\n }\n\n $({ target: 'Object', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS }, {\n getOwnPropertyDescriptor: wrappedGetOwnPropertyDescriptor,\n defineProperty: wrappedDefineProperty\n });\n\n module.exports = function (TYPE, wrapper, CLAMPED) {\n var BYTES = TYPE.match(/\\d+/)[0] / 8;\n var CONSTRUCTOR_NAME = TYPE + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + TYPE;\n var SETTER = 'set' + TYPE;\n var NativeTypedArrayConstructor = global[CONSTRUCTOR_NAME];\n var TypedArrayConstructor = NativeTypedArrayConstructor;\n var TypedArrayConstructorPrototype = TypedArrayConstructor && TypedArrayConstructor.prototype;\n var exported = {};\n\n var getter = function (that, index) {\n var data = getInternalState(that);\n return data.view[GETTER](index * BYTES + data.byteOffset, true);\n };\n\n var setter = function (that, index, value) {\n var data = getInternalState(that);\n data.view[SETTER](index * BYTES + data.byteOffset, CLAMPED ? toUint8Clamped(value) : value, true);\n };\n\n var addElement = function (that, index) {\n nativeDefineProperty(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n\n if (!NATIVE_ARRAY_BUFFER_VIEWS) {\n TypedArrayConstructor = wrapper(function (that, data, offset, $length) {\n anInstance(that, TypedArrayConstructorPrototype);\n var index = 0;\n var byteOffset = 0;\n var buffer, byteLength, length;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new ArrayBuffer(byteLength);\n } else if (isArrayBuffer(data)) {\n buffer = data;\n byteOffset = toOffset(offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw new RangeError(WRONG_LENGTH);\n byteLength = $len - byteOffset;\n if (byteLength < 0) throw new RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + byteOffset > $len) throw new RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (isTypedArray(data)) {\n return fromList(TypedArrayConstructor, data);\n } else {\n return call(typedArrayFrom, TypedArrayConstructor, data);\n }\n setInternalState(that, {\n buffer: buffer,\n byteOffset: byteOffset,\n byteLength: byteLength,\n length: length,\n view: new DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n\n if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\n TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = create(TypedArrayPrototype);\n } else if (TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS) {\n TypedArrayConstructor = wrapper(function (dummy, data, typedArrayOffset, $length) {\n anInstance(dummy, TypedArrayConstructorPrototype);\n return inheritIfRequired(function () {\n if (!isObject(data)) return new NativeTypedArrayConstructor(toIndex(data));\n if (isArrayBuffer(data)) return $length !== undefined\n ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES), $length)\n : typedArrayOffset !== undefined\n ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES))\n : new NativeTypedArrayConstructor(data);\n if (isTypedArray(data)) return fromList(TypedArrayConstructor, data);\n return call(typedArrayFrom, TypedArrayConstructor, data);\n }(), dummy, TypedArrayConstructor);\n });\n\n if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\n forEach(getOwnPropertyNames(NativeTypedArrayConstructor), function (key) {\n if (!(key in TypedArrayConstructor)) {\n createNonEnumerableProperty(TypedArrayConstructor, key, NativeTypedArrayConstructor[key]);\n }\n });\n TypedArrayConstructor.prototype = TypedArrayConstructorPrototype;\n }\n\n if (TypedArrayConstructorPrototype.constructor !== TypedArrayConstructor) {\n createNonEnumerableProperty(TypedArrayConstructorPrototype, 'constructor', TypedArrayConstructor);\n }\n\n enforceInternalState(TypedArrayConstructorPrototype).TypedArrayConstructor = TypedArrayConstructor;\n\n if (TYPED_ARRAY_TAG) {\n createNonEnumerableProperty(TypedArrayConstructorPrototype, TYPED_ARRAY_TAG, CONSTRUCTOR_NAME);\n }\n\n var FORCED = TypedArrayConstructor !== NativeTypedArrayConstructor;\n\n exported[CONSTRUCTOR_NAME] = TypedArrayConstructor;\n\n $({ global: true, constructor: true, forced: FORCED, sham: !NATIVE_ARRAY_BUFFER_VIEWS }, exported);\n\n if (!(BYTES_PER_ELEMENT in TypedArrayConstructor)) {\n createNonEnumerableProperty(TypedArrayConstructor, BYTES_PER_ELEMENT, BYTES);\n }\n\n if (!(BYTES_PER_ELEMENT in TypedArrayConstructorPrototype)) {\n createNonEnumerableProperty(TypedArrayConstructorPrototype, BYTES_PER_ELEMENT, BYTES);\n }\n\n setSpecies(CONSTRUCTOR_NAME);\n };\n} else module.exports = function () { /* empty */ };\n","'use strict';\n/* eslint-disable no-new -- required for testing */\nvar global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar NATIVE_ARRAY_BUFFER_VIEWS = require('../internals/array-buffer-view-core').NATIVE_ARRAY_BUFFER_VIEWS;\n\nvar ArrayBuffer = global.ArrayBuffer;\nvar Int8Array = global.Int8Array;\n\nmodule.exports = !NATIVE_ARRAY_BUFFER_VIEWS || !fails(function () {\n Int8Array(1);\n}) || !fails(function () {\n new Int8Array(-1);\n}) || !checkCorrectnessOfIteration(function (iterable) {\n new Int8Array();\n new Int8Array(null);\n new Int8Array(1.5);\n new Int8Array(iterable);\n}, true) || fails(function () {\n // Safari (11+) bug - a reason why even Safari 13 should load a typed array polyfill\n return new Int8Array(new ArrayBuffer(2), 1, undefined).length !== 1;\n});\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar aConstructor = require('../internals/a-constructor');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar isBigIntArray = require('../internals/is-big-int-array');\nvar aTypedArrayConstructor = require('../internals/array-buffer-view-core').aTypedArrayConstructor;\nvar toBigInt = require('../internals/to-big-int');\n\nmodule.exports = function from(source /* , mapfn, thisArg */) {\n var C = aConstructor(this);\n var O = toObject(source);\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iteratorMethod = getIteratorMethod(O);\n var i, length, result, thisIsBigIntArray, value, step, iterator, next;\n if (iteratorMethod && !isArrayIteratorMethod(iteratorMethod)) {\n iterator = getIterator(O, iteratorMethod);\n next = iterator.next;\n O = [];\n while (!(step = call(next, iterator)).done) {\n O.push(step.value);\n }\n }\n if (mapping && argumentsLength > 2) {\n mapfn = bind(mapfn, arguments[2]);\n }\n length = lengthOfArrayLike(O);\n result = new (aTypedArrayConstructor(C))(length);\n thisIsBigIntArray = isBigIntArray(result);\n for (i = 0; length > i; i++) {\n value = mapping ? mapfn(O[i], i) : O[i];\n // FF30- typed arrays doesn't properly convert objects to typed array values\n result[i] = thisIsBigIntArray ? toBigInt(value) : +value;\n }\n return result;\n};\n","'use strict';\n// this method was added to unscopables after implementation\n// in popular engines, so it's moved to a separate module\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('flatMap');\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar isCallable = require('../internals/is-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar isRegExp = require('../internals/is-regexp');\nvar toString = require('../internals/to-string');\nvar getMethod = require('../internals/get-method');\nvar getRegExpFlags = require('../internals/regexp-get-flags');\nvar getSubstitution = require('../internals/get-substitution');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar REPLACE = wellKnownSymbol('replace');\nvar $TypeError = TypeError;\nvar indexOf = uncurryThis(''.indexOf);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\nvar max = Math.max;\n\nvar stringIndexOf = function (string, searchValue, fromIndex) {\n if (fromIndex > string.length) return -1;\n if (searchValue === '') return fromIndex;\n return indexOf(string, searchValue, fromIndex);\n};\n\n// `String.prototype.replaceAll` method\n// https://tc39.es/ecma262/#sec-string.prototype.replaceall\n$({ target: 'String', proto: true }, {\n replaceAll: function replaceAll(searchValue, replaceValue) {\n var O = requireObjectCoercible(this);\n var IS_REG_EXP, flags, replacer, string, searchString, functionalReplace, searchLength, advanceBy, replacement;\n var position = 0;\n var endOfLastMatch = 0;\n var result = '';\n if (!isNullOrUndefined(searchValue)) {\n IS_REG_EXP = isRegExp(searchValue);\n if (IS_REG_EXP) {\n flags = toString(requireObjectCoercible(getRegExpFlags(searchValue)));\n if (!~indexOf(flags, 'g')) throw new $TypeError('`.replaceAll` does not allow non-global regexes');\n }\n replacer = getMethod(searchValue, REPLACE);\n if (replacer) {\n return call(replacer, searchValue, O, replaceValue);\n } else if (IS_PURE && IS_REG_EXP) {\n return replace(toString(O), searchValue, replaceValue);\n }\n }\n string = toString(O);\n searchString = toString(searchValue);\n functionalReplace = isCallable(replaceValue);\n if (!functionalReplace) replaceValue = toString(replaceValue);\n searchLength = searchString.length;\n advanceBy = max(1, searchLength);\n position = stringIndexOf(string, searchString, 0);\n while (position !== -1) {\n replacement = functionalReplace\n ? toString(replaceValue(searchString, position, string))\n : getSubstitution(searchString, string, position, [], undefined, replaceValue);\n result += stringSlice(string, endOfLastMatch, position) + replacement;\n endOfLastMatch = position + searchLength;\n position = stringIndexOf(string, searchString, position + advanceBy);\n }\n if (endOfLastMatch < string.length) {\n result += stringSlice(string, endOfLastMatch);\n }\n return result;\n }\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.at` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.at\nexportTypedArrayMethod('at', function at(index) {\n var O = aTypedArray(this);\n var len = lengthOfArrayLike(O);\n var relativeIndex = toIntegerOrInfinity(index);\n var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;\n return (k < 0 || k >= len) ? undefined : O[k];\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $fill = require('../internals/array-fill');\nvar toBigInt = require('../internals/to-big-int');\nvar classof = require('../internals/classof');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar slice = uncurryThis(''.slice);\n\n// V8 ~ Chrome < 59, Safari < 14.1, FF < 55, Edge <=18\nvar CONVERSION_BUG = fails(function () {\n var count = 0;\n // eslint-disable-next-line es/no-typed-arrays -- safe\n new Int8Array(2).fill({ valueOf: function () { return count++; } });\n return count !== 1;\n});\n\n// `%TypedArray%.prototype.fill` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.fill\nexportTypedArrayMethod('fill', function fill(value /* , start, end */) {\n var length = arguments.length;\n aTypedArray(this);\n var actualValue = slice(classof(this), 0, 3) === 'Big' ? toBigInt(value) : +value;\n return call($fill, this, actualValue, length > 1 ? arguments[1] : undefined, length > 2 ? arguments[2] : undefined);\n}, CONVERSION_BUG);\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $findLastIndex = require('../internals/array-iteration-from-last').findLastIndex;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.findLastIndex` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.findlastindex\nexportTypedArrayMethod('findLastIndex', function findLastIndex(predicate /* , thisArg */) {\n return $findLastIndex(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $findLast = require('../internals/array-iteration-from-last').findLast;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.findLast` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.findlast\nexportTypedArrayMethod('findLast', function findLast(predicate /* , thisArg */) {\n return $findLast(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toOffset = require('../internals/to-offset');\nvar toIndexedObject = require('../internals/to-object');\nvar fails = require('../internals/fails');\n\nvar RangeError = global.RangeError;\nvar Int8Array = global.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar $set = Int8ArrayPrototype && Int8ArrayPrototype.set;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS = !fails(function () {\n // eslint-disable-next-line es/no-typed-arrays -- required for testing\n var array = new Uint8ClampedArray(2);\n call($set, array, { length: 1, 0: 3 }, 1);\n return array[1] !== 3;\n});\n\n// https://bugs.chromium.org/p/v8/issues/detail?id=11294 and other\nvar TO_OBJECT_BUG = WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS && ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS && fails(function () {\n var array = new Int8Array(2);\n array.set(1);\n array.set('2', 1);\n return array[0] !== 0 || array[1] !== 2;\n});\n\n// `%TypedArray%.prototype.set` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.set\nexportTypedArrayMethod('set', function set(arrayLike /* , offset */) {\n aTypedArray(this);\n var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1);\n var src = toIndexedObject(arrayLike);\n if (WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS) return call($set, this, src, offset);\n var length = this.length;\n var len = lengthOfArrayLike(src);\n var index = 0;\n if (len + offset > length) throw new RangeError('Wrong length');\n while (index < len) this[offset + index] = src[index++];\n}, !WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS || TO_OBJECT_BUG);\n","'use strict';\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar fails = require('../internals/fails');\nvar aCallable = require('../internals/a-callable');\nvar internalSort = require('../internals/array-sort');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar FF = require('../internals/engine-ff-version');\nvar IE_OR_EDGE = require('../internals/engine-is-ie-or-edge');\nvar V8 = require('../internals/engine-v8-version');\nvar WEBKIT = require('../internals/engine-webkit-version');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar Uint16Array = global.Uint16Array;\nvar nativeSort = Uint16Array && uncurryThis(Uint16Array.prototype.sort);\n\n// WebKit\nvar ACCEPT_INCORRECT_ARGUMENTS = !!nativeSort && !(fails(function () {\n nativeSort(new Uint16Array(2), null);\n}) && fails(function () {\n nativeSort(new Uint16Array(2), {});\n}));\n\nvar STABLE_SORT = !!nativeSort && !fails(function () {\n // feature detection can be too slow, so check engines versions\n if (V8) return V8 < 74;\n if (FF) return FF < 67;\n if (IE_OR_EDGE) return true;\n if (WEBKIT) return WEBKIT < 602;\n\n var array = new Uint16Array(516);\n var expected = Array(516);\n var index, mod;\n\n for (index = 0; index < 516; index++) {\n mod = index % 4;\n array[index] = 515 - index;\n expected[index] = index - 2 * mod + 3;\n }\n\n nativeSort(array, function (a, b) {\n return (a / 4 | 0) - (b / 4 | 0);\n });\n\n for (index = 0; index < 516; index++) {\n if (array[index] !== expected[index]) return true;\n }\n});\n\nvar getSortCompare = function (comparefn) {\n return function (x, y) {\n if (comparefn !== undefined) return +comparefn(x, y) || 0;\n // eslint-disable-next-line no-self-compare -- NaN check\n if (y !== y) return -1;\n // eslint-disable-next-line no-self-compare -- NaN check\n if (x !== x) return 1;\n if (x === 0 && y === 0) return 1 / x > 0 && 1 / y < 0 ? 1 : -1;\n return x > y;\n };\n};\n\n// `%TypedArray%.prototype.sort` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.sort\nexportTypedArrayMethod('sort', function sort(comparefn) {\n if (comparefn !== undefined) aCallable(comparefn);\n if (STABLE_SORT) return nativeSort(this, comparefn);\n\n return internalSort(aTypedArray(this), getSortCompare(comparefn));\n}, !STABLE_SORT || ACCEPT_INCORRECT_ARGUMENTS);\n","'use strict';\nvar arrayToReversed = require('../internals/array-to-reversed');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor;\n\n// `%TypedArray%.prototype.toReversed` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.toreversed\nexportTypedArrayMethod('toReversed', function toReversed() {\n return arrayToReversed(aTypedArray(this), getTypedArrayConstructor(this));\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar arrayFromConstructorAndList = require('../internals/array-from-constructor-and-list');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar sort = uncurryThis(ArrayBufferViewCore.TypedArrayPrototype.sort);\n\n// `%TypedArray%.prototype.toSorted` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tosorted\nexportTypedArrayMethod('toSorted', function toSorted(compareFn) {\n if (compareFn !== undefined) aCallable(compareFn);\n var O = aTypedArray(this);\n var A = arrayFromConstructorAndList(getTypedArrayConstructor(O), O);\n return sort(A, compareFn);\n});\n","'use strict';\nvar createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Uint8Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint8', function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","'use strict';\nvar arrayWith = require('../internals/array-with');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar isBigIntArray = require('../internals/is-big-int-array');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toBigInt = require('../internals/to-big-int');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar PROPER_ORDER = !!function () {\n try {\n // eslint-disable-next-line no-throw-literal, es/no-typed-arrays, es/no-array-prototype-with -- required for testing\n new Int8Array(1)['with'](2, { valueOf: function () { throw 8; } });\n } catch (error) {\n // some early implementations, like WebKit, does not follow the final semantic\n // https://github.com/tc39/proposal-change-array-by-copy/pull/86\n return error === 8;\n }\n}();\n\n// `%TypedArray%.prototype.with` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.with\nexportTypedArrayMethod('with', { 'with': function (index, value) {\n var O = aTypedArray(this);\n var relativeIndex = toIntegerOrInfinity(index);\n var actualValue = isBigIntArray(O) ? toBigInt(value) : +value;\n return arrayWith(O, getTypedArrayConstructor(O), relativeIndex, actualValue);\n} }['with'], !PROPER_ORDER);\n","'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n\n const iterator = generator.call(obj);\n\n let result;\n\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n value = +value;\n return Number.isFinite(value) ? value : defaultValue;\n}\n\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz'\n\nconst DIGIT = '0123456789';\n\nconst ALPHABET = {\n DIGIT,\n ALPHA,\n ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n}\n\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n let str = '';\n const {length} = alphabet;\n while (size--) {\n str += alphabet[Math.random() * length|0]\n }\n\n return str;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n ALPHABET,\n generateString,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?object} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = (\n (product) => {\n return hasBrowserEnv && ['ReactNative', 'NativeScript', 'NS'].indexOf(product) < 0\n })(typeof navigator !== 'undefined' && navigator.product);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n if (!hasJSONContentType) {\n return data;\n }\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\nimport utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n// Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n const msie = /(msie|trident)/i.test(navigator.userAgent);\n const urlParsingNode = document.createElement('a');\n let originURL;\n\n /**\n * Parse a URL to discover its components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n let href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n const parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })();\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","'use strict';\n\nimport utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport cookies from './../helpers/cookies.js';\nimport buildURL from './../helpers/buildURL.js';\nimport buildFullPath from '../core/buildFullPath.js';\nimport isURLSameOrigin from './../helpers/isURLSameOrigin.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport speedometer from '../helpers/speedometer.js';\n\nfunction progressEventReducer(listener, isDownloadStream) {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e\n };\n\n data[isDownloadStream ? 'download' : 'upload'] = true;\n\n listener(data);\n };\n}\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n let requestData = config.data;\n const requestHeaders = AxiosHeaders.from(config.headers).normalize();\n let {responseType, withXSRFToken} = config;\n let onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n let contentType;\n\n if (utils.isFormData(requestData)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n requestHeaders.setContentType(false); // Let the browser set it\n } else if ((contentType = requestHeaders.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n requestHeaders.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n\n let request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n const username = config.auth.username || '';\n const password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.set('Authorization', 'Basic ' + btoa(username + ':' + password));\n }\n\n const fullPath = buildFullPath(config.baseURL, config.url);\n\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = config.transitional || transitionalDefaults;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if(platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(config));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(fullPath))) {\n // Add xsrf header\n const xsrfValue = config.xsrfHeaderName && config.xsrfCookieName && cookies.read(config.xsrfCookieName);\n\n if (xsrfValue) {\n requestHeaders.set(config.xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', progressEventReducer(config.onDownloadProgress, true));\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', progressEventReducer(config.onUploadProgress));\n }\n\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(fullPath);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? thing.toJSON() : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)\n };\n\n utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","export const VERSION = \"1.6.2\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n"],"names":["ace","define","e","t","n","r","i","TextHighlightRules","s","constantOtherSymbol","token","regex","qString","qqString","tString","o","constantNumericHex","u","constantNumericBinary","a","constantNumericDecimal","f","l","constantNumericRational","c","constantNumericComplex","h","constantNumericFloat","p","instanceVariable","d","this","$keywords","createKeywordMapper","keyword","v","$rules","start","next","push","defaultToken","onMatch","length","unshift","stateName","split","splitRegex","type","value","rules","heredoc","shift","indentedHeredoc","comment","qStateWithInterpolation","qStateWithoutInterpolation","sStateWithoutInterpolation","sStateWithInterpolation","rState","include","regex_character_class","normalizeRules","inherits","RubyHighlightRules","Range","checkOutdent","test","autoOutdent","getLine","match","findMatchingBracket","row","column","$getIndent","replace","call","prototype","MatchingBraceOutdent","FoldMode","TokenIterator","indentKeywords","def","module","unless","until","begin","elsif","rescue","ensure","when","end","foldingStartMarker","foldingStopMarker","getFoldWidget","getTokenAt","index","getFoldWidgetRange","doc","exec","rubyBlock","openingBracketBlock","closingBracketBlock","getCurrentToken","RegExp","getCurrentTokenRange","step","stepBackward","stepForward","m","g","getCurrentTokenRow","y","$tokenIndex","b","$rowTokens","w","Mode","HighlightRules","$outdent","$behaviour","$defaultBehaviour","foldingRules","lineCommentStart","getNextLineIndent","getTokenizer","getLineTokens","tokens","getTabString","slice","remove","getMatching","undefined","selection","lead","$id","snippetFileId","require","exports","isDark","cssClass","cssText","importCssString","ACE_NAMESPACE","global","window","requirejs","deps","payload","arguments","modules","payloads","original","apply","console","error","trace","_require","parentId","callback","lookup","Object","toString","params","dep","packagedModule","normalizeModule","moduleName","indexOf","chunks","charAt","base","join","previous","mod","id","uri","packaged","req","returnValue","exportAce","ns","root","defineProp","obj","name","val","defineProperty","enumerable","writable","configurable","String","startsWith","searchString","position","lastIndexOf","endsWith","subjectString","lastIndex","repeat","count","result","string","includes","str","assign","target","TypeError","output","source","keys","forEach","key","values","map","k","Array","find","predicate","len","thisArg","kValue","findIndex","item","fill","O","relativeStart","Math","max","min","relativeEnd","final","of","deepCopy","copy","isArray","last","stringReverse","reverse","stringRepeat","trimBeginRegexp","trimEndRegexp","stringTrimLeft","stringTrimRight","copyObject","copyArray","array","arrayToMap","arr","createMap","props","create","arrayRemove","splice","escapeRegExp","escapeHTML","getMatchOffsets","regExp","matches","offset","deferredCall","fcn","timer","deferred","timeout","cancel","setTimeout","schedule","clearTimeout","isPending","delayedCall","defaultTimeout","_self","delay","supportsLookbehind","skipEmptyMatch","line","supportsUnicodeFlag","codePointAt","OS","LINUX","MAC","WINDOWS","getOS","isMac","isLinux","_navigator","navigator","os","platform","toLowerCase","ua","userAgent","appName","isWin","isIE","parseFloat","isOldIE","isGecko","isMozilla","isOpera","opera","isWebKit","isChrome","isSafari","isEdge","isAIR","isAndroid","isChromeOS","isIOS","isMobile","strictCSP","useragent","XHTML_NS","buildDom","parent","refs","txt","document","createTextNode","appendChild","els","ch","el","createElement","options","childIndex","className","style","setAttribute","getDocumentHead","head","getElementsByTagName","documentElement","tag","createElementNS","removeChildren","element","innerHTML","textContent","ownerDocument","createFragment","createDocumentFragment","hasCssClass","classes","addCssClass","removeCssClass","toggleCssClass","add","setCssClass","node","hasCssString","sheets","querySelectorAll","removeElementById","getElementById","cssCache","insertPendingStyles","cache","container","getRootNode","insertBefore","firstChild","useStrictCSP","importCssStylsheet","rel","href","scrollbarWidth","inner","width","minWidth","height","display","outer","left","overflow","body","noScrollbar","offsetWidth","withScrollbar","clientWidth","removeChild","computedStyle","getComputedStyle","setStyle","styles","property","HAS_CSS_ANIMATION","HAS_CSS_TRANSFORMS","HI_DPI","devicePixelRatio","div","transform","animationName","translate","tx","ty","round","top","dom","get","url","xhr","XMLHttpRequest","open","onreadystatechange","readyState","responseText","send","loadScript","path","src","onload","_","isAbort","qualifyURL","ctor","superCtor","super_","constructor","mixin","implement","proto","EventEmitter","stopPropagation","propagationStopped","preventDefault","defaultPrevented","_emit","_dispatchEvent","eventName","_eventRegistry","_defaultHandlers","listeners","defaultHandler","_signal","once","on","newCallback","off","Promise","resolve","setDefaultHandler","handlers","_disabled_","old","disabled","removeDefaultHandler","pop","addEventListener","capturing","removeListener","removeEventListener","removeAllListeners","reportError","msg","data","Error","messages","oop","optionsProvider","setOptions","optList","setOption","getOptions","optionNames","$options","filter","hidden","getOption","opt","warn","forwardTo","handlesSet","set","message","AppConfig","$defaultOptions","defineOptions","initialValue","resetOptions","setDefaultValue","opts","setDefaultValues","optionHash","setMessages","nls","translated","lang","net","workerPath","modePath","themePath","basePath","suffix","$moduleUrls","loadWorkerFromBlob","sharedPopups","hasOwnProperty","all","$modes","moduleUrl","component","parts","sep","re","setModuleUrl","subst","customLoader","loader","cb","setLoader","dynamicModules","$loading","$loaded","loadModule","moduleId","onLoad","loadedModule","moduleType","load","afterLoad","err","reportErrorIfPathIsNotConfigured","then","default","$require","setModuleLoader","version","config","init","scriptOptions","scriptUrl","currentScript","_currentScript","currentDocument","scripts","script","getAttribute","attributes","j","attr","deHyphenate","m1","toUpperCase","startRow","startColumn","endRow","endColumn","isEqual","range","contains","compare","compareRange","cmp","comparePoint","containsRange","intersects","isEnd","isStart","setStart","setEnd","inside","insideStart","insideEnd","isMultiLine","compareStart","compareEnd","compareInside","clipRows","firstRow","lastRow","fromPoints","extend","isEmpty","clone","collapseRows","toScreenRange","session","screenPosStart","documentToScreenPosition","screenPosEnd","moveBy","comparePoints","p1","p2","Keys","ret","MODIFIER_KEYS","KEY_MODS","FUNCTION_KEYS","PRINTABLE_KEYS","parseInt","enter","escape","esc","del","mods","pow","x","keyCodeToString","keyCode","keyString","fromCharCode","activeListenerOptions","pressedKeys","ts","detectListenerOptionsSupport","createComment","passive","getListenerOptions","EventListener","elem","destroy","addListener","destroyer","$toDestroy","stopEvent","getButton","ctrlKey","altKey","shiftKey","button","capture","eventHandler","releaseCaptureHandler","onMouseUp","addMouseWheelListener","factor","deltaX","deltaY","deltaMode","DOM_DELTA_PIXEL","wheelX","wheelY","DOM_DELTA_LINE","linePixels","DOM_DELTA_PAGE","pagePixels","addMultiMouseDownListener","elements","timeouts","callbackName","startX","startY","clicks","eventNames","onMousedown","detail","isNewClick","abs","clientX","clientY","_clicks","getModifierHash","metaKey","normalizeCommandKeys","hashId","getModifierState","altGr","location","keyLocation","timeStamp","dt","resetPressedKeys","getModifierString","addCommandKeyListener","lastDefaultPrevented","postMessage","postMessageId","nextTick","win","messageName","listener","$idleBlocked","onIdle","handler","$idleBlockId","blockIdle","nextFrame","requestAnimationFrame","bind","$cancelT","lineMode","pasteCancelled","Date","now","TextInput","event","clipboard","BROKEN_SETDATA","USE_IE_MIME_TYPE","HAS_FOCUS_ARGS","MAX_LINE_LENGTH","KEYS","MODS","valueResetRegex","parentNode","host","text","opacity","copied","pasted","inComposition","sendingText","tempStyle","fontSize","commandMode","ignoreFocusEvents","lastValue","lastSelectionStart","lastSelectionEnd","lastRestoreEnd","rowStart","Number","MAX_SAFE_INTEGER","rowEnd","MIN_SAFE_INTEGER","numberOfExtraLines","isFocused","activeElement","setNumberOfExtraLines","number","setAriaOptions","activeDescendant","inline","removeAttribute","role","setLabel","cursor","onBlur","hasFocus","onFocus","resetSelection","$focusScroll","focus","renderer","enableKeyboardAccessibility","preventScroll","isTransformed","getBoundingClientRect","ancestors","parentElement","nodeType","blur","curOp","commandName","command","isUserAction","docChanged","selectionChanged","onCompositionEnd","positionToSelection","newValue","selectionStart","selectionEnd","setSelectionRange","afterContextMenu","getRange","lines","prevLine","nextLine","isAllSelected","onSelect","selectAll","inputHandler","setInputHandler","getInputHandler","sendText","fromInput","onPaste","extendLeft","extendRight","inserted","restoreStart","restoreEnd","endIndex","shouldReset","onTextInput","onInput","onCompositionUpdate","inputType","execCommand","handleClipboardData","forceIEMime","clipboardData","mime","setData","getData","doCopy","isCut","getCopyText","onCut","onCopy","select","onCommandKey","onCompositionStart","$readOnly","useTextareaForIME","cancelComposition","getSelectionRange","markerRange","msGetInputContext","context","getInputContext","compositionStartOffset","closeTimeout","syncComposition","onKeyup","onContextMenuClose","$isMousePressed","$keepTextAreaAtCursor","$moveTextAreaToCursor","getElement","setCommandMode","readOnly","setReadOnly","setCopyWithEmptySelection","onContextMenu","domEvent","moveToMouse","bringToFront","characterWidth","rect","borderTopWidth","borderLeftWidth","maxTop","bottom","clientHeight","move","textInput","addIosSelectionHandler","typingResetTimeout","typing","detectArrowKeys","$mouseHandler","isMousePressed","modifier","up","home","option","down","right","commands","findKeyCommand","scroller","$setUserAgentForTests","_isMobile","_isIOS","DRAG_OFFSET","SCROLL_COOLDOWN_T","DefaultHandlers","mouseHandler","$clickSelection","editor","onMouseDown","onDoubleClick","onTripleClick","onQuadClick","onMouseWheel","extendSelectionBy","ev","inSelection","pos","getDocumentPosition","mousedownEvent","selectionRange","selectionEmpty","moveToPosition","time","$focusTimeout","inMultiSelectMode","captureMouse","startSelect","setState","waitForClickSelection","screenToTextCoordinates","getShiftKey","selectToPosition","anchor","orientedRange","calcRangeOrientation","setSelectionAnchor","scrollCursorIntoView","unitName","cmpStart","cmpEnd","selectByLinesEnd","unsetStyle","focusWait","distance","calcDistance","getBracketRange","getWordRange","getLineRange","getAccelKey","$lastScroll","vx","vy","allowed","prevScroll","direction","canScroll","isScrollableBy","speed","isSlower","scrollBy","stop","ax","ay","bx","by","sqrt","selectEnd","selectAllEnd","selectByWordsEnd","preventParentScroll","currentTarget","contentOverflows","scrollHeight","__extends","extendStatics","setPrototypeOf","__proto__","__","__values","Symbol","iterator","done","CLASSNAME","Tooltip","isOpen","$element","$parentNode","$init","setText","setHtml","html","setPosition","setClassName","setTheme","theme","show","hide","getHeight","offsetHeight","getWidth","PopupManager","popups","addPopup","popup","updatePopups","removePopup","e_1","_a","e_2","_b","sort","priority","visiblepopups","_c","_d","shouldDisplay","visiblepopups_1","visiblepopups_1_1","visiblePopup","doPopupsOverlap","e_2_1","return","e_1_1","popupA","popupB","rectA","rectB","popupManager","HoverTooltip","_super","_this","lastT","idleTime","lastEvent","onMouseOut","onMouseMove","waitForHover","whiteSpace","pointerEvents","tabIndex","addToEditor","getMouseEventTarget","removeFromEditor","isOutsideOfText","$gatherData","docPos","screenPos","pixelToScreenCoordinates","clippedPos","setDataProvider","showForRange","domNode","startingEvent","MARGIN","$registerCloseEvents","addMarker","textToScreenCoordinates","pageX","maxHeight","labelHeight","labelWidth","spaceBelow","innerHeight","pageY","lineHeight","isAbove","innerWidth","marker","$markerSession","removeMarker","$removeCloseEvents","relatedTarget","classList","GutterHandler","tooltipTimeout","mouseEvent","gutter","$gutterLayer","tooltip","GutterTooltip","showTooltip","maxRow","getLength","screenRow","$pos","documentToScreenRow","hideTooltip","$tooltipFollowsMouse","moveTooltip","gutterRow","getGutterRow","gutterCell","$lines","gutterElement","querySelector","gutterRegion","getRegion","selectTo","srcElement","$gutter","windowWidth","windowHeight","singular","plural","warning","info","annotation","annotationsInRow","$annotations","from","fold","getFoldLine","$showFoldedAnnotations","mostSevereAnnotationInFoldType","annotationsInFold","annotationType","summaryFoldedAnnotations","concat","annotationsToSummaryString","annotationMessages","iconClassName","$useSvgGutterIcons","annotationLabels","tooltipContent","annotations","summary","annotationTypes","annotationTypes_1","annotationTypes_1_1","label","MouseEvent","$inSelection","documentRow","screenTopRow","AUTOSCROLL_DELAY","SCROLL_CURSOR_DELAY","SCROLL_CURSOR_HYSTERESIS","DragdropHandler","dragImage","dragSelectionMarker","timerId","dragCursor","dragOperation","isInternal","autoScrollStartTime","cursorMovedTime","cursorPointOnCaretMoved","mouseTarget","counter","prevCursor","vMovement","hMovement","moveCursorToPosition","autoScroll","layerConfig","editorRect","offsets","nearestXOffset","nearestYOffset","scrollCursor","vScroll","hScroll","onDragInterval","addDragMarker","toOrientedRange","getSelectionStyle","clearSelection","$cursorLayer","setBlinking","clearInterval","setInterval","clearDragMarker","fromOrientedRange","$resetCursorStyle","onDragStart","cancelDrag","draggable","self","dataTransfer","effectAllowed","getReadOnly","setDragImage","clearData","getTextRange","onDragEnd","dropEffect","setCursorStyle","onDragEnter","canAccept","getDropEffect","onDragOver","onMouseMoveTimer","onDragLeave","onDrop","moveText","dropData","insert","types","some","copyAllowed","moveAllowed","copyModifierState","dragWait","interval","getDragDelay","startDrag","dragWaitEnd","dragReadyEnd","cursorStyle","onMouseDrag","state","dragDrop","$dragEnabled","clickCount","eventTarget","unselectable","addTouchListeners","touchStartT","longTouchTimer","animationTimer","pressed","contextMenu","mode","animationSteps","vX","vY","createContextMenu","updateMenu","selected","hasUndo","getUndoManager","replaceChild","class","action","handleClick","readText","writeText","ontouchstart","ontouchend","onclick","showContextMenu","pagePos","leftOffset","scrollLeft","hideContextMenu","handleLongTap","selectWord","switchToSelectionMode","setRange","animate","oldScrollTop","getScrollTop","textarea","touches","touchObj","cursorPos","getPixelPosition","anchorPos","offsetTop","offsetLeft","weightedDistance","diff1","diff2","DefaultGutterHandler","MouseHandler","$dragDelay","$mouseMoved","focusEditor","windowBlurred","onMouseEvent","scrollBarV","scrollBarH","Boolean","gutterEl","character","mousemove","$scrollSpeed","mouseMoveHandler","which","releaseMouse","onCaptureEnd","onOperationEnd","onCaptureInterval","$onCaptureMouseMove","endOperation","startOperation","cancelContextMenu","scrollSpeed","dragDelay","dragEnabled","focusTimeout","tooltipFollowsMouse","FoldHandler","getFoldAt","removeFold","expandFold","getUseWrapMode","foldWidgets","onFoldWidgetClick","getParentFoldRangeData","firstRange","addFold","keyUtil","KeyBinding","$editor","$data","$handlers","kb","removeKeyboardHandler","$defaultHandler","addKeyboardHandler","setKeyboardHandler","handleKeyboard","attach","detach","getKeyboardHandler","getStatusText","$callKeyboardHandlers","toExecute","success","args","dir","hiLevel","lastArabic","hasUBAT_B","hasUBAT_S","impTab_LTR","impTab_RTL","LTR","RTL","L","R","EN","AN","ON","B","S","AL","WS","CS","ES","ET","NSM","LRE","RLE","PDF","LRO","RLO","BN","UnicodeTBL00","UnicodeTBL20","_computeLevels","chars","levels","charTypes","impTab","prevState","newClass","newLevel","newState","cond","condPos","ix","_getCharacterType","_getCharClass","_invertLevel","lev","_array","lo","hi","tmp","wType","nType","cType","rtlCandidate","uc","charCodeAt","ON_R","R_H","DOT","doBidiReorder","textCharTypes","isRtl","logicalFromVisual","bidiLevels","hasBidiCharacters","getVisualFromLogicalIdx","logIdx","rowMap","bidiUtil","bidiRE","BidiHandler","bidiMap","currentRow","charWidths","EOL","showInvisibles","isRtlDir","$isRtl","wrapIndent","EOF","contentWidth","fontMetrics","rtlLineOffset","wrapOffset","isMoveLeftOperation","seenBidi","getValue","isBidiRow","docRow","splitIndex","updateRowLine","updateBidiMap","onChange","delta","getDocumentRow","rowCache","$screenRowCache","$getRowCacheIndex","$docRowCache","getSplitIndex","currentIndex","prevIndex","isLastRow","endOfLine","$useWrapMode","splits","$wrapData","indent","substring","size","isFullWidth","getScreenTabSize","$main","substr","markAsDirty","updateCharacterWidths","$characterSize","bidiCharWidth","$measureCharWidth","setShowInvisibles","setEolChar","eolChar","setContentWidth","isRtlLine","setRtlDirection","getCursorPosition","getSelectionAnchor","$bidiHandler","removeInLine","getPosLeft","col","leftBoundary","logicalIdx","getOverwrite","visualIdx","getSelections","startCol","endCol","level","selections","selColMin","selColMax","isSelected","isSelectedPrev","visIdx","offsetToCol","posX","charWidth","Selection","getDocument","createAnchor","$silent","$cursorChanged","$isEmpty","$keepDesiredColumnOnChange","$desiredColumn","$anchorChanged","getCursor","getPosition","setAnchor","getAnchor","getSelectionLead","isBackwards","$setSelection","MAX_VALUE","anchorRow","anchorColumn","cursorRow","cursorColumn","wasEmpty","wasMultiselect","$moveSelection","mover","moveCursorTo","moveTo","selectUp","moveCursorUp","selectDown","moveCursorDown","selectRight","moveCursorRight","selectLeft","moveCursorLeft","selectLineStart","moveCursorLineStart","selectLineEnd","moveCursorLineEnd","selectFileEnd","moveCursorFileEnd","selectFileStart","moveCursorFileStart","selectWordRight","moveCursorWordRight","selectWordLeft","moveCursorWordLeft","selectAWord","getAWordRange","excludeLastChar","foldLine","selectLine","moveCursorBy","wouldMoveIntoSoftTab","tabSize","isTabStop","getTabSize","getNavigateWithinSoftTabs","firstColumnPosition","screenToDocumentPosition","beforeCursor","getDisplayLine","leadingSpace","$useEmacsStyleLineStart","lineEnd","getDocumentLastRowColumnPosition","textEnd","search","moveCursorLongWordRight","rightOfCursor","nonTokenRe","tokenRe","moveCursorLongWordLeft","getFoldStringAt","leftOfCursor","$shortWordEndIndex","whitespaceRe","moveCursorShortWordRight","moveCursorShortWordLeft","$selectLongWords","rows","offsetX","lineWidgets","widget","rowsAbove","rowCount","keepDesiredColumn","moveCursorToScreen","desiredColumn","getRangeOfMovements","func","toJSON","rangeCount","ranges","r1","fromJSON","rangeList","toSingleRange","addRange","MAX_TOKEN_COUNT","Tokenizer","states","regExps","matchMappings","ruleRegExps","matchTotal","mapping","flag","splitterRurles","rule","caseInsensitive","unicode","adjustedregex","matchcount","groupCount","tokenArray","$arrayTokens","$applyToken","digit","removeCapturingGroups","createSplitterRegexp","$setMaxTokenCount","stack","inChClass","lastCapture","parenOpen","parenClose","square","startState","currentState","matchAttempts","skipped","consumeLineEnd","merge","addRules","prefix","nextState","getRules","embedRules","escapeRules","append","$embeds","getEmbeds","pushState","popState","processState","toInsert","includeName","noEscape","keywordMap","ignoreCase","splitChar","keywords","$keywordList","list","word","getKeywords","Behaviour","$behaviours","addBehaviours","behaviours","inherit","getBehaviours","initialRow","initialColumn","$session","$row","getTokens","getCurrentTokenColumn","rowTokens","tokenIndex","getCurrentTokenPosition","CstyleBehaviour","SAFE_INSERT_IN_TOKENS","SAFE_INSERT_BEFORE_TOKENS","contextCache","defaultQuotes","initContext","multiSelect","autoInsertedBrackets","autoInsertedRow","autoInsertedLineEnd","maybeInsertedBrackets","maybeInsertedRow","maybeInsertedLineStart","maybeInsertedLineEnd","getWrapped","opening","closing","rowDiff","getWrapBehavioursEnabled","isSaneInsertion","braces","recordAutoInsert","recordMaybeInsert","rightChar","matching","$findOpeningBracket","isAutoInsertedClosing","popAutoInsertedClosing","isMaybeInsertedClosing","clearMaybeInsertedClosing","openBracePos","next_indent","quotes","$mode","$quotes","quote","leftChar","rightToken","pair","stringBefore","stringAfter","wordRe","isWordBefore","isWordAfter","pairQuotesAfter","$pairQuotesAfter","shouldPairQuotes","charBefore","closeDocComment","$matchTokenType","iterator2","bracket","wordChars","code","$tokenizer","$highlightRules","$highlightRuleConfig","blockComment","toggleCommentLines","ignoreBlankLines","shouldRemove","minIndent","Infinity","insertAtTabStop","regexpStart","getUseSoftTabs","uncomment","shouldInsertSpace","commentWithSpace","insertInLine","testRemove","before","after","spaces","lineCommentEnd","regexpEnd","iter","fun","minEmptyLength","floor","toggleBlockComment","colDiff","initialRange","startRange","endRange","tab","input","createWorker","createModeDelegates","delegations","_loop_1","scope","functionName","$delegator","this_1","method","language","transformAction","param","completionKeywords","ruleItr","aLength","$createKeywordList","getCompletions","score","meta","applyDelta","docLines","doNotValidate","Anchor","$onChange","$clipPositionToDocument","point","$getTransformedPoint","$insertRight","noClip","$pointsInOrder","point1","point2","equalPointsInOrder","bColIsAfter","moveIfEqual","deltaIsInsert","deltaRowShift","deltaColShift","deltaStart","deltaEnd","Document","textOrLines","insertMergedLines","setValue","getAllLines","getNewLineCharacter","$detectNewLine","$autoNewLine","$newLineMode","setNewLineMode","newLineMode","getNewLineMode","isNewLine","getLines","getLinesForRange","insertLines","insertFullLines","removeLines","removeFullLines","insertNewLine","$split","clonePos","$clipPosition","deleteFirstNewLine","deleteLastNewLine","deletedLines","removeNewLine","applyDeltas","deltas","revertDeltas","revertDelta","isInsert","$splitAndapplyLargeDelta","$safeApplyDelta","docLength","MAX","to","chunk","indexToPosition","newlineLength","positionToIndex","BackgroundTokenizer","tokenizer","running","currentLine","$worker","workerStart","endLine","startLine","processedLines","$tokenizeRow","fireUpdateEvent","setTokenizer","setDocument","first","scheduleStart","$updateOnChange","getState","cleanup","SearchHighlight","clazz","setRegexp","update","markerLayer","renderedMarkerRanges","MAX_RANGES","rangeToAddMarkerTo","rangeAsString","drawSingleLineMarker","UndoManager","$keepRedoStack","$maxRev","$fromUndo","$undoDepth","reset","addSession","allowMerge","$lastDelta","$redoStack","lastDeltas","undoStackLength","$undoStack","$rev","addSelection","rev","startNewGroup","markIgnored","ignore","getSelection","getRevision","getDeltas","getChangedRanges","getChangedLines","undo","dontSelect","rearrangeUndoStack","$redoStackBaseRev","deltaSet","undoSelectionRange","undoChanges","$syncRev","redo","diff","rebaseRedoStack","redoSelectionRange","redoChanges","nextDelta","mark","canUndo","canRedo","bookmark","isAtBookmark","json","$prettyPrint","stringifyDelta","swapped","swapGroups","hasRedo","isClean","markClean","cloneDelta","stringifyRange","swap","d1","d2","i1","i2","ds1","ds2","selectionBefore","selectionAfter","xform","c1","splitDelta","shiftPos","rowsBefore","otherLines","rest","moveDeltasByOne","redoStack","xformed","deltaSets","FoldLine","foldData","folds","setFoldLine","shiftRow","sameRow","containsRow","walk","lastEnd","isNewRow","placeholder","getNextFoldTo","kind","addRemoveChars","log","foldBefore","newFoldLine","foldLineNext","idxToPosition","idx","lastFoldEndColumn","RangeList","$bias","pointIndex","excludeEdges","startIndex","addList","removed","substractPoint","containsPoint","rangeAtPoint","clipped","removeAll","lineDif","Fold","subFolds","subFold","collapseChildren","addSubFold","consumeRange","afterStart","firstConsumed","consumedFolds","restoreRange","consumePoint","restorePoint","Folding","side","getFoldsInRange","foldLines","$foldData","foundFolds","getFoldsInRangeList","getAllFolds","trim","lastFold","startFoldLine","getNextFoldLine","getFoldedRowCount","$addFoldLine","added","$clipRangeToDocument","startFold","endFold","removeFolds","$updateWrapData","$updateRowLengthCache","$modified","addFolds","$updating","cloneFolds","foldAll","expandFolds","unfold","expandInner","outermostFolds","isRowFolded","startFoldRow","getRowFoldEnd","getRowFoldStart","getFoldDisplayLine","textLine","lastColumn","$cloneFoldData","fd","toggleFold","tryToUnfold","bracketPos","getCommentFoldRange","depth","foldToLevel","foldAllComments","$foldStyles","$foldStyle","setFoldStyle","$foldMode","$setFolding","foldMode","$updateFoldWidgets","$tokenizerUpdateFoldWidgets","updateFoldWidgets","tokenizerUpdateFoldWidgets","ignoreCurrent","fw","children","siblings","$toggleFoldWidget","toggleFoldWidget","toggleParent","BracketMatch","chr","charBeforeCursor","$findClosingBracket","getMatchingBracketRanges","bracketsRegExp","$brackets","typeRe","openBracket","valueIndex","closingBracket","valueLength","getMatchingTags","$findTagName","prevToken","$findClosingTag","$findOpeningTag","found","backward","currentTag","openTagStart","openTagName","foundOpenTagEnd","openTagEnd","closeTagStart","closeTagName","closeTagEnd","openTag","closeTag","stepCount","tmpToken","TextMode","EditSession","$breakpoints","$decorations","$frontMarkers","$backMarkers","$markerId","$undoSelect","$uid","bgTokenizer","onChangeFold","setMode","destroyed","resetCaches","$resetRowCache","cacheArray","low","mid","$rowLengthCache","removedFolds","$updateInternalDataOnChange","$undoManager","mergeUndoDeltas","$informUndoManager","setUndoManager","JSON","parse","undoManager","history","editSession","setAnnotations","setBreakpoints","breakpoints","setScrollLeft","setScrollTop","scrollTop","$scrollLeft","$scrollTop","$syncInformUndoManager","markUndoGroup","$defaultUndoManager","setUseSoftTabs","$useSoftTabs","$indentWithTabs","setTabSize","$tabSize","setNavigateWithinSoftTabs","navigateWithinSoftTabs","$navigateWithinSoftTabs","setOverwrite","overwrite","$overwrite","toggleOverwrite","addGutterDecoration","removeGutterDecoration","getBreakpoints","clearBreakpoints","setBreakpoint","clearBreakpoint","inFront","addDynamicMarker","markerId","markers","getMarkers","highlight","$searchHighlight","highlightLines","getAnnotations","clearAnnotations","inToken","wordRange","setUseWorker","useWorker","getUseWorker","$useWorker","onReloadTokenizer","$onChangeMode","$modeId","$isPlaceholder","oldMode","$stopWorker","$startWorker","attachToSession","wrapMethod","$wrapMethod","terminate","getMode","isNaN","getScrollLeft","getScreenWidth","$computeWidth","getLineWidgetMaxWidth","screenWidth","lineWidgetsWidth","lineWidgetWidth","force","$wrapLimit","longestScreenLine","foldIndex","foldStart","$getStringScreenWidth","$getUndoSelection","setUndoSelect","enable","isUndo","fromRange","toPosition","toRange","collDiff","oldStart","newStart","indentRows","indentString","outdentRows","rowRange","deleteRange","$moveLines","$clipRowToDocument","moveLinesUp","moveLinesDown","duplicateLines","$clipColumnToRow","setUseWrapMode","useWrapMode","setWrapLimitRange","$wrapLimitRange","adjustWrapLimit","desiredLimit","$printMargin","limits","wrapLimit","$constrainWrapLimit","getWrapLimit","setWrapLimit","limit","getWrapLimitRange","foldLineBefore","wrapData","walkTokens","$getDisplayTokens","PLACEHOLDER_START","PLACEHOLDER_BODY","$computeWrapSplits","displayLength","lastSplit","lastDocSplit","isCode","$wrapAsCode","indentedSoftWrap","$indentedSoftWrap","maxIndent","getWrapIndent","indentation","SPACE","TAB","TAB_SPACE","addSplit","minSplit","PUNCTUATION","CHAR_EXT","CHAR","maxScreenColumn","screenColumn","getRowLength","getRowLineCount","getRowWrapIndent","getScreenLastRowColumn","documentToScreenColumn","getDocumentLastRowColumn","docColumn","getRowSplitData","screenToDocumentRow","screenToDocumentColumn","rowLength","doCache","foldStartRow","wrapRow","screenRowOffset","getScreenLength","screenRows","$getWidgetScreenLength","$setFontMetrics","fm","$enableVarChar","getCharacterWidth","wrap","$wrap","firstLineNumber","useSoftTabs","foldStyle","Search","$matchIterator","sr","sc","er","ec","skipCurrent","findAll","needle","$assembleRegExp","$isMultiLine","prevRange","replacement","preserveCase","$disableFakeMultiline","caseSensitive","$supportsUnicodeFlag","wholeWord","addWordBoundary","$assembleMultilineRegExp","backwards","forEachInLine","wordBoundary","firstChar","wordRegExp","needleArray","lastChar","MultiHashHandler","$singleCommand","commandKeyBinding","addCommands","addCommand","removeCommand","bindKey","_buildKeyHash","keepCommand","ckb","keyId","cmdGroup","keyPart","chain","binding","parseKeys","_addCommandToBinding","other","otherPos","removeCommands","bindKeys","keyList","$keyChain","isDefault","HashHandler","CommandManager","byName","$checkCommandState","isAvailable","toggleRecording","$inReplay","recording","macro","$addCommandToMacro","oldMacro","replay","trimMacro","mac","description","showSettingsMenu","showErrorMarker","scrollIntoView","centerSelection","gotoLine","prompt","$type","multiSelectAction","getAllRanges","findNext","findPrevious","aceCommandGroup","navigateFileStart","navigateUp","times","navigateFileEnd","navigateDown","navigateWordLeft","navigateLineStart","navigateLeft","navigateWordRight","navigateLineEnd","navigateRight","selectPageDown","scrollPageDown","gotoPageDown","selectPageUp","scrollPageUp","gotoPageUp","jumpToMatching","passEvent","cutLine","$copyWithEmptySelection","$handlePaste","duplicateSelection","sortLines","modifyNumber","copyLinesUp","copyLinesDown","removeToLineStart","removeToLineEnd","removeWordLeft","removeWordRight","blockOutdent","blockIndent","splitLine","transposeLetters","transposeSelections","autoIndent","openLink","firstLineEndCol","selectedText","selectedCount","insertLine","curLine","newRanges","exitMultiSelectMode","LineWidgets","widgetManager","updateOnChange","renderWidgets","measureWidgets","_changedWidgets","$onChangeEditor","updateOnFold","_inDocument","removeLineWidget","$updateRows","noWidgets","$oldWidget","$registerLineWidget","addLineWidget","zIndex","coverGutter","pixelHeight","$fold","onWidgetChanged","w1","getWidgetsAtRow","updateFull","changedWidgets","fixedWidth","ceil","coverLine","gutterWidth","fullWidth","padding","scrollBar","GutterKeyboardHandler","gutterLayer","activeRowIndex","activeLane","annotationTooltip","$onGutterKeyDown","$blurGutter","isRowVisible","scrollToLine","$rowToRowIndex","$cursorCell","nearestFoldIndex","$findNearestFoldWidget","nearestAnnotationIndex","$findNearestAnnotation","$focusAnnotation","$focusFoldWidget","$handleGutterKeyboardInteraction","GutterKeyboardEvent","lane","$switchLane","$rowIndexToRow","rowFoldingWidget","$blurFoldWidget","cells","childNodes","$moveFoldWidgetDown","$moveAnnotationDown","$moveFoldWidgetUp","$moveAnnotationUp","$blurAnnotation","$isFoldWidgetVisible","isRowFullyVisible","isIconVisible","$getFoldWidget","$isAnnotationVisible","$getAnnotation","cell","foldWidget","keyboardFocusClassName","desinationLane","annotationIndex","foldWidgetIndex","gutterKeyboardHandler","getKey","getRow","isInAnnotationLane","isInFoldLane","defaultCommands","Editor","getContainerElement","getTextAreaContainer","keyBinding","$search","$historyTracker","$initOperationListeners","_$emitInputEvent","setSession","$opResetTimer","$lastSel","commandEvent","prevOp","previousCommand","scrollSelectionIntoView","animateScrolling","sel","$mergeUndoDeltas","prev","mergeableCommands","$mergeableCommands","shouldMerge","mergeNextCommand","sequenceStartTime","keyboardHandler","$keybindingId","oldSession","$onDocumentChange","$onTokenizerUpdate","$onChangeTabSize","$onChangeWrapLimit","$onChangeWrapMode","$onChangeFold","$onChangeFrontMarker","$onChangeBackMarker","$onChangeBreakpoint","$onChangeAnnotation","$onCursorChange","$onScrollTopChange","$onScrollLeftChange","$onSelectionChange","onDocumentChange","onChangeMode","onTokenizerUpdate","onChangeTabSize","onChangeWrapLimit","onChangeWrapMode","onChangeFrontMarker","onChangeBackMarker","onChangeBreakpoint","onChangeAnnotation","onCursorChange","onScrollTopChange","onScrollLeftChange","onSelectionChange","oldEditor","getSession","resize","onResize","getTheme","getFontSize","setFontSize","$highlightBrackets","$highlightPending","$bracketHighlight","markerIds","$getDirectionForHighlight","tagNamesRanges","markerType","getHighlightIndentGuides","$textLayer","$highlightIndentGuide","$isFocused","showCursor","visualizeFocus","hideCursor","visualizeBlur","$cursorChange","updateCursor","$updateHighlightActiveLine","updateLines","scrollToY","scrollToX","$highlightActiveLine","$selectionStyle","$selectionColorConflict","$maxLines","$minLines","$highlightLineMarker","$selectionMarker","$highlightSelectedWord","$getSelectionHighLightRegexp","wordWithBoundary","updateFrontMarkers","updateBackMarkers","updateBreakpoints","updateText","getSelectedText","nl","copyLine","inVirtualSelectionMode","isFullLine","getBehavioursEnabled","lineState","shouldOutdent","$enableAutoIndent","lineIndent","selectedRange","currIndent","prevLineState","composition","applyComposition","forEachSelection","setScrollSpeed","getScrollSpeed","setDragDelay","setSelectionStyle","setHighlightActiveLine","shouldHighlight","getHighlightActiveLine","setHighlightGutterLine","getHighlightGutterLine","setHighlightSelectedWord","getHighlightSelectedWord","setAnimatedScroll","shouldAnimate","getAnimatedScroll","getShowInvisibles","setDisplayIndentGuides","getDisplayIndentGuides","setHighlightIndentGuides","setShowPrintMargin","showPrintMargin","getShowPrintMargin","setPrintMarginColumn","getPrintMarginColumn","setBehavioursEnabled","enabled","setWrapBehavioursEnabled","setShowFoldWidgets","getShowFoldWidgets","setFadeFoldWidgets","fade","getFadeFoldWidgets","new_range","setGhostText","removeGhostText","originalRange","$getSelectedRows","getNumberAt","_numberRx","amount","charRange","isFinite","nr","fp","decimals","nnr","toFixed","replaceRange","toggleWord","currWordStart","wordParts","curLength","itLength","that","reg","wordPairs","$toggleWordPairs","negate","firstCondition","secondCondition","res","findLinkAt","columnPosition","previousPosition","currentPosition","wordParts_1","wordParts_1_1","endPoint","moved","totalDiff","rangeIndex","subRows","compositionState","showComposition","setCompositionText","hideComposition","getFirstVisibleRow","getLastVisibleRow","getFirstFullyVisibleRow","getLastFullyVisibleRow","$getVisibleRowCount","getScrollBottomRow","getScrollTopRow","$moveByPage","scrollToRow","center","alignCursor","getCursorPositionScreen","expand","tokenCount","matchType","bracketType","brackets","tagsRanges","lineNumber","navigateTo","replaced","$tryReplace","replaceAll","getLastSearchOptions","newRange","revealRange","setAutoScrollEditorIntoView","shouldScroll","$scrollAnchor","scrollAnchor","onChangeSelection","onBeforeRender","onAfterRender","searchBox","$pixelPos","$cursorStyle","cursorLayer","setSmoothBlinking","isBlinking","selectionStyle","highlightActiveLine","highlightSelectedWord","copyWithEmptySelection","behavioursEnabled","wrapBehavioursEnabled","enableAutoIndent","autoScrollEditorIntoView","showLineNumbers","setShowLineNumbers","$loop","CHANGE_GUTTER","$relativeLineNumbers","relativeNumberRenderer","relativeLineNumbers","$showLineNumbers","$updatePlaceholder","hasValue","$composition","placeholderNode","$placeholder","content","blurCommand","focusOnEnterKeyup","customScrollbar","hScrollBarAlwaysVisible","vScrollBarAlwaysVisible","highlightGutterLine","animatedScroll","printMarginColumn","printMargin","fadeFoldWidgets","showFoldWidgets","displayIndentGuides","highlightIndentGuides","showGutter","fontFamily","maxLines","minLines","scrollPastEnd","fixedWidthGutter","hasCssTransforms","maxPixelHeight","useResizeObserver","useSvgGutterIcons","showFoldedAnnotations","getText","lastLineNumber","$renderer","Lines","canvasHeight","cellCache","$offsetCoefficient","moveContainer","firstRowScreen","pageChanged","oldConfig","newConfig","computeLineTop","screenTop","screenPage","lineTop","computeLineHeight","$cacheCell","fragment","insertAdjacentElement","createCell","initElement","Gutter","parentEl","$showFoldWidgets","$updateAnnotations","rowInfo","annoText","annoType","gutterOffset","oldLastRow","$updateCursorRow","onCreateCell","$renderCell","$updateGutterWidth","gutterRenderer","$firstLineNumber","lastLineText","$fixedWidth","$padding","$computePadding","$highlightGutterLine","$cursorRow","updateLineHighlight","scrollLines","$renderLines","textNode","annotationNode","annotationIconNode","decorations","rowText","foldClass","isClosedFold","foldAnnotationClass","annotationInFold","foldRange","getShowLineNumbers","paddingLeft","borderRightWidth","paddingRight","Marker","setPadding","setMarkers","elt","css","$getTop","drawFullLineMarker","drawScreenLineMarker","drawTextMarker","drawMultiLineMarker","childElementCount","lastChild","stringBuilder","extraStyle","curr","lineRange","getBorderClass","range1","drawBidiSingleLineMarker","radiusClass","extraLength","tl","tr","br","bl","textTokens","Set","isTextToken","tokenType","has","Text","$updateEolChar","unixMode","EOL_CHAR","EOL_CHAR_LF","EOL_CHAR_CRLF","margin","getLineHeight","$fontMetrics","measure","$pollSizeChanges","checkForSizeChanges","$pollSizeChangesTimer","$computeTabString","showSpaces","showTabs","showEOL","$highlightIndentGuides","tabStr","$tabStrings","span","TAB_CHAR","$indentGuideRe","spaceClass","spaceContent","SPACE_CHAR","tabClass","tabContent","lineElements","lineElementsIdx","heightChanged","lineElement","$renderLine","$renderLinesFragment","lineEl","$useLineGroups","$renderToken","valueFragment","simpleSpace","controlCharacter","cjkSpace","cjk","cloneNode","renderIndentGuide","cols","$highlightIndentGuideMarker","indentLevel","initialIndent","elementIndentLevel","bracketHighlight","currentIndent","$renderHighlightIndentGuide","$clearActiveIndentGuide","$setIndentGuideActive","$createLineElement","$renderWrappedLine","splitChars","$renderOverflowMessage","$renderSimpleLine","overflowEl","$getFoldLineTokens","lastLineEl","invisibleEl","EOF_CHAR","renderTokens","addTokens","Cursor","isVisible","blinkInterval","smoothBlinking","cursors","addCursor","$updateCursors","$updateOpacity","$startCssAnimation","animationDuration","$isAnimating","$stopCssAnimation","blinking","restartTimer","setBlinkInterval","removeCursor","intervalId","timeoutId","$isSmoothBlinking","blink","onScreen","cursorLeft","cursorTop","isCursorInView","pixelPos","$selectionMarkers","cursorIndex","drawCursor","$setOverwrite","MAX_SCROLL_H","Scrollbar","classSuffix","setVisible","skipEvent","onScroll","coeff","VScrollBar","$scrollbarWidth","$minWidth","setHeight","setScrollHeight","setInnerHeight","HScrollBar","setWidth","setInnerWidth","setScrollWidth","ScrollBar","ScrollBarV","ScrollBarH","VScrollWidth","HScrollHeight","eType","mousePageY","startTop","thumbTop","onScrollInterval","scrollTopFromThumbTop","thumbHeight","pageHeight","viewHeight","slideHeight","scrollWidth","mousePageX","startLeft","thumbLeft","scrollLeftFromThumbLeft","thumbWidth","pageWidth","viewWidth","slideWidth","RenderLoop","onRender","pending","changes","$recursionLimit","_flush","change","clear","CHAR_COUNT","USE_OBSERVER","ResizeObserver","FontMetrics","$setMeasureNodeStyles","$measureNode","$addObserver","isRoot","visibility","font","$measureSizes","fontWeight","boldSize","charSizes","allowBoldFonts","$observer","observe","setPolling","disconnect","$getZoom","$initTransformMeasureNodes","transformCoordinates","clientPos","elPos","zoom","mul","solve","l1","l2","det","sub","m2","ut","Decorator","canvas","pixelRatio","heightRatio","canvasWidth","minDecorationHeight","halfMinDecorationHeight","colors","dark","light","$updateDecorators","allLineHeight","ctx","getContext","clearRect","priorities","compensateFold","compensateFoldRows","currentY","y1","y2","yCenter","fillStyle","fillRect","GutterLayer","MarkerLayer","TextLayer","CursorLayer","HScrollBarCustom","VScrollBarCustom","editorCss","VirtualRenderer","onGutterResize","$markerBack","textLayer","$markerFront","$horizScroll","$vScroll","$scrollAnimation","scrollMargin","updateCharacterSize","$size","scrollerHeight","scrollerWidth","$dirty","minHeight","$renderChanges","defaultView","CHANGE_FULL","$addResizeObserver","$allowBoldFonts","$updatePrintMargin","onChangeNewLineMode","$changedLines","CHANGE_LINES","CHANGE_TEXT","CHANGE_MARKER","updateFontSize","$updateSizeAsync","resizing","$updateCachedSize","$resizeTimer","$changes","$customScrollbar","$updateCustomScrollbar","$extraHeight","oldSize","CHANGE_SIZE","CHANGE_SCROLL","$showGutter","$computeLayerConfig","availableWidth","$showPrintMargin","$printMarginColumn","$animatedScroll","getShowGutter","setShowGutter","$printMarginEl","containerEl","posTop","posLeft","setScrollMargin","sm","setMargin","getHScrollBarAlwaysVisible","$hScrollBarAlwaysVisible","setHScrollBarAlwaysVisible","alwaysVisible","getVScrollBarAlwaysVisible","$vScrollBarAlwaysVisible","setVScrollBarAlwaysVisible","$updateScrollBarV","$scrollPastEnd","$updateScrollBarH","freeze","$frozen","unfreeze","CHANGE_H_SCROLL","st","$scrollDecorator","$updateLines","CHANGE_CURSOR","CHANGE_MARKER_FRONT","CHANGE_MARKER_BACK","$autosize","desiredHeight","$maxPixelHeight","hideScrollbars","$gutterWidth","screenLines","longestLine","$getLongestLine","horizScroll","hScrollChanged","vScrollBefore","vScrollChanged","firstRowHeight","lineCount","charCount","_rows","$viewMargin","newLeft","newTop","topMargin","bottomMargin","$stopAnimation","currentTop","currentLeft","twoCharsWidth","alignment","$calcSteps","fromValue","toValue","STEPS","steps","x_min","dx","initialScroll","oldSteps","$timer","endAnimation","scrollTo","canvasPos","$hasCssTransforms","$blockCursor","$useTextareaForIME","addToken","removeExtraToken","insertPosition","textLines","$ghostText","$ghostTextWidget","pixelPosition","ghostTextHeight","fitsY","newToken","$themeId","$theme","setMouseCursor","attachToShadowRoot","$resizeObserver","contentRect","$workerBlob","workerUrl","Blob","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","blobBuilder","getBlob","Worker","blob","URL","webkitURL","blobURL","createObjectURL","WorkerClient","worker","$createWorkerFromOldConfig","$sendDeltaQueue","changeListener","onMessage","callbackId","callbacks","onmessage","topLevelNamespaces","classname","importScripts","nameToUrl","toUrl","normalizePath","$normalizePath","tlns","deltaQueue","onerror","$doc","cmd","emit","ex","attachToDocument","q","UIWorkerClient","main","emitSync","sender","messageBuffer","workerClient","processNext","setEmitSync","Main","PlaceHolder","others","mainClass","othersClass","$onUpdate","onUpdate","$others","undoStack","$undoStackDepth","setup","showOtherMarkers","othersActive","hideOtherMarkers","updateAnchors","lengthDiff","inMainRange","distanceFromStart","newPos","updateMarkers","updateMarker","undosRequired","isSamePoint","alt","ctrl","accel","selectionMode","isMultiSelect","mouseX","mouseY","onMouseSelection","screenAnchor","screenCursor","$enableJumpToDef","$blockSelectEnabled","addSelectionMarker","oldRange","removeSelectionMarker","tmpSel","rectSel","blockSelect","newCursor","removeSelectionMarkers","rectangularRangeBlock","updateSelectionMarkers","onMouseSelectionEnd","onSelectionInterval","selectMoreLines","selectMore","joinSelections","splitIntoLines","alignCursors","multiSelectCommands","getSelectionMarkers","$blockChangeEvents","$onAddRange","$onRemoveRange","mergeOverlappingRanges","lastRange","$initRangeList","toggleBlockSelection","includeEmptyLines","xBackwards","startOffsetX","endOffsetX","docEnd","yBackwards","MultiSelect","$multiselectOnSessionChange","$onMultiSelect","$onSingleSelect","onSessionChange","$checkMultiselectChange","addAltCursorListeners","altCursor","altDown","selectionMarkerCount","markerList","$onMultiSelectExec","inVirtualMode","keepOrder","$byLines","cmdResult","anim","buf","additive","skip","screenLead","toRemove","tmp_1","words","stopAtFirst","sameRowRanges","maxCol","minSpace","spaceOffsets","spaceOffset","fr","lr","guessRange","$reAlignText","forceLeft","startW","textW","endW","isLeftAligned","isRightAligned","alignLeft","alignRight","unAlign","enableMultiselect","enableBlockSelect","indentationBlock","startLevel","binarySearch","comparator","findAnnotations","matched","oldWidget","gutterAnno","arrow","onmousedown","Renderer","edit","_id","env","tagName","oldNode","createEditSession","not_string","not_bool","not_type","not_primitive","numeric_arg","not_json","modulo","key_access","index_access","sign","sprintf","sprintf_format","sprintf_parse","vsprintf","fmt","argv","parse_tree","arg","ph","pad","pad_character","pad_length","is_positive","tree_length","param_no","Function","stringify","precision","toExponential","toPrecision","valueOf","pad_char","align","sprintf_cache","_fmt","arg_names","SyntaxError","field_list","replacement_field","field_match","isPrototypeOf","$TypeError","it","Prototype","ArrayBuffer","DataView","NAME","Constructor","NATIVE_ARRAY_BUFFER","DESCRIPTORS","isCallable","isObject","hasOwn","classof","tryToString","createNonEnumerableProperty","defineBuiltIn","defineBuiltInAccessor","getPrototypeOf","wellKnownSymbol","uid","InternalStateModule","enforceInternalState","enforce","getInternalState","Int8Array","Int8ArrayPrototype","Uint8ClampedArray","Uint8ClampedArrayPrototype","TypedArray","TypedArrayPrototype","ObjectPrototype","TO_STRING_TAG","TYPED_ARRAY_TAG","TYPED_ARRAY_CONSTRUCTOR","NATIVE_ARRAY_BUFFER_VIEWS","TYPED_ARRAY_TAG_REQUIRED","TypedArrayConstructorsList","Uint8Array","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigIntArrayConstructorsList","BigInt64Array","BigUint64Array","isView","klass","getTypedArrayConstructor","isTypedArray","aTypedArray","aTypedArrayConstructor","C","exportTypedArrayMethod","KEY","forced","ARRAY","TypedArrayConstructor","error2","exportTypedArrayStaticMethod","uncurryThis","FunctionName","defineBuiltIns","fails","anInstance","toIntegerOrInfinity","toLength","toIndex","fround","IEEE754","getOwnPropertyNames","arrayFill","arraySlice","setToStringTag","PROPER_FUNCTION_NAME","PROPER","CONFIGURABLE_FUNCTION_NAME","CONFIGURABLE","ARRAY_BUFFER","DATA_VIEW","PROTOTYPE","WRONG_LENGTH","WRONG_INDEX","getInternalArrayBufferState","getterFor","getInternalDataViewState","setInternalState","NativeArrayBuffer","$ArrayBuffer","ArrayBufferPrototype","$DataView","DataViewPrototype","RangeError","packIEEE754","pack","unpackIEEE754","unpack","packInt8","packInt16","packInt32","unpackInt32","buffer","packFloat32","packFloat64","addGetter","view","isLittleEndian","store","intIndex","boolIsLittleEndian","byteLength","bytes","byteOffset","conversion","INCORRECT_ARRAY_BUFFER_NAME","NaN","testView","$setInt8","setInt8","getInt8","setUint8","unsafe","detached","bufferState","bufferLength","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","toObject","toAbsoluteIndex","lengthOfArrayLike","argumentsLength","endPos","$length","IndexedObject","createMethod","TYPE","IS_FIND_LAST_INDEX","$this","callbackfn","boundFunction","findLast","findLastIndex","arraySpeciesCreate","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_REJECT","NO_HOLES","specificCreate","every","filterReject","createProperty","$Array","fin","mergeSort","comparefn","middle","insertionSort","llength","rlength","lindex","rindex","isConstructor","SPECIES","originalArray","arraySpeciesConstructor","A","$RangeError","relativeIndex","actualIndex","ITERATOR","SAFE_CLOSING","called","iteratorWithReturn","SKIP_CLOSING","ITERATION_SUPPORT","object","toPropertyKey","definePropertyModule","createPropertyDescriptor","propertyKey","makeBuiltIn","descriptor","getter","setter","firefox","UA","webkit","aCallable","NATIVE_BIND","fn","getMethod","isNullOrUndefined","Iterators","anObject","getIteratorMethod","argument","usingIterator","iteratorMethod","LN2","mantissaLength","exponent","mantissa","exponentLength","eMax","eBias","rt","nBits","ArrayPrototype","isInteger","MATCH","isRegExp","EPSILON","INVERSE_EPSILON","roundTiesToEven","FLOAT_EPSILON","FLOAT_MAX_VALUE","FLOAT_MIN_VALUE","absolute","floatRound","FLOAT32_EPSILON","FLOAT32_MAX_VALUE","FLOAT32_MIN_VALUE","regExpFlags","RegExpPrototype","flags","getBuiltIn","CONSTRUCTOR_NAME","toPrimitive","prim","BigInt","toPositiveInteger","BYTES","$","TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS","ArrayBufferViewCore","ArrayBufferModule","isIntegralNumber","toOffset","toUint8Clamped","isSymbol","typedArrayFrom","setSpecies","getOwnPropertyDescriptorModule","inheritIfRequired","nativeDefineProperty","nativeGetOwnPropertyDescriptor","BYTES_PER_ELEMENT","fromList","isArrayBuffer","isTypedArrayIndex","wrappedGetOwnPropertyDescriptor","wrappedDefineProperty","stat","getOwnPropertyDescriptor","wrapper","CLAMPED","GETTER","SETTER","NativeTypedArrayConstructor","TypedArrayConstructorPrototype","exported","addElement","dummy","typedArrayOffset","$len","FORCED","sham","checkCorrectnessOfIteration","iterable","aConstructor","getIterator","isArrayIteratorMethod","isBigIntArray","toBigInt","thisIsBigIntArray","mapfn","addToUnscopables","requireObjectCoercible","getRegExpFlags","getSubstitution","IS_PURE","REPLACE","stringSlice","stringIndexOf","searchValue","fromIndex","replaceValue","IS_REG_EXP","replacer","functionalReplace","searchLength","advanceBy","endOfLastMatch","$fill","CONVERSION_BUG","actualValue","$findLastIndex","$findLast","toIndexedObject","$set","WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS","TO_OBJECT_BUG","arrayLike","internalSort","FF","IE_OR_EDGE","V8","WEBKIT","nativeSort","ACCEPT_INCORRECT_ARGUMENTS","STABLE_SORT","expected","getSortCompare","arrayToReversed","arrayFromConstructorAndList","compareFn","createTypedArrayConstructor","arrayWith","PROPER_ORDER","kindOf","thing","kindOfTest","typeOfTest","isUndefined","isBuffer","isFunction","isArrayBufferView","isString","isNumber","isBoolean","isPlainObject","toStringTag","isDate","isFile","isBlob","isFileList","isStream","pipe","isFormData","FormData","isURLSearchParams","allOwnKeys","findKey","_key","_global","globalThis","isContextDefined","caseless","assignValue","targetKey","stripBOM","superConstructor","descriptors","toFlatObject","sourceObj","destObj","propFilter","prop","merged","toArray","forEachEntry","generator","matchAll","isHTMLForm","toCamelCase","reduceDescriptors","reducer","getOwnPropertyDescriptors","reducedDescriptors","defineProperties","freezeMethods","toObjectSet","arrayOrString","delimiter","noop","toFiniteNumber","defaultValue","ALPHA","DIGIT","ALPHABET","ALPHA_DIGIT","generateString","alphabet","random","isSpecCompliantForm","toJSONObject","visit","reducedValue","isAsyncFn","isThenable","catch","hasOwnProp","AxiosError","request","response","captureStackTrace","utils","fileName","columnNumber","status","customProps","axiosError","cause","isVisitable","removeBrackets","renderKey","dots","isFlatArray","predicates","toFormData","formData","metaTokens","indexes","visitor","defaultVisitor","_Blob","useBlob","convertValue","toISOString","Buffer","exposedHelpers","build","encode","charMap","encodeURIComponent","AxiosURLSearchParams","_pairs","encoder","_encode","buildURL","serializeFn","serialize","serializedParams","hashmarkIndex","InterceptorManager","use","fulfilled","rejected","synchronous","runWhen","eject","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","URLSearchParams","isBrowser","protocols","hasBrowserEnv","hasStandardBrowserEnv","product","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","toURLEncodedForm","helpers","isNode","parsePropPath","arrayToObject","formDataToJSON","buildPath","isNumericKey","isLast","entries","stringifySafely","rawValue","parser","defaults","transitional","adapter","transformRequest","headers","contentType","getContentType","hasJSONContentType","isObjectPayload","setContentType","formSerializer","_FormData","transformResponse","JSONRequested","responseType","strictJSONParsing","ERR_BAD_RESPONSE","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","ignoreDuplicateOf","rawHeaders","parsed","$internals","normalizeHeader","header","normalizeValue","parseTokens","tokensRE","isValidHeaderName","matchHeaderValue","isHeaderNameFilter","formatHeader","char","buildAccessors","accessorName","methodName","arg1","arg2","arg3","AxiosHeaders","valueOrRewrite","rewrite","setHeader","_value","_header","_rewrite","lHeader","setHeaders","parseHeaders","matcher","deleted","deleteHeader","normalize","format","normalized","targets","asStrings","computed","accessor","internals","accessors","defineAccessor","mapped","headerValue","transformData","fns","isCancel","__CANCEL__","CanceledError","ERR_CANCELED","settle","reject","ERR_BAD_REQUEST","write","expires","domain","secure","cookie","toGMTString","read","decodeURIComponent","isAbsoluteURL","combineURLs","baseURL","relativeURL","buildFullPath","requestedURL","msie","urlParsingNode","originURL","resolveURL","protocol","hash","hostname","port","pathname","requestURL","parseProtocol","speedometer","samplesCount","timestamps","firstSampleTS","tail","chunkLength","startedAt","bytesCount","passed","progressEventReducer","isDownloadStream","bytesNotified","_speedometer","loaded","total","lengthComputable","progressBytes","rate","inRange","progress","estimated","isXHRAdapterSupported","requestData","requestHeaders","onCanceled","withXSRFToken","cancelToken","unsubscribe","signal","auth","username","password","unescape","btoa","fullPath","onloadend","responseHeaders","getAllResponseHeaders","responseData","statusText","paramsSerializer","responseURL","onabort","ECONNABORTED","ERR_NETWORK","ontimeout","timeoutErrorMessage","ETIMEDOUT","isURLSameOrigin","xsrfValue","cookies","setRequestHeader","withCredentials","onDownloadProgress","onUploadProgress","upload","abort","subscribe","aborted","knownAdapters","http","renderReason","reason","isResolvedHandle","getAdapter","adapters","nameOrAdapter","rejectedReasons","reasons","throwIfCancellationRequested","throwIfRequested","dispatchRequest","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","timeoutMessage","decompress","beforeRedirect","transport","httpAgent","httpsAgent","socketPath","responseEncoding","configValue","VERSION","validators","deprecatedWarnings","assertOptions","schema","allowUnknown","ERR_BAD_OPTION_VALUE","validator","ERR_BAD_OPTION","formatMessage","desc","ERR_DEPRECATED","Axios","instanceConfig","interceptors","configOrUrl","boolean","function","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","responseInterceptorChain","promise","onFulfilled","onRejected","getUri","generateHTTPMethod","isForm","CancelToken","executor","resolvePromise","_listeners","onfulfilled","_resolve","spread","isAxiosError","HttpStatusCode","Continue","SwitchingProtocols","Processing","EarlyHints","Ok","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","createInstance","defaultConfig","instance","axios","Cancel","promises","formToJSON"],"sourceRoot":""}