{"version":3,"file":"js/content.fc3d78a6.js","mappings":"kGAAA,MAAQA,mBAAoBC,EAAqBC,UAAWC,EAAYC,mBAAoBC,GAAwB,EAAQ,MAE5HC,EAAOC,QAAU,SAAgBC,EAAMC,GACrC,OAAQN,IAAcE,EAAoB,MAAO,CAC/CK,MAAO,6BACPC,KAAM,OACNC,QAAS,YACT,eAAgB,MAChBC,OAAQ,eACR,cAAe,QACd,CACDZ,EAAoB,OAAQ,CAC1B,iBAAkB,QAClB,kBAAmB,QACnBa,EAAG,iCAGT,C,oCCMM,SAAUC,EAAeC,GAC7B,MAAO,4EAGIA,EAAOC,6BACAD,EAAOE,IAAIC,KAAK,uLAMEH,EAAOI,0DACAJ,EAAOI,+BAClCJ,EAAOC,mCAGnBD,EAAOK,IAAM,2BAA2BL,EAAOK,QAAU,WACzDL,EAAOM,QAAQC,KAAKC,GAAW,IAAIA,EAAOH,SAAQI,0CAGlDT,EAAOU,SAASH,KAAKG,GAAa,8CAA8CA,EAAST,qBAAqBS,EAASL,UAASI,kHAI/FT,EAAOK,yBAC7BL,EAAOC,iCACAD,EAAOE,IAAIC,KAAK,6KAMFH,EAAOK,iDAM7C,C,iIAEO,MAAMM,EAAmB,CAC9BC,UAAW,WACXC,SAAU,MACVZ,KAAM,eACNa,IAAK,mBACLV,SAAU,sBACVC,IAAK,uBACLU,MAAO,sBACPb,IAAK,CACH,iEACA,mGAEFI,QAAS,CACP,CACEU,SAAU,UACVX,IAAK,6BAEP,CACEW,SAAU,UACVX,IAAK,gCAEP,CACEW,SAAU,WACVX,IAAK,yCAEP,CACEW,SAAU,iBACVX,IAAK,2DAGTK,SAAU,CACR,CACET,KAAM,uCACNI,IAAK,sEAEP,CACEJ,KAAM,0BACNI,IAAK,2DAKEY,EAAe,CAC1BL,UAAW,OACXC,SAAU,WACVZ,KAAM,gBACNa,IAAK,eACLV,SAAU,kBACVC,IAAK,wBACLU,MAAO,mBACPb,IAAK,CACH,8DACA,8FAEFI,QAAS,CACP,CACEU,SAAU,OACVX,IAAK,uDAEP,CACEW,SAAU,WACVX,IAAK,sDAEP,CACEW,SAAU,iBACVX,IAAK,0DAEP,CACEW,SAAU,iBACVX,IAAK,0DAGTK,SAAU,CACR,CACET,KAAM,yBACNI,IAAK,0DAKEa,EAAiB,CAC5BN,UAAW,SACXC,SAAU,UACVZ,KAAM,iBACNa,IAAK,iBACLV,SAAU,iBACVW,MAAO,iBACPb,IAAK,CACH,2GAEFI,QAAS,CACP,CACEU,SAAU,UACVX,IAAK,uBAEP,CACEW,SAAU,WACVX,IAAK,gDAGTK,SAAU,CACR,CACET,KAAM,8BACNI,IAAK,+DAKEc,EAAgB,CAC3BP,UAAW,QACXC,SAAU,QACVZ,KAAM,cACNa,IAAK,gBACLV,SAAU,gBACVC,SAAKe,EACLL,MAAO,eACPb,IAAK,CACH,qGACA,uHAEFI,QAAS,GACTI,SAAU,G,6ICnLL,MAAMW,EAAiC,CAAEhB,IAAK,aAAcU,MAAO,mBAC7DO,EAAyC,CAAEjB,IAAK,gCAAiCU,MAAO,sBACxFQ,EAA8B,CAAElB,IAAK,gDAAiDU,MAAO,qBAC7FS,EAA8B,CAAEnB,IAAK,UAAWU,MAAO,Q,kFCLpE,MAAMU,EAAa,CAAC,eAAgB,MAMpC,OAA4BC,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,mBACRC,MAAO,CACPC,QAAS,CACPC,KAAMC,OACNC,UAAU,GAEZC,GAAI,CACFH,KAAMC,OACNC,UAAU,IAGZE,MAAMC,GAER,MAAMP,EAAQO,EAId,SAASC,EAA0BC,GACjCC,QAAQC,IAAI,qBAEoB,kBAArBC,OAAOC,WAChBH,QAAQC,IAAI,oBACZF,KAEAK,YAAW,KACTN,EAA0BC,EAAG,GAC5B,IAEP,CAYA,OAVAM,EAAAA,EAAAA,KAAU,KACRP,GAA0B,KAExBI,OAAOC,UAAUG,OAAO,IAAIhB,EAAMK,eAAgB,CAChDJ,QAASD,EAAMC,SACf,GACF,IAIG,CAACrC,EAAUC,MACRN,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,MAAO,CAC/C,eAAgB8C,EAAQN,QACxBI,GAAI,GAAGE,EAAQF,gBACd,KAAM,EAAGR,GAEd,ICrDA,MAAMoB,EAAc,EAEpB,O,wHCFA,MAAMpB,EAAa,CAAEqB,MAAO,mEACtBC,EAAa,CAAC,MAAO,OACrBC,EAAa,CACjBC,IAAK,EACLH,MAAO,6BAEHI,EAAa,CAAC,MAAO,OACrBC,EAAa,CACjBF,IAAK,EACLH,MAAO,8DAEHM,EAAa,CAAEN,MAAO,yDACtBO,EAAa,CAAEP,MAAO,uDACtBQ,EAAa,CAAER,MAAO,4BACtBS,EAAa,CAAC,OAAQ,SACtBC,EAAc,CAAEV,MAAO,WACvBW,EAAc,CAClBR,IAAK,EACLH,MAAO,UACPnD,KAAM,eACNC,QAAS,YACT,cAAe,QAEX8D,GAA2BzE,EAAAA,EAAAA,GAAoB,OAAQ,CAAEa,EAAG,0aAA4a,MAAO,GAC/e6D,EAAc,CAClBD,GAEIE,EAAc,CAClBX,IAAK,EACLH,MAAO,UACPnD,KAAM,eACNC,QAAS,YACT,cAAe,QAEXiE,GAA2B5E,EAAAA,EAAAA,GAAoB,OAAQ,CAC3D,YAAa,UACba,EAAG,6bACH,YAAa,WACZ,MAAO,GACJgE,EAAc,CAClBD,GAEIE,EAAc,CAClBd,IAAK,EACLvD,MAAO,6BACPoD,MAAO,UACPnD,KAAM,OACNC,QAAS,YACTC,OAAQ,eACR,eAAgB,KAEZmE,GAA2B/E,EAAAA,EAAAA,GAAoB,OAAQ,CAAEa,EAAG,2BAA6B,MAAO,GAChGmE,GAA2BhF,EAAAA,EAAAA,GAAoB,OAAQ,CAAEa,EAAG,iJAAmJ,MAAO,GACtNoE,GAA2BjF,EAAAA,EAAAA,GAAoB,OAAQ,CAC3D,iBAAkB,QAClB,kBAAmB,QACnBa,EAAG,wLACF,MAAO,GACJqE,EAAc,CAClBH,EACAC,EACAC,GAEIE,EAAc,CAClBnB,IAAK,EACLvD,MAAO,6BACPoD,MAAO,UACPnD,KAAM,OACNC,QAAS,YACTC,OAAQ,eACR,eAAgB,KAEZwE,GAA2BpF,EAAAA,EAAAA,GAAoB,OAAQ,CAC3D,iBAAkB,QAClB,kBAAmB,QACnBa,EAAG,wHACF,MAAO,GACJwE,EAAc,CAClBD,GAEIE,EAAc,CAClBtB,IAAK,EACLvD,MAAO,6BACPoD,MAAO,UACPnD,KAAM,OACNC,QAAS,YACTC,OAAQ,eACR,eAAgB,KAEZ2E,GAA2BvF,EAAAA,EAAAA,GAAoB,OAAQ,CAC3D,iBAAkB,QAClB,kBAAmB,QACnBa,EAAG,oNACF,MAAO,GACJ2E,EAAc,CAClBD,GAEIE,EAAc,CAClBzB,IAAK,EACLvD,MAAO,6BACPoD,MAAO,UACPnD,KAAM,OACNC,QAAS,YACTC,OAAQ,eACR,eAAgB,KAEZ8E,GAA2B1F,EAAAA,EAAAA,GAAoB,OAAQ,CAC3D,iBAAkB,QAClB,kBAAmB,QACnBa,EAAG,idACF,MAAO,GACJ8E,EAAc,CAClBD,GAOF,OAA4BjD,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,YACRC,MAAO,CACP5B,OAAQ,CACN8B,KAAM+C,OACN7C,UAAU,IAGZE,MAAMC,GAIR,MAAO,CAAC3C,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,MAAOoC,EAAY,CAC1DU,EAAQnC,OAAOK,MACXlB,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaF,EAAwB,CAClD7B,IAAK,EACLgC,GAAI9C,EAAQnC,OAAOK,IACnByC,MAAO,6BACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBlG,EAAAA,EAAAA,GAAoB,MAAO,CACzBmG,IAAKjD,EAAQnC,OAAOc,IACpBgC,MAAO,eACPuC,IAAK,GAAGlD,EAAQnC,OAAOY,aAAauB,EAAQnC,OAAOa,YAClD,KAAM,EAAGkC,MAEduC,EAAG,GACF,EAAG,CAAC,UACNnG,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,OAAQ2D,EAAY,EACrD/D,EAAAA,EAAAA,GAAoB,MAAO,CACzBmG,IAAKjD,EAAQnC,OAAOc,IACpBgC,MAAO,eACPuC,IAAK,GAAGlD,EAAQnC,OAAOY,aAAauB,EAAQnC,OAAOa,YAClD,KAAM,EAAGqC,MAEjBf,EAAQnC,OAAOK,MACXlB,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaF,EAAwB,CAClD7B,IAAK,EACLgC,GAAI9C,EAAQnC,OAAOK,IACnByC,MAAO,8DACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBrD,EAAQnC,OAAOY,WAAa,KAAM4E,EAAAA,EAAAA,IAAiBrD,EAAQnC,OAAOa,UAAW,MAEjHyE,EAAG,GACF,EAAG,CAAC,UACNnG,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,OAAQ8D,GAAYqC,EAAAA,EAAAA,IAAiBrD,EAAQnC,OAAOY,WAAa,KAAM4E,EAAAA,EAAAA,IAAiBrD,EAAQnC,OAAOa,UAAW,KACzJ5B,EAAAA,EAAAA,GAAoB,OAAQmE,GAAYoC,EAAAA,EAAAA,IAAiBrD,EAAQnC,OAAOe,OAAQ,IAChF9B,EAAAA,EAAAA,GAAoB,MAAOoE,EAAY,GACpClE,EAAAA,EAAAA,KAAW,IAAOE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,MAAMC,EAAAA,EAAAA,IAAYvD,EAAQnC,OAAOE,KAAMyF,KAC/ExG,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,OAAQ,CAChD4D,IAAK0C,EACL7C,MAAO,6BACN0C,EAAAA,EAAAA,IAAiBG,GAAe,MACjC,OACJ1G,EAAAA,EAAAA,GAAoB,KAAMqE,EAAY,GACnCnE,EAAAA,EAAAA,KAAW,IAAOE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,MAAMC,EAAAA,EAAAA,IAAYvD,EAAQnC,OAAOM,SAAUE,KACnFrB,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,KAAM,CAC9C4D,IAAKzC,EAAOH,KACX,EACDpB,EAAAA,EAAAA,GAAoB,IAAK,CACvB2G,KAAMpF,EAAOH,IACbyC,MAAO,oCACP/B,MAAO,GAAGoB,EAAQnC,OAAOY,eAAeJ,EAAOQ,oBAC9C,EACD/B,EAAAA,EAAAA,GAAoB,OAAQuE,GAAagC,EAAAA,EAAAA,IAAiBhF,EAAOQ,UAAW,GACvD,YAApBR,EAAOQ,WACH7B,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,MAAOoE,EAAaE,IAClC,aAApBnD,EAAOQ,WACL7B,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,MAAOuE,EAAaE,IAClC,mBAApBtD,EAAOQ,WACL7B,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,MAAO0E,EAAaI,IAClC,SAApB3D,EAAOQ,WACL7B,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,MAAO+E,EAAaE,IAClC,mBAApB9D,EAAOQ,WACL7B,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,MAAOkF,EAAaE,IAClC,YAApBjE,EAAOQ,WACL7B,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,MAAOqF,EAAaE,KACvDiB,EAAAA,EAAAA,IAAoB,IAAI,IACrC,EAAGtC,QAEN,WAGR,CAEJ,IChNA,MAAMV,EAAc,EAEpB,Q,UCFA,MAAMpB,GAA0BxC,EAAAA,EAAAA,GAAoB,MAAO,CACzDS,MAAO,6BACPoD,MAAO,yBACPnD,KAAM,OACNC,QAAS,YACTC,OAAQ,eACR,eAAgB,KACf,EACYZ,EAAAA,EAAAA,GAAoB,OAAQ,CACvC,iBAAkB,QAClB,kBAAmB,QACnBa,EAAG,yIAEH,GACEiD,EAAa,CAAC,SAMpB,OAA4BrB,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,kBACRO,MAAMC,GAER,MAAM2D,GAAQC,EAAAA,EAAAA,IAA6B,MACrCC,GAAkBD,EAAAA,EAAAA,KAAI,GACtBE,GAASC,EAAAA,EAAAA,MACTC,GAAQJ,EAAAA,EAAAA,IAAIE,EAAOG,aAAaC,MAAMC,UAE5C,SAASC,IACHT,EAAMO,QACRP,EAAMO,MAAMG,aAAa,OAAQ,QACjCV,EAAMO,MAAMI,SACZC,SAASC,YAAY,QACrBb,EAAMO,MAAMO,OACZd,EAAMO,MAAMG,aAAa,OAAQ,UAEjCR,EAAgBK,OAAQ,EACxB3D,YAAW,KAAQsD,EAAgBK,OAAQ,CAAK,GAAK,KAEzD,CAEA,MAAO,CAAC7G,EAAUC,MACRN,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,EACzDxG,EAAAA,EAAAA,GAAoB,OAAQ,CAC1B4H,QAASN,EACTzD,MAAO,0FACN,EACDyC,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBQ,EAAgBK,MAAQ,cAAgB,qBAAuB,IAAK,GACtG5E,KAEFxC,EAAAA,EAAAA,GAAoB,QAAS,CAC3B6C,KAAM,SACNuE,MAAO,0BAA0BF,EAAME,QACvCS,QAAS,QACTf,IAAKD,GACJ,KAAM,EAAG/C,IACX,IAEL,IC3DA,MAAM,EAAc,EAEpB,Q,4BCJc,SAAUgE,EAASC,EAAcC,EAAO,KACpD,IAAIC,EACAC,EACAC,EACJ,OAAO,WAEL,MAAMC,EAAUC,KAEVC,EAAOC,UACRN,GAKHO,aAAaN,GACbA,EAASzE,YAAW,KACdgF,KAAKC,MAAQP,GAAYH,IAC3BD,EAAGY,MAAMP,EAASE,GAClBH,EAAWM,KAAKC,M,GAEjBE,KAAKC,IAAIb,GAAQS,KAAKC,MAAQP,GAAW,MAV5CJ,EAAGY,MAAMP,EAASE,GAClBH,EAAWM,KAAKC,MAChBT,GAAa,EAUjB,CACF,C,wBCrBA,MAAMzF,EAAa,CAAEqB,MAAO,yFACtBC,EAAa,CAAC,WAAY,SAC1BC,GAAa,CAAC,YACdE,GAAa,CACjBD,IAAK,EACLH,MAAO,mCAEHK,IAA0BlE,EAAAA,EAAAA,GAAoB,KAAM,CAAE6D,MAAO,2CAA6C,gBAAiB,GAC3HM,GAAa,CAAEN,MAAO,uFAyB5B,QAA4BpB,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,WACRC,MAAO,CACP5B,OAAQ,CACN8B,KAAM+C,OACN7C,UAAU,GAEZ+F,OAAQ,CACNjG,KAAM+C,OACNK,QAAS,MAEXnE,MAAO,CACLe,KAAMC,OACNC,UAAU,GAEZgG,YAAa,CACXlG,KAAMC,OACNC,UAAU,GAEZ3B,IAAK,CACHyB,KAAMC,OACNC,UAAU,GAEZiG,YAAa,CACXnG,KAAMoG,MACNlG,UAAU,GAEZmG,YAAa,CACXrG,KAAMC,OACNmD,QAAS,MAEXkD,YAAa,CACXtG,KAAMC,OACNmD,QAAS,MAEXmD,QAAS,CACPvG,KAAM4F,KACN1F,UAAU,GAEZsG,QAAS,CACPxG,KAAM4F,KACNxC,QAAS,OAGXhD,MAAMC,GAIR,MAAMoG,GAA+BxC,EAAAA,EAAAA,IAAI,MACnCyC,GAAsCzC,EAAAA,EAAAA,IAAI,IAC1C0C,GAAkC1C,EAAAA,EAAAA,SAAI3E,GA4B5C,OA1BAuB,EAAAA,EAAAA,KAAU,KAAK,QACb,MAAM+F,EAAYR,MAAMS,KAA6C,QAAzC,EAAc,QAAd,EAACJ,EAAQlC,aAAK,aAAb,EAAeuC,iBAAiB,gBAAQ,QAAI,IACtEC,QAAQC,IAAOA,EAAEC,UAAUC,SAAS,gBAEvCR,EAAYnC,MAAQqC,EACjBnI,KAAKuI,IACJ,MAAMG,EAAIH,EACJI,EAAOD,EAAEE,UAAUC,OAEzB,OADAH,EAAEhH,GAAKiH,EAAKG,cAAcC,QAAQ,cAAe,KAAKA,QAAQ,SAAU,IACjE,CACLJ,OACAtD,KAAM,IAAIqD,EAAEhH,KACZsH,OAAsB,OAAdN,EAAEO,QACX,IAGL,MAAMC,EAAoB1C,GAAS,KAAK,MACtC0B,EAAOpC,MAAQ,IAEyD,QAFzD,EAAIqC,EAASgB,QACzBC,UACAC,MAAMd,GAAMA,EAAEe,wBAAwBC,IAAOtH,OAAOuH,YAAc,WAAG,aAFrD,EAGf9H,IAAI,GACP,KAEHO,OAAOwH,iBAAiB,SAAUP,EAAkB,IAG/C,CAACjK,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,EACrDiF,EAAAA,EAAAA,IAAaC,EAAAA,EAAU,CACrBpJ,MAAOoB,EAAQpB,MACfiH,YAAa7F,EAAQ6F,YACrB3H,IAAK8B,EAAQ9B,IACb8H,YAAahG,EAAQgG,YACrBC,YAAajG,EAAQiG,YACrBC,QAASlG,EAAQkG,QACjB+B,SAAUjI,EAAQmG,SACjB,KAAM,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,UAAW,eACpFnJ,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,uEAAkFC,EAAAA,EAAAA,KAAiB8E,EAAAA,EAAAA,IAAOvK,EAAAA,GAAPuK,CAAuBnI,EAAQnC,SAAW,MAAOwF,EAAAA,EAAAA,IAAiBrD,EAAQ4F,OAAS,cAAauC,EAAAA,EAAAA,IAAOvK,EAAAA,GAAPuK,CAAuBnI,EAAQ4F,WAAa,IAAM,uIAAwJvC,EAAAA,EAAAA,IAAiBrD,EAAQkG,QAAQkC,eAAiB,qCAAyC/E,EAAAA,EAAAA,IAAiBrD,EAAQ9B,KAAO,wBAA6BmF,EAAAA,EAAAA,IAAiBrD,EAAQgG,aAAe,oBAAyB3C,EAAAA,EAAAA,IAAiBrD,EAAQ6F,YAAYwC,WAAW,IAAM,QAAW,OAAS,MAEnsBlF,EAAG,SAGP4E,EAAAA,EAAAA,IAAaO,EAAAA,EAAa,KAAM,CAC9BlC,SAASpD,EAAAA,EAAAA,KAAS,IAAM,EACtB+E,EAAAA,EAAAA,IAAaQ,EAAAA,EAAa,CACxB5H,MAAO,uBACP6H,OAAQxI,EAAQ8F,YAAY2C,OAAO,CAAEvK,IAAK8B,EAAQ9B,IAAKU,MAAOoB,EAAQpB,SACrE,KAAM,EAAG,CAAC,YACbmJ,EAAAA,EAAAA,IAAapF,EAAwB,CACnCG,GAAI9C,EAAQ8F,YAAY9F,EAAQ8F,YAAY4C,OAAS,GAAGxK,IACxDyC,MAAO,kHACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBrD,EAAQ8F,YAAY9F,EAAQ8F,YAAY4C,OAAS,GAAG9J,OAAQ,MAEhGuE,EAAG,GACF,EAAG,CAAC,QACPrG,EAAAA,EAAAA,GAAoB,KAAMwC,GAAY+D,EAAAA,EAAAA,IAAiBrD,EAAQpB,OAAQ,IACvEmJ,EAAAA,EAAAA,IAAaY,GACZ3I,EAAQmG,UACJnJ,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,OAAQ,CACzC4D,IAAK,EACL8H,SAAU5I,EAAQmG,QAAQ0C,cAC1BlI,MAAO,gBACP/B,MAAO,YAAWuJ,EAAAA,EAAAA,IAAOW,EAAAA,GAAPX,CAAmBnI,EAAQkG,YAC5C,YAAa7C,EAAAA,EAAAA,KAAiB8E,EAAAA,EAAAA,IAAOW,EAAAA,GAAPX,CAAmBnI,EAAQmG,UAAW,EAAGvF,MACzE5D,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,OAAQ,CACzC4D,IAAK,EACL8H,SAAU5I,EAAQkG,QAAQ2C,cAC1BlI,MAAO,kBACN0C,EAAAA,EAAAA,KAAiB8E,EAAAA,EAAAA,IAAOW,EAAAA,GAAPX,CAAmBnI,EAAQkG,UAAW,EAAGrF,MACjE/D,EAAAA,EAAAA,GAAoB,MAAO,CACzB6H,QAAS,UACTf,IAAKwC,GACJ,EACD2C,EAAAA,EAAAA,IAAY1L,EAAK2L,OAAQ,YACxB,QAEL,eAAehG,EAAAA,EAAAA,KAAS,IAAM,EAC5B+E,EAAAA,EAAAA,IAAakB,EAAW,CACtBpL,OAAQmC,EAAQnC,OAChB8C,MAAO,SACN,KAAM,EAAG,CAAC,WACZ0F,EAAYnC,MAAMwE,OAAS,IACvB1L,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,MAAO6D,GAAY,CACpDC,IACAlE,EAAAA,EAAAA,GAAoB,KAAMmE,GAAY,GACnCjE,EAAAA,EAAAA,KAAW,IAAOE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,MAAMC,EAAAA,EAAAA,IAAY8C,EAAYnC,OAAQgF,KAC9ElM,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,KAAM,CAC9C4D,IAAKoI,EAAWzF,KAChB9C,MAAO,YACN,EACDoH,EAAAA,EAAAA,IAAapF,EAAwB,CACnChC,OAAOwI,EAAAA,EAAAA,IAAgB,CAC/B,8JACAD,EAAW9B,OAAS,OAAS,SAC7Bd,EAAOpC,QAAUgF,EAAWzF,KAAO,qDAAuD,6FAElFX,GAAIoG,EAAWzF,MACd,CACDV,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiB6F,EAAWnC,MAAO,MAEtD5D,EAAG,GACF,KAAM,CAAC,QAAS,YAEnB,SAEN4E,EAAAA,EAAAA,IAAaqB,EAAAA,EAAoB,CAAEzI,MAAO,cAE5C+C,EAAAA,EAAAA,IAAoB,IAAI,MAE9BP,EAAG,KAEJ,GAAG,CAER,IC9MA,MAAM,GAAc,GAEpB,S,4FCFA,MAAM7D,EAAa,CACjBqB,MAAO,iCACP,aAAc,cAEVC,EAAa,CAAED,MAAO,yCACtBE,GAA0B/D,EAAAA,EAAAA,GAAoB,MAAO,CACzD6D,MAAO,wBACPpD,MAAO,6BACPE,QAAS,YACTD,KAAM,eACN,cAAe,QACd,EACYV,EAAAA,EAAAA,GAAoB,OAAQ,CAAEa,EAAG,uMAC5C,GACEoD,GAA0BjE,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,WAAa,QAAS,GACrFK,EAAa,CAAEL,MAAO,qBACtBM,GAA0BnE,EAAAA,EAAAA,GAAoB,MAAO,CACzD6D,MAAO,sCACPpD,MAAO,6BACPC,KAAM,eACNC,QAAS,YACT,cAAe,QACd,EACYX,EAAAA,EAAAA,GAAoB,OAAQ,CAAEa,EAAG,kDAC5C,GACEuD,EAAa,CACjBJ,IAAK,EACLH,MAAO,0CAOT,OAA4BpB,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,uBACRC,MAAO,CACP+I,OAAQ,CACN7I,KAAMoG,MACNlG,UAAU,IAGZE,MAAMC,GAIR,MAAO,CAAC3C,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,MAAOoC,EAAY,EAC3DxC,EAAAA,EAAAA,GAAoB,KAAM8D,EAAY,EACpC9D,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,MAAO,KAAM,EAC/BiL,EAAAA,EAAAA,IAAapF,EAAwB,CACnCG,GAAI,IACJnC,MAAO,qCACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBnC,EACAE,KAEFoC,EAAG,UAIRnG,EAAAA,EAAAA,KAAW,IAAOE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,MAAMC,EAAAA,EAAAA,IAAYvD,EAAQwI,QAAQ,CAACxE,EAAOqF,MAClFrM,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,KAAM,CAC9C4D,IAAKkD,EAAM9F,KACV,EACDpB,EAAAA,EAAAA,GAAoB,MAAOkE,EAAY,CACrCC,EACCoI,IAAUrJ,EAAQwI,OAAOE,OAAS,IAC9B1L,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,OAAQgE,GAAYmC,EAAAA,EAAAA,IAAiBW,EAAMpF,OAAQ,MACrF5B,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaF,EAAwB,CAClD7B,IAAK,EACLgC,GAAIkB,EAAM9F,IACVyC,MAAO,8DACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBW,EAAMpF,OAAQ,MAElDuE,EAAG,GACF,KAAM,CAAC,eAGhB,SAEN,CAEJ,ICzFA,MAAMzC,EAAc,EAEpB,O,4FCFA,MAAMpB,EAAa,CACjBwB,IAAK,EACL,cAAe,OACfrD,QAAS,YACTD,KAAM,OACNmD,MAAO,yGAEHC,GAA0B0I,EAAAA,EAAAA,IAAmB,25DAA48D,GACz/DvI,EAAa,CACjBH,GAEII,EAAa,CACjBF,IAAK,EACL,cAAe,OACfrD,QAAS,YACTD,KAAM,OACNmD,MAAO,6GAEHM,GAA0BqI,EAAAA,EAAAA,IAAmB,qjCAAsnC,GACnqCnI,EAAa,CACjBF,GAEIG,EAAa,CAAET,MAAO,8BAK5B,OAA4BpB,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,mBACRC,MAAO,CACP8J,KAAM,CACJ5J,KAAMC,OACNC,UAAU,GAEZ2J,QAAS,CACP7J,KAAMC,OACNmD,QAAS,MAEXnE,MAAO,CACLe,KAAMC,OACNmD,aAAS9D,IAGXc,MAAMC,GAER,MAEMyJ,EAAS,CACbC,KAAM,CACJC,UAAW,YACX/K,MAAO,eACPgL,KAAM,0GAERC,QAAS,CACPF,UAAW,cACX/K,MAAO,iBACPgL,KAAM,kKAMV,MAAO,CAACvM,EAAUC,MACRN,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,MAAO,CAC/CyD,OAAOwI,EAAAA,EAAAA,IAAgB,CAAC,4BAA6BM,EAAOzJ,EAAQuJ,MAAMI,aACzE,CACiB,SAAjB3J,EAAQuJ,OACJvM,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,MAAOoC,EAAYyB,MACrD/D,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,MAAO8D,EAAYG,KAC1DrE,EAAAA,EAAAA,GAAoB,MAAOsE,EAAY,CACpCpB,EAAQpB,QACJ5B,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyBlI,EAAQwJ,SAAU,CACrE1I,IAAK,EACLH,OAAOwI,EAAAA,EAAAA,IAAgB,CAAC,qEAAsEM,EAAOzJ,EAAQuJ,MAAM3K,SAClH,CACDmE,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBrD,EAAQpB,OAAQ,MAEpDuE,EAAG,GACF,EAAG,CAAC,YACPO,EAAAA,EAAAA,IAAoB,IAAI,IAC5B5G,EAAAA,EAAAA,GAAoB,MAAO,CACzB6D,OAAOwI,EAAAA,EAAAA,IAAgB,CAAC,QAASM,EAAOzJ,EAAQuJ,MAAMK,QACrD,EACDb,EAAAA,EAAAA,IAAY1L,EAAK2L,OAAQ,YACxB,MAEJ,GAEL,ICzFA,MAAMtI,EAAc,EAEpB,O,4FCFA,MAAMpB,EAAa,CAAC,MACdsB,EAAa,CAAED,MAAO,4BACtBE,EAAa,CAAEF,MAAO,0DACtBI,EAAa,CAAEJ,MAAO,qBACtBK,EAAa,CAAC,MAAO,MAAO,QAAS,UAG3C,OAA4BzB,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,YACRC,MAAO,CACPqK,KAAM,CACJnK,KAAMoK,OACNlK,UAAU,GAEZjB,MAAO,CACLe,KAAMC,OACNC,UAAU,GAEZlB,IAAK,CACHgB,KAAMC,OACNC,UAAU,GAEZmK,SAAU,CACRrK,KAAMoK,OACNlK,UAAU,GAEZoK,UAAW,CACTtK,KAAMoK,OACNlK,UAAU,IAGZE,MAAMC,GAIR,MAAO,CAAC3C,EAAUC,MACRN,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,MAAO,CAC/C4C,GAAI,OAAOE,EAAQ8J,OACnBnJ,MAAO,0EACN,EACD7D,EAAAA,EAAAA,GAAoB,MAAO8D,EAAY,EACrC9D,EAAAA,EAAAA,GAAoB,MAAO+D,GAAYwC,EAAAA,EAAAA,IAAiBrD,EAAQ8J,MAAO,IACvEhN,EAAAA,EAAAA,GAAoB,KAAMiE,GAAYsC,EAAAA,EAAAA,IAAiBrD,EAAQpB,OAAQ,IACvEmK,EAAAA,EAAAA,IAAY1L,EAAK2L,OAAQ,cAE3BlM,EAAAA,EAAAA,GAAoB,MAAO,CACzB6D,MAAO,mEACPsC,IAAKjD,EAAQrB,IACbuE,IAAKlD,EAAQpB,MACbsL,MAAOlK,EAAQgK,SACfG,OAAQnK,EAAQiK,WACf,KAAM,EAAGjJ,IACX,EAAG1B,GAER,ICtDA,MAAMoB,EAAc,EAEpB,O,0JCFA,MAAMpB,EAAa,CAAEqB,MAAO,wBAM5B,OAA4BpB,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,YACRC,MAAO,CACP2K,OAAQ,CACNzK,KAAMC,OACNmD,QAAS,kBAGXhD,MAAMC,GAER,MAAMqK,GAAQC,EAAAA,EAAAA,MACRC,GAAO3G,EAAAA,EAAAA,IAAwB,MAWrC,OAPA4G,EAAAA,EAAAA,KAAY,KACuB,MAA7BD,EAAKrG,OAASmG,EAAMtH,UACtBwH,EAAKrG,MAAMuG,WAAuC,QAA3B,EAAAJ,EAAMtH,UAAU,GAAG2H,gBAAQ,aAA3B,EAA6BpM,aAAc,GAClEqM,IAAAA,iBAAuBJ,EAAKrG,O,IAIzB,CAAC7G,EAAUC,MACRN,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,MAAOoC,EAAY,EAC3DxC,EAAAA,EAAAA,GAAoB,OAAQ,CAC1B6H,QAAS,OACTf,IAAK2G,EACL5J,OAAOwI,EAAAA,EAAAA,IAAgB,YAAYnJ,EAAQoK,WAC1C,KAAM,KAGb,ICrCA,MAAM1J,EAAc,EAEpB,O,6KCFA,MAAMpB,GAA0BgK,EAAAA,EAAAA,IAAmB,23GAAs5G,GAUz8G,OAA4B/J,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,YACRO,MAAMC,GAER,MAAM8F,EAAc,CAACzG,EAAAA,GAAiB,CAAEnB,IAAKY,EAAAA,GAAAA,IAAUF,MAAOE,EAAAA,GAAAA,OAE9D,MAAO,CAACzB,EAAUC,MACRN,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,EACrDiF,EAAAA,EAAAA,IAAaC,EAAAA,EAAU,CACrBpJ,MAAO,sBACPiH,aAAasC,EAAAA,EAAAA,IAAOrJ,EAAAA,IAAMf,IAAIC,KAAK,KACnCE,IAAK,gDACJ,KAAM,EAAG,CAAC,kBACZlB,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,KAAiB8E,EAAAA,EAAAA,IAAOvK,EAAAA,GAAPuK,EAAuBA,EAAAA,EAAAA,IAAOrJ,EAAAA,MAAS,MAE3EqE,EAAG,SAGP4E,EAAAA,EAAAA,IAAa6C,EAAAA,IACb7C,EAAAA,EAAAA,IAAaQ,EAAAA,EAAa,CACxBC,OAAQ1C,EACRnF,MAAO,uDAETrB,GACAyI,EAAAA,EAAAA,IAAa8C,EAAAA,IACZ,IAEL,ICxCA,MAAMnK,EAAc,EAEpB,O,4KCFA,MAAMpB,GAA0BgK,EAAAA,EAAAA,IAAmB,q2BAA03B,GACv6B1I,EAAa,CAAED,MAAO,0CACtBE,EAAa,CAAEF,MAAO,mGACtBI,EAAa,CAAEJ,MAAO,0DACtBK,GAA0BlE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,wBAAyB,GACnFmE,GAA0BnE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0KAA2K,GACpOoE,GAA0BpE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mHAAoH,GAC7KqE,GAA0BrE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4FAA6F,GACtJsE,GAA0BtE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oBAAqB,GAC/EuE,GAA2BvE,EAAAA,EAAAA,GAAoB,IAAK,CAAE2G,KAAM,6BAA+B,aAAc,GACzGnC,GAA2BxE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8DAA+D,GACzHyE,GAA2BzE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,aAAc,GACzE0E,GAA2B1E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,sOACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,sEACpCsG,EAAAA,EAAAA,IAAiB,eAC5B,GACE3B,GAA2B3E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gHAAiH,GAUjL,OAA4ByC,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,gBACRO,MAAMC,GAER,MAAM8F,EAAc,CAACzG,EAAAA,GAAiB,CAAEnB,IAAKM,EAAAA,GAAAA,IAAcI,MAAOJ,EAAAA,GAAAA,OAElE,MAAO,CAACnB,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,EACrDiF,EAAAA,EAAAA,IAAaC,EAAAA,EAAU,CACrBpJ,MAAO,qBACPiH,aAAasC,EAAAA,EAAAA,IAAO3J,EAAAA,IAAUT,IAAIC,KAAK,KACvCE,IAAK,+CACJ,KAAM,EAAG,CAAC,kBACZlB,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,KAAiB8E,EAAAA,EAAAA,IAAOvK,EAAAA,GAAPuK,EAAuBA,EAAAA,EAAAA,IAAO3J,EAAAA,MAAa,MAE/E2E,EAAG,SAGP4E,EAAAA,EAAAA,IAAa6C,EAAAA,IACb7C,EAAAA,EAAAA,IAAaQ,EAAAA,EAAa,CACxBC,OAAQ1C,EACRnF,MAAO,uDAETrB,GACAxC,EAAAA,EAAAA,GAAoB,UAAW8D,EAAY,EACzC9D,EAAAA,EAAAA,GAAoB,MAAO+D,EAAY,EACrC/D,EAAAA,EAAAA,GAAoB,MAAOiE,EAAY,CACrCC,EACAC,EACAC,EACAC,EACAC,GACAtE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,iBACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,+CAAiD,CAC1FC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,4BAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,+GACjB/B,GACA+B,EAAAA,EAAAA,IAAiB,OAEnB9B,EACAC,EACAC,EACAC,SAINsG,EAAAA,EAAAA,IAAa8C,EAAAA,IACZ,GAAG,CAER,ICtFA,MAAMnK,EAAc,EAEpB,O,+ICFA,MAAMpB,GAA0BgK,EAAAA,EAAAA,IAAmB,knBAA6nB,GAC1qB1I,EAAa,CAAED,MAAO,sBACtBE,EAAa,CAAEF,MAAO,yDACtBI,EAAa,CAAEJ,MAAO,2DACtBK,GAA0BlE,EAAAA,EAAAA,GAAoB,MAAO,CAAE6D,MAAO,0BAA4B,EACjF7D,EAAAA,EAAAA,GAAoB,KAAM,CAAE6D,MAAO,sDAAwD,aAC3F7D,EAAAA,EAAAA,GAAoB,IAAK,CAAE6D,MAAO,yBAA2B,kFACxE,GACEM,EAAa,CAAEN,MAAO,iBACtBO,EAAa,CAAEP,MAAO,2FACtBQ,EAAa,CAAER,MAAO,WACtBS,EAAa,CAAET,MAAO,yEACtBU,GAA2BvE,EAAAA,EAAAA,GAAoB,MAAO,CAC1D6D,MAAO,oCACPsC,IAAK,uBACLC,IAAK,eACLtE,MAAO,gBACN,MAAO,GACJ0C,EAAc,CAAEX,MAAO,iBACvBY,EAAc,CAAEZ,MAAO,aACvBa,EAAc,CAAEb,MAAO,2CACvBc,GAA2B3E,EAAAA,EAAAA,GAAoB,IAAK,CAAE6D,MAAO,mBAAqB,oBAAqB,GACvGe,GAA2B4H,EAAAA,EAAAA,IAAmB,06EAAu/E,GACriF1H,EAAc,CAAEjB,MAAO,WACvBkB,EAAc,CAAElB,MAAO,yEACvBmB,GAA2BhF,EAAAA,EAAAA,GAAoB,MAAO,CAC1D6D,MAAO,oCACPsC,IAAK,mBACLC,IAAK,gBACLtE,MAAO,iBACN,MAAO,GACJmD,EAAc,CAAEpB,MAAO,iBACvBqB,EAAc,CAAErB,MAAO,aACvBsB,EAAc,CAAEtB,MAAO,2CACvBuB,GAA2BpF,EAAAA,EAAAA,GAAoB,IAAK,CAAE6D,MAAO,mBAAqB,oBAAqB,GACvGwB,GAA2BmH,EAAAA,EAAAA,IAAmB,y1FAAw8F,GAS5/F,OAA4B/J,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,YACRO,MAAMC,GAER,MAAM8F,EAAc,CAACzG,EAAAA,IAErB,MAAO,CAAChC,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,EACrDiF,EAAAA,EAAAA,IAAaC,EAAAA,EAAU,CACrBpJ,MAAO,oBACPiH,YAAa,uHACb3H,IAAK,uCAGT6J,EAAAA,EAAAA,IAAa6C,EAAAA,IACb7C,EAAAA,EAAAA,IAAaQ,EAAAA,EAAa,CACxBC,OAAQ1C,EACRnF,MAAO,uDAETrB,GACAxC,EAAAA,EAAAA,GAAoB,MAAO8D,EAAY,EACrC9D,EAAAA,EAAAA,GAAoB,MAAO+D,EAAY,EACrC/D,EAAAA,EAAAA,GAAoB,MAAOiE,EAAY,CACrCC,GACAlE,EAAAA,EAAAA,GAAoB,MAAOmE,EAAY,EACrCnE,EAAAA,EAAAA,GAAoB,KAAMoE,EAAY,EACpCpE,EAAAA,EAAAA,GAAoB,KAAMqE,EAAY,EACpCrE,EAAAA,EAAAA,GAAoB,MAAOsE,EAAY,EACrC2G,EAAAA,EAAAA,IAAapF,EAAwB,CACnCG,GAAI,uBACJnC,MAAO,qDACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB3B,KAEF8B,EAAG,KAELrG,EAAAA,EAAAA,GAAoB,MAAOwE,EAAa,EACtCxE,EAAAA,EAAAA,GAAoB,MAAOyE,EAAa,EACtCzE,EAAAA,EAAAA,GAAoB,MAAO0E,EAAa,EACtC1E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BiL,EAAAA,EAAAA,IAAapF,EAAwB,CACnCG,GAAI,uBACJnC,MAAO,+BACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,mBAEnBD,EAAG,MAGP1B,IAEFC,WAKR5E,EAAAA,EAAAA,GAAoB,KAAM8E,EAAa,EACrC9E,EAAAA,EAAAA,GAAoB,MAAO+E,EAAa,EACtCkG,EAAAA,EAAAA,IAAapF,EAAwB,CACnCG,GAAI,wBACJnC,MAAO,qDACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBlB,KAEFqB,EAAG,KAELrG,EAAAA,EAAAA,GAAoB,MAAOiF,EAAa,EACtCjF,EAAAA,EAAAA,GAAoB,MAAOkF,EAAa,EACtClF,EAAAA,EAAAA,GAAoB,MAAOmF,EAAa,EACtCnF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BiL,EAAAA,EAAAA,IAAapF,EAAwB,CACnCG,GAAI,wBACJnC,MAAO,+BACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,oBAEnBD,EAAG,MAGPjB,IAEFC,qBAUlB4F,EAAAA,EAAAA,IAAa8C,EAAAA,IACZ,GAAG,CAER,ICjJA,MAAMnK,EAAc,EAEpB,O,2HCFA,MAAMpB,EAAa,CAAEqB,MAAO,wCACtBC,EAAa,CAAED,MAAO,cACtBE,EAAa,CAAEF,MAAO,kBACtBI,EAAa,CAAEJ,MAAO,6DACtBK,GAA0BlE,EAAAA,EAAAA,GAAoB,KAAM,CAAE6D,MAAO,2EAA6E,kBAAmB,GAC7JM,EAAa,CAAEN,MAAO,wCACtBO,GAA0BpE,EAAAA,EAAAA,GAAoB,UAAW,CAC7D6D,MAAO,iCACP,kBAAmB,mBAClB,EACY7D,EAAAA,EAAAA,GAAoB,MAAO,CAAE6D,MAAO,mDAAqD,EACvF7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,gIACPuJ,MAAO,MACPC,OAAQ,MACR3M,KAAM,OACNC,QAAS,cACT,cAAe,QACd,EACYX,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,EAChCA,EAAAA,EAAAA,GAAoB,UAAW,CAC1CgD,GAAI,uCACJgL,EAAG,IACHC,EAAG,IACHb,MAAO,KACPC,OAAQ,KACRa,aAAc,kBACb,EACYlO,EAAAA,EAAAA,GAAoB,OAAQ,CACvCgO,EAAG,IACHC,EAAG,IACHb,MAAO,IACPC,OAAQ,IACRxJ,MAAO,gBACPnD,KAAM,sBAICV,EAAAA,EAAAA,GAAoB,OAAQ,CACvCoN,MAAO,MACPC,OAAQ,MACR3M,KAAM,oDAICV,EAAAA,EAAAA,GAAoB,MAAO,CAAE6D,MAAO,0CAA4C,EAC9E7D,EAAAA,EAAAA,GAAoB,MAAO,CAAE6D,MAAO,+BAAiC,EACnE7D,EAAAA,EAAAA,GAAoB,MAAO,CAAE6D,MAAO,mCAAqC,EACvE7D,EAAAA,EAAAA,GAAoB,MAAO,CAAE6D,MAAO,uGAAyG,EAC3I7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,iDACP,cAAe,QACd,EACY7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,iCACPuJ,MAAO,MACPC,OAAQ,MACR1M,QAAS,cACTD,KAAM,OACNyN,oBAAqB,iBACrB1N,MAAO,8BACN,EACYT,EAAAA,EAAAA,GAAoB,OAAQ,CACvCa,EAAG,wEACHH,KAAM,gBACN,eAAgB,QAELV,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,EAChCA,EAAAA,EAAAA,GAAoB,iBAAkB,CACjDgD,GAAI,UACJoL,GAAI,UACJC,GAAI,UACJC,GAAI,SACJC,GAAI,SACJC,cAAe,kBACd,EACYxO,EAAAA,EAAAA,GAAoB,OAAQ,CAAE,aAAc,UAC5CA,EAAAA,EAAAA,GAAoB,OAAQ,CACvCyO,OAAQ,IACR,aAAc,OACd,eAAgB,eAMbzO,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,sFACP,cAAe,QACd,EACY7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,iCACPuJ,MAAO,MACPC,OAAQ,MACR1M,QAAS,cACTD,KAAM,OACNyN,oBAAqB,iBACrB1N,MAAO,8BACN,EACYT,EAAAA,EAAAA,GAAoB,OAAQ,CACvCa,EAAG,0EACHH,KAAM,gBACN,eAAgB,QAELV,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,EAChCA,EAAAA,EAAAA,GAAoB,iBAAkB,CACjDgD,GAAI,UACJoL,GAAI,UACJC,GAAI,SACJC,GAAI,SACJC,GAAI,SACJC,cAAe,kBACd,EACYxO,EAAAA,EAAAA,GAAoB,OAAQ,CAAE,aAAc,UAC5CA,EAAAA,EAAAA,GAAoB,OAAQ,CACvCyO,OAAQ,IACR,aAAc,OACd,eAAgB,eAMbzO,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,4EACP,cAAe,QACd,EACY7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,iCACPuJ,MAAO,MACPC,OAAQ,MACR1M,QAAS,cACTD,KAAM,OACNyN,oBAAqB,iBACrB1N,MAAO,8BACN,EACYT,EAAAA,EAAAA,GAAoB,OAAQ,CACvCa,EAAG,yEACHH,KAAM,gBACN,eAAgB,QAELV,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,EAChCA,EAAAA,EAAAA,GAAoB,iBAAkB,CACjDgD,GAAI,UACJoL,GAAI,UACJC,GAAI,UACJC,GAAI,SACJC,GAAI,UACJC,cAAe,kBACd,EACYxO,EAAAA,EAAAA,GAAoB,OAAQ,CAAE,aAAc,UAC5CA,EAAAA,EAAAA,GAAoB,OAAQ,CACvCyO,OAAQ,IACR,aAAc,OACd,eAAgB,eAMbzO,EAAAA,EAAAA,GAAoB,KAAM,CAAE6D,MAAO,uCAAyC,qBAC5E7D,EAAAA,EAAAA,GAAoB,KAAM,CAAE6D,MAAO,0CAA4C,EAC7E7D,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yBAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sCAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,wCAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sCAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,mBAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,+BAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,0BAGpCA,EAAAA,EAAAA,GAAoB,MAAO,CAAE6D,MAAO,6CAA+C,EACjF7D,EAAAA,EAAAA,GAAoB,KAAM,CAAE6D,MAAO,qCAAuC,sBAC1E7D,EAAAA,EAAAA,GAAoB,OAAQ,CACvC6D,MAAO,0DACP6K,OAAQ,OACRC,OAAQ,wPACP,EACY3O,EAAAA,EAAAA,GAAoB,MAAO,KAAM,EAC/BA,EAAAA,EAAAA,GAAoB,QAAS,CACxC4O,IAAK,aACL/K,MAAO,2CACN,eACU7D,EAAAA,EAAAA,GAAoB,MAAO,CAAE6D,MAAO,QAAU,EAC5C7D,EAAAA,EAAAA,GAAoB,QAAS,CACxC6O,UAAW,MACXhM,KAAM,OACNG,GAAI,YACJhC,KAAM,YACN,gBAAiB,OACjB+B,SAAU,GACV+L,aAAc,aACdjL,MAAO,wIAIA7D,EAAAA,EAAAA,GAAoB,MAAO,KAAM,EAC/BA,EAAAA,EAAAA,GAAoB,QAAS,CACxC4O,IAAK,YACL/K,MAAO,2CACN,cACU7D,EAAAA,EAAAA,GAAoB,MAAO,CAAE6D,MAAO,QAAU,EAC5C7D,EAAAA,EAAAA,GAAoB,QAAS,CACxC6O,UAAW,MACXhM,KAAM,OACNG,GAAI,WACJhC,KAAM,WACN,gBAAiB,OACjB+B,SAAU,GACV+L,aAAc,cACdjL,MAAO,wIAIA7D,EAAAA,EAAAA,GAAoB,MAAO,CAAE6D,MAAO,iBAAmB,EACrD7D,EAAAA,EAAAA,GAAoB,QAAS,CACxC4O,IAAK,QACL/K,MAAO,2CACN,mBACU7D,EAAAA,EAAAA,GAAoB,MAAO,CAAE6D,MAAO,QAAU,EAC5C7D,EAAAA,EAAAA,GAAoB,QAAS,CACxC6C,KAAM,OACNG,GAAI,QACJhC,KAAM,QACN8N,aAAc,MACd,gBAAiB,OACjB/L,SAAU,GACVc,MAAO,wIAIA7D,EAAAA,EAAAA,GAAoB,MAAO,CAAE6D,MAAO,wCAA0C,EAC5E7D,EAAAA,EAAAA,GAAoB,SAAU,CACzC6C,KAAM,SACNgB,MAAO,uQACN,qBAEQ7D,EAAAA,EAAAA,GAAoB,QAAS,CACxC6D,MAAO,SACP+K,IAAK,sBACL,gBAAiB,KAChB,wBACU5O,EAAAA,EAAAA,GAAoB,QAAS,CACxC6C,KAAM,OACN7B,KAAM,sBACNoG,MAAO,GACPvD,MAAO,SACPb,GAAI,yBAEOhD,EAAAA,EAAAA,GAAoB,QAAS,CACxC6C,KAAM,SACN7B,KAAM,SACNoG,MAAO,QAEIpH,EAAAA,EAAAA,GAAoB,QAAS,CACxC6C,KAAM,SACN7B,KAAM,YACNoG,MAAO,uBAOjB,GAMJ,OAA4B3E,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,UACRO,MAAMC,GAGR,MAAO,CAAC3C,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,EACrDiF,EAAAA,EAAAA,IAAaC,EAAAA,EAAU,CACrBpJ,MAAO,iBACPiH,YAAa,6HACb3H,IAAK,gDAGT6J,EAAAA,EAAAA,IAAa6C,EAAAA,IACb9N,EAAAA,EAAAA,GAAoB,OAAQwC,EAAY,EACtCxC,EAAAA,EAAAA,GAAoB,MAAO8D,EAAY,EACrC9D,EAAAA,EAAAA,GAAoB,MAAO+D,EAAY,EACrC/D,EAAAA,EAAAA,GAAoB,MAAOiE,EAAY,CACrCC,GACAlE,EAAAA,EAAAA,GAAoB,IAAKmE,EAAY,EACnCmC,EAAAA,EAAAA,IAAiB,SACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CACnCG,GAAI,IACJlE,MAAO,cACN,CACDmE,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,+EAKzBlC,KAEF6G,EAAAA,EAAAA,IAAa8C,EAAAA,IACZ,GAAG,CAER,ICzTA,MAAMnK,EAAc,EAEpB,O,mKCFA,MAAMpB,EAAa,CAAEqB,MAAO,4BACtBC,EAAa,CAAED,MAAO,+BACtBE,GAA0B/D,EAAAA,EAAAA,GAAoB,KAAM,CAAE6D,MAAO,2BAA6B,WAAY,GACtGI,EAAa,CAAEJ,MAAO,2EACtBK,EAAa,CAAEL,MAAO,YACtBM,GAA0BnE,EAAAA,EAAAA,GAAoB,MAAO,CAAE6D,MAAO,gBAAkB,EACvE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,uBACPsC,IAAK,uBACLC,IAAK,6BAEL,GACEhC,EAAa,CAAEP,MAAO,kBACtBQ,GAA0BrE,EAAAA,EAAAA,GAAoB,IAAK,CAAE2G,KAAM,4BAA8B,qBAAsB,GAC/GrC,EAAa,CAAET,MAAO,YACtBU,EAAc,CAClBV,MAAO,eACP8K,OAAQ,iBACRD,OAAQ,QAEJlK,GAA2BgI,EAAAA,EAAAA,IAAmB,i/BAAoiC,GACllC7H,EAAc,CAAEd,MAAO,6DACvBe,GAA2B5E,EAAAA,EAAAA,GAAoB,SAAU,CAC7D6C,KAAM,SACNgB,MAAO,6QACN,QAAS,GACNgB,EAAc,CAAEb,IAAK,GACrBc,GAA2B9E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,MAAO,GAClE+E,GAA2B/E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,MAAO,GAClEgF,GAA2BhF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,MAAO,GAClEiF,GAA2BjF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,MAAO,GAClEkF,GAA2BlF,EAAAA,EAAAA,GAAoB,IAAK,CACxD2G,KAAM,2BACN9C,MAAO,2BACN,qBAAsB,GAUzB,OAA4BpB,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,YACRO,MAAMC,GAER,MAAMgE,GAAQ6H,EAAAA,EAAAA,MAEd,MAAO,CAACxO,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,EACrDiF,EAAAA,EAAAA,IAAaC,EAAAA,EAAU,CACrBpJ,MAAO,wBACPiH,YAAa,mHACb3H,IAAK,4CAGT6J,EAAAA,EAAAA,IAAa6C,EAAAA,IACb9N,EAAAA,EAAAA,GAAoB,MAAOwC,EAAY,EACrCxC,EAAAA,EAAAA,GAAoB,OAAQ8D,EAAY,CACtCC,GACA/D,EAAAA,EAAAA,GAAoB,MAAOiE,EAAY,CACpC,CAAC,IAAK,IAAI+K,UAAS3D,EAAAA,EAAAA,IAAOnE,GAAO+H,QAC7B/O,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,CAAExC,IAAK,GAAK,EACxDhE,EAAAA,EAAAA,GAAoB,MAAOkE,EAAY,CACrCC,GACAnE,EAAAA,EAAAA,GAAoB,IAAKoE,EAAY,EACnCkC,EAAAA,EAAAA,IAAiB,8BACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CACnCG,GAAI,IACJlE,MAAO,YACN,CACDmE,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,eAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,uDACjBjC,GACAiC,EAAAA,EAAAA,IAAiB,0EAGrBtG,EAAAA,EAAAA,GAAoB,MAAOsE,EAAY,EACrCtE,EAAAA,EAAAA,GAAoB,OAAQuE,EAAa,CACvCC,GACAxE,EAAAA,EAAAA,GAAoB,MAAO2E,EAAa,EACtCsG,EAAAA,EAAAA,IAAaiE,EAAAA,EAAkB,CAC7BtM,QAAS,2BACTI,GAAI,YAEN4B,SAIL,KACqB,mBAAvByG,EAAAA,EAAAA,IAAOnE,GAAO+H,OACZ/O,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,MAAOyE,EAAa,EACrDyB,EAAAA,EAAAA,IAAiB,gCACjBxB,EACAC,GACAuB,EAAAA,EAAAA,IAAiB,+CAElBpG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAO,CACjCnL,IAAK,EACLH,MAAO,UACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,oCACjBtB,EACAC,GACAqB,EAAAA,EAAAA,IAAiB,uBACjBpB,GACAoB,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,YAKjB4E,EAAAA,EAAAA,IAAa8C,EAAAA,IACZ,GAAG,CAER,IC9HA,MAAMnK,EAAc,EAEpB,O,kHCFA,MAAMpB,GAA0BxC,EAAAA,EAAAA,GAAoB,KAAM,CAAE6D,MAAO,oGAAsG,0CAA2C,GAC9MC,GAA0B9D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6IAA8I,GACvM+D,GAA0B/D,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,IAAK,CACpCoP,OAAQ,SACRC,IAAK,sBACL1I,KAAM,6EACL,+CACD,GAKJ,OAA4BlE,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,cACRO,MAAMC,GAGR,MAAO,CAAC3C,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,EACrDiF,EAAAA,EAAAA,IAAaC,EAAAA,EAAU,CACrBpJ,MAAO,yCACPiH,YAAa,0JACb3H,IAAK,yCAGT6J,EAAAA,EAAAA,IAAaO,EAAAA,EAAa,KAAM,CAC9BlC,SAASpD,EAAAA,EAAAA,KAAS,IAAM,CACtB1D,EACAsB,GACA9D,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,gDAAkD,CAC3FC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,gDAEnBD,EAAG,OAGPrG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,+CAAiD,CAC1FC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,+CAEnBD,EAAG,OAGPrG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,6CAA+C,CACxFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,6CAEnBD,EAAG,MAGPtC,OAGJsC,EAAG,KAEJ,GAAG,CAER,ICjEA,MAAMzC,EAAc,EAEpB,O,ycCFA,MAAMpB,EAAa,CAAEqB,MAAO,0EACtBC,EAAa,CAAED,MAAO,8BACtBE,GAA0B/D,EAAAA,EAAAA,GAAoB,MAAO,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,CAAE6D,MAAO,oEAAsE,qBACpH,GACEI,EAAa,CAAC,MACdC,EAAa,CAAEL,MAAO,wEACtBM,EAAa,CAAC,MAAO,MAAO,SAC5BC,EAAa,CAAEP,MAAO,qDACtBQ,EAAa,CAAER,MAAO,UACtBS,EAAa,CAAET,MAAO,uCACtBU,EAAc,CAAEV,MAAO,uCACvBW,EAAc,CAAEX,MAAO,gCACvBY,EAAc,CAAEZ,MAAO,0BACvBa,EAAc,CAAEb,MAAO,iBACvBc,EAAc,CAAEd,MAAO,WACvBe,GAAc,CAAC,MAAO,OACtBC,GAAc,CAAEb,IAAK,GACrBc,GAAc,CAAEjB,MAAO,WACvBkB,GAAc,CAAC,MAAO,OACtBC,GAAc,CAAEnB,MAAO,QACvBoB,GAAc,CAAEpB,MAAO,qCACvBqB,GAAc,CAAElB,IAAK,GACrBmB,GAAc,CAAEtB,MAAO,wCACvBuB,GAAc,CAAC,YACfC,GAAc,CAAC,YAsCrB,QAA4B5C,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,eACRO,MAAMC,GAER,MAAMoM,EAAW,CACf,CACE5C,QAAS,eACT6C,SAAU,CACRC,EAAAA,WAAAA,KACAC,EAAAA,WAAAA,KACAC,EAAAA,WAAAA,KACAC,EAAAA,WAAAA,KACAC,EAAAA,WAAAA,KACAC,EAAAA,WAAAA,KACAC,EAAAA,WAAAA,KACAC,EAAAA,WAAAA,OAGJ,CACErD,QAAS,mBACT6C,SAAU,CACRS,EAAAA,WAAAA,KACAC,EAAAA,WAAAA,KACAC,EAAAA,WAAAA,KACAC,EAAAA,WAAAA,KACAC,EAAAA,WAAAA,KACAC,EAAAA,WAAAA,KACAC,EAAAA,WAAAA,KACAC,EAAAA,WAAAA,KACAC,EAAAA,WAAAA,OAGJ,CACE9D,QAAS,oBACT6C,SAAU,CACRkB,EAAAA,WAAAA,KACAC,EAAAA,WAAAA,KACAC,EAAAA,WAAAA,KACAC,EAAAA,WAAAA,KACAC,EAAAA,WAAAA,KACAC,EAAAA,WAAAA,KACAZ,EAAAA,WAAAA,OAGJ,CACExD,QAAS,eACT6C,SAAU,CACRwB,EAAAA,WAAAA,KACAC,EAAAA,WAAAA,KACAC,EAAAA,WAAAA,OAGJ,CACEvE,QAAS,aACT6C,SAAU,CACR2B,EAAAA,WAAAA,KACAC,EAAAA,WAAAA,OAGJ,CACEzE,QAAS,qBACT6C,SAAU,CACR6B,EAAAA,WAAAA,OAGJ,CACE1E,QAAS,WACT6C,SAAU,CACR8B,EAAAA,WAAAA,QAKN,MAAO,CAAC9Q,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,EACrDiF,EAAAA,EAAAA,IAAaC,EAAAA,EAAU,CACrBpJ,MAAO,gCACPiH,YAAa,yCACb3H,IAAK,oCACL8H,YAAa,kEACbC,YAAa,wEAGjB8B,EAAAA,EAAAA,IAAa6C,EAAAA,IACb9N,EAAAA,EAAAA,GAAoB,MAAOwC,EAAY,EACrCxC,EAAAA,EAAAA,GAAoB,MAAO8D,EAAY,CACrCC,IACC7D,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,MAAMC,EAAAA,EAAAA,IAAY6I,GAAWgC,KACjEpR,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,CACnDxC,IAAKsN,EAAQ5E,SACZ,EACD1M,EAAAA,EAAAA,GAAoB,KAAM,CACxBgD,GAAIsO,EAAQ5E,QAAQtC,cAAcmB,WAAW,IAAK,KAClD1H,MAAO,+CACN0C,EAAAA,EAAAA,IAAiB+K,EAAQ5E,SAAU,EAAGzI,IACzCjE,EAAAA,EAAAA,GAAoB,MAAOkE,EAAY,GACpChE,EAAAA,EAAAA,KAAW,IAAOE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,MAAMC,EAAAA,EAAAA,IAAY6K,EAAQ/B,UAAWgC,KAC7ErR,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,MAAO,CAC/C4D,IAAKuN,EAAKzP,MACV+B,MAAO,sDACN,EACDoH,EAAAA,EAAAA,IAAapF,EAAwB,CACnCG,GAAIuL,EAAKnQ,IACTyC,MAAO,iBACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBlG,EAAAA,EAAAA,GAAoB,MAAO,CACzB6D,MAAO,yCACPsC,IAAKoL,EAAKC,cACVpL,IAAKmL,EAAKE,iBACV3P,MAAOyP,EAAKE,kBACX,KAAM,EAAGtN,MAEdkC,EAAG,GACF,KAAM,CAAC,QACVrG,EAAAA,EAAAA,GAAoB,MAAOoE,EAAY,EACrCpE,EAAAA,EAAAA,GAAoB,MAAOqE,EAAY,EACrCrE,EAAAA,EAAAA,GAAoB,IAAKsE,EAAY,EACnCtE,EAAAA,EAAAA,GAAoB,OAAQ,MAAMuG,EAAAA,EAAAA,IAAiBgL,EAAKG,KAAM,MAEhEzG,EAAAA,EAAAA,IAAapF,EAAwB,CACnCG,GAAIuL,EAAKnQ,IACTyC,MAAO,cACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBlG,EAAAA,EAAAA,GAAoB,IAAKuE,GAAagC,EAAAA,EAAAA,IAAiBgL,EAAKzP,OAAQ,MAEtEuE,EAAG,GACF,KAAM,CAAC,QACVrG,EAAAA,EAAAA,GAAoB,IAAKwE,GAAa+B,EAAAA,EAAAA,IAAiBgL,EAAKI,qBAAsB,MAEpF3R,EAAAA,EAAAA,GAAoB,MAAOyE,EAAa,EACtCzE,EAAAA,EAAAA,GAAoB,MAAO0E,EAAa,CACrC6M,EAAKxQ,OAAOK,MACRlB,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaF,EAAwB,CAClD7B,IAAK,EACLgC,GAAIuL,EAAKxQ,OAAOK,KACf,CACD6E,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBlG,EAAAA,EAAAA,GAAoB,OAAQ2E,GAAa4B,EAAAA,EAAAA,IAAiBgL,EAAKxQ,OAAOC,MAAO,IAC7EhB,EAAAA,EAAAA,GAAoB,MAAO,CACzB6D,MAAO,yBACPsC,IAAKoL,EAAKxQ,OAAOc,IACjBuE,IAAK,WAAWmL,EAAKxQ,OAAOC,QAC3B,KAAM,EAAG4D,OAEdyB,EAAG,GACF,KAAM,CAAC,UACTnG,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,OAAQyE,GAAa,EACtD7E,EAAAA,EAAAA,GAAoB,OAAQ8E,IAAayB,EAAAA,EAAAA,IAAiBgL,EAAKxQ,OAAOC,MAAO,IAC7EhB,EAAAA,EAAAA,GAAoB,MAAO,CACzB6D,MAAO,yBACPsC,IAAKoL,EAAKxQ,OAAOc,IACjBuE,IAAK,WAAWmL,EAAKxQ,OAAOC,QAC3B,KAAM,EAAG+D,UAGpB/E,EAAAA,EAAAA,GAAoB,MAAOgF,GAAa,EACtChF,EAAAA,EAAAA,GAAoB,IAAKiF,GAAa,CACnCsM,EAAKxQ,OAAOK,MACRlB,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaF,EAAwB,CAClD7B,IAAK,EACLgC,GAAIuL,EAAKxQ,OAAOK,IAChByC,MAAO,mBACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,KAAiBC,EAAAA,EAAAA,IAAiBgL,EAAKxQ,OAAOC,MAAO,MAEvDqF,EAAG,GACF,KAAM,CAAC,UACTnG,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,OAAQ8E,IAAaqB,EAAAA,EAAAA,IAAiBgL,EAAKxQ,OAAOC,MAAO,OAElGhB,EAAAA,EAAAA,GAAoB,MAAOmF,GAAa,CACrCoM,EAAKlI,UACDnJ,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,OAAQ,CACzC4D,IAAK,EACL8H,SAAUyF,EAAKlI,QAAQ0C,gBACtBxF,EAAAA,EAAAA,KAAiB8E,EAAAA,EAAAA,IAAOW,EAAAA,GAAPX,CAAmBkG,EAAKlI,UAAW,EAAGjE,OACzDlF,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,OAAQ,CACzC4D,IAAK,EACL8H,SAAUyF,EAAKnI,QAAQ2C,gBACtBxF,EAAAA,EAAAA,KAAiB8E,EAAAA,EAAAA,IAAOW,EAAAA,GAAPX,CAAmBkG,EAAKnI,UAAW,EAAG/D,kBAMtE,SAEL,OACD,UAGR4F,EAAAA,EAAAA,IAAa8C,EAAAA,IACZ,GAAG,CAER,ICtQA,MAAMnK,GAAc,GAEpB,S,gJCFA,MAAMpB,GAA0BxC,EAAAA,EAAAA,GAAoB,KAAM,CAAE6D,MAAO,+FAAiG,kBAAmB,GACjLC,GAA0B9D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,+GAAgH,GACzK+D,GAA0B/D,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sCAAuC,GACjGiE,GAA0BjE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6MAA8M,GACvQkE,GAA0BlE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uEAAwE,GACjImE,EAAa,CAAEN,MAAO,aACtBO,GAA0BpE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,qBACpCA,EAAAA,EAAAA,GAAoB,OACpBsG,EAAAA,EAAAA,IAAiB,uFACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,eACpCsG,EAAAA,EAAAA,IAAiB,OAC5B,GACEjC,GAA0BrE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,sBACpCA,EAAAA,EAAAA,GAAoB,OACpBsG,EAAAA,EAAAA,IAAiB,qGACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,yBACpCsG,EAAAA,EAAAA,IAAiB,wCACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,qBACNyI,OAAQ,SACRC,IAAK,uBACJ,WACU/I,EAAAA,EAAAA,IAAiB,oEAC5B,GACEhC,GAA0BtE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,YACpCA,EAAAA,EAAAA,GAAoB,OACpBsG,EAAAA,EAAAA,IAAiB,kEACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,8BACpCsG,EAAAA,EAAAA,IAAiB,qGACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,sEACNyI,OAAQ,SACRC,IAAK,uBACJ,gBACU/I,EAAAA,EAAAA,IAAiB,OAC5B,GACE/B,GAA2BvE,EAAAA,EAAAA,GAAoB,SAAU,KAAM,oBAAqB,GACpFwE,GAA2BxE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,MAAO,GAClEyE,GAA2BzE,EAAAA,EAAAA,GAAoB,SAAU,KAAM,cAAe,GAC9E0E,GAA2B1E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,0BACpCA,EAAAA,EAAAA,GAAoB,OACpBsG,EAAAA,EAAAA,IAAiB,kBACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,sDACpCsG,EAAAA,EAAAA,IAAiB,2CAC5B,GACE3B,GAA2B3E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,gBACpCA,EAAAA,EAAAA,GAAoB,OACpBsG,EAAAA,EAAAA,IAAiB,uDACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,wBACNyI,OAAQ,SACRC,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,6MAC5B,GACE1B,GAA2B5E,EAAAA,EAAAA,GAAoB,SAAU,KAAM,iBAAkB,GACjF6E,GAA2B7E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,MAAO,GAClE8E,GAA2B9E,EAAAA,EAAAA,GAAoB,SAAU,KAAM,0BAA2B,GAC1F+E,GAA2B/E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,WAAY,GACvEgF,GAA2BhF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,cAAe,GAC1EiF,GAA2BjF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,oMAAqM,GAC/PkF,GAA2BlF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,2BAA4B,GACvFmF,GAA2BnF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qJAAsJ,GAChNoF,GAA2BpF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,WACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,CACvCgD,GAAI,oBACJa,MAAO,kDAGE7D,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,WACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,CAAE,iBAAkB,UAE7D,GACEqF,GAA2BrF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yBAA0B,GACrFsF,GAA2BtF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4RAA6R,GACvVuF,GAA2BvF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8BAC1C,GAOJ,OAA4ByC,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,gBACRO,MAAMC,GAIR,OAFA0O,EAAAA,EAAAA,MAEO,CAACrR,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,EACrDiF,EAAAA,EAAAA,IAAaC,EAAAA,EAAU,CACrBpJ,MAAO,+BACPiH,YAAa,+IACb3H,IAAK,gDAGT6J,EAAAA,EAAAA,IAAaO,EAAAA,EAAa,KAAM,CAC9BlC,SAASpD,EAAAA,EAAAA,KAAS,IAAM,CACtB1D,EACAsB,EACAC,EACAE,EACAC,GACAlE,EAAAA,EAAAA,GAAoB,KAAMmE,EAAY,CACpCC,EACAC,EACAC,GACAtE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,CAC9BuE,EACAC,GACA8B,EAAAA,EAAAA,IAAiB,6DACjB7B,GACA6B,EAAAA,EAAAA,IAAiB,qBACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,0BAA4B,CACrEC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,2BAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,+CAEnB5B,EACAC,GACA3E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,CAC9B4E,EACAC,GACAyB,EAAAA,EAAAA,IAAiB,cACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,gBAAkB,CAC3DC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,2BACjBxB,GACAwB,EAAAA,EAAAA,IAAiB,uFAGrBvB,GACA/E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,qKACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACvB2G,KAAM,IACNiB,QAASpH,EAAO,KAAOA,EAAO,IAAKqR,EAAAA,EAAAA,KAAgBC,IAAiBzG,EAAAA,EAAAA,IAAO0G,EAAAA,EAAP1G,IAAuB,CAAC,cAC3F,SACH/E,EAAAA,EAAAA,IAAiB,OAEnBtB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACAtF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,kFACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,gBAAkB,CAC3DC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,OAEnBf,KAEFc,EAAG,KAEJ,GAAG,CAER,ICvLA,MAAMzC,EAAc,EAEpB,O,mKCFA,MAAMpB,EAAa,CACjBwB,IAAK,EACLH,MAAO,wCAEHC,GAA0B0I,EAAAA,EAAAA,IAAmB,y3BAAg5B,GAC77BzI,EAAa,CACjBF,MAAO,iCACP,kBAAmB,mBAEfI,GAA0BuI,EAAAA,EAAAA,IAAmB,gmBAA6oB,GAC1rBtI,EAAa,CAAEL,MAAO,0CACtBM,EAAa,CAAEN,MAAO,+BACtBO,EAAa,CAAEP,MAAO,mCACtBQ,GAA0BmI,EAAAA,EAAAA,IAAmB,2xEAAs6E,GACn9ElI,EAAa,CAAET,MAAO,6CACtBU,GAA2BvE,EAAAA,EAAAA,GAAoB,KAAM,CAAE6D,MAAO,qCAAuC,iDAAkD,GACvJW,EAAc,CAClBX,MAAO,0DACP8K,OAAQ,iBACRD,OAAQ,QAEJjK,GAA2B+H,EAAAA,EAAAA,IAAmB,+gDAAkmD,GAChpD3H,EAAc,CAAEhB,MAAO,2EACvBiB,GAA2B9E,EAAAA,EAAAA,GAAoB,SAAU,CAC7D6C,KAAM,SACNgB,MAAO,6QACN,cAAe,GACZkB,EAAc,CAClBf,IAAK,EACLH,MAAO,QAEHmB,EAAc,CAAEnB,MAAO,kBACvBoB,EAAc,CAAEpB,MAAO,6DACvBqB,GAA2BlF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,MAAO,GAClEmF,GAA2BnF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,MAAO,GAClEoF,EAAc,CAClBpB,IAAK,EACLH,MAAO,QAEHwB,EAAc,CAAExB,MAAO,kBACvByB,EAAc,CAAEzB,MAAO,6DACvB0B,GAA2BvF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,MAAO,GAClEwF,GAA2BxF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,MAAO,GAClEyF,GAA2BzF,EAAAA,EAAAA,GAAoB,IAAK,CACxD2G,KAAM,2BACN9C,MAAO,2BACN,qBAAsB,GAUzB,OAA4BpB,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,cACRO,MAAMC,GAER,MAAMgE,GAAQ6H,EAAAA,EAAAA,MAEd,MAAO,CAACxO,EAAUC,MACRN,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,EACrDiF,EAAAA,EAAAA,IAAaC,EAAAA,EAAU,CACrBpJ,MAAO,sBACPiH,YAAa,qJACb3H,IAAK,yCAGT6J,EAAAA,EAAAA,IAAa6C,EAAAA,GACZ,CAAC,IAAK,IAAIkB,UAAS3D,EAAAA,EAAAA,IAAOnE,GAAO+H,QAC7B/O,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,OAAQoC,EAAY,CACrDsB,GACA9D,EAAAA,EAAAA,GAAoB,UAAW+D,EAAY,CACzCE,GACAjE,EAAAA,EAAAA,GAAoB,MAAOkE,EAAY,EACrClE,EAAAA,EAAAA,GAAoB,MAAOmE,EAAY,EACrCnE,EAAAA,EAAAA,GAAoB,MAAOoE,EAAY,CACrCC,GACArE,EAAAA,EAAAA,GAAoB,MAAOsE,EAAY,CACrCC,GACAvE,EAAAA,EAAAA,GAAoB,OAAQwE,EAAa,CACvCC,GACAzE,EAAAA,EAAAA,GAAoB,MAAO6E,EAAa,EACtCoG,EAAAA,EAAAA,IAAaiE,EAAAA,EAAkB,CAC7BtM,QAAS,2BACTI,GAAI,YAEN8B,mBASQ,mBAAvBuG,EAAAA,EAAAA,IAAOnE,GAAO+H,OACZ/O,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,OAAQ2E,EAAa,EACtD/E,EAAAA,EAAAA,GAAoB,MAAOgF,EAAa,EACtChF,EAAAA,EAAAA,GAAoB,MAAOiF,EAAa,EACtCgG,EAAAA,EAAAA,IAAakE,EAAAA,EAAO,CAClBtM,KAAM,UACNgB,MAAO,UACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,gCACjBpB,EACAC,GACAmB,EAAAA,EAAAA,IAAiB,6CAEnBD,EAAG,aAKVnG,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoB,OAAQgF,EAAa,EACtDpF,EAAAA,EAAAA,GAAoB,MAAOqF,EAAa,EACtCrF,EAAAA,EAAAA,GAAoB,MAAOsF,EAAa,EACtC2F,EAAAA,EAAAA,IAAakE,EAAAA,EAAO,CAAEtL,MAAO,UAAY,CACvCoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,oCACjBf,EACAC,GACAc,EAAAA,EAAAA,IAAiB,uBACjBb,GACAa,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,YAKjB4E,EAAAA,EAAAA,IAAa8C,EAAAA,IACZ,IAEL,IC1IA,MAAMnK,EAAc,EAEpB,O,kHCFA,MAAMpB,GAA0BxC,EAAAA,EAAAA,GAAoB,KAAM,CAAE6D,MAAO,+FAAiG,wBAAyB,GACvLC,GAA0B9D,EAAAA,EAAAA,GAAoB,SAAU,KAAM,SAAU,GACxE+D,GAA0B/D,EAAAA,EAAAA,GAAoB,SAAU,KAAM,YAAa,GAC3EiE,GAA0BjE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,kBAAmB,GAC7EkE,GAA0BlE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wHAAyH,GAClLmE,GAA0BnE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iBAAkB,GAC3EoE,GAA0BpE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sEAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yBAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,uFAC3C,GACEqE,GAA0BrE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,aAAc,GACxEsE,GAA0BtE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,sLAAuL,GAChPuE,GAA2BvE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wJAAyJ,GACnNwE,GAA2BxE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gMAAiM,GAC3PyE,GAA2BzE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,gCAAiC,GAC5F0E,GAA2B1E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gZAAiZ,GAC3c2E,GAA2B3E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,uBAAwB,GACnF4E,GAA2B5E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,+GACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,oBACpCsG,EAAAA,EAAAA,IAAiB,seAC5B,GACEzB,GAA2B7E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,eAAgB,GAC3E8E,GAA2B9E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8QAA+Q,GACzU+E,GAA2B/E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,iBAAkB,GAC7EgF,GAA2BhF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,sSAAuS,GACjWiF,GAA2BjF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,mCAAoC,GAC/FkF,GAA2BlF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8BAC1C,GAKJ,OAA4ByC,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,qBACRO,MAAMC,GAGR,MAAO,CAAC3C,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,EACrDiF,EAAAA,EAAAA,IAAaC,EAAAA,EAAU,CACrBpJ,MAAO,qCACPiH,YAAa,8HACb3H,IAAK,sDAGT6J,EAAAA,EAAAA,IAAaO,EAAAA,EAAa,KAAM,CAC9BlC,SAASpD,EAAAA,EAAAA,KAAS,IAAM,CACtB1D,GACAxC,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,6BACjBxC,GACAwC,EAAAA,EAAAA,IAAiB,+EACjBvC,GACAuC,EAAAA,EAAAA,IAAiB,gDACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,gBAAkB,CAC3DC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,6HACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,oBAAsB,CAC/DC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,qBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,QAEnBrC,EACAC,EACAC,EACAC,GACApE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,4BACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,oBAAsB,CAC/DC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,UAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,eAEnBjC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACAjF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,0EACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,gBAAkB,CAC3DC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,OAEnBpB,KAEFmB,EAAG,KAEJ,GAAG,CAER,ICtHA,MAAMzC,EAAc,EAEpB,O,2HCFA,MAAMpB,GAA0BgK,EAAAA,EAAAA,IAAmB,0gBAAuhB,GAM1kB,OAA4B/J,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,qBACRO,MAAMC,GAGR,MAAO,CAAC3C,EAAUC,MACRN,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,EACrDiF,EAAAA,EAAAA,IAAaC,EAAAA,EAAU,CACrBpJ,MAAO,wBACPiH,YAAa,GACb3H,IAAK,qDAENlB,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,mBAAqB,CAC3FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,oXAEnBD,EAAG,SAGP4E,EAAAA,EAAAA,IAAa6C,EAAAA,GACbtL,GACAyI,EAAAA,EAAAA,IAAa8C,EAAAA,IACZ,IAEL,IC/BA,MAAMnK,EAAc,EAEpB,O,qICFA,MAAMpB,EAAa,CAAEqB,MAAO,6CACtBC,EAAa,CAAED,MAAO,+BACtBE,GAA0ByI,EAAAA,EAAAA,IAAmB,+tDAAwwD,GACrzDtI,GAA0BlE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,uBACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,uGACN7E,MAAO,sBACPsN,OAAQ,SACRC,IAAK,uBACJ,eACU/I,EAAAA,EAAAA,IAAiB,qEAC5B,GACEnC,GAA0BnE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,eACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,kBACpCsG,EAAAA,EAAAA,IAAiB,oDAC5B,GACElC,GAA0BpE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,4FACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,0BACpCsG,EAAAA,EAAAA,IAAiB,4BAC5B,GACEjC,GAA0BrE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mFAAoF,GAC7IsE,GAA0BtE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,8CACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,2BACpCsG,EAAAA,EAAAA,IAAiB,oEAC5B,GACE/B,GAA2BvE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,mBACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,wCACpCsG,EAAAA,EAAAA,IAAiB,kFAC5B,GACE9B,GAA2BxE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8KAA+K,GAO/O,OAA4ByC,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,gBACRO,MAAMC,GAGR,MAAO,CAAC3C,EAAUC,MACRN,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,EACrDiF,EAAAA,EAAAA,IAAaC,EAAAA,EAAU,CACrBpJ,MAAO,qCACPiH,YAAa,8HACb3H,IAAK,qEACL8H,YAAa,6FACbC,YAAa,mGAGjBnJ,EAAAA,EAAAA,GAAoB,MAAOwC,EAAY,EACrCyI,EAAAA,EAAAA,IAAa6C,EAAAA,IACb9N,EAAAA,EAAAA,GAAoB,MAAO8D,EAAY,CACrCC,GACAkH,EAAAA,EAAAA,IAAa+G,EAAAA,EAAW,CACtBhF,KAAM,EACNlL,MAAO,4DACPD,IAAK,6DACL,YAAa,IACb,aAAc,KACb,CACDoE,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBhC,KAEFmC,EAAG,KAEL4E,EAAAA,EAAAA,IAAa+G,EAAAA,EAAW,CACtBhF,KAAM,EACNlL,MAAO,sBACPD,IAAK,iDACL,YAAa,IACb,aAAc,KACb,CACDoE,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB/B,KAEFkC,EAAG,KAEL4E,EAAAA,EAAAA,IAAa+G,EAAAA,EAAW,CACtBhF,KAAM,EACNlL,MAAO,wBACPD,IAAK,iDACL,YAAa,IACb,aAAc,KACb,CACDoE,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB9B,KAEFiC,EAAG,KAEL4E,EAAAA,EAAAA,IAAa+G,EAAAA,EAAW,CACtBhF,KAAM,EACNlL,MAAO,yDACPD,IAAK,uDACL,YAAa,IACb,aAAc,KACb,CACDoE,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB7B,KAEFgC,EAAG,KAEL4E,EAAAA,EAAAA,IAAa+G,EAAAA,EAAW,CACtBhF,KAAM,EACNlL,MAAO,0BACPD,IAAK,0DACL,YAAa,IACb,aAAc,KACb,CACDoE,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB5B,KAEF+B,EAAG,KAEL4E,EAAAA,EAAAA,IAAa+G,EAAAA,EAAW,CACtBhF,KAAM,EACNlL,MAAO,kCACPD,IAAK,+DACL,YAAa,IACb,aAAc,KACb,CACDoE,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB3B,KAEF8B,EAAG,KAEL4E,EAAAA,EAAAA,IAAa+G,EAAAA,EAAW,CACtBhF,KAAM,EACNlL,MAAO,uBACPD,IAAK,qDACL,YAAa,IACb,aAAc,KACb,CACDoE,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB1B,KAEF6B,EAAG,OAGP4E,EAAAA,EAAAA,IAAa8C,EAAAA,EAAiB,CAAElK,MAAO,YAExC,IAEL,ICtJA,MAAMD,EAAc,EAEpB,O,qICFA,MAAMpB,EAAa,CAAEqB,MAAO,6CACtBC,EAAa,CAAED,MAAO,+BACtBE,GAA0ByI,EAAAA,EAAAA,IAAmB,+2CAA84C,GAC37CtI,GAA0BlE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,cACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,6GACN7E,MAAO,oBACPsN,OAAQ,SACRC,IAAK,uBACJ,eACU/I,EAAAA,EAAAA,IAAiB,iEAC5B,GACEnC,GAA0BnE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,eACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,oDAC5B,GACElC,GAA0BpE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,gGACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,kBACpCsG,EAAAA,EAAAA,IAAiB,4BAC5B,GACEjC,GAA0BrE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mFAAoF,GAC7IsE,GAA0BtE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,8CACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,uBACpCsG,EAAAA,EAAAA,IAAiB,kFAC5B,GACE/B,GAA2BvE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8KAA+K,GAO/O,OAA4ByC,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,cACRO,MAAMC,GAGR,MAAO,CAAC3C,EAAUC,MACRN,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,EACrDiF,EAAAA,EAAAA,IAAaC,EAAAA,EAAU,CACrBpJ,MAAO,mCACPiH,YAAa,4HACb3H,IAAK,mEACL8H,YAAa,yFACbC,YAAa,+FAGjBnJ,EAAAA,EAAAA,GAAoB,MAAOwC,EAAY,EACrCyI,EAAAA,EAAAA,IAAa6C,EAAAA,IACb9N,EAAAA,EAAAA,GAAoB,MAAO8D,EAAY,CACrCC,GACAkH,EAAAA,EAAAA,IAAa+G,EAAAA,EAAW,CACtBhF,KAAM,EACNlL,MAAO,sCACPD,IAAK,yDACL,YAAa,IACb,aAAc,KACb,CACDoE,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBhC,KAEFmC,EAAG,KAEL4E,EAAAA,EAAAA,IAAa+G,EAAAA,EAAW,CACtBhF,KAAM,EACNlL,MAAO,YACPD,IAAK,6DACL,YAAa,IACb,aAAc,KACb,CACDoE,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB/B,KAEFkC,EAAG,KAEL4E,EAAAA,EAAAA,IAAa+G,EAAAA,EAAW,CACtBhF,KAAM,EACNlL,MAAO,wBACPD,IAAK,uDACL,YAAa,IACb,aAAc,KACb,CACDoE,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB9B,KAEFiC,EAAG,KAEL4E,EAAAA,EAAAA,IAAa+G,EAAAA,EAAW,CACtBhF,KAAM,EACNlL,MAAO,yDACPD,IAAK,qDACL,YAAa,IACb,aAAc,KACb,CACDoE,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB7B,KAEFgC,EAAG,KAEL4E,EAAAA,EAAAA,IAAa+G,EAAAA,EAAW,CACtBhF,KAAM,EACNlL,MAAO,oCACPD,IAAK,iDACL,YAAa,IACb,aAAc,KACb,CACDoE,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB5B,KAEF+B,EAAG,KAEL4E,EAAAA,EAAAA,IAAa+G,EAAAA,EAAW,CACtBhF,KAAM,EACNlL,MAAO,uBACPD,IAAK,mDACL,YAAa,IACb,aAAc,KACb,CACDoE,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB3B,KAEF8B,EAAG,OAGP4E,EAAAA,EAAAA,IAAa8C,EAAAA,EAAiB,CAAElK,MAAO,YAExC,IAEL,ICrIA,MAAMD,EAAc,EAEpB,O,qICFA,MAAMpB,EAAa,CAAEqB,MAAO,6CACtBC,EAAa,CAAED,MAAO,+BACtBE,GAA0ByI,EAAAA,EAAAA,IAAmB,y4CAAw6C,GACr9CtI,GAA0BlE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,iBACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,2DACN7E,MAAO,uBACPsN,OAAQ,SACRC,IAAK,uBACJ,eACU/I,EAAAA,EAAAA,IAAiB,oEAC5B,GACEnC,GAA0BnE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,eACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,mBACpCsG,EAAAA,EAAAA,IAAiB,oDAC5B,GACElC,GAA0BpE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,6FACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,cACpCsG,EAAAA,EAAAA,IAAiB,4BAC5B,GACEjC,GAA0BrE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mFAAoF,GAC7IsE,GAA0BtE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,8CACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,uBACpCsG,EAAAA,EAAAA,IAAiB,kFAC5B,GACE/B,GAA2BvE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8KAA+K,GAO/O,OAA4ByC,EAAAA,EAAAA,IAAiB,CAC3CC,OAAQ,iBACRO,MAAMC,GAGR,MAAO,CAAC3C,EAAUC,MACRN,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,EACrDiF,EAAAA,EAAAA,IAAaC,EAAAA,EAAU,CACrBpJ,MAAO,sCACPiH,YAAa,+HACb3H,IAAK,sEACL8H,YAAa,+FACbC,YAAa,qGAGjBnJ,EAAAA,EAAAA,GAAoB,MAAOwC,EAAY,EACrCyI,EAAAA,EAAAA,IAAa6C,EAAAA,IACb9N,EAAAA,EAAAA,GAAoB,MAAO8D,EAAY,CACrCC,GACAkH,EAAAA,EAAAA,IAAa+G,EAAAA,EAAW,CACtBhF,KAAM,EACNlL,MAAO,4CACPD,IAAK,+DACL,YAAa,IACb,aAAc,KACb,CACDoE,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBhC,KAEFmC,EAAG,KAEL4E,EAAAA,EAAAA,IAAa+G,EAAAA,EAAW,CACtBhF,KAAM,EACNlL,MAAO,uBACPD,IAAK,mDACL,YAAa,IACb,aAAc,KACb,CACDoE,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB/B,KAEFkC,EAAG,KAEL4E,EAAAA,EAAAA,IAAa+G,EAAAA,EAAW,CACtBhF,KAAM,EACNlL,MAAO,YACPD,IAAK,2DACL,YAAa,IACb,aAAc,KACb,CACDoE,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB9B,KAEFiC,EAAG,KAEL4E,EAAAA,EAAAA,IAAa+G,EAAAA,EAAW,CACtBhF,KAAM,EACNlL,MAAO,yDACPD,IAAK,wDACL,YAAa,IACb,aAAc,KACb,CACDoE,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB7B,KAEFgC,EAAG,KAEL4E,EAAAA,EAAAA,IAAa+G,EAAAA,EAAW,CACtBhF,KAAM,EACNlL,MAAO,oCACPD,IAAK,uDACL,YAAa,IACb,aAAc,KACb,CACDoE,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB5B,KAEF+B,EAAG,KAEL4E,EAAAA,EAAAA,IAAa+G,EAAAA,EAAW,CACtBhF,KAAM,EACNlL,MAAO,uBACPD,IAAK,sDACL,YAAa,IACb,aAAc,KACb,CACDoE,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB3B,KAEF8B,EAAG,OAGP4E,EAAAA,EAAAA,IAAa8C,EAAAA,EAAiB,CAAElK,MAAO,YAExC,IAEL,ICrIA,MAAMD,EAAc,EAEpB,O,uJCFA,MAAMpB,EAAa,CAAEqB,MAAO,sEACtBC,GAA0B9D,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,oBACPsC,IAAK,kFACLC,IAAK,iCACLtE,MAAO,iCACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,oDACnD,GACE+D,GAA0B/D,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,YACjBtG,EAAAA,EAAAA,GAAoB,IAAK,KAAM,SAC/BsG,EAAAA,EAAAA,IAAiB,eAC5B,GACErC,GAA0BjE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uaAA0a,GACnekE,GAA0BlE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mbAAob,GAC7emE,GAA0BnE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iRAAkR,GAC3UoE,GAA0BpE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mLAAoL,GAC7OqE,GAA0BrE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2GAA4G,GACrKsE,GAA0BtE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,qCAAsC,GAChGuE,GAA2BvE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6FAAgG,GAC1JwE,GAA2BxE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gcAAic,GAC3fyE,GAA2BzE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,yFAA0F,GAQ7IiS,EAAiB,CAC5BP,IAAK,MACLtQ,IAAK,4CACL4H,YAAa,CAAC5G,EAAAA,IACdN,MAAO,iCACPiH,YAAa,+HACb4I,oBAAqB,+HACrBH,cAAe,uFACfC,iBAAkB,iCAClB1Q,OAAQW,EAAAA,GACRwH,YAAa,gHACbC,YAAa,gHACbC,QAAS,IAAIX,KAAK,4BAClBY,QAAS,IAAIZ,KAAK,6BAGdyJ,EAAc,CAClBD,QAGF,OAA4BxP,EAAAA,EAAAA,IAAiB,IACxCyP,EACHxP,OAAQ,6BACRO,MAAMC,GAGR,MAAO,CAAC3C,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaoM,EAAAA,EAAU,CAC3CrQ,MAAOmQ,EAAKnQ,MACZiH,YAAakJ,EAAKlJ,YAClB3H,IAAK,0BAA0B6Q,EAAK7Q,MACpC4H,YAAaiJ,EAAKjJ,YAClBE,YAAa+I,EAAK/I,YAClBC,YAAa8I,EAAK9I,YAClBC,QAAS6I,EAAK7I,QACdC,QAAS4I,EAAK5I,QACdtI,OAAQkR,EAAKlR,OACb+H,OAAQmJ,EAAKnJ,QACZ,CACD7C,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBlG,EAAAA,EAAAA,GAAoB,SAAUwC,EAAY,EACxC8D,EAAAA,EAAAA,IAAiB,gJACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,iBAAmB,CAC5DC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,mBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,8GAEnBxC,EACAC,EACAE,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,KAEF4B,EAAG,GACF,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,UAAU,CAE/H,ICpGA,MAAMzC,EAAc,EAEpB,O,8HCFA,MAAMpB,EAAa,CAAEqB,MAAO,sEACtBC,GAA0B9D,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,oBACPsC,IAAK,sDACLC,IAAK,qFACLtE,MAAO,qFACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,EACtCsG,EAAAA,EAAAA,IAAiB,mEACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN7E,MAAO,kCACPuN,IAAK,YACJ,cACU/I,EAAAA,EAAAA,IAAiB,SAE9B,GACEvC,GAA0B/D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6RAA8R,GACvViE,GAA0BjE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4JAA6J,GACtNkE,GAA0BlE,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,0DACNyI,OAAQ,SACRC,IAAK,uBACJ,EACYrP,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,SACPsC,IAAK,0DACLC,IAAK,sCACLtE,MAAO,sCACPsL,MAAO,OACPC,OAAQ,YAGCrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,EACtCsG,EAAAA,EAAAA,IAAiB,0DACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN7E,MAAO,kCACPuN,IAAK,YACJ,cACU/I,EAAAA,EAAAA,IAAiB,SAE9B,GACEnC,GAA0BnE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wDAAyD,GAClHoE,GAA0BpE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iEAAkE,GAC3HqE,GAA0BrE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,UACpCsG,EAAAA,EAAAA,IAAiB,8BAC5B,GACEhC,GAA0BtE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,4BAC5B,GACE/B,GAA2BvE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,SACpCsG,EAAAA,EAAAA,IAAiB,oCAC5B,GACE9B,GAA2BxE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,8CAC5B,GACE7B,GAA2BzE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,YACpCsG,EAAAA,EAAAA,IAAiB,+BAC5B,GACE5B,GAA2B1E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,yBAC5B,GACE3B,GAA2B3E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,SACpCsG,EAAAA,EAAAA,IAAiB,kCAC5B,GACE1B,GAA2B5E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,UACpCsG,EAAAA,EAAAA,IAAiB,wCAC5B,GACEzB,GAA2B7E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,UACpCsG,EAAAA,EAAAA,IAAiB,wBAC5B,GACExB,GAA2B9E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,oCAC5B,GACEvB,GAA2B/E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,UACpCsG,EAAAA,EAAAA,IAAiB,wBAC5B,GACEtB,GAA2BhF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,WACpCsG,EAAAA,EAAAA,IAAiB,qCAC5B,GACErB,GAA2BjF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,OACpCsG,EAAAA,EAAAA,IAAiB,0BAC5B,GACEpB,GAA2BlF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,UACpCsG,EAAAA,EAAAA,IAAiB,6BAC5B,GACEnB,GAA2BnF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,UACpCsG,EAAAA,EAAAA,IAAiB,6BAC5B,GACElB,GAA2BpF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,UACpCsG,EAAAA,EAAAA,IAAiB,yBAC5B,GACEjB,GAA2BrF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,qCAC5B,GACEhB,GAA2BtF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,UACpCsG,EAAAA,EAAAA,IAAiB,sBAC5B,GACEf,GAA2BvF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,aACpCsG,EAAAA,EAAAA,IAAiB,oCAC5B,GACEd,GAA2BxF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,SACpCsG,EAAAA,EAAAA,IAAiB,kCAC5B,GACEb,GAA2BzF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,2DAC5B,GACEZ,GAA2B1F,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,OACpCsG,EAAAA,EAAAA,IAAiB,qBAC5B,GACEX,GAA2B3F,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,8BAC5B,GACE8L,GAA2BpS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,UACpCsG,EAAAA,EAAAA,IAAiB,iCAC5B,GACE+L,GAA2BrS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,UACpCsG,EAAAA,EAAAA,IAAiB,gCAC5B,GACEgM,GAA2BtS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,eACpCsG,EAAAA,EAAAA,IAAiB,4BAC5B,GACEiM,GAA2BvS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,SACpCsG,EAAAA,EAAAA,IAAiB,yCAC5B,GACEkM,GAA2BxS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,uCAC5B,GACEmM,GAA2BzS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,eACpCsG,EAAAA,EAAAA,IAAiB,+BAC5B,GACEoM,GAA2B1S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,oBAC5B,GACEqM,GAA2B3S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,OACpCsG,EAAAA,EAAAA,IAAiB,2BAC5B,GACEsM,GAA2B5S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,UACpCsG,EAAAA,EAAAA,IAAiB,6CAC5B,GACEuM,GAA2B7S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,kEAC5B,GACEwM,GAA2B9S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,WACpCsG,EAAAA,EAAAA,IAAiB,2BAC5B,GACEyM,GAA2B/S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,UACpCsG,EAAAA,EAAAA,IAAiB,uCAC5B,GACE0M,GAA2BhT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,SACpCsG,EAAAA,EAAAA,IAAiB,wBAC5B,GACE2M,GAA2BjT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,OACpCsG,EAAAA,EAAAA,IAAiB,mCAC5B,GACE4M,GAA2BlT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,SACpCsG,EAAAA,EAAAA,IAAiB,wBAC5B,GACE6M,GAA2BnT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,SACpCsG,EAAAA,EAAAA,IAAiB,wCAC5B,GACE8M,GAA2BpT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,SACpCsG,EAAAA,EAAAA,IAAiB,8BAC5B,GACE+M,IAA2BrT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,oCAC5B,GACEgN,IAA2BtT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,WACpCsG,EAAAA,EAAAA,IAAiB,qCAC5B,GAQElF,GAAM,8BACNmS,GAAyB,CAAEnS,OAAKU,MAAO,oBAEvCmQ,GAAiB,CACrBP,IAAK,eACLtQ,OACA4H,YAAa,CAAC5G,EAAAA,IACdN,MAAO,uBACPiH,YAAa,mJACbyI,cAAe,4DACfC,iBAAkB,sCAClBE,oBAAqB,mJACrB5Q,OAAQW,EAAAA,GACRwH,YAAa,oFACbC,YAAa,oFACbC,QAAS,IAAIX,KAAK,4BAClBY,QAAS,IAAIZ,KAAK,6BAGdyJ,GAAc,CAClBD,QACAsB,eAGF,QAA4B9Q,EAAAA,EAAAA,IAAiB,IACxCyP,GACHxP,OAAQ,iBACRO,MAAMC,GAGR,MAAO,CAAC3C,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,GACpD9F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,4oBAEnBD,EAAG,OAEJnG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,gpBAEnBD,EAAG,SAGP4E,EAAAA,EAAAA,IAAakH,EAAAA,EAAU,CACrBrQ,MAAOmQ,GAAKnQ,MACZiH,YAAakJ,GAAKlJ,YAClB3H,IAAK,0BAA0B6Q,GAAK7Q,MACpC4H,YAAaiJ,GAAKjJ,YAClBE,YAAa+I,GAAK/I,YAClBC,YAAa8I,GAAK9I,YAClBC,QAAS6I,GAAK7I,QACdC,QAAS4I,GAAK5I,QACdtI,OAAQkR,GAAKlR,OACb+H,OAAQmJ,GAAKnJ,QACZ,CACD7C,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBlG,EAAAA,EAAAA,GAAoB,SAAUwC,EAAY,EACxC8D,EAAAA,EAAAA,IAAiB,kQACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,KAAO,CAChDC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,mCAEnBxC,EACAC,EACAE,EACAC,EACAC,GACAnE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,EAClCiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,iCAAmC,CAC5EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,QAEnBD,EAAG,OAGPC,EAAAA,EAAAA,IAAiB,sBAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,EAClCiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,oCAAsC,CAC/EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,WAEnBD,EAAG,OAGPC,EAAAA,EAAAA,IAAiB,sBAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,EAClCiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,qCAAuC,CAChFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,YAEnBD,EAAG,OAGPC,EAAAA,EAAAA,IAAiB,wBAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,EAClCiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,kCAAoC,CAC7EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,SAEnBD,EAAG,OAGPC,EAAAA,EAAAA,IAAiB,uBAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,EAClCiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,kCAAoC,CAC7EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,SAEnBD,EAAG,OAGPC,EAAAA,EAAAA,IAAiB,qBAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,EAClCiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,mCAAqC,CAC9EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,UAEnBD,EAAG,OAGPC,EAAAA,EAAAA,IAAiB,6BAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,EAClCiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,mCAAqC,CAC9EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,UAEnBD,EAAG,OAGPC,EAAAA,EAAAA,IAAiB,6BAGrBlC,GACApE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,EAClCiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,iCAAmC,CAC5EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,QAEnBD,EAAG,OAGPC,EAAAA,EAAAA,IAAiB,sBAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,EAClCiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,oCAAsC,CAC/EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,WAEnBD,EAAG,OAGPC,EAAAA,EAAAA,IAAiB,qBAEnBjC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACA3E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,EAClCiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,qCAAuC,CAChFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,YAEnBD,EAAG,OAGPC,EAAAA,EAAAA,IAAiB,uBAEnB1B,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACA3F,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,EAClCiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,kCAAoC,CAC7EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,SAEnBD,EAAG,OAGPC,EAAAA,EAAAA,IAAiB,sBAEnB8L,GACApS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,EAClCiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,kCAAoC,CAC7EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,SAEnBD,EAAG,OAGPC,EAAAA,EAAAA,IAAiB,oBAEnB+L,EACAC,EACAC,EACAC,EACAC,EACAC,GACA1S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,EAClCiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,mCAAqC,CAC9EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,UAEnBD,EAAG,OAGPC,EAAAA,EAAAA,IAAiB,+BAEnBqM,EACAC,EACAC,EACAC,GACA9S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,EAClCiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,mCAAqC,CAC9EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,UAEnBD,EAAG,OAGPC,EAAAA,EAAAA,IAAiB,2BAEnByM,EACAC,GACAhT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,EAClCiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,mCAAqC,CAC9EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,UAEnBD,EAAG,OAGPC,EAAAA,EAAAA,IAAiB,wBAEnB2M,EACAC,EACAC,EACAC,GACApT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,EAClCiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,mCAAqC,CAC9EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,UAEnBD,EAAG,OAGPC,EAAAA,EAAAA,IAAiB,4BAEnB+M,GACAC,QAGJjN,EAAG,GACF,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,YAClH,GAAG,CAER,IChhBA,MAAMzC,GAAc,GAEpB,S,uOCFA,MAAMpB,GAA0BxC,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,sEAAwE,yJAA0J,GACnSC,GAA0B9D,EAAAA,EAAAA,GAAoB,IAAK,CACvD2G,KAAM,gDACN0I,IAAK,uBACJ,YAAa,GACVtL,GAA0B/D,EAAAA,EAAAA,GAAoB,IAAK,CACvD2G,KAAM,gDACN0I,IAAK,uBACJ,QAAS,GACNpL,GAA0BjE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2TAA4T,GACrXkE,GAA0BlE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wIAAyI,GAClMmE,GAA0BnE,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,oBACPsC,IAAK,6DACLC,IAAK,+BACLtE,MAAO,+BACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,EACtCsG,EAAAA,EAAAA,IAAiB,kEACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN7E,MAAO,kCACPuN,IAAK,YACJ,cACU/I,EAAAA,EAAAA,IAAiB,SAE9B,GACElC,GAA0BpE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,mBAAoB,GAC9EqE,GAA0BrE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uJAAwJ,GACjNsE,GAA0BtE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,oPAAuP,GAChTuE,GAA2BvE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sBAAuB,GAClFwE,GAA2BxE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,uNACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,oCAC5B,GACE7B,GAA2BzE,EAAAA,EAAAA,GAAoB,MAAO,KAAM,wGAAyG,GACrK0E,GAA2B1E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,kRAC/C,GACE2E,GAA2B3E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,kDACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,uCACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,uGAC5B,GACE1B,GAA2B5E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4IAA6I,GACvM6E,GAA2B7E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,oIAAqI,GAC/L8E,GAA2B9E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,0CAA2C,GACtG+E,GAA2B/E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,iKAC/C,GACEgF,GAA2BhF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,yPAA0P,GACpTiF,GAA2BjF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,gCAAiC,GAC5FkF,GAA2BlF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0JAA2J,GACrNmF,GAA2BnF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qJAAsJ,GAChNoF,GAA2BpF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,yMAA0M,GACpQqF,GAA2BrF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2NAA4N,GACtRsF,GAA2BtF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gJAAiJ,GAC3MuF,GAA2BvF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sCAAuC,GAClGwF,GAA2BxF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,sHAAuH,GACjLyF,GAA2BzF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,sIAAuI,GACjM0F,GAA2B1F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gLAAiL,GAC3O2F,GAA2B3F,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sCAAuC,GAClGoS,GAA2BpS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,sKAAuK,GACjOqS,GAA2BrS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,+CAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,gCAC3C,GACEsS,GAA2BtS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,8CAA+C,GAC1GuS,GAA2BvS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,+FAAgG,GAC1JwS,GAA2BxS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4PAA6P,GACvTyS,GAA2BzS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0DAA2D,GACrH0S,GAA2B1S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,kOACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,iCAEpCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yEAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,wLAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sOAC3C,GACE2S,IAA2B3S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,2MACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,4DACN0I,IAAK,uBACJ,yBACU/I,EAAAA,EAAAA,IAAiB,wBAC5B,GACEsM,IAA2B5S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,8BAA+B,GAC1F6S,IAA2B7S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,0DACN0I,IAAK,uBACJ,uBACU/I,EAAAA,EAAAA,IAAiB,yKAC5B,GACEwM,IAA2B9S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,sKAAuK,GACjO+S,IAA2B/S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,mCAAoC,GAC/FgT,IAA2BhT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wKAAyK,GACnOiT,IAA2BjT,EAAAA,EAAAA,GAAoB,MAAO,KAAM,uBAAwB,GACpFkT,IAA2BlT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0EAA2E,GACrImT,IAA2BnT,EAAAA,EAAAA,GAAoB,MAAO,KAAM,kCAAmC,GAC/FoT,GAAc,CAClBvP,MAAO,uCACPiL,aAAc,OAEVuE,GAAc,CAAExP,MAAO,gDACvByP,IAA2BtT,EAAAA,EAAAA,GAAoB,KAAM,CAAE6D,MAAO,cAAgB,qBAAsB,GACpG2P,GAAc,CAAE3P,MAAO,kEACvB4P,IAA2BzT,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,qCAAuC,oEAAqE,GAC5K6P,GAAc,CAAE7P,MAAO,8BACvB8P,IAA2B3T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,6BAA+B,6JACjF,GACE+P,IAA2B5T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,yTAA0T,GACpX6T,IAA2B7T,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,qCAAuC,qCAAsC,GAC7IiQ,GAAc,CAAEjQ,MAAO,8BACvBkQ,IAA2B/T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,6BAA+B,EACpEyC,EAAAA,EAAAA,IAAiB,sBACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,wJACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,UACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,SAE9B,GACE0N,IAA2BhU,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,mCACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,iFACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,0DAC5B,GAqBE2L,GAAiB,CACrBP,IAAK,mBACLtQ,IAAK,gCACL4H,YAAa,CAAC5G,EAAAA,GAAoB0N,EAAAA,WAAAA,YAClChO,MAAO,eACPiH,YAAa,sJACb4I,oBAAqB,sJACrBH,cAAe,mEACfC,iBAAkB,6BAClB1Q,OAAQiB,EAAAA,GACR8G,OAAQpH,EAAAA,GACRwH,YAAa,kFACbC,YAAa,kFACbC,QAAS,IAAIX,KAAK,4BAClBY,QAAS,IAAIZ,KAAK,6BAGdyJ,GAAc,CAClBD,SAGF,QAA4BxP,EAAAA,EAAAA,IAAiB,IACxCyP,GACHxP,OAAQ,cACRO,MAAMC,GAER,MAAM8D,GAASC,EAAAA,EAAAA,MAEf,SAASgN,EAAWC,GAClBlN,EAAOmN,KAAK,aAAYC,EAAAA,EAAAA,IAAoBF,oBAC9C,CAEA,MAAO,CAAC3T,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,GACpD9F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,mpBAEnBD,EAAG,SAGP4E,EAAAA,EAAAA,IAAakH,EAAAA,EAAU,CACrBrQ,MAAOmQ,GAAKnQ,MACZiH,YAAakJ,GAAKlJ,YAClB3H,IAAK,0BAA0B6Q,GAAK7Q,MACpC4H,YAAaiJ,GAAKjJ,YAClBE,YAAa+I,GAAK/I,YAClBC,YAAa8I,GAAK9I,YAClBC,QAAS6I,GAAK7I,QACdC,QAAS4I,GAAK5I,QACdtI,OAAQkR,GAAKlR,OACb+H,OAAQmJ,GAAKnJ,QACZ,CACD7C,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB1D,GACAxC,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,yEACjBxC,GACAwC,EAAAA,EAAAA,IAAiB,SACjBvC,GACAuC,EAAAA,EAAAA,IAAiB,0IACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,oCAAsC,CAC/EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,2BAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,yCAEnBrC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACAyG,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBzB,KAEF4B,EAAG,KAEL4E,EAAAA,EAAAA,IAAaqJ,EAAAA,EAAS,CACpB7H,KAAM,OACN3K,MAAO,gCACP4K,QAAS,MACR,CACDzG,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBxB,EACAC,EACAC,EACAC,KAEFwB,EAAG,IAELvB,EACAC,GACA/E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,uEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,yCAA2C,CACpFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,8CAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,8GAEnBtB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACAxF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,qCACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CACnCG,GAAI,gCACJlE,MAAO,YACN,CACDmE,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,eAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,iSAEnBb,EACAC,EACAC,EACAyM,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,IACAnT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,iEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,cAAgB,CACzDC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,eAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,qCAEnBtG,EAAAA,EAAAA,GAAoB,OAAQoT,GAAa,EACvCnI,EAAAA,EAAAA,IAAasJ,EAAAA,EAAc,CACzBC,UAAW,GACXC,WAAY,gBACZC,YAAaT,OAGjBjU,EAAAA,EAAAA,GAAoB,MAAOqT,GAAa,CACtCC,IACAtT,EAAAA,EAAAA,GAAoB,MAAOwT,GAAa,EACtCvI,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOsJ,EAAAA,IAAa,CAC/BC,GAAI,MACJ/Q,MAAO,QACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,EAAG2O,UAAW,EAC9B5J,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOyJ,EAAAA,IAAmB,CACrCF,GAAI,KACJ/Q,MAAO,kGACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBuN,IACAzT,EAAAA,EAAAA,GAAoB,OAAQ0T,GAAa,EACvCzI,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO0J,GAAkB,CACpClR,OAAOwI,EAAAA,EAAAA,IAAgB,CAACwI,EAAO,cAAgB,WAAY,sBAC3D,cAAe,QACd,KAAM,EAAG,CAAC,eAGjBxO,EAAG,GACF,OACH4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO2J,EAAAA,IAAkB,CAAEnR,MAAO,cAAgB,CAC7DoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtByN,GACAC,IACA5T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,wBACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,qCAAuC,CAChFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,oBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,2BAGrBD,EAAG,OAGPA,EAAG,KAEL4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOsJ,EAAAA,IAAa,CAC/BC,GAAI,MACJ/Q,MAAO,QACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,EAAG2O,UAAW,EAC9B5J,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOyJ,EAAAA,IAAmB,CACrCF,GAAI,KACJ/Q,MAAO,kGACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB2N,IACA7T,EAAAA,EAAAA,GAAoB,OAAQ8T,GAAa,EACvC7I,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO0J,GAAkB,CACpClR,OAAOwI,EAAAA,EAAAA,IAAgB,CAACwI,EAAO,cAAgB,WAAY,sBAC3D,cAAe,QACd,KAAM,EAAG,CAAC,eAGjBxO,EAAG,GACF,OACH4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO2J,EAAAA,IAAkB,CAAEnR,MAAO,cAAgB,CAC7DoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB6N,GACAC,MAEF3N,EAAG,OAGPA,EAAG,WAKXA,EAAG,GACF,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,YAClH,GAAG,CAER,IChaA,MAAMzC,GAAc,GAEpB,S,wOCFA,MAAMpB,GAA0BxC,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,sEAAwE,uMAAwM,GACjVC,GAA0B9D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,8DACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,UACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,SACU/I,EAAAA,EAAAA,IAAiB,8JACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,eACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,gEAC5B,GACEvC,GAA0B/D,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,oBACPsC,IAAK,mEACLC,IAAK,+BACLtE,MAAO,+BACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,EACtCsG,EAAAA,EAAAA,IAAiB,kEACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN7E,MAAO,kCACPuN,IAAK,YACJ,cACU/I,EAAAA,EAAAA,IAAiB,SAE9B,GACErC,GAA0BjE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sBAAuB,GACjFkE,GAA0BlE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,kNAAmN,GAC5QmE,GAA0BnE,EAAAA,EAAAA,GAAoB,MAAO,KAAM,qEAAsE,GACjIoE,GAA0BpE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8HAA+H,GACxLqE,GAA0BrE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iSAAkS,GAC3VsE,GAA0BtE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,0BAA2B,GACrFuE,GAA2BvE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,oQAAqQ,GAC/TwE,GAA2BxE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qSAA4S,GACtWyE,GAA2BzE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,gUAC/C,GACE0E,GAA2B1E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4RAA6R,GACvV2E,GAA2B3E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mXAAoX,GAC9a4E,GAA2B5E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6QAA8Q,GACxU6E,GAA2B7E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,mCAAoC,GAC/F8E,GAA2B9E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,oJAAqJ,GAC/M+E,GAA2B/E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2HAA4H,GACtLgF,GAA2BhF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,iFACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,uCAC5B,GACErB,GAA2BjF,EAAAA,EAAAA,GAAoB,MAAO,KAAM,oJAAqJ,GACjNkF,GAA2BlF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,kIAAmI,GAC7LmF,GAA2BnF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,+CAAgD,GAC3GoF,GAA2BpF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2TAA4T,GACtXqF,GAA2BrF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2NAA4N,GACtRsF,GAA2BtF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,kOAAmO,GAC7RuF,GAA2BvF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,6CAA8C,GACzGwF,GAA2BxF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,kKAC/C,GACEyF,GAA2BzF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,yPAA0P,GACpT0F,GAA2B1F,EAAAA,EAAAA,GAAoB,KAAM,KAAM,qCAAsC,GACjG2F,GAA2B3F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,iNACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,oFAC/C,GACEoS,GAA2BpS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sDAAuD,GAClHqS,GAA2BrS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,yUAA0U,GACpYsS,GAA2BtS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6iBAA8iB,GACxmBuS,GAA2BvS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,8CAA+C,GAC1GwS,GAA2BxS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,kKAC/C,GACEyS,GAA2BzS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6PAA8P,GACxT0S,GAA2B1S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4ZAA6Z,GACvd2S,IAA2B3S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gHAAiH,GAC3K4S,IAA2B5S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,0PACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,yFAEpCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,0FAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yLAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,0NAC3C,GACE6S,IAA2B7S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,2MACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,4DACN0I,IAAK,uBACJ,yBACU/I,EAAAA,EAAAA,IAAiB,wBAC5B,GACEwM,IAA2B9S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sCAAuC,GAClG+S,IAA2B/S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wKAAyK,GACnOgT,IAA2BhT,EAAAA,EAAAA,GAAoB,MAAO,KAAM,0BAA2B,GACvFiT,IAA2BjT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0EAA2E,GACrIkT,IAA2BlT,EAAAA,EAAAA,GAAoB,MAAO,KAAM,qCAAsC,GAClGmT,GAAc,CAClBtP,MAAO,uCACPiL,aAAc,OAEVsE,GAAc,CAAEvP,MAAO,gDACvBwP,IAA2BrT,EAAAA,EAAAA,GAAoB,KAAM,CAAE6D,MAAO,cAAgB,qBAAsB,GACpGyP,GAAc,CAAEzP,MAAO,kEACvB2P,IAA2BxT,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,qCAAuC,sEAAuE,GAC9K4P,GAAc,CAAE5P,MAAO,8BACvB6P,IAA2B1T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,6BAA+B,8NACjF,GACE8P,IAA2B3T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2UAA4U,GACtY4T,IAA2B5T,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,qCAAuC,uCAAwC,GAC/IgQ,GAAc,CAAEhQ,MAAO,8BACvBiQ,IAA2B9T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,6BAA+B,EACpEyC,EAAAA,EAAAA,IAAiB,sBACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,wLAE9B,GACEyN,IAA2B/T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,sEACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,UACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,6CACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,iFACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,0DAC5B,GAqBE2L,GAAiB,CACrBP,IAAK,mBACLtQ,IAAK,mCACL4H,YAAa,CAAC5G,EAAAA,GAAoB0N,EAAAA,WAAAA,YAClChO,MAAO,kBACPiH,YAAa,mKACb4I,oBAAqB,qMACrBH,cAAe,yEACfC,iBAAkB,6BAClB1Q,OAAQiB,EAAAA,GACR8G,OAAQpH,EAAAA,GACRwH,YAAa,wFACbC,YAAa,wFACbC,QAAS,IAAIX,KAAK,4BAClBY,QAAS,IAAIZ,KAAK,6BAGdyJ,GAAc,CAClBD,SAGF,QAA4BxP,EAAAA,EAAAA,IAAiB,IACxCyP,GACHxP,OAAQ,iBACRO,MAAMC,GAER,MAAM8D,GAASC,EAAAA,EAAAA,MAEf,SAASgN,EAAWC,GAClBlN,EAAOmN,KAAK,aAAYC,EAAAA,EAAAA,IAAoBF,uBAC9C,CAEA,MAAO,CAAC3T,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,GACpD9F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,ypBAEnBD,EAAG,SAGP4E,EAAAA,EAAAA,IAAakH,EAAAA,EAAU,CACrBrQ,MAAOmQ,GAAKnQ,MACZiH,YAAakJ,GAAKlJ,YAClB3H,IAAK,0BAA0B6Q,GAAK7Q,MACpC4H,YAAaiJ,GAAKjJ,YAClBE,YAAa+I,GAAK/I,YAClBC,YAAa8I,GAAK9I,YAClBC,QAAS6I,GAAK7I,QACdC,QAAS4I,GAAK5I,QACdtI,OAAQkR,GAAKlR,OACb+H,OAAQmJ,GAAKnJ,QACZ,CACD7C,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB1D,EACAsB,EACAC,EACAE,EACAC,GACA+G,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB/B,KAEFkC,EAAG,IAELjC,EACAC,EACAC,EACAC,EACAC,GACAyG,EAAAA,EAAAA,IAAaqJ,EAAAA,EAAS,CACpB7H,KAAM,OACN3K,MAAO,gBACP4K,QAAS,MACR,CACDzG,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBzB,EACAC,EACAC,EACAC,KAEFyB,EAAG,IAELxB,EACAC,EACAC,EACAC,GACAiG,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBjB,KAEFoB,EAAG,IAELnB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACAxF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,uEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,yCAA2C,CACpFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,8CAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,+GAEnBb,EACAC,GACA1F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,2CACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,iCAAmC,CAC5EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,oBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,2OAEnBX,EACAyM,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,IACAlT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,oEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,iBAAmB,CAC5DC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,kBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,qCAEnBtG,EAAAA,EAAAA,GAAoB,OAAQmT,GAAa,EACvClI,EAAAA,EAAAA,IAAasJ,EAAAA,EAAc,CACzBC,UAAW,GACXC,WAAY,mBACZC,YAAaT,OAGjBjU,EAAAA,EAAAA,GAAoB,MAAOoT,GAAa,CACtCC,IACArT,EAAAA,EAAAA,GAAoB,MAAOsT,GAAa,EACtCrI,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOsJ,EAAAA,IAAa,CAC/BC,GAAI,MACJ/Q,MAAO,QACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,EAAG2O,UAAW,EAC9B5J,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOyJ,EAAAA,IAAmB,CACrCF,GAAI,KACJ/Q,MAAO,kGACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBsN,IACAxT,EAAAA,EAAAA,GAAoB,OAAQyT,GAAa,EACvCxI,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO0J,GAAkB,CACpClR,OAAOwI,EAAAA,EAAAA,IAAgB,CAACwI,EAAO,cAAgB,WAAY,sBAC3D,cAAe,QACd,KAAM,EAAG,CAAC,eAGjBxO,EAAG,GACF,OACH4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO2J,EAAAA,IAAkB,CAAEnR,MAAO,cAAgB,CAC7DoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBwN,GACAC,IACA3T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,wBACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,qCAAuC,CAChFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,oBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,2BAGrBD,EAAG,OAGPA,EAAG,KAEL4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOsJ,EAAAA,IAAa,CAC/BC,GAAI,MACJ/Q,MAAO,QACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,EAAG2O,UAAW,EAC9B5J,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOyJ,EAAAA,IAAmB,CACrCF,GAAI,KACJ/Q,MAAO,kGACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB0N,IACA5T,EAAAA,EAAAA,GAAoB,OAAQ6T,GAAa,EACvC5I,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO0J,GAAkB,CACpClR,OAAOwI,EAAAA,EAAAA,IAAgB,CAACwI,EAAO,cAAgB,WAAY,sBAC3D,cAAe,QACd,KAAM,EAAG,CAAC,eAGjBxO,EAAG,GACF,OACH4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO2J,EAAAA,IAAkB,CAAEnR,MAAO,cAAgB,CAC7DoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB4N,GACAC,MAEF1N,EAAG,OAGPA,EAAG,WAKXA,EAAG,GACF,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,YAClH,GAAG,CAER,ICpZA,MAAMzC,GAAc,GAEpB,S,iNCFA,MAAMpB,GAA0BxC,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,sEAAwE,gHAAiH,GAC1PC,GAA0B9D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,yEACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,UACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,SACU/I,EAAAA,EAAAA,IAAiB,iIAC5B,GACEvC,GAA0B/D,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,oBACPsC,IAAK,iEACLC,IAAK,iDACLtE,MAAO,iDACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,EACtCsG,EAAAA,EAAAA,IAAiB,oFACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN7E,MAAO,kCACPuN,IAAK,YACJ,cACU/I,EAAAA,EAAAA,IAAiB,SAE9B,GACErC,GAA0BjE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,kbAAmb,GAC5ekE,GAA0BlE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wHAAyH,GAClLmE,GAA0BnE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,mCAAoC,GAC9FoE,GAA0BpE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mPAAoP,GAC7SqE,GAA0BrE,EAAAA,EAAAA,GAAoB,MAAO,KAAM,mLAAoL,GAC/OsE,GAA0BtE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gNAAiN,GAC1QuE,GAA2BvE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2VAA4V,GACtZwE,GAA2BxE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uRAAwR,GAClVyE,GAA2BzE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2UAA4U,GACtY0E,GAA2B1E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,qDAAsD,GACjH2E,GAA2B3E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8EAA+E,GACzI4E,GAA2B5E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8WAA+W,GACza6E,GAA2B7E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gIAAiI,GAC3L8E,GAA2B9E,EAAAA,EAAAA,GAAoB,MAAO,KAAM,yQAA0Q,GACtU+E,GAA2B/E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,iCAAkC,GAC7FgF,GAA2BhF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,oJAAqJ,GAC/MiF,GAA2BjF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,oSAAqS,GAC/VkF,GAA2BlF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sBAAuB,GAClFmF,GAA2BnF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uSAAwS,GAClWoF,GAA2BpF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,kQAAmQ,GAC7TqF,GAA2BrF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,0HACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,6MAC5B,GACEhB,GAA2BtF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8GAA+G,GACzKuF,GAA2BvF,EAAAA,EAAAA,GAAoB,MAAO,KAAM,qcAAsc,GAClgBwF,GAA2BxF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,yPACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,YAClCsG,EAAAA,EAAAA,IAAiB,wDAC5B,GACEb,GAA2BzF,EAAAA,EAAAA,GAAoB,MAAO,KAAM,0CAA2C,GACvG0F,GAA2B1F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,oSAAqS,GAC/V2F,GAA2B3F,EAAAA,EAAAA,GAAoB,MAAO,KAAM,4VAA6V,GACzZoS,GAA2BpS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,0BAA2B,GACtFqS,GAA2BrS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4SAA6S,GACvWsS,GAA2BtS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4WAA6W,GACvauS,GAA2BvS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,qJACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,mGACN0I,IAAK,uBACJ,kCACU/I,EAAAA,EAAAA,IAAiB,wIAC5B,GACEkM,GAA2BxS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8cAA+c,GACzgByS,GAA2BzS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yBAA0B,GACrF0S,GAA2B1S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iVAAkV,GAC5Y2S,GAA2B3S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mbAAob,GAC9e4S,GAA2B5S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,oGAAqG,GAC/J6S,GAA2B7S,EAAAA,EAAAA,GAAoB,MAAO,KAAM,yXAA0X,GACtb8S,GAA2B9S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uZAAwZ,GACld+S,GAA2B/S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yBAA0B,GACrFgT,IAA2BhT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2KAA4K,GACtOiT,IAA2BjT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,UACpCsG,EAAAA,EAAAA,IAAiB,yOAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,UACpCsG,EAAAA,EAAAA,IAAiB,iYAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,0CACpCsG,EAAAA,EAAAA,IAAiB,0CACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,oEACN0I,IAAK,uBACJ,YACU/I,EAAAA,EAAAA,IAAiB,OACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,2FACN0I,IAAK,uBACJ,QACU/I,EAAAA,EAAAA,IAAiB,WACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,wDACN0I,IAAK,uBACJ,cACU/I,EAAAA,EAAAA,IAAiB,yVAE9B,GACE4M,IAA2BlT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,qPACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,iEAC5B,GACE6M,IAA2BnT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,uCAAwC,GACnGoT,IAA2BpT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gKAAiK,GAC3NqT,IAA2BrT,EAAAA,EAAAA,GAAoB,MAAO,KAAM,+BAAgC,GAC5FsT,IAA2BtT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0EAA2E,GACrIwT,IAA2BxT,EAAAA,EAAAA,GAAoB,MAAO,KAAM,0CAA2C,GACvGyT,GAAc,CAClB5P,MAAO,uCACPiL,aAAc,OAeHmD,GAAiB,CAC5BP,IAAK,mBACLtQ,IAAK,oCACL4H,YAAa,CAAC5G,EAAAA,GAAoB0N,EAAAA,WAAAA,YAClChO,MAAO,mBACPiH,YAAa,wIACb4I,oBAAqB,wIACrBH,cAAe,uEACfC,iBAAkB,2BAClB1Q,OAAQiB,EAAAA,GACR8G,OAAQpH,EAAAA,GACRwH,YAAa,0FACbC,YAAa,0FACbC,QAAS,IAAIX,KAAK,4BAClBY,QAAS,IAAIZ,KAAK,6BAGdyJ,GAAc,CAClBD,SAGF,QAA4BxP,EAAAA,EAAAA,IAAiB,IACxCyP,GACHxP,OAAQ,kBACRO,MAAMC,GAER,MAAM8D,GAASC,EAAAA,EAAAA,MAEf,SAASgN,EAAWC,GAClBlN,EAAOmN,KAAK,aAAYC,EAAAA,EAAAA,IAAoBF,wBAC9C,CAEA,MAAO,CAAC3T,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,GACpD9F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,upBAEnBD,EAAG,SAGP4E,EAAAA,EAAAA,IAAakH,EAAAA,EAAU,CACrBrQ,MAAOmQ,GAAKnQ,MACZiH,YAAakJ,GAAKlJ,YAClB3H,IAAK,0BAA0B6Q,GAAK7Q,MACpC4H,YAAaiJ,GAAKjJ,YAClBE,YAAa+I,GAAK/I,YAClBC,YAAa8I,GAAK9I,YAClBC,QAAS6I,GAAK7I,QACdC,QAAS4I,GAAK5I,QACdtI,OAAQkR,GAAKlR,OACb+H,OAAQmJ,GAAKnJ,QACZ,CACD7C,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB1D,EACAsB,EACAC,EACAE,EACAC,GACAlE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,4CACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CACnCG,GAAI,gCACJlE,MAAO,YACN,CACDmE,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,eAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,eACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,kBAAoB,CAC7DC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,oBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,OAEnBnC,EACAC,GACA6G,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB7B,KAEFgC,EAAG,KAELrG,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,kCACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,mCAAqC,CAC9EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,sHACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,kCAAoC,CAC7EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,SAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,+HAEnBhC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACAoG,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBpB,KAEFuB,EAAG,IAELtB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACA2F,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBX,KAEFc,EAAG,IAELb,GACAyF,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBT,KAEFY,EAAG,IAELX,GACAuF,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBP,KAEFU,EAAG,IAEL+L,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACA3H,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB2M,KAEFxM,EAAG,IAELyM,EACAC,EACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAE,IACAxT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,mEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,kBAAoB,CAC7DC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,mBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,qCAEnBtG,EAAAA,EAAAA,GAAoB,OAAQyT,GAAa,EACvCxI,EAAAA,EAAAA,IAAasJ,EAAAA,EAAc,CACzBC,UAAW,GACXC,WAAY,oBACZC,YAAaT,SAInB5N,EAAG,GACF,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,YAClH,GAAG,CAER,ICvVA,MAAMzC,GAAc,GAEpB,S,2NCFA,MAAMpB,GAA0BxC,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,sEAAwE,mUAAoU,GAC7cC,GAA0B9D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,2EACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,UACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,SACU/I,EAAAA,EAAAA,IAAiB,gBAC5B,GACEvC,GAA0B/D,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,oBACPsC,IAAK,2DACLC,IAAK,gCACLtE,MAAO,gCACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,EACtCsG,EAAAA,EAAAA,IAAiB,mEACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN7E,MAAO,kCACPuN,IAAK,YACJ,cACU/I,EAAAA,EAAAA,IAAiB,SAE9B,GACErC,GAA0BjE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mOAAoO,GAC7RkE,GAA0BlE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,eACpCsG,EAAAA,EAAAA,IAAiB,+KAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,kBACpCsG,EAAAA,EAAAA,IAAiB,yEAE9B,GACEnC,GAA0BnE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qDAAsD,GAC/GoE,GAA0BpE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,oOAAqO,GAC9RqE,GAA0BrE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,kaAAma,GAC5dsE,GAA0BtE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uGAAwG,GACjKuE,GAA2BvE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,2OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yIAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yNAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,4SAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,mOAC3C,GACEwE,GAA2BxE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,+BAAgC,GAC3FyE,GAA2BzE,EAAAA,EAAAA,GAAoB,MAAO,KAAM,ibAAkb,GAC9e0E,GAA2B1E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,sEACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,4BAClCsG,EAAAA,EAAAA,IAAiB,UACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,4BAClCsG,EAAAA,EAAAA,IAAiB,+BACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,gHAC5B,GACE3B,GAA2B3E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,kCAAmC,GAC9F4E,GAA2B5E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,0NACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,6DACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,sBAClCsG,EAAAA,EAAAA,IAAiB,OAC5B,GACEzB,GAA2B7E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iUAAkU,GAC5X8E,GAA2B9E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,yTAA0T,GACpX+E,GAA2B/E,EAAAA,EAAAA,GAAoB,MAAO,KAAM,mVAAoV,GAChZgF,GAA2BhF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,wBAAyB,GACpFiF,GAA2BjF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qPAAsP,GAChTkF,GAA2BlF,EAAAA,EAAAA,GAAoB,IAAK,CACxD2G,KAAM,6DACN0I,IAAK,uBACJ,yBAA0B,GACvBlK,GAA2BnF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qNAAsN,GAChRoF,GAA2BpF,EAAAA,EAAAA,GAAoB,MAAO,KAAM,sPAAuP,GACnTqF,GAA2BrF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0SAA2S,GACrWsF,GAA2BtF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0RAA2R,GACrVuF,GAA2BvF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,6BAA8B,GACzFwF,GAA2BxF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8WAA+W,GACzayF,GAA2BzF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,sOAAuO,GACjS0F,GAA2B1F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,+MAAgN,GAC1Q2F,GAA2B3F,EAAAA,EAAAA,GAAoB,MAAO,KAAM,mKAAoK,GAChOoS,GAA2BpS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,gFACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,iBACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,oCACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,mGAC5B,GACE+L,GAA2BrS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gcAAic,GAC3fsS,GAA2BtS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,SACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,0DACN0I,IAAK,uBACJ,uBACU/I,EAAAA,EAAAA,IAAiB,qFAC5B,GACEiM,GAA2BvS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,kBAAmB,GAC9EwS,GAA2BxS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uUAAwU,GAClYyS,GAA2BzS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,qBACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,4DACN0I,IAAK,uBACJ,yBACU/I,EAAAA,EAAAA,IAAiB,6JAC5B,GACEoM,GAA2B1S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,kBAAmB,GAC9E2S,GAA2B3S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uPAAwP,GAClT4S,GAA2B5S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,0DACpCsG,EAAAA,EAAAA,IAAiB,8PACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,iKAC5B,GACEuM,GAA2B7S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,uCACpCsG,EAAAA,EAAAA,IAAiB,sGACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,2DAC5B,GACEwM,GAA2B9S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,aAAc,GACzE+S,IAA2B/S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qPAAsP,GAChTgT,IAA2BhT,EAAAA,EAAAA,GAAoB,MAAO,KAAM,uKAAwK,GACpOiT,IAA2BjT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,skBAAukB,GACjoBkT,IAA2BlT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,+QAAgR,GAC1UmT,IAA2BnT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yCAA0C,GACrGoT,IAA2BpT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6MAA8M,GACxQqT,IAA2BrT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,oCACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,sBAClCsG,EAAAA,EAAAA,IAAiB,0GACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,0CACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,4CAC5B,GACEgN,IAA2BtT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,uGACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,sBAClCsG,EAAAA,EAAAA,IAAiB,8BACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,gKAC5B,GACEkN,IAA2BxT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,uBAAwB,GACnFyT,IAA2BzT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,wTACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,0DACN0I,IAAK,uBACJ,uBACU/I,EAAAA,EAAAA,IAAiB,OAC5B,GACEoN,IAA2B1T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iaAAka,GAC5d2T,IAA2B3T,EAAAA,EAAAA,GAAoB,KAAM,KAAM,iCAAkC,GAC7F4T,IAA2B5T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,sJAAuJ,GACjN6T,IAA2B7T,EAAAA,EAAAA,GAAoB,MAAO,KAAM,wBAAyB,GACrF8T,IAA2B9T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0EAA2E,GACrI+T,IAA2B/T,EAAAA,EAAAA,GAAoB,MAAO,KAAM,mCAAoC,GAChGgU,GAAc,CAClBnQ,MAAO,uCACPiL,aAAc,OAgBHmD,GAAiB,CAC5BP,IAAK,mBACLtQ,IAAK,iCACL4H,YAAa,CAAC5G,EAAAA,GAAoB0N,EAAAA,WAAAA,YAClChO,MAAO,gBACPiH,YAAa,+JACb4I,oBAAqB,+JACrBH,cAAe,iEACfC,iBAAkB,sBAClB1Q,OAAQiB,EAAAA,GACR8G,OAAQpH,EAAAA,GACRwH,YAAa,oFACbC,YAAa,oFACbC,QAAS,IAAIX,KAAK,4BAClBY,QAAS,IAAIZ,KAAK,6BAGdyJ,GAAc,CAClBD,SAGF,QAA4BxP,EAAAA,EAAAA,IAAiB,IACxCyP,GACHxP,OAAQ,eACRO,MAAMC,GAER,MAAM8D,GAASC,EAAAA,EAAAA,MAEf,SAASgN,EAAWC,GAClBlN,EAAOmN,KAAK,aAAYC,EAAAA,EAAAA,IAAoBF,qBAC9C,CAEA,MAAO,CAAC3T,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,GACpD9F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,ipBAEnBD,EAAG,SAGP4E,EAAAA,EAAAA,IAAakH,EAAAA,EAAU,CACrBrQ,MAAOmQ,GAAKnQ,MACZiH,YAAakJ,GAAKlJ,YAClB3H,IAAK,0BAA0B6Q,GAAK7Q,MACpC4H,YAAaiJ,GAAKjJ,YAClBE,YAAa+I,GAAK/I,YAClBC,YAAa8I,GAAK9I,YAClBC,QAAS6I,GAAK7I,QACdC,QAAS4I,GAAK5I,QACdtI,OAAQkR,GAAKlR,OACb+H,OAAQmJ,GAAKnJ,QACZ,CACD7C,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB1D,EACAsB,EACAC,EACAE,EACAC,EACAC,GACAnE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,qIACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,mCAAqC,CAC9EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,UAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,UACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,kCAAoC,CAC7EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,SAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,kPAEnBlC,GACA6G,EAAAA,EAAAA,IAAaqJ,EAAAA,EAAS,CACpB7H,KAAM,OACN3K,MAAO,kBACP4K,QAAS,MACR,CACDzG,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB7B,EACAC,EACAC,KAEF8B,EAAG,IAEL7B,GACAxE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,+BACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CACnCG,GAAI,gCACJlE,MAAO,YACN,CACDmE,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,eAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,iCACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,mCAAqC,CAC9EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,UAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,UACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,kCAAoC,CAC7EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,SAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,oGAEnB2E,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBzB,KAEF4B,EAAG,IAEL3B,EACAC,EACAC,EACAC,EACAC,GACAmG,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBnB,KAEFsB,EAAG,IAELrB,EACAC,GACAjF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,CAC7BkF,GACAoB,EAAAA,EAAAA,IAAiB,8DACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,qCAAuC,CAChFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,YAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,2PAEnBnB,GACA8F,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBd,KAEFiB,EAAG,IAELhB,GACA4F,EAAAA,EAAAA,IAAaqJ,EAAAA,EAAS,CACpB7H,KAAM,OACN3K,MAAO,qCACP4K,QAAS,MACR,CACDzG,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBZ,KAEFe,EAAG,IAELd,EACAC,EACAC,EACAC,GACAuF,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBP,KAEFU,EAAG,IAEL+L,EACAC,EACAC,EACAC,EACAC,EACAC,GACAzS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,uGACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,yCAA2C,CACpFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,kCAEnBD,EAAG,MAGPqM,EACAC,GACA3S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,EAClCiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,oCAAsC,CAC/EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,oCAEnBD,EAAG,OAGPC,EAAAA,EAAAA,IAAiB,4SAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,EAClCiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,qCAAuC,CAChFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,wCAEnBD,EAAG,OAGPC,EAAAA,EAAAA,IAAiB,kJAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,EAClCiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,sCAAwC,CACjFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,8EAEnBD,EAAG,OAGPC,EAAAA,EAAAA,IAAiB,0XAEnBsM,EACAC,IAEFC,EACAC,IACA9H,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB8M,MAEF3M,EAAG,IAEL4M,GACAC,GACAC,GACAC,GACAC,GACAC,IACAtT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,iMACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,mCAAqC,CAC9EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,UAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,uWAEnBkN,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,IACA/T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,iEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,eAAiB,CAC1DC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,gBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,qCAEnBtG,EAAAA,EAAAA,GAAoB,OAAQgU,GAAa,EACvC/I,EAAAA,EAAAA,IAAasJ,EAAAA,EAAc,CACzBC,UAAW,GACXC,WAAY,kBACZC,YAAaT,SAInB5N,EAAG,GACF,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,YAClH,GAAG,CAER,ICneA,MAAMzC,GAAc,GAEpB,S,2NCAA,MAAMpB,EAAa,CAAEqB,MAAO,sEACtBC,GAA0B9D,EAAAA,EAAAA,GAAoB,IAAK,CACvD2G,KAAM,gDACN0I,IAAK,uBACJ,YAAa,GACVtL,GAA0B/D,EAAAA,EAAAA,GAAoB,IAAK,CACvD2G,KAAM,gDACN0I,IAAK,uBACJ,QAAS,GACNpL,GAA0BjE,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,oBACPsC,IAAK,2DACLC,IAAK,6CACLtE,MAAO,6CACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,EACtCsG,EAAAA,EAAAA,IAAiB,gFACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN7E,MAAO,kCACPuN,IAAK,YACJ,cACU/I,EAAAA,EAAAA,IAAiB,SAE9B,GACEpC,GAA0BlE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8JAA+J,GACxNmE,GAA0BnE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yCAA0C,GACpGoE,GAA0BpE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2cAA4c,GACrgBqE,GAA0BrE,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,eAAgB,GAC5EsE,GAA0BtE,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,eAAgB,GAC5EuE,GAA2BvE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,4XACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,UACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,8BAC5B,GACE9B,GAA2BxE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,yUAA0U,GACpYyE,GAA2BzE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mWAAoW,GAC9Z0E,GAA2B1E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,yJAA0J,GACpN2E,GAA2B3E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,+UACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,mGAC5B,GACE1B,GAA2B5E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,+BAAgC,GAC3F6E,GAA2B7E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,+QAAgR,GAC1U8E,GAA2B9E,EAAAA,EAAAA,GAAoB,MAAO,KAAM,6OAA8O,GAC1S+E,GAA2B/E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,iHACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,4DACN0I,IAAK,uBACJ,yBACU/I,EAAAA,EAAAA,IAAiB,kBACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,4DACN0I,IAAK,uBACJ,yBACU/I,EAAAA,EAAAA,IAAiB,oFAC5B,GACEtB,GAA2BhF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,6BAA8B,GACzFiF,GAA2BjF,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,OAAU,GACvEkF,GAA2BlF,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAAS,GACtEmF,GAA2BnF,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAAiB,GAC9EoF,GAA2BpF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wOAAyO,GACnSqF,GAA2BrF,EAAAA,EAAAA,GAAoB,MAAO,CAC1D6D,MAAO,aACPsC,IAAK8O,EACL7O,IAAK,gCACLtE,MAAO,iCACN,MAAO,GACJwD,GAA2BtF,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,eAAiB,kCAAmC,GACpH0B,GAA2BvF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oCAAqC,GAChGwF,GAA2BxF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,4HACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,uLAC5B,GACEb,GAA2BzF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,+KAAgL,GAC1O0F,GAA2B1F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,wFACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,uFACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,OACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,uLAC5B,GACEX,GAA2B3F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,ySAA0S,GACpWoS,GAA2BpS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,qCAAsC,GACjGqS,GAA2BrS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4TAA6T,GACvXsS,GAA2BtS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,mIACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,uLAC5B,GACEiM,GAA2BvS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,wCAAyC,GACpGwS,GAA2BxS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,kRAAmR,GAC7UyS,GAA2BzS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8QAA+Q,GACzU0S,GAA2B1S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,kSAAmS,GAC7V2S,GAA2B3S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mOAAoO,GAC9R4S,GAA2B5S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,0EACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,wDACN0I,IAAK,uBACJ,4BACU/I,EAAAA,EAAAA,IAAiB,uPAC5B,GACEuM,GAA2B7S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,2BACN0I,IAAK,uBACJ,gBACU/I,EAAAA,EAAAA,IAAiB,kGAC5B,GACEwM,GAA2B9S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,iBAAkB,GAC7E+S,IAA2B/S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,sJAAuJ,GACjNgT,IAA2BhT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,ueAAwe,GACliBiT,IAA2BjT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0XAA2X,GACrbkT,IAA2BlT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,4DACN0I,IAAK,uBACJ,yBACU/I,EAAAA,EAAAA,IAAiB,2DAC5B,GACE6M,IAA2BnT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,qCAAsC,GACjGoT,IAA2BpT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,oHACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,yBAC5B,GACE+M,IAA2BrT,EAAAA,EAAAA,GAAoB,MAAO,KAAM,sBAAuB,GACnFsT,IAA2BtT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0EAA2E,GACrIwT,IAA2BxT,EAAAA,EAAAA,GAAoB,MAAO,KAAM,iCAAkC,GAC9FyT,GAAc,CAClB5P,MAAO,uCACPiL,aAAc,OAeHmD,GAAiB,CAC5BP,IAAK,mBACLtQ,IAAK,iCACL4H,YAAa,CAAC5G,EAAAA,GAAoB0N,EAAAA,WAAAA,YAClChO,MAAO,gBACPiH,YAAa,mIACb4I,oBAAqB,mIACrBH,cAAe,iEACfC,iBAAkB,6CAClB1Q,OAAQiB,EAAAA,GACR8G,OAAQpH,EAAAA,GACRwH,YAAa,oFACbC,YAAa,oFACbC,QAAS,IAAIX,KAAK,4BAClBY,QAAS,IAAIZ,KAAK,6BAGdyJ,GAAc,CAClBD,SAGF,QAA4BxP,EAAAA,EAAAA,IAAiB,IACxCyP,GACHxP,OAAQ,eACRO,MAAMC,GAER,MAAM8D,GAASC,EAAAA,EAAAA,MAEf,SAASgN,EAAWC,GAClBlN,EAAOmN,KAAK,aAAYC,EAAAA,EAAAA,IAAoBF,qBAC9C,CAEA,MAAO,CAAC3T,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,GACpD9F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,ipBAEnBD,EAAG,SAGP4E,EAAAA,EAAAA,IAAakH,EAAAA,EAAU,CACrBrQ,MAAOmQ,GAAKnQ,MACZiH,YAAakJ,GAAKlJ,YAClB3H,IAAK,0BAA0B6Q,GAAK7Q,MACpC4H,YAAaiJ,GAAKjJ,YAClBE,YAAa+I,GAAK/I,YAClBC,YAAa8I,GAAK9I,YAClBC,QAAS6I,GAAK7I,QACdC,QAAS4I,GAAK5I,QACdtI,OAAQkR,GAAKlR,OACb+H,OAAQmJ,GAAKnJ,QACZ,CACD7C,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBlG,EAAAA,EAAAA,GAAoB,SAAUwC,EAAY,EACxC8D,EAAAA,EAAAA,IAAiB,oEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,6CAA+C,CACxFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iCAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,wMAEnBtG,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,8EACjBxC,GACAwC,EAAAA,EAAAA,IAAiB,SACjBvC,GACAuC,EAAAA,EAAAA,IAAiB,2DACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,mCAAqC,CAC9EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,2CAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,qEAEnBrC,EACAC,GACAlE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,yFACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CACnCG,GAAI,gCACJlE,MAAO,YACN,CACDmE,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,eAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,sMAEnBnC,EACAC,GACApE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,EAClCsG,EAAAA,EAAAA,IAAiB,iEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,8BAAgC,CACzEC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,gBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,sHACjBjC,GACAiC,EAAAA,EAAAA,IAAiB,qHACjBhC,GACAgC,EAAAA,EAAAA,IAAiB,SAGrB/B,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACAoG,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBpB,KAEFuB,EAAG,KAELrG,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,kCACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,mCAAqC,CAC9EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,8NAEnBvB,GACA/E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,+KACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,yCAA2C,CACpFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,8CAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,uIAEnBtB,GACAhF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,oCACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,8BAAgC,CACzEC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iCAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,mSACjBrB,GACAqB,EAAAA,EAAAA,IAAiB,iBACjBpB,GACAoB,EAAAA,EAAAA,IAAiB,cACjBnB,GACAmB,EAAAA,EAAAA,IAAiB,oBAEnBlB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAyM,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAE,IACAxT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,iEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,eAAiB,CAC1DC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,yBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,qCAEnBtG,EAAAA,EAAAA,GAAoB,OAAQyT,GAAa,EACvCxI,EAAAA,EAAAA,IAAasJ,EAAAA,EAAc,CACzBC,UAAW,GACXC,WAAY,kBACZC,YAAaT,SAInB5N,EAAG,GACF,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,YAClH,GAAG,CAER,IC/XA,MAAMzC,GAAc,GAEpB,S,mQCFA,MAAMpB,GAA0BxC,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,sEAAwE,6HAAgI,GACzQC,GAA0B9D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8OAAiP,GAC1S+D,GAA0B/D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,4EACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,UACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,SACU/I,EAAAA,EAAAA,IAAiB,uBACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,kDACpCsG,EAAAA,EAAAA,IAAiB,uFAC5B,GACErC,GAA0BjE,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,oBACPsC,IAAK,iEACLC,IAAK,6BACLtE,MAAO,6BACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,EACtCsG,EAAAA,EAAAA,IAAiB,gEACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN7E,MAAO,kCACPuN,IAAK,YACJ,cACU/I,EAAAA,EAAAA,IAAiB,SAE9B,GACEpC,GAA0BlE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,qBAAsB,GAChFmE,GAA0BnE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,kTAAmT,GAC5WoE,GAA0BpE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,mEACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,aAClCsG,EAAAA,EAAAA,IAAiB,sBACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,2BAClCsG,EAAAA,EAAAA,IAAiB,yDAC5B,GACEjC,GAA0BrE,EAAAA,EAAAA,GAAoB,MAAO,KAAM,2DAA4D,GACvHsE,GAA0BtE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oBAAqB,GAC/EuE,GAA2BvE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,oJACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN0I,IAAK,uBACJ,YACU/I,EAAAA,EAAAA,IAAiB,mHAC5B,GACE9B,GAA2BxE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6WAAkX,GAC5ayE,GAA2BzE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,+OAAkP,GAC5S0E,GAA2B1E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yBAA0B,GACrF2E,GAA2B3E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6EAA8E,GACxI4E,GAA2B5E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,qDACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,aAClCsG,EAAAA,EAAAA,IAAiB,uCAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,iDACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,aAClCsG,EAAAA,EAAAA,IAAiB,QAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,mDACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,0BAClCsG,EAAAA,EAAAA,IAAiB,SAE9B,GACEzB,GAA2B7E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yBAA0B,GACrF8E,GAA2B9E,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,mBAAoB,GACjF+E,GAA2B/E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,6CACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,aACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,4CAClCsG,EAAAA,EAAAA,IAAiB,QAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,oBACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,uCAEpCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,6BACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,uCAEpCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,0CACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,sEAEpCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,+CACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,6EAClCsG,EAAAA,EAAAA,IAAiB,SAE9B,GACEtB,GAA2BhF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,sJAAuJ,GACjNiF,GAA2BjF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6CAA8C,GACxGkF,GAA2BlF,EAAAA,EAAAA,GAAoB,MAAO,KAAM,8GAA+G,GAC3KmF,GAA2BnF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gMAAiM,GAC3PoF,GAA2BpF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,iCAAkC,GAC7FqF,GAA2BrF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iKAAoK,GAC9NsF,GAA2BtF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,+QAAgR,GAC1UuF,GAA2BvF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wEAAyE,GACnIwF,GAA2BxF,EAAAA,EAAAA,GAAoB,MAAO,KAAM,iLAAkL,GAC9OyF,GAA2BzF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mHAAoH,GAC9K0F,GAA2B1F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8NAA+N,GACzR2F,GAA2B3F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4NAA6N,GACvRoS,GAA2BpS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,2MAC/C,GACEqS,GAA2BrS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,kPAAmP,GAC7SsS,GAA2BtS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,kPAAmP,GAC7SuS,GAA2BvS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qVAAsV,GAChZwS,GAA2BxS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,aACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,oCACN0I,IAAK,uBACJ,uCACU/I,EAAAA,EAAAA,IAAiB,6CAC5B,GACEmM,GAA2BzS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,6CAA8C,GACzG0S,GAA2B1S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,sJAAuJ,GACjN2S,IAA2B3S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8TAA+T,GACzX4S,IAA2B5S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,4CAA6C,GACxG6S,IAA2B7S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4RAA8R,GACxV8S,IAA2B9S,EAAAA,EAAAA,GAAoB,MAAO,KAAM,kBAAmB,GAC/E+S,IAA2B/S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0EAA2E,GACrIgT,IAA2BhT,EAAAA,EAAAA,GAAoB,MAAO,KAAM,8BAA+B,GAC3FiT,IAA2BjT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iKAAoK,GAC9NkT,IAA2BlT,EAAAA,EAAAA,GAAoB,MAAO,KAAM,gCAAiC,GAC7FmT,GAAc,CAClBtP,MAAO,uCACPiL,aAAc,OAEVsE,GAAc,CAAEvP,MAAO,gDACvBwP,IAA2BrT,EAAAA,EAAAA,GAAoB,KAAM,CAAE6D,MAAO,cAAgB,qBAAsB,GACpGyP,GAAc,CAAEzP,MAAO,kEACvB2P,IAA2BxT,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,qCAAuC,8CAA+C,GACtJ4P,GAAc,CAAE5P,MAAO,8BACvB6P,IAA2B1T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,6BAA+B,yGACjF,GACE8P,IAA2B3T,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,qCAAuC,0CAA2C,GAClJ+P,GAAc,CAAE/P,MAAO,8BACvBgQ,IAA2B7T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,6BAA+B,4NACjF,GACEiQ,IAA2B9T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0KAA2K,GACrO+T,IAA2B/T,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,qCAAuC,mCAAoC,GAC3ImQ,GAAc,CAAEnQ,MAAO,8BACvBqR,IAA2BlV,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,6BAA+B,+TACjF,GACEsR,IAA2BnV,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8RAA+R,GACzVoV,IAA2BpV,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,qCAAuC,gDAAiD,GACxJwR,GAAc,CAAExR,MAAO,8BACvByR,IAA2BtV,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,6BAA+B,4JACjF,GACE0R,IAA2BvV,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,0GACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,mBAClCsG,EAAAA,EAAAA,IAAiB,wMAC5B,GACEkP,IAA2BxV,EAAAA,EAAAA,GAAoB,MAAO,KAAM,0GAA2G,GACvKyV,IAA2BzV,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wQAAyQ,GACnU0V,IAA2B1V,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,qCAAuC,+BAAgC,GACvI8R,GAAc,CAAE9R,MAAO,8BACvB+R,IAA2B5V,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,6BAA+B,4JACjF,GACEgS,IAA2B7V,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,8KACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,iBAClCsG,EAAAA,EAAAA,IAAiB,4BACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,aAClCsG,EAAAA,EAAAA,IAAiB,OAC5B,GACEwP,IAA2B9V,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wKAAyK,GACnO+V,IAA2B/V,EAAAA,EAAAA,GAAoB,IAAK,KAAM,kTAAmT,GAqBtWiS,GAAiB,CAC5BP,IAAK,mBACLtQ,IAAK,kCACL4H,YAAa,CAAC5G,EAAAA,GAAoB0N,EAAAA,WAAAA,YAClChO,MAAO,iBACPiH,YAAa,4HACb4I,oBAAqB,4HACrBH,cAAe,uEACfC,iBAAkB,6BAClB1Q,OAAQiB,EAAAA,GACR8G,OAAQpH,EAAAA,GACRwH,YAAa,sFACbC,YAAa,sFACbC,QAAS,IAAIX,KAAK,4BAClBY,QAAS,IAAIZ,KAAK,6BAGdyJ,GAAc,CAClBD,SAGF,QAA4BxP,EAAAA,EAAAA,IAAiB,IACxCyP,GACHxP,OAAQ,gBACRO,MAAMC,GAER,MAAM8D,GAASC,EAAAA,EAAAA,MAEf,SAASgN,EAAWC,GAClBlN,EAAOmN,KAAK,aAAYC,EAAAA,EAAAA,IAAoBF,sBAC9C,CAEA,MAAO,CAAC3T,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,GACpD9F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,upBAEnBD,EAAG,SAGP4E,EAAAA,EAAAA,IAAakH,EAAAA,EAAU,CACrBrQ,MAAOmQ,GAAKnQ,MACZiH,YAAakJ,GAAKlJ,YAClB3H,IAAK,0BAA0B6Q,GAAK7Q,MACpC4H,YAAaiJ,GAAKjJ,YAClBE,YAAa+I,GAAK/I,YAClBC,YAAa8I,GAAK9I,YAClBC,QAAS6I,GAAK7I,QACdC,QAAS4I,GAAK5I,QACdtI,OAAQkR,GAAKlR,OACb+H,OAAQmJ,GAAKnJ,QACZ,CACD7C,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB1D,EACAsB,EACAC,EACAE,EACAC,EACAC,EACAC,GACA6G,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB7B,KAEFgC,EAAG,IAEL/B,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACA7E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,4GACjBxB,GACAwB,EAAAA,EAAAA,IAAiB,sCACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,oCAAsC,CAC/EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,2BAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,sGAEnBvB,EACAC,EACAC,GACAgG,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBhB,KAEFmB,EAAG,IAELlB,EACAC,EACAC,EACAC,EACAC,GACA0F,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBV,KAEFa,EAAG,IAELZ,EACAC,EACAC,GACAsF,EAAAA,EAAAA,IAAaqJ,EAAAA,EAAS,CACpB7H,KAAM,OACN3K,MAAO,4CACP4K,QAAS,MACR,CACDzG,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBkM,GACApS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,gFACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,8BAAgC,CACzEC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,gBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,oGAEnB+L,EACAC,EACAC,EACAC,KAEFnM,EAAG,IAELoM,EACAC,EACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,IACAlT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,mEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,gBAAkB,CAC3DC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,oCAEnBtG,EAAAA,EAAAA,GAAoB,OAAQmT,GAAa,EACvClI,EAAAA,EAAAA,IAAasJ,EAAAA,EAAc,CACzBC,UAAW,GACX,mBAAoB,4BACpBC,WAAY,kBACZC,YAAaT,OAGjBjU,EAAAA,EAAAA,GAAoB,MAAOoT,GAAa,CACtCC,IACArT,EAAAA,EAAAA,GAAoB,MAAOsT,GAAa,EACtCrI,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOsJ,EAAAA,IAAa,CAC/BC,GAAI,MACJ/Q,MAAO,QACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,EAAG2O,UAAW,EAC9B5J,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOyJ,EAAAA,IAAmB,CACrCF,GAAI,KACJ/Q,MAAO,kGACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBsN,IACAxT,EAAAA,EAAAA,GAAoB,OAAQyT,GAAa,EACvCxI,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO0J,GAAkB,CACpClR,OAAOwI,EAAAA,EAAAA,IAAgB,CAACwI,EAAO,cAAgB,WAAY,sBAC3D,cAAe,QACd,KAAM,EAAG,CAAC,eAGjBxO,EAAG,GACF,OACH4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO2J,EAAAA,IAAkB,CAAEnR,MAAO,cAAgB,CAC7DoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBwN,IACA1T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,uEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,yCAA2C,CACpFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,8CAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,kHAGrBD,EAAG,OAGPA,EAAG,KAEL4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOsJ,EAAAA,IAAa,CAC/BC,GAAI,MACJ/Q,MAAO,QACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,EAAG2O,UAAW,EAC9B5J,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOyJ,EAAAA,IAAmB,CACrCF,GAAI,KACJ/Q,MAAO,kGACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtByN,IACA3T,EAAAA,EAAAA,GAAoB,OAAQ4T,GAAa,EACvC3I,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO0J,GAAkB,CACpClR,OAAOwI,EAAAA,EAAAA,IAAgB,CAACwI,EAAO,cAAgB,WAAY,sBAC3D,cAAe,QACd,KAAM,EAAG,CAAC,eAGjBxO,EAAG,GACF,OACH4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO2J,EAAAA,IAAkB,CAAEnR,MAAO,cAAgB,CAC7DoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB2N,GACAC,MAEFzN,EAAG,OAGPA,EAAG,KAEL4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOsJ,EAAAA,IAAa,CAC/BC,GAAI,MACJ/Q,MAAO,QACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,EAAG2O,UAAW,EAC9B5J,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOyJ,EAAAA,IAAmB,CACrCF,GAAI,KACJ/Q,MAAO,kGACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB6N,IACA/T,EAAAA,EAAAA,GAAoB,OAAQgU,GAAa,EACvC/I,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO0J,GAAkB,CACpClR,OAAOwI,EAAAA,EAAAA,IAAgB,CAACwI,EAAO,cAAgB,WAAY,sBAC3D,cAAe,QACd,KAAM,EAAG,CAAC,eAGjBxO,EAAG,GACF,OACH4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO2J,EAAAA,IAAkB,CAAEnR,MAAO,cAAgB,CAC7DoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBgP,GACAC,MAEF9O,EAAG,OAGPA,EAAG,KAEL4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOsJ,EAAAA,IAAa,CAC/BC,GAAI,MACJ/Q,MAAO,QACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,EAAG2O,UAAW,EAC9B5J,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOyJ,EAAAA,IAAmB,CACrCF,GAAI,KACJ/Q,MAAO,kGACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBkP,IACApV,EAAAA,EAAAA,GAAoB,OAAQqV,GAAa,EACvCpK,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO0J,GAAkB,CACpClR,OAAOwI,EAAAA,EAAAA,IAAgB,CAACwI,EAAO,cAAgB,WAAY,sBAC3D,cAAe,QACd,KAAM,EAAG,CAAC,eAGjBxO,EAAG,GACF,OACH4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO2J,EAAAA,IAAkB,CAAEnR,MAAO,cAAgB,CAC7DoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBoP,GACAC,GACAC,GACAC,MAEFpP,EAAG,OAGPA,EAAG,KAEL4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOsJ,EAAAA,IAAa,CAC/BC,GAAI,MACJ/Q,MAAO,QACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,EAAG2O,UAAW,EAC9B5J,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOyJ,EAAAA,IAAmB,CACrCF,GAAI,KACJ/Q,MAAO,kGACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBwP,IACA1V,EAAAA,EAAAA,GAAoB,OAAQ2V,GAAa,EACvC1K,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO0J,GAAkB,CACpClR,OAAOwI,EAAAA,EAAAA,IAAgB,CAACwI,EAAO,cAAgB,WAAY,sBAC3D,cAAe,QACd,KAAM,EAAG,CAAC,eAGjBxO,EAAG,GACF,OACH4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO2J,EAAAA,IAAkB,CAAEnR,MAAO,cAAgB,CAC7DoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB0P,GACAC,GACAC,GACAC,MAEF1P,EAAG,OAGPA,EAAG,WAKXA,EAAG,GACF,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,YAClH,GAAG,CAER,ICpiBA,MAAMzC,GAAc,GAEpB,S,2NCFA,MAAMpB,EAAa,CAAEqB,MAAO,sEACtBC,GAA0B9D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4LAA6L,GACtP+D,GAA0B/D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2LAA4L,GACrPiE,GAA0BjE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2SAA4S,GACrWkE,GAA0BlE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qNAAsN,GAC/QmE,GAA0BnE,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,oBACPsC,IAAK,6DACLC,IAAK,+FACLtE,MAAO,+FACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,EACtCsG,EAAAA,EAAAA,IAAiB,kIACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN7E,MAAO,kCACPuN,IAAK,YACJ,cACU/I,EAAAA,EAAAA,IAAiB,SAE9B,GACElC,GAA0BpE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,mCAAoC,GAC9FqE,GAA0BrE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mIAAoI,GAC7LsE,GAA0BtE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4QAA6Q,GACtUuE,GAA2BvE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,oOAAqO,GAC/RwE,GAA2BxE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,wCAAyC,GACpGyE,GAA2BzE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,kPAAmP,GAC7S0E,GAA2B1E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qLAAsL,GAChP2E,GAA2B3E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4WAA6W,GACva4E,GAA2B5E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6FAA8F,GACxJ6E,GAA2B7E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,wBAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,uBAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,uCAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sCAC3C,GACE8E,GAA2B9E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,gCAAiC,GAC5F+E,GAA2B/E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mCAAoC,GAC9FgF,GAA2BhF,EAAAA,EAAAA,GAAoB,MAAO,KAAM,gNAAiN,GAC7QiF,GAA2BjF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6DAA8D,GACxHkF,GAA2BlF,EAAAA,EAAAA,GAAoB,MAAO,KAAM,mGAAoG,GAChKmF,GAA2BnF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,oSAAqS,GAC/VoF,GAA2BpF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,CAAE6D,MAAO,QAAU,EAC3C7D,EAAAA,EAAAA,GAAoB,SAAU,KAAM,oCACpCsG,EAAAA,EAAAA,IAAiB,gTACjBtG,EAAAA,EAAAA,GAAoB,OACpBA,EAAAA,EAAAA,GAAoB,OACpBsG,EAAAA,EAAAA,IAAiB,uDACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,mBAClCsG,EAAAA,EAAAA,IAAiB,OACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,mBAClCsG,EAAAA,EAAAA,IAAiB,0GAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,CAAE6D,MAAO,QAAU,EAC3C7D,EAAAA,EAAAA,GAAoB,SAAU,KAAM,mCACpCsG,EAAAA,EAAAA,IAAiB,oGACjBtG,EAAAA,EAAAA,GAAoB,OACpBA,EAAAA,EAAAA,GAAoB,OACpBsG,EAAAA,EAAAA,IAAiB,+LACjBtG,EAAAA,EAAAA,GAAoB,OACpBA,EAAAA,EAAAA,GAAoB,OACpBsG,EAAAA,EAAAA,IAAiB,mCACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,MAClCsG,EAAAA,EAAAA,IAAiB,iEACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,MAClCsG,EAAAA,EAAAA,IAAiB,wDACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,qBAClCsG,EAAAA,EAAAA,IAAiB,uCACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,qBAClCsG,EAAAA,EAAAA,IAAiB,kFACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,MAClCsG,EAAAA,EAAAA,IAAiB,0EACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,4BAClCsG,EAAAA,EAAAA,IAAiB,8BACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,0BAClCsG,EAAAA,EAAAA,IAAiB,QAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,CAAE6D,MAAO,QAAU,EAC3C7D,EAAAA,EAAAA,GAAoB,SAAU,KAAM,8BACpCsG,EAAAA,EAAAA,IAAiB,6OACjBtG,EAAAA,EAAAA,GAAoB,OACpBA,EAAAA,EAAAA,GAAoB,OACpBsG,EAAAA,EAAAA,IAAiB,qEACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,eAClCsG,EAAAA,EAAAA,IAAiB,YACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,OAClCsG,EAAAA,EAAAA,IAAiB,kTAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,CAAE6D,MAAO,QAAU,EAC3C7D,EAAAA,EAAAA,GAAoB,SAAU,KAAM,qBACpCsG,EAAAA,EAAAA,IAAiB,wMAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,CAAE6D,MAAO,QAAU,EAC3C7D,EAAAA,EAAAA,GAAoB,SAAU,KAAM,mBACpCsG,EAAAA,EAAAA,IAAiB,8LAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,CAAE6D,MAAO,QAAU,EAC3C7D,EAAAA,EAAAA,GAAoB,SAAU,KAAM,oBACpCsG,EAAAA,EAAAA,IAAiB,mQAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,oBACpCsG,EAAAA,EAAAA,IAAiB,6IAE9B,GACEjB,GAA2BrF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,WAAY,GACvEsF,GAA2BtF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,sCACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,yCACNyI,OAAQ,SACRC,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,UACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,yCACNyI,OAAQ,SACRC,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,uHACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,yCACNyI,OAAQ,SACRC,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,8CACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,yCACNyI,OAAQ,SACRC,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,OACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,yCACNyI,OAAQ,SACRC,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,kKAC5B,GACEf,GAA2BvF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oBAAqB,GAChFwF,GAA2BxF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uXAAwX,GAClbyF,GAA2BzF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,+PAAgQ,GAC1T0F,GAA2B1F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2PAA4P,GACtT2F,GAA2B3F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,sPAAuP,GACjToS,GAA2BpS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6HAA8H,GACxLqS,GAA2BrS,EAAAA,EAAAA,GAAoB,MAAO,KAAM,2DAA4D,GACxHsS,GAA2BtS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,+WAAgX,GAC1auS,GAA2BvS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,+BAAgC,GAC3FwS,GAA2BxS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4UAA6U,GACvYyS,GAA2BzS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gYAAiY,GAC3b0S,GAA2B1S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qVAAsV,GAChZ2S,GAA2B3S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4OAA6O,GACvS4S,GAA2B5S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,+NAAgO,GAC1R6S,GAA2B7S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oBAAqB,GAChF8S,GAA2B9S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,kHAAmH,GAC7K+S,IAA2B/S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,iCACpCsG,EAAAA,EAAAA,IAAiB,kCAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,wBACpCsG,EAAAA,EAAAA,IAAiB,gEAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,uBACpCsG,EAAAA,EAAAA,IAAiB,kFAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,kBACpCsG,EAAAA,EAAAA,IAAiB,sEAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,iBACpCsG,EAAAA,EAAAA,IAAiB,6DAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,eACpCsG,EAAAA,EAAAA,IAAiB,6DAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,gBACpCsG,EAAAA,EAAAA,IAAiB,6DAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,gBACpCsG,EAAAA,EAAAA,IAAiB,sJAE9B,GACE0M,IAA2BhT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,6CAA8C,GACzGiT,IAA2BjT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8SAA+S,GACzWkT,IAA2BlT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mUAAoU,GAC9XmT,IAA2BnT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,qCAAsC,GACjGoT,IAA2BpT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,oJAAqJ,GAC/MqT,IAA2BrT,EAAAA,EAAAA,GAAoB,MAAO,KAAM,yBAA0B,GACtFsT,IAA2BtT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0EAA2E,GACrIwT,IAA2BxT,EAAAA,EAAAA,GAAoB,MAAO,KAAM,oCAAqC,GACjGyT,GAAc,CAClB5P,MAAO,uCACPiL,aAAc,OAgBHmD,GAAiB,CAC5BP,IAAK,mBACLtQ,IAAK,kCACL4H,YAAa,CAAC5G,EAAAA,GAAoB0N,EAAAA,WAAAA,YAClChO,MAAO,iBACPiH,YAAa,mKACb4I,oBAAqB,mKACrBH,cAAe,mEACfC,iBAAkB,4CAClB1Q,OAAQiB,EAAAA,GACR8G,OAAQpH,EAAAA,GACRwH,YAAa,sFACbC,YAAa,sFACbC,QAAS,IAAIX,KAAK,4BAClBY,QAAS,IAAIZ,KAAK,6BAGdyJ,GAAc,CAClBD,SAGF,QAA4BxP,EAAAA,EAAAA,IAAiB,IACxCyP,GACHxP,OAAQ,gBACRO,MAAMC,GAER,MAAM8D,GAASC,EAAAA,EAAAA,MAEf,SAASgN,EAAWC,GAClBlN,EAAOmN,KAAK,aAAYC,EAAAA,EAAAA,IAAoBF,sBAC9C,CAEA,MAAO,CAAC3T,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,GACpD9F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,mpBAEnBD,EAAG,SAGP4E,EAAAA,EAAAA,IAAakH,EAAAA,EAAU,CACrBrQ,MAAOmQ,GAAKnQ,MACZiH,YAAakJ,GAAKlJ,YAClB3H,IAAK,0BAA0B6Q,GAAK7Q,MACpC4H,YAAaiJ,GAAKjJ,YAClBE,YAAa+I,GAAK/I,YAClBC,YAAa8I,GAAK9I,YAClBC,QAAS6I,GAAK7I,QACdC,QAAS4I,GAAK5I,QACdtI,OAAQkR,GAAKlR,OACb+H,OAAQmJ,GAAKnJ,QACZ,CACD7C,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBlG,EAAAA,EAAAA,GAAoB,SAAUwC,EAAY,EACxC8D,EAAAA,EAAAA,IAAiB,SACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CACnCG,GAAI,gCACJlE,MAAO,aACN,CACDmE,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,gBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,uKAEnBxC,GACA9D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,gBACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,qDAAuD,CAChGC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,0BAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,0LAEnBvC,EACAE,EACAC,EACAC,EACAC,GACApE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,+HACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,kCAAoC,CAC7EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,+BAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,uLAEnBtG,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,4JACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,8BAAgC,CACzEC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,sBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,iHAEnBtG,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,kSACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,6CAA+C,CACxFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,oBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,0FAEnB2E,EAAAA,EAAAA,IAAaqJ,EAAAA,EAAS,CACpB7H,KAAM,OACN3K,MAAO,uBACP4K,QAAS,MACR,CACDzG,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB7B,EACAC,EACAC,KAEF8B,EAAG,IAEL7B,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACAkG,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBlB,KAEFqB,EAAG,IAELpB,GACAgG,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBhB,KAEFmB,EAAG,IAELlB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAyM,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACAC,GACAC,GACAC,IACAlT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,sFACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,qCAAuC,CAChFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,oBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,8bAEnB6M,GACAC,GACAC,GACAC,GACAE,IACAxT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,iEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,gBAAkB,CAC3DC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,qCAEnBtG,EAAAA,EAAAA,GAAoB,OAAQyT,GAAa,EACvCxI,EAAAA,EAAAA,IAAasJ,EAAAA,EAAc,CACzBC,UAAW,GACXC,WAAY,kBACZC,YAAaT,SAInB5N,EAAG,GACF,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,YAClH,GAAG,CAER,IC7aA,MAAMzC,GAAc,GAEpB,S,mQCFA,MAAMpB,GAA0BxC,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,sEAAwE,6PAAgQ,GACzYC,GAA0B9D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,2DACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,0JAC5B,GACEvC,GAA0B/D,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,oBACPsC,IAAK,iEACLC,IAAK,8BACLtE,MAAO,8BACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,EACtCsG,EAAAA,EAAAA,IAAiB,iEACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN7E,MAAO,kCACPuN,IAAK,YACJ,cACU/I,EAAAA,EAAAA,IAAiB,SAE9B,GACErC,GAA0BjE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,qBAAsB,GAChFkE,GAA0BlE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4UAA6U,GACtYmE,GAA0BnE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6BAA8B,GACvFoE,GAA0BpE,EAAAA,EAAAA,GAAoB,MAAO,KAAM,4DAA6D,GACxHqE,GAA0BrE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2DAA4D,GACrHsE,GAA0BtE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,aACpCsG,EAAAA,EAAAA,IAAiB,2HAC5B,GACE/B,GAA2BvE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,cACpCsG,EAAAA,EAAAA,IAAiB,iLAC5B,GACE9B,GAA2BxE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,SACpCsG,EAAAA,EAAAA,IAAiB,+EAC5B,GACE7B,GAA2BzE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,gHAC5B,GACE5B,GAA2B1E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,aACpCsG,EAAAA,EAAAA,IAAiB,kKAC5B,GACE3B,GAA2B3E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,WACpCsG,EAAAA,EAAAA,IAAiB,oJAC5B,GACE1B,GAA2B5E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,SACpCsG,EAAAA,EAAAA,IAAiB,uEAC5B,GACEzB,GAA2B7E,EAAAA,EAAAA,GAAoB,SAAU,KAAM,UAAW,GAC1E8E,GAA2B9E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,0BAA2B,GACtF+E,GAA2B/E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qKAAsK,GAChOgF,GAA2BhF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gPAAiP,GAC3SiF,GAA2BjF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yBAA0B,GACrFkF,GAA2BlF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qYAAsY,GAChcmF,GAA2BnF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qIAAsI,GAChMoF,GAA2BpF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,iBAAkB,GAC7EqF,GAA2BrF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,mGACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,0CACN0I,IAAK,uBACJ,gDACU/I,EAAAA,EAAAA,IAAiB,oEACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+FACN0I,IAAK,uBACJ,0CACU/I,EAAAA,EAAAA,IAAiB,6FAC5B,GACEhB,GAA2BtF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,qCAAsC,GACjGuF,GAA2BvF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,6IACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,4BAClCsG,EAAAA,EAAAA,IAAiB,4KAC5B,GACEd,GAA2BxF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,0GACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gCAClCsG,EAAAA,EAAAA,IAAiB,OAC5B,GACEb,GAA2BzF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yCAA0C,GACrG0F,GAA2B1F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,sDACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,4BAC5B,GACEX,GAA2B3F,EAAAA,EAAAA,GAAoB,MAAO,KAAM,0NAA2N,GACvRoS,GAA2BpS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6IAAiJ,GAC3MqS,GAA2BrS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gNAAmN,GAC7QsS,GAA2BtS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2NAAgO,GAC1RuS,GAA2BvS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,sRAAuR,GACjVwS,GAA2BxS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,EAClCsG,EAAAA,EAAAA,IAAiB,yJACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oEAClCsG,EAAAA,EAAAA,IAAiB,SAE9B,GACEmM,GAA2BzS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0EAA2E,GACrI0S,GAA2B1S,EAAAA,EAAAA,GAAoB,MAAO,KAAM,0GAA2G,GACvK2S,IAA2B3S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sBAAuB,GAClF4S,IAA2B5S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,+DAAgE,GAC1H6S,IAA2B7S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,sCACpCsG,EAAAA,EAAAA,IAAiB,uGAC5B,GACEwM,IAA2B9S,EAAAA,EAAAA,GAAoB,MAAO,KAAM,qEAAsE,GAClI+S,IAA2B/S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,sDACpCsG,EAAAA,EAAAA,IAAiB,8LAC5B,GACE0M,IAA2BhT,EAAAA,EAAAA,GAAoB,MAAO,KAAM,0JAA2J,GACvNiT,IAA2BjT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,aACpCsG,EAAAA,EAAAA,IAAiB,iTAC5B,GACE4M,IAA2BlT,EAAAA,EAAAA,GAAoB,MAAO,KAAM,kSAAmS,GAC/VmT,IAA2BnT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,iDACpCsG,EAAAA,EAAAA,IAAiB,oEAC5B,GACE8M,IAA2BpT,EAAAA,EAAAA,GAAoB,MAAO,KAAM,8HAA+H,GAC3LqT,IAA2BrT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,yDACpCsG,EAAAA,EAAAA,IAAiB,uJAC5B,GACEgN,IAA2BtT,EAAAA,EAAAA,GAAoB,MAAO,KAAM,sSAAuS,GACnWwT,IAA2BxT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,+DACpCsG,EAAAA,EAAAA,IAAiB,qGAC5B,GACEmN,IAA2BzT,EAAAA,EAAAA,GAAoB,MAAO,KAAM,2EAA4E,GACxI0T,IAA2B1T,EAAAA,EAAAA,GAAoB,KAAM,KAAM,uCAAwC,GACnG2T,IAA2B3T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,yKAA0K,GACpO4T,IAA2B5T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6EAA8E,GACxI6T,IAA2B7T,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,mBACpCsG,EAAAA,EAAAA,IAAiB,2KACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,uEACN0I,IAAK,uBACJ,qBACU/I,EAAAA,EAAAA,IAAiB,4BACjBtG,EAAAA,EAAAA,GAAoB,OACpBsG,EAAAA,EAAAA,IAAiB,6QAC5B,GACEwN,IAA2B9T,EAAAA,EAAAA,GAAoB,SAAU,KAAM,MAAO,GACtE+T,IAA2B/T,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,qBACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,sJAC5B,GACE0N,IAA2BhU,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,UACpCsG,EAAAA,EAAAA,IAAiB,2FACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,qEAC5B,GACE4O,IAA2BlV,EAAAA,EAAAA,GAAoB,KAAM,KAAM,qCAAsC,GACjGmV,IAA2BnV,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2IAA4I,GACtMoV,IAA2BpV,EAAAA,EAAAA,GAAoB,MAAO,KAAM,iCAAkC,GAC9FqV,IAA2BrV,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0EAA2E,GACrIsV,IAA2BtV,EAAAA,EAAAA,GAAoB,MAAO,KAAM,4CAA6C,GACzGuV,GAAc,CAClB1R,MAAO,uCACPiL,aAAc,OAEV0G,GAAc,CAAE3R,MAAO,gDACvB4R,IAA2BzV,EAAAA,EAAAA,GAAoB,KAAM,CAAE6D,MAAO,cAAgB,qBAAsB,GACpG6R,GAAc,CAAE7R,MAAO,kEACvB8R,IAA2B3V,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,qCAAuC,8CAA+C,GACtJ+R,GAAc,CAAE/R,MAAO,8BACvBgS,IAA2B7V,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,6BAA+B,yGACjF,GACEiS,IAA2B9V,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uVAAwV,GAClZ+V,IAA2B/V,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,qCAAuC,yCAA0C,GACjJmS,GAAc,CAAEnS,MAAO,8BACvBoS,IAA2BjW,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,6BAA+B,+FACjF,GACEqS,IAA2BlW,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8VAA+V,GAqBlZiS,GAAiB,CAC5BP,IAAK,mBACLtQ,IAAK,kCACL4H,YAAa,CAAC5G,EAAAA,GAAoB0N,EAAAA,WAAAA,YAClChO,MAAO,iBACPiH,YAAa,oJACb4I,oBAAqB,oJACrBH,cAAe,uEACfC,iBAAkB,8BAClB1Q,OAAQiB,EAAAA,GACR8G,OAAQpH,EAAAA,GACRwH,YAAa,sFACbC,YAAa,sFACbC,QAAS,IAAIX,KAAK,4BAClBY,QAAS,IAAIZ,KAAK,6BAGdyJ,GAAc,CAClBD,SAGF,QAA4BxP,EAAAA,EAAAA,IAAiB,IACxCyP,GACHxP,OAAQ,gBACRO,MAAMC,GAER,MAAM8D,GAASC,EAAAA,EAAAA,MAEf,SAASgN,EAAWC,GAClBlN,EAAOmN,KAAK,aAAYC,EAAAA,EAAAA,IAAoBF,sBAC9C,CAEA,MAAO,CAAC3T,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,GACpD9F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,upBAEnBD,EAAG,SAGP4E,EAAAA,EAAAA,IAAakH,EAAAA,EAAU,CACrBrQ,MAAOmQ,GAAKnQ,MACZiH,YAAakJ,GAAKlJ,YAClB3H,IAAK,0BAA0B6Q,GAAK7Q,MACpC4H,YAAaiJ,GAAKjJ,YAClBE,YAAa+I,GAAK/I,YAClBC,YAAa8I,GAAK9I,YAClBC,QAAS6I,GAAK7I,QACdC,QAAS4I,GAAK5I,QACdtI,OAAQkR,GAAKlR,OACb+H,OAAQmJ,GAAKnJ,QACZ,CACD7C,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB1D,EACAsB,EACAC,EACAE,EACAC,EACAC,GACA8G,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB9B,KAEFiC,EAAG,IAELhC,GACArE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,CAC9BsE,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACA5E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,CAC9B6E,GACAyB,EAAAA,EAAAA,IAAiB,uEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,qCAAuC,CAChFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,mBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,SAGrBxB,GACA9E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,mJACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,kCAAoC,CAC7EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,0GAEnBvB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACAuF,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBP,KAEFU,EAAG,IAEL+L,EACAC,EACAC,EACAC,GACAtH,EAAAA,EAAAA,IAAaqJ,EAAAA,EAAS,CACpB7H,KAAM,OACN3K,MAAO,4BACP4K,QAAS,MACR,CACDzG,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBsM,EACAC,GACAxH,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBwM,KAEFrM,EAAG,KAELrG,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,8EACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,oDAAsD,CAC/FC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,4CAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,UAGrBD,EAAG,IAELsM,GACAC,IACA5S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,CAC9B6S,IACA5H,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB4M,MAEFzM,EAAG,IAEL0M,IACA9H,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB8M,MAEF3M,EAAG,IAEL4M,IACAhI,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBgN,MAEF7M,EAAG,IAEL8M,IACAlI,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBkN,MAEF/M,EAAG,IAELgN,IACApI,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBoN,MAEFjN,EAAG,IAELmN,IACAvI,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBuN,MAEFpN,EAAG,MAGPqN,GACAC,GACAC,IACA5T,EAAAA,EAAAA,GAAoB,KAAM,KAAM,CAC9B6T,IACA7T,EAAAA,EAAAA,GAAoB,KAAM,KAAM,CAC9B8T,IACAxN,EAAAA,EAAAA,IAAiB,WACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,kCAAoC,CAC7EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,qCAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,sKAEnByN,GACAC,KAEFkB,GACAC,GACAC,GACAC,GACAC,IACAtV,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,mEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,gBAAkB,CAC3DC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,oCAEnBtG,EAAAA,EAAAA,GAAoB,OAAQuV,GAAa,EACvCtK,EAAAA,EAAAA,IAAasJ,EAAAA,EAAc,CACzBC,UAAW,GACXC,WAAY,kBACZC,YAAaT,OAGjBjU,EAAAA,EAAAA,GAAoB,MAAOwV,GAAa,CACtCC,IACAzV,EAAAA,EAAAA,GAAoB,MAAO0V,GAAa,EACtCzK,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOsJ,EAAAA,IAAa,CAC/BC,GAAI,MACJ/Q,MAAO,QACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,EAAG2O,UAAW,EAC9B5J,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOyJ,EAAAA,IAAmB,CACrCF,GAAI,KACJ/Q,MAAO,kGACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtByP,IACA3V,EAAAA,EAAAA,GAAoB,OAAQ4V,GAAa,EACvC3K,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO0J,GAAkB,CACpClR,OAAOwI,EAAAA,EAAAA,IAAgB,CAACwI,EAAO,cAAgB,WAAY,sBAC3D,cAAe,QACd,KAAM,EAAG,CAAC,eAGjBxO,EAAG,GACF,OACH4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO2J,EAAAA,IAAkB,CAAEnR,MAAO,cAAgB,CAC7DoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB2P,IACA7V,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,uEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,yCAA2C,CACpFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,8CAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,+GAEnBwP,MAEFzP,EAAG,OAGPA,EAAG,KAEL4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOsJ,EAAAA,IAAa,CAC/BC,GAAI,MACJ/Q,MAAO,QACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,EAAG2O,UAAW,EAC9B5J,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOyJ,EAAAA,IAAmB,CACrCF,GAAI,KACJ/Q,MAAO,kGACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB6P,IACA/V,EAAAA,EAAAA,GAAoB,OAAQgW,GAAa,EACvC/K,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO0J,GAAkB,CACpClR,OAAOwI,EAAAA,EAAAA,IAAgB,CAACwI,EAAO,cAAgB,WAAY,sBAC3D,cAAe,QACd,KAAM,EAAG,CAAC,eAGjBxO,EAAG,GACF,OACH4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO2J,EAAAA,IAAkB,CAAEnR,MAAO,cAAgB,CAC7DoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB+P,GACAC,MAEF7P,EAAG,OAGPA,EAAG,WAKXA,EAAG,GACF,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,YAClH,GAAG,CAER,IC3hBA,MAAMzC,GAAc,GAEpB,S,yPCFA,MAAMpB,GAA0BxC,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,sEAAwE,kKAAmK,GAC5SC,GAA0B9D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,4EACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,UACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,SACU/I,EAAAA,EAAAA,IAAiB,2VAC5B,GACEvC,GAA0B/D,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,oBACPsC,IAAK,6DACLC,IAAK,0DACLtE,MAAO,0DACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,EACtCsG,EAAAA,EAAAA,IAAiB,6FACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN7E,MAAO,kCACPuN,IAAK,YACJ,cACU/I,EAAAA,EAAAA,IAAiB,SAE9B,GACErC,GAA0BjE,EAAAA,EAAAA,GAAoB,KAAM,CAAEgD,GAAI,qBAAuB,qBAAsB,GACvGkB,GAA0BlE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,SACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,iJAC5B,GACEnC,GAA0BnE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,wHACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,kEAC5B,GACElC,GAA0BpE,EAAAA,EAAAA,GAAoB,MAAO,KAAM,0DAA6D,GACxHqE,GAA0BrE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8TAA+T,GACxXsE,GAA0BtE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gPAAiP,GAC1SuE,GAA2BvE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4FAA6F,GACvJwE,GAA2BxE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,4BAA6B,GACxFyE,GAA2BzE,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,aAAc,GAC3E0E,GAA2B1E,EAAAA,EAAAA,GAAoB,MAAO,KAAM,qoBAA0oB,GACtsB2E,GAA2B3E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mNAAoN,GAC9Q4E,GAA2B5E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,yLAA0L,GACpP6E,GAA2B7E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,+BAAgC,GAC3F8E,GAA2B9E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,+JAAgK,GAC1N+E,GAA2B/E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2CAA4C,GACtGgF,GAA2BhF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,SACpCsG,EAAAA,EAAAA,IAAiB,oCAC5B,GACErB,GAA2BjF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,UACpCsG,EAAAA,EAAAA,IAAiB,qEAC5B,GACEpB,GAA2BlF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,YACpCsG,EAAAA,EAAAA,IAAiB,2CAC5B,GACEnB,GAA2BnF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,yBAC/C,GACEoF,GAA2BpF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,WACpCsG,EAAAA,EAAAA,IAAiB,8BAC5B,GACEjB,GAA2BrF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,iCAAkC,GAC7FsF,GAA2BtF,EAAAA,EAAAA,GAAoB,IAAK,CACxD2G,KAAM,gDACN0I,IAAK,uBACJ,YAAa,GACV9J,GAA2BvF,EAAAA,EAAAA,GAAoB,IAAK,CACxD2G,KAAM,4DACN0I,IAAK,uBACJ,wBAAyB,GACtB7J,GAA2BxF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,sKACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,cAC5B,GACEb,GAA2BzF,EAAAA,EAAAA,GAAoB,MAAO,KAAM,iEAAoE,GAChI0F,GAA2B1F,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sCAAuC,GAClG2F,GAA2B3F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,0BACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,yLAC5B,GACE8L,GAA2BpS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,uMACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,4EAC5B,GACE+L,GAA2BrS,EAAAA,EAAAA,GAAoB,MAAO,KAAM,6EAAgF,GAC5IsS,GAA2BtS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,wEAAyE,GACpIuS,GAA2BvS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,2BACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,+KAC5B,GACEkM,GAA2BxS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0PAA2P,GACrTyS,GAA2BzS,EAAAA,EAAAA,GAAoB,MAAO,KAAM,uFAA0F,GACtJ0S,GAA2B1S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,gDAAiD,GAC5G2S,GAA2B3S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,6BACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,6OAC5B,GACEsM,IAA2B5S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,yKACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,uFAC5B,GACEuM,IAA2B7S,EAAAA,EAAAA,GAAoB,MAAO,KAAM,iEAAoE,GAChI8S,IAA2B9S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,uBAAwB,GACnF+S,IAA2B/S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wbAAyb,GACnfgT,IAA2BhT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gRAAiR,GAC3UiT,IAA2BjT,EAAAA,EAAAA,GAAoB,MAAO,KAAM,uEAA0E,GACtIkT,IAA2BlT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,oBACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,qFACN0I,IAAK,uBACJ,yCACU/I,EAAAA,EAAAA,IAAiB,wDAC5B,GACE6M,IAA2BnT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,kCAAmC,GAC9FoT,IAA2BpT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,4BACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,uQAC5B,GACE+M,IAA2BrT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,kCAAmC,GAC9FsT,IAA2BtT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wJAAyJ,GACnNwT,IAA2BxT,EAAAA,EAAAA,GAAoB,MAAO,KAAM,yBAA0B,GACtFyT,IAA2BzT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0EAA2E,GACrI0T,IAA2B1T,EAAAA,EAAAA,GAAoB,MAAO,KAAM,oCAAqC,GACjG2T,GAAc,CAClB9P,MAAO,uCACPiL,aAAc,OAEV8E,GAAc,CAAE/P,MAAO,gDACvBgQ,IAA2B7T,EAAAA,EAAAA,GAAoB,KAAM,CAAE6D,MAAO,cAAgB,qBAAsB,GACpGiQ,GAAc,CAAEjQ,MAAO,kEACvBkQ,IAA2B/T,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,qCAAuC,oDAAqD,GAC5JmQ,GAAc,CAAEnQ,MAAO,8BACvBqR,IAA2BlV,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,6BAA+B,oMACjF,GACEsR,IAA2BnV,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4IAA6I,GACvMoV,IAA2BpV,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4MAA6M,GACvQqV,IAA2BrV,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6DAA8D,GACxHsV,IAA2BtV,EAAAA,EAAAA,GAAoB,MAAO,KAAM,6CAAgD,GAC5GuV,IAA2BvV,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gKAAiK,GAC3NwV,IAA2BxV,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,qCAAuC,yCAA0C,GACjJ4R,GAAc,CAAE5R,MAAO,8BACvB6R,IAA2B1V,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,6BAA+B,mKACjF,GACE8R,IAA2B3V,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,iGACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,0DACN0I,IAAK,uBACJ,uBACU/I,EAAAA,EAAAA,IAAiB,4IAC5B,GACEsP,IAA2B5V,EAAAA,EAAAA,GAAoB,IAAK,KAAM,yOAA0O,GACpS6V,IAA2B7V,EAAAA,EAAAA,GAAoB,MAAO,KAAM,sIAA2I,GACvM8V,IAA2B9V,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,qCAAuC,mCAAoC,GAC3IkS,GAAc,CAAElS,MAAO,8BACvBmS,IAA2BhW,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,6BAA+B,mHACjF,GACEoS,IAA2BjW,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,yYACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,yBACN0I,IAAK,uBACJ,iBACU/I,EAAAA,EAAAA,IAAiB,4FAC5B,GACE4P,IAA2BlW,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iHAAkH,GAC5KmW,IAA2BnW,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,kGAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sMAC3C,GACEoW,IAA2BpW,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mGAAoG,GAoBvJiS,GAAiB,CAC5BP,IAAK,mBACLtQ,IAAK,kCACL4H,YAAa,CAAC5G,EAAAA,GAAoB0N,EAAAA,WAAAA,YAClChO,MAAO,iBACPiH,YAAa,iKACbyI,cAAe,mEACfC,iBAAkB,yCAClB1Q,OAAQiB,EAAAA,GACR8G,OAAQpH,EAAAA,GACRiQ,oBAAqB,iKACrBzI,YAAa,sFACbC,YAAa,sFACbC,QAAS,IAAIX,KAAK,4BAClBY,QAAS,IAAIZ,KAAK,6BAGdyJ,GAAc,CAClBD,SAGF,QAA4BxP,EAAAA,EAAAA,IAAiB,IACxCyP,GACHxP,OAAQ,gBACRO,MAAMC,GAER,MAAM8D,GAASC,EAAAA,EAAAA,MAEf,SAASgN,EAAWC,GAClBlN,EAAOmN,KAAK,aAAYC,EAAAA,EAAAA,IAAoBF,sBAC9C,CAEA,MAAO,CAAC3T,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,GACpD9F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,mpBAEnBD,EAAG,SAGP4E,EAAAA,EAAAA,IAAakH,EAAAA,EAAU,CACrBrQ,MAAOmQ,GAAKnQ,MACZiH,YAAakJ,GAAKlJ,YAClB3H,IAAK,0BAA0B6Q,GAAK7Q,MACpC4H,YAAaiJ,GAAKjJ,YAClBE,YAAa+I,GAAK/I,YAClBC,YAAa8I,GAAK9I,YAClBC,QAAS6I,GAAK7I,QACdC,QAAS4I,GAAK5I,QACdtI,OAAQkR,GAAKlR,OACb+H,OAAQmJ,GAAKnJ,QACZ,CACD7C,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB1D,EACAsB,GACA9D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,wJACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,oCAAsC,CAC/EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,oCAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,iIAEnBvC,EACAE,EACAC,EACAC,GACA8G,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB9B,KAEFiC,EAAG,IAELhC,EACAC,EACAC,EACAC,GACAxE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,8CACjB7B,GACA6B,EAAAA,EAAAA,IAAiB,4EACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,gBAAkB,CAC3DC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,gBAEnB2E,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBxB,KAEF2B,EAAG,IAEL1B,EACAC,EACAC,EACAC,EACAC,GACA/E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,EAClCiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,oCAAsC,CAC/EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,UAEnBD,EAAG,OAGPC,EAAAA,EAAAA,IAAiB,gCAEnBtB,EACAC,EACAC,EACAC,EACAC,IAEFC,GACArF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,oCAAsC,CAC/EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,UAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,qBACjBhB,GACAgB,EAAAA,EAAAA,IAAiB,gQACjBf,GACAe,EAAAA,EAAAA,IAAiB,OAEnBd,GACAyF,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBT,KAEFY,EAAG,IAELX,EACAC,EACAyM,GACAnH,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBmM,KAEFhM,EAAG,IAELiM,EACAC,EACAC,GACAvH,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBuM,KAEFpM,EAAG,IAELqM,EACAC,EACAC,IACA3H,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB2M,MAEFxM,EAAG,IAELyM,GACAC,GACAC,IACA/H,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB+M,MAEF5M,EAAG,IAEL6M,GACAC,GACAC,GACAC,GACAC,GACAE,GACAC,GACAC,IACA1T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,kEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,gBAAkB,CAC3DC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,qCAEnBtG,EAAAA,EAAAA,GAAoB,OAAQ2T,GAAa,EACvC1I,EAAAA,EAAAA,IAAasJ,EAAAA,EAAc,CACzBC,UAAW,GACXC,WAAY,mBACZC,YAAaT,OAGjBjU,EAAAA,EAAAA,GAAoB,MAAO4T,GAAa,CACtCC,IACA7T,EAAAA,EAAAA,GAAoB,MAAO8T,GAAa,EACtC7I,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOsJ,EAAAA,IAAa,CAC/BC,GAAI,MACJ/Q,MAAO,QACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,EAAG2O,UAAW,EAC9B5J,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOyJ,EAAAA,IAAmB,CACrCF,GAAI,KACJ/Q,MAAO,kGACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB6N,IACA/T,EAAAA,EAAAA,GAAoB,OAAQgU,GAAa,EACvC/I,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO0J,GAAkB,CACpClR,OAAOwI,EAAAA,EAAAA,IAAgB,CAACwI,EAAO,cAAgB,WAAY,sBAC3D,cAAe,QACd,KAAM,EAAG,CAAC,eAGjBxO,EAAG,GACF,OACH4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO2J,EAAAA,IAAkB,CAAEnR,MAAO,cAAgB,CAC7DoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBgP,GACAC,GACAC,GACAC,GACAC,GACAC,MAEFlP,EAAG,OAGPA,EAAG,KAEL4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOsJ,EAAAA,IAAa,CAC/BC,GAAI,MACJ/Q,MAAO,QACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,EAAG2O,UAAW,EAC9B5J,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOyJ,EAAAA,IAAmB,CACrCF,GAAI,KACJ/Q,MAAO,kGACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBsP,IACAxV,EAAAA,EAAAA,GAAoB,OAAQyV,GAAa,EACvCxK,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO0J,GAAkB,CACpClR,OAAOwI,EAAAA,EAAAA,IAAgB,CAACwI,EAAO,cAAgB,WAAY,sBAC3D,cAAe,QACd,KAAM,EAAG,CAAC,eAGjBxO,EAAG,GACF,OACH4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO2J,EAAAA,IAAkB,CAAEnR,MAAO,cAAgB,CAC7DoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBwP,GACAC,GACAC,GACAC,MAEFxP,EAAG,OAGPA,EAAG,KAEL4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOsJ,EAAAA,IAAa,CAC/BC,GAAI,MACJ/Q,MAAO,QACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,EAAG2O,UAAW,EAC9B5J,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOyJ,EAAAA,IAAmB,CACrCF,GAAI,KACJ/Q,MAAO,kGACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB4P,IACA9V,EAAAA,EAAAA,GAAoB,OAAQ+V,GAAa,EACvC9K,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO0J,GAAkB,CACpClR,OAAOwI,EAAAA,EAAAA,IAAgB,CAACwI,EAAO,cAAgB,WAAY,sBAC3D,cAAe,QACd,KAAM,EAAG,CAAC,eAGjBxO,EAAG,GACF,OACH4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO2J,EAAAA,IAAkB,CAAEnR,MAAO,cAAgB,CAC7DoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB8P,GACAC,GACAC,GACAC,GACAC,MAEF/P,EAAG,OAGPA,EAAG,WAKXA,EAAG,GACF,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,YAClH,GAAG,CAER,ICjiBA,MAAMzC,GAAc,GAEpB,S,yPCFA,MAAMpB,GAA0BxC,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,sEAAwE,wVAAyV,GACleC,GAA0B9D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,0BACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,OAC5B,GACEvC,GAA0B/D,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,oBACPsC,IAAK,4DACLC,IAAK,kCACLtE,MAAO,kCACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,EACtCsG,EAAAA,EAAAA,IAAiB,qEACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN7E,MAAO,kCACPuN,IAAK,YACJ,cACU/I,EAAAA,EAAAA,IAAiB,SAE9B,GACErC,GAA0BjE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,kBAAmB,GAC7EkE,GAA0BlE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mUAAoU,GAC7XmE,GAA0BnE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,6BAA8B,GACxFoE,GAA0BpE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,+LACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,mMACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,mBACpCsG,EAAAA,EAAAA,IAAiB,oBAC5B,GACEjC,GAA0BrE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,gCAAiC,GAC3FsE,GAA0BtE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,oEACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,mBACpCsG,EAAAA,EAAAA,IAAiB,+VAC5B,GACE/B,GAA2BvE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,8CAA+C,GAC1GwE,GAA2BxE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6KAA8K,GACxOyE,GAA2BzE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,0HAC/C,GACE0E,GAA2B1E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,iGACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,4DACN0I,IAAK,uBACJ,yBACU/I,EAAAA,EAAAA,IAAiB,QAC5B,GACE3B,GAA2B3E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wEAAyE,GACnI4E,GAA2B5E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,6BACpCsG,EAAAA,EAAAA,IAAiB,yKAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,iBACpCsG,EAAAA,EAAAA,IAAiB,kOAE9B,GACEzB,GAA2B7E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,0BAA2B,GACtF8E,GAA2B9E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,kCAAmC,GAC9F+E,GAA2B/E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,qEACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,eAClCsG,EAAAA,EAAAA,IAAiB,0FACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,kBACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,2BAClCsG,EAAAA,EAAAA,IAAiB,OAC5B,GACEtB,GAA2BhF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,+BACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,2BAClCsG,EAAAA,EAAAA,IAAiB,0MAC5B,GACErB,GAA2BjF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,6IACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,SACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,SAClCsG,EAAAA,EAAAA,IAAiB,uCACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gCAClCsG,EAAAA,EAAAA,IAAiB,OAC5B,GACEpB,GAA2BlF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iQAAkQ,GAC5TmF,GAA2BnF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,oUAAqU,GAC/XoF,GAA2BpF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,eAAgB,GAC3EqF,GAA2BrF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,oOAAqO,GAC/RsF,GAA2BtF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,kFACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,aAClCsG,EAAAA,EAAAA,IAAiB,gMAC5B,GACEf,GAA2BvF,EAAAA,EAAAA,GAAoB,MAAO,KAAM,qFAAwF,GACpJwF,GAA2BxF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,gFACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,mBACpCsG,EAAAA,EAAAA,IAAiB,oBACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,aAClCsG,EAAAA,EAAAA,IAAiB,gBAC5B,GACEb,GAA2BzF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,aAAc,GACzE0F,GAA2B1F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wUAA6U,GACvY2F,GAA2B3F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,2EACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,yEACN0I,IAAK,uBACJ,0BACU/I,EAAAA,EAAAA,IAAiB,yCAC5B,GACE8L,GAA2BpS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,4FAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,mFACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,QAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,gHAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,sHAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,uEAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,qKACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,mBACpCsG,EAAAA,EAAAA,IAAiB,iCAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,8KACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,mBACpCsG,EAAAA,EAAAA,IAAiB,+FAE9B,GACE+L,GAA2BrS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,qCAAsC,GACjGsS,GAA2BtS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qJAAsJ,GAChNuS,GAA2BvS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,yJAA0J,GACpNwS,GAA2BxS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,wIACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,mBACpCsG,EAAAA,EAAAA,IAAiB,8DAC5B,GACEmM,GAA2BzS,EAAAA,EAAAA,GAAoB,MAAO,KAAM,gnBAAinB,GAC7qB0S,GAA2B1S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,SACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,mBACpCsG,EAAAA,EAAAA,IAAiB,6HAC5B,GACEqM,GAA2B3S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,iLACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,aAClCsG,EAAAA,EAAAA,IAAiB,6BACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,eAClCsG,EAAAA,EAAAA,IAAiB,sCACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,eAClCsG,EAAAA,EAAAA,IAAiB,uEACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,mCAClCsG,EAAAA,EAAAA,IAAiB,OAC5B,GACEsM,IAA2B5S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,sGAAuG,GACjK6S,IAA2B7S,EAAAA,EAAAA,GAAoB,MAAO,KAAM,kdAAud,GACnhB8S,IAA2B9S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4EAA6E,GACvI+S,IAA2B/S,EAAAA,EAAAA,GAAoB,MAAO,KAAM,sDAAuD,GACnHgT,GAAc,CAClBnP,MAAO,uCACPiL,aAAc,OAEVmE,IAA2BjT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,mCAAoC,GAC/FkT,IAA2BlT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iGAAkG,GAC5JmT,IAA2BnT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,uCACpCsG,EAAAA,EAAAA,IAAiB,6HAC5B,GACE8M,IAA2BpT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gIAAiI,GAC3LqT,GAAc,CAAExP,MAAO,gDACvByP,IAA2BtT,EAAAA,EAAAA,GAAoB,KAAM,CAAE6D,MAAO,cAAgB,qBAAsB,GACpG2P,GAAc,CAAE3P,MAAO,kEACvB4P,IAA2BzT,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,qCAAuC,sDAAuD,GAC9J6P,GAAc,CAAE7P,MAAO,8BACvB8P,IAA2B3T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,oPAC/C,GACE4T,IAA2B5T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wPAAyP,GACnT6T,IAA2B7T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2RAA4R,GAoB/UiS,GAAiB,CAC5BP,IAAK,oBACLtQ,IAAK,oCACL4H,YAAa,CAAC5G,EAAAA,GAAoBE,EAAAA,IAClCR,MAAO,0BACPiH,YAAa,8JACb4I,oBAAqB,8JACrBH,cAAe,kEACfC,iBAAkB,kBAClB1Q,OAAQiB,EAAAA,GACR8G,OAAQpH,EAAAA,GACRwH,YAAa,yFACbC,YAAa,yFACbC,QAAS,IAAIX,KAAK,4BAClBY,QAAS,IAAIZ,KAAK,6BAGdyJ,GAAc,CAClBD,SAGF,QAA4BxP,EAAAA,EAAAA,IAAiB,IACxCyP,GACHxP,OAAQ,oBACRO,MAAMC,GAER,MAAM8D,GAASC,EAAAA,EAAAA,MAEf,SAASgN,EAAWC,GAClBlN,EAAOmN,KAAK,aAAYC,EAAAA,EAAAA,IAAoBF,sBAC9C,CAEA,MAAO,CAAC3T,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,GACpD9F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,kpBAEnBD,EAAG,SAGP4E,EAAAA,EAAAA,IAAakH,EAAAA,EAAU,CACrBrQ,MAAOmQ,GAAKnQ,MACZiH,YAAakJ,GAAKlJ,YAClB3H,IAAK,0BAA0B6Q,GAAK7Q,MACpC4H,YAAaiJ,GAAKjJ,YAClBE,YAAa+I,GAAK/I,YAClBC,YAAa8I,GAAK9I,YAClBC,QAAS6I,GAAK7I,QACdC,QAAS4I,GAAK5I,QACdtI,OAAQkR,GAAKlR,OACb+H,OAAQmJ,GAAKnJ,QACZ,CACD7C,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB1D,EACAsB,EACAC,EACAE,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACAvE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,kLACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,sCAAwC,CACjFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,8EAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,gBAEnB9B,GACAyG,EAAAA,EAAAA,IAAaqJ,EAAAA,EAAS,CACpB7H,KAAM,OACN3K,MAAO,2CACP4K,QAAS,MACR,CACDzG,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBzB,EACAC,EACAC,EACAC,KAEFyB,EAAG,IAELxB,EACAC,GACA9E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,wDACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,qCAAuC,CAChFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,mBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,8GAEnBvB,EACAC,EACAC,GACAgG,EAAAA,EAAAA,IAAaqJ,EAAAA,EAAS,CACpB7H,KAAM,OACN3K,MAAO,sCACP4K,QAAS,MACR,CACDzG,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBlG,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,EAClCsG,EAAAA,EAAAA,IAAiB,iEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,qCAAuC,CAChFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,mBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,uBAGrBpB,EACAC,KAEFkB,EAAG,IAELjB,EACAC,EACAC,GACA2F,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBX,KAEFc,EAAG,IAELb,EACAC,EACAC,EACAC,EACAyM,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,IACA3H,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB2M,MAEFxM,EAAG,IAELyM,IACA7H,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB6M,MAEF1M,EAAG,KAELrG,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,wFACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,gBAAkB,CAC3DC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,qCAEnBtG,EAAAA,EAAAA,GAAoB,OAAQgT,GAAa,EACvC/H,EAAAA,EAAAA,IAAasJ,EAAAA,EAAc,CACzBC,UAAW,GACXC,WAAY,mBACZC,YAAaT,MAGjBhB,GACAC,IACAlT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,EAClCiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,oCAAsC,CAC/EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,oCAEnBD,EAAG,OAGPC,EAAAA,EAAAA,IAAiB,iFAEnB6M,IACAnT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,EAClCiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,sCAAwC,CACjFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,8EAEnBD,EAAG,OAGPC,EAAAA,EAAAA,IAAiB,yPAGrB8M,IACApT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,mCACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,iDAAmD,CAC5FC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,2DAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,QAEnBtG,EAAAA,EAAAA,GAAoB,MAAOqT,GAAa,CACtCC,IACAtT,EAAAA,EAAAA,GAAoB,MAAOwT,GAAa,EACtCvI,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOsJ,EAAAA,IAAa,CAC/BC,GAAI,MACJ/Q,MAAO,QACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,EAAG2O,UAAW,EAC9B5J,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOyJ,EAAAA,IAAmB,CACrCF,GAAI,KACJ/Q,MAAO,kGACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBuN,IACAzT,EAAAA,EAAAA,GAAoB,OAAQ0T,GAAa,EACvCzI,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO0J,GAAkB,CACpClR,OAAOwI,EAAAA,EAAAA,IAAgB,CAACwI,EAAO,cAAgB,WAAY,sBAC3D,cAAe,QACd,KAAM,EAAG,CAAC,eAGjBxO,EAAG,GACF,OACH4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO2J,EAAAA,IAAkB,CAAEnR,MAAO,cAAgB,CAC7DoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtByN,GACAC,GACAC,MAEFxN,EAAG,OAGPA,EAAG,WAKXA,EAAG,GACF,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,YAClH,GAAG,CAER,IC3eA,MAAMzC,GAAc,GAEpB,S,uMCFA,MAAMpB,EAAa,CAAEqB,MAAO,sEACtBC,GAA0B9D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,sDAAuD,GAChH+D,GAA0B/D,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,uIAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,uFAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,mFAC3C,GACEiE,GAA0BjE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,2BACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,OAC5B,GACEpC,GAA0BlE,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,oBACPsC,IAAK,iEACLC,IAAK,wCACLtE,MAAO,wCACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,EACtCsG,EAAAA,EAAAA,IAAiB,2EACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN7E,MAAO,kCACPuN,IAAK,YACJ,cACU/I,EAAAA,EAAAA,IAAiB,SAE9B,GACEnC,GAA0BnE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,mBAAoB,GAC9EoE,GAA0BpE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,+NAAgO,GACzRqE,GAA0BrE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,mFAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,+GAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,4EAC3C,GACEsE,GAA0BtE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6MAA8M,GACvQuE,GAA2BvE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uGAAwG,GAClKwE,GAA2BxE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,oPAAqP,GAC/SyE,GAA2BzE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,4FAC/C,GACE0E,GAA2B1E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0JAA2J,GACrN2E,GAA2B3E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4OAA6O,GACvS4E,GAA2B5E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,yLAA0L,GACpP6E,GAA2B7E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,uBAAwB,GACnF8E,GAA2B9E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,8OACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,iBACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,uBAClCsG,EAAAA,EAAAA,IAAiB,OAC5B,GACEvB,GAA2B/E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0LAA2L,GACrPgF,GAA2BhF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,+DACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,yBAClCsG,EAAAA,EAAAA,IAAiB,oPAC5B,GACErB,GAA2BjF,EAAAA,EAAAA,GAAoB,MAAO,KAAM,gGAAiG,GAC7JkF,GAA2BlF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,cAAe,GAC1EmF,GAA2BnF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,kYAA2Y,GACrcoF,GAA2BpF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,2EACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,2EACN0I,IAAK,uBACJ,2BACU/I,EAAAA,EAAAA,IAAiB,kCAC5B,GACEjB,GAA2BrF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,8FAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,gHAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,SACpCsG,EAAAA,EAAAA,IAAiB,yIAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,SACpCsG,EAAAA,EAAAA,IAAiB,uGACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,QAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,UACpCsG,EAAAA,EAAAA,IAAiB,sJAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,UACpCsG,EAAAA,EAAAA,IAAiB,+FAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,UACpCsG,EAAAA,EAAAA,IAAiB,sHAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,SACpCsG,EAAAA,EAAAA,IAAiB,8EAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,WACpCsG,EAAAA,EAAAA,IAAiB,gGAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,YACpCsG,EAAAA,EAAAA,IAAiB,qGAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,SACpCsG,EAAAA,EAAAA,IAAiB,4GAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,SACpCsG,EAAAA,EAAAA,IAAiB,6EAE9B,GACEhB,GAA2BtF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,kBAAmB,GAC9EuF,GAA2BvF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0eAAuf,GACjjBwF,GAA2BxF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gRAAyR,GACnVyF,GAA2BzF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,+IAAsJ,GAChN0F,GAA2B1F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qJAA4J,GACtN2F,GAA2B3F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,yIAC/C,GACEoS,GAA2BpS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2OAAgP,GAC1SqS,GAA2BrS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6LAA8L,GACxPsS,GAA2BtS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,yBACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,2BACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,mIAC5B,GACEiM,GAA2BvS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,kBAEpCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,uBAEpCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,4BAE/C,GACEwS,GAA2BxS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uKAAwK,GAClOyS,GAA2BzS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,aAAc,GACzE0S,GAA2B1S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,+QAAkR,GAC5U2S,GAA2B3S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8PAA+P,GACzT4S,GAA2B5S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,oeAA2e,GACriB6S,GAA2B7S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,8TACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,4DACN0I,IAAK,uBACJ,yBACU/I,EAAAA,EAAAA,IAAiB,mBAC5B,GACEwM,GAA2B9S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,0CAA6C,GACxG+S,GAA2B/S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8IAA+I,GACzMgT,GAA2BhT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iLAAkL,GAC5OiT,IAA2BjT,EAAAA,EAAAA,GAAoB,MAAO,KAAM,iEAAkE,GAC9HkT,IAA2BlT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8MAA+M,GACzQmT,IAA2BnT,EAAAA,EAAAA,GAAoB,MAAO,KAAM,sEAAuE,GACnIoT,IAA2BpT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6IAA8I,GACxMqT,IAA2BrT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,kGAAmG,GAC7JsT,IAA2BtT,EAAAA,EAAAA,GAAoB,MAAO,KAAM,0DAA2D,GACvHwT,IAA2BxT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yCAA0C,GACrGyT,IAA2BzT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,sQAAyQ,GACnU0T,IAA2B1T,EAAAA,EAAAA,GAAoB,MAAO,KAAM,6BAA8B,GAC1F2T,IAA2B3T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0EAA2E,GACrI4T,IAA2B5T,EAAAA,EAAAA,GAAoB,MAAO,KAAM,wCAAyC,GACrG6T,GAAc,CAClBhQ,MAAO,uCACPiL,aAAc,OAEVgF,IAA2B9T,EAAAA,EAAAA,GAAoB,KAAM,KAAM,+BAAgC,GAC3F+T,IAA2B/T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,yNAA0N,GACpRgU,IAA2BhU,EAAAA,EAAAA,GAAoB,IAAK,KAAM,kQAAuQ,GAa1TiS,GAAiB,CAC5BP,IAAK,oBACLtQ,IAAK,qCACL4H,YAAa,CAAC5G,EAAAA,GAAoBE,EAAAA,IAClCR,MAAO,2BACPiH,YAAa,kJACb4I,oBAAqB,oNACrBH,cAAe,uEACfC,iBAAkB,2BAClB1Q,OAAQiB,EAAAA,GACR8G,OAAQpH,EAAAA,GACRwH,YAAa,kGACbC,YAAa,kGACbC,QAAS,IAAIX,KAAK,4BAClBY,QAAS,IAAIZ,KAAK,6BAGdyJ,GAAc,CAClBD,SAGF,QAA4BxP,EAAAA,EAAAA,IAAiB,IACxCyP,GACHxP,OAAQ,qBACRO,MAAMC,GAER,MAAM8D,GAASC,EAAAA,EAAAA,MAEf,SAASgN,EAAWC,GAClBlN,EAAOmN,KAAK,aAAYC,EAAAA,EAAAA,IAAoBF,sBAC9C,CAEA,MAAO,CAAC3T,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,GACpD9F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,upBAEnBD,EAAG,SAGP4E,EAAAA,EAAAA,IAAakH,EAAAA,EAAU,CACrBrQ,MAAOmQ,GAAKnQ,MACZiH,YAAakJ,GAAKlJ,YAClB3H,IAAK,0BAA0B6Q,GAAK7Q,MACpC4H,YAAaiJ,GAAKjJ,YAClBE,YAAa+I,GAAK/I,YAClBC,YAAa8I,GAAK9I,YAClBC,QAAS6I,GAAK7I,QACdC,QAAS4I,GAAK5I,QACdtI,OAAQkR,GAAKlR,OACb+H,OAAQmJ,GAAKnJ,QACZ,CACD7C,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBlG,EAAAA,EAAAA,GAAoB,SAAUwC,EAAY,EACxC8D,EAAAA,EAAAA,IAAiB,oJACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,oCAAsC,CAC/EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,oCAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,UACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,qCAAuC,CAChFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,wCAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,+DAEnBxC,EACAC,EACAE,EACAC,EACAC,GACAnE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,2DACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,mCAAqC,CAC9EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,sLAEnBlC,EACAC,EACAC,EACAC,EACAC,GACAyG,EAAAA,EAAAA,IAAaqJ,EAAAA,EAAS,CACpB7H,KAAM,OACN3K,MAAO,2CACP4K,QAAS,MACR,CACDzG,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBzB,EACAC,EACAC,EACAC,KAEFyB,EAAG,IAELxB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACAuF,EAAAA,EAAAA,IAAaqJ,EAAAA,EAAS,CACpB7H,KAAM,OACN3K,MAAO,+BACP4K,QAAS,MACR,CACDzG,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBP,EACAyM,EACAC,EACAC,EACAC,EACAC,KAEFnM,EAAG,IAELoM,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAE,GACAC,GACAC,GACAC,GACAC,IACA5T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,qEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,gBAAkB,CAC3DC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,oCAEnBtG,EAAAA,EAAAA,GAAoB,OAAQ6T,GAAa,EACvC5I,EAAAA,EAAAA,IAAasJ,EAAAA,EAAc,CACzBC,UAAW,GACXC,WAAY,kBACZ4B,QAAS,UACT3B,YAAaT,MAGjBH,IACA9T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,4EACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,oCAAsC,CAC/EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,UAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,SACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,qCAAuC,CAChFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,WAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,cAEnByN,GACAC,IACAhU,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,mCACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,iDAAmD,CAC5FC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,2DAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,UAGrBD,EAAG,GACF,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,YAClH,GAAG,CAER,IC5ZA,MAAMzC,GAAc,GAEpB,S,gNCFA,MAAMpB,EAAa,CAAEqB,MAAO,sEACtBC,GAA0B9D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8XAA+X,GACxb+D,GAA0B/D,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,oBACPsC,IAAK,0EACLC,IAAK,wBACLtE,MAAO,wBACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,EACtCsG,EAAAA,EAAAA,IAAiB,2DACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN7E,MAAO,kCACPuN,IAAK,YACJ,cACU/I,EAAAA,EAAAA,IAAiB,SAE9B,GACErC,GAA0BjE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,iHAC/C,GACEkE,GAA0BlE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,8GACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,uBAClCsG,EAAAA,EAAAA,IAAiB,oDACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,qDACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,4CAC5B,GACEnC,GAA0BnE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,wMACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,4DACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,2BAClCsG,EAAAA,EAAAA,IAAiB,mFACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,uBAClCsG,EAAAA,EAAAA,IAAiB,UACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,kCAClCsG,EAAAA,EAAAA,IAAiB,OAC5B,GACElC,GAA0BpE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4MAA6M,GACtQqE,GAA0BrE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,gCAAqC,GAC/FsE,GAA0BtE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iJAAsJ,GAC/MuE,GAA2BvE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2QAA4Q,GACtUwE,GAA2BxE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,yGACpCsG,EAAAA,EAAAA,IAAiB,2JAC5B,GACE7B,GAA2BzE,EAAAA,EAAAA,GAAoB,MAAO,KAAM,iMAAkM,GAC9P0E,GAA2B1E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oCAA2C,GACtG2E,GAA2B3E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uMAA8M,GACxQ4E,GAA2B5E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0HAA2H,GACrL6E,GAA2B7E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,WACpCsG,EAAAA,EAAAA,IAAiB,yHAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,iBACpCsG,EAAAA,EAAAA,IAAiB,qJAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,aACpCsG,EAAAA,EAAAA,IAAiB,0DAE9B,GACExB,GAA2B9E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iQAA4Q,GACtU+E,GAA2B/E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,uBAA0B,GACrFgF,GAA2BhF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8JAAgK,GAC1NiF,GAA2BjF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gdAAyd,GACnhBkF,GAA2BlF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2GAA8G,GACxKmF,GAA2BnF,EAAAA,EAAAA,GAAoB,MAAO,KAAM,+LAAgM,GAC5PoF,GAA2BpF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,wBAA2B,GACtFqF,GAA2BrF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qIAA0I,GACpMsF,GAA2BtF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gWAAqW,GAC/ZuF,GAA2BvF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8HAAqI,GAC/LwF,GAA2BxF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,wBAA2B,GACtFyF,GAA2BzF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qJAA0J,GACpN0F,GAA2B1F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qIAA0I,GACpM2F,GAA2B3F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,+MAAoN,GAC9QoS,GAA2BpS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8HAAqI,GAC/LqS,GAA2BrS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,mCAAwC,GACnGsS,GAA2BtS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mMAA0M,GACpQuS,GAA2BvS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2PAA6P,GACvTwS,GAA2BxS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4JAA+J,GACzNyS,GAA2BzS,EAAAA,EAAAA,GAAoB,MAAO,KAAM,qOAAsO,GAClS0S,GAA2B1S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,wBAA2B,GACtF2S,GAA2B3S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,yHAA8H,GACxL4S,GAA2B5S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,yEAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,mFAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,mFAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,6EAE9B,GACEuM,GAA2B7S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qIAAsI,GAChM8S,GAA2B9S,EAAAA,EAAAA,GAAoB,MAAO,KAAM,mNAAoN,GAChR+S,GAA2B/S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,wBAA2B,GACtFgT,IAA2BhT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,yKACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,2DAC5B,GACE2M,IAA2BjT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uGAAwG,GAClKkT,IAA2BlT,EAAAA,EAAAA,GAAoB,MAAO,KAAM,oMAAqM,GACjQmT,IAA2BnT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,wBAA2B,GACtFoT,IAA2BpT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mIAAsI,GAChMqT,IAA2BrT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gMAAiM,GAC3PsT,IAA2BtT,EAAAA,EAAAA,GAAoB,MAAO,KAAM,iNAAkN,GAC9QwT,IAA2BxT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yBAA4B,GACvFyT,IAA2BzT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8HAA+H,GACzL0T,IAA2B1T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4VAA+V,GACzZ2T,IAA2B3T,EAAAA,EAAAA,GAAoB,MAAO,KAAM,mMAAoM,GAChQ4T,IAA2B5T,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yCAA0C,GACrG6T,IAA2B7T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,sQAAyQ,GACnU8T,IAA2B9T,EAAAA,EAAAA,GAAoB,MAAO,KAAM,6BAA8B,GAC1F+T,IAA2B/T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0EAA2E,GACrIgU,IAA2BhU,EAAAA,EAAAA,GAAoB,MAAO,KAAM,wCAAyC,GACrGkV,GAAc,CAClBrR,MAAO,uCACPiL,aAAc,OAeHmD,GAAiB,CAC5BP,IAAK,oBACLtQ,IAAK,wCACL4H,YAAa,CAAC5G,EAAAA,GAAoBE,EAAAA,IAClCR,MAAO,6BACPiH,YAAa,iKACb4I,oBAAqB,iKACrBH,cAAe,gFACfC,iBAAkB,6BAClB1Q,OAAQiB,EAAAA,GACR8G,OAAQpH,EAAAA,GACRwH,YAAa,kGACbC,YAAa,wGACbC,QAAS,IAAIX,KAAK,4BAClBY,QAAS,IAAIZ,KAAK,6BAGdyJ,GAAc,CAClBD,SAGF,QAA4BxP,EAAAA,EAAAA,IAAiB,IACxCyP,GACHxP,OAAQ,sCACRO,MAAMC,GAER,MAAM8D,GAASC,EAAAA,EAAAA,MAEf,SAASgN,EAAWC,GAClBlN,EAAOmN,KAAK,aAAYC,EAAAA,EAAAA,IAAoBF,sBAC9C,CAEA,MAAO,CAAC3T,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,GACpD9F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,gqBAEnBD,EAAG,SAGP4E,EAAAA,EAAAA,IAAakH,EAAAA,EAAU,CACrBrQ,MAAOmQ,GAAKnQ,MACZiH,YAAakJ,GAAKlJ,YAClB3H,IAAK,0BAA0B6Q,GAAK7Q,MACpC4H,YAAaiJ,GAAKjJ,YAClBE,YAAa+I,GAAK/I,YAClBC,YAAa8I,GAAK9I,YAClBC,QAAS6I,GAAK7I,QACdC,QAAS4I,GAAK5I,QACdtI,OAAQkR,GAAKlR,OACb+H,OAAQmJ,GAAKnJ,QACZ,CACD7C,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBlG,EAAAA,EAAAA,GAAoB,SAAUwC,EAAY,EACxC8D,EAAAA,EAAAA,IAAiB,sEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,sCAAwC,CACjFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,YAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,qOAEnBxC,EACAC,GACAkH,EAAAA,EAAAA,IAAaqJ,EAAAA,EAAS,CACpB7H,KAAM,OACN3K,MAAO,+BACP4K,QAAS,MACR,CACDzG,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBjC,EACAC,EACAC,EACAC,KAEFiC,EAAG,IAELhC,EACAC,EACAC,EACAC,GACAyG,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,CAAE/G,OAAQ,QAAU,CAC1CrH,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBzB,KAEF4B,EAAG,IAEL3B,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACA+F,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,CAAE/G,OAAQ,QAAU,CAC1CrH,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBf,KAEFkB,EAAG,IAELjB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAyM,EACAC,GACArS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,4BACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,sCAAwC,CACjFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,oBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,6LAEnBgM,EACAC,EACAC,GACAvH,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,CAAE/G,OAAQ,QAAU,CAC1CrH,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBuM,KAEFpM,EAAG,IAELqM,EACAC,EACAC,EACAC,GACA5H,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,CAAE/G,OAAQ,QAAU,CAC1CrH,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB4M,KAEFzM,EAAG,IAEL0M,EACAC,GACAC,IACAhI,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,CAAE/G,OAAQ,QAAU,CAC1CrH,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBgN,MAEF7M,EAAG,IAEL8M,GACAC,GACAC,IACApI,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,CAAE/G,OAAQ,QAAU,CAC1CrH,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBoN,MAEFjN,EAAG,IAELmN,GACAC,GACAC,IACA1T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,gKACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,sCAAwC,CACjFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,oBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,QAEnB2E,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,CAAE/G,OAAQ,QAAU,CAC1CrH,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtByN,MAEFtN,EAAG,IAELuN,GACAC,GACAC,GACAC,GACAC,IACAhU,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,qEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,gBAAkB,CAC3DC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,oCAEnBtG,EAAAA,EAAAA,GAAoB,OAAQkV,GAAa,EACvCjK,EAAAA,EAAAA,IAAasJ,EAAAA,EAAc,CACzBC,UAAW,GACXC,WAAY,kBACZ4B,QAAS,UACT3B,YAAaT,SAInB5N,EAAG,GACF,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,YAClH,GAAG,CAER,IC5WA,MAAMzC,GAAc,GAEpB,S,yPCFA,MAAMpB,GAA0BxC,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,sEAAwE,kMAAmM,GAC5UC,GAA0B9D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,uVACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,+BAClCsG,EAAAA,EAAAA,IAAiB,6CAC5B,GACEvC,GAA0B/D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,+NAAgO,GACzRiE,GAA0BjE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,yBACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,OAC5B,GACEpC,GAA0BlE,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,oBACPsC,IAAK,kEACLC,IAAK,gEACLtE,MAAO,gEACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,EACtCsG,EAAAA,EAAAA,IAAiB,mGACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN7E,MAAO,kCACPuN,IAAK,YACJ,cACU/I,EAAAA,EAAAA,IAAiB,SAE9B,GACEnC,GAA0BnE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,iBAAkB,GAC5EoE,GAA0BpE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6RAA8R,GACvVqE,GAA0BrE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,uLACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,2EAC5B,GACEhC,GAA0BtE,EAAAA,EAAAA,GAAoB,MAAO,KAAM,oDAAuD,GAClHuE,GAA2BvE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,0IAC/C,GACEwE,GAA2BxE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0QAA2Q,GACrUyE,GAA2BzE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,oDAAqD,GAC/G0E,GAA2B1E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,8KAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,8GAC3C,GACE2E,GAA2B3E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,qBAAsB,GACjF4E,GAA2B5E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,sCACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,WAClCsG,EAAAA,EAAAA,IAAiB,+EAC5B,GACEzB,GAA2B7E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iRAAkR,GAC5U8E,GAA2B9E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,4CACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,WACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,0DAC5B,GACEvB,GAA2B/E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2NAA4N,GACtRgF,GAA2BhF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,kBAAmB,GAC9EiF,GAA2BjF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uDAAwD,GAClHkF,GAA2BlF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,iGACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,MAClCsG,EAAAA,EAAAA,IAAiB,mBAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,4EAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,iHAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,+GAE9B,GACEnB,GAA2BnF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gLAAiL,GAC3OoF,GAA2BpF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2KAA4K,GACtOqF,GAA2BrF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,kBAAmB,GAC9EsF,GAA2BtF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wEAAyE,GACnIuF,GAA2BvF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,6CAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,6CAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,OACpCsG,EAAAA,EAAAA,IAAiB,qDAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,MACpCsG,EAAAA,EAAAA,IAAiB,sCAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,WACpCsG,EAAAA,EAAAA,IAAiB,wDACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,MAClCsG,EAAAA,EAAAA,IAAiB,kBAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,YACpCsG,EAAAA,EAAAA,IAAiB,4DAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,qEAE9B,GACEd,GAA2BxF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,wIACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,MAClCsG,EAAAA,EAAAA,IAAiB,8EACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,MAClCsG,EAAAA,EAAAA,IAAiB,wDAC5B,GACEb,GAA2BzF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,8BAA+B,GAC1F0F,GAA2B1F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,mMACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,iBAClCsG,EAAAA,EAAAA,IAAiB,0BACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,oEACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,qBAClCsG,EAAAA,EAAAA,IAAiB,0BACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,uBAClCsG,EAAAA,EAAAA,IAAiB,OAC5B,GACEX,GAA2B3F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8GAA+G,GACzKoS,GAA2BpS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2FAA4F,GACtJqS,GAA2BrS,EAAAA,EAAAA,GAAoB,MAAO,KAAM,wEAA2E,GACvIsS,GAA2BtS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oBAAqB,GAChFuS,GAA2BvS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8GAA+G,GACzKwS,GAA2BxS,EAAAA,EAAAA,GAAoB,MAAO,KAAM,0CAA6C,GACzGyS,GAA2BzS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4FAA6F,GACvJ0S,GAA2B1S,EAAAA,EAAAA,GAAoB,MAAO,KAAM,iEAAoE,GAChI2S,GAA2B3S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,mBAAoB,GAC/E4S,IAA2B5S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,oFACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,4BAClCsG,EAAAA,EAAAA,IAAiB,+BAC5B,GACEuM,IAA2B7S,EAAAA,EAAAA,GAAoB,MAAO,KAAM,iEAAoE,GAChI8S,IAA2B9S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,gCACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,kBAClCsG,EAAAA,EAAAA,IAAiB,yHAC5B,GACEyM,IAA2B/S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,wBAAyB,GACpFgT,IAA2BhT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qFAAsF,GAChJiT,IAA2BjT,EAAAA,EAAAA,GAAoB,MAAO,KAAM,oEAAuE,GACnIkT,IAA2BlT,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,yBAA0B,GACvFmT,IAA2BnT,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,UAAW,GACxEoT,IAA2BpT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yBAA0B,GACrFqT,IAA2BrT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iSAAkS,GAC5VsT,IAA2BtT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,+EACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,2BAClCsG,EAAAA,EAAAA,IAAiB,OAC5B,GACEkN,IAA2BxT,EAAAA,EAAAA,GAAoB,MAAO,KAAM,sEAAyE,GACrIyT,IAA2BzT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,qBAAsB,GACjF0T,IAA2B1T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wGAAyG,GACnK2T,IAA2B3T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,2PACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,SAClCsG,EAAAA,EAAAA,IAAiB,OAC5B,GACEsN,IAA2B5T,EAAAA,EAAAA,GAAoB,KAAM,KAAM,iBAAkB,GAC7E6T,IAA2B7T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iSAAkS,GAC5V8T,IAA2B9T,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yBAA0B,GACrF+T,IAA2B/T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4MAA6M,GACvQgU,IAA2BhU,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,mCACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,0DACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,kDACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,6DACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,aAClCsG,EAAAA,EAAAA,IAAiB,gBAC5B,GACE4O,IAA2BlV,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,yFACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,iBAC5B,GACE6O,IAA2BnV,EAAAA,EAAAA,GAAoB,MAAO,KAAM,kEAAqE,GACjIoV,IAA2BpV,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,gBACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,aAClCsG,EAAAA,EAAAA,IAAiB,4BACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,YAClCsG,EAAAA,EAAAA,IAAiB,6CAC5B,GACE+O,IAA2BrV,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oBAAqB,GAChFsV,IAA2BtV,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,uCACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,wEACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,gPAC5B,GACEiP,IAA2BvV,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,uBACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,gBAC5B,GACEkP,IAA2BxV,EAAAA,EAAAA,GAAoB,MAAO,KAAM,mFAAsF,GAClJyV,IAA2BzV,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,+EACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,4BAClCsG,EAAAA,EAAAA,IAAiB,OAC5B,GACEoP,IAA2B1V,EAAAA,EAAAA,GAAoB,MAAO,KAAM,mGAAsG,GAClK2V,IAA2B3V,EAAAA,EAAAA,GAAoB,KAAM,KAAM,cAAe,GAC1E4V,IAA2B5V,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,yDACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,0DACN0I,IAAK,uBACJ,uBACU/I,EAAAA,EAAAA,IAAiB,qBACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,WACpCsG,EAAAA,EAAAA,IAAiB,OAC5B,GACEuP,IAA2B7V,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,4MACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,SAClCsG,EAAAA,EAAAA,IAAiB,wEAC5B,GACEwP,IAA2B9V,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,SACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,SAClCsG,EAAAA,EAAAA,IAAiB,0OAC5B,GACEyP,IAA2B/V,EAAAA,EAAAA,GAAoB,MAAO,KAAM,sFAAuF,GACnJgW,IAA2BhW,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2FAA4F,GACtJiW,IAA2BjW,EAAAA,EAAAA,GAAoB,MAAO,KAAM,mEAAsE,GAClIkW,IAA2BlW,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,4CAC/C,GACEmW,IAA2BnW,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,8CACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,4DACN0I,IAAK,uBACJ,yBACU/I,EAAAA,EAAAA,IAAiB,OAC5B,GACE8P,IAA2BpW,EAAAA,EAAAA,GAAoB,KAAM,KAAM,gCAAiC,GAC5FsW,IAA2BtW,EAAAA,EAAAA,GAAoB,IAAK,KAAM,yHAA0H,GACpLuW,IAA2BvW,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,eACpCsG,EAAAA,EAAAA,IAAiB,kFAC5B,GACEkQ,IAA2BxW,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,eACpCsG,EAAAA,EAAAA,IAAiB,mHAC5B,GACEmQ,IAA2BzW,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,sBACpCsG,EAAAA,EAAAA,IAAiB,OACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,8DACN0I,IAAK,uBACJ,2BACU/I,EAAAA,EAAAA,IAAiB,0PAC5B,GACEoQ,IAA2B1W,EAAAA,EAAAA,GAAoB,SAAU,KAAM,gBAAiB,GAChF2W,IAA2B3W,EAAAA,EAAAA,GAAoB,KAAM,KAAM,wBAAyB,GACpF4W,IAA2B5W,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,yNACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,eAClCsG,EAAAA,EAAAA,IAAiB,UAC5B,GACEuQ,IAA2B7W,EAAAA,EAAAA,GAAoB,MAAO,KAAM,kHAAqH,GACjL8W,IAA2B9W,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,6DACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,YAClCsG,EAAAA,EAAAA,IAAiB,sKACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,YAClCsG,EAAAA,EAAAA,IAAiB,kDACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,SAClCsG,EAAAA,EAAAA,IAAiB,2BACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,SAClCsG,EAAAA,EAAAA,IAAiB,OAC5B,GACEyQ,IAA2B/W,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,sCACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,oFAC5B,GACE0Q,IAA2BhX,EAAAA,EAAAA,GAAoB,MAAO,KAAM,2tBAAkuB,GAC9xBiX,IAA2BjX,EAAAA,EAAAA,GAAoB,IAAK,KAAM,kNAAmN,GAC7QkX,IAA2BlX,EAAAA,EAAAA,GAAoB,KAAM,KAAM,uCAAwC,GACnGmX,IAA2BnX,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,mPACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,WAClCsG,EAAAA,EAAAA,IAAiB,OAC5B,GACE8Q,IAA2BpX,EAAAA,EAAAA,GAAoB,MAAO,KAAM,sBAAuB,GACnFqX,IAA2BrX,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0EAA2E,GACrIsX,IAA2BtX,EAAAA,EAAAA,GAAoB,MAAO,KAAM,iCAAkC,GAC9FuX,GAAc,CAClB1T,MAAO,uCACPiL,aAAc,OAEV0I,IAA2BxX,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oCAAqC,GAChGyX,IAA2BzX,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gGAAiG,GAC3J0X,IAA2B1X,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,kCACpCsG,EAAAA,EAAAA,IAAiB,iFAC5B,GACEqR,IAA2B3X,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gIAAiI,GAC3L4X,GAAe,CAAE/T,MAAO,gDACxBgU,IAA4B7X,EAAAA,EAAAA,GAAoB,KAAM,CAAE6D,MAAO,cAAgB,qBAAsB,GACrGiU,GAAe,CAAEjU,MAAO,kEACxBkU,IAA4B/X,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,qCAAuC,gDAAiD,GACzJmU,GAAe,CAAEnU,MAAO,8BACxBoU,IAA4BjY,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,gIAC/C,GACEkY,IAA4BlY,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAClDsG,EAAAA,EAAAA,IAAiB,QACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN0I,IAAK,uBACJ,YACU/I,EAAAA,EAAAA,IAAiB,qKAC5B,GACE6R,IAA4BnY,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAClDsG,EAAAA,EAAAA,IAAiB,cACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,iTAC5B,GACE8R,IAA4BpY,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,qCAAuC,iEAAkE,GAC1KwU,GAAe,CAAExU,MAAO,8BACxByU,IAA4BtY,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,6BAA+B,kGACjF,GACE0U,IAA4BvY,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,qCAAuC,+CAAgD,GACxJ2U,GAAe,CAAE3U,MAAO,8BACxB4U,IAA4BzY,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,6BAA+B,qDACjF,GACE6U,IAA4B1Y,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8LAA+L,GAC1P2Y,IAA4B3Y,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,qCAAuC,gCAAiC,GACzI+U,GAAe,CAAE/U,MAAO,8BACxBgV,IAA4B7Y,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,6BAA+B,kDACjF,GACEiV,IAA4B9Y,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAClDsG,EAAAA,EAAAA,IAAiB,WACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,SAClCsG,EAAAA,EAAAA,IAAiB,wUAC5B,GACEyS,IAA4B/Y,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAClDsG,EAAAA,EAAAA,IAAiB,uBACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,SAClCsG,EAAAA,EAAAA,IAAiB,sDAC5B,GAoBS2L,GAAiB,CAC5BP,IAAK,oBACLtQ,IAAK,mCACL4H,YAAa,CAAC5G,EAAAA,GAAoBE,EAAAA,IAClCR,MAAO,yBACPiH,YAAa,wJACb4I,oBAAqB,wJACrBH,cAAe,wEACfC,iBAAkB,iBAClB1Q,OAAQiB,EAAAA,GACR8G,OAAQpH,EAAAA,GACRwH,YAAa,uFACbC,YAAa,uFACbC,QAAS,IAAIX,KAAK,4BAClBY,QAAS,IAAIZ,KAAK,6BAGdyJ,GAAc,CAClBD,SAGF,QAA4BxP,EAAAA,EAAAA,IAAiB,IACxCyP,GACHxP,OAAQ,mBACRO,MAAMC,GAER,MAAM8D,GAASC,EAAAA,EAAAA,MAEf,SAASgN,EAAWC,GAClBlN,EAAOmN,KAAK,aAAYC,EAAAA,EAAAA,IAAoBF,gBAC9C,CAEA,MAAO,CAAC3T,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,GACpD9F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,wpBAEnBD,EAAG,SAGP4E,EAAAA,EAAAA,IAAakH,EAAAA,EAAU,CACrBrQ,MAAOmQ,GAAKnQ,MACZiH,YAAakJ,GAAKlJ,YAClB3H,IAAK,0BAA0B6Q,GAAK7Q,MACpC4H,YAAaiJ,GAAKjJ,YAClBE,YAAa+I,GAAK/I,YAClBC,YAAa8I,GAAK9I,YAClBC,QAAS6I,GAAK7I,QACdC,QAAS4I,GAAK5I,QACdtI,OAAQkR,GAAKlR,OACb+H,OAAQmJ,GAAKnJ,QACZ,CACD7C,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB1D,EACAsB,EACAC,EACAE,EACAC,EACAC,GACAnE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,sCACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,mCAAqC,CAC9EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,kBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,+IAEnBlC,EACAC,GACA4G,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB5B,KAEF+B,EAAG,KAEL4E,EAAAA,EAAAA,IAAaqJ,EAAAA,EAAS,CACpB7H,KAAM,OACN3K,MAAO,0BACP4K,QAAS,MACR,CACDzG,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB3B,EACAC,EACAC,EACAC,KAEF2B,EAAG,IAEL1B,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAyM,GACAnH,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBmM,KAEFhM,EAAG,IAELiM,GACAtS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,oCACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,kCAAoC,CAC7EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,SAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,oCACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,iCAAmC,CAC5EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,QAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,SACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,oCAAsC,CAC/EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,WAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,sLAEnBiM,GACAtH,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBsM,KAEFnM,EAAG,IAELoM,GACAxH,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBwM,KAEFrM,EAAG,IAELsM,GACA3S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,uFACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,iCAAmC,CAC5EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,QAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,SACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,oCAAsC,CAC/EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,WAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,oIAEnBsM,IACA3H,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB2M,MAEFxM,EAAG,IAELyM,GACAC,GACAC,IACA/H,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB+M,MAEF5M,EAAG,KAELrG,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,0CACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,iCAAmC,CAC5EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,QAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,gBACjB4M,IACA5M,EAAAA,EAAAA,IAAiB,qGACjB6M,IACA7M,EAAAA,EAAAA,IAAiB,6EAEnB8M,GACAC,GACAC,IACArI,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBsN,MAEFnN,EAAG,IAELoN,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAkB,IACAjK,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBiP,MAEF9O,EAAG,IAEL+O,GACAC,GACAC,GACAC,IACAtK,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBsP,MAEFnP,EAAG,IAELoP,IACAxK,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBwP,MAEFrP,EAAG,IAELsP,GACAC,GACAC,GACAC,IACA7K,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB6P,MAEF1P,EAAG,IAEL2P,IACA/K,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB+P,MAEF5P,EAAG,KAEL4E,EAAAA,EAAAA,IAAaqJ,EAAAA,EAAS,CACpB7H,KAAM,OACN3K,MAAO,4BACP4K,QAAS,MACR,CACDzG,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBgQ,IACAlW,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,wDACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,+BAAiC,CAC1EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,sBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,wLAEnB6P,MAEF9P,EAAG,IAEL+P,GACAE,IACAtW,EAAAA,EAAAA,GAAoB,KAAM,KAAM,CAC9BuW,GACAC,GACAC,IACAzW,EAAAA,EAAAA,GAAoB,KAAM,KAAM,CAC9B0W,IACApQ,EAAAA,EAAAA,IAAiB,kCACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,qDAAuD,CAChGC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,gCAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,sNAGrBqQ,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,IACAtX,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,mEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,gBAAkB,CAC3DC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,oCAEnBtG,EAAAA,EAAAA,GAAoB,OAAQuX,GAAa,EACvCtM,EAAAA,EAAAA,IAAasJ,EAAAA,EAAc,CACzBC,UAAW,GACXC,WAAY,kBACZC,YAAaT,MAGjBuD,GACAC,IACAzX,EAAAA,EAAAA,GAAoB,KAAM,KAAM,CAC9B0X,IACA1X,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,EAClCiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,qCAAuC,CAChFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,yCAEnBD,EAAG,OAGPC,EAAAA,EAAAA,IAAiB,8HAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,EAClCiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,sCAAwC,CACjFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,8EAEnBD,EAAG,OAGPC,EAAAA,EAAAA,IAAiB,iNAGrBqR,IACA3X,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,mCACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,iDAAmD,CAC5FC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,2DAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,QAEnBtG,EAAAA,EAAAA,GAAoB,MAAO4X,GAAc,CACvCC,IACA7X,EAAAA,EAAAA,GAAoB,MAAO8X,GAAc,EACvC7M,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOsJ,EAAAA,IAAa,CAC/BC,GAAI,MACJ/Q,MAAO,QACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,EAAG2O,UAAW,EAC9B5J,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOyJ,EAAAA,IAAmB,CACrCF,GAAI,KACJ/Q,MAAO,kGACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB6R,IACA/X,EAAAA,EAAAA,GAAoB,OAAQgY,GAAc,EACxC/M,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO0J,GAAkB,CACpClR,OAAOwI,EAAAA,EAAAA,IAAgB,CAACwI,EAAO,cAAgB,WAAY,sBAC3D,cAAe,QACd,KAAM,EAAG,CAAC,eAGjBxO,EAAG,GACF,OACH4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO2J,EAAAA,IAAkB,CAAEnR,MAAO,cAAgB,CAC7DoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB+R,GACAC,GACAC,MAEF9R,EAAG,OAGPA,EAAG,KAEL4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOsJ,EAAAA,IAAa,CAC/BC,GAAI,MACJ/Q,MAAO,QACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,EAAG2O,UAAW,EAC9B5J,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOyJ,EAAAA,IAAmB,CACrCF,GAAI,KACJ/Q,MAAO,kGACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBkS,IACApY,EAAAA,EAAAA,GAAoB,OAAQqY,GAAc,EACxCpN,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO0J,GAAkB,CACpClR,OAAOwI,EAAAA,EAAAA,IAAgB,CAACwI,EAAO,cAAgB,WAAY,sBAC3D,cAAe,QACd,KAAM,EAAG,CAAC,eAGjBxO,EAAG,GACF,OACH4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO2J,EAAAA,IAAkB,CAAEnR,MAAO,cAAgB,CAC7DoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBoS,MAEFjS,EAAG,OAGPA,EAAG,KAEL4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOsJ,EAAAA,IAAa,CAC/BC,GAAI,MACJ/Q,MAAO,QACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,EAAG2O,UAAW,EAC9B5J,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOyJ,EAAAA,IAAmB,CACrCF,GAAI,KACJ/Q,MAAO,kGACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBqS,IACAvY,EAAAA,EAAAA,GAAoB,OAAQwY,GAAc,EACxCvN,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO0J,GAAkB,CACpClR,OAAOwI,EAAAA,EAAAA,IAAgB,CAACwI,EAAO,cAAgB,WAAY,sBAC3D,cAAe,QACd,KAAM,EAAG,CAAC,eAGjBxO,EAAG,GACF,OACH4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO2J,EAAAA,IAAkB,CAAEnR,MAAO,cAAgB,CAC7DoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBuS,GACAC,MAEFrS,EAAG,OAGPA,EAAG,KAEL4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOsJ,EAAAA,IAAa,CAC/BC,GAAI,MACJ/Q,MAAO,QACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,EAAG2O,UAAW,EAC9B5J,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOyJ,EAAAA,IAAmB,CACrCF,GAAI,KACJ/Q,MAAO,kGACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtByS,IACA3Y,EAAAA,EAAAA,GAAoB,OAAQ4Y,GAAc,EACxC3N,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO0J,GAAkB,CACpClR,OAAOwI,EAAAA,EAAAA,IAAgB,CAACwI,EAAO,cAAgB,WAAY,sBAC3D,cAAe,QACd,KAAM,EAAG,CAAC,eAGjBxO,EAAG,GACF,OACH4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO2J,EAAAA,IAAkB,CAAEnR,MAAO,cAAgB,CAC7DoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB2S,GACAC,GACAC,MAEF1S,EAAG,OAGPA,EAAG,WAKXA,EAAG,GACF,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,YAClH,GAAG,CAER,ICp4BA,MAAMzC,GAAc,GAEpB,S,yPCFA,MAAMpB,EAAa,CAAEqB,MAAO,sEACtBC,GAA0B9D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iOAAkO,GAC3R+D,GAA0B/D,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,oBACPsC,IAAK,wFACLC,IAAK,wDACLtE,MAAO,wDACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,EACtCsG,EAAAA,EAAAA,IAAiB,2FACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN7E,MAAO,kCACPuN,IAAK,YACJ,cACU/I,EAAAA,EAAAA,IAAiB,SAE9B,GACErC,GAA0BjE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6IAA8I,GACvMkE,GAA0BlE,EAAAA,EAAAA,GAAoB,MAAO,KAAM,4TAAmU,GAC9XmE,GAA0BnE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6GAA8G,GACvKoE,GAA0BpE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,6EAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,mGAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,0EAC3C,GACEqE,GAA0BrE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,6BAA8B,GACxFsE,GAA0BtE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uFAAwF,GACjJuE,GAA2BvE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wGAAyG,GACnKwE,GAA2BxE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6GAA8G,GACxKyE,GAA2BzE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,wFAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,0HAC3C,GACE0E,GAA2B1E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,0FACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,8DACN0I,IAAK,uBACJ,8BACU/I,EAAAA,EAAAA,IAAiB,QAC5B,GACE3B,GAA2B3E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,iPACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,mCAClCsG,EAAAA,EAAAA,IAAiB,OAC5B,GACE1B,GAA2B5E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,mCAClCsG,EAAAA,EAAAA,IAAiB,qCAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,iCAClCsG,EAAAA,EAAAA,IAAiB,qCAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,+BAClCsG,EAAAA,EAAAA,IAAiB,mCAE9B,GACEzB,GAA2B7E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6OAAgP,GAC1S8E,GAA2B9E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,+CAAgD,GAC3G+E,GAA2B/E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wLAAyL,GACnPgF,GAA2BhF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,4BACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,4CACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,wBAClCsG,EAAAA,EAAAA,IAAiB,2EACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,OAC5B,GACErB,GAA2BjF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,mFACpCsG,EAAAA,EAAAA,IAAiB,wSAC5B,GACEpB,GAA2BlF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,wCACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,8BAClCsG,EAAAA,EAAAA,IAAiB,wCACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,wBAClCsG,EAAAA,EAAAA,IAAiB,mEACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,wBAClCsG,EAAAA,EAAAA,IAAiB,4CAC5B,GACEnB,GAA2BnF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,iCAAkC,GAC7FoF,GAA2BpF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,yQAA4Q,GACtUqF,GAA2BrF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,sOAAwO,GAClSsF,GAA2BtF,EAAAA,EAAAA,GAAoB,MAAO,KAAM,4LAAiM,GAC7PuF,GAA2BvF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,4FACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,2BAClCsG,EAAAA,EAAAA,IAAiB,gJAC5B,GACEd,GAA2BxF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wKAAyK,GACnOyF,GAA2BzF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yCAA0C,GACrG0F,GAA2B1F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,sQAAyQ,GACnU2F,GAA2B3F,EAAAA,EAAAA,GAAoB,MAAO,KAAM,6BAA8B,GAC1FoS,GAA2BpS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0EAA2E,GACrIqS,GAA2BrS,EAAAA,EAAAA,GAAoB,MAAO,KAAM,wCAAyC,GACrGsS,EAAc,CAClBzO,MAAO,uCACPiL,aAAc,OAEVyD,EAAc,CAAE1O,MAAO,gDACvB2O,GAA2BxS,EAAAA,EAAAA,GAAoB,KAAM,CAAE6D,MAAO,cAAgB,qBAAsB,GACpG4O,EAAc,CAAE5O,MAAO,kEACvB6O,GAA2B1S,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,qCAAuC,qCAAsC,GAC7I8O,EAAc,CAAE9O,MAAO,8BACvB+O,IAA2B5S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,6BAA+B,6CACjF,GACEgP,IAA2B7S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,yOAA0O,GACpS8S,IAA2B9S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,gIACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,2BAClCsG,EAAAA,EAAAA,IAAiB,6EACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,OAC5B,GACEyM,IAA2B/S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uPAAwP,GAoB3SiS,GAAiB,CAC5BP,IAAK,oBACLtQ,IAAK,0DACL4H,YAAa,CAAC5G,EAAAA,GAAoBE,EAAAA,IAClCR,MAAO,+CACPiH,YAAa,kHACb4I,oBAAqB,kHACrBH,cAAe,8FACfC,iBAAkB,+CAClB1Q,OAAQiB,EAAAA,GACR8G,OAAQpH,EAAAA,GACRwH,YAAa,4IACbC,YAAa,4IACbC,QAAS,IAAIX,KAAK,4BAClBY,QAAS,IAAIZ,KAAK,6BAGdyJ,GAAc,CAClBD,SAGF,QAA4BxP,EAAAA,EAAAA,IAAiB,IACxCyP,GACHxP,OAAQ,uDACRO,MAAMC,GAER,MAAM8D,GAASC,EAAAA,EAAAA,MAEf,SAASgN,EAAWC,GAClBlN,EAAOmN,KAAK,aAAYC,EAAAA,EAAAA,IAAoBF,sBAC9C,CAEA,MAAO,CAAC3T,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,GACpD9F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,8qBAEnBD,EAAG,SAGP4E,EAAAA,EAAAA,IAAakH,EAAAA,EAAU,CACrBrQ,MAAOmQ,GAAKnQ,MACZiH,YAAakJ,GAAKlJ,YAClB3H,IAAK,0BAA0B6Q,GAAK7Q,MACpC4H,YAAaiJ,GAAKjJ,YAClBE,YAAa+I,GAAK/I,YAClBC,YAAa8I,GAAK9I,YAClBC,QAAS6I,GAAK7I,QACdC,QAAS4I,GAAK5I,QACdtI,OAAQkR,GAAKlR,OACb+H,OAAQmJ,GAAKnJ,QACZ,CACD7C,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBlG,EAAAA,EAAAA,GAAoB,SAAUwC,EAAY,EACxC8D,EAAAA,EAAAA,IAAiB,wCACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,sCAAwC,CACjFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,YAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,mIACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,yCAA2C,CACpFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,0BAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,yCAEnBxC,EACAC,EACAE,GACAgH,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBhC,KAEFmC,EAAG,IAELlC,EACAC,EACAC,EACAC,EACAC,GACA0G,EAAAA,EAAAA,IAAaqJ,EAAAA,EAAS,CACpB7H,KAAM,OACN3K,MAAO,8CACP4K,QAAS,MACR,CACDzG,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB1B,EACAC,KAEF4B,EAAG,IAEL3B,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACA4F,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBZ,KAEFe,EAAG,IAELd,EACAC,EACAC,EACAC,EACAC,EACAyM,EACAC,GACArS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,qEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,gBAAkB,CAC3DC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,oCAEnBtG,EAAAA,EAAAA,GAAoB,OAAQsS,EAAa,EACvCrH,EAAAA,EAAAA,IAAasJ,EAAAA,EAAc,CACzBC,UAAW,GACXC,WAAY,kBACZ4B,QAAS,UACT3B,YAAaT,OAGjBjU,EAAAA,EAAAA,GAAoB,MAAOuS,EAAa,CACtCC,GACAxS,EAAAA,EAAAA,GAAoB,MAAOyS,EAAa,EACtCxH,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOsJ,EAAAA,IAAa,CAC/BC,GAAI,MACJ/Q,MAAO,QACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,EAAG2O,UAAW,EAC9B5J,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOyJ,EAAAA,IAAmB,CACrCF,GAAI,KACJ/Q,MAAO,kGACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBwM,GACA1S,EAAAA,EAAAA,GAAoB,OAAQ2S,EAAa,EACvC1H,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO0J,GAAkB,CACpClR,OAAOwI,EAAAA,EAAAA,IAAgB,CAACwI,EAAO,cAAgB,WAAY,sBAC3D,cAAe,QACd,KAAM,EAAG,CAAC,eAGjBxO,EAAG,GACF,OACH4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO2J,EAAAA,IAAkB,CAAEnR,MAAO,cAAgB,CAC7DoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB0M,GACAC,GACAC,GACAC,MAEF1M,EAAG,OAGPA,EAAG,WAKXA,EAAG,GACF,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,YAClH,GAAG,CAER,ICxUA,MAAMzC,GAAc,GAEpB,S,6HCFA,MAAMpB,GAA0BxC,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,sEAAwE,4MAA6M,GACtVC,GAA0B9D,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,oBACPsC,IAAK,oGACLC,IAAK,mEACLtE,MAAO,mEACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,EACtCsG,EAAAA,EAAAA,IAAiB,sGACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN7E,MAAO,kCACPuN,IAAK,YACJ,cACU/I,EAAAA,EAAAA,IAAiB,SAE9B,GACEvC,GAA0B/D,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,OAAQ,GACpEiE,GAA0BjE,EAAAA,EAAAA,GAAoB,MAAO,KAAM,+DAAgE,GAC3HkE,GAA0BlE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,6DACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,qDACN0I,IAAK,YACJ,qBACU/I,EAAAA,EAAAA,IAAiB,qHAC5B,GACEnC,GAA0BnE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2GAA4G,GACrKoE,GAA0BpE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,MAAO,GACjEqE,GAA0BrE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,sHAAuH,GAChLsE,GAA0BtE,EAAAA,EAAAA,GAAoB,QAAS,KAAM,EACpDA,EAAAA,EAAAA,GAAoB,QAAS,KAAM,EACjCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,QAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,mBAElCA,EAAAA,EAAAA,GAAoB,QAAS,KAAM,EACjCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,uBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,gBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,QAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,qBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,8BAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,gBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,gBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,wBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,4BAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,uBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,gBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,qBAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,uBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,uBAG/C,GAQEiS,EAAiB,CACrBP,IAAK,eACLtQ,IAAK,qDACL4H,YAAa,CAAC5G,EAAAA,IACdN,MAAO,0CACPiH,YAAa,4JACbyI,cAAe,0GACfC,iBAAkB,0CAClBE,oBAAqB,4JACrB5Q,OAAQW,EAAAA,GACRoH,YAAQ3G,EACR+G,YAAa,kIACbC,YAAa,kIACbC,QAAS,IAAIX,KAAK,4BAClBY,aAASlH,GAGL+P,EAAc,CAClBD,QAGF,OAA4BxP,EAAAA,EAAAA,IAAiB,IACxCyP,EACHxP,OAAQ,qCACRO,MAAMC,GAGR,MAAO,CAAC3C,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAC3CkT,GAAuBlT,EAAAA,EAAAA,IAAkB,aAE/C,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,GACpD9F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,0rBAEnBD,EAAG,SAGP4E,EAAAA,EAAAA,IAAakH,EAAAA,EAAU,CACrBrQ,MAAOmQ,EAAKnQ,MACZiH,YAAakJ,EAAKlJ,YAClB3H,IAAK,0BAA0B6Q,EAAK7Q,MACpC4H,YAAaiJ,EAAKjJ,YAClBE,YAAa+I,EAAK/I,YAClBC,YAAa8I,EAAK9I,YAClBC,QAAS6I,EAAK7I,QACdC,QAAS4I,EAAK5I,QACdtI,OAAQkR,EAAKlR,OACb+H,OAAQmJ,EAAKnJ,QACZ,CACD7C,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB1D,EACAsB,GACA9D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,qBACjBvC,GACAuC,EAAAA,EAAAA,IAAiB,oEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,mCAAqC,CAC9EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,QAEnB2E,EAAAA,EAAAA,IAAa+N,EAAsB,KAAM,CACvC/S,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBjC,KAEFoC,EAAG,IAELnC,EACAC,EACAC,EACAC,EACAC,KAEF+B,EAAG,GACF,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,YAClH,GAAG,CAER,ICnRA,MAAMzC,EAAc,EAEpB,O,gLCFA,MAAMpB,GAA0BxC,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,sEAAwE,6RAA8R,GACvaC,GAA0B9D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,8LACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,0BAClCsG,EAAAA,EAAAA,IAAiB,6EACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,sDACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,kBAC5B,GACEvC,GAA0B/D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6LAA8L,GACvPiE,GAA0BjE,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,oBACPsC,IAAK,gFACLC,IAAK,4DACLtE,MAAO,4DACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,EACtCsG,EAAAA,EAAAA,IAAiB,+FACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN7E,MAAO,kCACPuN,IAAK,YACJ,cACU/I,EAAAA,EAAAA,IAAiB,SAE9B,GACEpC,GAA0BlE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,kDAAmD,GAC7GmE,GAA0BnE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gFAAiF,GAC1IoE,GAA0BpE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,mBAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,kBAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,iBAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,WAC3C,GACEqE,GAA0BrE,EAAAA,EAAAA,GAAoB,KAAM,CAAEgD,GAAI,kBAAoB,kBAAmB,GACjGsB,GAA0BtE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,oRAAqR,GAC9UuE,GAA2BvE,EAAAA,EAAAA,GAAoB,KAAM,CAAEgD,GAAI,iBAAmB,iBAAkB,GAChGwB,GAA2BxE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wPAAyP,GACnTyE,GAA2BzE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,kMAAmM,GAC7P0E,GAA2B1E,EAAAA,EAAAA,GAAoB,KAAM,CAAEgD,GAAI,gBAAkB,gBAAiB,GAC9F2B,GAA2B3E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,qSACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,WAC5B,GACE1B,GAA2B5E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mJAAoJ,GAC9M6E,GAA2B7E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,SAAU,GACrE8E,GAA2B9E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,oDACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,yBACN0I,IAAK,uBACJ,UACU/I,EAAAA,EAAAA,IAAiB,2dAC5B,GACEvB,GAA2B/E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,+OAAgP,GAC1SgF,GAA2BhF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,0BAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,uBAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,6CAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,qCAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,4CAC3C,GACEiF,GAA2BjF,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,OAAU,GACvEkF,GAA2BlF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,mGACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,OACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,OACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,iJAC5B,GACEnB,GAA2BnF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,kHACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,OAClCsG,EAAAA,EAAAA,IAAiB,OACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,OAClCsG,EAAAA,EAAAA,IAAiB,WACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,OAClCsG,EAAAA,EAAAA,IAAiB,0GACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,OAClCsG,EAAAA,EAAAA,IAAiB,mHACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,OAClCsG,EAAAA,EAAAA,IAAiB,4JAC5B,GACElB,GAA2BpF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,iDAAkD,GAC7GqF,GAA2BrF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8HAA+H,GACzLsF,GAA2BtF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,uBAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,+CAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,iDAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,gDAC3C,GACEuF,GAA2BvF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sBAAuB,GAClFwF,GAA2BxF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4MAA6M,GACvQyF,GAA2BzF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uFAAwF,GAClJ0F,GAA2B1F,EAAAA,EAAAA,GAAoB,KAAM,KAAM,8CAA+C,GAC1G2F,GAA2B3F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uIAAwI,GAClMoS,GAA2BpS,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,eAAgB,GAC7EqS,GAA2BrS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gZAAiZ,GAC3csS,GAA2BtS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,+IAAgJ,GAC1MuS,GAA2BvS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,gDAAiD,GAC5GwS,GAA2BxS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,+XAAgY,GAC1byS,GAA2BzS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,maAAoa,GAC9d0S,GAA2B1S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,8CAA+C,GAC1G2S,GAA2B3S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mZAAoZ,GAC9c4S,GAA2B5S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,iKACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gBACN0I,IAAK,sBACLD,OAAQ,UACP,UACU9I,EAAAA,EAAAA,IAAiB,gDACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,eACN0I,IAAK,sBACLD,OAAQ,UACP,SACU9I,EAAAA,EAAAA,IAAiB,4KAC5B,GACEuM,GAA2B7S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mOAAoO,GAC9R8S,GAA2B9S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,+BAAgC,GAC3F+S,GAA2B/S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wHAAyH,GACnLgT,IAA2BhT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,2CAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sCAC3C,GACEiT,IAA2BjT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,QACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,0JACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,uDACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,2MAC5B,GACE4M,IAA2BlT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6TAA8T,GACxXmT,IAA2BnT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,mBAAoB,GAC/EoT,IAA2BpT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,+LAAgM,GAC1PqT,IAA2BrT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qRAAsR,GAChVsT,IAA2BtT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wLAAyL,GACnPwT,IAA2BxT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2KAA4K,GACtOyT,IAA2BzT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,kBAAmB,GAC9E0T,IAA2B1T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iQAAoQ,GAC9T2T,IAA2B3T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mRAAoR,GAC9U4T,IAA2B5T,EAAAA,EAAAA,GAAoB,KAAM,KAAM,wBAAyB,GACpF6T,IAA2B7T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iOAAkO,GAC5R8T,IAA2B9T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0FAA2F,GACrJ+T,IAA2B/T,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,qBACpCsG,EAAAA,EAAAA,IAAiB,gEAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,0CACpCsG,EAAAA,EAAAA,IAAiB,+GAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,uBACpCsG,EAAAA,EAAAA,IAAiB,4FAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,kCACpCsG,EAAAA,EAAAA,IAAiB,wRAE9B,GACE0N,GAAc,CAAEnQ,MAAO,gDACvBqR,IAA2BlV,EAAAA,EAAAA,GAAoB,KAAM,CAAE6D,MAAO,cAAgB,qBAAsB,GACpGsR,GAAc,CAAEtR,MAAO,kEACvBuR,IAA2BpV,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,qCAAuC,gCAAiC,GACxIwR,GAAc,CAAExR,MAAO,8BACvByR,IAA2BtV,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wJAAyJ,GACnNuV,IAA2BvV,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,aACpCsG,EAAAA,EAAAA,IAAiB,qQAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,eACpCsG,EAAAA,EAAAA,IAAiB,oQAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,cACpCsG,EAAAA,EAAAA,IAAiB,2OAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,gBACpCsG,EAAAA,EAAAA,IAAiB,wLAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,gBACpCsG,EAAAA,EAAAA,IAAiB,6MAE9B,GACEkP,IAA2BxV,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,qCAAuC,kCAAmC,GAC1I4R,GAAc,CAAE5R,MAAO,8BACvB6R,IAA2B1V,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qFAAsF,GAChJ2V,IAA2B3V,EAAAA,EAAAA,GAAoB,IAAK,KAAM,yQAA0Q,GACpU4V,IAA2B5V,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qNAAsN,GAChR6V,IAA2B7V,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,yIACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,+PAC5B,GAeE2L,GAAiB,CACrBP,IAAK,eACLtQ,IAAK,oDACL4H,YAAa,CAAC5G,EAAAA,IACdN,MAAO,0CACPiH,YAAa,yFACb4I,oBAAqB,yFACrBH,cAAe,sFACfC,iBAAkB,0CAClB1Q,OAAQiB,EAAAA,GACR8G,OAAQpH,EAAAA,GACRwH,YAAa,gIACbC,YAAa,gIACbC,QAAS,IAAIX,KAAK,4BAClBY,QAAS,IAAIZ,KAAK,6BAGdyJ,GAAc,CAClBD,SAGF,QAA4BxP,EAAAA,EAAAA,IAAiB,IACxCyP,GACHxP,OAAQ,oCACRO,MAAMC,GAGR,MAAO,CAAC3C,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,GACpD9F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,sqBAEnBD,EAAG,SAGP4E,EAAAA,EAAAA,IAAakH,EAAAA,EAAU,CACrBrQ,MAAOmQ,GAAKnQ,MACZiH,YAAakJ,GAAKlJ,YAClB3H,IAAK,0BAA0B6Q,GAAK7Q,MACpC4H,YAAaiJ,GAAKjJ,YAClBE,YAAa+I,GAAK/I,YAClBC,YAAa8I,GAAK9I,YAClBC,QAAS6I,GAAK7I,QACdC,QAAS4I,GAAK5I,QACdtI,OAAQkR,GAAKlR,OACb+H,OAAQmJ,GAAKnJ,QACZ,CACD7C,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB1D,EACAsB,EACAC,EACAE,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACA3E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,+OACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,kCAAoC,CAC7EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,0CAEnB1B,EACAC,EACAC,EACAC,EACAC,GACAiG,EAAAA,EAAAA,IAAaqJ,EAAAA,EAAS,CACpB7H,KAAM,OACN3K,MAAO,oBACP4K,QAAS,MACR,CACDzG,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBlG,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,oCACjBrB,GACAqB,EAAAA,EAAAA,IAAiB,+FACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CACnCG,GAAI,6BACJlE,MAAO,uBACN,CACDmE,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,sBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,yLAEnBpB,EACAC,KAEFkB,EAAG,IAELjB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACA3F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,mBACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,0DAA4D,CACrGC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,oCAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,yBACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CACnCG,GAAI,gCACJlE,MAAO,YACN,CACDmE,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,eAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,yLAEnBtG,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,iCACjB8L,GACA9L,EAAAA,EAAAA,IAAiB,kGACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,mCAAqC,CAC9EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,iKACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,6CAA+C,CACxFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,oBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,0FACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,kCAAoC,CAC7EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,iGAEnB+L,EACAC,EACAC,EACAC,EACAC,EACAC,GACA1S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,yMACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,kCAAoC,CAC7EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,8SAEnBqM,GACA1H,EAAAA,EAAAA,IAAaqJ,EAAAA,EAAS,CACpB7H,KAAM,OACN3K,MAAO,iBACP4K,QAAS,MACR,CACDzG,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB0M,EACAC,KAEFxM,EAAG,IAELyM,EACAC,EACAC,GACAC,IACAjT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,oMACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CACnCG,GAAI,8CACJlE,MAAO,oBACN,CACDmE,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,sBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,iCAEnB4M,GACAC,GACAC,GACAC,GACAC,GACAE,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,IACA/T,EAAAA,EAAAA,GAAoB,MAAOgU,GAAa,CACtCkB,IACAlV,EAAAA,EAAAA,GAAoB,MAAOmV,GAAa,EACtClK,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOsJ,EAAAA,IAAa,CAC/BC,GAAI,MACJ/Q,MAAO,QACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,EAAG2O,UAAW,EAC9B5J,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOyJ,EAAAA,IAAmB,CACrCF,GAAI,KACJ/Q,MAAO,kGACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBkP,IACApV,EAAAA,EAAAA,GAAoB,OAAQqV,GAAa,EACvCpK,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO0J,GAAkB,CACpClR,OAAOwI,EAAAA,EAAAA,IAAgB,CAACwI,EAAO,cAAgB,WAAY,sBAC3D,cAAe,QACd,KAAM,EAAG,CAAC,eAGjBxO,EAAG,GACF,OACH4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO2J,EAAAA,IAAkB,CAAEnR,MAAO,cAAgB,CAC7DoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBoP,GACAC,MAEFlP,EAAG,OAGPA,EAAG,KAEL4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOsJ,EAAAA,IAAa,CAC/BC,GAAI,MACJ/Q,MAAO,QACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,EAAG2O,UAAW,EAC9B5J,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOyJ,EAAAA,IAAmB,CACrCF,GAAI,KACJ/Q,MAAO,kGACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBsP,IACAxV,EAAAA,EAAAA,GAAoB,OAAQyV,GAAa,EACvCxK,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO0J,GAAkB,CACpClR,OAAOwI,EAAAA,EAAAA,IAAgB,CAACwI,EAAO,cAAgB,WAAY,sBAC3D,cAAe,QACd,KAAM,EAAG,CAAC,eAGjBxO,EAAG,GACF,OACH4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO2J,EAAAA,IAAkB,CAAEnR,MAAO,cAAgB,CAC7DoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBwP,GACAC,GACAC,GACAC,MAEFxP,EAAG,OAGPA,EAAG,WAKXA,EAAG,GACF,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,YAClH,GAAG,CAER,ICngBA,MAAMzC,GAAc,GAEpB,S,6HCFA,MAAMpB,GAA0BxC,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,sEAAwE,6EAA8E,GACvNC,GAA0B9D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,8CACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,eAClCsG,EAAAA,EAAAA,IAAiB,oRAC5B,GACEvC,GAA0B/D,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,eAAiB,wEAAyE,GAC3JI,GAA0BjE,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,oBACPsC,IAAK,sEACLC,IAAK,4FACLtE,MAAO,4FACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,EACtCsG,EAAAA,EAAAA,IAAiB,8HACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN7E,MAAO,kCACPuN,IAAK,YACJ,cACU/I,EAAAA,EAAAA,IAAiB,SAE9B,GACEpC,GAA0BlE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,+BAAgC,GAC1FmE,GAA0BnE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0eAA2e,GACpiBoE,GAA0BpE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,uCAAwC,GAClGqE,GAA0BrE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,kXAAmX,GAC5asE,GAA0BtE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,iCAAkC,GAC5FuE,GAA2BvE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,sKACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,mBAClCsG,EAAAA,EAAAA,IAAiB,cAC5B,GACE9B,GAA2BxE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,oTAAqT,GAC/WyE,GAA2BzE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2ZAA4Z,GACtd0E,GAA2B1E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,uDAAwD,GACnH2E,GAA2B3E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,oZAAqZ,GAC/c4E,GAA2B5E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mWAAoW,GAC9Z6E,GAA2B7E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,2BAA4B,GACvF8E,GAA2B9E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8SAA+S,GACzW+E,GAA2B/E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6YAA8Y,GACxcgF,GAA2BhF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0WAA2W,GAQraiS,EAAiB,CACrBP,IAAK,oBACLtQ,IAAK,gDACL4H,YAAa,CAAC5G,EAAAA,IACdN,MAAO,qCACPiH,YAAa,yHACbyI,cAAe,4EACfC,iBAAkB,qCAClBE,oBAAqB,yHACrB5Q,OAAQW,EAAAA,GACRoH,YAAQ3G,EACR+G,YAAa,wHACbC,YAAa,wHACbC,QAAS,IAAIX,KAAK,4BAClBY,QAAS,IAAIZ,KAAK,6BAEdyJ,EAAc,CAClBD,QAGF,OAA4BxP,EAAAA,EAAAA,IAAiB,IACxCyP,EACHxP,OAAQ,6BACRO,MAAMC,GAGR,MAAO,CAAC3C,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,GACpD9F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,4pBAEnBD,EAAG,SAGP4E,EAAAA,EAAAA,IAAakH,EAAAA,EAAU,CACrBrQ,MAAOmQ,EAAKnQ,MACZiH,YAAakJ,EAAKlJ,YAClB3H,IAAK,0BAA0B6Q,EAAK7Q,MACpC4H,YAAaiJ,EAAKjJ,YAClBE,YAAa+I,EAAK/I,YAClBC,YAAa8I,EAAK9I,YAClBC,QAAS6I,EAAK7I,QACdC,QAAS4I,EAAK5I,QACdtI,OAAQkR,EAAKlR,OACb+H,OAAQmJ,EAAKnJ,QACZ,CACD7C,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB1D,EACAsB,EACAC,GACA/D,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,gDACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,kCAAoC,CAC7EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,SAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,QAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,4DACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,oCAAsC,CAC/EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,UAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,QAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,uEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,qCAAuC,CAChFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,WAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,QAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,uEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,sCAAwC,CACjFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,YAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,QAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,sDACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,2BAA6B,CACtEC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,WAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,SAGrBrC,EACAC,GACAlE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,kCAAoC,CAC7EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,qCAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,sUAEnBnC,EACAC,GACApE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,oCAAsC,CAC/EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,+CAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,gMAEnBjC,EACAC,GACAtE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,qCAAuC,CAChFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,mDAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,oMAEnB/B,EACAC,EACAC,EACAC,GACA1E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,sCAAwC,CACjFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,wFAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,oOAEnB3B,EACAC,EACAC,EACAC,EACAC,EACAC,KAEFqB,EAAG,GACF,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,YAClH,GAAG,CAER,ICvNA,MAAMzC,EAAc,EAEpB,O,8OCAA,MAAMpB,EAAa,CAAEqB,MAAO,sEACtBC,GAA0B9D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,mOACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,cACpCsG,EAAAA,EAAAA,IAAiB,0DAC5B,GACEvC,GAA0B/D,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,oBACPsC,IAAK,kFACLC,IAAK,4HACLtE,MAAO,4HACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,EACtCsG,EAAAA,EAAAA,IAAiB,8JACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN7E,MAAO,kCACPuN,IAAK,YACJ,cACU/I,EAAAA,EAAAA,IAAiB,SAE9B,GACErC,GAA0BjE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,6BAA8B,GACxFkE,GAA0BlE,EAAAA,EAAAA,GAAoB,SAAU,KAAM,eAAgB,GAC9EmE,GAA0BnE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qXAAsX,GAC/aoE,GAA0BpE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2JAA4J,GACrNqE,GAA0BrE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yBAA0B,GACpFsE,GAA0BtE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,kNAAmN,GAC5QuE,GAA2BvE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,kPAAmP,GAC7SwE,GAA2BxE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uPAAwP,GAClTyE,GAA2BzE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mUAAoU,GAC9X0E,GAA2B1E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,mCACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,WACpCsG,EAAAA,EAAAA,IAAiB,yDAC5B,GACE3B,GAA2B3E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gHAAiH,GAC3K4E,GAA2B5E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8QAA+Q,GACzU6E,GAA2B7E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,qDACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,uBACpCsG,EAAAA,EAAAA,IAAiB,SACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,iCACpCsG,EAAAA,EAAAA,IAAiB,6CAC5B,GACExB,GAA2B9E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,yBACpCsG,EAAAA,EAAAA,IAAiB,yDAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,qBACpCsG,EAAAA,EAAAA,IAAiB,iFAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,6BACpCsG,EAAAA,EAAAA,IAAiB,qGAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,oBACpCsG,EAAAA,EAAAA,IAAiB,uHAE9B,GACEvB,GAA2B/E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,4BAA6B,GACxFgF,GAA2BhF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,4FACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,0DAC5B,GACErB,GAA2BjF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,6CACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,oCAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,gDACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,4CAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,8CACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,QAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,gDACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,qCACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,QAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,SACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,sCACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,QAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,gDACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,qCACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,QAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,SACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,qDACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,QAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,0EAC3C,GACEkF,GAA2BlF,EAAAA,EAAAA,GAAoB,MAAO,CAC1D6D,MAAO,aACPsC,IAAK8O,EACL7O,IAAK,0BACLtE,MAAO,2BACN,MAAO,GACJqD,GAA2BnF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sBAAuB,GAClFoF,GAA2BpF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0OAA2O,GACrSqF,GAA2BrF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,wGACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,YACpCsG,EAAAA,EAAAA,IAAiB,0HAC5B,GACEhB,GAA2BtF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8LAA+L,GACzPuF,GAA2BvF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,sGACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,sNAC5B,GACEd,GAA2BxF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,kCAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,4HAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oEAC3C,GACEyF,GAA2BzF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mKAAoK,GAC9N0F,GAA2B1F,EAAAA,EAAAA,GAAoB,KAAM,KAAM,2BAA4B,GACvF2F,GAA2B3F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qEAAsE,GAChIoS,GAA2BpS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,qHACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,sBACpCsG,EAAAA,EAAAA,IAAiB,2DACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,OAC5B,GACE+L,GAA2BrS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,yLAA0L,GACpPsS,GAA2BtS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mJAAoJ,GAC9MuS,EAAc,CAAE1O,MAAO,gDACvB2O,GAA2BxS,EAAAA,EAAAA,GAAoB,KAAM,CAAE6D,MAAO,cAAgB,qBAAsB,GACpG4O,EAAc,CAAE5O,MAAO,kEACvB6O,GAA2B1S,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,qCAAuC,uEAAwE,GAC/K8O,EAAc,CAAE9O,MAAO,8BACvB+O,GAA2B5S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,6BAA+B,mDACjF,GACEgP,GAA2B7S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6SAA8S,GACxW8S,GAA2B9S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iRAAkR,GAC5U+S,GAAc,CAAElP,MAAO,kEACvBmP,IAA2BhT,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,qCAAuC,kFAAmF,GAC1LoP,GAAc,CAAEpP,MAAO,8BACvBqP,IAA2BlT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,6BAA+B,gEACjF,GACEsP,IAA2BnT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mZAAoZ,GAC9coT,IAA2BpT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,oYAAqY,GAC/bqT,IAA2BrT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iQAAkQ,GAC5TsT,GAAc,CAAEzP,MAAO,kEACvB2P,IAA2BxT,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,qCAAuC,mEAAoE,GAC3K4P,GAAc,CAAE5P,MAAO,8BACvB6P,IAA2B1T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,6BAA+B,oEACjF,GACE8P,IAA2B3T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,gDACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,yBACpCsG,EAAAA,EAAAA,IAAiB,0CACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,yLAC5B,GACEsN,IAA2B5T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gRAAoR,GAC9U6T,IAA2B7T,EAAAA,EAAAA,GAAoB,MAAO,KAAM,odAAqd,GACjhB8T,IAA2B9T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,+PAAmQ,GAC7T+T,IAA2B/T,EAAAA,EAAAA,GAAoB,MAAO,KAAM,mZAAoZ,GAChdgU,IAA2BhU,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,iYACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,mDAClCsG,EAAAA,EAAAA,IAAiB,OAC5B,GAeE2L,GAAiB,CACrBP,IAAK,eACLtQ,IAAK,4CACL4H,YAAa,CAAC5G,EAAAA,IACdN,MAAO,0DACPiH,YAAa,mKACbyI,cAAe,wFACfC,iBAAkB,qCAClBE,oBAAqB,mKACrB5Q,OAAQiB,EAAAA,GACR8G,OAAQpH,EAAAA,GACRwH,YAAa,gHACbC,YAAa,gHACbC,QAAS,IAAIX,KAAK,4BAClBY,QAAS,IAAIZ,KAAK,6BAGdyJ,GAAc,CAClBD,SAGF,QAA4BxP,EAAAA,EAAAA,IAAiB,IACxCyP,GACHxP,OAAQ,8BACRO,MAAMC,GAGR,MAAO,CAAC3C,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,GACpD9F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,wqBAEnBD,EAAG,SAGP4E,EAAAA,EAAAA,IAAakH,EAAAA,EAAU,CACrBrQ,MAAOmQ,GAAKnQ,MACZiH,YAAakJ,GAAKlJ,YAClB3H,IAAK,0BAA0B6Q,GAAK7Q,MACpC4H,YAAaiJ,GAAKjJ,YAClBE,YAAa+I,GAAK/I,YAClBC,YAAa8I,GAAK9I,YAClBC,QAAS6I,GAAK7I,QACdC,QAAS4I,GAAK5I,QACdtI,OAAQkR,GAAKlR,OACb+H,OAAQmJ,GAAKnJ,QACZ,CACD7C,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBlG,EAAAA,EAAAA,GAAoB,SAAUwC,EAAY,EACxC8D,EAAAA,EAAAA,IAAiB,0GACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,iCAAmC,CAC5EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,YAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,0IAEnBxC,EACAC,EACAE,GACAjE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,0DACjBpC,GACAoC,EAAAA,EAAAA,IAAiB,YACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,iCAAmC,CAC5EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,eAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,iGAEnBtG,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,6HACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,iCAAmC,CAC5EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,gBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,UACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,oCAAsC,CAC/EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,mBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,gCACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,kCAAoC,CAC7EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,6FACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,mCAAqC,CAC9EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,mBACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,kCAAoC,CAC7EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,qBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,QAEnBtG,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,oHACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,8BAAgC,CACzEC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,kBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,yFAEnBnC,EACAC,EACAC,EACAC,EACAC,EACAC,GACAxE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,qMACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CACnCG,GAAI,uCACJlE,MAAO,8BACN,CACDmE,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,gBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,6EAEnB7B,EACAC,GACAuG,EAAAA,EAAAA,IAAaqJ,EAAAA,EAAS,CACpB7H,KAAM,OACNC,QAAS,KACT5K,MAAO,oCACN,CACDmE,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBvB,EACAC,EACAC,EACAC,KAEFuB,EAAG,IAELtB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAyM,EACAC,EACAC,GACAtS,EAAAA,EAAAA,GAAoB,MAAOuS,EAAa,CACtCC,GACAxS,EAAAA,EAAAA,GAAoB,MAAOyS,EAAa,EACtCxH,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOsJ,EAAAA,IAAa,CAC/BC,GAAI,MACJ/Q,MAAO,QACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,EAAG2O,UAAW,EAC9B5J,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOyJ,EAAAA,IAAmB,CACrCF,GAAI,KACJ/Q,MAAO,kGACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBwM,GACA1S,EAAAA,EAAAA,GAAoB,OAAQ2S,EAAa,EACvC1H,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO0J,GAAkB,CACpClR,OAAOwI,EAAAA,EAAAA,IAAgB,CAACwI,EAAO,cAAgB,WAAY,sBAC3D,cAAe,QACd,KAAM,EAAG,CAAC,eAGjBxO,EAAG,GACF,OACH4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO2J,EAAAA,IAAkB,CAAEnR,MAAO,cAAgB,CAC7DoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB0M,EACAC,EACAC,KAEFzM,EAAG,OAGPA,EAAG,OAGPrG,EAAAA,EAAAA,GAAoB,MAAO+S,GAAa,EACtC9H,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOsJ,EAAAA,IAAa,CAC/BC,GAAI,MACJ/Q,MAAO,QACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,EAAG2O,UAAW,EAC9B5J,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOyJ,EAAAA,IAAmB,CACrCF,GAAI,KACJ/Q,MAAO,kGACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB8M,IACAhT,EAAAA,EAAAA,GAAoB,OAAQiT,GAAa,EACvChI,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO0J,GAAkB,CACpClR,OAAOwI,EAAAA,EAAAA,IAAgB,CAACwI,EAAO,cAAgB,WAAY,sBAC3D,cAAe,QACd,KAAM,EAAG,CAAC,eAGjBxO,EAAG,GACF,OACH4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO2J,EAAAA,IAAkB,CAAEnR,MAAO,cAAgB,CAC7DoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBgN,GACAC,GACAC,GACAC,MAEFhN,EAAG,OAGPA,EAAG,OAGPrG,EAAAA,EAAAA,GAAoB,MAAOsT,GAAa,EACtCrI,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOsJ,EAAAA,IAAa,CAC/BC,GAAI,MACJ/Q,MAAO,QACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,EAAG2O,UAAW,EAC9B5J,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOyJ,EAAAA,IAAmB,CACrCF,GAAI,KACJ/Q,MAAO,kGACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBsN,IACAxT,EAAAA,EAAAA,GAAoB,OAAQyT,GAAa,EACvCxI,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO0J,GAAkB,CACpClR,OAAOwI,EAAAA,EAAAA,IAAgB,CAACwI,EAAO,cAAgB,WAAY,sBAC3D,cAAe,QACd,KAAM,EAAG,CAAC,eAGjBxO,EAAG,GACF,OACH4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO2J,EAAAA,IAAkB,CAAEnR,MAAO,cAAgB,CAC7DoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBwN,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,MAEF3N,EAAG,OAGPA,EAAG,WAKXA,EAAG,GACF,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,YAClH,GAAG,CAER,ICxfA,MAAMzC,GAAc,GAEpB,S,kJCFA,MAAMpB,GAA0BxC,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,sEAAwE,oLAAqL,GAC9TC,GAA0B9D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uNAAwN,GACjR+D,GAA0B/D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qNAAsN,GAC/QiE,GAA0BjE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,qBACpCsG,EAAAA,EAAAA,IAAiB,uSAC5B,GACEpC,GAA0BlE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qRAAsR,GAC/UmE,GAA0BnE,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,oBACPsC,IAAK,kFACLC,IAAK,4EACLtE,MAAO,4EACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,EACtCsG,EAAAA,EAAAA,IAAiB,+GACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN7E,MAAO,kCACPuN,IAAK,YACJ,cACU/I,EAAAA,EAAAA,IAAiB,SAE9B,GACElC,GAA0BpE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,YAAa,GACvEqE,GAA0BrE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4QAA6Q,GACtUsE,GAA0BtE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,kDAAmD,GAC5GuE,GAA2BvE,EAAAA,EAAAA,GAAoB,MAAO,KAAM,8HAA+H,GAC3LwE,GAA2BxE,EAAAA,EAAAA,GAAoB,MAAO,KAAM,wKAAyK,GACrOyE,GAA2BzE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,iGACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,uBACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,gCACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,kBAClCsG,EAAAA,EAAAA,IAAiB,QAC5B,GACE5B,GAA2B1E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qGAAsG,GAChK2E,GAA2B3E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,2BAA4B,GACvF4E,GAA2B5E,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EACnE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,SACPsC,IAAK,4FACLC,IAAK,qDACLtE,MAAO,qDACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,EACtCsG,EAAAA,EAAAA,IAAiB,2EACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN7E,MAAO,kCACPuN,IAAK,YACJ,cACU/I,EAAAA,EAAAA,IAAiB,SAE9B,GACEzB,GAA2B7E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,iIACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,sBACN0I,IAAK,uBACJ,YACU/I,EAAAA,EAAAA,IAAiB,QAC5B,GACExB,GAA2B9E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8QAA+Q,GACzU+E,GAA2B/E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wHAAyH,GACnLgF,GAA2BhF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4EAA6E,GACvIiF,GAA2BjF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,WAAY,GACvEkF,GAA2BlF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,2NACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,4CACN0I,IAAK,uBACJ,qBACU/I,EAAAA,EAAAA,IAAiB,0BAC5B,GACEnB,GAA2BnF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uJAAwJ,GAClNoF,GAA2BpF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,kEAAmE,GAC7HqF,GAA2BrF,EAAAA,EAAAA,GAAoB,MAAO,KAAM,+GAAgH,GAC5KsF,GAA2BtF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,cAAe,GAC1EuF,GAA2BvF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,qBACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,qBAClCsG,EAAAA,EAAAA,IAAiB,gLACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,UAClCsG,EAAAA,EAAAA,IAAiB,8BAC5B,GACEd,GAA2BxF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,4HACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,UAClCsG,EAAAA,EAAAA,IAAiB,6HAC5B,GACEb,GAA2BzF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,sHACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,iBAClCsG,EAAAA,EAAAA,IAAiB,cACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,UAClCsG,EAAAA,EAAAA,IAAiB,8CACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+EACN0I,IAAK,uBACJ,eACU/I,EAAAA,EAAAA,IAAiB,kEAC5B,GACEZ,GAA2B1F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,oPACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,iBAClCsG,EAAAA,EAAAA,IAAiB,uGAC5B,GACEX,GAA2B3F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uCAAwC,GAClGoS,GAA2BpS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,4CAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sBAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,mBAC3C,GACEqS,GAA2BrS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,yJAA0J,GACpNsS,GAA2BtS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yDAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,qDAC3C,GACEuS,GAA2BvS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,0CACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,mCAClCsG,EAAAA,EAAAA,IAAiB,gEAC5B,GACEkM,GAA2BxS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2FAA4F,GACtJyS,GAA2BzS,EAAAA,EAAAA,GAAoB,MAAO,KAAM,sXAA2X,GACvb0S,GAA2B1S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,+BACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,cAClCsG,EAAAA,EAAAA,IAAiB,6HACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,cAClCsG,EAAAA,EAAAA,IAAiB,gEAC5B,GACEqM,GAA2B3S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,SACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,6LAC5B,GACEsM,GAA2B5S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,SACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,YAClCsG,EAAAA,EAAAA,IAAiB,gFACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,UAClCsG,EAAAA,EAAAA,IAAiB,UACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,UAClCsG,EAAAA,EAAAA,IAAiB,oCAC5B,GACEuM,GAA2B7S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,2KACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,0FACN0I,IAAK,uBACJ,kBACU/I,EAAAA,EAAAA,IAAiB,OAC5B,GACEwM,GAA2B9S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,4BAA6B,GACxF+S,GAA2B/S,EAAAA,EAAAA,GAAoB,IAAK,CACxD2G,KAAM,mIACN0I,IAAK,uBACJ,6BAA8B,GAC3B2D,GAA2BhT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iLAAkL,GAC5OiT,GAA2BjT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,kDAAmD,GAC7GkT,GAA2BlT,EAAAA,EAAAA,GAAoB,MAAO,KAAM,oPAAqP,GACjTmT,IAA2BnT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wEAAyE,GACnIoT,IAA2BpT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,sEACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,8EACN0I,IAAK,uBACJ,4BACU/I,EAAAA,EAAAA,IAAiB,OAC5B,GACE+M,IAA2BrT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,gBAAiB,GAC5EsT,IAA2BtT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6NAA8N,GACxRwT,IAA2BxT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,0HACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,oEACN0I,IAAK,uBACJ,iBACU/I,EAAAA,EAAAA,IAAiB,qEAC5B,GACEmN,IAA2BzT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iPAAkP,GAC5S0T,IAA2B1T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gNAAiN,GAC3Q2T,IAA2B3T,EAAAA,EAAAA,GAAoB,KAAM,KAAM,6DAA8D,GACzH4T,IAA2B5T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2HAA4H,GACtL6T,IAA2B7T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,mPACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,gDAC5B,GACEwN,IAA2B9T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4JAA6J,GACvN+T,IAA2B/T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,sRAAuR,GACjVgU,IAA2BhU,EAAAA,EAAAA,GAAoB,IAAK,KAAM,sGAAuG,GACjKkV,IAA2BlV,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sBAAuB,GAClFmV,IAA2BnV,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4RAA6R,GACvVoV,IAA2BpV,EAAAA,EAAAA,GAAoB,MAAO,KAAM,oIAAqI,GACjMqV,IAA2BrV,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,gLACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,+CAClCsG,EAAAA,EAAAA,IAAiB,OAC5B,GACEgP,IAA2BtV,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,gDACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,+CAClCsG,EAAAA,EAAAA,IAAiB,qGAC5B,GACEiP,IAA2BvV,EAAAA,EAAAA,GAAoB,MAAO,KAAM,oHAAqH,GACjLwV,IAA2BxV,EAAAA,EAAAA,GAAoB,IAAK,KAAM,oHAAqH,GAU/KiS,GAAiB,CACrBP,IAAK,aACLtQ,IAAK,mDACL4H,YAAa,CAAC5G,EAAAA,IACdN,MAAO,wCACPiH,YAAa,oJACbyI,cAAe,wFACfC,iBAAkB,wCAClBE,oBAAqB,oJACrB5Q,OAAQkB,EAAAA,GACR6G,OAAQpH,EAAAA,GACRwH,YAAa,8HACbC,YAAa,8HACbC,QAAS,IAAIX,KAAK,4BAClBY,QAAS,IAAIZ,KAAK,6BAEdyJ,GAAc,CAClBD,SAGF,QAA4BxP,EAAAA,EAAAA,IAAiB,IACxCyP,GACHxP,OAAQ,iCACRO,MAAMC,GAGR,MAAO,CAAC3C,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,GACpD9F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,wqBAEnBD,EAAG,OAEJnG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,2gBAEnBD,EAAG,SAGP4E,EAAAA,EAAAA,IAAakH,EAAAA,EAAU,CACrBrQ,MAAOmQ,GAAKnQ,MACZiH,YAAakJ,GAAKlJ,YAClB3H,IAAK,0BAA0B6Q,GAAK7Q,MACpC4H,YAAaiJ,GAAKjJ,YAClBE,YAAa+I,GAAK/I,YAClBC,YAAa8I,GAAK9I,YAClBC,QAAS6I,GAAK7I,QACdC,QAAS4I,GAAK5I,QACdtI,OAAQkR,GAAKlR,OACb+H,OAAQmJ,GAAKnJ,QACZ,CACD7C,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB1D,EACAsB,EACAC,EACAE,EACAC,GACA+G,EAAAA,EAAAA,IAAagO,EAAAA,EAAkB,CAAExM,KAAM,QAAU,CAC/CxG,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,2KAEnBD,EAAG,IAELlC,EACAC,EACAC,GACArE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,gFACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,iCAAmC,CAC5EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,eAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,8SAEnBhC,GACA2G,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,CAAE/G,OAAQ,QAAU,CAC1CrH,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB3B,KAEF8B,EAAG,KAELrG,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,SACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,iCAAmC,CAC5EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,eAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,UACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,mCAAqC,CAC9EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,0FAEnB2E,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB1B,KAEF6B,EAAG,IAEL5B,EACAC,EACAC,EACAC,GACA5E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,sEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,qCAAuC,CAChFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,yBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,uLAEnBzB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAyM,EACAC,EACAC,EACAC,EACAC,GACAvH,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,CAAE/G,OAAQ,QAAU,CAC1CrH,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBuM,KAEFpM,EAAG,IAELqM,EACAC,EACAC,EACAC,EACAC,GACA9S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,sEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,6CAA+C,CACxFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,+BAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,iDACjByM,GACAzM,EAAAA,EAAAA,IAAiB,+DAEnBtG,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,2DACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,iCAAmC,CAC5EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,eAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,2KAEnB0M,EACAC,GACAhI,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,CAAE/G,OAAQ,QAAU,CAC1CrH,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBgN,KAEF7M,EAAG,IAEL8M,GACAC,GACAC,GACAC,GACAE,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAkB,GACAC,IACAlK,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,CAAE/G,OAAQ,QAAU,CAC1CrH,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBkP,MAEF/O,EAAG,IAELgP,GACAC,GACAC,GACAC,MAEFnP,EAAG,GACF,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,YAClH,GAAG,CAER,ICzbA,MAAMzC,GAAc,GAEpB,S,mSCEA,MAAMpB,GAA0BxC,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,sEAAwE,oLAAqL,GAC9TC,GAA0B9D,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,oBACPsC,IAAK,uEACLC,IAAK,yGACLtE,MAAO,yGACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,EACtCsG,EAAAA,EAAAA,IAAiB,2IACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN7E,MAAO,kCACPuN,IAAK,YACJ,cACU/I,EAAAA,EAAAA,IAAiB,SAE9B,GACEvC,GAA0B/D,EAAAA,EAAAA,GAAoB,KAAM,KAAM,qCAAsC,GAChGiE,GAA0BjE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,cACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,kBACpCsG,EAAAA,EAAAA,IAAiB,iCACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,SACpCsG,EAAAA,EAAAA,IAAiB,0EAC5B,GACEpC,GAA0BlE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,6JACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gEACNyI,OAAQ,SACRC,IAAK,uBACJ,0BACU/I,EAAAA,EAAAA,IAAiB,OAC5B,GACEnC,GAA0BnE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4OAA6O,GACtSoE,GAA0BpE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iVAAkV,GAC3YqE,GAA0BrE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,eACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,kBACpCsG,EAAAA,EAAAA,IAAiB,UACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,eACpCsG,EAAAA,EAAAA,IAAiB,yLAC5B,GACEhC,GAA0BtE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,2BACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,kBACpCsG,EAAAA,EAAAA,IAAiB,+GACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,eACpCsG,EAAAA,EAAAA,IAAiB,kBAC5B,GACE/B,GAA2BvE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,0DACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,kBACpCsG,EAAAA,EAAAA,IAAiB,sDACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,eACpCsG,EAAAA,EAAAA,IAAiB,OAC5B,GACE9B,GAA2BxE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sCAAuC,GAClGyE,GAA2BzE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6OAA8O,GACxS0E,GAA2B1E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qDAAsD,GAChH2E,GAA2B3E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDsG,EAAAA,EAAAA,IAAiB,qCACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,mBACpCsG,EAAAA,EAAAA,IAAiB,8CAC5B,GACE1B,GAA2B5E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,gGAAiG,GAC5J6E,GAA2B7E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,uHAAwH,GACnL8E,GAA2B9E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,6IAA8I,GACzM+E,GAA2B/E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,+EAAgF,GAC3IgF,GAA2BhF,EAAAA,EAAAA,GAAoB,MAAO,CAC1D6D,MAAO,aACPsC,IAAK8O,EACL7O,IAAK,qCACLtE,MAAO,sCACN,MAAO,GACJmD,GAA2BjF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0EAA2E,GACrIkF,GAA2BlF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,yPAA0P,GACpTmF,GAA2BnF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,yKAA0K,GACpOoF,GAA2BpF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wIAAyI,GACnMqF,GAA2BrF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,yBACpCsG,EAAAA,EAAAA,IAAiB,yDAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,qBACpCsG,EAAAA,EAAAA,IAAiB,iFAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,6BACpCsG,EAAAA,EAAAA,IAAiB,qGAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,oBACpCsG,EAAAA,EAAAA,IAAiB,uHAE9B,GACEhB,GAA2BtF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,4CAA6C,GACxGuF,GAA2BvF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uGAAwG,GAClKwF,GAA2BxF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,cACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,kBACpCsG,EAAAA,EAAAA,IAAiB,QAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,cACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,yBACpCsG,EAAAA,EAAAA,IAAiB,QAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,cACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,+BACpCsG,EAAAA,EAAAA,IAAiB,QAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,WACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,4BACpCsG,EAAAA,EAAAA,IAAiB,uCAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,0FACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,eACpCsG,EAAAA,EAAAA,IAAiB,QAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,qBACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,8CAEjD,GACEyF,GAA2BzF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,gJACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,8CACpCsG,EAAAA,EAAAA,IAAiB,+FAC5B,GACEZ,GAA2B1F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,YACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,6CACpCsG,EAAAA,EAAAA,IAAiB,0TAC5B,GACEX,GAA2B3F,EAAAA,EAAAA,GAAoB,MAAO,CAC1D6D,MAAO,aACPsC,IAAK+S,EACL9S,IAAK,kDACLtE,MAAO,mDACN,MAAO,GACJsQ,GAA2BpS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,+BAAgC,GAC3FqS,GAA2BrS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uDAAwD,GAClHsS,GAA2BtS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,UACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,oBACpCsG,EAAAA,EAAAA,IAAiB,2BAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,WACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,YACpCsG,EAAAA,EAAAA,IAAiB,sBAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,qCAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,WACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,cAEtCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,WACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,WAEjD,GACEuS,GAA2BvS,EAAAA,EAAAA,GAAoB,MAAO,CAC1D6D,MAAO,aACPsC,IAAKgT,EACL/S,IAAK,gDACLtE,MAAO,iDACN,MAAO,GACJ0Q,GAA2BxS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,4CAA6C,GACxGyS,GAA2BzS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,uIACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,6DACpCsG,EAAAA,EAAAA,IAAiB,0DAC5B,GACEoM,GAA2B1S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,iFACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,8BACpCsG,EAAAA,EAAAA,IAAiB,mCACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,gBACpCsG,EAAAA,EAAAA,IAAiB,yEAC5B,GACEqM,GAA2B3S,EAAAA,EAAAA,GAAoB,MAAO,KAAM,yCAA0C,GACtG4S,GAA2B5S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8IAA+I,GACzM6S,GAA2B7S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,YACpCsG,EAAAA,EAAAA,IAAiB,oDAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,WACpCsG,EAAAA,EAAAA,IAAiB,oEAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,2BACpCsG,EAAAA,EAAAA,IAAiB,mBAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,YACpCsG,EAAAA,EAAAA,IAAiB,oBAE9B,GACEwM,GAA2B9S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uQAAwQ,GAClU+S,GAA2B/S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,gCAAiC,GAC5FgT,GAA2BhT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,+GAAgH,GAC1KiT,IAA2BjT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2XAA4X,GACtbkT,IAA2BlT,EAAAA,EAAAA,GAAoB,MAAO,KAAM,qbAAsb,GAClfmT,IAA2BnT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,sFAAuF,GACjJoT,IAA2BpT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yGAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,gHAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,4CACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,gDAEtCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,qHAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sHAC3C,GASEiS,GAAiB,CACrBP,IAAK,eACLtQ,IAAK,oCACL4H,YAAa,CAAC5G,EAAAA,IACdN,MAAO,+BACPiH,YAAa,0IACbyI,cAAe,6EACfC,iBAAkB,+BAClBE,oBAAqB,0IACrB5Q,OAAQiB,EAAAA,GACR8G,OAAQpH,EAAAA,GACRwH,YAAa,gGACbC,YAAa,gGACbC,QAAS,IAAIX,KAAK,4BAClBY,QAAS,IAAIZ,KAAK,6BAGdyJ,GAAc,CAClBD,SAGF,QAA4BxP,EAAAA,EAAAA,IAAiB,IACxCyP,GACHxP,OAAQ,qBACRO,MAAMC,GAGR,MAAO,CAAC3C,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,GACpD9F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,6pBAEnBD,EAAG,SAGP4E,EAAAA,EAAAA,IAAakH,EAAAA,EAAU,CACrBrQ,MAAOmQ,GAAKnQ,MACZiH,YAAakJ,GAAKlJ,YAClB3H,IAAK,0BAA0B6Q,GAAK7Q,MACpC4H,YAAaiJ,GAAKjJ,YAClBE,YAAa+I,GAAK/I,YAClBC,YAAa8I,GAAK9I,YAClBC,QAAS6I,GAAK7I,QACdC,QAAS4I,GAAK5I,QACdtI,OAAQkR,GAAKlR,OACb+H,OAAQmJ,GAAKnJ,QACZ,CACD7C,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB1D,EACAsB,EACAC,EACAE,EACAC,EACAC,EACAC,GACA6G,EAAAA,EAAAA,IAAaqJ,EAAAA,EAAS,CACpB7H,KAAM,OACNC,QAAS,KACT5K,MAAO,gCACN,CACDmE,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB7B,EACAC,EACAC,KAEF8B,EAAG,IAEL7B,EACAC,EACAC,GACA1E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,CAC9B2E,EACAC,EACAC,GACA7E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,8IACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,6CAA+C,CACxFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,qCAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,4BAEnBxB,EACAC,IAEFC,GACAiG,EAAAA,EAAAA,IAAaqJ,EAAAA,EAAS,CACpB7H,KAAM,OACNC,QAAS,KACT5K,MAAO,iCACN,CACDmE,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBjB,EACAC,EACAC,EACAC,EACAC,KAEFgB,EAAG,IAELf,EACAC,EACAC,EACAC,EACAC,EACAC,EACAyM,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACAhT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,8LACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,cAAgB,CACzDC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,sBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,OAEnB2M,GACAC,GACAC,GACAC,MAEF/M,EAAG,GACF,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,YAClH,GAAG,CAER,IC/XA,MAAMzC,GAAc,GAEpB,S,sNCAA,MAAMpB,GAA0BxC,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,sEAAwE,0JAA2J,GACpSC,GAA0B9D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,0SACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,eAClCsG,EAAAA,EAAAA,IAAiB,OACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,kBAClCsG,EAAAA,EAAAA,IAAiB,OACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,WAClCsG,EAAAA,EAAAA,IAAiB,oDAC5B,GACEvC,GAA0B/D,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,oBACPsC,IAAK,0DACLC,IAAK,2CACLtE,MAAO,2CACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,EACtCsG,EAAAA,EAAAA,IAAiB,8EACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN7E,MAAO,kCACPuN,IAAK,YACJ,cACU/I,EAAAA,EAAAA,IAAiB,SAE9B,GACErC,GAA0BjE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,4BAA6B,GACvFkE,GAA0BlE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,6IACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,SAClCsG,EAAAA,EAAAA,IAAiB,gIAC5B,GACEnC,GAA0BnE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,8BAA+B,GACzFoE,GAA0BpE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,yHACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,gBACpCsG,EAAAA,EAAAA,IAAiB,4DAC5B,GACEjC,GAA0BrE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,mBAAoB,GAC9EsE,GAA0BtE,EAAAA,EAAAA,GAAoB,MAAO,KAAM,ufAAwf,GACnjBuE,GAA2BvE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,SACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,sDACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,8DACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,6BACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,wBAClCsG,EAAAA,EAAAA,IAAiB,yBACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,wBAClCsG,EAAAA,EAAAA,IAAiB,4FAC5B,GACE9B,GAA2BxE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yDAA0D,GACrHyE,GAA2BzE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8KAA+K,GACzO0E,GAA2B1E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,0BACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,0KACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,0EAC5B,GACE3B,GAA2B3E,EAAAA,EAAAA,GAAoB,MAAO,CAC1D6D,MAAO,aACPsC,IAAK8O,EACL7O,IAAK,mBACLtE,MAAO,oBACN,MAAO,GACJ8C,GAA2B5E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,qCAAsC,GACjG6E,GAA2B7E,EAAAA,EAAAA,GAAoB,SAAU,KAAM,gBAAiB,GAChF8E,GAA2B9E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,uEACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,yCAC5B,GACEvB,GAA2B/E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,aACpCsG,EAAAA,EAAAA,IAAiB,2FACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,YAC5B,GACEtB,GAA2BhF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,WACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,wCACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,YAC5B,GACErB,GAA2BjF,EAAAA,EAAAA,GAAoB,SAAU,KAAM,eAAgB,GAC/EkF,GAA2BlF,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,eAAgB,GAC7EmF,GAA2BnF,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,mBAAoB,GACjFoF,EAAc,CAAEvB,MAAO,gDACvBwB,GAA2BrF,EAAAA,EAAAA,GAAoB,KAAM,CAAE6D,MAAO,cAAgB,qBAAsB,GACpGyB,EAAc,CAAEzB,MAAO,kEACvB0B,GAA2BvF,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,qCAAuC,8BAA+B,GACtI2B,EAAc,CAAE3B,MAAO,8BACvB4B,GAA2BzF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,6BAA+B,gNACjF,GACE6B,GAA2B1F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4RAA6R,GACvV2F,GAA2B3F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mQAAoQ,GAC9ToS,EAAc,CAAEvO,MAAO,kEACvBwO,GAA2BrS,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,qCAAuC,gCAAiC,GACxIyO,EAAc,CAAEzO,MAAO,8BACvB0O,GAA2BvS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,6BAA+B,qJACjF,GACE2O,GAA2BxS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,yCACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,UACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,2BACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,sGACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,6BAC5B,GACEmM,GAA2BzS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,yPACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,mBACpCsG,EAAAA,EAAAA,IAAiB,qGACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,sBACpCsG,EAAAA,EAAAA,IAAiB,OAC5B,GACEoM,EAAc,CAAE7O,MAAO,kEACvB8O,GAA2B3S,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,qCAAuC,4DAA6D,GACpK+O,EAAc,CAAE/O,MAAO,8BACvBgP,GAA2B7S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,6BAA+B,0CACjF,GACEiP,GAA2B9S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,+BACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,uRAC5B,GACEyM,IAA2B/S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6GAA8G,GAgBxKiS,GAAiB,CACrBP,IAAK,eACLtQ,IAAK,gCACL4H,YAAa,CAAC5G,EAAAA,IACdN,MAAO,sBACPiH,YAAa,yJACbyI,cAAe,gEACfC,iBAAkB,sBAClBE,oBAAqB,yJACrB5Q,OAAQiB,EAAAA,GACR8G,OAAQpH,EAAAA,GACRwH,YAAa,gGACbC,YAAa,gGACbC,QAAS,IAAIX,KAAK,4BAClBY,QAAS,IAAIZ,KAAK,6BAGdyJ,GAAc,CAClBD,SAGF,QAA4BxP,EAAAA,EAAAA,IAAiB,IACxCyP,GACHxP,OAAQ,iBACRO,MAAMC,GAGR,MAAO,CAAC3C,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,GACpD9F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,gpBAEnBD,EAAG,SAGP4E,EAAAA,EAAAA,IAAakH,EAAAA,EAAU,CACrBrQ,MAAOmQ,GAAKnQ,MACZiH,YAAakJ,GAAKlJ,YAClB3H,IAAK,0BAA0B6Q,GAAK7Q,MACpC4H,YAAaiJ,GAAKjJ,YAClBE,YAAa+I,GAAK/I,YAClBC,YAAa8I,GAAK9I,YAClBC,QAAS6I,GAAK7I,QACdC,QAAS4I,GAAK5I,QACdtI,OAAQkR,GAAKlR,OACb+H,OAAQmJ,GAAKnJ,QACZ,CACD7C,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB1D,EACAsB,EACAC,EACAE,EACAC,GACAlE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,sEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,mCAAqC,CAC9EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,sCAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,8IAEnBnC,EACAC,GACApE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,OACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,8BAAgC,CACzEC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,0UAEnBtG,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,2CACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CACnCG,GAAI,uCACJlE,MAAO,8BACN,CACDmE,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,oBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,kEAEnBjC,GACArE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,wEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,mCAAqC,CAC9EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,UAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,6CACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,kCAAoC,CAC7EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,yCACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,kCAAoC,CAC7EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,qDAEnB2E,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB5B,KAEF+B,EAAG,IAEL9B,EACAC,EACAC,EACAC,EACAC,EACAC,GACA5E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,qPACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,eAAiB,CAC1DC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,uBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,0DAEnBtG,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,+DACjBzB,GACAyB,EAAAA,EAAAA,IAAiB,yZACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,6CAA+C,CACxFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,oBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,oBAEnBxB,GACA9E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,CAC9B+E,EACAC,GACAhF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,CAC9BiF,GACAqB,EAAAA,EAAAA,IAAiB,UACjBpB,GACAoB,EAAAA,EAAAA,IAAiB,mCACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,iCAAmC,CAC5EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,QAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,SACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,oCAAsC,CAC/EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,WAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,iBACjBnB,GACAmB,EAAAA,EAAAA,IAAiB,UAGrBtG,EAAAA,EAAAA,GAAoB,MAAOoF,EAAa,CACtCC,GACArF,EAAAA,EAAAA,GAAoB,MAAOsF,EAAa,EACtC2F,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOsJ,EAAAA,IAAa,CAC/BC,GAAI,MACJ/Q,MAAO,QACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,EAAG2O,UAAW,EAC9B5J,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOyJ,EAAAA,IAAmB,CACrCF,GAAI,KACJ/Q,MAAO,kGACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBX,GACAvF,EAAAA,EAAAA,GAAoB,OAAQwF,EAAa,EACvCyF,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO0J,GAAkB,CACpClR,OAAOwI,EAAAA,EAAAA,IAAgB,CAACwI,EAAO,cAAgB,WAAY,sBAC3D,cAAe,QACd,KAAM,EAAG,CAAC,eAGjBxO,EAAG,GACF,OACH4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO2J,EAAAA,IAAkB,CAAEnR,MAAO,cAAgB,CAC7DoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBT,EACAC,EACAC,KAEFU,EAAG,OAGPA,EAAG,OAGPrG,EAAAA,EAAAA,GAAoB,MAAOoS,EAAa,EACtCnH,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOsJ,EAAAA,IAAa,CAC/BC,GAAI,MACJ/Q,MAAO,QACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,EAAG2O,UAAW,EAC9B5J,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOyJ,EAAAA,IAAmB,CACrCF,GAAI,KACJ/Q,MAAO,kGACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBmM,GACArS,EAAAA,EAAAA,GAAoB,OAAQsS,EAAa,EACvCrH,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO0J,GAAkB,CACpClR,OAAOwI,EAAAA,EAAAA,IAAgB,CAACwI,EAAO,cAAgB,WAAY,sBAC3D,cAAe,QACd,KAAM,EAAG,CAAC,eAGjBxO,EAAG,GACF,OACH4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO2J,EAAAA,IAAkB,CAAEnR,MAAO,cAAgB,CAC7DoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBqM,EACAC,EACAC,KAEFpM,EAAG,OAGPA,EAAG,OAGPrG,EAAAA,EAAAA,GAAoB,MAAO0S,EAAa,EACtCzH,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOsJ,EAAAA,IAAa,CAC/BC,GAAI,MACJ/Q,MAAO,QACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,EAAG2O,UAAW,EAC9B5J,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAOyJ,EAAAA,IAAmB,CACrCF,GAAI,KACJ/Q,MAAO,kGACN,CACDoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtByM,GACA3S,EAAAA,EAAAA,GAAoB,OAAQ4S,EAAa,EACvC3H,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO0J,GAAkB,CACpClR,OAAOwI,EAAAA,EAAAA,IAAgB,CAACwI,EAAO,cAAgB,WAAY,sBAC3D,cAAe,QACd,KAAM,EAAG,CAAC,eAGjBxO,EAAG,GACF,OACH4E,EAAAA,EAAAA,KAAaI,EAAAA,EAAAA,IAAO2J,EAAAA,IAAkB,CAAEnR,MAAO,cAAgB,CAC7DoC,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB2M,EACAC,EACAC,MAEF1M,EAAG,OAGPA,EAAG,WAKXA,EAAG,GACF,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,YAClH,GAAG,CAER,ICvcA,MAAMzC,GAAc,GAEpB,S,uJCFA,MAAMpB,GAA0BxC,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,sEAAwE,kSAAmS,GAC5aC,GAA0B9D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8MAA+M,GACxQ+D,GAA0B/D,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,oBACPsC,IAAK,0EACLC,IAAK,mEACLtE,MAAO,mEACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,sEACnD,GACEiE,GAA0BjE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,2BAA4B,GACtFkE,GAA0BlE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,oYAAqY,GAC9bmE,GAA0BnE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,+XAAgY,GACzboE,GAA0BpE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sBAAuB,GACjFqE,GAA0BrE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0aAA2a,GACpesE,GAA0BtE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wUAAyU,GAClYuE,GAA2BvE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,8CAA+C,GAC1GwE,GAA2BxE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uZAAwZ,GACldyE,GAA2BzE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gcAAic,GAC3f0E,GAA2B1E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mXAAoX,GAC9a2E,GAA2B3E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0QAA2Q,GACrU4E,GAA2B5E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,kPACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACNyI,OAAQ,SACRC,IAAK,uBACJ,sBACU/I,EAAAA,EAAAA,IAAiB,kEAC5B,GACEzB,GAA2B7E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,2BAA4B,GACvF8E,GAA2B9E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2ZAA4Z,GACtd+E,GAA2B/E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,uCAAwC,GACnGgF,GAA2BhF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,kBAAmB,GAC9EiF,GAA2BjF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4SAA6S,GACvWkF,GAA2BlF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,+RAAgS,GAC1VmF,GAA2BnF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uGAAwG,GAClKoF,GAA2BpF,EAAAA,EAAAA,GAAoB,QAAS,KAAM,EACrDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,gBAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,qBAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oBAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,qBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,aAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,WAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,cAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,iBAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,YAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,WAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,eAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,OAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,UAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,YAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,aAElCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,kBAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,UAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,WAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,iBAE7C,GAQSiS,EAAiB,CAC5BP,IAAK,MACLtQ,IAAK,wCACL4H,YAAa,CAAC5G,EAAAA,IACdN,MAAO,8BACPiH,YAAa,gKACb4I,oBAAqB,0HACrBH,cAAe,+EACfC,iBAAkB,wCAClB1Q,OAAQiB,EAAAA,GACR8G,OAAQpH,EAAAA,GACRwH,YAAa,wGACbC,YAAa,wGACbC,QAAS,IAAIX,KAAK,4BAClBY,QAAS,IAAIZ,KAAK,6BAGdyJ,EAAc,CAClBD,QAGF,OAA4BxP,EAAAA,EAAAA,IAAiB,IACxCyP,EACHxP,OAAQ,uBACRO,MAAMC,GAGR,MAAO,CAAC3C,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaoM,EAAAA,EAAU,CAC3CrQ,MAAOmQ,EAAKnQ,MACZiH,YAAakJ,EAAKlJ,YAClB3H,IAAK,0BAA0B6Q,EAAK7Q,MACpC4H,YAAaiJ,EAAKjJ,YAClBE,YAAa+I,EAAK/I,YAClBC,YAAa8I,EAAK9I,YAClBC,QAAS6I,EAAK7I,QACdC,QAAS4I,EAAK5I,QACdtI,OAAQkR,EAAKlR,OACb+H,OAAQmJ,EAAKnJ,QACZ,CACD7C,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB1D,EACAsB,EACAC,EACAE,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACA/E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,qDACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,+BAAiC,CAC1EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,wBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,+DACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,mCAAqC,CAC9EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,UAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,kEAEnBtG,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,+KACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,kCAAoC,CAC7EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,wIAEnBtB,EACAC,GACAjF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,iSACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CACnCG,GAAI,iDACJlE,MAAO,uBACPsE,IAAK,wBACJ,CACDH,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,yBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,OAEnBpB,EACAC,EACAC,KAEFiB,EAAG,GACF,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,UAAU,CAE/H,IC9LA,MAAMzC,EAAc,EAEpB,O,kLCAA,MAAMpB,GAA0BxC,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,sEAAwE,qPAAsP,GAC/XC,GAA0B9D,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,oBACPsC,IAAK,4CACLC,IAAK,2DACLtE,MAAO,2DACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,EACtCsG,EAAAA,EAAAA,IAAiB,8FACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN7E,MAAO,kCACPuN,IAAK,YACJ,cACU/I,EAAAA,EAAAA,IAAiB,SAE9B,GACEvC,GAA0B/D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,mIACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,0GAC/C,GACEiE,GAA0BjE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wKAAyK,GAClOkE,GAA0BlE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,sPAAuP,GAChTmE,GAA0BnE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,mHACpCsG,EAAAA,EAAAA,IAAiB,kFAC5B,GACElC,GAA0BpE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,0BAA2B,GACrFqE,GAA0BrE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,oJACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,kBACpCsG,EAAAA,EAAAA,IAAiB,SACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,cACpCsG,EAAAA,EAAAA,IAAiB,uDAC5B,GACEhC,GAA0BtE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,iBACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,kBACpCsG,EAAAA,EAAAA,IAAiB,iFACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,qBACpCsG,EAAAA,EAAAA,IAAiB,UACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,qBACpCsG,EAAAA,EAAAA,IAAiB,OAC5B,GACE/B,GAA2BvE,EAAAA,EAAAA,GAAoB,MAAO,CAC1D6D,MAAO,aACPsC,IAAK,sDACLC,IAAK,6BACLtE,MAAO,8BACN,MAAO,GACJ0C,GAA2BxE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,uCACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,mBACpCsG,EAAAA,EAAAA,IAAiB,6DACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,cACpCsG,EAAAA,EAAAA,IAAiB,wJAC5B,GACE7B,GAA2BzE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8OAA+O,GACzS0E,GAA2B1E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,2KACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,cACpCsG,EAAAA,EAAAA,IAAiB,OAC5B,GACE3B,GAA2B3E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yCAA0C,GACrG4E,GAA2B5E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8IAA+I,GACzM6E,GAA2B7E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mKAAoK,GAC9N8E,GAA2B9E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,4EACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,yBACN0I,IAAK,uBACJ,UACU/I,EAAAA,EAAAA,IAAiB,gLAC5B,GACEvB,GAA2B/E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,uCAAwC,GACnGgF,GAA2BhF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,iJACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,yBAC5B,GACErB,GAA2BjF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,6CACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,oCAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,gDACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,4CAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,8CACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,QAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,gDACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,qCACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,QAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,SACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,sCACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,QAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,gDACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,qCACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,QAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,SACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,qDACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,QAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,0EAC3C,GACEkF,GAA2BlF,EAAAA,EAAAA,GAAoB,MAAO,CAC1D6D,MAAO,aACPsC,IAAK8O,EACL7O,IAAK,0BACLtE,MAAO,2BACN,MAAO,GACJqD,GAA2BnF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,yLACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,UACpCsG,EAAAA,EAAAA,IAAiB,OAC5B,GACElB,GAA2BpF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,sHAAuH,GACjLqF,GAA2BrF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,mOACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,cACpCsG,EAAAA,EAAAA,IAAiB,0DAC5B,GACEhB,GAA2BtF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0PAA2P,GACrTuF,GAA2BvF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iHAAkH,GAC5KwF,GAA2BxF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,wBAAyB,GACpFyF,GAA2BzF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wKAAyK,GACnO0F,GAA2B1F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,qFACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,YACpCsG,EAAAA,EAAAA,IAAiB,0HAC5B,GACEX,GAA2B3F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mLAAoL,GAC9OoS,GAA2BpS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4DAA6D,GACvHqS,GAA2BrS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,kCAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sHAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oEAC3C,GACEsS,GAA2BtS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,sJAAuJ,GACjNuS,GAA2BvS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,wEAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sFAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,oFAC3C,GACEwS,GAA2BxS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,mCAAoC,GAC/FyS,GAA2BzS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2OAA4O,GACtS0S,GAA2B1S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,6BAA8B,GACzF2S,GAA2B3S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4IAA6I,GASvMiS,EAAiB,CACrBP,IAAK,eACLtQ,IAAK,yBACL4H,YAAa,CAAC5G,EAAAA,IACdN,MAAO,mBACPiH,YAAa,+JACbyI,cAAe,kDACfC,iBAAkB,mBAClBE,oBAAqB,+JACrB5Q,OAAQiB,EAAAA,GACR8G,OAAQpH,EAAAA,GACRwH,YAAa,0EACbC,YAAa,0EACbC,QAAS,IAAIX,KAAK,4BAClBY,QAAS,IAAIZ,KAAK,6BAGdyJ,EAAc,CAClBD,QAGF,OAA4BxP,EAAAA,EAAAA,IAAiB,IACxCyP,EACHxP,OAAQ,YACRO,MAAMC,GAGR,MAAO,CAAC3C,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,GACpD9F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,koBAEnBD,EAAG,SAGP4E,EAAAA,EAAAA,IAAakH,EAAAA,EAAU,CACrBrQ,MAAOmQ,EAAKnQ,MACZiH,YAAakJ,EAAKlJ,YAClB3H,IAAK,0BAA0B6Q,EAAK7Q,MACpC4H,YAAaiJ,EAAKjJ,YAClBE,YAAa+I,EAAK/I,YAClBC,YAAa8I,EAAK9I,YAClBC,QAAS6I,EAAK7I,QACdC,QAAS4I,EAAK5I,QACdtI,OAAQkR,EAAKlR,OACb+H,OAAQmJ,EAAKnJ,QACZ,CACD7C,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB1D,EACAsB,EACAC,EACAE,EACAC,EACAC,EACAC,EACAC,GACArE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,iEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,iCAAmC,CAC5EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,gBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,gGACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,8BAAgC,CACzEC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,kBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,mEAEnBtG,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,yDACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CACnCG,GAAI,uCACJlE,MAAO,8BACN,CACDmE,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,oBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,iGAEnBhC,EACAC,EACAC,EACAC,EACAC,EACAC,GACA3E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,kDACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,qDAAuD,CAChGC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,oBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,SACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,iCAAmC,CAC5EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,eAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,yEAEnB1B,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACA8F,EAAAA,EAAAA,IAAaqJ,EAAAA,EAAS,CACpB7H,KAAM,OACNC,QAAS,KACT5K,MAAO,0CACN,CACDmE,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBd,EACAC,EACAC,EACAC,KAEFc,EAAG,IAELb,EACAC,EACAC,EACAC,EACAyM,EACAC,GACApH,EAAAA,EAAAA,IAAaqJ,EAAAA,EAAS,CACpB7H,KAAM,OACNC,QAAS,KACT5K,MAAO,sCACN,CACDmE,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBoM,EACAC,KAEFlM,EAAG,IAELmM,EACAC,GACAzS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,iBACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,iBAAmB,CAC5DC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,sBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,oEAEnBoM,EACAC,GACA3S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,kCAAoC,CAC7EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,4GAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,kCAAoC,CAC7EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,oDAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,oCAAsC,CAC/EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,UAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,OACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,qCAAuC,CAChFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,WAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,WACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,sCAAwC,CACjFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,YAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,4DAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,qCAAuC,CAChFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,oBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,8GAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,mCAAqC,CAC9EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,kBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,0EAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BiL,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,mCAAqC,CAC9EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,kBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,kEAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,gFACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,oDAAsD,CAC/FC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,YAIvBD,EAAG,GACF,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,YAClH,GAAG,CAER,IChbA,MAAMzC,EAAc,EAEpB,O,0KCAA,MAAMpB,GAA0BxC,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,sEAAwE,6TAA8T,GACvcC,GAA0B9D,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,oBACPsC,IAAK,uFACLC,IAAK,mEACLtE,MAAO,mEACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,EACtCsG,EAAAA,EAAAA,IAAiB,sGACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN7E,MAAO,kCACPuN,IAAK,YACJ,cACU/I,EAAAA,EAAAA,IAAiB,SAE9B,GACEvC,GAA0B/D,EAAAA,EAAAA,GAAoB,KAAM,KAAM,8BAA+B,GACzFiE,GAA0BjE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,8JACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,eACpCsG,EAAAA,EAAAA,IAAiB,OACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,YACpCsG,EAAAA,EAAAA,IAAiB,WACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,cACpCsG,EAAAA,EAAAA,IAAiB,OAC5B,GACEpC,GAA0BlE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,sFACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,SACpCsG,EAAAA,EAAAA,IAAiB,SACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,+DACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,eACpCsG,EAAAA,EAAAA,IAAiB,gBACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,SACpCsG,EAAAA,EAAAA,IAAiB,cACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,eACpCsG,EAAAA,EAAAA,IAAiB,iBACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,cACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,UACpCsG,EAAAA,EAAAA,IAAiB,6GAC5B,GACEnC,GAA0BnE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,8LACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,SACpCsG,EAAAA,EAAAA,IAAiB,uBACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,eACpCsG,EAAAA,EAAAA,IAAiB,UACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,UACpCsG,EAAAA,EAAAA,IAAiB,uBACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,cACpCsG,EAAAA,EAAAA,IAAiB,6DAC5B,GACElC,GAA0BpE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,+BACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,SACpCsG,EAAAA,EAAAA,IAAiB,UACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,6JAC5B,GACEjC,GAA0BrE,EAAAA,EAAAA,GAAoB,MAAO,CACzD6D,MAAO,aACPsC,IAAK8O,EACL7O,IAAK,2DACLtE,MAAO,4DACN,MAAO,GACJwC,GAA0BtE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,6CAA8C,GACxGuE,GAA2BvE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,kTACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,cACpCsG,EAAAA,EAAAA,IAAiB,OAC5B,GACE9B,GAA2BxE,EAAAA,EAAAA,GAAoB,SAAU,KAAM,kBAAmB,GAClFyE,GAA2BzE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,+IAAgJ,GAC1M0E,GAA2B1E,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QAAS,GACxE2E,GAA2B3E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,mVACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,mBACpCsG,EAAAA,EAAAA,IAAiB,OAC5B,GACE1B,GAA2B5E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,uIAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,iBACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,SACpCsG,EAAAA,EAAAA,IAAiB,qFAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,WACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,SACpCsG,EAAAA,EAAAA,IAAiB,cACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,eACpCsG,EAAAA,EAAAA,IAAiB,8CAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,aACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,mBACpCsG,EAAAA,EAAAA,IAAiB,+BACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,eACpCsG,EAAAA,EAAAA,IAAiB,gCAE9B,GACEzB,GAA2B7E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,+BAAgC,GAC3F8E,GAA2B9E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iRAAkR,GAC5U+E,GAA2B/E,EAAAA,EAAAA,GAAoB,IAAK,CACxD2G,KAAM,yBACN0I,IAAK,uBACJ,SAAU,GACPrK,GAA2BhF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2OAA4O,GACtSiF,GAA2BjF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,wCAAyC,GACpGkF,GAA2BlF,EAAAA,EAAAA,GAAoB,SAAU,KAAM,OAAQ,GACvEmF,GAA2BnF,EAAAA,EAAAA,GAAoB,MAAO,KAAM,oSAAqS,GACjWoF,GAA2BpF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,oGACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,sBAC/C,GACEqF,GAA2BrF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,6FACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,MACpCsG,EAAAA,EAAAA,IAAiB,cACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,MACpCsG,EAAAA,EAAAA,IAAiB,mBACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,qBACpCsG,EAAAA,EAAAA,IAAiB,gVAC5B,GACEhB,GAA2BtF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,yIACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,4BACN0I,IAAK,uBACJ,qBACU/I,EAAAA,EAAAA,IAAiB,OAC5B,GACEf,GAA2BvF,EAAAA,EAAAA,GAAoB,SAAU,KAAM,sBAAuB,GACtFwF,GAA2BxF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,8EACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,oBACpCsG,EAAAA,EAAAA,IAAiB,wDACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,eACpCsG,EAAAA,EAAAA,IAAiB,+HACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,6CACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,OAC5B,GACEb,GAA2BzF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,yHACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,QACpCsG,EAAAA,EAAAA,IAAiB,0LAC5B,GACEZ,GAA2B1F,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sCAAuC,GAClG2F,GAA2B3F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,0IAA2I,GACrMoS,GAA2BpS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,yBACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,qBAEtCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,yBACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,wEAEtCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,yBACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,4BAEtCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,yBACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,6BAEtCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,yBACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,kCAEtCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,yBACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,wCAEtCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,yBACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,qCAEtCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,yBACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,6BAEtCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,yBACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,aAEtCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,yBACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,qBAEtCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,yBACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,eAEtCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,yBACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,YAEtCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BsG,EAAAA,EAAAA,IAAiB,yBACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,oBAEjD,GACEqS,GAA2BrS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,4FACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,4CACN0I,IAAK,uBACJ,+CACU/I,EAAAA,EAAAA,IAAiB,OAC5B,GACEgM,GAA2BtS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iPAAkP,GAC5SuS,GAA2BvS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,oPAAuP,GACjTwS,GAA2BxS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,kNAAmN,GAC7QyS,GAA2BzS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,uCAAwC,GACnG0S,GAA2B1S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gNAAiN,GAC3Q2S,GAA2B3S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iDAAkD,GAC5G4S,GAA2B5S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,yBACpCsG,EAAAA,EAAAA,IAAiB,gNAC5B,GACEuM,GAA2B7S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,2BACpCsG,EAAAA,EAAAA,IAAiB,8MAC5B,GACEwM,GAA2B9S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,+BACpCsG,EAAAA,EAAAA,IAAiB,+XAC5B,GACEyM,GAA2B/S,EAAAA,EAAAA,GAAoB,SAAU,KAAM,uBAAwB,GACvFgT,GAA2BhT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,cACpCsG,EAAAA,EAAAA,IAAiB,8CACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,8DAC5B,GACE2M,GAA2BjT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,wBACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,qDACN0I,IAAK,uBACJ,0BACU/I,EAAAA,EAAAA,IAAiB,eACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,4CACN0I,IAAK,uBACJ,uBACU/I,EAAAA,EAAAA,IAAiB,oDAC5B,GACE4M,GAA2BlT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,mCAAoC,GAC/FmT,IAA2BnT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,4CACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,2BACpCsG,EAAAA,EAAAA,IAAiB,2DACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,aACpCsG,EAAAA,EAAAA,IAAiB,+QAC5B,GACE8M,IAA2BpT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qTAAsT,GAChXqT,IAA2BrT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,2EACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,0CACN0I,IAAK,uBACJ,kBACU/I,EAAAA,EAAAA,IAAiB,OAC5B,GACEgN,IAA2BtT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,0BAA2B,GACtFwT,IAA2BxT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4PAA6P,GACvTyT,IAA2BzT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,gJACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,4BACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,8BAC5B,GACEoN,IAA2B1T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qFAAsF,GAChJ2T,IAA2B3T,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,SACpCsG,EAAAA,EAAAA,IAAiB,yMAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,kBACpCsG,EAAAA,EAAAA,IAAiB,wIAEnBtG,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAC9BA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,mBACpCsG,EAAAA,EAAAA,IAAiB,8GAE9B,GACEsN,IAA2B5T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iZAAkZ,GAS5ciS,GAAiB,CACrBP,IAAK,eACLtQ,IAAK,uCACL4H,YAAa,CAAC5G,EAAAA,IACdN,MAAO,6BACPiH,YAAa,iJACbyI,cAAe,6FACfC,iBAAkB,6BAClBE,oBAAqB,sIACrB5Q,OAAQiB,EAAAA,GACR8G,OAAQpH,EAAAA,GACRwH,YAAa,8GACbC,YAAa,8GACbC,QAAS,IAAIX,KAAK,4BAClBY,QAAS,IAAIZ,KAAK,6BAGdyJ,GAAc,CAClBD,SAGF,QAA4BxP,EAAAA,EAAAA,IAAiB,IACxCyP,GACHxP,OAAQ,uBACRO,MAAMC,GAGR,MAAO,CAAC3C,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaoM,EAAAA,EAAU,CAC3CrQ,MAAOmQ,GAAKnQ,MACZiH,YAAakJ,GAAKlJ,YAClB3H,IAAK,0BAA0B6Q,GAAK7Q,MACpC4H,YAAaiJ,GAAKjJ,YAClBE,YAAa+I,GAAK/I,YAClBC,YAAa8I,GAAK9I,YAClBC,QAAS6I,GAAK7I,QACdC,QAAS4I,GAAK5I,QACdtI,OAAQkR,GAAKlR,OACb+H,OAAQmJ,GAAKnJ,QACZ,CACD7C,SAASC,EAAAA,EAAAA,KAAS,IAAM,GACrBhG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,GACpD9F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,6qBAEnBD,EAAG,QAGP7D,EACAsB,EACAC,EACAE,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACAvE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,wCACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CACnCG,GAAI,4CACJlE,MAAO,6DACN,CACDmE,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,gBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,0FACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CACnCG,GAAI,6BACJlE,MAAO,uBACN,CACDmE,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,kBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,qIACjB9B,GACA8B,EAAAA,EAAAA,IAAiB,OAEnB7B,GACAwG,EAAAA,EAAAA,IAAaqJ,EAAAA,EAAS,CACpB7H,KAAM,OACNC,QAAS,KACT5K,MAAO,uBACN,CACDmE,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBlG,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,gCACjB5B,GACA4B,EAAAA,EAAAA,IAAiB,6CACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CACnCG,GAAI,gCACJlE,MAAO,uBACN,CACDmE,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,0BAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,sBAEnB3B,EACAC,KAEFyB,EAAG,IAELxB,EACAC,GACA9E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,kDACjBvB,GACAuB,EAAAA,EAAAA,IAAiB,oHACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CACnCG,GAAI,iEACJlE,MAAO,2CACN,CACDmE,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,6BAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,+GAEnBtB,EACAC,GACAjF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,gCACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,gCAAkC,CAC3EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,mCAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,+FACjBpB,GACAoB,EAAAA,EAAAA,IAAiB,oIAEnBnB,EACAC,EACAC,EACAC,GACA2F,EAAAA,EAAAA,IAAaqJ,EAAAA,EAAS,CACpB7H,KAAM,OACNC,QAAS,KACT5K,MAAO,kEACN,CACDmE,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBlG,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,yCACjBf,GACAe,EAAAA,EAAAA,IAAiB,kEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CACnCG,GAAI,kEACJlE,MAAO,6DACN,CACDmE,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,4BAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,+FAEnBd,EACAC,KAEFY,EAAG,IAELX,EACAC,EACAyM,EACAC,EACAC,GACArH,EAAAA,EAAAA,IAAaqJ,EAAAA,EAAS,CACpB7H,KAAM,OACNC,QAAS,KACT5K,MAAO,0CACN,CACDmE,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBqM,GACAvS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,2KACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,kCAAoC,CAC7EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,eACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,kCAAoC,CAC7EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,eAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,mDAEnBkM,KAEFnM,EAAG,IAELoM,EACAC,EACAC,GACA3S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,CAC9B4S,EACAC,EACAC,GACA9S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,CAC9B+S,GACAzM,EAAAA,EAAAA,IAAiB,8GACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,mCAAqC,CAC9EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,kBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,OAEnB0M,IAEFC,EACAC,EACAC,GACAC,GACAC,GACAC,GACAE,GACAC,GACAC,GACAC,GACAC,MAEFvN,EAAG,GACF,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,UAAU,CAE/H,IC5iBA,MAAMzC,GAAc,GAEpB,S,iJCAA,MAAMpB,GAA0BxC,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,sEAAwE,uKAAwK,GACjTC,GAA0B9D,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAAS,GACrE+D,GAA0B/D,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,cAAe,GAC3EiE,GAA0BjE,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,oBACPsC,IAAK,wDACLC,IAAK,0BACLtE,MAAO,0BACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,EACtCsG,EAAAA,EAAAA,IAAiB,6DACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN7E,MAAO,kCACPuN,IAAK,YACJ,cACU/I,EAAAA,EAAAA,IAAiB,SAE9B,GACEpC,GAA0BlE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,8BAA+B,GACzFmE,GAA0BnE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,+BACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,wCACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,gHACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,mBACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,iEAC5B,GACElC,GAA0BpE,EAAAA,EAAAA,GAAoB,MAAO,KAAM,kKAAmK,GAC9NqE,GAA0BrE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8KAAmL,GAC5OsE,GAA0BtE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,oUAAqU,GAC9XuE,GAA2BvE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,6BAA8B,GACzFwE,GAA2BxE,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,KAAM,GACnEyE,GAA2BzE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,oLACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,4CACN7E,MAAO,uBACPuN,IAAK,uBACJ,4BACU/I,EAAAA,EAAAA,IAAiB,kQAC5B,GACE5B,GAA2B1E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,0BAA2B,GACtF2E,GAA2B3E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mOAAoO,GAC9R4E,GAA2B5E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,uBAAwB,GACnF6E,GAA2B7E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,iEACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,gIACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,iEACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,4EACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,OAC5B,GACExB,GAA2B9E,EAAAA,EAAAA,GAAoB,MAAO,CAC1D6D,MAAO,aACPsC,IAAK8O,EACL7O,IAAK,gCACLtE,MAAO,iCACN,MAAO,GACJiD,GAA2B/E,EAAAA,EAAAA,GAAoB,OAAQ,CAAE6D,MAAO,eAAiB,kCAAmC,GACpHmB,GAA2BhF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,oFACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,sFACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,0DACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,oEAC5B,GACErB,GAA2BjF,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,eAAgB,GAC7EkF,GAA2BlF,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,eAAgB,GAC7EmF,GAA2BnF,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,mBAAoB,GACjFoF,GAA2BpF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8SAA+S,GACzWqF,GAA2BrF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,WAAY,GACvEsF,GAA2BtF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2UAA4U,GACtYuF,GAA2BvF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4hBAA8hB,GACxlBwF,GAA2BxF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yBAA0B,GACrFyF,GAA2BzF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,6BAA8B,GACzF0F,GAA2B1F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,wCACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,gDACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,kCACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,0IACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,+EACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,oCACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,YAC5B,GACEX,GAA2B3F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,yfACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,uDACNyI,OAAQ,SACRC,IAAK,uBACJ,2BACU/I,EAAAA,EAAAA,IAAiB,OAC5B,GACE8L,GAA2BpS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,2BAA4B,GACvFqS,GAA2BrS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mXAAsX,GAChbsS,GAA2BtS,EAAAA,EAAAA,GAAoB,MAAO,KAAM,kFAAmF,GAC/IuS,GAA2BvS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,gCACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,UACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,gJACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,UACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,4MAC5B,GACEkM,GAA2BxS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iTAAkT,GAC5WyS,GAA2BzS,EAAAA,EAAAA,GAAoB,MAAO,KAAM,sEAAuE,GACnI0S,GAA2B1S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qWAAsW,GACha2S,GAA2B3S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,kCAAmC,GAC9F4S,GAA2B5S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,ifAAkf,GAC5iB6S,GAA2B7S,EAAAA,EAAAA,GAAoB,KAAM,CAAEgD,GAAI,oBAAsB,oBAAqB,GACtG8P,GAA2B9S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,yJACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,8GAC5B,GACEyM,GAA2B/S,EAAAA,EAAAA,GAAoB,MAAO,KAAM,gFAAiF,GAC7IgT,GAA2BhT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4NAA6N,GACvRiT,GAA2BjT,EAAAA,EAAAA,GAAoB,MAAO,KAAM,uFAAwF,GACpJkT,GAA2BlT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mWAAoW,GAC9ZmT,IAA2BnT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mWAAoW,GAC9ZoT,IAA2BpT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,WAAY,GACvEqT,IAA2BrT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,uYACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,oBAClCsG,EAAAA,EAAAA,IAAiB,6CACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,mFACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,QAClCsG,EAAAA,EAAAA,IAAiB,+BAC5B,GACEgN,IAA2BtT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,kLACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,2BACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,gDACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,kJAC5B,GACEkN,IAA2BxT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,SAAU,GACrEyT,IAA2BzT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,wHACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,4BACN0I,IAAK,uBACJ,aACU/I,EAAAA,EAAAA,IAAiB,+FACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,mCACN0I,IAAK,gCACJ,eACU/I,EAAAA,EAAAA,IAAiB,oHAC5B,GASE2L,GAAiB,CACrBP,IAAK,eACLtQ,IAAK,6BACL4H,YAAa,CAAC5G,EAAAA,IACdN,MAAO,sBACPiH,YAAa,yIACbyI,cAAe,8DACfC,iBAAkB,sBAClBE,oBAAqB,yIACrB5Q,OAAQiB,EAAAA,GACR8G,OAAQpH,EAAAA,GACRwH,YAAa,+FACbC,YAAa,+FACbC,QAAS,IAAIX,KAAK,4BAClBY,QAAS,IAAIZ,KAAK,6BAGdyJ,GAAc,CAClBD,SAGF,QAA4BxP,EAAAA,EAAAA,IAAiB,IACxCyP,GACHxP,OAAQ,iBACRO,MAAMC,GAGR,MAAO,CAAC3C,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,GACpD9F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,8oBAEnBD,EAAG,SAGP4E,EAAAA,EAAAA,IAAakH,EAAAA,EAAU,CACrBrQ,MAAOmQ,GAAKnQ,MACZiH,YAAakJ,GAAKlJ,YAClB3H,IAAK,0BAA0B6Q,GAAK7Q,MACpC4H,YAAaiJ,GAAKjJ,YAClBE,YAAa+I,GAAK/I,YAClBC,YAAa8I,GAAK9I,YAClBC,QAAS6I,GAAK7I,QACdC,QAAS4I,GAAK5I,QACdtI,OAAQkR,GAAKlR,OACb+H,OAAQmJ,GAAKnJ,QACZ,CACD7C,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB1D,GACAxC,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,4EACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,iCAAmC,CAC5EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,WAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,0DACjBxC,GACAwC,EAAAA,EAAAA,IAAiB,4CACjBvC,GACAuC,EAAAA,EAAAA,IAAiB,yEAEnBrC,EACAC,GACAlE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,8BACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,kCAAoC,CAC7EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,+BAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,iEACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,6CAA+C,CACxFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,oBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,oTAEnBnC,GACA8G,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB9B,KAEFiC,EAAG,IAELhC,EACAC,EACAC,GACAvE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,kJACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CACnCG,GAAI,uCACJlE,MAAO,8BACN,CACDmE,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,gBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,8FACjB9B,GACA8B,EAAAA,EAAAA,IAAiB,4SAEnB7B,EACAC,GACA1E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,UACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CACnCG,GAAI,gCACJlE,MAAO,YACN,CACDmE,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,eAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,wRAEnB3B,EACAC,EACAC,EACAC,EACAC,EACAC,GACAhF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,2FACjBrB,GACAqB,EAAAA,EAAAA,IAAiB,0DACjBpB,GACAoB,EAAAA,EAAAA,IAAiB,kGACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CACnCG,GAAI,oCACJlE,MAAO,yBACN,CACDmE,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,mBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,SACjBnB,GACAmB,EAAAA,EAAAA,IAAiB,4KAEnBlB,EACAC,EACAC,EACAC,EACAC,GACAxF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,6GACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,yCAA2C,CACpFC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,+BAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,mOAEnBb,GACAzF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,6NACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,mCAAqC,CAC9EC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,0BAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,uUAEnBZ,EACAC,EACAyM,EACAC,GACApH,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBoM,KAEFjM,EAAG,IAELkM,EACAC,GACAvH,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtBuM,KAEFpM,EAAG,IAELqM,EACAC,EACAC,EACAC,EACAC,GACA7H,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB6M,KAEF1M,EAAG,IAEL2M,GACA/H,EAAAA,EAAAA,IAAaoJ,EAAAA,EAAW,KAAM,CAC5BpO,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB+M,KAEF5M,EAAG,IAEL6M,EACAC,GACAC,GACAC,GACAC,GACAE,GACAC,MAEFpN,EAAG,GACF,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,YAClH,GAAG,CAER,IChaA,MAAMzC,GAAc,GAEpB,S,qMCFA,MAAMpB,GAA0BxC,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,sEAAwE,mPAAoP,GAC7XC,GAA0B9D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wHAAyH,GAClL+D,GAA0B/D,EAAAA,EAAAA,GAAoB,MAAO,KAAM,4BAA6B,GACxFiE,GAA0BjE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wHAAyH,GAClLkE,GAA0BlE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,+BAAgC,GACzFmE,GAA0BnE,EAAAA,EAAAA,GAAoB,MAAO,KAAM,mDAAoD,GAC/GoE,GAA0BpE,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,oBACPsC,IAAK,yFACLC,IAAK,oCACLtE,MAAO,oCACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,wCACnD,GACEqE,GAA0BrE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,oHAC/C,GACEsE,GAA0BtE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,8BACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,gBAClCsG,EAAAA,EAAAA,IAAiB,mCAC5B,GACE/B,GAA2BvE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,8BACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,iBAClCsG,EAAAA,EAAAA,IAAiB,eAC5B,GACE9B,GAA2BxE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,8BAA+B,GAC1FyE,GAA2BzE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,iMACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,aAClCsG,EAAAA,EAAAA,IAAiB,cAC5B,GACE5B,GAA2B1E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gBAAiB,GAC3E2E,GAA2B3E,EAAAA,EAAAA,GAAoB,MAAO,KAAM,qCAAsC,GAClG4E,GAA2B5E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,uDAAwD,GACnH6E,GAA2B7E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,wDACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,aAClCsG,EAAAA,EAAAA,IAAiB,+HACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,mBAClCsG,EAAAA,EAAAA,IAAiB,gDAC5B,GACExB,GAA2B9E,EAAAA,EAAAA,GAAoB,MAAO,KAAM,+JAAgK,GAC5N+E,GAA2B/E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,6OACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,YAClCsG,EAAAA,EAAAA,IAAiB,2HAC5B,GACEtB,GAA2BhF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,oCACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,WAClCsG,EAAAA,EAAAA,IAAiB,UACjBtG,EAAAA,EAAAA,GAAoB,OAAQ,KAAM,YAClCsG,EAAAA,EAAAA,IAAiB,8CAC5B,GACErB,GAA2BjF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,8CAA+C,GAC1GkF,GAA2BlF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2LAA4L,GACtPmF,EAAc,CAClBtB,MAAO,6CACPiL,aAAc,OAcHmD,EAAiB,CAC5BP,IAAK,qBACLtQ,IAAK,qDACL4H,YAAa,CAAC5G,EAAAA,GAAoBC,EAAAA,IAClCP,MAAO,2CACPiH,YAAa,kIACb4I,oBAAqB,kIACrBH,cAAe,yFACfC,iBAAkB,oCAClB1Q,OAAQW,EAAAA,GACRoH,YAAQ3G,EACR+G,YAAa,gHACbC,YAAa,gHACbC,QAAS,IAAIX,KAAK,4BAClBY,QAAS,IAAIZ,KAAK,6BAGdyJ,EAAc,CAClBD,QAGF,OAA4BxP,EAAAA,EAAAA,IAAiB,IACxCyP,EACHxP,OAAQ,mCACRO,MAAMC,GAER,MAAM8D,GAASC,EAAAA,EAAAA,MAEf,SAASgN,EAAWC,GAClBlN,EAAOmN,KAAK,aAAYC,EAAAA,EAAAA,IAAoBF,wBAC9C,CAEA,MAAO,CAAC3T,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaoM,EAAAA,EAAU,CAC3CrQ,MAAOmQ,EAAKnQ,MACZiH,YAAakJ,EAAKlJ,YAClB3H,IAAK,0BAA0B6Q,EAAK7Q,MACpC4H,YAAaiJ,EAAKjJ,YAClBE,YAAa+I,EAAK/I,YAClBC,YAAa8I,EAAK9I,YAClBC,QAAS6I,EAAK7I,QACdC,QAAS4I,EAAK5I,QACdtI,OAAQkR,EAAKlR,OACb+H,OAAQmJ,EAAKnJ,QACZ,CACD7C,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB1D,EACAsB,EACAC,EACAE,EACAC,EACAC,EACAC,GACA6G,EAAAA,EAAAA,IAAaqJ,EAAAA,EAAS,CACpB7H,KAAM,OACN3K,MAAO,4DACP4K,QAAS,MACR,CACDzG,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB7B,EACAC,EACAC,KAEF8B,EAAG,IAEL7B,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACAlF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,+EACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,iBAAmB,CAC5DC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,kBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,+EAEnBtG,EAAAA,EAAAA,GAAoB,OAAQmF,EAAa,EACvC8F,EAAAA,EAAAA,IAAasJ,EAAAA,EAAc,CACzBC,UAAW,GACXE,YAAaT,SAInB5N,EAAG,GACF,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,UAAU,CAE/H,IC/KA,MAAMzC,EAAc,EAEpB,O,8HCFA,MAAMpB,GAA0BxC,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,sEAAwE,mQAAoQ,GAC7YC,GAA0B9D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iGAAkG,GAC3J+D,GAA0B/D,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,oBACPsC,IAAK,6EACLC,IAAK,8CACLtE,MAAO,8CACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,EACtCsG,EAAAA,EAAAA,IAAiB,iFACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN7E,MAAO,kCACPuN,IAAK,YACJ,cACU/I,EAAAA,EAAAA,IAAiB,SAE9B,GACErC,GAA0BjE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,mDAAoD,GAC9GkE,GAA0BlE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uKAAwK,GACjOmE,GAA0BnE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gCAAiC,GAC1FoE,GAA0BpE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,8MACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,sDAC/C,GACEqE,GAA0BrE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,UACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,iCACN0I,IAAK,uBACJ,wBACU/I,EAAAA,EAAAA,IAAiB,mVAC5B,GACEhC,GAA0BtE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qHAAsH,GAC/KuE,GAA2BvE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,kCAAmC,GAC9FwE,GAA2BxE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4NAA6N,GACvRyE,GAA2BzE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gGAAiG,GAC3J0E,GAA2B1E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yDAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,0GAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,gHAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,sJAC3C,GACE2E,GAA2B3E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,8EACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,8DACpCsG,EAAAA,EAAAA,IAAiB,uCAC5B,GACE1B,GAA2B5E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,wBAAyB,GACpF6E,GAA2B7E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,ySAA0S,GACpW8E,GAA2B9E,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qBAAsB,GAChF+E,GAA2B/E,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,2JAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,+JAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,uFAC3C,GACEgF,GAA2BhF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,4BACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,4FACN0I,IAAK,uBACJ,mCACU/I,EAAAA,EAAAA,IAAiB,mIAC5B,GACErB,GAA2BjF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6PAA8P,GACxTkF,GAA2BlF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,sPAAuP,GACjTmF,GAA2BnF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,kDAAmD,GAC9GoF,GAA2BpF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qHAAsH,GAChLqF,GAA2BrF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6HAA8H,GACxLsF,GAA2BtF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,4BACjBtG,EAAAA,EAAAA,GAAoB,IAAK,KAAM,WAC/BsG,EAAAA,EAAAA,IAAiB,mJAC5B,GACEf,GAA2BvF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8GAA+G,GACzKwF,GAA2BxF,EAAAA,EAAAA,GAAoB,KAAM,KAAM,iCAAkC,GAC7FyF,GAA2BzF,EAAAA,EAAAA,GAAoB,IAAK,KAAM,oCAAqC,GAC/F0F,GAA2B1F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,2VAA4V,GACtZ2F,GAA2B3F,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,6KACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,8BACN0I,IAAK,uBACJ,uBACU/I,EAAAA,EAAAA,IAAiB,6IAC5B,GACE8L,GAA2BpS,EAAAA,EAAAA,GAAoB,KAAM,KAAM,kCAAmC,GAC9FqS,GAA2BrS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,sKAAuK,GACjOsS,GAA2BtS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uMAAwM,GAClQuS,GAA2BvS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,6FAA8F,GACxJwS,GAA2BxS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8BAA+B,GACzFyS,GAA2BzS,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qHAAsH,GAChL0S,GAA2B1S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,oDAAqD,GAC/G2S,GAA2B3S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,sEACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,mEACpCsG,EAAAA,EAAAA,IAAiB,oNAC5B,GACEsM,GAA2B5S,EAAAA,EAAAA,GAAoB,KAAM,KAAM,wBAAyB,GACpF6S,GAA2B7S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,wGAAyG,GACnK8S,GAA2B9S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,iDAAkD,GAC5G+S,GAA2B/S,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mMAAoM,GAC9PgT,GAA2BhT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,mHACpCsG,EAAAA,EAAAA,IAAiB,0HAC5B,GACE2M,GAA2BjT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,kCAAmC,GAC9FkT,GAA2BlT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,uRAAwR,GAClVmT,GAA2BnT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8FAA+F,GACzJoT,GAA2BpT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,EAClCsG,EAAAA,EAAAA,IAAiB,0CACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,2BACN0I,IAAK,uBACJ,oBACU/I,EAAAA,EAAAA,IAAiB,6CAE9B,GACE+M,IAA2BrT,EAAAA,EAAAA,GAAoB,KAAM,KAAM,mCAAoC,GAC/FsT,IAA2BtT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,mRAAoR,GAC9UwT,IAA2BxT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,0EACjBtG,EAAAA,EAAAA,GAAoB,SAAU,KAAM,mEAC/C,GACEyT,IAA2BzT,EAAAA,EAAAA,GAAoB,IAAK,KAAM,gQAAiQ,GAC3T0T,IAA2B1T,EAAAA,EAAAA,GAAoB,KAAM,KAAM,2BAA4B,GACvF2T,IAA2B3T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDA,EAAAA,EAAAA,GAAoB,SAAU,KAAM,kFAC/C,GACE4T,IAA2B5T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8SAA+S,GACzW6T,IAA2B7T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,4GAA6G,GACvK8T,IAA2B9T,EAAAA,EAAAA,GAAoB,KAAM,KAAM,0BAA2B,GACtF+T,IAA2B/T,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EACjDsG,EAAAA,EAAAA,IAAiB,oLACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,mCACN0I,IAAK,uBACJ,WACU/I,EAAAA,EAAAA,IAAiB,cACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,0EACN0I,IAAK,uBACJ,kBACU/I,EAAAA,EAAAA,IAAiB,wDAC5B,GACE0N,IAA2BhU,EAAAA,EAAAA,GAAoB,IAAK,KAAM,8LAA+L,GACzPkV,IAA2BlV,EAAAA,EAAAA,GAAoB,IAAK,KAAM,sTAAuT,GACjXmV,IAA2BnV,EAAAA,EAAAA,GAAoB,KAAM,KAAM,YAAa,GACxEoV,IAA2BpV,EAAAA,EAAAA,GAAoB,IAAK,KAAM,sKAAuK,GACjOqV,IAA2BrV,EAAAA,EAAAA,GAAoB,KAAM,KAAM,EAClDA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,4FAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,qGAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,qGAChCA,EAAAA,EAAAA,GAAoB,KAAM,KAAM,iKAC3C,GAQEiS,GAAiB,CACrBP,IAAK,eACLtQ,IAAK,yDACL4H,YAAa,CAAC5G,EAAAA,IACdN,MAAO,8CACPiH,YAAa,kHACb4I,oBAAqB,kHACrBH,cAAe,mFACfC,iBAAkB,8CAClB1Q,OAAQmB,EAAAA,GACR4G,OAAQpH,EAAAA,GACRwH,YAAa,yGACbC,YAAa,yGACbC,QAAS,IAAIX,KAAK,4BAClBY,QAAS,IAAIZ,KAAK,6BAGdyJ,GAAc,CAClBD,SAGF,QAA4BxP,EAAAA,EAAAA,IAAiB,IACxCyP,GACHxP,OAAQ,4BACRO,MAAMC,GAGR,MAAO,CAAC3C,EAAUC,MACRN,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,GACpD9F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,mqBAEnBD,EAAG,SAGP4E,EAAAA,EAAAA,IAAakH,EAAAA,EAAU,CACrBrQ,MAAOmQ,GAAKnQ,MACZiH,YAAakJ,GAAKlJ,YAClB3H,IAAK,0BAA0B6Q,GAAK7Q,MACpC4H,YAAaiJ,GAAKjJ,YAClBE,YAAa+I,GAAK/I,YAClBC,YAAa8I,GAAK9I,YAClBC,QAAS6I,GAAK7I,QACdC,QAAS4I,GAAK5I,QACdtI,OAAQkR,GAAKlR,OACb+H,OAAQmJ,GAAKnJ,QACZ,CACD7C,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB1D,EACAsB,EACAC,EACAE,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAyM,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GACAC,GACAE,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAkB,GACAC,GACAC,GACAC,MAEFhP,EAAG,GACF,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,YAClH,IAEL,IC3RA,MAAMzC,GAAc,GAEpB,S,6HCFA,MAAMpB,GAA0BxC,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,sEAAwE,EAChIyC,EAAAA,EAAAA,IAAiB,gGACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,2GACNyI,OAAQ,SACRC,IAAK,uBACJ,0BACU/I,EAAAA,EAAAA,IAAiB,6XAC5B,GACExC,GAA0B9D,EAAAA,EAAAA,GAAoB,SAAU,CAAE6D,MAAO,QAAU,EAClE7D,EAAAA,EAAAA,GAAoB,MAAO,CACtC6D,MAAO,oBACPsC,IAAK,+DACLC,IAAK,8DACLtE,MAAO,8DACPsL,MAAO,OACPC,OAAQ,SAEGrN,EAAAA,EAAAA,GAAoB,aAAc,KAAM,EACtCsG,EAAAA,EAAAA,IAAiB,iGACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,+CACN7E,MAAO,kCACPuN,IAAK,YACJ,cACU/I,EAAAA,EAAAA,IAAiB,SAE9B,GACEvC,GAA0B/D,EAAAA,EAAAA,GAAoB,KAAM,KAAM,yCAA0C,GACpGiE,GAA0BjE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAChDsG,EAAAA,EAAAA,IAAiB,0EACjBtG,EAAAA,EAAAA,GAAoB,IAAK,CACpC2G,KAAM,uBACNyI,OAAQ,SACRC,IAAK,uBACJ,QACU/I,EAAAA,EAAAA,IAAiB,6RAC5B,GACEpC,GAA0BlE,EAAAA,EAAAA,GAAoB,KAAM,KAAM,6BAA8B,GACxFmE,GAA0BnE,EAAAA,EAAAA,GAAoB,IAAK,KAAM,qZAAsZ,GAQ/ciS,EAAiB,CACrBP,IAAK,WACLtQ,IAAK,kCACL4H,YAAa,CAAC5G,EAAAA,IACdN,MAAO,mCACPiH,YAAa,qIACbyI,cAAe,qEACfC,iBAAkB,sCAClBE,oBAAqB,qIACrB5Q,OAAQW,EAAAA,GACRwH,YAAa,mFACbC,YAAa,mFACbC,QAAS,IAAIX,KAAK,4BAClBY,QAAS,IAAIZ,KAAK,6BAGdyJ,EAAc,CAClBD,QAGF,OAA4BxP,EAAAA,EAAAA,IAAiB,IACxCyP,EACHxP,OAAQ,aACRO,MAAMC,GAGR,MAAO,CAAC3C,EAAUC,KAChB,MAAMqF,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQ5F,EAAAA,EAAAA,OAAcE,EAAAA,EAAAA,IAAoBoG,EAAAA,GAAW,KAAM,GACxDtG,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,IAAaiF,EAAAA,GAAW,CAAEhF,GAAI,QAAU,GACpD9F,EAAAA,EAAAA,OAAc6F,EAAAA,EAAAA,KAAaqF,EAAAA,EAAAA,IAAyB,UAAW,CAAEvI,KAAM,uBAAyB,CAC/FoD,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,qpBAEnBD,EAAG,SAGP4E,EAAAA,EAAAA,IAAakH,EAAAA,EAAU,CACrBrQ,MAAOmQ,EAAKnQ,MACZiH,YAAakJ,EAAKlJ,YAClB3H,IAAK,0BAA0B6Q,EAAK7Q,MACpC4H,YAAaiJ,EAAKjJ,YAClBE,YAAa+I,EAAK/I,YAClBC,YAAa8I,EAAK9I,YAClBC,QAAS6I,EAAK7I,QACdC,QAAS4I,EAAK5I,QACdtI,OAAQkR,EAAKlR,OACb+H,OAAQmJ,EAAKnJ,QACZ,CACD7C,SAASC,EAAAA,EAAAA,KAAS,IAAM,CACtB1D,EACAsB,EACAC,GACA/D,EAAAA,EAAAA,GAAoB,IAAK,KAAM,EAC7BsG,EAAAA,EAAAA,IAAiB,qJACjB2E,EAAAA,EAAAA,IAAapF,EAAwB,CAAEG,GAAI,KAAO,CAChDC,SAASC,EAAAA,EAAAA,KAAS,IAAM,EACtBI,EAAAA,EAAAA,IAAiB,iBAEnBD,EAAG,KAELC,EAAAA,EAAAA,IAAiB,6UAEnBrC,EACAC,EACAC,KAEFkC,EAAG,GACF,EAAG,CAAC,QAAS,cAAe,MAAO,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,YAClH,GAAG,CAER,ICvHA,MAAMzC,EAAc,EAEpB,O,uTCLuiBwV,EAAE,CAACC,IAAIA,EAAEA,EAAEC,KAAK,GAAG,OAAOD,EAAEA,EAAEE,OAAO,GAAG,SAASF,GAA/C,CAAmDD,GAAG,CAAC,GAAG,IAAIpL,EAAEwL,OAAO,qBAAqB,SAASC,EAAEC,GAAG,IAAIC,GAAE,QAAE3L,EAAE,MAAM,GAAO,OAAJ2L,EAAS,CAAC,IAAIN,EAAE,IAAIO,MAAM,IAAIF,sDAAsD,MAAME,MAAMC,mBAAmBD,MAAMC,kBAAkBR,EAAEI,GAAGJ,CAAC,CAAC,OAAOM,CAAC,CAAC,IAAIG,EAAEN,OAAO,0BAA0B,SAASO,IAAI,OAAO,QAAED,EAAE,KAAK,CAAC,IAAIE,GAAE,QAAE,CAAChZ,KAAK,aAAa2B,MAAM,CAACiS,GAAG,CAAC/R,KAAK,CAAC+C,OAAO9C,QAAQmD,QAAQ,YAAYgU,YAAY,CAACpX,KAAK,CAACqX,SAASjU,SAAQ,IAAKhD,MAAMyW,GAAGnM,MAAMoM,EAAEQ,MAAMd,IAAI,IAAIe,GAAE,QAAEV,EAAEO,YAAY,EAAE,GAAGjQ,GAAE,QAAE,MAAMqQ,GAAE,QAAE,MAAMC,EAAE,CAACC,UAAS,QAAE,MAAMC,SAAQ,QAAE,MAAMC,gBAAgBL,EAAEM,MAAM1Q,EAAE2Q,OAAON,EAAEO,mBAAmBR,EAAEhT,OAAM,OAAEgT,EAAEhT,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,EAAEyT,kBAA4B,IAAVT,EAAEhT,QAAYgT,EAAEhT,MAAM,EAAE,EAAE0T,MAAMC,GAAGT,EAAEO,kBAAkB,IAAIG,EAAE,KAAKD,EAAEA,aAAaE,YAAYF,EAAEA,EAAE3T,iBAAiB6T,aAAY,OAAEF,IAAG,OAAET,EAAEK,SAAQ,OAAEL,EAAEK,QAAtF,GAAoG,MAAHK,GAASA,EAAEE,OAAO,GAAG,OAAO,QAAElN,EAAEsM,IAAG,SAAE,SAAE,KAAI,OAAEF,EAAEhT,MAAM,CAAC,CAAC,GAAG,UAAO,CAAC,GAAG,iBAAa,KAAK,IAAI6S,YAAYc,KAAKC,GAAGtB,EAAEyB,EAAE,CAACtG,KAAe,IAAVuF,EAAEhT,MAAU0T,MAAMR,EAAEQ,OAAO,OAAO,QAAE,CAACM,WAAWJ,EAAEK,SAAS,CAAC,EAAEC,KAAKH,EAAE5N,MAAMoM,EAAEQ,MAAMd,EAAErY,KAAK,cAAa,CAAE,IAAIua,GAAE,QAAE,CAACva,KAAK,mBAAmB2B,MAAM,CAACiS,GAAG,CAAC/R,KAAK,CAAC+C,OAAO9C,QAAQmD,QAAQ,UAAUuV,SAAS,CAAC3Y,KAAK,CAACqX,SAASjU,SAAQ,GAAIjD,GAAG,CAACH,KAAKC,OAAOmD,QAAQ,IAAI,iCAAgC,aAAQhD,MAAMyW,GAAGS,MAAMR,EAAEpM,MAAM8L,EAAEoC,OAAOrB,IAAI,IAAIpQ,EAAEyP,EAAE,qBAAoB,SAAE,KAAKzP,EAAEuQ,SAASnT,MAAMsS,EAAE1W,OAAK,SAAE,KAAKgH,EAAEuQ,SAASnT,MAAM,QAAO,IAAIiT,EAAEN,IAAIO,GAAE,SAAE,IAAQ,OAAJD,GAAYA,EAAEjT,QAAQ4C,EAAEwQ,QAAQpT,QAAO2T,GAAE,QAAE,MAAMX,EAAE,CAACsB,GAAGX,EAAEY,IAAIZ,IAAIT,EAAElT,QAAO,SAAE,KAAK4C,EAAE2Q,OAAOvT,MAAM2T,EAAE3T,SAAQ,IAAI4T,GAAE,QAAE,SAAE,KAAI,CAAEpG,GAAG8E,EAAE9E,GAAG/R,KAAK8W,EAAE9W,SAAQkY,GAAG,SAASI,IAAI,IAAIS,EAAElC,EAAE8B,WAAWlB,EAAElT,OAAO4C,EAAE4Q,mBAAoC,OAAhBgB,GAAE,OAAE5R,EAAE2Q,UAAgBiB,EAAEV,SAASlR,EAAE4Q,mBAAmB,CAAC,SAASiB,EAAED,GAAG,IAAIE,EAAE,IAAIpC,EAAE8B,SAAS,GAAGlB,EAAElT,MAAM,OAAOwU,EAAE5X,KAAK,KAAK,UAAQ,KAAK,UAAQ4X,EAAEG,iBAAiBH,EAAEI,kBAAkBhS,EAAE4Q,mBAAoC,OAAhBkB,GAAE,OAAE9R,EAAE2Q,UAAgBmB,EAAEZ,QAAQ,WAAW,OAAOU,EAAE5X,KAAK,KAAK,UAAQ,KAAK,UAAQ4X,EAAEG,iBAAiBH,EAAEI,kBAAkBhS,EAAE4Q,mBAAmB,MAAM,CAAC,SAASqB,EAAEL,GAAG,OAAOA,EAAE5X,KAAK,KAAK,UAAQ4X,EAAEG,iBAAiB,MAAM,CAAC,MAAM,KAAK,IAAIH,EAAE,CAAC/G,KAA+B,IAA1B7K,EAAEyQ,gBAAgBrT,QAAYpE,GAAG8Y,KAAKI,GAAGxC,EAAEyC,EAAE7B,EAAElT,MAAM,CAACN,IAAIiU,EAAElY,KAAKmY,EAAE5T,MAAMQ,QAAQuT,EAAEiB,UAAUP,GAAG,CAAC7Y,GAAG8Y,EAAEhV,IAAIiU,EAAElY,KAAKmY,EAAE5T,MAAM,gBAAgBsS,EAAE8B,cAAS,EAAiC,IAA1BxR,EAAEyQ,gBAAgBrT,MAAU,iBAAgB,OAAE4C,EAAE0Q,OAAO1Q,EAAEwQ,QAAQpT,WAAM,EAAOoU,WAAS9B,EAAE8B,eAAY,EAAO5T,QAAQuT,EAAEiB,UAAUP,EAAEQ,QAAQJ,GAAG,OAAO,QAAE,CAACZ,SAASc,EAAEf,WAAWc,EAAEZ,KAAKM,EAAEzB,MAAMR,EAAEpM,MAAM8L,EAAErY,KAAK,oBAAmB,CAAE,IAAIsb,GAAE,QAAE,CAACtb,KAAK,kBAAkB2B,MAAM,CAACiS,GAAG,CAAC/R,KAAK,CAAC+C,OAAO9C,QAAQmD,QAAQ,OAAOsW,OAAO,CAAC1Z,KAAKqX,QAAQjU,SAAQ,GAAIuW,QAAQ,CAAC3Z,KAAKqX,QAAQjU,SAAQ,GAAIjD,GAAG,CAACH,KAAKC,OAAOmD,QAAQ,IAAI,gCAA+B,aAAQhD,MAAMyW,GAAGS,MAAMR,EAAEpM,MAAM8L,EAAEoC,OAAOrB,IAAI,IAAIpQ,EAAEyP,EAAE,oBAAmB,SAAE,KAAKzP,EAAEwQ,QAAQpT,MAAMsS,EAAE1W,OAAK,SAAE,KAAKgH,EAAEwQ,QAAQpT,MAAM,QAAOgT,EAAE,CAACsB,GAAG1R,EAAE0Q,MAAMiB,IAAI3R,EAAE0Q,SAAQ,QAAEZ,EAAE9P,EAAEwQ,SAAS,IAAIH,GAAE,UAAIC,GAAE,SAAE,IAAQ,OAAJD,GAAUA,EAAEjT,MAAM,aAAU,UAAiC,IAA1B4C,EAAEyQ,gBAAgBrT,QAAW,MAAM,KAAK,IAAI2T,EAAE,CAAClG,KAA+B,IAA1B7K,EAAEyQ,gBAAgBrT,MAAU0T,MAAM9Q,EAAE8Q,QAAQ9X,GAAGgY,KAAKG,GAAGzB,EAAEmC,EAAE,CAAC7Y,GAAGgY,EAAElU,IAAIkD,EAAE0Q,OAAO,OAAO,QAAE,CAACW,SAASQ,EAAET,WAAWD,EAAEG,KAAKP,EAAEZ,MAAMR,EAAEpM,MAAM8L,EAAEoD,SAAS,oBAAiB,YAASC,QAAQpC,EAAElT,MAAMpG,KAAK,mBAAkB,CAAE,G","sources":["webpack://frontend/./node_modules/@heroicons/vue/24/outline/ChevronDownIcon.js","webpack://frontend/./src/common/authors.ts","webpack://frontend/./src/model/Breadcrumb.ts","webpack://frontend/./src/components/TurnstileCaptcha.vue?1a13","webpack://frontend/./src/components/TurnstileCaptcha.vue","webpack://frontend/./src/components/layout/AuthorBox.vue?8563","webpack://frontend/./src/components/layout/AuthorBox.vue","webpack://frontend/./src/components/micro/CopyArticleLink.vue?e3af","webpack://frontend/./src/components/micro/CopyArticleLink.vue","webpack://frontend/./src/common/throttle.ts","webpack://frontend/./src/components/layout/BlogPost.vue?a7c8","webpack://frontend/./src/components/layout/BlogPost.vue","webpack://frontend/./src/components/layout/BreadcrumbsComponent.vue?a6b6","webpack://frontend/./src/components/layout/BreadcrumbsComponent.vue","webpack://frontend/./src/components/layout/CalloutComponent.vue?8dc8","webpack://frontend/./src/components/layout/CalloutComponent.vue","webpack://frontend/./src/components/layout/GuideStep.vue?16b6","webpack://frontend/./src/components/layout/GuideStep.vue","webpack://frontend/./src/components/micro/CodeBlock.vue?cc2c","webpack://frontend/./src/components/micro/CodeBlock.vue","webpack://frontend/./src/views/AboutJeff.vue?bd18","webpack://frontend/./src/views/AboutJeff.vue","webpack://frontend/./src/views/AboutRuurtjan.vue?d2b2","webpack://frontend/./src/views/AboutRuurtjan.vue","webpack://frontend/./src/views/AboutView.vue?0962","webpack://frontend/./src/views/AboutView.vue","webpack://frontend/./src/views/ApiView.vue?ddb1","webpack://frontend/./src/views/ApiView.vue","webpack://frontend/./src/views/ContactUs.vue?bd17","webpack://frontend/./src/views/ContactUs.vue","webpack://frontend/./src/views/InstallView.vue?8b93","webpack://frontend/./src/views/InstallView.vue","webpack://frontend/./src/views/LearningView.vue?d460","webpack://frontend/./src/views/LearningView.vue","webpack://frontend/./src/views/PrivacyPolicy.vue?1380","webpack://frontend/./src/views/PrivacyPolicy.vue","webpack://frontend/./src/views/SponsorView.vue?a783","webpack://frontend/./src/views/SponsorView.vue","webpack://frontend/./src/views/TermsAndConditions.vue?b02f","webpack://frontend/./src/views/TermsAndConditions.vue","webpack://frontend/./src/views/WelcomeToTheCourse.vue?4035","webpack://frontend/./src/views/WelcomeToTheCourse.vue","webpack://frontend/./src/views/install/InstallChrome.vue?aabc","webpack://frontend/./src/views/install/InstallChrome.vue","webpack://frontend/./src/views/install/InstallEdge.vue?3290","webpack://frontend/./src/views/install/InstallEdge.vue","webpack://frontend/./src/views/install/InstallFirefox.vue?261f","webpack://frontend/./src/views/install/InstallFirefox.vue","webpack://frontend/./src/views/learning/DnsPropagationDoesNotExist.vue?34d8","webpack://frontend/./src/views/learning/DnsPropagationDoesNotExist.vue","webpack://frontend/./src/views/learning/DnsRecordTypes.vue?39ee","webpack://frontend/./src/views/learning/DnsRecordTypes.vue","webpack://frontend/./src/views/learning/DnsRecordTypes/RecordTypeA.vue?f6a5","webpack://frontend/./src/views/learning/DnsRecordTypes/RecordTypeA.vue","webpack://frontend/./src/views/learning/DnsRecordTypes/RecordTypeAAAA.vue?c3b2","webpack://frontend/./src/views/learning/DnsRecordTypes/RecordTypeAAAA.vue","webpack://frontend/./src/views/learning/DnsRecordTypes/RecordTypeCname.vue?4a92","webpack://frontend/./src/views/learning/DnsRecordTypes/RecordTypeCname.vue","webpack://frontend/./src/views/learning/DnsRecordTypes/RecordTypeMx.vue?5b83","webpack://frontend/./src/views/learning/DnsRecordTypes/RecordTypeMx.vue","webpack://frontend/./src/views/learning/DnsRecordTypes/RecordTypeNs.vue?22b0","webpack://frontend/./src/views/learning/DnsRecordTypes/RecordTypeNs.vue","webpack://frontend/./src/views/learning/DnsRecordTypes/RecordTypePtr.vue?f16c","webpack://frontend/./src/views/learning/DnsRecordTypes/RecordTypePtr.vue","webpack://frontend/./src/views/learning/DnsRecordTypes/RecordTypeSoa.vue?c09f","webpack://frontend/./src/views/learning/DnsRecordTypes/RecordTypeSoa.vue","webpack://frontend/./src/views/learning/DnsRecordTypes/RecordTypeSrv.vue?bee9","webpack://frontend/./src/views/learning/DnsRecordTypes/RecordTypeSrv.vue","webpack://frontend/./src/views/learning/DnsRecordTypes/RecordTypeTxt.vue?a3e9","webpack://frontend/./src/views/learning/DnsRecordTypes/RecordTypeTxt.vue","webpack://frontend/./src/views/learning/EmailSecurity/EmailSecurityDkim.vue?3112","webpack://frontend/./src/views/learning/EmailSecurity/EmailSecurityDkim.vue","webpack://frontend/./src/views/learning/EmailSecurity/EmailSecurityDmarc.vue?8814","webpack://frontend/./src/views/learning/EmailSecurity/EmailSecurityDmarc.vue","webpack://frontend/./src/views/learning/EmailSecurity/EmailSecurityHowToMergeDmarcRecords.vue?a855","webpack://frontend/./src/views/learning/EmailSecurity/EmailSecurityHowToMergeDmarcRecords.vue","webpack://frontend/./src/views/learning/EmailSecurity/EmailSecuritySpf.vue?2033","webpack://frontend/./src/views/learning/EmailSecurity/EmailSecuritySpf.vue","webpack://frontend/./src/views/learning/EmailSecurity/EmailSecurityUsingDifferentDmarcRecordsForSubdomains.vue?51fd","webpack://frontend/./src/views/learning/EmailSecurity/EmailSecurityUsingDifferentDmarcRecordsForSubdomains.vue","webpack://frontend/./src/views/learning/FindingWhoisServersUsingSrvRecords.vue?38e9","webpack://frontend/./src/views/learning/FindingWhoisServersUsingSrvRecords.vue","webpack://frontend/./src/views/learning/HowDoesDomainNameRegistrationWork.vue?f187","webpack://frontend/./src/views/learning/HowDoesDomainNameRegistrationWork.vue","webpack://frontend/./src/views/learning/MxVsSpfVsDmarcVsDkimVsBimi.vue?f76d","webpack://frontend/./src/views/learning/MxVsSpfVsDmarcVsDkimVsBimi.vue","webpack://frontend/./src/views/learning/RecursiveVsAuthoritativeDns.vue?c3a1","webpack://frontend/./src/views/learning/RecursiveVsAuthoritativeDns.vue","webpack://frontend/./src/views/learning/TheLifeOfADnsQueryInKubernetes.vue?48c8","webpack://frontend/./src/views/learning/TheLifeOfADnsQueryInKubernetes.vue","webpack://frontend/./src/views/learning/WhatIsADnsResolver.vue?841c","webpack://frontend/./src/views/learning/WhatIsADnsResolver.vue","webpack://frontend/./src/views/learning/WhatIsADnsZone.vue?602e","webpack://frontend/./src/views/learning/WhatIsADnsZone.vue","webpack://frontend/./src/views/learning/WhatIsAGoodTtlForDns.vue?7237","webpack://frontend/./src/views/learning/WhatIsAGoodTtlForDns.vue","webpack://frontend/./src/views/learning/WhatIsDns.vue?b1d3","webpack://frontend/./src/views/learning/WhatIsDns.vue","webpack://frontend/./src/views/learning/WhatIsTheDnsRootZone.vue?267e","webpack://frontend/./src/views/learning/WhatIsTheDnsRootZone.vue","webpack://frontend/./src/views/learning/ZoneDelegation.vue?df84","webpack://frontend/./src/views/learning/ZoneDelegation.vue","webpack://frontend/./src/views/learning/command-line/HowToSpecifyADnsServerInNslookup.vue?94d1","webpack://frontend/./src/views/learning/command-line/HowToSpecifyADnsServerInNslookup.vue","webpack://frontend/./src/views/learning/domain-names/TipsForPickingADomainName.vue?9ea3","webpack://frontend/./src/views/learning/domain-names/TipsForPickingADomainName.vue","webpack://frontend/./src/views/learning/security/DnsChanger.vue?2ab3","webpack://frontend/./src/views/learning/security/DnsChanger.vue","webpack://frontend/./node_modules/@headlessui/vue/dist/components/disclosure/disclosure.js"],"sourcesContent":["const { createElementVNode: _createElementVNode, openBlock: _openBlock, createElementBlock: _createElementBlock } = require(\"vue\")\n\nmodule.exports = function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n \"stroke-width\": \"1.5\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, [\n _createElementVNode(\"path\", {\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n d: \"M19.5 8.25l-7.5 7.5-7.5-7.5\"\n })\n ]))\n}","export type SocialAccount = {\n platform: 'Twitter' | 'LinkedIn' | 'Google Scholar' | 'IETF' | 'Google Patents' | 'Website';\n url: string;\n}\n\nexport type AlumniOf = {\n name: string;\n url: string;\n}\n\nexport type Author = {\n firstName: string;\n lastName: string;\n name: string;\n img: string;\n imgLarge: string;\n url?: string;\n title: string;\n bio: Array;\n socials: Array;\n alumniOf: Array;\n}\n\nexport function authorToLdJson(author: Author): string {\n return `{\n \"@context\": \"https://schema.org\",\n \"@type\": \"Person\",\n \"name\": \"${author.name}\",\n \"description\": \"${author.bio.join(' ')}\",\n \"email\": \"mailto:ruurtjan@nslookup.io\",\n \"jobTitle\": \"CEO\",\n \"image\": {\n \"@type\": \"ImageObject\",\n \"inLanguage\": \"en-US\",\n \"url\": \"https://www.nslookup.io/${author.imgLarge}\",\n \"contentUrl\": \"https://www.nslookup.io/${author.imgLarge}\",\n \"caption\": \"${author.name}\"\n },\n \"sameAs\": [\n ${author.url ? `\"https://www.nslookup.io${author.url}\",` : ''}\n ${author.socials.map((social) => `\"${social.url}\"`).toString()}\n ],\n \"alumniOf\": [\n ${author.alumniOf.map((alumniOf) => `{\"@type\" : \"CollegeOrUniversity\", \"name\": \"${alumniOf.name}\", \"sameAs\": \"${alumniOf.url}\"}`).toString()}\n ],\n \"mainEntityOfPage\": {\n \"@type\": \"ProfilePage\",\n \"url\": \"https://www.nslookup.io${author.url}\",\n \"name\": \"${author.name}\",\n \"description\": \"${author.bio.join(' ')}\",\n \"inLanguage\": \"en-US\",\n \"potentialAction\": [\n {\n \"@type\": \"ReadAction\",\n \"target\": [\n \"https://www.nslookup.io${author.url}\"\n ]\n }\n ]\n }\n}`;\n}\n\nexport const ruurtjan: Author = {\n firstName: 'Ruurtjan',\n lastName: 'Pul',\n name: 'Ruurtjan Pul',\n img: 'img/ruurtjan.jpg',\n imgLarge: 'img/ruurtjan-lg.jpg',\n url: '/about/ruurtjan-pul/',\n title: 'Founder of NsLookup',\n bio: [\n 'Passionate about sharing knowledge and making great DNS tools.',\n 'I\\'ve been working in IT for 15 years, and I recently quit my job to work full-time on NsLookup.',\n ],\n socials: [\n {\n platform: 'Website',\n url: 'https://www.ruurtjan.com/',\n },\n {\n platform: 'Twitter',\n url: 'https://twitter.com/Ruurtjan',\n },\n {\n platform: 'LinkedIn',\n url: 'https://www.linkedin.com/in/ruurtjan/',\n },\n {\n platform: 'Google Scholar',\n url: 'https://scholar.google.com/citations?user=kU3o4CwAAAAJ',\n },\n ],\n alumniOf: [\n {\n name: 'Hanze University of Applied Sciences',\n url: 'https://en.wikipedia.org/wiki/Hanze_University_of_Applied_Sciences',\n },\n {\n name: 'University of Groningen',\n url: 'https://en.wikipedia.org/wiki/University_of_Groningen',\n },\n ],\n};\n\nexport const jeff: Author = {\n firstName: 'Jeff',\n lastName: 'Westhead',\n name: 'Jeff Westhead',\n img: 'img/jeff.jpg',\n imgLarge: 'img/jeff-lg.jpg',\n url: '/about/jeff-westhead/',\n title: 'Technical writer',\n bio: [\n 'At Microsoft, Jeff worked on DNS in both Windows and Azure.',\n 'With his 28 years of experience in network engineering, he is an expert on DNS and DNSSEC.',\n ],\n socials: [\n {\n platform: 'IETF',\n url: 'https://datatracker.ietf.org/person/Jeff%20Westhead',\n },\n {\n platform: 'LinkedIn',\n url: 'https://www.linkedin.com/in/jeff-westhead-7136149a',\n },\n {\n platform: 'Google Scholar',\n url: 'https://scholar.google.com/citations?user=au2lr8sAAAAJ',\n },\n {\n platform: 'Google Patents',\n url: 'https://patents.google.com/?inventor=Jeffrey+Westhead',\n },\n ],\n alumniOf: [\n {\n name: 'University of Waterloo',\n url: 'https://en.wikipedia.org/wiki/University_of_Waterloo',\n },\n ],\n};\n\nexport const steven: Author = {\n firstName: 'Steven',\n lastName: 'Reitsma',\n name: 'Steven Reitsma',\n img: 'img/steven.jpg',\n imgLarge: 'img/steven.jpg',\n title: 'MLOps engineer',\n bio: [\n 'With over six years experience as an MLOps engineer, Steven has debugged many DNS issues in Kubernetes.',\n ],\n socials: [\n {\n platform: 'Website',\n url: 'https://reitsma.io/',\n },\n {\n platform: 'LinkedIn',\n url: 'https://www.linkedin.com/in/steven-reitsma/',\n },\n ],\n alumniOf: [\n {\n name: 'Radboud University Nijmegen',\n url: 'https://en.wikipedia.org/wiki/Radboud_University_Nijmegen',\n },\n ],\n};\n\nexport const holly: Author = {\n firstName: 'Holly',\n lastName: 'Smith',\n name: 'Holly Smith',\n img: 'img/holly.jpg',\n imgLarge: 'img/holly.jpg',\n url: undefined,\n title: 'Guest writer',\n bio: [\n 'Holly Smith is an online marketer and writer. She writes about SaaS tech, branding, and marketing.',\n 'Her content helps small business owners and entrepreneurs make informed decisions and grow their businesses online.',\n ],\n socials: [],\n alumniOf: [],\n};\n","export type Breadcrumb = {\n url: string;\n title: string;\n}\n\nexport const learningBreadcrumb: Breadcrumb = { url: '/learning/', title: 'Learning center' };\nexport const commandLineToolsBreadcrumb: Breadcrumb = { url: '/learning/#command-line-tools', title: 'Command line tools' };\nexport const emailBreadcrumb: Breadcrumb = { url: '/learning/mx-vs-spf-vs-dmarc-vs-dkim-vs-bimi/', title: 'Email and the DNS' };\nexport const aboutBreadcrumb: Breadcrumb = { url: '/about/', title: 'About' };\n","import { defineComponent as _defineComponent } from 'vue'\nimport { openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"data-sitekey\", \"id\"]\n\nimport { onMounted } from 'vue';\n\n/* eslint-disable */\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'TurnstileCaptcha',\n props: {\n sitekey: {\n type: String,\n required: true,\n },\n id: {\n type: String,\n required: true,\n },\n},\n setup(__props) {\n\nconst props = __props;\n\n\n\nfunction executeWhenTurnstileLoads(cb: () => void) {\n console.log('Loading Turnstile')\n // @ts-ignore\n if (typeof window.turnstile === 'object') {\n console.log('Turnstile loaded')\n cb();\n } else {\n setTimeout(() => {\n executeWhenTurnstileLoads(cb);\n }, 1000);\n }\n}\n\nonMounted(() => {\n executeWhenTurnstileLoads(() => {\n // @ts-ignore\n window.turnstile.render(`#${props.id}-turnstile`, {\n sitekey: props.sitekey,\n });\n });\n})\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n \"data-sitekey\": __props.sitekey,\n id: `${__props.id}-turnstile`\n }, null, 8, _hoisted_1))\n}\n}\n\n})","import script from \"./TurnstileCaptcha.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./TurnstileCaptcha.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = { class: \"relative border border-gray-200 shadow-sm rounded-md bg-gray-50\" }\nconst _hoisted_2 = [\"src\", \"alt\"]\nconst _hoisted_3 = {\n key: 1,\n class: \"-mt-10 w-20 mx-auto block\"\n}\nconst _hoisted_4 = [\"src\", \"alt\"]\nconst _hoisted_5 = {\n key: 3,\n class: \"font-medium text-xl block mt-4 text-gray-700 mx-auto w-fit\"\n}\nconst _hoisted_6 = { class: \"text-lg text-center block text-indigo-600 font-medium\" }\nconst _hoisted_7 = { class: \"bg-white p-6 pt-4 mt-6 overflow-hidden rounded-b-md\" }\nconst _hoisted_8 = { class: \"flex space-x-5 mt-4 mb-0\" }\nconst _hoisted_9 = [\"href\", \"title\"]\nconst _hoisted_10 = { class: \"sr-only\" }\nconst _hoisted_11 = {\n key: 0,\n class: \"w-5 h-5\",\n fill: \"currentColor\",\n viewBox: \"0 0 20 20\",\n \"aria-hidden\": \"true\"\n}\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M6.29 18.251c7.547 0 11.675-6.253 11.675-11.675 0-.178 0-.355-.012-.53A8.348 8.348 0 0020 3.92a8.19 8.19 0 01-2.357.646 4.118 4.118 0 001.804-2.27 8.224 8.224 0 01-2.605.996 4.107 4.107 0 00-6.993 3.743 11.65 11.65 0 01-8.457-4.287 4.106 4.106 0 001.27 5.477A4.073 4.073 0 01.8 7.713v.052a4.105 4.105 0 003.292 4.022 4.095 4.095 0 01-1.853.07 4.108 4.108 0 003.834 2.85A8.233 8.233 0 010 16.407a11.616 11.616 0 006.29 1.84\" }, null, -1)\nconst _hoisted_13 = [\n _hoisted_12\n]\nconst _hoisted_14 = {\n key: 1,\n class: \"w-5 h-5\",\n fill: \"currentColor\",\n viewBox: \"0 0 20 20\",\n \"aria-hidden\": \"true\"\n}\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"path\", {\n \"fill-rule\": \"evenodd\",\n d: \"M16.338 16.338H13.67V12.16c0-.995-.017-2.277-1.387-2.277-1.39 0-1.601 1.086-1.601 2.207v4.248H8.014v-8.59h2.559v1.174h.037c.356-.675 1.227-1.387 2.526-1.387 2.703 0 3.203 1.778 3.203 4.092v4.711zM5.005 6.575a1.548 1.548 0 11-.003-3.096 1.548 1.548 0 01.003 3.096zm-1.337 9.763H6.34v-8.59H3.667v8.59zM17.668 1H2.328C1.595 1 1 1.581 1 2.298v15.403C1 18.418 1.595 19 2.328 19h15.34c.734 0 1.332-.582 1.332-1.299V2.298C19 1.581 18.402 1 17.668 1z\",\n \"clip-rule\": \"evenodd\"\n}, null, -1)\nconst _hoisted_16 = [\n _hoisted_15\n]\nconst _hoisted_17 = {\n key: 2,\n xmlns: \"http://www.w3.org/2000/svg\",\n class: \"h-5 w-5\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\"\n}\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M12 14l9-5-9-5-9 5 9 5z\" }, null, -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"path\", { d: \"M12 14l6.16-3.422a12.083 12.083 0 01.665 6.479A11.952 11.952 0 0012 20.055a11.952 11.952 0 00-6.824-2.998 12.078 12.078 0 01.665-6.479L12 14z\" }, null, -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"path\", {\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n d: \"M12 14l9-5-9-5-9 5 9 5zm0 0l6.16-3.422a12.083 12.083 0 01.665 6.479A11.952 11.952 0 0012 20.055a11.952 11.952 0 00-6.824-2.998 12.078 12.078 0 01.665-6.479L12 14zm-4 6v-7.5l4-2.222\"\n}, null, -1)\nconst _hoisted_21 = [\n _hoisted_18,\n _hoisted_19,\n _hoisted_20\n]\nconst _hoisted_22 = {\n key: 3,\n xmlns: \"http://www.w3.org/2000/svg\",\n class: \"h-5 w-5\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\"\n}\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"path\", {\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n d: \"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"\n}, null, -1)\nconst _hoisted_24 = [\n _hoisted_23\n]\nconst _hoisted_25 = {\n key: 4,\n xmlns: \"http://www.w3.org/2000/svg\",\n class: \"h-5 w-5\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\"\n}\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"path\", {\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n d: \"M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z\"\n}, null, -1)\nconst _hoisted_27 = [\n _hoisted_26\n]\nconst _hoisted_28 = {\n key: 5,\n xmlns: \"http://www.w3.org/2000/svg\",\n class: \"h-5 w-5\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\"\n}\nconst _hoisted_29 = /*#__PURE__*/_createElementVNode(\"path\", {\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n d: \"M12 21a9.004 9.004 0 008.716-6.747M12 21a9.004 9.004 0 01-8.716-6.747M12 21c2.485 0 4.5-4.03 4.5-9S14.485 3 12 3m0 18c-2.485 0-4.5-4.03-4.5-9S9.515 3 12 3m0 0a8.997 8.997 0 017.843 4.582M12 3a8.997 8.997 0 00-7.843 4.582m15.686 0A11.953 11.953 0 0112 10.5c-2.998 0-5.74-1.1-7.843-2.918m15.686 0A8.959 8.959 0 0121 12c0 .778-.099 1.533-.284 2.253m0 0A17.919 17.919 0 0112 16.5c-3.162 0-6.133-.815-8.716-2.247m0 0A9.015 9.015 0 013 12c0-1.605.42-3.113 1.157-4.418\"\n}, null, -1)\nconst _hoisted_30 = [\n _hoisted_29\n]\n\nimport { PropType } from 'vue';\nimport { Author } from '@/common/authors';\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'AuthorBox',\n props: {\n author: {\n type: Object as PropType,\n required: true,\n },\n},\n setup(__props) {\n\n\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (__props.author.url)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n to: __props.author.url,\n class: \"-mt-10 w-20 mx-auto block\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"img\", {\n src: __props.author.img,\n class: \"rounded-full\",\n alt: `${__props.author.firstName} ${__props.author.lastName}`\n }, null, 8, _hoisted_2)\n ]),\n _: 1\n }, 8, [\"to\"]))\n : (_openBlock(), _createElementBlock(\"span\", _hoisted_3, [\n _createElementVNode(\"img\", {\n src: __props.author.img,\n class: \"rounded-full\",\n alt: `${__props.author.firstName} ${__props.author.lastName}`\n }, null, 8, _hoisted_4)\n ])),\n (__props.author.url)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 2,\n to: __props.author.url,\n class: \"font-medium text-xl block mt-4 text-gray-700 mx-auto w-fit\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(__props.author.firstName) + \" \" + _toDisplayString(__props.author.lastName), 1)\n ]),\n _: 1\n }, 8, [\"to\"]))\n : (_openBlock(), _createElementBlock(\"span\", _hoisted_5, _toDisplayString(__props.author.firstName) + \" \" + _toDisplayString(__props.author.lastName), 1)),\n _createElementVNode(\"span\", _hoisted_6, _toDisplayString(__props.author.title), 1),\n _createElementVNode(\"div\", _hoisted_7, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(__props.author.bio, (bioParagraph) => {\n return (_openBlock(), _createElementBlock(\"span\", {\n key: bioParagraph,\n class: \"block pt-2 text-gray-700\"\n }, _toDisplayString(bioParagraph), 1))\n }), 128)),\n _createElementVNode(\"ul\", _hoisted_8, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(__props.author.socials, (social) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: social.url\n }, [\n _createElementVNode(\"a\", {\n href: social.url,\n class: \"text-gray-400 hover:text-gray-500\",\n title: `${__props.author.firstName}'s ${social.platform} profile`\n }, [\n _createElementVNode(\"span\", _hoisted_10, _toDisplayString(social.platform), 1),\n (social.platform === 'Twitter')\n ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_11, _hoisted_13))\n : (social.platform === 'LinkedIn')\n ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_14, _hoisted_16))\n : (social.platform === 'Google Scholar')\n ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_17, _hoisted_21))\n : (social.platform === 'IETF')\n ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_22, _hoisted_24))\n : (social.platform === 'Google Patents')\n ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_25, _hoisted_27))\n : (social.platform === 'Website')\n ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_28, _hoisted_30))\n : _createCommentVNode(\"\", true)\n ], 8, _hoisted_9)\n ]))\n }), 128))\n ])\n ])\n ]))\n}\n}\n\n})","import script from \"./AuthorBox.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AuthorBox.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n class: \"h-3 w-3 inline -mt-0.5\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\"\n}, [\n /*#__PURE__*/_createElementVNode(\"path\", {\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n d: \"M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1\"\n })\n], -1)\nconst _hoisted_2 = [\"value\"]\n\nimport { ref } from 'vue';\nimport { useRouter } from 'vue-router';\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'CopyArticleLink',\n setup(__props) {\n\nconst input = ref(null);\nconst recentlyClicked = ref(false);\nconst router = useRouter();\nconst route = ref(router.currentRoute.value.fullPath);\n\nfunction clicked() {\n if (input.value) {\n input.value.setAttribute('type', 'text');\n input.value.select();\n document.execCommand('copy');\n input.value.blur(); // Prevent keyboard from popping up on Android\n input.value.setAttribute('type', 'hidden');\n\n recentlyClicked.value = true;\n setTimeout(() => { recentlyClicked.value = false; }, 2000);\n }\n}\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createElementVNode(\"span\", {\n onClick: clicked,\n class: \"cursor-pointer block text-sm no-underline text-blue-600 hover:text-blue-800 w-fit mb-6\"\n }, [\n _createTextVNode(_toDisplayString(recentlyClicked.value ? 'Link copied' : 'Copy article link') + \" \", 1),\n _hoisted_1\n ]),\n _createElementVNode(\"input\", {\n type: \"hidden\",\n value: `https://www.nslookup.io${route.value}`,\n ref_key: \"input\",\n ref: input\n }, null, 8, _hoisted_2)\n ], 64))\n}\n}\n\n})","import script from \"./CopyArticleLink.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CopyArticleLink.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","// eslint-disable-next-line @typescript-eslint/ban-types\nexport default function throttle(fn: Function, wait = 300) {\n let inThrottle: boolean;\n let lastFn: ReturnType;\n let lastTime: number;\n return function run(this: unknown) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const context = this;\n // eslint-disable-next-line prefer-rest-params\n const args = arguments;\n if (!inThrottle) {\n fn.apply(context, args);\n lastTime = Date.now();\n inThrottle = true;\n } else {\n clearTimeout(lastFn);\n lastFn = setTimeout(() => {\n if (Date.now() - lastTime >= wait) {\n fn.apply(context, args);\n lastTime = Date.now();\n }\n }, Math.max(wait - (Date.now() - lastTime), 0));\n }\n };\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, resolveComponent as _resolveComponent, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot, renderList as _renderList, Fragment as _Fragment, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"my-2 block text-3xl leading-8 font-extrabold tracking-tight text-gray-900 sm:text-4xl\" }\nconst _hoisted_2 = [\"datetime\", \"title\"]\nconst _hoisted_3 = [\"datetime\"]\nconst _hoisted_4 = {\n key: 0,\n class: \"mt-8 ml-6 sticky top-8 bg-white\"\n}\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"h2\", { class: \"font-display font-medium text-slate-900\" }, \"On this page\", -1)\nconst _hoisted_6 = { class: \"mt-2 space-y-2 border-l-2 border-slate-100 lg:mt-4 lg:space-y-4 lg:border-slate-200\" }\n\nimport {\n onMounted, PropType, Ref, ref,\n} from 'vue';\nimport MetaTags from '@/components/MetaTags.vue';\nimport AuthorBox from '@/components/layout/AuthorBox.vue';\nimport CopyArticleLink from '@/components/micro/CopyArticleLink.vue';\nimport { formatDate } from '@/common/dateTime';\nimport { Author, authorToLdJson } from '@/common/authors';\nimport Breadcrumbs from '@/components/layout/BreadcrumbsComponent.vue';\nimport { Breadcrumb } from '@/model/Breadcrumb';\nimport throttle from '@/common/throttle';\nimport ContentPage from './ContentPage.vue';\nimport DnsForDevelopersAd from '../ads/DnsForDevelopersAd.vue';\n\ntype TocElement = {\n text: string;\n href: string;\n indent: boolean;\n};\n\n// declare a ref to hold the element reference\n// the name must match template ref value\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'BlogPost',\n props: {\n author: {\n type: Object as PropType,\n required: true,\n },\n editor: {\n type: Object as PropType,\n default: null,\n },\n title: {\n type: String,\n required: true,\n },\n description: {\n type: String,\n required: true,\n },\n url: {\n type: String,\n required: true,\n },\n breadcrumbs: {\n type: Array as PropType>,\n required: true,\n },\n img1024x512: {\n type: String,\n default: null,\n },\n img1200x630: {\n type: String,\n default: null,\n },\n written: {\n type: Date,\n required: true,\n },\n updated: {\n type: Date,\n default: null,\n },\n},\n setup(__props) {\n\n\n\nconst content: Ref = ref(null);\nconst tocElements: Ref> = ref([]);\nconst active: Ref = ref(undefined);\n\nonMounted(() => {\n const headings = (Array.from(content.value?.querySelectorAll('h2,h3') ?? []) as Array)\n .filter((h) => !h.classList.contains('ignore-toc'));\n\n tocElements.value = headings\n .map((h) => {\n const e = h;\n const text = e.innerText.trim();\n e.id = text.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');\n return {\n text,\n href: `#${e.id}`,\n indent: e.tagName === 'H3',\n };\n });\n\n const throttledOnScroll = throttle(() => {\n active.value = `#${headings.slice()\n .reverse()\n .find((h) => h.getBoundingClientRect().top < (window.innerHeight / 3))\n ?.id}`;\n }, 100);\n\n window.addEventListener('scroll', throttledOnScroll);\n});\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n _createVNode(MetaTags, {\n title: __props.title,\n description: __props.description,\n url: __props.url,\n img1024x512: __props.img1024x512,\n img1200x630: __props.img1200x630,\n written: __props.written,\n modified: __props.updated\n }, null, 8, [\"title\", \"description\", \"url\", \"img1024x512\", \"img1200x630\", \"written\", \"modified\"]),\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"Article\\\", \\\"author\\\": \" + _toDisplayString(_unref(authorToLdJson)(__props.author)) + \", \" + _toDisplayString(__props.editor ? `\"editor\": ${_unref(authorToLdJson)(__props.editor)},` : ``) + \" \\\"copyrightHolder\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"https://www.nslookup.io/\\\", \\\"email\\\": \\\"hello@nslookup.io\\\" }, \\\"copyrightYear\\\": \" + _toDisplayString(__props.written.getFullYear()) + \", \\\"url\\\": \\\"https://www.nslookup.io\" + _toDisplayString(__props.url) + \"\\\", \\\"thumbnailUrl\\\": \\\"\" + _toDisplayString(__props.img1024x512) + \"\\\", \\\"abstract\\\": \\\"\" + _toDisplayString(__props.description.replaceAll(\"\\\"\", \"\\\\\\\"\")) + \"\\\" } \", 1)\n ]),\n _: 1\n }))\n ])),\n _createVNode(ContentPage, null, {\n content: _withCtx(() => [\n _createVNode(Breadcrumbs, {\n class: \"w-full max-w-[46rem]\",\n routes: __props.breadcrumbs.concat({ url: __props.url, title: __props.title })\n }, null, 8, [\"routes\"]),\n _createVNode(_component_router_link, {\n to: __props.breadcrumbs[__props.breadcrumbs.length - 1].url,\n class: \"block mt-16 text-base text-indigo-600 hover:text-indigo-800 font-semibold tracking-wide uppercase no-underline\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(__props.breadcrumbs[__props.breadcrumbs.length - 1].title), 1)\n ]),\n _: 1\n }, 8, [\"to\"]),\n _createElementVNode(\"h1\", _hoisted_1, _toDisplayString(__props.title), 1),\n _createVNode(CopyArticleLink),\n (__props.updated)\n ? (_openBlock(), _createElementBlock(\"time\", {\n key: 0,\n datetime: __props.updated.toISOString(),\n class: \"block text-sm\",\n title: `Written ${_unref(formatDate)(__props.written)}`\n }, \"Updated \" + _toDisplayString(_unref(formatDate)(__props.updated)), 9, _hoisted_2))\n : (_openBlock(), _createElementBlock(\"time\", {\n key: 1,\n datetime: __props.written.toISOString(),\n class: \"block text-sm\"\n }, _toDisplayString(_unref(formatDate)(__props.written)), 9, _hoisted_3)),\n _createElementVNode(\"div\", {\n ref_key: \"content\",\n ref: content\n }, [\n _renderSlot(_ctx.$slots, \"default\")\n ], 512)\n ]),\n \"aside-right\": _withCtx(() => [\n _createVNode(AuthorBox, {\n author: __props.author,\n class: \"mt-72\"\n }, null, 8, [\"author\"]),\n (tocElements.value.length > 1)\n ? (_openBlock(), _createElementBlock(\"nav\", _hoisted_4, [\n _hoisted_5,\n _createElementVNode(\"ul\", _hoisted_6, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(tocElements.value, (tocElement) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: tocElement.href,\n class: \"relative\"\n }, [\n _createVNode(_component_router_link, {\n class: _normalizeClass([\n 'block w-full before:pointer-events-none before:absolute before:-left-1 before:top-1/2 before:h-1.5 before:w-1.5 before:-translate-y-1/2 before:rounded-full',\n tocElement.indent ? 'pl-7' : 'pl-3.5',\n active.value === tocElement.href ? 'font-semibold text-indigo-500 before:bg-indigo-500' : 'text-slate-500 before:hidden before:bg-slate-300 hover:text-slate-600 hover:before:block',\n ]),\n to: tocElement.href\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(tocElement.text), 1)\n ]),\n _: 2\n }, 1032, [\"class\", \"to\"])\n ]))\n }), 128))\n ]),\n _createVNode(DnsForDevelopersAd, { class: \"mt-10\" })\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 3\n })\n ], 64))\n}\n}\n\n})","import script from \"./BlogPost.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./BlogPost.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = {\n class: \"hidden not-prose mt-5 md:block\",\n \"aria-label\": \"Breadcrumb\"\n}\nconst _hoisted_2 = { class: \"flex items-center space-x-4 my-3 pl-0\" }\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"svg\", {\n class: \"flex-shrink-0 h-5 w-5\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n \"aria-hidden\": \"true\"\n}, [\n /*#__PURE__*/_createElementVNode(\"path\", { d: \"M10.707 2.293a1 1 0 00-1.414 0l-7 7a1 1 0 001.414 1.414L4 10.414V17a1 1 0 001 1h2a1 1 0 001-1v-2a1 1 0 011-1h2a1 1 0 011 1v2a1 1 0 001 1h2a1 1 0 001-1v-6.586l.293.293a1 1 0 001.414-1.414l-7-7z\" })\n], -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"sr-only\" }, \"Home\", -1)\nconst _hoisted_5 = { class: \"flex items-center\" }\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"svg\", {\n class: \"flex-shrink-0 h-5 w-5 text-gray-300\",\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"currentColor\",\n viewBox: \"0 0 20 20\",\n \"aria-hidden\": \"true\"\n}, [\n /*#__PURE__*/_createElementVNode(\"path\", { d: \"M5.555 17.776l8-16 .894.448-8 16-.894-.448z\" })\n], -1)\nconst _hoisted_7 = {\n key: 0,\n class: \"ml-4 text-sm font-medium text-gray-500\"\n}\n\nimport { PropType } from 'vue';\nimport { Breadcrumb } from '@/model/Breadcrumb';\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'BreadcrumbsComponent',\n props: {\n routes: {\n type: Array as PropType>,\n required: true,\n },\n},\n setup(__props) {\n\n\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"nav\", _hoisted_1, [\n _createElementVNode(\"ol\", _hoisted_2, [\n _createElementVNode(\"li\", null, [\n _createElementVNode(\"div\", null, [\n _createVNode(_component_router_link, {\n to: \"/\",\n class: \"text-gray-400 hover:text-gray-500\"\n }, {\n default: _withCtx(() => [\n _hoisted_3,\n _hoisted_4\n ]),\n _: 1\n })\n ])\n ]),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(__props.routes, (route, index) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: route.url\n }, [\n _createElementVNode(\"div\", _hoisted_5, [\n _hoisted_6,\n (index === __props.routes.length - 1)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_7, _toDisplayString(route.title), 1))\n : (_openBlock(), _createBlock(_component_router_link, {\n key: 1,\n to: route.url,\n class: \"ml-4 text-sm font-medium text-gray-500 hover:text-gray-700\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(route.title), 1)\n ]),\n _: 2\n }, 1032, [\"to\"]))\n ])\n ]))\n }), 128))\n ])\n ]))\n}\n}\n\n})","import script from \"./BreadcrumbsComponent.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./BreadcrumbsComponent.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, normalizeClass as _normalizeClass, withCtx as _withCtx, createBlock as _createBlock, renderSlot as _renderSlot, createStaticVNode as _createStaticVNode } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n \"aria-hidden\": \"true\",\n viewBox: \"0 0 32 32\",\n fill: \"none\",\n class: \"h-8 w-8 flex-none [--icon-foreground:theme(colors.slate.900)] [--icon-background:theme(colors.white)]\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createStaticVNode(\"\", 2)\nconst _hoisted_4 = [\n _hoisted_2\n]\nconst _hoisted_5 = {\n key: 1,\n \"aria-hidden\": \"true\",\n viewBox: \"0 0 32 32\",\n fill: \"none\",\n class: \"h-8 w-8 flex-none [--icon-foreground:theme(colors.amber.900)] [--icon-background:theme(colors.amber.100)]\"\n}\nconst _hoisted_6 = /*#__PURE__*/_createStaticVNode(\"\", 2)\nconst _hoisted_8 = [\n _hoisted_6\n]\nconst _hoisted_9 = { class: \"ml-4 flex-auto min-w-[1px]\" }\n\nimport { PropType } from 'vue';\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'CalloutComponent',\n props: {\n icon: {\n type: String as PropType<'info' | 'warning'>,\n required: true,\n },\n heading: {\n type: String as PropType<'h2' | 'h3' | 'h4'>,\n default: 'h2',\n },\n title: {\n type: String,\n default: undefined,\n },\n},\n setup(__props) {\n\nconst props = __props;\n\nconst styles = {\n info: {\n container: 'bg-sky-50',\n title: 'text-sky-900',\n body: 'text-sky-800 [--tw-prose-background:theme(colors.sky.50)] prose-a:text-sky-900 prose-code:text-sky-900',\n },\n warning: {\n container: 'bg-amber-50',\n title: 'text-amber-900',\n body: 'text-amber-800 [--tw-prose-underline:theme(colors.amber.400)] [--tw-prose-background:theme(colors.amber.50)] prose-a:text-amber-900 prose-code:text-amber-900',\n },\n};\n\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"my-8 flex rounded-3xl p-6\", styles[__props.icon].container])\n }, [\n (__props.icon === 'info')\n ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_4))\n : (_openBlock(), _createElementBlock(\"svg\", _hoisted_5, _hoisted_8)),\n _createElementVNode(\"div\", _hoisted_9, [\n (__props.title)\n ? (_openBlock(), _createBlock(_resolveDynamicComponent(__props.heading), {\n key: 0,\n class: _normalizeClass([\"ignore-toc m-0 mb-2.5 font-display text-xl font-semibold leading-8\", styles[__props.icon].title])\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(__props.title), 1)\n ]),\n _: 1\n }, 8, [\"class\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"prose\", styles[__props.icon].body])\n }, [\n _renderSlot(_ctx.$slots, \"default\")\n ], 2)\n ])\n ], 2))\n}\n}\n\n})","import script from \"./CalloutComponent.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CalloutComponent.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, renderSlot as _renderSlot, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"id\"]\nconst _hoisted_2 = { class: \"w-1/2 prose prose-indigo\" }\nconst _hoisted_3 = { class: \"float-left inline text-6xl leading-16 w-16 text-center\" }\nconst _hoisted_4 = { class: \"mt-0 min-h-[4rem]\" }\nconst _hoisted_5 = [\"src\", \"alt\", \"width\", \"height\"]\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'GuideStep',\n props: {\n step: {\n type: Number,\n required: true,\n },\n title: {\n type: String,\n required: true,\n },\n img: {\n type: String,\n required: true,\n },\n imgWidth: {\n type: Number,\n required: true,\n },\n imgHeight: {\n type: Number,\n required: true,\n },\n},\n setup(__props) {\n\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n id: `step${__props.step}`,\n class: \"flex flex-col gap-6 bg-white shadow mt-6 p-6 pb-10 rounded sm:flex-row\"\n }, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(__props.step), 1),\n _createElementVNode(\"h2\", _hoisted_4, _toDisplayString(__props.title), 1),\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n _createElementVNode(\"img\", {\n class: \"w-full border border-black/10 rounded-md shadow sm:w-1/2 mb-auto\",\n src: __props.img,\n alt: __props.title,\n width: __props.imgWidth,\n height: __props.imgHeight\n }, null, 8, _hoisted_5)\n ], 8, _hoisted_1))\n}\n}\n\n})","import script from \"./GuideStep.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./GuideStep.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"!rounded-md border-0\" }\n\nimport Prism from 'prismjs';\nimport { ref, useSlots, watchEffect } from 'vue';\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'CodeBlock',\n props: {\n syntax: {\n type: String,\n default: 'dns-zone-file',\n },\n},\n setup(__props) {\n\nconst slots = useSlots();\nconst code = ref(null);\n\n\n\nwatchEffect(() => {\n if (code.value && slots.default) {\n code.value.innerHTML = slots.default()[0].children?.toString() || '';\n Prism.highlightElement(code.value);\n }\n});\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"pre\", _hoisted_1, [\n _createElementVNode(\"code\", {\n ref_key: \"code\",\n ref: code,\n class: _normalizeClass(`language-${__props.syntax}`)\n }, null, 2)\n ]))\n}\n}\n\n})","import script from \"./CodeBlock.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./CodeBlock.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, createElementVNode as _createElementVNode, createStaticVNode as _createStaticVNode, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createStaticVNode(\"

Jeff Westhead

At Microsoft, Jeff worked on DNS in both Windows and Azure. With his 28 years of experience in network engineering, he is an expert on DNS and DNSSEC. Jeff now works as a technical writer for NsLookup.

\\\"Jeff

Work on DNS at Microsoft

From 2015 to 2021 Jeff worked on Azure DNS. He designed and implemented many core features in Azure DNS. He was part of the initial Redmond team created to deliver this long-overdue feature to Azure customers. Jeff increased the original implementation's DNS query throughput by over 100x, and later helped integrate these performance improvements into Azure Traffic Manager to increase throughput by over 10x.

Jeff was a key contributor in DNS DDoS response and mitigation for Microsoft. As part of the response to Mirai, he collaborated with an external DDoS hardware vendor and helped architect a global DNS DDoS system for Azure DNS. He designed and implemented the control plane for this system.

He also designed an Azure cloud-based DNS query test platform capable of generating millions of queries per second and leveraged this to provide DNS stress and fuzz testing for many DNS services at Microsoft.

Jeff was the primary DNS subject-matter expert at Microsoft for two decades. He provided DNS reviews, advice, and expertise to O365, Bing, MSIT, Hotmail, and teams across Azure. He was the Azure DNS protocols team lead in 2018-2019.

He was deeply involved in numerous DNS vulnerability incidents with collegues in MSRC (Microsoft Security Response Center). He was continually involved in DevOps for the Azure DNS platform as a whole. In 2020, he authored the roadmap and full end-to-end architecture for DNSSEC in Azure DNS, and began implementation in 2021.

Prior to Azure, Jeff worked on the Windows DNS Server including three patents and architecture, design, and implementation of DNSSEC. He also worked on Windows Networking components including EAP, Connection Manager, and Windows Phone.

DNS patents

Jeff holds four US patent, which he co-authored during his time at Microsoft.

  • US 7567582 — Branch Office DNS Storage and Resolution
  • WO2007100426A1 — Global Names Zone
  • US 8681995 — Supporting DNS Security in a Multimaster Environment
  • EP2077028A4 — Name challenge enabled zones

Education

Jeff completed his Bachelor of Applied Science in Computer Engineering at the University of Waterloo (Canada) in 1993.

\", 2)\n\nimport HeaderComponent from '@/components/layout/HeaderComponent.vue';\nimport FooterComponent from '@/components/layout/FooterComponent.vue';\nimport MetaTags from '@/components/MetaTags.vue';\nimport { authorToLdJson, jeff } from '@/common/authors';\nimport Breadcrumbs from '@/components/layout/BreadcrumbsComponent.vue';\nimport { aboutBreadcrumb } from '@/model/Breadcrumb';\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'AboutJeff',\n setup(__props) {\n\nconst breadcrumbs = [aboutBreadcrumb, { url: jeff.url, title: jeff.name }];\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n _createVNode(MetaTags, {\n title: \"About Jeff Westhead\",\n description: _unref(jeff).bio.join(' '),\n url: \"https://www.nslookup.io/about/jeff-westhead/\"\n }, null, 8, [\"description\"]),\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(authorToLdJson)(_unref(jeff))), 1)\n ]),\n _: 1\n }))\n ])),\n _createVNode(HeaderComponent),\n _createVNode(Breadcrumbs, {\n routes: breadcrumbs,\n class: \"w-full max-w-5xl mx-auto px-4 pb-5 sm:px-6 lg:px-8\"\n }),\n _hoisted_1,\n _createVNode(FooterComponent)\n ], 64))\n}\n}\n\n})","import script from \"./AboutJeff.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AboutJeff.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createStaticVNode as _createStaticVNode, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createStaticVNode(\"

Ruurtjan Pul

Before founding NsLookup, Ruurtjan worked as a software and infrastructure engineering consultant at BigData Republic. He now works full-time on NsLookup.

\\\"Ruurtjan
\", 1)\nconst _hoisted_2 = { class: \"flex-grow scroll-mt-14 sm:scroll-mt-32\" }\nconst _hoisted_3 = { class: \"mx-auto px-4 sm:px-6 md:max-w-2xl md:px-4 lg:max-w-5xl lg:px-8 relative py-20 lg:py-28 xl:py-32\" }\nconst _hoisted_4 = { class: \"mt-6 prose prose-indigo prose-lg text-gray-500 mx-auto\" }\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Life before NsLookup\", -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Ruurtjan worked as a software engineering and infrastructure engineering consultant at a small machine learning consultancy firm in The Netherlands, BigData Republic.\", -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"p\", null, \"He worked for start-ups, scale-ups and enterprises like the ING bank, Bol.com, Randstad, ProRail, Yolt and TNO.\", -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"p\", null, \"During this time, he worked on side projects like NsLookup in the evenings and weekends.\", -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Work on NsLookup\", -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"a\", { href: \"https://www.monomatic.io/\" }, \"Monomatic\", -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Ruurtjan now spends most of his time working on NsLookup. \", -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Education\", -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"In 2011, Ruurtjan completed his Bachelor of Science degree in Software Engineering at the Hanze University of Applied Sciences Groningen. He continued his studies in IT at the University of Groningen, where he graduated as a \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"master of science in Software Engineering and Distributed Systems\"),\n /*#__PURE__*/_createTextVNode(\" in 2015.\")\n], -1)\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Ruurtjan also holds certifications as a Scala and Java programmer, as well as on Apache Cassandra and Kafka.\", -1)\n\nimport HeaderComponent from '@/components/layout/HeaderComponent.vue';\nimport FooterComponent from '@/components/layout/FooterComponent.vue';\nimport MetaTags from '@/components/MetaTags.vue';\nimport { authorToLdJson, ruurtjan } from '@/common/authors';\nimport Breadcrumbs from '@/components/layout/BreadcrumbsComponent.vue';\nimport { aboutBreadcrumb } from '@/model/Breadcrumb';\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'AboutRuurtjan',\n setup(__props) {\n\nconst breadcrumbs = [aboutBreadcrumb, { url: ruurtjan.url, title: ruurtjan.name }];\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n _createVNode(MetaTags, {\n title: \"About Ruurtjan Pul\",\n description: _unref(ruurtjan).bio.join(' '),\n url: \"https://www.nslookup.io/about/ruurtjan-pul/\"\n }, null, 8, [\"description\"]),\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_unref(authorToLdJson)(_unref(ruurtjan))), 1)\n ]),\n _: 1\n }))\n ])),\n _createVNode(HeaderComponent),\n _createVNode(Breadcrumbs, {\n routes: breadcrumbs,\n class: \"w-full max-w-5xl mx-auto px-4 pb-5 sm:px-6 lg:px-8\"\n }),\n _hoisted_1,\n _createElementVNode(\"section\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _hoisted_5,\n _hoisted_6,\n _hoisted_7,\n _hoisted_8,\n _hoisted_9,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"Early 2022, \"),\n _createVNode(_component_router_link, { to: \"https://ruurtjan.com/articles/i-quit-my-job\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"Ruurtjan quit his job\")\n ]),\n _: 1\n }),\n _createTextVNode(\" at BigData Republic to work full-time on his passion projects. He incorporated NsLookup under his company \"),\n _hoisted_10,\n _createTextVNode(\".\")\n ]),\n _hoisted_11,\n _hoisted_12,\n _hoisted_13,\n _hoisted_14\n ])\n ])\n ]),\n _createVNode(FooterComponent)\n ], 64))\n}\n}\n\n})","import script from \"./AboutRuurtjan.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AboutRuurtjan.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, Teleport as _Teleport, openBlock as _openBlock, createBlock as _createBlock, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createTextVNode as _createTextVNode, createStaticVNode as _createStaticVNode, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createStaticVNode(\"

Simplicity perfected

We believe universal access to great tools accelerates global innovation, and levels the playing field for everyone.

\", 1)\nconst _hoisted_2 = { class: \"flex-grow bg-white\" }\nconst _hoisted_3 = { class: \"mx-auto py-12 px-4 max-w-5xl sm:px-6 lg:px-8 lg:py-24\" }\nconst _hoisted_4 = { class: \"space-y-12 lg:grid lg:grid-cols-3 lg:gap-8 lg:space-y-0\" }\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"space-y-5 sm:space-y-4\" }, [\n /*#__PURE__*/_createElementVNode(\"h2\", { class: \"text-3xl font-extrabold tracking-tight sm:text-4xl\" }, \"Our team\"),\n /*#__PURE__*/_createElementVNode(\"p\", { class: \"text-xl text-gray-500\" }, \"We're a small, bootstrapped team with both academic and industry experience.\")\n], -1)\nconst _hoisted_6 = { class: \"lg:col-span-2\" }\nconst _hoisted_7 = { class: \"space-y-12 sm:divide-y sm:divide-gray-200 sm:space-y-0 sm:-mt-8 lg:gap-x-8 lg:space-y-0\" }\nconst _hoisted_8 = { class: \"sm:py-8\" }\nconst _hoisted_9 = { class: \"space-y-4 sm:grid sm:grid-cols-3 sm:items-start sm:gap-6 sm:space-y-0\" }\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"object-cover shadow-lg rounded-lg\",\n src: \"/img/ruurtjan-lg.jpg\",\n alt: \"Ruurtjan Pul\",\n title: \"Ruurtjan Pul\"\n}, null, -1)\nconst _hoisted_11 = { class: \"sm:col-span-2\" }\nconst _hoisted_12 = { class: \"space-y-4\" }\nconst _hoisted_13 = { class: \"text-lg leading-6 font-medium space-y-1\" }\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"p\", { class: \"text-indigo-600\" }, \"Founder / Editor\", -1)\nconst _hoisted_15 = /*#__PURE__*/_createStaticVNode(\"

Before founding NsLookup, Ruurtjan worked as a software engineering consultant at BigData Republic. He now works full-time on NsLookup.

\", 2)\nconst _hoisted_17 = { class: \"sm:py-8\" }\nconst _hoisted_18 = { class: \"space-y-4 sm:grid sm:grid-cols-3 sm:items-start sm:gap-6 sm:space-y-0\" }\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"object-cover shadow-lg rounded-lg\",\n src: \"/img/jeff-lg.jpg\",\n alt: \"Jeff Westhead\",\n title: \"Jeff Westhead\"\n}, null, -1)\nconst _hoisted_20 = { class: \"sm:col-span-2\" }\nconst _hoisted_21 = { class: \"space-y-4\" }\nconst _hoisted_22 = { class: \"text-lg leading-6 font-medium space-y-1\" }\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"p\", { class: \"text-indigo-600\" }, \"Technical writer\", -1)\nconst _hoisted_24 = /*#__PURE__*/_createStaticVNode(\"

At Microsoft, Jeff worked on DNS in both Windows and Azure. With his 28 years of experience in network engineering, he is an expert on DNS and DNSSEC.

\", 2)\n\nimport HeaderComponent from '@/components/layout/HeaderComponent.vue';\nimport FooterComponent from '@/components/layout/FooterComponent.vue';\nimport MetaTags from '@/components/MetaTags.vue';\nimport Breadcrumbs from '@/components/layout/BreadcrumbsComponent.vue';\nimport { aboutBreadcrumb } from '@/model/Breadcrumb';\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'AboutView',\n setup(__props) {\n\nconst breadcrumbs = [aboutBreadcrumb];\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n _createVNode(MetaTags, {\n title: \"About NsLookup.io\",\n description: \"We believe universal access to great tools accelerates global innovation, and levels the playing field for everyone.\",\n url: \"https://www.nslookup.io/about/\"\n })\n ])),\n _createVNode(HeaderComponent),\n _createVNode(Breadcrumbs, {\n routes: breadcrumbs,\n class: \"w-full max-w-5xl mx-auto px-4 pb-5 sm:px-6 lg:px-8\"\n }),\n _hoisted_1,\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _hoisted_5,\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"ul\", _hoisted_7, [\n _createElementVNode(\"li\", _hoisted_8, [\n _createElementVNode(\"div\", _hoisted_9, [\n _createVNode(_component_router_link, {\n to: \"/about/ruurtjan-pul/\",\n class: \"aspect-w-3 aspect-h-2 sm:aspect-w-3 sm:aspect-h-4\"\n }, {\n default: _withCtx(() => [\n _hoisted_10\n ]),\n _: 1\n }),\n _createElementVNode(\"div\", _hoisted_11, [\n _createElementVNode(\"div\", _hoisted_12, [\n _createElementVNode(\"div\", _hoisted_13, [\n _createElementVNode(\"h3\", null, [\n _createVNode(_component_router_link, {\n to: \"/about/ruurtjan-pul/\",\n class: \"text-black hover:text-black\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(\"Ruurtjan Pul\")\n ]),\n _: 1\n })\n ]),\n _hoisted_14\n ]),\n _hoisted_15\n ])\n ])\n ])\n ]),\n _createElementVNode(\"li\", _hoisted_17, [\n _createElementVNode(\"div\", _hoisted_18, [\n _createVNode(_component_router_link, {\n to: \"/about/jeff-westhead/\",\n class: \"aspect-w-3 aspect-h-2 sm:aspect-w-3 sm:aspect-h-4\"\n }, {\n default: _withCtx(() => [\n _hoisted_19\n ]),\n _: 1\n }),\n _createElementVNode(\"div\", _hoisted_20, [\n _createElementVNode(\"div\", _hoisted_21, [\n _createElementVNode(\"div\", _hoisted_22, [\n _createElementVNode(\"h3\", null, [\n _createVNode(_component_router_link, {\n to: \"/about/jeff-westhead/\",\n class: \"text-black hover:text-black\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(\"Jeff Westhead\")\n ]),\n _: 1\n })\n ]),\n _hoisted_23\n ]),\n _hoisted_24\n ])\n ])\n ])\n ])\n ])\n ])\n ])\n ])\n ]),\n _createVNode(FooterComponent)\n ], 64))\n}\n}\n\n})","import script from \"./AboutView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AboutView.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, Teleport as _Teleport, openBlock as _openBlock, createBlock as _createBlock, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"grow flex flex-col overflow-x-hidden\" }\nconst _hoisted_2 = { class: \"bg-gray-50\" }\nconst _hoisted_3 = { class: \"py-24 lg:py-32\" }\nconst _hoisted_4 = { class: \"relative z-10 mx-auto max-w-7xl pl-4 pr-8 sm:px-6 lg:px-8\" }\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"h1\", { class: \"text-4xl font-bold tracking-tight text-gray-900 sm:text-5xl lg:text-6xl\" }, \"DNS lookup API\", -1)\nconst _hoisted_6 = { class: \"mt-6 max-w-3xl text-xl text-gray-500\" }\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"section\", {\n class: \"grow relative bg-gray-50 pb-28\",\n \"aria-labelledby\": \"contact-heading\"\n}, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"relative mx-auto max-w-7xl px-4 sm:px-6 lg:px-8\" }, [\n /*#__PURE__*/_createElementVNode(\"svg\", {\n class: \"absolute top-0 right-0 z-0 -translate-y-16 translate-x-1/2 transform sm:translate-x-1/4 md:-translate-y-24 lg:-translate-y-72\",\n width: \"404\",\n height: \"384\",\n fill: \"none\",\n viewBox: \"0 0 404 384\",\n \"aria-hidden\": \"true\"\n }, [\n /*#__PURE__*/_createElementVNode(\"defs\", null, [\n /*#__PURE__*/_createElementVNode(\"pattern\", {\n id: \"64e643ad-2176-4f86-b3d7-f2c5da3b6a6d\",\n x: \"0\",\n y: \"0\",\n width: \"20\",\n height: \"20\",\n patternUnits: \"userSpaceOnUse\"\n }, [\n /*#__PURE__*/_createElementVNode(\"rect\", {\n x: \"0\",\n y: \"0\",\n width: \"4\",\n height: \"4\",\n class: \"text-gray-200\",\n fill: \"currentColor\"\n })\n ])\n ]),\n /*#__PURE__*/_createElementVNode(\"rect\", {\n width: \"404\",\n height: \"384\",\n fill: \"url(#64e643ad-2176-4f86-b3d7-f2c5da3b6a6d)\"\n })\n ])\n ]),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"relative bg-white shadow-xl\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"grid grid-cols-1 lg:grid-cols-3\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"relative overflow-hidden bg-gradient-to-b from-indigo-500 to-indigo-600 py-10 px-6 sm:px-10 xl:p-12\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", {\n class: \"pointer-events-none absolute inset-0 sm:hidden\",\n \"aria-hidden\": \"true\"\n }, [\n /*#__PURE__*/_createElementVNode(\"svg\", {\n class: \"absolute inset-0 h-full w-full\",\n width: \"343\",\n height: \"388\",\n viewBox: \"0 0 343 388\",\n fill: \"none\",\n preserveAspectRatio: \"xMidYMid slice\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, [\n /*#__PURE__*/_createElementVNode(\"path\", {\n d: \"M-99 461.107L608.107-246l707.103 707.107-707.103 707.103L-99 461.107z\",\n fill: \"url(#linear1)\",\n \"fill-opacity\": \".1\"\n }),\n /*#__PURE__*/_createElementVNode(\"defs\", null, [\n /*#__PURE__*/_createElementVNode(\"linearGradient\", {\n id: \"linear1\",\n x1: \"254.553\",\n y1: \"107.554\",\n x2: \"961.66\",\n y2: \"814.66\",\n gradientUnits: \"userSpaceOnUse\"\n }, [\n /*#__PURE__*/_createElementVNode(\"stop\", { \"stop-color\": \"#fff\" }),\n /*#__PURE__*/_createElementVNode(\"stop\", {\n offset: \"1\",\n \"stop-color\": \"#fff\",\n \"stop-opacity\": \"0\"\n })\n ])\n ])\n ])\n ]),\n /*#__PURE__*/_createElementVNode(\"div\", {\n class: \"pointer-events-none absolute top-0 right-0 bottom-0 hidden w-1/2 sm:block lg:hidden\",\n \"aria-hidden\": \"true\"\n }, [\n /*#__PURE__*/_createElementVNode(\"svg\", {\n class: \"absolute inset-0 h-full w-full\",\n width: \"359\",\n height: \"339\",\n viewBox: \"0 0 359 339\",\n fill: \"none\",\n preserveAspectRatio: \"xMidYMid slice\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, [\n /*#__PURE__*/_createElementVNode(\"path\", {\n d: \"M-161 382.107L546.107-325l707.103 707.107-707.103 707.103L-161 382.107z\",\n fill: \"url(#linear2)\",\n \"fill-opacity\": \".1\"\n }),\n /*#__PURE__*/_createElementVNode(\"defs\", null, [\n /*#__PURE__*/_createElementVNode(\"linearGradient\", {\n id: \"linear2\",\n x1: \"192.553\",\n y1: \"28.553\",\n x2: \"899.66\",\n y2: \"735.66\",\n gradientUnits: \"userSpaceOnUse\"\n }, [\n /*#__PURE__*/_createElementVNode(\"stop\", { \"stop-color\": \"#fff\" }),\n /*#__PURE__*/_createElementVNode(\"stop\", {\n offset: \"1\",\n \"stop-color\": \"#fff\",\n \"stop-opacity\": \"0\"\n })\n ])\n ])\n ])\n ]),\n /*#__PURE__*/_createElementVNode(\"div\", {\n class: \"pointer-events-none absolute top-0 right-0 bottom-0 hidden w-1/2 lg:block\",\n \"aria-hidden\": \"true\"\n }, [\n /*#__PURE__*/_createElementVNode(\"svg\", {\n class: \"absolute inset-0 h-full w-full\",\n width: \"160\",\n height: \"678\",\n viewBox: \"0 0 160 678\",\n fill: \"none\",\n preserveAspectRatio: \"xMidYMid slice\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, [\n /*#__PURE__*/_createElementVNode(\"path\", {\n d: \"M-161 679.107L546.107-28l707.103 707.107-707.103 707.103L-161 679.107z\",\n fill: \"url(#linear3)\",\n \"fill-opacity\": \".1\"\n }),\n /*#__PURE__*/_createElementVNode(\"defs\", null, [\n /*#__PURE__*/_createElementVNode(\"linearGradient\", {\n id: \"linear3\",\n x1: \"192.553\",\n y1: \"325.553\",\n x2: \"899.66\",\n y2: \"1032.66\",\n gradientUnits: \"userSpaceOnUse\"\n }, [\n /*#__PURE__*/_createElementVNode(\"stop\", { \"stop-color\": \"#fff\" }),\n /*#__PURE__*/_createElementVNode(\"stop\", {\n offset: \"1\",\n \"stop-color\": \"#fff\",\n \"stop-opacity\": \"0\"\n })\n ])\n ])\n ])\n ]),\n /*#__PURE__*/_createElementVNode(\"h2\", { class: \"text-lg text-white font-medium mb-3\" }, \"Our API supports\"),\n /*#__PURE__*/_createElementVNode(\"ul\", { class: \"prose text-white list-disc list-inside\" }, [\n /*#__PURE__*/_createElementVNode(\"li\", null, \"All DNS record types\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Authoritative, uncached responses\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Sampled recursive DNS server caches\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Single query and batch end points\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"≥99.95% uptime\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"500 free queries per month\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"24h email support\")\n ])\n ]),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"py-10 px-6 sm:px-10 lg:col-span-2 xl:p-12\" }, [\n /*#__PURE__*/_createElementVNode(\"h3\", { class: \"text-lg font-medium text-gray-900\" }, \"Join the waitlist\"),\n /*#__PURE__*/_createElementVNode(\"form\", {\n class: \"mt-6 grid grid-cols-1 gap-y-6 sm:grid-cols-2 sm:gap-x-8\",\n method: \"POST\",\n action: \"https://93a33901.sibforms.com/serve/MUIEANK2pNAvSHWpq9gDkB1cp3nnrajHYBPctlFLwE5dmrxBgxdK4D9BQkfueknFt4kZZRSQ97EgebTgHG9Ar8taM7niUDHLxiEDUZK-aXV71Vm0Nm27gOu5hfPM2jDUCkaHSgC98Y5HdTLg2y06s1kQPj0XMvhRmZIc0kNpLMiLyl6DKmx1E9H4FDShjx1csb1CeahpbvioutNr\"\n }, [\n /*#__PURE__*/_createElementVNode(\"div\", null, [\n /*#__PURE__*/_createElementVNode(\"label\", {\n for: \"first-name\",\n class: \"block text-sm font-medium text-gray-900\"\n }, \"First name\"),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"mt-1\" }, [\n /*#__PURE__*/_createElementVNode(\"input\", {\n maxlength: \"200\",\n type: \"text\",\n id: \"FIRSTNAME\",\n name: \"FIRSTNAME\",\n \"data-required\": \"true\",\n required: \"\",\n autocomplete: \"given-name\",\n class: \"block w-full rounded-md border border-gray-300 py-3 px-4 text-gray-900 shadow-sm focus:border-indigo-500 focus:ring-indigo-500\"\n })\n ])\n ]),\n /*#__PURE__*/_createElementVNode(\"div\", null, [\n /*#__PURE__*/_createElementVNode(\"label\", {\n for: \"last-name\",\n class: \"block text-sm font-medium text-gray-900\"\n }, \"Last name\"),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"mt-1\" }, [\n /*#__PURE__*/_createElementVNode(\"input\", {\n maxlength: \"200\",\n type: \"text\",\n id: \"LASTNAME\",\n name: \"LASTNAME\",\n \"data-required\": \"true\",\n required: \"\",\n autocomplete: \"family-name\",\n class: \"block w-full rounded-md border border-gray-300 py-3 px-4 text-gray-900 shadow-sm focus:border-indigo-500 focus:ring-indigo-500\"\n })\n ])\n ]),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"sm:col-span-2\" }, [\n /*#__PURE__*/_createElementVNode(\"label\", {\n for: \"EMAIL\",\n class: \"block text-sm font-medium text-gray-900\"\n }, \"Business email\"),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"mt-1\" }, [\n /*#__PURE__*/_createElementVNode(\"input\", {\n type: \"text\",\n id: \"EMAIL\",\n name: \"EMAIL\",\n autocomplete: \"off\",\n \"data-required\": \"true\",\n required: \"\",\n class: \"block w-full rounded-md border border-gray-300 py-3 px-4 text-gray-900 shadow-sm focus:border-indigo-500 focus:ring-indigo-500\"\n })\n ])\n ]),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"sm:col-span-2 sm:flex sm:justify-end\" }, [\n /*#__PURE__*/_createElementVNode(\"button\", {\n type: \"submit\",\n class: \"mt-2 inline-flex w-full items-center justify-center rounded-md border border-transparent bg-indigo-500 px-6 py-3 text-base font-medium text-white shadow-sm hover:bg-indigo-600 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 sm:w-auto\"\n }, \"Request access\")\n ]),\n /*#__PURE__*/_createElementVNode(\"label\", {\n class: \"hidden\",\n for: \"email_address_check\",\n \"data-required\": \"*\"\n }, \"Email address check\"),\n /*#__PURE__*/_createElementVNode(\"input\", {\n type: \"text\",\n name: \"email_address_check\",\n value: \"\",\n class: \"d-none\",\n id: \"email_address_check\"\n }),\n /*#__PURE__*/_createElementVNode(\"input\", {\n type: \"hidden\",\n name: \"locale\",\n value: \"en\"\n }),\n /*#__PURE__*/_createElementVNode(\"input\", {\n type: \"hidden\",\n name: \"html_type\",\n value: \"simple\"\n })\n ])\n ])\n ])\n ])\n ])\n], -1)\n\nimport MetaTags from '@/components/MetaTags.vue';\nimport HeaderComponent from '@/components/layout/HeaderComponent.vue';\nimport FooterComponent from '@/components/layout/FooterComponent.vue';\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'ApiView',\n setup(__props) {\n\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n _createVNode(MetaTags, {\n title: \"DNS lookup API\",\n description: \"Fetch DNS records with the NsLookup DNS lookup API. It will always return fresh data, without caching anything on our end.\",\n url: \"https://www.nslookup.io/dns-lookup-api/\"\n })\n ])),\n _createVNode(HeaderComponent),\n _createElementVNode(\"main\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _hoisted_5,\n _createElementVNode(\"p\", _hoisted_6, [\n _createTextVNode(\"Our \"),\n _createVNode(_component_router_link, {\n to: \"/\",\n title: \"DNS lookup\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(\"DNS lookup\")\n ]),\n _: 1\n }),\n _createTextVNode(\" API gives developers a reliable and fast way to query DNS records.\")\n ])\n ])\n ])\n ]),\n _hoisted_7\n ]),\n _createVNode(FooterComponent)\n ], 64))\n}\n}\n\n})","import script from \"./ApiView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./ApiView.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, Teleport as _Teleport, openBlock as _openBlock, createBlock as _createBlock, createElementVNode as _createElementVNode, unref as _unref, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, Fragment as _Fragment, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createStaticVNode as _createStaticVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex-grow bg-neutral-100\" }\nconst _hoisted_2 = { class: \"container mx-auto max-w-6xl\" }\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"h1\", { class: \"text-3xl mt-8 mb-6 ml-6\" }, \"Contact\", -1)\nconst _hoisted_4 = { class: \"flex flex-col gap-8 bg-white shadow p-6 pb-10 mb-20 rounded lg:flex-row\" }\nconst _hoisted_5 = { class: \"lg:w-1/2\" }\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"mx-auto mb-4\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"mx-auto rounded-full\",\n src: \"img/ruurtjan-150.jpg\",\n alt: \"Ruurtjan from NsLookup\"\n })\n], -1)\nconst _hoisted_7 = { class: \"prose prose-lg\" }\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"a\", { href: \"mailto:hello@nslookup.io\" }, \"hello@nslookup.io\", -1)\nconst _hoisted_9 = { class: \"lg:w-1/2\" }\nconst _hoisted_10 = {\n class: \"grid gap-y-6\",\n action: \"/forms/contact\",\n method: \"POST\"\n}\nconst _hoisted_11 = /*#__PURE__*/_createStaticVNode(\"
\", 3)\nconst _hoisted_14 = { class: \"flex flex-col justify-between items-end gap-6 sm:flex-row\" }\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"button\", {\n type: \"submit\",\n class: \"mt-2 h-fit inline-flex w-full items-center justify-center rounded-md border border-transparent bg-indigo-500 px-6 py-3 text-base font-medium text-white shadow-sm hover:bg-indigo-600 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 sm:w-auto\"\n}, \"Send\", -1)\nconst _hoisted_16 = { key: 1 }\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"br\", null, null, -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"br\", null, null, -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"br\", null, null, -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"br\", null, null, -1)\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"mailto:hello@nslookup.io\",\n class: \"underline font-semibold\"\n}, \"hello@nslookup.io\", -1)\n\nimport MetaTags from '@/components/MetaTags.vue';\nimport TurnstileCaptcha from '@/components/TurnstileCaptcha.vue';\nimport FooterComponent from '@/components/layout/FooterComponent.vue';\nimport HeaderComponent from '@/components/layout/HeaderComponent.vue';\nimport Alert from '@/components/micro/AlertComponent.vue';\nimport { useRoute } from 'vue-router';\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'ContactUs',\n setup(__props) {\n\nconst route = useRoute();\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n _createVNode(MetaTags, {\n title: \"Contact — NsLookup.io\",\n description: \"NsLookup.io is made by Ruurtjan Pul, an independent developer. You can contact him using this form or via email.\",\n url: \"https://www.nslookup.io/contact-us/\"\n })\n ])),\n _createVNode(HeaderComponent),\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"main\", _hoisted_2, [\n _hoisted_3,\n _createElementVNode(\"div\", _hoisted_4, [\n (['#', ''].includes(_unref(route).hash))\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n _createElementVNode(\"div\", _hoisted_5, [\n _hoisted_6,\n _createElementVNode(\"p\", _hoisted_7, [\n _createTextVNode(\" Ruurtjan here, maker of \"),\n _createVNode(_component_router_link, {\n to: \"/\",\n title: \"nslookup\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(\"nslookup\")\n ]),\n _: 1\n }),\n _createTextVNode(\". Have feedback or a question? Send me an email at \"),\n _hoisted_8,\n _createTextVNode(\" or fill out the form, and I'll be in touch as soon as possible. \")\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"form\", _hoisted_10, [\n _hoisted_11,\n _createElementVNode(\"div\", _hoisted_14, [\n _createVNode(TurnstileCaptcha, {\n sitekey: \"0x4AAAAAAAFYkSLIi59M27dr\",\n id: \"contact\"\n }),\n _hoisted_15\n ])\n ])\n ])\n ], 64))\n : (_unref(route).hash === '#message-sent')\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_16, [\n _createTextVNode(\" Thank you for your message!\"),\n _hoisted_17,\n _hoisted_18,\n _createTextVNode(\"I'll be in touch as soon as possible. \")\n ]))\n : (_openBlock(), _createBlock(Alert, {\n key: 2,\n class: \"w-full\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(\" Your message could not be sent.\"),\n _hoisted_19,\n _hoisted_20,\n _createTextVNode(\"Please email me at \"),\n _hoisted_21,\n _createTextVNode(\" instead. \")\n ]),\n _: 1\n }))\n ])\n ])\n ]),\n _createVNode(FooterComponent)\n ], 64))\n}\n}\n\n})","import script from \"./ContactUs.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./ContactUs.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, Teleport as _Teleport, openBlock as _openBlock, createBlock as _createBlock, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"h1\", { class: \"pt-16 my-2 block text-3xl leading-8 font-extrabold tracking-tight text-gray-900 mb-1 sm:text-4xl\" }, \"Install the NsLookup browser extension\", -1)\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"p\", null, \"You can install a browser plugin to quickly access DNS records for a website you're on. On desktop, the following browsers are supported:\", -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"a\", {\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n href: \"https://addons.opera.com/en/extensions/details/nslookup-find-dns-records/\"\n }, \" Install the NsLookup.io Opera extension \")\n], -1)\n\nimport MetaTags from '@/components/MetaTags.vue';\nimport ContentPage from '@/components/layout/ContentPage.vue';\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'InstallView',\n setup(__props) {\n\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n _createVNode(MetaTags, {\n title: \"Install the NsLookup browser extension\",\n description: \"View DNS records in your browser or on a mobile device. Inspect all DNS record types and popular DNS caches as well as multiple geographical locations.\",\n url: \"https://www.nslookup.io/install/\"\n })\n ])),\n _createVNode(ContentPage, null, {\n content: _withCtx(() => [\n _hoisted_1,\n _hoisted_2,\n _createElementVNode(\"ul\", null, [\n _createElementVNode(\"li\", null, [\n _createVNode(_component_router_link, { to: \"/install/how-to-view-dns-records-in-firefox/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"Install the NsLookup.io Firefox extension\")\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"li\", null, [\n _createVNode(_component_router_link, { to: \"/install/how-to-view-dns-records-in-chrome/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"Install the NsLookup.io Chrome extension\")\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"li\", null, [\n _createVNode(_component_router_link, { to: \"/install/how-to-view-dns-records-in-edge/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"Install the NsLookup.io Edge extension\")\n ]),\n _: 1\n })\n ]),\n _hoisted_3\n ])\n ]),\n _: 1\n })\n ], 64))\n}\n}\n\n})","import script from \"./InstallView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./InstallView.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, Teleport as _Teleport, openBlock as _openBlock, createBlock as _createBlock, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, withCtx as _withCtx, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, unref as _unref } from \"vue\"\n\nconst _hoisted_1 = { class: \"relative bg-gray-50 pt-16 pb-20 px-4 sm:px-6 lg:pt-24 lg:pb-28 lg:px-8\" }\nconst _hoisted_2 = { class: \"relative max-w-7xl mx-auto\" }\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"div\", null, [\n /*#__PURE__*/_createElementVNode(\"h1\", { class: \"text-3xl tracking-tight font-extrabold text-gray-900 sm:text-4xl\" }, \"Learning center\")\n], -1)\nconst _hoisted_4 = [\"id\"]\nconst _hoisted_5 = { class: \"mt-12 mb-16 max-w-lg mx-auto grid gap-5 lg:grid-cols-3 lg:max-w-none\" }\nconst _hoisted_6 = [\"src\", \"alt\", \"title\"]\nconst _hoisted_7 = { class: \"flex-1 bg-white p-6 flex flex-col justify-between\" }\nconst _hoisted_8 = { class: \"flex-1\" }\nconst _hoisted_9 = { class: \"text-sm font-medium text-indigo-600\" }\nconst _hoisted_10 = { class: \"text-xl font-semibold text-gray-900\" }\nconst _hoisted_11 = { class: \"mt-3 text-base text-gray-500\" }\nconst _hoisted_12 = { class: \"mt-6 flex items-center\" }\nconst _hoisted_13 = { class: \"flex-shrink-0\" }\nconst _hoisted_14 = { class: \"sr-only\" }\nconst _hoisted_15 = [\"src\", \"alt\"]\nconst _hoisted_16 = { key: 1 }\nconst _hoisted_17 = { class: \"sr-only\" }\nconst _hoisted_18 = [\"src\", \"alt\"]\nconst _hoisted_19 = { class: \"ml-3\" }\nconst _hoisted_20 = { class: \"text-sm font-medium text-gray-900\" }\nconst _hoisted_21 = { key: 1 }\nconst _hoisted_22 = { class: \"flex space-x-1 text-sm text-gray-500\" }\nconst _hoisted_23 = [\"datetime\"]\nconst _hoisted_24 = [\"datetime\"]\n\nimport HeaderComponent from '@/components/layout/HeaderComponent.vue';\nimport FooterComponent from '@/components/layout/FooterComponent.vue';\nimport MetaTags from '@/components/MetaTags.vue';\nimport WhatIsADnsZone from '@/views/learning/WhatIsADnsZone.vue';\nimport WhatIsTheDnsRootZone from '@/views/learning/WhatIsTheDnsRootZone.vue';\nimport RecursiveVersusAuthoritativeDns from '@/views/learning/RecursiveVsAuthoritativeDns.vue';\nimport ZoneDelegation from '@/views/learning/ZoneDelegation.vue';\nimport HowDoesDomainNameRegistrationWork from '@/views/learning/HowDoesDomainNameRegistrationWork.vue';\nimport DnsChanger from '@/views/learning/security/DnsChanger.vue';\nimport DnsRecordTypes from '@/views/learning/DnsRecordTypes.vue';\nimport RecordTypeTxt from '@/views/learning/DnsRecordTypes/RecordTypeTxt.vue';\nimport RecordTypeSoa from '@/views/learning/DnsRecordTypes/RecordTypeSoa.vue';\nimport RecordTypeNs from '@/views/learning/DnsRecordTypes/RecordTypeNs.vue';\nimport RecordTypeMx from '@/views/learning/DnsRecordTypes/RecordTypeMx.vue';\nimport RecordTypeCname from '@/views/learning/DnsRecordTypes/RecordTypeCname.vue';\nimport RecordTypeA from '@/views/learning/DnsRecordTypes/RecordTypeA.vue';\nimport RecordTypeAAAA from '@/views/learning/DnsRecordTypes/RecordTypeAAAA.vue';\nimport RecordTypeSrv from '@/views/learning/DnsRecordTypes/RecordTypeSrv.vue';\nimport RecordTypePtr from '@/views/learning/DnsRecordTypes/RecordTypePtr.vue';\nimport TipsForPickingADomainName from '@/views/learning/domain-names/TipsForPickingADomainName.vue';\nimport EmailSecuritySpf from '@/views/learning/EmailSecurity/EmailSecuritySpf.vue';\nimport EmailSecurityDkim from '@/views/learning/EmailSecurity/EmailSecurityDkim.vue';\nimport EmailSecurityDmarc from '@/views/learning/EmailSecurity/EmailSecurityDmarc.vue';\nimport EmailSecurityHowToMergeDmarcRecords from '@/views/learning/EmailSecurity/EmailSecurityHowToMergeDmarcRecords.vue';\nimport MxVsSpfVsDmarcVsDkimVsBimi from '@/views/learning/MxVsSpfVsDmarcVsDkimVsBimi.vue';\nimport EmailSecurityUsingDifferentDmarcRecordsForSubdomains from '@/views/learning/EmailSecurity/EmailSecurityUsingDifferentDmarcRecordsForSubdomains.vue';\nimport { formatDate } from '@/common/dateTime';\nimport WhatIsDns from '@/views/learning/WhatIsDns.vue';\nimport TheLifeOfADnsQueryInKubernetes from '@/views/learning/TheLifeOfADnsQueryInKubernetes.vue';\nimport HowToSpecifyADnsServerInNslookup from '@/views/learning/command-line/HowToSpecifyADnsServerInNslookup.vue';\nimport WhatIsADnsResolver from '@/views/learning/WhatIsADnsResolver.vue';\nimport DnsPropagationDoesNotExist from '@/views/learning/DnsPropagationDoesNotExist.vue';\nimport WhatIsAGoodTtlForDns from '@/views/learning/WhatIsAGoodTtlForDns.vue';\nimport FindingWhoisServersUsingSrvRecords from '@/views/learning/FindingWhoisServersUsingSrvRecords.vue';\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'LearningView',\n setup(__props) {\n\nconst sections = [\n {\n heading: 'DNS concepts',\n articles: [\n WhatIsDns.meta,\n WhatIsADnsResolver.meta,\n WhatIsADnsZone.meta,\n ZoneDelegation.meta,\n WhatIsTheDnsRootZone.meta,\n RecursiveVersusAuthoritativeDns.meta,\n DnsRecordTypes.meta,\n DnsPropagationDoesNotExist.meta,\n ],\n },\n {\n heading: 'DNS record types',\n articles: [\n RecordTypeNs.meta,\n RecordTypeCname.meta,\n RecordTypeMx.meta,\n RecordTypeTxt.meta,\n RecordTypeA.meta,\n RecordTypeAAAA.meta,\n RecordTypeSoa.meta,\n RecordTypeSrv.meta,\n RecordTypePtr.meta,\n ],\n },\n {\n heading: 'Email and the DNS',\n articles: [\n EmailSecuritySpf.meta,\n EmailSecurityDkim.meta,\n EmailSecurityDmarc.meta,\n MxVsSpfVsDmarcVsDkimVsBimi.meta,\n EmailSecurityHowToMergeDmarcRecords.meta,\n EmailSecurityUsingDifferentDmarcRecordsForSubdomains.meta,\n RecordTypeMx.meta,\n ],\n },\n {\n heading: 'Domain names',\n articles: [\n HowDoesDomainNameRegistrationWork.meta,\n TipsForPickingADomainName.meta,\n FindingWhoisServersUsingSrvRecords.meta,\n ],\n },\n {\n heading: 'Operations',\n articles: [\n TheLifeOfADnsQueryInKubernetes.meta,\n WhatIsAGoodTtlForDns.meta,\n ],\n },\n {\n heading: 'Command line tools',\n articles: [\n HowToSpecifyADnsServerInNslookup.meta,\n ],\n },\n {\n heading: 'Security',\n articles: [\n DnsChanger.meta,\n ],\n },\n];\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n _createVNode(MetaTags, {\n title: \"Learning Center — NsLookup.io\",\n description: \"Learn about DNS with our free content.\",\n url: \"https://www.nslookup.io/learning/\",\n img1024x512: \"https://www.nslookup.io/img/learning/learning-center-social.jpg\",\n img1200x630: \"https://www.nslookup.io/img/learning/learning-center-social.jpg\"\n })\n ])),\n _createVNode(HeaderComponent),\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n (_openBlock(), _createElementBlock(_Fragment, null, _renderList(sections, (section) => {\n return (_openBlock(), _createElementBlock(_Fragment, {\n key: section.heading\n }, [\n _createElementVNode(\"h2\", {\n id: section.heading.toLowerCase().replaceAll(' ', '-'),\n class: \"mt-12 text-3xl font-semibold text-gray-900\"\n }, _toDisplayString(section.heading), 9, _hoisted_4),\n _createElementVNode(\"div\", _hoisted_5, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(section.articles, (post) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: post.title,\n class: \"flex flex-col rounded-lg shadow-lg overflow-hidden\"\n }, [\n _createVNode(_component_router_link, {\n to: post.url,\n class: \"flex-shrink-0\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"img\", {\n class: \"h-[207px] w-full bg-white object-cover\",\n src: post.overviewImage,\n alt: post.overviewImageAlt,\n title: post.overviewImageAlt\n }, null, 8, _hoisted_6)\n ]),\n _: 2\n }, 1032, [\"to\"]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"p\", _hoisted_9, [\n _createElementVNode(\"span\", null, _toDisplayString(post.tag), 1)\n ]),\n _createVNode(_component_router_link, {\n to: post.url,\n class: \"block mt-2\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"p\", _hoisted_10, _toDisplayString(post.title), 1)\n ]),\n _: 2\n }, 1032, [\"to\"]),\n _createElementVNode(\"p\", _hoisted_11, _toDisplayString(post.overviewDescription), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n _createElementVNode(\"div\", _hoisted_13, [\n (post.author.url)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n to: post.author.url\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", _hoisted_14, _toDisplayString(post.author.name), 1),\n _createElementVNode(\"img\", {\n class: \"h-10 w-10 rounded-full\",\n src: post.author.img,\n alt: `Post by ${post.author.name}`\n }, null, 8, _hoisted_15)\n ]),\n _: 2\n }, 1032, [\"to\"]))\n : (_openBlock(), _createElementBlock(\"span\", _hoisted_16, [\n _createElementVNode(\"span\", _hoisted_17, _toDisplayString(post.author.name), 1),\n _createElementVNode(\"img\", {\n class: \"h-10 w-10 rounded-full\",\n src: post.author.img,\n alt: `Post by ${post.author.name}`\n }, null, 8, _hoisted_18)\n ]))\n ]),\n _createElementVNode(\"div\", _hoisted_19, [\n _createElementVNode(\"p\", _hoisted_20, [\n (post.author.url)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n to: post.author.url,\n class: \"hover:underline\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(post.author.name), 1)\n ]),\n _: 2\n }, 1032, [\"to\"]))\n : (_openBlock(), _createElementBlock(\"span\", _hoisted_21, _toDisplayString(post.author.name), 1))\n ]),\n _createElementVNode(\"div\", _hoisted_22, [\n (post.updated)\n ? (_openBlock(), _createElementBlock(\"time\", {\n key: 0,\n datetime: post.updated.toISOString()\n }, _toDisplayString(_unref(formatDate)(post.updated)), 9, _hoisted_23))\n : (_openBlock(), _createElementBlock(\"time\", {\n key: 1,\n datetime: post.written.toISOString()\n }, _toDisplayString(_unref(formatDate)(post.written)), 9, _hoisted_24))\n ])\n ])\n ])\n ])\n ]))\n }), 128))\n ])\n ], 64))\n }), 64))\n ])\n ]),\n _createVNode(FooterComponent)\n ], 64))\n}\n}\n\n})","import script from \"./LearningView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./LearningView.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, Teleport as _Teleport, openBlock as _openBlock, createBlock as _createBlock, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, unref as _unref, withModifiers as _withModifiers, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"h1\", { class: \"mt-16 my-2 block text-3xl leading-8 font-extrabold tracking-tight text-gray-900 sm:text-4xl\" }, \"Privacy policy\", -1)\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"p\", null, \"In this policy, you can read how we collect and use your information. It also describes how we use cookies.\", -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"How we collect and use information\", -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"p\", null, \"We collect and use information in order to provide you the services of NsLookup.io. Unless stated otherwise, we do not process or store your IP address or any other personally identifiable information.\", -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Here are all the ways in which we collect and use your information:\", -1)\nconst _hoisted_6 = { class: \"list-disc\" }\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Serving requests\"),\n /*#__PURE__*/_createElementVNode(\"br\"),\n /*#__PURE__*/_createTextVNode(\"In order to serve the web pages you request, we process — but do not store — your \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"IP address\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Diagnosing issues\"),\n /*#__PURE__*/_createElementVNode(\"br\"),\n /*#__PURE__*/_createTextVNode(\"When we encounter an issue while serving the web page that you have requested, we may store the \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"date, time and query\"),\n /*#__PURE__*/_createTextVNode(\" of that request with our supplier \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://sentry.io/\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, \"Sentry\"),\n /*#__PURE__*/_createTextVNode(\". This data is not linked to you, and is retained for 90 days.\")\n], -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Logging\"),\n /*#__PURE__*/_createElementVNode(\"br\"),\n /*#__PURE__*/_createTextVNode(\"In order to observe the function of NsLookup, we log some of \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"the web pages you request\"),\n /*#__PURE__*/_createTextVNode(\". This data is not linked to you, and is handled and retained for 7 days by our logging partner \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://www.crowdstrike.com/products/observability/falcon-logscale/\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, \"CrowdStrike\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"strong\", null, \"Preventing abuse\", -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"br\", null, null, -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"strong\", null, \"IP address\", -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Analyzing web traffic\"),\n /*#__PURE__*/_createElementVNode(\"br\"),\n /*#__PURE__*/_createTextVNode(\"We processes \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"the pages you request, as well as your IP address\"),\n /*#__PURE__*/_createTextVNode(\". Your IP address will not be stored.\")\n], -1)\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Serving ads\"),\n /*#__PURE__*/_createElementVNode(\"br\"),\n /*#__PURE__*/_createTextVNode(\"Third party vendors and subcontractors, including \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://nitropay.com/\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, \"NitroPay\"),\n /*#__PURE__*/_createTextVNode(\", will process personally identifiable information to show personalized advertisements. If you live in a region that requires consent, then this data will only be processed if you have given consent.\")\n], -1)\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"strong\", null, \"Contacting us\", -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"br\", null, null, -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"strong\", null, \"name and email address\", -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Cookies\", -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Safeguards\", -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"p\", null, \"NsLookup follows generally accepted industry standards and maintains reasonable safeguards to attempt to ensure the security, integrity and privacy of the information in NsLookup's possession.\", -1)\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"What choices do I have?\", -1)\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Our partner NitroPay automatically detect which legislation applies to you. Depending on this, we'll show you links here to exercise your rights:\", -1)\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"GDPR: \"),\n /*#__PURE__*/_createElementVNode(\"span\", {\n id: \"ncmp-consent-link\",\n class: \"text-[#4f46e5] font-medium [&>*]:underline\"\n })\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"CCPA: \"),\n /*#__PURE__*/_createElementVNode(\"span\", { \"data-ccpa-link\": \"1\" })\n ])\n], -1)\nconst _hoisted_24 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Changes and questions\", -1)\nconst _hoisted_25 = /*#__PURE__*/_createElementVNode(\"p\", null, \"We may revise this policy from time to time. The changes will not be retroactive, and the most current version of this policy will govern our relationship with you. By continuing to access or use NsLookup.io after those revisions become effective, you agree to the revised policy.\", -1)\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"i\", null, \"Last updated: 2023-04-17\")\n], -1)\n\nimport MetaTags from '@/components/MetaTags.vue';\nimport ContentPage from '@/components/layout/ContentPage.vue';\nimport { askConsent, insertConsentLinks } from '@/common/consent';\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'PrivacyPolicy',\n setup(__props) {\n\ninsertConsentLinks();\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n _createVNode(MetaTags, {\n title: \"Privacy policy — NsLookup.io\",\n description: \"The privacy policy for NsLookup. In this policy, you can read how we collect and use your information. It also describes how we use cookies.\",\n url: \"https://www.nslookup.io/privacy-policy/\"\n })\n ])),\n _createVNode(ContentPage, null, {\n content: _withCtx(() => [\n _hoisted_1,\n _hoisted_2,\n _hoisted_3,\n _hoisted_4,\n _hoisted_5,\n _createElementVNode(\"ul\", _hoisted_6, [\n _hoisted_7,\n _hoisted_8,\n _hoisted_9,\n _createElementVNode(\"li\", null, [\n _hoisted_10,\n _hoisted_11,\n _createTextVNode(\"We may count the number of queries originating from your \"),\n _hoisted_12,\n _createTextVNode(\" to enforce our \"),\n _createVNode(_component_router_link, { to: \"/terms-and-conditions/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"terms and conditions\")\n ]),\n _: 1\n }),\n _createTextVNode(\". This data is retained for up to 1 hour.\")\n ]),\n _hoisted_13,\n _hoisted_14,\n _createElementVNode(\"li\", null, [\n _hoisted_15,\n _hoisted_16,\n _createTextVNode(\"When you \"),\n _createVNode(_component_router_link, { to: \"/contact-us/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"contact us\")\n ]),\n _: 1\n }),\n _createTextVNode(\", you can provide your \"),\n _hoisted_17,\n _createTextVNode(\". If you do, they will be sent to us by email, in order for us to reply to you.\")\n ])\n ]),\n _hoisted_18,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"If you have given consent, then third party vendors, including NitroPay, use cookies to personalize advertisements and track usage. You can update your consent \"),\n _createElementVNode(\"a\", {\n href: \"#\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_unref(askConsent)()), [\"prevent\"]))\n }, \"here\"),\n _createTextVNode(\".\")\n ]),\n _hoisted_19,\n _hoisted_20,\n _hoisted_21,\n _hoisted_22,\n _hoisted_23,\n _hoisted_24,\n _hoisted_25,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"If you have any questions or feedback regarding this privacy policy, you may \"),\n _createVNode(_component_router_link, { to: \"/contact-us/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"contact us\")\n ]),\n _: 1\n }),\n _createTextVNode(\".\")\n ]),\n _hoisted_26\n ]),\n _: 1\n })\n ], 64))\n}\n}\n\n})","import script from \"./PrivacyPolicy.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./PrivacyPolicy.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, Teleport as _Teleport, openBlock as _openBlock, createBlock as _createBlock, unref as _unref, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, withCtx as _withCtx, createStaticVNode as _createStaticVNode, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"grow flex flex-col overflow-x-hidden\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createStaticVNode(\"

Reach 400k developers
Every month

NsLookup's focus on UX, speed, and ease of use makes it the go-to DNS tool for hundreds of thousands of developers.

We're currently open to an exclusive sponsorship. This gives your brand access to our audience, boosting brand awareness and top-of-funnel growth.

\\\"NsLookup.io
\", 1)\nconst _hoisted_3 = {\n class: \"grow relative bg-gray-50 pb-28\",\n \"aria-labelledby\": \"contact-heading\"\n}\nconst _hoisted_4 = /*#__PURE__*/_createStaticVNode(\"
\", 1)\nconst _hoisted_5 = { class: \"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8\" }\nconst _hoisted_6 = { class: \"relative bg-white shadow-xl\" }\nconst _hoisted_7 = { class: \"grid grid-cols-1 lg:grid-cols-3\" }\nconst _hoisted_8 = /*#__PURE__*/_createStaticVNode(\"

Benefits

  • Reach 400k developers
  • Co-branding
  • Exclusive ad placement
  • Native integration
  • Access to statistics
  • Guest posting
\", 1)\nconst _hoisted_9 = { class: \"py-10 px-6 sm:px-10 lg:col-span-2 xl:p-12\" }\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"h3\", { class: \"text-lg font-medium text-gray-900\" }, \"Find out how NsLookup can boost your business\", -1)\nconst _hoisted_11 = {\n class: \"mt-6 grid grid-cols-1 gap-y-6 sm:grid-cols-2 sm:gap-x-8\",\n action: \"/forms/sponsor\",\n method: \"POST\"\n}\nconst _hoisted_12 = /*#__PURE__*/_createStaticVNode(\"
\", 4)\nconst _hoisted_16 = { class: \"sm:col-span-2 flex flex-col justify-between items-end gap-6 sm:flex-row\" }\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"button\", {\n type: \"submit\",\n class: \"mt-2 h-fit inline-flex w-full items-center justify-center rounded-md border border-transparent bg-indigo-500 px-6 py-3 text-base font-medium text-white shadow-sm hover:bg-indigo-600 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 sm:w-auto\"\n}, \"Let's talk\", -1)\nconst _hoisted_18 = {\n key: 1,\n class: \"grow\"\n}\nconst _hoisted_19 = { class: \"py-24 lg:py-32\" }\nconst _hoisted_20 = { class: \"relative z-10 mx-auto max-w-7xl pl-4 pr-8 sm:px-6 lg:px-8\" }\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"br\", null, null, -1)\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"br\", null, null, -1)\nconst _hoisted_23 = {\n key: 2,\n class: \"grow\"\n}\nconst _hoisted_24 = { class: \"py-24 lg:py-32\" }\nconst _hoisted_25 = { class: \"relative z-10 mx-auto max-w-7xl pl-4 pr-8 sm:px-6 lg:px-8\" }\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"br\", null, null, -1)\nconst _hoisted_27 = /*#__PURE__*/_createElementVNode(\"br\", null, null, -1)\nconst _hoisted_28 = /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"mailto:hello@nslookup.io\",\n class: \"underline font-semibold\"\n}, \"hello@nslookup.io\", -1)\n\nimport MetaTags from '@/components/MetaTags.vue';\nimport TurnstileCaptcha from '@/components/TurnstileCaptcha.vue';\nimport HeaderComponent from '@/components/layout/HeaderComponent.vue';\nimport FooterComponent from '@/components/layout/FooterComponent.vue';\nimport Alert from '@/components/micro/AlertComponent.vue';\nimport { useRoute } from 'vue-router';\n\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'SponsorView',\n setup(__props) {\n\nconst route = useRoute();\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n _createVNode(MetaTags, {\n title: \"Sponsor NsLookup.io\",\n description: \"We're currently open to an exclusive sponsorship. This gives your brand access to our audience, boosting brand awareness and top-of-funnel growth.\",\n url: \"https://www.nslookup.io/sponsor/\"\n })\n ])),\n _createVNode(HeaderComponent),\n (['#', ''].includes(_unref(route).hash))\n ? (_openBlock(), _createElementBlock(\"main\", _hoisted_1, [\n _hoisted_2,\n _createElementVNode(\"section\", _hoisted_3, [\n _hoisted_4,\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"div\", _hoisted_7, [\n _hoisted_8,\n _createElementVNode(\"div\", _hoisted_9, [\n _hoisted_10,\n _createElementVNode(\"form\", _hoisted_11, [\n _hoisted_12,\n _createElementVNode(\"div\", _hoisted_16, [\n _createVNode(TurnstileCaptcha, {\n sitekey: \"0x4AAAAAAAFYnLzHpa7ad_4z\",\n id: \"sponsor\"\n }),\n _hoisted_17\n ])\n ])\n ])\n ])\n ])\n ])\n ])\n ]))\n : (_unref(route).hash === '#message-sent')\n ? (_openBlock(), _createElementBlock(\"main\", _hoisted_18, [\n _createElementVNode(\"div\", _hoisted_19, [\n _createElementVNode(\"div\", _hoisted_20, [\n _createVNode(Alert, {\n type: \"success\",\n class: \"w-full\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(\" Thank you for your message!\"),\n _hoisted_21,\n _hoisted_22,\n _createTextVNode(\"I'll be in touch as soon as possible. \")\n ]),\n _: 1\n })\n ])\n ])\n ]))\n : (_openBlock(), _createElementBlock(\"main\", _hoisted_23, [\n _createElementVNode(\"div\", _hoisted_24, [\n _createElementVNode(\"div\", _hoisted_25, [\n _createVNode(Alert, { class: \"w-full\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" Your message could not be sent.\"),\n _hoisted_26,\n _hoisted_27,\n _createTextVNode(\"Please email me at \"),\n _hoisted_28,\n _createTextVNode(\" instead. \")\n ]),\n _: 1\n })\n ])\n ])\n ])),\n _createVNode(FooterComponent)\n ], 64))\n}\n}\n\n})","import script from \"./SponsorView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SponsorView.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, Teleport as _Teleport, openBlock as _openBlock, createBlock as _createBlock, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"h1\", { class: \"mt-16 my-2 block text-3xl leading-8 font-extrabold tracking-tight text-gray-900 sm:text-4xl\" }, \"Terms and conditions\", -1)\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"strong\", null, \"Terms\", -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"strong\", null, \"Products\", -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Acceptable use\", -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"p\", null, \"These Terms grant you a personal, non-exclusive, non-transferable, revocable license to access and use our Products.\", -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"p\", null, \"You must not:\", -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Access our Products through scripts or other means of automation.\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Scrape our Products.\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Reverse-engineer or otherwise attempt to steal the software code of our Products.\")\n], -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Liability\", -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"p\", null, \"NsLookup will not be liable for any direct, indirect, incidental, punitive, special, consequential or exemplary damages or loss of any kind arising from your use of the Products.\", -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Our goal is to provide correct information, but NsLookup cannot guarantee, now will it be liable for the correctness of the content of its Products.\", -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"p\", null, \"NsLookup shall use reasonable efforts to protect personal information submitted by you in connection with the Products and shall use such information in accordance with the privacy policy.\", -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Intellectual property rights\", -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The Products and all of their contents, features, and functionality (including but not limited to all information, software, text, displays, images, video and audio, and the design, selection and arrangement thereof), are owned by NsLookup, its licensors, or other providers of such material and are protected by international copyright and other intellectual property or proprietary rights laws.\", -1)\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Advertising content\", -1)\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The Products may present advertisements for or links to third party websites, products, and/or services (\\\"\"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Third Party Ads\"),\n /*#__PURE__*/_createTextVNode(\"\\\"). We are not responsible for the availability of these Third Party Ads, or the images, messages, or other materials contained therein. Neither NsLookup nor any of its affiliates will be liable for any errors in content or omissions in any Third Party Ads, nor responsible for any losses or damages of any sort incurred as a result of your participation with, use of, or reliance on the Third Party Ads, including any goods, products, or services offered by such Third Party Ads.\")\n], -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Termination\", -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"p\", null, \"You're free to stop using our Products at any time. We also reserve the right to suspend or end the Products at any time at our discretion and without notice. For example, we may suspend or terminate your use of the Products if you're not complying with these Terms.\", -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Modifications\", -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"p\", null, \"We may revise these Terms from time to time. The changes will not be retroactive, and the most current version of the Terms will govern our relationship with you. By continuing to access or use our Products after those revisions become effective, you agree to be bound by the revised Terms.\", -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Questions regarding these terms\", -1)\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"i\", null, \"Last updated: 2021-03-25\")\n], -1)\n\nimport MetaTags from '@/components/MetaTags.vue';\nimport ContentPage from '@/components/layout/ContentPage.vue';\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'TermsAndConditions',\n setup(__props) {\n\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n _createVNode(MetaTags, {\n title: \"Terms and conditions — NsLookup.io\",\n description: \"These are the terms and conditions for using NsLookup. You can contact us with any questions or feedback about these terms.\",\n url: \"https://www.nslookup.io/terms-and-conditions/\"\n })\n ])),\n _createVNode(ContentPage, null, {\n content: _withCtx(() => [\n _hoisted_1,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"These Terms of Service (\\\"\"),\n _hoisted_2,\n _createTextVNode(\"\\\") govern your access to and use of the NsLookup.io website and services (\\\"\"),\n _hoisted_3,\n _createTextVNode(\"\\\"). Please read these Terms carefully, and \"),\n _createVNode(_component_router_link, { to: \"/contact-us/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"contact us\")\n ]),\n _: 1\n }),\n _createTextVNode(\" if you have questions or feedback. By accessing or using our Products, you agree to be bound by these Terms and by our \"),\n _createVNode(_component_router_link, { to: \"/privacy-policy/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"privacy policy\")\n ]),\n _: 1\n }),\n _createTextVNode(\". \")\n ]),\n _hoisted_4,\n _hoisted_5,\n _hoisted_6,\n _hoisted_7,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"Please sign up for our \"),\n _createVNode(_component_router_link, { to: \"/dns-lookup-api/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"API\")\n ]),\n _: 1\n }),\n _createTextVNode(\" instead.\")\n ]),\n _hoisted_8,\n _hoisted_9,\n _hoisted_10,\n _hoisted_11,\n _hoisted_12,\n _hoisted_13,\n _hoisted_14,\n _hoisted_15,\n _hoisted_16,\n _hoisted_17,\n _hoisted_18,\n _hoisted_19,\n _hoisted_20,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"If you have any questions or feedback regarding these Terms, you may \"),\n _createVNode(_component_router_link, { to: \"/contact-us/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"contact us\")\n ]),\n _: 1\n }),\n _createTextVNode(\".\")\n ]),\n _hoisted_21\n ]),\n _: 1\n })\n ], 64))\n}\n}\n\n})","import script from \"./TermsAndConditions.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./TermsAndConditions.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, createElementVNode as _createElementVNode, createStaticVNode as _createStaticVNode, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createStaticVNode(\"

Welcome to the course!

You'll get an email once your payment is processed. This email contains a link to the README.txt, which has all the info you need to start learning.

\", 1)\n\nimport MetaTags from '@/components/MetaTags.vue';\nimport HeaderComponent from '@/components/layout/HeaderComponent.vue';\nimport FooterComponent from '@/components/layout/FooterComponent.vue';\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'WelcomeToTheCourse',\n setup(__props) {\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n _createVNode(MetaTags, {\n title: \"Welcome to the course\",\n description: \"\",\n url: \"https://www.nslookup.io/welcome-to-the-course/\"\n }),\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"text/javascript\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" !function(e,t,n,s,u,a){e.twq||(s=e.twq=function(){s.exe?s.exe.apply(s,arguments):s.queue.push(arguments); },s.version='1.1',s.queue=[],u=t.createElement(n),u.async=!0,u.src='https://static.ads-twitter.com/uwt.js', a=t.getElementsByTagName(n)[0],a.parentNode.insertBefore(u,a))}(window,document,'script'); twq('config','ogao2'); twq('event', 'tw-ogao2-ogaof', {}); \")\n ]),\n _: 1\n }))\n ])),\n _createVNode(HeaderComponent),\n _hoisted_1,\n _createVNode(FooterComponent)\n ], 64))\n}\n}\n\n})","import script from \"./WelcomeToTheCourse.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WelcomeToTheCourse.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, Teleport as _Teleport, openBlock as _openBlock, createBlock as _createBlock, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createStaticVNode as _createStaticVNode, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"min-h-screen bg-neutral-100 flex flex-col\" }\nconst _hoisted_2 = { class: \"container max-w-5xl mx-auto\" }\nconst _hoisted_3 = /*#__PURE__*/_createStaticVNode(\"

How to view DNS records in Google Chrome?

Google Chrome itself does not provide a way to view DNS records of the websites you visit. However, you can install the nslookup extension to do so.

This add-on allows you to view A records, AAAA records, see the name servers and mail servers and all the other DNS records for any domain name or subdomain.

Follow this step by step guide to be able to easily view DNS records in Google Chrome.

  1. Visit the NsLookup extension page in the Chrome Web Store
  2. Click Add to Chrome
  3. Click "Add extension"
  4. Visit the website you want to view the DNS records for
  5. Open the extension menu
  6. Click on the NsLookup extension
  7. View the DNS records
\\\"How
\", 2)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"In Google Chrome, \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://chrome.google.com/webstore/detail/nslookup-find-dns-records/kedbaefjfjpplphppofakpfldhimhcio\",\n title: \"NsLookup for Chrome\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, \"click here\"),\n /*#__PURE__*/_createTextVNode(\" to visit the Chrome extension page for the NsLookup extension.\")\n], -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Click the \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Add to Chrome\"),\n /*#__PURE__*/_createTextVNode(\" button to download and install the extension.\")\n], -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Chrome will prompt you to confirm that you want to add this extension to your browser. \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Click \\\"Add extension\\\"\"),\n /*#__PURE__*/_createTextVNode(\" to add the extension.\")\n], -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Open a new tab and visit the website that you want to view the DNS records for.\", -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"In the top-right corner of your browser, \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"click the puzzle piece\"),\n /*#__PURE__*/_createTextVNode(\". This opens the menu containing all the installed extensions.\")\n], -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"In this menu, \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"click \\\"NsLookup - Find DNS Records\\\"\"),\n /*#__PURE__*/_createTextVNode(\". This will show you the DNS records for the domain name of your active tab.\")\n], -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"p\", null, \"You can now see the DNS records for the domain you just visited. If the record type you're looking for is not shown, scroll to the bottom to select it from the drop-down.\", -1)\n\nimport HeaderComponent from '@/components/layout/HeaderComponent.vue';\nimport FooterComponent from '@/components/layout/FooterComponent.vue';\nimport MetaTags from '@/components/MetaTags.vue';\nimport GuideStep from '@/components/layout/GuideStep.vue';\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'InstallChrome',\n setup(__props) {\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n _createVNode(MetaTags, {\n title: \"How to view DNS records in Chrome?\",\n description: \"View DNS records in Chrome. Inspect all DNS record types and popular DNS caches as well as multiple geographical locations.\",\n url: \"https://www.nslookup.io/install/how-to-view-dns-records-in-chrome/\",\n img1024x512: \"https://www.nslookup.io/img/tutorials/install/chrome/how-to-view-dns-records-in-chrome.png\",\n img1200x630: \"https://www.nslookup.io/img/tutorials/install/chrome/how-to-view-dns-records-in-chrome.png\"\n })\n ])),\n _createElementVNode(\"div\", _hoisted_1, [\n _createVNode(HeaderComponent),\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createVNode(GuideStep, {\n step: 1,\n title: \"Visit the NsLookup extension page in the Chrome Web Store\",\n img: \"img/tutorials/install/chrome/nslookup-extension-chrome.png\",\n \"img-width\": 504,\n \"img-height\": 272\n }, {\n default: _withCtx(() => [\n _hoisted_5\n ]),\n _: 1\n }),\n _createVNode(GuideStep, {\n step: 2,\n title: \"Click Add to Chrome\",\n img: \"img/tutorials/install/chrome/add-to-chrome.png\",\n \"img-width\": 504,\n \"img-height\": 272\n }, {\n default: _withCtx(() => [\n _hoisted_6\n ]),\n _: 1\n }),\n _createVNode(GuideStep, {\n step: 3,\n title: \"Click \\\"Add extension\\\"\",\n img: \"img/tutorials/install/chrome/add-extension.png\",\n \"img-width\": 504,\n \"img-height\": 270\n }, {\n default: _withCtx(() => [\n _hoisted_7\n ]),\n _: 1\n }),\n _createVNode(GuideStep, {\n step: 4,\n title: \"Visit the website you want to view the DNS records for\",\n img: \"img/tutorials/install/chrome/example-domain-name.png\",\n \"img-width\": 504,\n \"img-height\": 251\n }, {\n default: _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n }),\n _createVNode(GuideStep, {\n step: 5,\n title: \"Open the extension menu\",\n img: \"img/tutorials/install/chrome/chrome-extensions-menu.png\",\n \"img-width\": 504,\n \"img-height\": 222\n }, {\n default: _withCtx(() => [\n _hoisted_9\n ]),\n _: 1\n }),\n _createVNode(GuideStep, {\n step: 6,\n title: \"Click on the NsLookup extension\",\n img: \"img/tutorials/install/chrome/view-dns-records-for-domain.png\",\n \"img-width\": 504,\n \"img-height\": 223\n }, {\n default: _withCtx(() => [\n _hoisted_10\n ]),\n _: 1\n }),\n _createVNode(GuideStep, {\n step: 7,\n title: \"View the DNS records\",\n img: \"img/tutorials/install/chrome/dns-record-viewer.png\",\n \"img-width\": 504,\n \"img-height\": 299\n }, {\n default: _withCtx(() => [\n _hoisted_11\n ]),\n _: 1\n })\n ]),\n _createVNode(FooterComponent, { class: \"mt-6\" })\n ])\n ], 64))\n}\n}\n\n})","import script from \"./InstallChrome.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./InstallChrome.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, Teleport as _Teleport, openBlock as _openBlock, createBlock as _createBlock, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createStaticVNode as _createStaticVNode, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"min-h-screen bg-neutral-100 flex flex-col\" }\nconst _hoisted_2 = { class: \"container max-w-5xl mx-auto\" }\nconst _hoisted_3 = /*#__PURE__*/_createStaticVNode(\"

How to view DNS records in Edge?

Microsoft Edge itself does not provide a way to view DNS records of the websites you visit. However, you can install an extension to do so.

This add-on allows you to view A records, AAAA records, see the name servers and mail servers and all the other DNS records for any domain name or subdomain.

Follow this step by step guide to be able to easily view DNS records in Edge.

  1. Visit the Edge NsLookup add-on page
  2. Click Get
  3. Click Add extension
  4. Visit the website you want to view the DNS records for
  5. Click the NsLookup extension icon
  6. View the DNS records
\\\"How
\", 2)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"In Edge, \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://microsoftedge.microsoft.com/addons/detail/nslookup-find-dns-recor/eploggkgnglaanpfpijkbidhbdiphmek\",\n title: \"NsLookup for Edge\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, \"click here\"),\n /*#__PURE__*/_createTextVNode(\" to visit the Edge add-ons page for the NsLookup extension.\")\n], -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Click the \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Get\"),\n /*#__PURE__*/_createTextVNode(\" button to download and install the extension.\")\n], -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Edge will prompt you to confirm that you want to add this extension to your browser. Click \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Add extension\"),\n /*#__PURE__*/_createTextVNode(\" to add the extension.\")\n], -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Open a new tab and visit the website that you want to view the DNS records for.\", -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"In the top-right corner of your browser, \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"click the 'N' icon\"),\n /*#__PURE__*/_createTextVNode(\". This will show you the DNS records for the domain name of your active tab.\")\n], -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"p\", null, \"You can now see the DNS records for the domain you just visited. If the record type you're looking for is not shown, scroll to the bottom to select it from the drop-down.\", -1)\n\nimport HeaderComponent from '@/components/layout/HeaderComponent.vue';\nimport FooterComponent from '@/components/layout/FooterComponent.vue';\nimport MetaTags from '@/components/MetaTags.vue';\nimport GuideStep from '@/components/layout/GuideStep.vue';\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'InstallEdge',\n setup(__props) {\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n _createVNode(MetaTags, {\n title: \"How to view DNS records in Edge?\",\n description: \"View DNS records in Edge. Inspect all DNS record types and popular DNS caches as well as multiple geographical locations.\",\n url: \"https://www.nslookup.io/install/how-to-view-dns-records-in-edge/\",\n img1024x512: \"https://www.nslookup.io/img/tutorials/install/edge/how-to-view-dns-records-in-edge.png\",\n img1200x630: \"https://www.nslookup.io/img/tutorials/install/edge/how-to-view-dns-records-in-edge.png\"\n })\n ])),\n _createElementVNode(\"div\", _hoisted_1, [\n _createVNode(HeaderComponent),\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createVNode(GuideStep, {\n step: 1,\n title: \"Visit the Edge NsLookup add-on page\",\n img: \"img/tutorials/install/edge/nslookup-extension-edge.png\",\n \"img-width\": 504,\n \"img-height\": 289\n }, {\n default: _withCtx(() => [\n _hoisted_5\n ]),\n _: 1\n }),\n _createVNode(GuideStep, {\n step: 2,\n title: \"Click Get\",\n img: \"img/tutorials/install/edge/get-nslookup-addon-for-edge.png\",\n \"img-width\": 504,\n \"img-height\": 289\n }, {\n default: _withCtx(() => [\n _hoisted_6\n ]),\n _: 1\n }),\n _createVNode(GuideStep, {\n step: 3,\n title: \"Click \\\"Add extension\\\"\",\n img: \"img/tutorials/install/edge/add-extension-to-edge.png\",\n \"img-width\": 504,\n \"img-height\": 238\n }, {\n default: _withCtx(() => [\n _hoisted_7\n ]),\n _: 1\n }),\n _createVNode(GuideStep, {\n step: 4,\n title: \"Visit the website you want to view the DNS records for\",\n img: \"img/tutorials/install/edge/example-domain-name.png\",\n \"img-width\": 504,\n \"img-height\": 251\n }, {\n default: _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n }),\n _createVNode(GuideStep, {\n step: 5,\n title: \"Click the NsLookup extension icon\",\n img: \"img/tutorials/install/edge/edge-dns-add-on.png\",\n \"img-width\": 504,\n \"img-height\": 238\n }, {\n default: _withCtx(() => [\n _hoisted_9\n ]),\n _: 1\n }),\n _createVNode(GuideStep, {\n step: 6,\n title: \"View the DNS records\",\n img: \"img/tutorials/install/edge/dns-record-viewer.png\",\n \"img-width\": 504,\n \"img-height\": 299\n }, {\n default: _withCtx(() => [\n _hoisted_10\n ]),\n _: 1\n })\n ]),\n _createVNode(FooterComponent, { class: \"mt-6\" })\n ])\n ], 64))\n}\n}\n\n})","import script from \"./InstallEdge.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./InstallEdge.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, Teleport as _Teleport, openBlock as _openBlock, createBlock as _createBlock, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createStaticVNode as _createStaticVNode, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"min-h-screen bg-neutral-100 flex flex-col\" }\nconst _hoisted_2 = { class: \"container max-w-5xl mx-auto\" }\nconst _hoisted_3 = /*#__PURE__*/_createStaticVNode(\"

How to view DNS records in Firefox?

Firefox itself does not provide a way to view DNS records of the websites you visit. However, you can install an extension to do so.

This add-on allows you to view A records, AAAA records, see the name servers and mail servers and all the other DNS records for any domain name or subdomain.

Follow this step by step guide to be able to easily view DNS records in Firefox.

  1. Visit the Firefox NsLookup extension page
  2. Click Add to Firefox
  3. Click Add
  4. Visit the website you want to view the DNS records for
  5. Click the NsLookup extension icon
  6. View the DNS records
\\\"How
\", 2)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"In Firefox, \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://addons.mozilla.org/en-US/firefox/addon/nslookup/\",\n title: \"NsLookup for Firefox\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, \"click here\"),\n /*#__PURE__*/_createTextVNode(\" to visit the Firefox add-ons page for the NsLookup extension.\")\n], -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Click the \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Add to Firefox\"),\n /*#__PURE__*/_createTextVNode(\" button to download and install the extension.\")\n], -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Firefox will prompt you to confirm that you want to add this extension to your browser. \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Click Add\"),\n /*#__PURE__*/_createTextVNode(\" to add the extension.\")\n], -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Open a new tab and visit the website that you want to view the DNS records for.\", -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"In the top-right corner of your browser, \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"click the 'N' icon\"),\n /*#__PURE__*/_createTextVNode(\". This will show you the DNS records for the domain name of your active tab.\")\n], -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"p\", null, \"You can now see the DNS records for the domain you just visited. If the record type you're looking for is not shown, scroll to the bottom to select it from the drop-down.\", -1)\n\nimport HeaderComponent from '@/components/layout/HeaderComponent.vue';\nimport FooterComponent from '@/components/layout/FooterComponent.vue';\nimport MetaTags from '@/components/MetaTags.vue';\nimport GuideStep from '@/components/layout/GuideStep.vue';\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'InstallFirefox',\n setup(__props) {\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n _createVNode(MetaTags, {\n title: \"How to view DNS records in Firefox?\",\n description: \"View DNS records in Firefox. Inspect all DNS record types and popular DNS caches as well as multiple geographical locations.\",\n url: \"https://www.nslookup.io/install/how-to-view-dns-records-in-firefox/\",\n img1024x512: \"https://www.nslookup.io/img/tutorials/install/firefox/how-to-view-dns-records-in-firefox.png\",\n img1200x630: \"https://www.nslookup.io/img/tutorials/install/firefox/how-to-view-dns-records-in-firefox.png\"\n })\n ])),\n _createElementVNode(\"div\", _hoisted_1, [\n _createVNode(HeaderComponent),\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createVNode(GuideStep, {\n step: 1,\n title: \"Visit the Firefox NsLookup extension page\",\n img: \"img/tutorials/install/firefox/nslookup-extension-firefox.png\",\n \"img-width\": 504,\n \"img-height\": 356\n }, {\n default: _withCtx(() => [\n _hoisted_5\n ]),\n _: 1\n }),\n _createVNode(GuideStep, {\n step: 2,\n title: \"Click Add to Firefox\",\n img: \"img/tutorials/install/firefox/add-to-firefox.png\",\n \"img-width\": 504,\n \"img-height\": 356\n }, {\n default: _withCtx(() => [\n _hoisted_6\n ]),\n _: 1\n }),\n _createVNode(GuideStep, {\n step: 3,\n title: \"Click Add\",\n img: \"img/tutorials/install/firefox/confirm-add-to-firefox.png\",\n \"img-width\": 504,\n \"img-height\": 182\n }, {\n default: _withCtx(() => [\n _hoisted_7\n ]),\n _: 1\n }),\n _createVNode(GuideStep, {\n step: 4,\n title: \"Visit the website you want to view the DNS records for\",\n img: \"img/tutorials/install/firefox/example-domain-name.png\",\n \"img-width\": 504,\n \"img-height\": 251\n }, {\n default: _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n }),\n _createVNode(GuideStep, {\n step: 5,\n title: \"Click the NsLookup extension icon\",\n img: \"img/tutorials/install/firefox/firefox-dns-add-on.png\",\n \"img-width\": 504,\n \"img-height\": 270\n }, {\n default: _withCtx(() => [\n _hoisted_9\n ]),\n _: 1\n }),\n _createVNode(GuideStep, {\n step: 6,\n title: \"View the DNS records\",\n img: \"img/tutorials/install/firefox/dns-record-viewer.png\",\n \"img-width\": 504,\n \"img-height\": 299\n }, {\n default: _withCtx(() => [\n _hoisted_10\n ]),\n _: 1\n })\n ]),\n _createVNode(FooterComponent, { class: \"mt-6\" })\n ])\n ], 64))\n}\n}\n\n})","import script from \"./InstallFirefox.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./InstallFirefox.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-xl leading-8 block font-normal text-gray-500 mt-[1.3333333em]\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full rounded-lg\",\n src: \"/img/learning/dns-propagation-does-not-exist/dns-propagation-does-not-exist.png\",\n alt: \"DNS propagation does not exist\",\n title: \"DNS propagation does not exist\",\n width: \"1200\",\n height: \"600\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, \"DNS resolution depends on time, not geography.\")\n], -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"h2\", null, [\n /*#__PURE__*/_createTextVNode(\"So how \"),\n /*#__PURE__*/_createElementVNode(\"i\", null, \"does\"),\n /*#__PURE__*/_createTextVNode(\" it work?\")\n], -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"p\", null, \"When you request DNS records from the server that is authoritative for that domain (i.e. who \\\"owns\\\" it), it will accompany those records with a TTL (time to live). This indicates how long you can keep using those values before you should request a fresh copy. The records are stored in a cache on your device. Eliminating the need to query the DNS server every time speeds things up and reduces the load on DNS servers.\", -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Many internet service providers provide DNS caching servers to their subscribers. There are also some public DNS servers, offered by Google, Cloudflare and others. Those are all called recursive DNS servers. They can provide you with an answer by querying the authoritative DNS server. These recursive servers use the TTL to cache records on their side. So there are multiple layers of caching: in these servers and on your device.\", -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"p\", null, \"It's of course possible that the records have been changed, and that you get an old version of the records that was still in the cache. These records are said to be stale. So when this happens, it's not caused by records that didn't propagate yet, but by a stale cache.\", -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Staleness depends on incidental timing of previous requests, and they are not correlated with the geolocation of a DNS server or its place in some physical or logical network.\", -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Another way to look at it is that records are not pushed (propagated), but pulled (queried and cached).\", -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"A suggested change in terminology\", -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Okay, so \\\"DNS propagation\\\" may not be the best choice of words. But why does that matter?\", -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Well, words trigger associations, and they shape the way we think about something. So the terminology we use is important from a pedagogical perspective. When something is said to propagate, someone who hasn't learned how DNS works will assume that it somehow spreads through a network. And everyone who does know how it works had to have learned it at some point. It will be easier to learn if we use words that trigger the right associations.\", -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"p\", null, \"So let's eliminate this fallacy, and call it cache expiration instead of propagation.\", -1)\n\nimport BlogPost from '@/components/layout/BlogPost.vue';\n\nimport { ruurtjan } from '@/common/authors';\nimport { BlogMeta } from '@/common/blogMeta';\nimport { learningBreadcrumb } from '@/model/Breadcrumb';\n\nexport const meta: BlogMeta = {\n tag: 'DNS',\n url: '/learning/dns-propagation-does-not-exist/',\n breadcrumbs: [learningBreadcrumb],\n title: 'DNS propagation does not exist',\n description: 'A widespread fallacy among IT professionals is that DNS propagates through some network. But DNS propagation does not exist.',\n overviewDescription: 'A widespread fallacy among IT professionals is that DNS propagates through some network. But DNS propagation does not exist.',\n overviewImage: 'img/learning/dns-propagation-does-not-exist/dns-propagation-does-not-exist-small.png',\n overviewImageAlt: 'DNS propagation does not exist',\n author: ruurtjan,\n img1024x512: 'https://www.nslookup.io/img/learning/dns-propagation-does-not-exist/dns-propagation-does-not-exist-social.png',\n img1200x630: 'https://www.nslookup.io/img/learning/dns-propagation-does-not-exist/dns-propagation-does-not-exist-social.png',\n written: new Date('2021-04-07T22:33:35.579Z'),\n updated: new Date('2023-04-18T07:40:44.129Z'),\n};\n\nconst __default__ = {\n meta,\n};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'DnsPropagationDoesNotExist',\n setup(__props) {\n\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createBlock(BlogPost, {\n title: meta.title,\n description: meta.description,\n url: `https://www.nslookup.io${meta.url}`,\n breadcrumbs: meta.breadcrumbs,\n img1024x512: meta.img1024x512,\n img1200x630: meta.img1200x630,\n written: meta.written,\n updated: meta.updated,\n author: meta.author,\n editor: meta.editor\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"strong\", _hoisted_1, [\n _createTextVNode(\"A widespread fallacy among IT professionals is that DNS propagates through some network. So widespread in fact, that there are a couple of \"),\n _createVNode(_component_router_link, { to: \"/dns-checker/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"DNS checkers\")\n ]),\n _: 1\n }),\n _createTextVNode(\" dedicated to visualizing the geographic propagation of DNS records. But DNS propagation does not exist.\")\n ]),\n _hoisted_2,\n _hoisted_3,\n _hoisted_4,\n _hoisted_5,\n _hoisted_6,\n _hoisted_7,\n _hoisted_8,\n _hoisted_9,\n _hoisted_10,\n _hoisted_11,\n _hoisted_12\n ]),\n _: 1\n }, 8, [\"title\", \"description\", \"url\", \"breadcrumbs\", \"img1024x512\", \"img1200x630\", \"written\", \"updated\", \"author\", \"editor\"]))\n}\n}\n\n})","import script from \"./DnsPropagationDoesNotExist.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./DnsPropagationDoesNotExist.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-xl leading-8 block font-normal text-gray-500 mt-[1.3333333em]\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full rounded-lg\",\n src: \"/img/learning/dns-record-types/dns-record-types.jpg\",\n alt: \"An illustration of stars in a galaxy, representing the different DNS record types.\",\n title: \"An illustration of stars in a galaxy, representing the different DNS record types.\",\n width: \"1200\",\n height: \"600\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, [\n /*#__PURE__*/_createTextVNode(\"A galaxy full off DNS records. By NsLookup.io. Licensed under \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://creativecommons.org/licenses/by/4.0/\",\n title: \"Creative Commons By 4.0 licence\",\n rel: \"nofollow\"\n }, \"CC By 4.0\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"p\", null, \"All the record types are strictly defined in so-called RFCs (request for comments). Since the beginning of the domain name system, a lot of new record types have been added. Some record types have also been declared obsolete, because they have been replaced by a newer record type.\", -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"p\", null, \"There are many different types of DNS record in existence. Most of them are used only occasionally. Only a couple record types are used very frequently.\", -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"/img/learning/dns-record-types/all-dns-record-types.png\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full\",\n src: \"/img/learning/dns-record-types/all-dns-record-types.png\",\n alt: \"An overview of the DNS record types\",\n title: \"An overview of the DNS record types\",\n width: \"1448\",\n height: \"1176\"\n })\n ]),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, [\n /*#__PURE__*/_createTextVNode(\"All DNS record types. By NsLookup.io. Licensed under \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://creativecommons.org/licenses/by/4.0/\",\n title: \"Creative Commons By 4.0 licence\",\n rel: \"nofollow\"\n }, \"CC By 4.0\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Some of the most commonly used DNS record types are:\", -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"p\", null, \"These are all the DNS record types that are currently in use:\", -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"AFSDB\"),\n /*#__PURE__*/_createTextVNode(\" — AFS database location\")\n], -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"APL\"),\n /*#__PURE__*/_createTextVNode(\" — Address prefix list\")\n], -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"AXFR\"),\n /*#__PURE__*/_createTextVNode(\" — Authoritative zone transfer\")\n], -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"CAA\"),\n /*#__PURE__*/_createTextVNode(\" — Certification authority authorization\")\n], -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"CDNSKEY\"),\n /*#__PURE__*/_createTextVNode(\" — Child copy of a DNSKEY\")\n], -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"CDS\"),\n /*#__PURE__*/_createTextVNode(\" — Child copy of DS\")\n], -1)\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"CERT\"),\n /*#__PURE__*/_createTextVNode(\" — Cryptographic certificate\")\n], -1)\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"CSYNC\"),\n /*#__PURE__*/_createTextVNode(\" — Child-to-parent synchronization\")\n], -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"DHCID\"),\n /*#__PURE__*/_createTextVNode(\" — DHCP identifier\")\n], -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"DLV\"),\n /*#__PURE__*/_createTextVNode(\" — DNSSEC lookaside validation\")\n], -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"DNAME\"),\n /*#__PURE__*/_createTextVNode(\" — Delegation name\")\n], -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"DNSKEY\"),\n /*#__PURE__*/_createTextVNode(\" — Cryptographic key for DNSSEC\")\n], -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"DS\"),\n /*#__PURE__*/_createTextVNode(\" — Delegation signer\")\n], -1)\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"EUI48\"),\n /*#__PURE__*/_createTextVNode(\" — MAC address (EUI-48)\")\n], -1)\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"EUI64\"),\n /*#__PURE__*/_createTextVNode(\" — Mac address (EUI-64)\")\n], -1)\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"HINFO\"),\n /*#__PURE__*/_createTextVNode(\" — Host information\")\n], -1)\nconst _hoisted_24 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"HIP\"),\n /*#__PURE__*/_createTextVNode(\" — Host identification protocol\")\n], -1)\nconst _hoisted_25 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"HTTPS\"),\n /*#__PURE__*/_createTextVNode(\" — HTTPS binding\")\n], -1)\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"IPSECKEY\"),\n /*#__PURE__*/_createTextVNode(\" — Cryptographic key for IPsec\")\n], -1)\nconst _hoisted_27 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"IXFR\"),\n /*#__PURE__*/_createTextVNode(\" — Incremental zone transfer\")\n], -1)\nconst _hoisted_28 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"KEY\"),\n /*#__PURE__*/_createTextVNode(\" — Cryptographic key for DNSSEC (obsoleted by DNSKEY)\")\n], -1)\nconst _hoisted_29 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"KX\"),\n /*#__PURE__*/_createTextVNode(\" — Key exchange\")\n], -1)\nconst _hoisted_30 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"LOC\"),\n /*#__PURE__*/_createTextVNode(\" — Geographical location\")\n], -1)\nconst _hoisted_31 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"NAPTR\"),\n /*#__PURE__*/_createTextVNode(\" — Naming authority pointer\")\n], -1)\nconst _hoisted_32 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"NSEC3\"),\n /*#__PURE__*/_createTextVNode(\" — Next secure (version 3)\")\n], -1)\nconst _hoisted_33 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"NSEC3PARAM\"),\n /*#__PURE__*/_createTextVNode(\" — Parameter for NSEC3\")\n], -1)\nconst _hoisted_34 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"NSEC\"),\n /*#__PURE__*/_createTextVNode(\" — Next secure (obsoleted by NSEC3)\")\n], -1)\nconst _hoisted_35 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"NXT\"),\n /*#__PURE__*/_createTextVNode(\" — DNSSEC key (obsoleted by NSEC)\")\n], -1)\nconst _hoisted_36 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"OPENPGPKEY\"),\n /*#__PURE__*/_createTextVNode(\" — Public key for OpenPGP\")\n], -1)\nconst _hoisted_37 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"OPT\"),\n /*#__PURE__*/_createTextVNode(\" — EDNS option\")\n], -1)\nconst _hoisted_38 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"RP\"),\n /*#__PURE__*/_createTextVNode(\" — Responsible person\")\n], -1)\nconst _hoisted_39 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"RRSIG\"),\n /*#__PURE__*/_createTextVNode(\" — Resource record signature for DNSSEC\")\n], -1)\nconst _hoisted_40 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"SIG\"),\n /*#__PURE__*/_createTextVNode(\" — Resource record signature for DNSSEC (obsoleted by RRSIG)\")\n], -1)\nconst _hoisted_41 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"SMIMEA\"),\n /*#__PURE__*/_createTextVNode(\" — S/MIME association\")\n], -1)\nconst _hoisted_42 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"SSHFP\"),\n /*#__PURE__*/_createTextVNode(\" — Public key fingerprint for SSH\")\n], -1)\nconst _hoisted_43 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"SVCB\"),\n /*#__PURE__*/_createTextVNode(\" — Service binding\")\n], -1)\nconst _hoisted_44 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"TA\"),\n /*#__PURE__*/_createTextVNode(\" — Trust authority for DNSSEC\")\n], -1)\nconst _hoisted_45 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"TKEY\"),\n /*#__PURE__*/_createTextVNode(\" — Transaction key\")\n], -1)\nconst _hoisted_46 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"TLSA\"),\n /*#__PURE__*/_createTextVNode(\" — Certificate association for TLS\")\n], -1)\nconst _hoisted_47 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"TSIG\"),\n /*#__PURE__*/_createTextVNode(\" — Transaction signature\")\n], -1)\nconst _hoisted_48 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"URI\"),\n /*#__PURE__*/_createTextVNode(\" — Uniform resource identifier\")\n], -1)\nconst _hoisted_49 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"ZONEMD\"),\n /*#__PURE__*/_createTextVNode(\" — Message digest for DNS zones\")\n], -1)\n\nimport BlogPost from '@/components/layout/BlogPost.vue';\n\nimport { ruurtjan } from '@/common/authors';\nimport { BlogMeta } from '@/common/blogMeta';\nimport { Breadcrumb, learningBreadcrumb } from '@/model/Breadcrumb';\n\nconst url = '/learning/dns-record-types/';\nconst breadcrumb: Breadcrumb = { url, title: 'DNS record types' };\n\nconst meta: BlogMeta = {\n tag: 'DNS concepts',\n url,\n breadcrumbs: [learningBreadcrumb],\n title: 'All DNS record types',\n description: 'An overview of all the DNS record types. Each DNS record type is briefly explained, and extensive explanations are available in linked articles.',\n overviewImage: '/img/learning/dns-record-types/dns-record-types-small.png',\n overviewImageAlt: 'An overview of the DNS record types',\n overviewDescription: 'An overview of all the DNS record types. Each DNS record type is briefly explained, and extensive explanations are available in linked articles.',\n author: ruurtjan,\n img1024x512: 'https://www.nslookup.io/img/learning/dns-record-types/dns-record-types-social.jpg',\n img1200x630: 'https://www.nslookup.io/img/learning/dns-record-types/dns-record-types-social.jpg',\n written: new Date('2021-09-09T07:08:34.241Z'),\n updated: new Date('2023-03-28T11:59:59.243Z'),\n};\n\nconst __default__ = {\n meta,\n breadcrumb,\n};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'DnsRecordTypes',\n setup(__props) {\n\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"ImageObject\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"email\\\": \\\"mailto:ruurtjan@nslookup.io\\\", \\\"image\\\": \\\"https://www.nslookup.io/img/ruurtjan-lg.jpg\\\", \\\"jobTitle\\\": \\\"CEO\\\", \\\"name\\\": \\\"Ruurtjan Pul\\\", \\\"url\\\": \\\"https://www.nslookup.io/about/ruurtjan-pul/\\\" }, \\\"copyrightHolder\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"https://www.nslookup.io/\\\", \\\"email\\\": \\\"hello@nslookup.io\\\" }, \\\"copyrightYear\\\": 2023, \\\"contentUrl\\\": \\\"https://www.nslookup.io/img/learning/dns-record-types/dns-record-types.jpg\\\", \\\"license\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\", \\\"acquireLicensePage\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\" } \")\n ]),\n _: 1\n })),\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"ImageObject\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"email\\\": \\\"mailto:ruurtjan@nslookup.io\\\", \\\"image\\\": \\\"https://www.nslookup.io/img/ruurtjan-lg.jpg\\\", \\\"jobTitle\\\": \\\"CEO\\\", \\\"name\\\": \\\"Ruurtjan Pul\\\", \\\"url\\\": \\\"https://www.nslookup.io/about/ruurtjan-pul/\\\" }, \\\"copyrightHolder\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"https://www.nslookup.io/\\\", \\\"email\\\": \\\"hello@nslookup.io\\\" }, \\\"copyrightYear\\\": 2021, \\\"contentUrl\\\": \\\"https://www.nslookup.io/img/learning/dns-record-types/all-dns-record-types.png\\\", \\\"license\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\", \\\"acquireLicensePage\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\" } \")\n ]),\n _: 1\n }))\n ])),\n _createVNode(BlogPost, {\n title: meta.title,\n description: meta.description,\n url: `https://www.nslookup.io${meta.url}`,\n breadcrumbs: meta.breadcrumbs,\n img1024x512: meta.img1024x512,\n img1200x630: meta.img1200x630,\n written: meta.written,\n updated: meta.updated,\n author: meta.author,\n editor: meta.editor\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"strong\", _hoisted_1, [\n _createTextVNode(\"Every DNS record has a type. This type defines what the content of the record means. For example, a DNS record of type MX contains the location of a mail exchange server. So when you want to know the mail server of some email address, you can perform a \"),\n _createVNode(_component_router_link, { to: \"/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"DNS lookup\")\n ]),\n _: 1\n }),\n _createTextVNode(\" that queries the MX records.\")\n ]),\n _hoisted_2,\n _hoisted_3,\n _hoisted_4,\n _hoisted_5,\n _hoisted_6,\n _createElementVNode(\"ul\", null, [\n _createElementVNode(\"li\", null, [\n _createElementVNode(\"strong\", null, [\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/a/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"A\")\n ]),\n _: 1\n })\n ]),\n _createTextVNode(\" — IPv4 address\")\n ]),\n _createElementVNode(\"li\", null, [\n _createElementVNode(\"strong\", null, [\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/aaaa/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"AAAA\")\n ]),\n _: 1\n })\n ]),\n _createTextVNode(\" — IPv6 address\")\n ]),\n _createElementVNode(\"li\", null, [\n _createElementVNode(\"strong\", null, [\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/cname/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"CNAME\")\n ]),\n _: 1\n })\n ]),\n _createTextVNode(\" — Canonical name\")\n ]),\n _createElementVNode(\"li\", null, [\n _createElementVNode(\"strong\", null, [\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/mx/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"MX\")\n ]),\n _: 1\n })\n ]),\n _createTextVNode(\" — Mail exchange\")\n ]),\n _createElementVNode(\"li\", null, [\n _createElementVNode(\"strong\", null, [\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/ns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"NS\")\n ]),\n _: 1\n })\n ]),\n _createTextVNode(\" — Name server\")\n ]),\n _createElementVNode(\"li\", null, [\n _createElementVNode(\"strong\", null, [\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/txt/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"TXT\")\n ]),\n _: 1\n })\n ]),\n _createTextVNode(\" — Human-readable text\")\n ]),\n _createElementVNode(\"li\", null, [\n _createElementVNode(\"strong\", null, [\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/soa/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"SOA\")\n ]),\n _: 1\n })\n ]),\n _createTextVNode(\" — Start of authority\")\n ])\n ]),\n _hoisted_7,\n _createElementVNode(\"ul\", null, [\n _createElementVNode(\"li\", null, [\n _createElementVNode(\"strong\", null, [\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/a/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"A\")\n ]),\n _: 1\n })\n ]),\n _createTextVNode(\" — IPv4 address\")\n ]),\n _createElementVNode(\"li\", null, [\n _createElementVNode(\"strong\", null, [\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/aaaa/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"AAAA\")\n ]),\n _: 1\n })\n ]),\n _createTextVNode(\" — IPv6 address\")\n ]),\n _hoisted_8,\n _hoisted_9,\n _hoisted_10,\n _hoisted_11,\n _hoisted_12,\n _hoisted_13,\n _hoisted_14,\n _createElementVNode(\"li\", null, [\n _createElementVNode(\"strong\", null, [\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/cname/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"CNAME\")\n ]),\n _: 1\n })\n ]),\n _createTextVNode(\" — Canonical name\")\n ]),\n _hoisted_15,\n _hoisted_16,\n _hoisted_17,\n _hoisted_18,\n _hoisted_19,\n _hoisted_20,\n _hoisted_21,\n _hoisted_22,\n _hoisted_23,\n _hoisted_24,\n _hoisted_25,\n _hoisted_26,\n _hoisted_27,\n _hoisted_28,\n _hoisted_29,\n _hoisted_30,\n _createElementVNode(\"li\", null, [\n _createElementVNode(\"strong\", null, [\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/mx/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"MX\")\n ]),\n _: 1\n })\n ]),\n _createTextVNode(\" — Mail exchange\")\n ]),\n _hoisted_31,\n _createElementVNode(\"li\", null, [\n _createElementVNode(\"strong\", null, [\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/ns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"NS\")\n ]),\n _: 1\n })\n ]),\n _createTextVNode(\" — Name server\")\n ]),\n _hoisted_32,\n _hoisted_33,\n _hoisted_34,\n _hoisted_35,\n _hoisted_36,\n _hoisted_37,\n _createElementVNode(\"li\", null, [\n _createElementVNode(\"strong\", null, [\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/ptr/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"PTR\")\n ]),\n _: 1\n })\n ]),\n _createTextVNode(\" — Canonical name pointer\")\n ]),\n _hoisted_38,\n _hoisted_39,\n _hoisted_40,\n _hoisted_41,\n _createElementVNode(\"li\", null, [\n _createElementVNode(\"strong\", null, [\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/soa/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"SOA\")\n ]),\n _: 1\n })\n ]),\n _createTextVNode(\" — Start of authority\")\n ]),\n _hoisted_42,\n _hoisted_43,\n _createElementVNode(\"li\", null, [\n _createElementVNode(\"strong\", null, [\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/srv/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"SRV\")\n ]),\n _: 1\n })\n ]),\n _createTextVNode(\" — Service locator\")\n ]),\n _hoisted_44,\n _hoisted_45,\n _hoisted_46,\n _hoisted_47,\n _createElementVNode(\"li\", null, [\n _createElementVNode(\"strong\", null, [\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/txt/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"TXT\")\n ]),\n _: 1\n })\n ]),\n _createTextVNode(\" — Human-readable text\")\n ]),\n _hoisted_48,\n _hoisted_49\n ])\n ]),\n _: 1\n }, 8, [\"title\", \"description\", \"url\", \"breadcrumbs\", \"img1024x512\", \"img1200x630\", \"written\", \"updated\", \"author\", \"editor\"])\n ], 64))\n}\n}\n\n})","import script from \"./DnsRecordTypes.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./DnsRecordTypes.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, unref as _unref, normalizeClass as _normalizeClass, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"strong\", { class: \"text-xl leading-8 block font-normal text-gray-500 mt-[1.3333333em]\" }, \"The A or “address” DNS record type was created to hold IPv4 addresses. Translating names to addresses is one of the most fundamental uses of the DNS!\", -1)\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc1034\",\n rel: \"noopener noreferrer\"\n}, \"RFC 1034\", -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc1035\",\n rel: \"noopener noreferrer\"\n}, \"1035\", -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The DNS was created because the original system for mapping names to address, the “hosts” file, was quickly becoming unsustainable. The DNS would allow applications to map human-readable names into addresses in a massive globally distributed database. The A record type associates IPv4 addresses with DNS names.\", -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Today, the DNS performs many other critical functions. But one of its most important jobs remains the mapping of names to addresses.\", -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full rounded-lg\",\n src: \"/img/learning/dns-record-types/a/the-dns-a-record-type.jpg\",\n alt: \"Mapping names into addresses\",\n title: \"Mapping names into addresses\",\n width: \"1200\",\n height: \"600\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, [\n /*#__PURE__*/_createTextVNode(\"Mapping names into addresses. By NsLookup.io. Licensed under \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://creativecommons.org/licenses/by/4.0/\",\n title: \"Creative Commons By 4.0 licence\",\n rel: \"nofollow\"\n }, \"CC By 4.0\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"A record format\", -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Each A record in the DNS contains a single IPv4 address. Each A record, like all other DNS records, also has a Time-to-Live (TTL) value in seconds.\", -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"p\", null, \"When stored in a zone file or displayed as text, use the familar dot-separated notation, e.g. \\\"1.2.3.4\\\". When an A record is transported across the Internet in a DNS message, the address is stored in four bytes of binary data to save space.\", -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Multiple A records\", -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"It is common for a name to map to more than one IPv4 address in the DNS for redundancy. This is accomplished by creating multiple A records at the DNS name. Here is an example showing three address records for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"www.example.org\"),\n /*#__PURE__*/_createTextVNode(\" with a TTL value of one hour:\")\n], -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"www.example.org. 3600 A 10.0.0.1\\nwww.example.org. 3600 A 10.0.0.2\\nwww.example.org. 3600 A 10.0.0.3\", -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"The A record type stores IPv4 addresses but it can't hold an IPv6 address. IPv6 wasn't around yet when the DNS specifications were first created. Only a few years after though, IPv6 came along. This required a new DNS record type, and so the AAAA record type was born.\")\n], -1)\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The AAAA record type was first introduced in \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc1886\",\n rel: \"noopener noreferrer\"\n }, \"RFC 1886\"),\n /*#__PURE__*/_createTextVNode(\" in 1995. It was later updated by \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc3596\",\n rel: \"noopener noreferrer\"\n }, \"RFC 3596\"),\n /*#__PURE__*/_createTextVNode(\". A and AAAA records both store IP addresses but they are distinct record types from one another.\")\n], -1)\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"p\", null, \"These two record types are similar except for the size of the address they each carry. 128 bits for type AAAA versus 32 bits for type A.\", -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"p\", null, \"It is common to see records of both types at the same name in the DNS. This allows clients to connect using either address type.\", -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"What TTL should you use for A records?\", -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"You should use a TTL of one hour or more for A records that are relatively static. A records that change frequently can have a TTL as low as a few minutes.\")\n], -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Shorter TTLs come with trade-offs. Use them with caution. TTLs under five minutes should be used sparingly. As a general rule of thumb, use shorter TTLs for DNS records that change frequently and longer TTLs for DNS records that are more static.\", -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Anycast addresses in the DNS\", -1)\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"p\", null, \"In the past it was common to see quite a few A records at a name in the DNS. Often one for each and every server for services with a global footprint.\", -1)\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Today, the use of Anycast is becoming more and more common. Instead of one address record for each server, a single Anycast address is published.\", -1)\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"p\", null, \"When a client attempts to connect to an Anycast address, their request is automatically routed to the nearest datacenter. One or two additional Anycast addresses are often published for redundancy.\", -1)\nconst _hoisted_24 = /*#__PURE__*/_createElementVNode(\"p\", null, \"This is very powerful for service providers. It results in smaller DNS messages, faster DNS latency, and less DNS complexity. It also means that their clients always take the shortest path to the provider's servers.\", -1)\nconst _hoisted_25 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Anycast addresses are stored in A records the same as Unicast addresses. The DNS does not distinguish between Anycast and Unicast addresses.\", -1)\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Load balancing through round robin\", -1)\nconst _hoisted_27 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Round robin load balancing in the DNS means responding with different address records each time a name is queried.\", -1)\nconst _hoisted_28 = /*#__PURE__*/_createElementVNode(\"p\", null, \"This type of load balancing can be relatively effective. However, due to DNS caching the results are generally suboptimal at best.\", -1)\nconst _hoisted_29 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Load balancing through Anycast in combination with software or hardware load balancer devices gives better results. However, Anycast is more complex to set up and maintain.\", -1)\nconst _hoisted_30 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Other uses of A records in the DNS\", -1)\nconst _hoisted_31 = /*#__PURE__*/_createElementVNode(\"p\", null, \"A common theme in Internet operations is to use the DNS in different and sometimes exciting ways! Even the A record serves other purposes. Its uses have included:\", -1)\nconst _hoisted_32 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Domain Name System-based Blocklist (DNSBL)\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Storing subnets in the DNS\")\n], -1)\nconst _hoisted_33 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"Domain Name System-based Blocklist (DNSBL)\", -1)\nconst _hoisted_34 = /*#__PURE__*/_createElementVNode(\"p\", null, \"DNSBLs use the DNS as a distributed database to store blocklists used to defeat email spam.\", -1)\nconst _hoisted_35 = /*#__PURE__*/_createElementVNode(\"p\", null, \"A mail server can perform a DNS query with a specific format against a DNSBL to check if a sending host's IP address has been flagged as a source of spam. In this case the mail server might reject or throttle requests from that sender's IP address.\", -1)\nconst _hoisted_36 = /*#__PURE__*/_createElementVNode(\"p\", null, \"A mail server would follow these steps to use a DNSBL:\", -1)\nconst _hoisted_37 = /*#__PURE__*/_createElementVNode(\"ol\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"Construct a DNSBL lookup name by reversing the octets in the sender's IP address and appending the DNSBL's domain name. For example if the sender's IP address is 1.2.3.4 the lookup name for the example.org DNSBL would be \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"4.3.2.1.dnsbl.example.org.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Perform a standard DNS lookup with query type A for the lookup name.\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"If the result is NXDOMAIN there is no entry for the sender's IP in the blocklist. This means that the sender's IP is not flagged as a source of spam. Mail should be sent normally.\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"A positive result indicates that the sender's IP exists in the blocklist. This means the IP is considered a source of spam. Optionally, a TXT lookup for the same name can be performed to retrieve the reason for blocklisting.\")\n], -1)\nconst _hoisted_38 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The address returned for a blocked IP address may be the fixed value 127.0.0.2. This indicates that the sender's IP address has been flagged as a source of spam. Other values are also possible. See \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc5782#section-2.3\",\n rel: \"noopener noreferrer\"\n }, \"RFC 5782 section 2.3\"),\n /*#__PURE__*/_createTextVNode(\" for more details.\")\n], -1)\nconst _hoisted_39 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"Storing subnets in the DNS\", -1)\nconst _hoisted_40 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc1101#section-4\",\n rel: \"noopener noreferrer\"\n }, \"RFC 1101 section 4\"),\n /*#__PURE__*/_createTextVNode(\" proposes a method to store the subnet mask for a network in the DNS. A DNS type A record is created at the network's reverse lookup name in the in-addr.arpa zone.\")\n], -1)\nconst _hoisted_41 = /*#__PURE__*/_createElementVNode(\"p\", null, \"This is not used today as there is little need to publish subnet masks in the DNS. But it is interesting to see how the use of the DNS has evolved over the years.\", -1)\nconst _hoisted_42 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Looking up A records for a name\", -1)\nconst _hoisted_43 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The IPv4 address records for a DNS name can be queried with the dig or nslookup command line tools. To find the address records for wikipedia.org, use this command:\", -1)\nconst _hoisted_44 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"dig A wikipedia.org\", -1)\nconst _hoisted_45 = /*#__PURE__*/_createElementVNode(\"p\", null, \"On operating systems that support nslookup, you can use the following:\", -1)\nconst _hoisted_46 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"nslookup -type=a wikipedia.org\", -1)\nconst _hoisted_47 = {\n class: \"not-prose text-base mx-auto max-w-lg\",\n autocomplete: \"off\"\n}\nconst _hoisted_48 = { class: \"mx-auto max-w-3xl divide-y-2 divide-gray-200\" }\nconst _hoisted_49 = /*#__PURE__*/_createElementVNode(\"h2\", { class: \"ignore-toc\" }, \"Related questions\", -1)\nconst _hoisted_50 = { class: \"mt-6 space-y-6 divide-y divide-gray-200 [overflow-anchor:none]\" }\nconst _hoisted_51 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg font-medium text-gray-900\" }, \" What is the difference between a CNAME record and an A record? \", -1)\nconst _hoisted_52 = { class: \"ml-6 flex h-7 items-center\" }\nconst _hoisted_53 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", { class: \"font-medium text-gray-500\" }, \"A CNAME is an alias from one DNS name to another. A CNAME is often used to redirect one DNS name to another DNS name which contains a set of A records.\")\n], -1)\nconst _hoisted_54 = /*#__PURE__*/_createElementVNode(\"p\", null, \"One use of CNAMEs is to eliminate duplicate data from the DNS. This reduces the chance of an administrator forgetting to update all copies of duplicated A records when making a change. CNAMEs may also be linked together in chains. The last name in the CNAME chain should usually resolve to a set of A records.\", -1)\nconst _hoisted_55 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg font-medium text-gray-900\" }, \" Does a domain need an A record? \", -1)\nconst _hoisted_56 = { class: \"ml-6 flex h-7 items-center\" }\nconst _hoisted_57 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", { class: \"font-medium text-gray-500\" }, [\n /*#__PURE__*/_createTextVNode(\"A domain such as \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" does not necessarily need an A record. However most domains do have an A record. It is typical for web clients to interchangeably connect to both \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" and \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"www.example.org\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_58 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"If there are no A records for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" then web browsers would display an error if a user did not explicitly type \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"www.example.org\"),\n /*#__PURE__*/_createTextVNode(\". This would be confusing for clients of the domain.\")\n], -1)\n\nimport BlogPost from '@/components/layout/BlogPost.vue';\n\n\nimport { useRouter } from 'vue-router';\nimport {\n Disclosure,\n DisclosureButton,\n DisclosurePanel,\n} from '@headlessui/vue';\nimport { ChevronDownIcon } from '@heroicons/vue/24/outline';\nimport { jeff, ruurtjan } from '@/common/authors';\nimport { BlogMeta } from '@/common/blogMeta';\nimport DomainSearch from '@/components/DomainSearch.vue';\nimport CodeBlock from '@/components/micro/CodeBlock.vue';\nimport DnsRecordTypes from '@/views/learning/DnsRecordTypes.vue';\nimport { learningBreadcrumb } from '@/model/Breadcrumb';\nimport Callout from '@/components/layout/CalloutComponent.vue';\nimport { domainNameToUrlPath } from '@/common/domainName';\n\nconst meta: BlogMeta = {\n tag: 'DNS record types',\n url: '/learning/dns-record-types/a/',\n breadcrumbs: [learningBreadcrumb, DnsRecordTypes.breadcrumb],\n title: 'The A record',\n description: 'The A or “address” DNS record type maps DNS names to IPv4 addresses. Translating names to addresses is one of the most fundamental uses of the DNS.',\n overviewDescription: 'The A or “address” DNS record type maps DNS names to IPv4 addresses. Translating names to addresses is one of the most fundamental uses of the DNS.',\n overviewImage: '/img/learning/dns-record-types/a/the-dns-a-record-type-small.jpg',\n overviewImageAlt: 'Mapping names into numbers',\n author: jeff,\n editor: ruurtjan,\n img1024x512: 'https://www.nslookup.io/img/learning/dns-record-types/a/the-a-record-social.jpg',\n img1200x630: 'https://www.nslookup.io/img/learning/dns-record-types/a/the-a-record-social.jpg',\n written: new Date('2022-07-11T13:19:14.101Z'),\n updated: new Date('2023-03-28T11:56:49.659Z'),\n};\n\nconst __default__ = {\n meta,\n};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'RecordTypeA',\n setup(__props) {\n\nconst router = useRouter();\n\nfunction redirectTo(domain: string): void {\n router.push(`/domains/${domainNameToUrlPath(domain)}/dns-records/a/`);\n}\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"ImageObject\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"email\\\": \\\"mailto:ruurtjan@nslookup.io\\\", \\\"image\\\": \\\"https://www.nslookup.io/img/ruurtjan-lg.jpg\\\", \\\"jobTitle\\\": \\\"CEO\\\", \\\"name\\\": \\\"Ruurtjan Pul\\\", \\\"url\\\": \\\"https://www.nslookup.io/about/ruurtjan-pul/\\\" }, \\\"copyrightHolder\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"https://www.nslookup.io/\\\", \\\"email\\\": \\\"hello@nslookup.io\\\" }, \\\"copyrightYear\\\": 2023, \\\"contentUrl\\\": \\\"https://www.nslookup.io/img/learning/dns-record-types/a/the-dns-a-record-type.jpg\\\", \\\"license\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\", \\\"acquireLicensePage\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\" } \")\n ]),\n _: 1\n }))\n ])),\n _createVNode(BlogPost, {\n title: meta.title,\n description: meta.description,\n url: `https://www.nslookup.io${meta.url}`,\n breadcrumbs: meta.breadcrumbs,\n img1024x512: meta.img1024x512,\n img1200x630: meta.img1200x630,\n written: meta.written,\n updated: meta.updated,\n author: meta.author,\n editor: meta.editor\n }, {\n default: _withCtx(() => [\n _hoisted_1,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"The A record type was introduced in the original DNS specifications (\"),\n _hoisted_2,\n _createTextVNode(\" and \"),\n _hoisted_3,\n _createTextVNode(\") in 1987. Each type A record holds an IPv4 address. IPv6 did not yet exist in 1987 so all addresses were 32-bit IPv4 addresses. The \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/aaaa/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"AAAA DNS record type\")\n ]),\n _: 1\n }),\n _createTextVNode(\" for IPv6 records would come later.\")\n ]),\n _hoisted_4,\n _hoisted_5,\n _hoisted_6,\n _hoisted_7,\n _hoisted_8,\n _hoisted_9,\n _hoisted_10,\n _hoisted_11,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_12\n ]),\n _: 1\n }),\n _createVNode(Callout, {\n icon: \"info\",\n title: \"A records versus AAAA records\",\n heading: \"h2\"\n }, {\n default: _withCtx(() => [\n _hoisted_13,\n _hoisted_14,\n _hoisted_15,\n _hoisted_16\n ]),\n _: 1\n }),\n _hoisted_17,\n _hoisted_18,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"TTL selection in the DNS is often complicated. As we discussed in \"),\n _createVNode(_component_router_link, { to: \"/learning/what-is-a-good-ttl-for-dns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"our article on TTL selection in the DNS\")\n ]),\n _: 1\n }),\n _createTextVNode(\", shorter TTLs give agility but longer TTLs increase reliability. Longer TTLs can also decrease latency.\")\n ]),\n _hoisted_19,\n _hoisted_20,\n _hoisted_21,\n _hoisted_22,\n _hoisted_23,\n _hoisted_24,\n _hoisted_25,\n _hoisted_26,\n _hoisted_27,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"Each time the DNS servers for a \"),\n _createVNode(_component_router_link, {\n to: \"/learning/what-is-a-dns-zone/\",\n title: \"DNS zone\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(\"DNS zone\")\n ]),\n _: 1\n }),\n _createTextVNode(\" receive a query, they respond with a different set of address records. The idea is that different clients will use different endpoint addresses. Ideally, all possible addresses will be in use by different clients at the same time. This distributes load across all available servers.\")\n ]),\n _hoisted_28,\n _hoisted_29,\n _hoisted_30,\n _hoisted_31,\n _hoisted_32,\n _hoisted_33,\n _hoisted_34,\n _hoisted_35,\n _hoisted_36,\n _hoisted_37,\n _hoisted_38,\n _hoisted_39,\n _hoisted_40,\n _hoisted_41,\n _hoisted_42,\n _hoisted_43,\n _hoisted_44,\n _hoisted_45,\n _hoisted_46,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"You can also check the A records for any domain name in our \"),\n _createVNode(_component_router_link, { to: \"/a-lookup/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"A lookup\")\n ]),\n _: 1\n }),\n _createTextVNode(\" tool, or by entering it here:\")\n ]),\n _createElementVNode(\"form\", _hoisted_47, [\n _createVNode(DomainSearch, {\n emphasize: \"\",\n buttonText: \"Find A record\",\n onSubmitted: redirectTo\n })\n ]),\n _createElementVNode(\"div\", _hoisted_48, [\n _hoisted_49,\n _createElementVNode(\"div\", _hoisted_50, [\n _createVNode(_unref(Disclosure), {\n as: \"div\",\n class: \"pt-6\"\n }, {\n default: _withCtx(({ open }) => [\n _createVNode(_unref(DisclosureButton), {\n as: \"h3\",\n class: \"ignore-toc flex mt-0 w-full items-start justify-between text-left cursor-pointer text-gray-400\"\n }, {\n default: _withCtx(() => [\n _hoisted_51,\n _createElementVNode(\"span\", _hoisted_52, [\n _createVNode(_unref(ChevronDownIcon), {\n class: _normalizeClass([open ? '-rotate-180' : 'rotate-0', 'h-6 w-6 transform']),\n \"aria-hidden\": \"true\"\n }, null, 8, [\"class\"])\n ])\n ]),\n _: 2\n }, 1024),\n _createVNode(_unref(DisclosurePanel), { class: \"mt-2 pr-12\" }, {\n default: _withCtx(() => [\n _hoisted_53,\n _hoisted_54,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"See our article on \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/cname/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"CNAME records\")\n ]),\n _: 1\n }),\n _createTextVNode(\" for more details.\")\n ])\n ]),\n _: 1\n })\n ]),\n _: 1\n }),\n _createVNode(_unref(Disclosure), {\n as: \"div\",\n class: \"pt-6\"\n }, {\n default: _withCtx(({ open }) => [\n _createVNode(_unref(DisclosureButton), {\n as: \"h3\",\n class: \"ignore-toc flex mt-0 w-full items-start justify-between text-left cursor-pointer text-gray-400\"\n }, {\n default: _withCtx(() => [\n _hoisted_55,\n _createElementVNode(\"span\", _hoisted_56, [\n _createVNode(_unref(ChevronDownIcon), {\n class: _normalizeClass([open ? '-rotate-180' : 'rotate-0', 'h-6 w-6 transform']),\n \"aria-hidden\": \"true\"\n }, null, 8, [\"class\"])\n ])\n ]),\n _: 2\n }, 1024),\n _createVNode(_unref(DisclosurePanel), { class: \"mt-2 pr-12\" }, {\n default: _withCtx(() => [\n _hoisted_57,\n _hoisted_58\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ])\n ])\n ]),\n _: 1\n }, 8, [\"title\", \"description\", \"url\", \"breadcrumbs\", \"img1024x512\", \"img1200x630\", \"written\", \"updated\", \"author\", \"editor\"])\n ], 64))\n}\n}\n\n})","import script from \"./RecordTypeA.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./RecordTypeA.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, createElementVNode as _createElementVNode, createVNode as _createVNode, resolveComponent as _resolveComponent, unref as _unref, normalizeClass as _normalizeClass, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"strong\", { class: \"text-xl leading-8 block font-normal text-gray-500 mt-[1.3333333em]\" }, \"The AAAA DNS record type was created to hold IPv6 addresses. AAAA records, pronounced “quad A records” are similar to A records. They hold a 128-bit IPv6 address instead of a 32-bit IPv4 address.\", -1)\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"IPv6 did not exist when the original DNS specifications (\"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc1034\",\n rel: \"noopener noreferrer\"\n }, \"RFC 1034\"),\n /*#__PURE__*/_createTextVNode(\" and \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc1035\",\n rel: \"noopener noreferrer\"\n }, \"1035\"),\n /*#__PURE__*/_createTextVNode(\") were written. Only a few years later, IPv6 was created to address the problem of IPv4 address space exhaustion. The AAAA record type was introduced in \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc1886\",\n rel: \"noopener noreferrer\"\n }, \"RFC 1886\"),\n /*#__PURE__*/_createTextVNode(\" in 1995. \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc3596\",\n rel: \"noopener noreferrer\"\n }, \"RFC 3596\"),\n /*#__PURE__*/_createTextVNode(\" is the current specification for AAAA records in the DNS.\")\n], -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full rounded-lg\",\n src: \"/img/learning/dns-record-types/aaaa/the-dns-aaaa-record-type.jpg\",\n alt: \"Mapping names into addresses\",\n title: \"Mapping names into addresses\",\n width: \"1200\",\n height: \"600\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, [\n /*#__PURE__*/_createTextVNode(\"Mapping names into addresses. By NsLookup.io. Licensed under \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://creativecommons.org/licenses/by/4.0/\",\n title: \"Creative Commons By 4.0 licence\",\n rel: \"nofollow\"\n }, \"CC By 4.0\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"AAAA record format\", -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Each AAAA record contains a single IPv6 address. Like all other records in the DNS, every AAAA record also has a Time-to-Live (TTL) value in seconds. Here is an example of a AAAA record in zone file format:\", -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"www.example.org. 600 AAAA 2001:0dc8:86a4:0000:0000:7a2f:2360:2341\", -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"p\", null, \"In a DNS message travelling across the Internet, a AAAA record contains an IPv6 address stored as 16 bytes of binary data.\", -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"p\", null, \"In zone files, web portals, and other human-friendly applications, the IPv6 address for a AAAA record is represented in string format shown above. This format consists of eight groups of four hexadecimal digits. Each group is separated by a colon and represents 16 bits of the address.\", -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"IPv6 address shortcuts\", -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"p\", null, \"IPv6 addresses are long! Many IPv6 addresses contain groups of consecutive zero digits next to one another. As a shorthand notation, any number of consecutive groups of zeros can be replaced with two colons. Leading zeros in each group can also be omitted.\", -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"p\", null, \"So for example the IPv6 loopback address can be legally written as \\\"0000:0000:0000:0000:0000:0000:0000:0001\\\" or \\\"0:0:0:0:0:0:0:1\\\" or simply as \\\"::1\\\". These representations are all equivalent. Every IPv6 address is always 128 bits long when sent over the Internet or used by an application.\", -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"The A record type stores 32-bit IPv4 addresses. Type A records have been part of the DNS since the very beginning. IPv6 was not created until several years later. Type A records can only hold 32 bits of address, but IPv6 addresses are 128 bits long. So a new record type had to be created for IPv6 addresses: AAAA.\")\n], -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"p\", null, \"IPv4 addresses are 32 bits long which means there are roughly 4 billion possible IPv4 addresses. In the early days of the Internet when computers were large and few in number, this seemed like more than enough. But it wasn't long before the IPv4 address space began to feel small.\", -1)\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The growth of the Internet was explosive and global. Large organizations snapped up huge ranges, or subnets, of IPv4 addresses. Computers became far more numerous. Phones, smart appliances, and many other new types of devices drove even more demand for addresses. Suddenly, 4 billion possible IPv4 addresses wasn't nearly enough to sustain the growth of the Internet.\", -1)\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"p\", null, \"This led to the creation of IPv6. With 128 bit addresses, the IPv6 address space is massive compared to the IPv4 address space. There are approximately 340 trillion trillion trillion IPv6 addresses. This is 100 times the number of atoms on the surface of the Earth!\", -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Multiple AAAA records at a name\", -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"p\", null, \"More than one IPv6 address at a name in the DNS is typical for redundancy. This is accomplished by creating multiple AAAA records at a DNS name.\", -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"p\", null, \"There will usually be type A records at the name as well since there are few Internet resources that only support IPv6.\", -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Here is an example showing two type A records and two type AAAA records for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"www.example.org\"),\n /*#__PURE__*/_createTextVNode(\" with a TTL value of ten minutes:\")\n], -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"www.example.org. 600 A 10.0.0.1\\nwww.example.org. 600 A 10.0.0.2\\nwww.example.org. 600 AAAA 2001::1000:1\\nwww.example.org. 600 AAAA 2001::1000:2\", -1)\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The TTL value for all AAAA records at a single name must be identical. This is true for all the records of any type at a name.\", -1)\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Simultaneous queries for A and AAAA records\", -1)\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Clients today often perform simultaneous queries for type A and type AAAA when they are about to connect to an endpoint by name. Unfortunately, the DNS does not allow a client to retrieve both A and AAAA records with a single query. Efforts have been made to streamline this, but to date none have been adopted.\", -1)\nconst _hoisted_24 = /*#__PURE__*/_createElementVNode(\"p\", null, \"A client capable of using both IPv4 and IPv6 will usually perform two separate DNS queries for the endpoint name. One query will be of type A and the other of type AAAA. All the addresses will be sorted into a list.\", -1)\nconst _hoisted_25 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The order will depend on the client implementation, local configuration, and policy. Some clients may prefer the IPv4 addresses in the type A response. Other clients may prefer the IPv6 addresses in the type AAAA response.\", -1)\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"What TTL should you use for AAAA records?\", -1)\nconst _hoisted_27 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"You should use a TTL of one hour or more for AAAA records that are relatively static. Records that change frequently can have a TTL as low as a few minutes.\")\n], -1)\nconst _hoisted_28 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Shorter TTLs come with trade-offs. Use them with caution. TTLs under five minutes should be used sparingly. As a general rule of thumb, use shorter TTLs for DNS records that change frequently and longer TTLs for DNS records that are more static.\", -1)\nconst _hoisted_29 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Load balancing for IPv6 endpoints\", -1)\nconst _hoisted_30 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Load balancing for AAAA records is effectively the same as for A records. However, there is an interesting consideration that network architects must consider once AAAA records are added for an endpoint: \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"It is not possible for the DNS to force clients to use or prefer IPv4 or IPv6.\")\n], -1)\nconst _hoisted_31 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"DNS cannot enforce preference for IPv4 versus IPv6\", -1)\nconst _hoisted_32 = /*#__PURE__*/_createElementVNode(\"p\", null, \"If both A and AAAA records exist for a particular name in the DNS, a client is free to connect to any address for that name. The DNS doesn't have any way to dictate which address should be preferred, or even which address family (IPv4 or IPv6) should be preferred. This can create interesting problems for network architects.\", -1)\nconst _hoisted_33 = /*#__PURE__*/_createElementVNode(\"p\", null, \"For example, a North American company adds IPv6 addresses for their website. They notice that few of their customers use IPv6 so to reduce costs, they do not allocate very many servers for IPv6. Fast-forward a year or two. The company expands into Asia. The use of IPv6 is more common in Asia. Suddenly, the company's servers experience many more IPv6 requests than in the past. Since there are few IPv6 servers deployed, customers in Asia may have difficulty reaching the company's website. The company may need to deploy more IPv6 servers to mitigate.\", -1)\nconst _hoisted_34 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Domain Name System-based Blocklist (DNSBL)\", -1)\nconst _hoisted_35 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"DNSBLs use the DNS as a distributed database to store blocklists used to defeat email spam. DNSBLs can flag both IPv4 and IPv6 addresses as sources of spam.\")\n], -1)\nconst _hoisted_36 = /*#__PURE__*/_createElementVNode(\"p\", null, \"A mail server can perform a DNS query with a specific format against a DNSBL to check if a sending host's IP address has been flagged as a source of spam. In this case, the mail server might reject or throttle requests from that sender's IP address.\", -1)\nconst _hoisted_37 = /*#__PURE__*/_createElementVNode(\"p\", null, \"For IPv6 addresses, the DNSBL contains a record at a DNS name composed of the IPv6 address in reverse order, with each hex digit in the address as a label. This is like the format for IPv4 addresses, only much longer. The DNSBL contains a record of type A, not type AAAA, at this name if the address has been flagged as a source of spam. This may seem confusing, but DNSBLs only use the A records as markers.\", -1)\nconst _hoisted_38 = /*#__PURE__*/_createElementVNode(\"p\", null, \"A mail server would follow these steps to use a DNSBL to check if an IPv6 address is a known source of spam:\", -1)\nconst _hoisted_39 = /*#__PURE__*/_createElementVNode(\"ol\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"Construct a DNSBL lookup name by reversing the nibbles in the sender's IPv6 address and appending the DNSBL's domain name. For example, if the sender's IPv6 address is 2001:db8:1:2:3:4:567:89ab the lookup name for the example.org DNSBL would be \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"b.a.9.8.7.6.5.0.4.0.0.0.3.0.0.0.2.0.0.0.1.0.0.0.8.b.d.0.1.0.0.2.dnsbl.example.org.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Perform a standard DNS lookup with query type A (not type AAAA) for this lookup name.\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"If the result is NXDOMAIN, there is no entry for the sender's IP in the blocklist. This means that the sender's IP is not flagged as a source of spam. Mail should be sent normally.\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"A positive result indicates that the sender's IP exists in the blocklist. This means the IP is considered a source of spam. A TXT lookup for the same name can be performed to retrieve the reason for blocklisting.\")\n], -1)\nconst _hoisted_40 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The address returned for a blocked IP address may be the fixed value 127.0.0.2. This indicates that the sender's IP address has been flagged as a source of spam. Other values are also possible. See \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc5782#section-2.3\",\n rel: \"noopener noreferrer\"\n }, \"RFC 5782 section 2.3\"),\n /*#__PURE__*/_createTextVNode(\" for more details.\")\n], -1)\nconst _hoisted_41 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Looking up AAAA records for a name\", -1)\nconst _hoisted_42 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The IPv6 address records for a DNS name can be queried with the dig or nslookup command line tools. To find the address records for wikipedia.org, use this command:\", -1)\nconst _hoisted_43 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"dig AAAA wikipedia.org\", -1)\nconst _hoisted_44 = /*#__PURE__*/_createElementVNode(\"p\", null, \"On operating systems that support nslookup, you can use the following:\", -1)\nconst _hoisted_45 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"nslookup -type=aaaa wikipedia.org\", -1)\nconst _hoisted_46 = {\n class: \"not-prose text-base mx-auto max-w-lg\",\n autocomplete: \"off\"\n}\nconst _hoisted_47 = { class: \"mx-auto max-w-3xl divide-y-2 divide-gray-200\" }\nconst _hoisted_48 = /*#__PURE__*/_createElementVNode(\"h2\", { class: \"ignore-toc\" }, \"Related questions\", -1)\nconst _hoisted_49 = { class: \"mt-6 space-y-6 divide-y divide-gray-200 [overflow-anchor:none]\" }\nconst _hoisted_50 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg font-medium text-gray-900\" }, \" What is the difference between a CNAME record and a AAAA record? \", -1)\nconst _hoisted_51 = { class: \"ml-6 flex h-7 items-center\" }\nconst _hoisted_52 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", { class: \"font-medium text-gray-500\" }, \"A CNAME is an alias from one DNS name to another. A CNAME is often used to redirect one DNS name to another DNS name. The target name will generally resolve to a set of A records and often also a set of AAAA records.\")\n], -1)\nconst _hoisted_53 = /*#__PURE__*/_createElementVNode(\"p\", null, \"One use of CNAMEs is to eliminate duplicate data from the DNS. This reduces the chance of an administrator forgetting to update all copies of duplicated address records when making a change. CNAMEs may also be linked together in chains. The last name in the CNAME chain should usually resolve to a set of A and/or AAAA records.\", -1)\nconst _hoisted_54 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg font-medium text-gray-900\" }, \" Does a domain need a AAAA record? \", -1)\nconst _hoisted_55 = { class: \"ml-6 flex h-7 items-center\" }\nconst _hoisted_56 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", { class: \"font-medium text-gray-500\" }, [\n /*#__PURE__*/_createTextVNode(\"A domain such as \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" does not necessarily need either an A or AAAA record. However, most domains have an A record and quite a few today also have AAAA records for clients who may want to use IPv6.\")\n ])\n], -1)\nconst _hoisted_57 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"It is typical for web clients to interchangeably connect to both \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" and \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"www.example.org\"),\n /*#__PURE__*/_createTextVNode(\". If there are no A or AAAA records for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" then web browsers would display an error if a user did not explicitly type \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"www.example.org\"),\n /*#__PURE__*/_createTextVNode(\". This would be confusing for clients of the domain.\")\n], -1)\n\nimport BlogPost from '@/components/layout/BlogPost.vue';\n\n\nimport { useRouter } from 'vue-router';\nimport {\n Disclosure,\n DisclosureButton,\n DisclosurePanel,\n} from '@headlessui/vue';\nimport { ChevronDownIcon } from '@heroicons/vue/24/outline';\nimport { jeff, ruurtjan } from '@/common/authors';\nimport { BlogMeta } from '@/common/blogMeta';\nimport DomainSearch from '@/components/DomainSearch.vue';\nimport CodeBlock from '@/components/micro/CodeBlock.vue';\nimport DnsRecordTypes from '@/views/learning/DnsRecordTypes.vue';\nimport { learningBreadcrumb } from '@/model/Breadcrumb';\nimport Callout from '@/components/layout/CalloutComponent.vue';\nimport { domainNameToUrlPath } from '@/common/domainName';\n\nconst meta: BlogMeta = {\n tag: 'DNS record types',\n url: '/learning/dns-record-types/aaaa/',\n breadcrumbs: [learningBreadcrumb, DnsRecordTypes.breadcrumb],\n title: 'The AAAA record',\n description: 'The AAAA DNS record type was created to hold IPv6 addresses. AAAA records, pronounced “quad A records” are similar to A records but hold a 128-bit IPv6 address.',\n overviewDescription: 'The AAAA DNS record type was created to hold IPv6 addresses. AAAA records, pronounced “quad A records” are similar to A records, but hold a 128-bit IPv6 address instead of a 32-bit IPv4 address.',\n overviewImage: '/img/learning/dns-record-types/aaaa/the-dns-aaaa-record-type-small.jpg',\n overviewImageAlt: 'Mapping names into numbers',\n author: jeff,\n editor: ruurtjan,\n img1024x512: 'https://www.nslookup.io/img/learning/dns-record-types/aaaa/the-aaaa-record-social.jpg',\n img1200x630: 'https://www.nslookup.io/img/learning/dns-record-types/aaaa/the-aaaa-record-social.jpg',\n written: new Date('2022-07-24T14:48:23.618Z'),\n updated: new Date('2023-03-28T11:57:13.055Z'),\n};\n\nconst __default__ = {\n meta,\n};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'RecordTypeAAAA',\n setup(__props) {\n\nconst router = useRouter();\n\nfunction redirectTo(domain: string): void {\n router.push(`/domains/${domainNameToUrlPath(domain)}/dns-records/aaaa/`);\n}\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"ImageObject\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"email\\\": \\\"mailto:ruurtjan@nslookup.io\\\", \\\"image\\\": \\\"https://www.nslookup.io/img/ruurtjan-lg.jpg\\\", \\\"jobTitle\\\": \\\"CEO\\\", \\\"name\\\": \\\"Ruurtjan Pul\\\", \\\"url\\\": \\\"https://www.nslookup.io/about/ruurtjan-pul/\\\" }, \\\"copyrightHolder\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"https://www.nslookup.io/\\\", \\\"email\\\": \\\"hello@nslookup.io\\\" }, \\\"copyrightYear\\\": 2023, \\\"contentUrl\\\": \\\"https://www.nslookup.io/img/learning/dns-record-types/aaaa/the-dns-aaaa-record-type.jpg\\\", \\\"license\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\", \\\"acquireLicensePage\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\" } \")\n ]),\n _: 1\n }))\n ])),\n _createVNode(BlogPost, {\n title: meta.title,\n description: meta.description,\n url: `https://www.nslookup.io${meta.url}`,\n breadcrumbs: meta.breadcrumbs,\n img1024x512: meta.img1024x512,\n img1200x630: meta.img1200x630,\n written: meta.written,\n updated: meta.updated,\n author: meta.author,\n editor: meta.editor\n }, {\n default: _withCtx(() => [\n _hoisted_1,\n _hoisted_2,\n _hoisted_3,\n _hoisted_4,\n _hoisted_5,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_6\n ]),\n _: 1\n }),\n _hoisted_7,\n _hoisted_8,\n _hoisted_9,\n _hoisted_10,\n _hoisted_11,\n _createVNode(Callout, {\n icon: \"info\",\n title: \"AAAA versus A\",\n heading: \"h2\"\n }, {\n default: _withCtx(() => [\n _hoisted_12,\n _hoisted_13,\n _hoisted_14,\n _hoisted_15\n ]),\n _: 1\n }),\n _hoisted_16,\n _hoisted_17,\n _hoisted_18,\n _hoisted_19,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_20\n ]),\n _: 1\n }),\n _hoisted_21,\n _hoisted_22,\n _hoisted_23,\n _hoisted_24,\n _hoisted_25,\n _hoisted_26,\n _hoisted_27,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"TTL selection in the DNS is often complicated. As we discussed in \"),\n _createVNode(_component_router_link, { to: \"/learning/what-is-a-good-ttl-for-dns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"our article on TTL selection in the DNS\")\n ]),\n _: 1\n }),\n _createTextVNode(\", shorter TTLs give agility, but longer TTLs increase reliability. Longer TTLs can also decrease latency.\")\n ]),\n _hoisted_28,\n _hoisted_29,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"As we discussed in our article on the \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/a/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"A record type\")\n ]),\n _: 1\n }),\n _createTextVNode(\", there are different ways to perform load balancing for address records in the DNS. Any method used for IPv4 addresses can also be used for IPv6 addresses. Typically, this includes Anycast addresses or variations on round-robin.\")\n ]),\n _hoisted_30,\n _hoisted_31,\n _hoisted_32,\n _hoisted_33,\n _hoisted_34,\n _hoisted_35,\n _hoisted_36,\n _hoisted_37,\n _hoisted_38,\n _hoisted_39,\n _hoisted_40,\n _hoisted_41,\n _hoisted_42,\n _hoisted_43,\n _hoisted_44,\n _hoisted_45,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"You can also check the AAAA records for any domain name in our \"),\n _createVNode(_component_router_link, { to: \"/aaaa-lookup/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"AAAA lookup\")\n ]),\n _: 1\n }),\n _createTextVNode(\" tool, or by entering it here:\")\n ]),\n _createElementVNode(\"form\", _hoisted_46, [\n _createVNode(DomainSearch, {\n emphasize: \"\",\n buttonText: \"Find AAAA record\",\n onSubmitted: redirectTo\n })\n ]),\n _createElementVNode(\"div\", _hoisted_47, [\n _hoisted_48,\n _createElementVNode(\"div\", _hoisted_49, [\n _createVNode(_unref(Disclosure), {\n as: \"div\",\n class: \"pt-6\"\n }, {\n default: _withCtx(({ open }) => [\n _createVNode(_unref(DisclosureButton), {\n as: \"h3\",\n class: \"ignore-toc flex mt-0 w-full items-start justify-between text-left cursor-pointer text-gray-400\"\n }, {\n default: _withCtx(() => [\n _hoisted_50,\n _createElementVNode(\"span\", _hoisted_51, [\n _createVNode(_unref(ChevronDownIcon), {\n class: _normalizeClass([open ? '-rotate-180' : 'rotate-0', 'h-6 w-6 transform']),\n \"aria-hidden\": \"true\"\n }, null, 8, [\"class\"])\n ])\n ]),\n _: 2\n }, 1024),\n _createVNode(_unref(DisclosurePanel), { class: \"mt-2 pr-12\" }, {\n default: _withCtx(() => [\n _hoisted_52,\n _hoisted_53,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"See our article on \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/cname/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"CNAME records\")\n ]),\n _: 1\n }),\n _createTextVNode(\" for more details.\")\n ])\n ]),\n _: 1\n })\n ]),\n _: 1\n }),\n _createVNode(_unref(Disclosure), {\n as: \"div\",\n class: \"pt-6\"\n }, {\n default: _withCtx(({ open }) => [\n _createVNode(_unref(DisclosureButton), {\n as: \"h3\",\n class: \"ignore-toc flex mt-0 w-full items-start justify-between text-left cursor-pointer text-gray-400\"\n }, {\n default: _withCtx(() => [\n _hoisted_54,\n _createElementVNode(\"span\", _hoisted_55, [\n _createVNode(_unref(ChevronDownIcon), {\n class: _normalizeClass([open ? '-rotate-180' : 'rotate-0', 'h-6 w-6 transform']),\n \"aria-hidden\": \"true\"\n }, null, 8, [\"class\"])\n ])\n ]),\n _: 2\n }, 1024),\n _createVNode(_unref(DisclosurePanel), { class: \"mt-2 pr-12\" }, {\n default: _withCtx(() => [\n _hoisted_56,\n _hoisted_57\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ])\n ])\n ]),\n _: 1\n }, 8, [\"title\", \"description\", \"url\", \"breadcrumbs\", \"img1024x512\", \"img1200x630\", \"written\", \"updated\", \"author\", \"editor\"])\n ], 64))\n}\n}\n\n})","import script from \"./RecordTypeAAAA.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./RecordTypeAAAA.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"strong\", { class: \"text-xl leading-8 block font-normal text-gray-500 mt-[1.3333333em]\" }, \"The CNAME or “canonical name” DNS record type is used to alias or redirect one DNS name to another DNS name.\", -1)\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"This record type was introduced in the original DNS specifications (\"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc1034\",\n rel: \"noopener noreferrer\"\n }, \"RFC 1034\"),\n /*#__PURE__*/_createTextVNode(\" and \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc1035\",\n rel: \"noopener noreferrer\"\n }, \"1035\"),\n /*#__PURE__*/_createTextVNode(\") in 1987. CNAME records have not changed much since then, but CNAME remains a powerful and useful tool in any DNS toolbox.\")\n], -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full rounded-lg\",\n src: \"/img/learning/dns-record-types/cname/the-cname-record-type.jpg\",\n alt: \"There are different DNS records behind a CNAME\",\n title: \"There are different DNS records behind a CNAME\",\n width: \"1200\",\n height: \"600\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, [\n /*#__PURE__*/_createTextVNode(\"There are different DNS records behind a CNAME. By NsLookup.io. Licensed under \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://creativecommons.org/licenses/by/4.0/\",\n title: \"Creative Commons By 4.0 licence\",\n rel: \"nofollow\"\n }, \"CC By 4.0\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The CNAME record has only one data field besides the usual DNS TTL field: the canonical name. The canonical name can be thought of as the target of the CNAME record. Whenever a client performs a DNS lookup for the owner name of the CNAME record, they will receive the canonical name. All DNS clients will then proceed with DNS lookup of the canonical name and add that result to the set of DNS records returned to the application.\", -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"p\", null, \"CNAME is universally supported. Full CNAME support is required in the implementation of all DNS clients and servers.\", -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"CNAME from www to the zone root\", -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"p\", null, \"A common use of the CNAME record is to allow the “www” name in a zone to resolve to the same records as the name of the DNS zone itself. Let’s look at an example of this using the zone for ohmcar.org (a fictional electric vehicle company).\", -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"ohmcar.org. 3600 SOA ns1.ohmcar.org. ( ... )\\n\\nohmcar.org. 3600 A 10.0.0.1\\nohmcar.org. 3600 A 10.0.0.2\\nohmcar.org. 3600 A 10.0.0.3\\n\\nwww.ohmcar.org. 3600 CNAME ohmcar.org.\", -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"p\", null, \"It is typical also for www.ohmcar.org to resolve in the DNS to these same three IP addresses. This allows visitors to the website to use ohmcar.org and www.ohmcar.org interchangeably in their web browser.\", -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"p\", null, \"To make both ohmcar.org and www.ohmcar.org resolve to the same address records, the DNS administrator could copy the three type A records, so they exist at both names, but data duplication is always awkward and potentially dangerous. If a change is made in one record set but not the other, then clients may experience odd results or failures.\", -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"p\", null, \"This sort of data copying gets complicated quickly. There may be more than three type A records, and also AAAA records may exist for IPv6. Additionally, there may be many names in a zone using canonical names, and so a lot of data will often need to be manually kept in sync.\", -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"p\", null, \"So, instead a CNAME record should be added at www.ohmcar.org with the canonical name, or target, of ohmcar.org. Now, any change made to the address records at ohmcar.org will automatically also apply to resolution of www.ohmcar.org. This is very convenient and powerful, and it removes the possibility of errors in copied data.\", -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Hosting multiple DNS names on the same web server\", -1)\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"p\", null, \"It is also common to use the same canonical name multiple times in a zone.\", -1)\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"p\", null, \"In the example below, portal.ohmcar.org and customerservice.ohmcar.org both resolve to the name of a backend server, which has multiple address records for redundancy. If any of the address records for the server are changed, portal.ohmcar.org and customerservice.ohmcar.org will automatically resolve to the new addresses through their respective CNAME records.\", -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"p\", null, \"A zone could contain dozens or even thousands of similar CNAME records to map many DNS names to a single server or endpoint.\", -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"server.ohmcar.org. 3600 A 10.0.0.10\\nserver.ohmcar.org. 3600 A 10.0.0.11\\nserver.ohmcar.org. 3600 AAAA 2000::1\\nserver.ohmcar.org. 3600 AAAA 2000::2\\n\\nportal.ohmcar.org. 3600 CNAME server.ohmcar.org.\\n\\ncustomerservice.ohmcar.org. 3600 CNAME server.ohmcar.org.\", -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"CNAMEs across zone boundaries\", -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"p\", null, \"CNAMEs are not restricted to operating within a single zone. The canonical name, or target, of a CNAME record can reside in any zone in the DNS.\", -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"p\", null, \"For example, an organization might contract out server functionality to some third party and redirect traffic from “www” in their zone to their contractor’s server host name in an entirely different zone. Note that this would have ramifications for the SSL certificates if used for HTTPS.\", -1)\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"CNAME restrictions\", -1)\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"p\", null, \"There are some restrictions on the usage of CNAME records. The first is the most critical: because of the way DNS clients are expected to follow CNAME records, no other DNS record may exist at the owner name of a CNAME record. The only exception is for DNSSEC records such as NSEC and RRSIG.\", -1)\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Because of this rule, a CNAME may never exist at the zone root because other records (SOA and NS, and others) always exist there. Platform specific features, like CNAME flattening and alias records, can help work around this issue, as we’ll see later on.\", -1)\nconst _hoisted_24 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"This rule also applies to a CNAME record itself. There may only be exactly one CNAME record for any name in the DNS. \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc2181\",\n rel: \"noopener noreferrer\"\n }, \"RFC 2181\"),\n /*#__PURE__*/_createTextVNode(\" does an excellent job of specifying the restrictions on CNAME and clarifying a number of other aspects of the DNS. If you are interested in DNS technical details, then RFC 2181 is well worth a read!\")\n], -1)\nconst _hoisted_25 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Below are three different examples of illegal CNAME records. None of these patterns may appear in the DNS.\", -1)\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"; Illegal CNAME at the zone root\\nexample.org. 3600 SOA ns1.example.org. ...\\nexample.org. 3600 CNAME server1.example.org.\\n\\n; Two CNAME records at the same owner name — also illegal\\nalias1.example.org. 3600 CNAME server1.example.org.\\nalias1.example.org. 3600 CNAME server2.example.org.\\n\\n; Illegal CNAME at the same name as an MX record\\nmail.example.org. 3600 MX 10 mailserver.example.org.\\nmail.example.org. 3600 CNAME mailserver.example.org.\", -1)\nconst _hoisted_27 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Another restriction is that the canonical name, or the CNAME target, must be a DNS host name. This is because the DNS must be independent of the transport layer. The example below would not function properly since DNS clients would assume that \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"1.2.3.4\"),\n /*#__PURE__*/_createTextVNode(\" is a literal DNS host name and not an IP address:\")\n], -1)\nconst _hoisted_28 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"alias1.example.org. 3600 CNAME 1.2.3.4\", -1)\nconst _hoisted_29 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Also specified by RFC 2181 (in section 10.3), records of types MX and NS are forbidden to use CNAMEs, so the examples below are both illegal. Note that sometimes this rule is broken, but it is not a good idea. Mail and DNS resolution for the domain may not work properly in all scenarios!\", -1)\nconst _hoisted_30 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"; Illegal: the mail server host name cannot resolve to a CNAME\\nmail.example.org. 3600 MX 10 mailserver.example.org.\\nmailserver.example.org. 3600 CNAME server.example.org.\\n\\n; Illegal: the name server host name cannot resolve to a CNAME\\nns1.example.org. 3600 NS nameserver.example.org.\\nnameserver.example.org. 3600 CNAME server.example.org.\", -1)\nconst _hoisted_31 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"CNAMEs and performance\", -1)\nconst _hoisted_32 = /*#__PURE__*/_createElementVNode(\"p\", null, \"CNAMEs can also be linked together into chains. In the examples above we saw one DNS host name aliased to another using a single CNAME, but the canonical name of the CNAME can itself be a CNAME record, and so on. It is not uncommon to see CNAME chains with 4 or 5 records, all in different zones.\", -1)\nconst _hoisted_33 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Long CNAME chains are legal and resolvers will attempt to include additional records in responses to minimize performance impact, but in general long CNAME chains are not best practice. Multiple DNS roundtrips may be required, and the complexity of long CNAME chains can make DNS resolution somewhat fragile. Try to limit CNAME chains to 2 or 3 CNAMEs at most.\", -1)\nconst _hoisted_34 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Some DNS providers such as Cloudflare offer features to help reduce CNAME chains and add other interesting CNAME-related functionality, such as \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://blog.cloudflare.com/introducing-cname-flattening-rfc-compliant-cnames-at-a-domains-root/\",\n rel: \"noopener noreferrer\"\n }, \"Cloudflare’s CNAME flattening\"),\n /*#__PURE__*/_createTextVNode(\". This feature also allows the user to effectively have CNAME functionality at the root of the zone without breaking any DNS RFCs.\")\n], -1)\nconst _hoisted_35 = /*#__PURE__*/_createElementVNode(\"p\", null, \"In general, using a relative long TTL for CNAME records is advisable, since the canonical name usually does not change frequently. An hour (3600 seconds) is a reasonable TTL in most cases. DNS resolvers will cache the CNAME record and the address records for the canonical name of the CNAME record independently. It is common to have shorter TTLs on the address records than the CNAME records, since address records are often more dynamic than CNAME records.\", -1)\nconst _hoisted_36 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Common CNAME pitfalls\", -1)\nconst _hoisted_37 = /*#__PURE__*/_createElementVNode(\"p\", null, \"One important thing to note is that the CNAME record allows redirection at the DNS level only from one DNS host name to some other DNS host name. A DNS CNAME record cannot contain a URL. It can only contain a DNS host name. The commonly-used HTTP redirect functionality implemented in a web service operates independently of the DNS.\", -1)\nconst _hoisted_38 = /*#__PURE__*/_createElementVNode(\"p\", null, \"An interesting issue with the CNAME record type is that it is quite easy to create a CNAME loop. This can be accidental, or it might be done maliciously as part of a DDoS attack to try to consume resources on resolvers and create an outage in the DNS. Since DNS resolvers must follow one CNAME to the next, and then to the next, and so on, this creates an infinite loop of CNAMEs that the resolver technically must iterate through.\", -1)\nconst _hoisted_39 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The DNS administrator of any zone can create a loop with two or more CNAME records, for example:\", -1)\nconst _hoisted_40 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"; CNAME loop with two CNAMEs 1 -> 2 -> 1 -> 2 -> 1, etc.\\nalias1.example.org. 3600 CNAME alias2.example.org.\\nalias2.example.org. 3600 CNAME alias1.example.org.\\n\\n; CNAME loop with three CNAMEs 1 -> 2 -> 3 -> 1, etc.\\nalias1.example.org. 3600 CNAME alias2.example.org.\\nalias2.example.org. 3600 CNAME alias3.example.org.\\nalias3.example.org. 3600 CNAME alias1.example.org.\", -1)\nconst _hoisted_41 = /*#__PURE__*/_createElementVNode(\"p\", null, \"A more complex version of this involves CNAMEs chained through different zones, which could in theory make DNS resolvers work even harder. CNAME loops, whether accidental or malicious, are well-known in the DNS world. All DNS resolvers have safeguards built in to detect CNAME loops and will reject the requests either by dropping them or by returning a DNS SERVFAIL error when a CNAME loop is detected.\", -1)\nconst _hoisted_42 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Alternatives to CNAME\", -1)\nconst _hoisted_43 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The ability to alias one DNS name to another DNS name is extremely useful and powerful. Over time, there have been efforts to improve upon the CNAME record, including:\", -1)\nconst _hoisted_44 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"DNAME\"),\n /*#__PURE__*/_createTextVNode(\": This is a DNS record type that was created to allow an entire domain to be renamed. It is somewhat similar to CNAME but applies to an entire DNS subtree and was intended for different scenarios. DNAME is not frequently used.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"ANAME\"),\n /*#__PURE__*/_createTextVNode(\": This is a DNS record type that has been proposed but has not become standardized and currently the effort is stalled. It was an attempt to make a more powerful version of CNAME, but unfortunately, it is not feasible to garner universal support for a brand-new DNS record type of this nature. The amount of effort required to update every DNS implementation would be too large.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Platform specific alias functionality\"),\n /*#__PURE__*/_createTextVNode(\": Some DNS hosting providers such as \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://repost.aws/knowledge-center/route-53-create-alias-records\",\n rel: \"noopener noreferrer\"\n }, \"Route53\"),\n /*#__PURE__*/_createTextVNode(\", \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://help.ns1.com/hc/en-us/articles/360020248973-About-CNAME-ALIAS-and-linked-records\",\n rel: \"noopener noreferrer\"\n }, \"NS1\"),\n /*#__PURE__*/_createTextVNode(\", and \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://learn.microsoft.com/en-us/azure/dns/dns-alias\",\n rel: \"noopener noreferrer\"\n }, \"Azure DNS\"),\n /*#__PURE__*/_createTextVNode(\" allow the creation of an “alias record” which is converted into standard DNS records such as type A, AAAA, and CNAME when queried. These “alias records” are not true DNS record types but offer powerful and interesting functionality. Not all DNS providers have a feature of this type: for example, Cloudflare and Google currently do not.\")\n ])\n], -1)\nconst _hoisted_45 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The DNS CNAME record is an all-round powerful DNS tool, enabling redirection in the DNS and eliminating the need for tedious and error-prone duplication of DNS records. Many, perhaps most, DNS zones should have at least one CNAME, to allow \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"www\"),\n /*#__PURE__*/_createTextVNode(\" and the zone root to resolve to identical address records.\")\n], -1)\nconst _hoisted_46 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Finding the CNAME record for a zone\", -1)\nconst _hoisted_47 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The CNAME record of a dns name can be queried with the dig or nslookup command line tools. To find the CNAME record for www.wikipedia.org, use this command:\", -1)\nconst _hoisted_48 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"dig CNAME www.wikipedia.org\", -1)\nconst _hoisted_49 = /*#__PURE__*/_createElementVNode(\"p\", null, \"On operating systems that support nslookup, you can use the following:\", -1)\nconst _hoisted_50 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"nslookup -type=cname www.wikipedia.org\", -1)\nconst _hoisted_51 = {\n class: \"not-prose text-base mx-auto max-w-lg\",\n autocomplete: \"off\"\n}\n\nimport BlogPost from '@/components/layout/BlogPost.vue';\n\n\nimport { useRouter } from 'vue-router';\nimport { jeff, ruurtjan } from '@/common/authors';\nimport { BlogMeta } from '@/common/blogMeta';\nimport DomainSearch from '@/components/DomainSearch.vue';\nimport CodeBlock from '@/components/micro/CodeBlock.vue';\nimport DnsRecordTypes from '@/views/learning/DnsRecordTypes.vue';\nimport { learningBreadcrumb } from '@/model/Breadcrumb';\nimport { domainNameToUrlPath } from '@/common/domainName';\n\nexport const meta: BlogMeta = {\n tag: 'DNS record types',\n url: '/learning/dns-record-types/cname/',\n breadcrumbs: [learningBreadcrumb, DnsRecordTypes.breadcrumb],\n title: 'The CNAME record',\n description: 'DNS CNAME records are used to alias or redirect names in DNS. Learn how canonical names work in DNS, and what their restrictions are.',\n overviewDescription: 'DNS CNAME records are used to alias or redirect names in DNS. Learn how canonical names work in DNS, and what their restrictions are.',\n overviewImage: '/img/learning/dns-record-types/cname/the-cname-record-type-small.jpg',\n overviewImageAlt: 'A stack of CNAME records',\n author: jeff,\n editor: ruurtjan,\n img1024x512: 'https://www.nslookup.io/img/learning/dns-record-types/cname/the-cname-record-social.jpg',\n img1200x630: 'https://www.nslookup.io/img/learning/dns-record-types/cname/the-cname-record-social.jpg',\n written: new Date('2022-03-17T16:45:21.856Z'),\n updated: new Date('2023-03-28T11:57:22.980Z'),\n};\n\nconst __default__ = {\n meta,\n};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'RecordTypeCname',\n setup(__props) {\n\nconst router = useRouter();\n\nfunction redirectTo(domain: string): void {\n router.push(`/domains/${domainNameToUrlPath(domain)}/dns-records/cname/`);\n}\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"ImageObject\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"email\\\": \\\"mailto:ruurtjan@nslookup.io\\\", \\\"image\\\": \\\"https://www.nslookup.io/img/ruurtjan-lg.jpg\\\", \\\"jobTitle\\\": \\\"CEO\\\", \\\"name\\\": \\\"Ruurtjan Pul\\\", \\\"url\\\": \\\"https://www.nslookup.io/about/ruurtjan-pul/\\\" }, \\\"copyrightHolder\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"https://www.nslookup.io/\\\", \\\"email\\\": \\\"hello@nslookup.io\\\" }, \\\"copyrightYear\\\": 2023, \\\"contentUrl\\\": \\\"https://www.nslookup.io/img/learning/dns-record-types/cname/the-cname-record-type.jpg\\\", \\\"license\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\", \\\"acquireLicensePage\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\" } \")\n ]),\n _: 1\n }))\n ])),\n _createVNode(BlogPost, {\n title: meta.title,\n description: meta.description,\n url: `https://www.nslookup.io${meta.url}`,\n breadcrumbs: meta.breadcrumbs,\n img1024x512: meta.img1024x512,\n img1200x630: meta.img1200x630,\n written: meta.written,\n updated: meta.updated,\n author: meta.author,\n editor: meta.editor\n }, {\n default: _withCtx(() => [\n _hoisted_1,\n _hoisted_2,\n _hoisted_3,\n _hoisted_4,\n _hoisted_5,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"You can look up the CNAME record for a \"),\n _createVNode(_component_router_link, {\n to: \"/learning/what-is-a-dns-zone/\",\n title: \"DNS zone\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(\"DNS zone\")\n ]),\n _: 1\n }),\n _createTextVNode(\" with our \"),\n _createVNode(_component_router_link, { to: \"/cname-lookup/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"CNAME checker\")\n ]),\n _: 1\n }),\n _createTextVNode(\".\")\n ]),\n _hoisted_6,\n _hoisted_7,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n }),\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"In this example, we have the \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/soa/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"SOA record\")\n ]),\n _: 1\n }),\n _createTextVNode(\" and three IPv4 address records (type A) at the DNS zone root. There would be other records in the zone, such as \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/ns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"NS\")\n ]),\n _: 1\n }),\n _createTextVNode(\", but they are omitted for brevity. The web presence for ohmcar.org is hosted on these three IP addresses for redundancy.\")\n ]),\n _hoisted_9,\n _hoisted_10,\n _hoisted_11,\n _hoisted_12,\n _hoisted_13,\n _hoisted_14,\n _hoisted_15,\n _hoisted_16,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_17\n ]),\n _: 1\n }),\n _hoisted_18,\n _hoisted_19,\n _hoisted_20,\n _hoisted_21,\n _hoisted_22,\n _hoisted_23,\n _hoisted_24,\n _hoisted_25,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_26\n ]),\n _: 1\n }),\n _hoisted_27,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_28\n ]),\n _: 1\n }),\n _hoisted_29,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_30\n ]),\n _: 1\n }),\n _hoisted_31,\n _hoisted_32,\n _hoisted_33,\n _hoisted_34,\n _hoisted_35,\n _hoisted_36,\n _hoisted_37,\n _hoisted_38,\n _hoisted_39,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_40\n ]),\n _: 1\n }),\n _hoisted_41,\n _hoisted_42,\n _hoisted_43,\n _hoisted_44,\n _hoisted_45,\n _hoisted_46,\n _hoisted_47,\n _hoisted_48,\n _hoisted_49,\n _hoisted_50,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"You can also check the CNAME record of any domain name in our \"),\n _createVNode(_component_router_link, { to: \"/cname-lookup/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"CNAME lookup\")\n ]),\n _: 1\n }),\n _createTextVNode(\" tool, or by entering it here:\")\n ]),\n _createElementVNode(\"form\", _hoisted_51, [\n _createVNode(DomainSearch, {\n emphasize: \"\",\n buttonText: \"Find CNAME record\",\n onSubmitted: redirectTo\n })\n ])\n ]),\n _: 1\n }, 8, [\"title\", \"description\", \"url\", \"breadcrumbs\", \"img1024x512\", \"img1200x630\", \"written\", \"updated\", \"author\", \"editor\"])\n ], 64))\n}\n}\n\n})","import script from \"./RecordTypeCname.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./RecordTypeCname.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"strong\", { class: \"text-xl leading-8 block font-normal text-gray-500 mt-[1.3333333em]\" }, \"The MX or “mail exchange” DNS record type is critical to the delivery of email via the Simple Mail Transfer Protocol (SMTP). MX records are used to specify a list of mail servers for a domain. If MX records are not created and maintained correctly, email for the domain will not be delivered reliably or perhaps at all.\", -1)\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The MX record type was introduced in the original DNS specifications (\"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc1034\",\n rel: \"noopener noreferrer\"\n }, \"RFC 1034\"),\n /*#__PURE__*/_createTextVNode(\" and \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc1035\",\n rel: \"noopener noreferrer\"\n }, \"1035\"),\n /*#__PURE__*/_createTextVNode(\") in 1987.\")\n], -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full rounded-lg\",\n src: \"/img/learning/dns-record-types/mx/the-mx-record-type.jpg\",\n alt: \"A mailman checking MX records\",\n title: \"A mailman checking MX records\",\n width: \"1200\",\n height: \"600\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, [\n /*#__PURE__*/_createTextVNode(\"A mailman checking MX records. By NsLookup.io. Licensed under \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://creativecommons.org/licenses/by/4.0/\",\n title: \"Creative Commons By 4.0 licence\",\n rel: \"nofollow\"\n }, \"CC By 4.0\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The MX record has two data fields besides the usual DNS TTL field: a preference value and the host name of a mail server. Each MX record specifies a single mail exchanger that provides mail delivery services for the domain.\", -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Preference\"),\n /*#__PURE__*/_createTextVNode(\": A 16-bit unsigned integer value. Lower values indicate higher preference. It is legal to have a preference value zero. This indicates the highest possible preference.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Mail exchange\"),\n /*#__PURE__*/_createTextVNode(\": The fully qualified DNS name of a mail exchange for the domain.\")\n ])\n], -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"p\", null, \"We will discuss both fields in more detail later.\", -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"p\", null, \"As with all things on the Internet, redundancy is important. A mail server might be offline for maintenance or due to hardware failure or some other reason. Every domain that accepts mail should have at least two MX records.\", -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The Simple Mail Transfer Protocol (SMTP) delivers email. SMTP servers implement the SMTP protocol and allow for email to be sent. There will usually be at least two SMTP servers involved in sending an email: the SMTP server for the sender's domain and the SMTP server for the recipient's domain. If the sender and recipient are in the same domain, the email will be placed directly into the inbox of the recipient.\", -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"p\", null, \"When sending email to a recipient in another domain, email delivery generally involves these steps:\", -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"ol\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, \"When you click send, the email client (which might be a web application) contacts the SMTP server for your domain. The SMTP server name is usually part of the email client configuration, but this might be hidden from the end user.\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Using SMTP, the email client communicates the recipient's email address, subject, message body, and attachments to your SMTP server.\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Your SMTP server performs a DNS MX record lookup for the recipient's domain. If no MX records are found, it would send a bounce message to the sender. The MX records are ordered according to the preference rules.\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Your SMTP server, now acting as the SMTP client, contacts the SMTP servers for the recipient's domain in preference order. Once a server accepts the connection, another SMTP session is used to communicate your email address, the recipient's email address, subject, message body, and attachments.\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"The email has now been delivered to the recipient, although the recipient may need to use the Post Office Protocol (POP3) or Internet Message Access Protocol (IMAP) to download a copy of the email into their email client.\")\n], -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"MX records at the zone root\", -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"example.org. 86400 SOA ns1.example.org. admin.example.org. (...)\\nexample.org. 86400 NS ns1.example.org.\\nexample.org. 86400 NS ns2.example.org.\\nexample.org. 86400 NS ns3.example.org.\\nexample.org. 86400 NS ns4.example.org.\\n\\nexample.org. 3600 MX 10 mailserver1.example.org.\\nexample.org. 3600 MX 20 mailserver2.example.org.\\n\\nmailserver1.example.org. 3600 A 10.0.0.1\\nmailserver2.example.org. 3600 A 10.0.0.2\\n\", -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"This is a very typical zone pattern. These MX records state that \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"mailserver1.example.org\"),\n /*#__PURE__*/_createTextVNode(\" and \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"mailserver2.example.org\"),\n /*#__PURE__*/_createTextVNode(\" are mail servers for the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" zone, and that they should be used by SMTP clients, or Mail Transfer Agent (MTA) software, in that order.\")\n], -1)\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"MX records below the zone root\", -1)\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"MX records often exist at the root of a zone because an organization's DNS boundary and web presence usually share the same DNS name as the organization's email addresses. In our example above, the zone begins at \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" and the organization's email addresses would look like \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"alice@example.org\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"p\", null, \"However, this is not required. MX records can exist at any name in the DNS, either at the root of a zone or at some child name inside a zone. The number of labels in the domain name where MX records reside is not required to be two, or any other particular value. Any DNS zone may contain multiple sets of MX records.\", -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"p\", null, \"This might be useful for a mail hosting provider or in a large organization where different departments run their own mail services. If our example zone had different mail services (and therefore also different email addresses) for finance, legal, and shipping, then the zone might contain MX records such as:\", -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"finance.example.org. 3600 MX 10 denali.example.org.\\nfinance.example.org. 3600 MX 20 adams.example.org.\\nlegal.example.org. 3600 MX 10 fuji.example.org.\\nlegal.example.org. 3600 MX 20 logan.example.org.\\nshipping.example.org. 3600 MX 10 everest.example.org.\\nshipping.example.org. 3600 MX 20 k2.example.org.\\n\", -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Mail exchanger names\", -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The second element of each MX record is the fully qualified DNS host name of a mail server for the domain. Each MX record specifies exactly one mail server for the domain, so there will be one MX record for each of the domain's mail servers.\", -1)\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc2181#section-10.3\",\n rel: \"noopener noreferrer\"\n}, \"RFC 2181 section 10.3\", -1)\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Every mail server name must resolve directly to one or more records of type A (IPv4 address) and/or one or more records of type AAAA (IPv6 address). As an illegal example, the pattern below must never be used:\", -1)\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"; Example of illegal use of CNAME in conjunction with an MX record\\nexample.org. 3600 MX 10 mailserver1.example.org.\\nmailserver1.example.org. 3600 CNAME denali.example.org.\\ndenali.example.org. 3600 A 10.0.0.1\\n\", -1)\nconst _hoisted_24 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The mail server name does not have to reside in the same zone as the MX record itself. It may be any valid fully-qualified DNS name, either inside the same zone as the MX record or in some entirely different zone. This would be common in cases where mail services are provided by a third party.\", -1)\nconst _hoisted_25 = /*#__PURE__*/_createElementVNode(\"p\", null, \"No, MX records cannot point to an IP address. MX records can only point to domains or hostnames. Domains can in turn have A or AAAA records that contain IP addresses. This is how you link an IP address to an MX record, but you cannot directly link an IP address to an MX record.\", -1)\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Mail exchanger preference\", -1)\nconst _hoisted_27 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The MX preference field allows the mail administrator for the domain to control the order in which mail servers are used by SMTP clients. Preference is an unsigned 16-bit integer value where lower values indicate higher preference, and zero is the highest preference. As the value increases, preference for the mail server in that particular MX record decreases.\", -1)\nconst _hoisted_28 = /*#__PURE__*/_createElementVNode(\"p\", null, \"SMTP clients are required to contact the lowest preference mail server first. SMTP clients are only permitted to use higher preference mail servers if all the mail servers with lower preference are unreachable or return error.\", -1)\nconst _hoisted_29 = /*#__PURE__*/_createElementVNode(\"p\", null, \"If two MX records have the same preference value, the SMTP client is required to randomize its requests to load balance equally among all mail servers of the same preference value. Consider this example:\", -1)\nconst _hoisted_30 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"example.org. 3600 MX 10 mailserver1.example.org.\\nexample.org. 3600 MX 10 mailserver2.example.org.\\nexample.org. 3600 MX 20 mailserver3.example.org.\\n\", -1)\nconst _hoisted_31 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"This configuration of MX records would cause 50% of mail requests to go to \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"mailserver1\"),\n /*#__PURE__*/_createTextVNode(\" and 50% to \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"mailserver2\"),\n /*#__PURE__*/_createTextVNode(\". No requests should arrive at \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"mailserver3\"),\n /*#__PURE__*/_createTextVNode(\" unless both of the other mail servers are offline or are returning an error for some reason.\")\n], -1)\nconst _hoisted_32 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The magnitude of the preference value has no meaning other than how it impacts the sort order. As mentioned before, zero is the highest preference. If a domain has three sets of mail servers to be used in a particular order, the preference values could for example be 0, 1, and 2. They could also be 1000, 2000, and 3000 and exactly the same pattern of mail requests would result, so long as the MX records sort in the same order by preference.\", -1)\nconst _hoisted_33 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"See \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc5321#section-5\",\n rel: \"noopener noreferrer\"\n }, \"RFC 5321 section 5\"),\n /*#__PURE__*/_createTextVNode(\" for a full explanation of how SMTP clients are required to consume MX records.\")\n], -1)\nconst _hoisted_34 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"MX record TTLs\", -1)\nconst _hoisted_35 = /*#__PURE__*/_createElementVNode(\"p\", null, \"MX records do not typically change frequently and so should have relatively long Time-To-Live (TTL) values. This ensures that a brief outage in the DNS is less likely to impact mail delivery for the domain. A good range of TTL values for MX records is between one hour and one day. Shorter TTLs should generally be avoided.\", -1)\nconst _hoisted_36 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"As specified by \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc2181#section-5.2\",\n rel: \"noopener noreferrer\"\n }, \"RFC 2181 section 5.2\"),\n /*#__PURE__*/_createTextVNode(\" all the MX records that exist at a particular name in the DNS must have identical TTL values. This is true of all DNS record types, not just type MX. \")\n], -1)\nconst _hoisted_37 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Email security\", -1)\nconst _hoisted_38 = /*#__PURE__*/_createElementVNode(\"p\", null, \"As time goes, security is becoming more and more important on the Internet. MX records do not provide any form of security at all. SMTP also has minimal security features built-in. Security has been added to Internet email in a number of ways:\", -1)\nconst _hoisted_39 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Secure/Multipurpose internet Mail Extensions (S/MIME)\"),\n /*#__PURE__*/_createTextVNode(\": S/MIME adds encryption and a digital signature to email sent over SMTP. This allows an SMTP server to verify the identity of the sender and ensures that the message has not been tampered with in transit. The SMIMEA DNS record type was proposed in \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc8162\",\n rel: \"noopener noreferrer\"\n }, \"RFC 8162\"),\n /*#__PURE__*/_createTextVNode(\" to allow S/MIME certificates to be published in the DNS but this has not been widely adopted. S/MIME certificates are installed manually in email clients.\")\n], -1)\nconst _hoisted_40 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Open Pretty Good Privacy (OpenPGP)\"),\n /*#__PURE__*/_createTextVNode(\": OpenPGP provides end-to-end encryption and security for email. The OPENPGPKEY DNS record type (\"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc7929\",\n rel: \"noopener noreferrer\"\n }, \"RFC 7929\"),\n /*#__PURE__*/_createTextVNode(\") is used to publish the public keys used by OpenPGP.\")\n], -1)\nconst _hoisted_41 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Nolisting\", -1)\nconst _hoisted_42 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Nolisting is a technique used to defeat poorly written spam bot software. The DNS administrator simply creates a bogus MX record with the highest priority value that has a mail server name that does not resolve to an IP address. For example:\", -1)\nconst _hoisted_43 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"example.org. 3600 MX 0 some_bogus_name.example.org.\\nexample.org. 3600 MX 10 mailserver1.example.org.\\nexample.org. 3600 MX 20 mailserver2.example.org.\\n\", -1)\nconst _hoisted_44 = /*#__PURE__*/_createElementVNode(\"p\", null, \"In the early days of spam, it was noticed that at least some spam software would only connect to the highest priority mail server. If unable to send spam using that server, the spam bots would give up. Any SMTP client who properly implemented SMTP though, would continue onto the next highest priority server and would succeed in delivering email even though the first mail server name did not resolve to an IP address. For a while, this was a fairly strong measure against spam, but it did not take long for spammers to catch up and simply do a better job of implementing SMTP.\", -1)\nconst _hoisted_45 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Nolisting is not often used today because it is almost trivial to defeat, and some legitimate SMTP clients may not actually be smart enough to try mail delivery using the second mail server. SPF, DKIM, and DMARC offer much better security and protection against spam.\", -1)\nconst _hoisted_46 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Do I need an MX record to send email?\", -1)\nconst _hoisted_47 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Technically no, you do not need to create MX records to send email from your domain. MX records must be created in order for a domain to receive email, but no MX record are directly used to send email.\", -1)\nconst _hoisted_48 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"When you send an email, say to \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"alice@example.org\"),\n /*#__PURE__*/_createTextVNode(\", your email client will contact your SMTP server, which will in turn look up the MX records for the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" domain and contact SMTP servers for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" in order to send your email to Alice.\")\n], -1)\nconst _hoisted_49 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Your own domain will have MX records so that you can receive email, but when you send an email to \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"alice@example.org\"),\n /*#__PURE__*/_createTextVNode(\" only the MX records for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" are used. If Alice were to reply to your email, then her SMTP server would look up the MX records for your domain to deliver her email reply back to you.\")\n], -1)\nconst _hoisted_50 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Implicit MX records\", -1)\nconst _hoisted_51 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"If no MX records exist for a domain, SMTP clients are required to use the address records for the domain itself as mail server target addresses. The preference for each such address is to be treated as zero, so mail requests will be load balanced equally among the available addresses. This is discussed in \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc5321#section-5\",\n rel: \"noopener noreferrer\"\n }, \"RFC 5321 section 5\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_52 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Very importantly though, this is definitely not recommended. While this should in theory work, it is a far better practice to have explicit MX records. This allows the administrator to control the use of mail servers through different preference values, and also allows web and mail servers to have different IP addresses. Implicit MX records are also somewhat inefficient because they require an extra DNS query.\", -1)\nconst _hoisted_53 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Finding MX records for a zone\", -1)\nconst _hoisted_54 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The MX records of a zone can be queried with the dig or nslookup command line tools. To find the mail servers for wikipedia.org, use this command:\", -1)\nconst _hoisted_55 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"dig MX wikipedia.org\", -1)\nconst _hoisted_56 = /*#__PURE__*/_createElementVNode(\"p\", null, \"On operating systems that support nslookup, you can use the following:\", -1)\nconst _hoisted_57 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"nslookup -type=mx wikipedia.org\", -1)\nconst _hoisted_58 = {\n class: \"not-prose text-base mx-auto max-w-lg\",\n autocomplete: \"off\"\n}\n\nimport BlogPost from '@/components/layout/BlogPost.vue';\n\n\nimport { useRouter } from 'vue-router';\nimport { jeff, ruurtjan } from '@/common/authors';\nimport { BlogMeta } from '@/common/blogMeta';\nimport DomainSearch from '@/components/DomainSearch.vue';\nimport DnsRecordTypes from '@/views/learning/DnsRecordTypes.vue';\nimport CodeBlock from '@/components/micro/CodeBlock.vue';\nimport { learningBreadcrumb } from '@/model/Breadcrumb';\nimport Callout from '@/components/layout/CalloutComponent.vue';\nimport { domainNameToUrlPath } from '@/common/domainName';\n\nexport const meta: BlogMeta = {\n tag: 'DNS record types',\n url: '/learning/dns-record-types/mx/',\n breadcrumbs: [learningBreadcrumb, DnsRecordTypes.breadcrumb],\n title: 'The MX record',\n description: 'The MX or “mail exchange” DNS record type is critical to the delivery of email via SMTP. MX records are used to specify a list of mail servers for a domain.',\n overviewDescription: 'The MX or “mail exchange” DNS record type is critical to the delivery of email via SMTP. MX records are used to specify a list of mail servers for a domain.',\n overviewImage: '/img/learning/dns-record-types/mx/the-mx-record-type-small.jpg',\n overviewImageAlt: 'Delivering the mail',\n author: jeff,\n editor: ruurtjan,\n img1024x512: 'https://www.nslookup.io/img/learning/dns-record-types/mx/the-mx-record-social.jpg',\n img1200x630: 'https://www.nslookup.io/img/learning/dns-record-types/mx/the-mx-record-social.jpg',\n written: new Date('2022-05-25T10:09:22.198Z'),\n updated: new Date('2023-03-28T11:57:34.641Z'),\n};\n\nconst __default__ = {\n meta,\n};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'RecordTypeMx',\n setup(__props) {\n\nconst router = useRouter();\n\nfunction redirectTo(domain: string): void {\n router.push(`/domains/${domainNameToUrlPath(domain)}/dns-records/mx/`);\n}\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"ImageObject\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"email\\\": \\\"mailto:ruurtjan@nslookup.io\\\", \\\"image\\\": \\\"https://www.nslookup.io/img/ruurtjan-lg.jpg\\\", \\\"jobTitle\\\": \\\"CEO\\\", \\\"name\\\": \\\"Ruurtjan Pul\\\", \\\"url\\\": \\\"https://www.nslookup.io/about/ruurtjan-pul/\\\" }, \\\"copyrightHolder\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"https://www.nslookup.io/\\\", \\\"email\\\": \\\"hello@nslookup.io\\\" }, \\\"copyrightYear\\\": 2023, \\\"contentUrl\\\": \\\"https://www.nslookup.io/img/learning/dns-record-types/mx/the-mx-record-type.jpg\\\", \\\"license\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\", \\\"acquireLicensePage\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\" } \")\n ]),\n _: 1\n }))\n ])),\n _createVNode(BlogPost, {\n title: meta.title,\n description: meta.description,\n url: `https://www.nslookup.io${meta.url}`,\n breadcrumbs: meta.breadcrumbs,\n img1024x512: meta.img1024x512,\n img1200x630: meta.img1200x630,\n written: meta.written,\n updated: meta.updated,\n author: meta.author,\n editor: meta.editor\n }, {\n default: _withCtx(() => [\n _hoisted_1,\n _hoisted_2,\n _hoisted_3,\n _hoisted_4,\n _hoisted_5,\n _hoisted_6,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"The MX record type is an example of a record type that exists in the DNS to support another protocol. Some record types such as \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/soa/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"SOA\")\n ]),\n _: 1\n }),\n _createTextVNode(\" and \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/ns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"NS\")\n ]),\n _: 1\n }),\n _createTextVNode(\" are fundamental to the operation of the DNS itself. These record types are primarily used by DNS resolvers. Other record types such as MX and SRV are stored in the DNS, but are primarily used by applications to service other protocols.\")\n ]),\n _hoisted_7,\n _createVNode(Callout, {\n icon: \"info\",\n title: \"How email works\",\n heading: \"h2\"\n }, {\n default: _withCtx(() => [\n _hoisted_8,\n _hoisted_9,\n _hoisted_10\n ]),\n _: 1\n }),\n _hoisted_11,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"Below is a simple example \"),\n _createVNode(_component_router_link, {\n to: \"/learning/what-is-a-dns-zone/\",\n title: \"DNS zone\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(\"DNS zone\")\n ]),\n _: 1\n }),\n _createTextVNode(\" showing the zone root with \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/soa/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"SOA\")\n ]),\n _: 1\n }),\n _createTextVNode(\" and \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/ns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"NS\")\n ]),\n _: 1\n }),\n _createTextVNode(\" records and two MX records, along with one address record for each mail exchanger host name.\")\n ]),\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_12\n ]),\n _: 1\n }),\n _hoisted_13,\n _hoisted_14,\n _hoisted_15,\n _hoisted_16,\n _hoisted_17,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_18\n ]),\n _: 1\n }),\n _hoisted_19,\n _hoisted_20,\n _createElementVNode(\"p\", null, [\n _hoisted_21,\n _createTextVNode(\" prohibits mail server host names from resolving through \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/cname/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"CNAME\")\n ]),\n _: 1\n }),\n _createTextVNode(\" records. This is a historical requirement due to failures caused by the use of CNAMEs and implementations which did not support CNAMEs properly in this context. This requirement has been carried forward and remains in place, and must be obeyed.\")\n ]),\n _hoisted_22,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_23\n ]),\n _: 1\n }),\n _hoisted_24,\n _createVNode(Callout, {\n icon: \"info\",\n title: \"Can an MX record be an IP address?\",\n heading: \"h2\"\n }, {\n default: _withCtx(() => [\n _hoisted_25\n ]),\n _: 1\n }),\n _hoisted_26,\n _hoisted_27,\n _hoisted_28,\n _hoisted_29,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_30\n ]),\n _: 1\n }),\n _hoisted_31,\n _hoisted_32,\n _hoisted_33,\n _hoisted_34,\n _hoisted_35,\n _hoisted_36,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"For more information on the importance of making good choices for DNS record TTLs see our article \"),\n _createVNode(_component_router_link, { to: \"/learning/what-is-a-good-ttl-for-dns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"What is a good TTL for DNS?\")\n ]),\n _: 1\n })\n ]),\n _hoisted_37,\n _hoisted_38,\n _createElementVNode(\"ul\", null, [\n _createElementVNode(\"li\", null, [\n _createElementVNode(\"strong\", null, [\n _createVNode(_component_router_link, { to: \"/learning/spf-a-practical-guide/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"Sender Policy Framework (SPF)\")\n ]),\n _: 1\n })\n ]),\n _createTextVNode(\": SPF is an authentication protocol that lists of IP addresses that are allowed to send email on behalf of a domain. SPF is actually built on DNS and used DNS text (TXT) records to store SPF configuration. SPF attempts to prevent spoofing, spam, and phishing. It is important, but not perfect.\")\n ]),\n _createElementVNode(\"li\", null, [\n _createElementVNode(\"strong\", null, [\n _createVNode(_component_router_link, { to: \"/learning/dkim-a-practical-guide/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"DomainKeys Identified Mail (DKIM)\")\n ]),\n _: 1\n })\n ]),\n _createTextVNode(\": DKIM uses cryptography to validate the domain of the email sender. This more rigorously protects end users against spoofing and phishing.\")\n ]),\n _createElementVNode(\"li\", null, [\n _createElementVNode(\"strong\", null, [\n _createVNode(_component_router_link, { to: \"/learning/dmarc-a-practical-guide/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"Domain-based Message Authentication, Reporting, and Conformance (DMARC)\")\n ]),\n _: 1\n })\n ]),\n _createTextVNode(\": DMARC allows the owner of a domain to set policy on how incoming unauthenticated messages should be treated. They may be permitted, placed in quarantine, or rejected. DMARC also includes reporting features so that domain owners can monitor the flow of email. DMARC is intended to further protect end users from spoofing, spam and phishing, and it uses both SPF and DKIM.\")\n ]),\n _hoisted_39,\n _hoisted_40\n ]),\n _hoisted_41,\n _hoisted_42,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_43\n ]),\n _: 1\n }),\n _hoisted_44,\n _hoisted_45,\n _hoisted_46,\n _hoisted_47,\n _hoisted_48,\n _hoisted_49,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"However, even though the process of sending email does not require MX records for the sender's domain, it is still a good idea to have MX records for the zone. Every DNS zone must have an \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/soa/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"SOA\")\n ]),\n _: 1\n }),\n _createTextVNode(\" record, and part of the SOA record is the RNAME field which contains an email address for the zone's DNS administrator. Without an MX record, the RNAME email address would not be valid. This may be flagged as suspicious by email filtering software attempting to classify email as spam or malicious, so it is always best to have MX records for a domain.\")\n ]),\n _hoisted_50,\n _hoisted_51,\n _hoisted_52,\n _hoisted_53,\n _hoisted_54,\n _hoisted_55,\n _hoisted_56,\n _hoisted_57,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"You can also check the MX records of any domain name in our \"),\n _createVNode(_component_router_link, { to: \"/mx-lookup/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"MX lookup\")\n ]),\n _: 1\n }),\n _createTextVNode(\" tool, or by entering it here:\")\n ]),\n _createElementVNode(\"form\", _hoisted_58, [\n _createVNode(DomainSearch, {\n emphasize: \"\",\n buttonText: \"Find MX records\",\n onSubmitted: redirectTo\n })\n ])\n ]),\n _: 1\n }, 8, [\"title\", \"description\", \"url\", \"breadcrumbs\", \"img1024x512\", \"img1200x630\", \"written\", \"updated\", \"author\", \"editor\"])\n ], 64))\n}\n}\n\n})","import script from \"./RecordTypeMx.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./RecordTypeMx.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\nimport _imports_0 from '../../../../public/img/learning/zone-delegation/example-zone-delegation-in-action.png'\n\n\nconst _hoisted_1 = { class: \"text-xl leading-8 block font-normal text-gray-500 mt-[1.3333333em]\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc1034\",\n rel: \"noopener noreferrer\"\n}, \"RFC 1034\", -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc1035\",\n rel: \"noopener noreferrer\"\n}, \"1035\", -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full rounded-lg\",\n src: \"/img/learning/dns-record-types/ns/the-ns-record-type.jpg\",\n alt: \"A trail of NS records leads to your domain\",\n title: \"A trail of NS records leads to your domain\",\n width: \"1200\",\n height: \"600\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, [\n /*#__PURE__*/_createTextVNode(\"A trail of NS records leads to your domain. By NsLookup.io. Licensed under \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://creativecommons.org/licenses/by/4.0/\",\n title: \"Creative Commons By 4.0 licence\",\n rel: \"nofollow\"\n }, \"CC By 4.0\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The NS record has only one data field besides the usual DNS TTL field: the fully qualified DNS name of a name server that is authoritative for the domain.\", -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"What is an authoritative name server?\", -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"p\", null, \"A name server is a server running DNS software listening for DNS requests on port 53. When this server receives a DNS request, it consults its local database of DNS data. If it finds an answer in its local database, it responds with the requested data. If it does not find the data in its local database, then depending on the role and configuration of the name server, it will either return an error or consult other name servers to determine the answer.\", -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\", -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\", -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The master authoritative name server for a zone will often host a copy of the zone served from a standard DNS data file. The zone must have at least one other authoritative name server and will generally have three more. There can be only one primary (also sometimes called master) server for a DNS zone, so the other authoritative DNS servers may use DNS zone transfer (see \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc5936\",\n rel: \"noopener noreferrer\"\n }, \"RFC 5936\"),\n /*#__PURE__*/_createTextVNode(\" and \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc1995\",\n rel: \"noopener noreferrer\"\n }, \"RFC 1995\"),\n /*#__PURE__*/_createTextVNode(\") to copy the zone data.\")\n], -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Name servers that use zone transfer to retrieve a copy of a zone are called secondary servers. However, and somewhat confusingly, secondary servers are authoritative. They hold a copy of the DNS zone, but that copy is just as good from the perspective of authority as the master copy of the zone served by the primary server.\", -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"p\", null, \"So, if a zone has four authoritative names servers, it may have one primary name servers and three secondary name servers. This pattern is common, but it is not always optimal. The master server might be hidden to protect it from attack, and the four authoritative name servers advertised in the NS records for the zone might all be secondary servers.\", -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Alternatively, a proprietary replication protocol may be used instead of zone transfer. This is commonly seen in the large cloud scale DNS providers.\", -1)\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"At the end of the day, it does not matter how DNS data is replicated among the authoritative name servers for the zone. All that matters is that each of the authoritative name servers has a complete copy of the DNS zone and is ready and willing to respond to DNS requests for all the DNS names contained within the zone. See also \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc8499\",\n rel: \"noopener noreferrer\"\n }, \"RFC 8499\"),\n /*#__PURE__*/_createTextVNode(\" for a more technical definition of \\\"authoritative server\\\" and a number of related DNS terms.\")\n], -1)\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"NS records at the zone root\", -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Every zone in the DNS must have exactly one SOA record and two or more NS records at the root of the zone. These SOA and NS records are mandatory and together signify the existence of a zone in the DNS. The zone root for an example zone might include records such as:\", -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"example.org. 86400 SOA ns1.example.org. admin.example.org. (...)\\nexample.org. 86400 NS ns1.example.org.\\nexample.org. 86400 NS ns2.example.org.\\nexample.org. 86400 NS ns3.example.org.\\nexample.org. 86400 NS ns4.example.org.\", -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The requirement to have a minimum of two NS records ensures a basic level of redundancy and is specified by \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc1034#section-4.1\",\n rel: \"noopener noreferrer\"\n }, \"RFC 1034 section 4.1\"),\n /*#__PURE__*/_createTextVNode(\" and also by \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc1912#section-2.8\",\n rel: \"noopener noreferrer\"\n }, \"RFC 1912 section 2.8\"),\n /*#__PURE__*/_createTextVNode(\". A zone may have more than four NS records but this is typically unnecessary.\")\n], -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"NS records in delegations\", -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"code\", null, \"\\\".\\\"\", -1)\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"code\", null, \"org.\", -1)\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org.\", -1)\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"p\", null, \"By using NS records to follow the trail starting at the root zone, a DNS resolver will eventually reach a name server that is authoritative for the zone. The authoritative server will provide an answer to the original DNS query.\", -1)\nconst _hoisted_24 = /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"full-width\",\n src: _imports_0,\n alt: \"An example of zone delegation\",\n title: \"An example of zone delegation\"\n}, null, -1)\nconst _hoisted_25 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"image-title\" }, \"An example of zone delegation.\", -1)\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"The IP addresses of name servers\", -1)\nconst _hoisted_27 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"You may have noticed that each NS record contains the DNS host name of a single authoritative name server, for example \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"ns4.example.org\"),\n /*#__PURE__*/_createTextVNode(\". This is not sufficient for a DNS resolver to contact the name server. For a DNS resolver to contact a name server, it must know the IP address or addresses of the name server.\")\n], -1)\nconst _hoisted_28 = /*#__PURE__*/_createElementVNode(\"p\", null, \"DNS gets a bit recursive here. The DNS itself is used to look up the IP addresses of name servers, which are then used by the DNS to contact other name servers in the DNS.\", -1)\nconst _hoisted_29 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"So, for example, if a recursive DNS resolver needs to answer a query for a name in \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\", it will have to perform additional DNS queries to determine the IP addresses of \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"ns1.example.org\"),\n /*#__PURE__*/_createTextVNode(\", \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"ns2.example.org\"),\n /*#__PURE__*/_createTextVNode(\", etc. The DNS is designed to minimize these queries by allowing them to be included as additional data in a delegation response. Caching is also used to minimize these queries.\")\n], -1)\nconst _hoisted_30 = /*#__PURE__*/_createElementVNode(\"p\", null, \"However, it is vital that the DNS can resolve the host names of each of the authoritative name servers for every zone. If this is not the case, then that zone will likely be unresolvable. This will lead to an outage for any client attempting to use a web server or other resource for the zone.\", -1)\nconst _hoisted_31 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"NS record ordering and preference\", -1)\nconst _hoisted_32 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The operator of a DNS zone cannot specify that one name server is the master and should be consulted first, for example. This means that the zone operator must ensure that all name servers for the zone have identical zone data and that replication of changes between the name servers occurs quickly and reliably.\", -1)\nconst _hoisted_33 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"DNS resolvers will attempt resolution against more than one available name server for a zone if necessary. So for example, if \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"ns3.example.org\"),\n /*#__PURE__*/_createTextVNode(\" is temporarily offline for maintenance, DNS resolvers who attempt to query it during the period of outage will retry the query against another of the name servers for the zone.\")\n], -1)\nconst _hoisted_34 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Anycast for name server IP addresses\", -1)\nconst _hoisted_35 = /*#__PURE__*/_createElementVNode(\"p\", null, \"It is common for the provider of any service on the Internet to want to ensure the fastest possible response to their clients. Nobody wants a slow, laggy web page! DNS is required for HTTP and virtually every protocol on the Internet, so fast DNS resolution is critical.\", -1)\nconst _hoisted_36 = /*#__PURE__*/_createElementVNode(\"p\", null, \"One way in which DNS resolution can be sped up is to have the authoritative DNS servers very close to customers. To this end, some cloud DNS providers have hundreds of datacenters around the world, so that virtually every person on Earth can get a fast DNS response.\", -1)\nconst _hoisted_37 = /*#__PURE__*/_createElementVNode(\"p\", null, \"It would be very difficult indeed to have hundreds of IP addresses for each of the name servers for a zone, so instead Anycast is used to very elegantly simplify this issue. With Anycast, each name server has only one or two IP addresses (perhaps one IPv4 address and one IPv6 address).\", -1)\nconst _hoisted_38 = /*#__PURE__*/_createElementVNode(\"p\", null, \"When a query is sent from anywhere in the world to one of these IP addresses, Anycast ensures that it is automatically routed to the nearest data center, and hence the client experiences the fastest possible DNS resolution.\", -1)\nconst _hoisted_39 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Anycast is itself a very complex subject. It is largely built on the \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://en.wikipedia.org/wiki/Border_Gateway_Protocol\",\n rel: \"noopener noreferrer\"\n }, \"Border Gateway Protocol\"),\n /*#__PURE__*/_createTextVNode(\" (BGP). Due to its complexity, and also due to malicious attacks, many high-profile outages in the past have involved BGP issues. Anycast is still a very powerful tool to improve DNS performance and is used by most major DNS providers today.\")\n], -1)\nconst _hoisted_40 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://www.dnsperf.com/\",\n rel: \"noopener noreferrer\"\n }, \"Dnsperf.com\"),\n /*#__PURE__*/_createTextVNode(\" is a good resource to compare the relative speeds of the major authoritative DNS providers.\")\n], -1)\nconst _hoisted_41 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Common issues\", -1)\nconst _hoisted_42 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Since DNS resolution depends on the chain of NS records from the DNS root zone down to every zone in the DNS, NS record configuration is critical.\", -1)\nconst _hoisted_43 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Lame delegations, where one or more NS records have become incorrect, are a common reason for DNS resolution failure. Maintaining the NS records in both the parent and child zones can at times be a difficult task. DNS zone operators should exercise extreme care when making any changes to their NS records, since the change must be made at both the root of the zone and in the delegation in the parent zone. An error in NS record configuration in either zone can result in an outage.\", -1)\nconst _hoisted_44 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Another common problem is when DNS changes do not replicate between name servers. Either due to human error or system failure, a change made on one name server might not replicate to the other name servers. In this scenario, some clients will see the change and some will not, depending on which name server is consulted. This will lead to sporadic outages for some clients.\", -1)\nconst _hoisted_45 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc1912#section-2.8\",\n rel: \"noopener noreferrer\"\n }, \"RFC 1912 section 2.8\"),\n /*#__PURE__*/_createTextVNode(\" has a good discussion of potential NS record issues.\")\n], -1)\nconst _hoisted_46 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Finding the NS records for a zone\", -1)\nconst _hoisted_47 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The NS records of a zone can be queried with the dig or nslookup command line tools. To find the NS record for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\", use this command:\")\n], -1)\nconst _hoisted_48 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"dig NS example.org\", -1)\nconst _hoisted_49 = /*#__PURE__*/_createElementVNode(\"p\", null, \"On operating systems that support nslookup, you can use the following:\", -1)\nconst _hoisted_50 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"nslookup -type=ns example.org\", -1)\nconst _hoisted_51 = {\n class: \"not-prose text-base mx-auto max-w-lg\",\n autocomplete: \"off\"\n}\n\nimport BlogPost from '@/components/layout/BlogPost.vue';\n\n\nimport { useRouter } from 'vue-router';\nimport { jeff, ruurtjan } from '@/common/authors';\nimport { BlogMeta } from '@/common/blogMeta';\nimport DomainSearch from '@/components/DomainSearch.vue';\nimport CodeBlock from '@/components/micro/CodeBlock.vue';\nimport DnsRecordTypes from '@/views/learning/DnsRecordTypes.vue';\nimport { learningBreadcrumb } from '@/model/Breadcrumb';\nimport { domainNameToUrlPath } from '@/common/domainName';\n\nexport const meta: BlogMeta = {\n tag: 'DNS record types',\n url: '/learning/dns-record-types/ns/',\n breadcrumbs: [learningBreadcrumb, DnsRecordTypes.breadcrumb],\n title: 'The NS record',\n description: 'DNS NS records specify the authoritative name server for a domain. Learn how name server record works and how to configure them.',\n overviewDescription: 'DNS NS records specify the authoritative name server for a domain. Learn how name server record works and how to configure them.',\n overviewImage: '/img/learning/dns-record-types/ns/the-ns-record-type-small.jpg',\n overviewImageAlt: 'A trail of NS records leads to your domain',\n author: jeff,\n editor: ruurtjan,\n img1024x512: 'https://www.nslookup.io/img/learning/dns-record-types/ns/the-ns-record-social.jpg',\n img1200x630: 'https://www.nslookup.io/img/learning/dns-record-types/ns/the-ns-record-social.jpg',\n written: new Date('2022-05-12T23:13:49.367Z'),\n updated: new Date('2023-03-28T11:57:45.383Z'),\n};\n\nconst __default__ = {\n meta,\n};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'RecordTypeNs',\n setup(__props) {\n\nconst router = useRouter();\n\nfunction redirectTo(domain: string): void {\n router.push(`/domains/${domainNameToUrlPath(domain)}/dns-records/ns/`);\n}\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"ImageObject\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"email\\\": \\\"mailto:ruurtjan@nslookup.io\\\", \\\"image\\\": \\\"https://www.nslookup.io/img/ruurtjan-lg.jpg\\\", \\\"jobTitle\\\": \\\"CEO\\\", \\\"name\\\": \\\"Ruurtjan Pul\\\", \\\"url\\\": \\\"https://www.nslookup.io/about/ruurtjan-pul/\\\" }, \\\"copyrightHolder\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"https://www.nslookup.io/\\\", \\\"email\\\": \\\"hello@nslookup.io\\\" }, \\\"copyrightYear\\\": 2023, \\\"contentUrl\\\": \\\"https://www.nslookup.io/img/learning/dns-record-types/ns/the-ns-record-type.jpg\\\", \\\"license\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\", \\\"acquireLicensePage\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\" } \")\n ]),\n _: 1\n }))\n ])),\n _createVNode(BlogPost, {\n title: meta.title,\n description: meta.description,\n url: `https://www.nslookup.io${meta.url}`,\n breadcrumbs: meta.breadcrumbs,\n img1024x512: meta.img1024x512,\n img1200x630: meta.img1200x630,\n written: meta.written,\n updated: meta.updated,\n author: meta.author,\n editor: meta.editor\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"strong\", _hoisted_1, [\n _createTextVNode(\"The NS or “name server” DNS record type is used to specify the \"),\n _createVNode(_component_router_link, { to: \"/learning/recursive-vs-authoritative-dns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"authoritative name servers\")\n ]),\n _: 1\n }),\n _createTextVNode(\" for a domain. It tells DNS resolvers which servers to contact when it's looking for DNS records for that domain name. This is what allows different organizations to own different domain names.\")\n ]),\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"Like a number of other DNS record types, the original DNS specifications (\"),\n _hoisted_2,\n _createTextVNode(\" and \"),\n _hoisted_3,\n _createTextVNode(\") introduced this record type in 1987. Along with the \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/soa/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"Start of Authority (SOA) record type\")\n ]),\n _: 1\n }),\n _createTextVNode(\", NS records are integral to the proper functioning of the DNS.\")\n ]),\n _hoisted_4,\n _hoisted_5,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"Each NS record specifies the name of one authoritative name server for a particular \"),\n _createVNode(_component_router_link, {\n to: \"/learning/what-is-a-dns-zone/\",\n title: \"DNS zone\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(\"DNS zone\")\n ]),\n _: 1\n }),\n _createTextVNode(\". To specify a list of name servers that are authoritative for a particular DNS zone, a set of NS records is published, where each NS record in the set specifies one authoritative name server.\")\n ]),\n _hoisted_6,\n _hoisted_7,\n _createElementVNode(\"p\", null, [\n _createElementVNode(\"strong\", null, [\n _createTextVNode(\"An authoritative name server is a name server that has been \"),\n _createVNode(_component_router_link, { to: \"/learning/zone-delegation/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"delegated\")\n ]),\n _: 1\n }),\n _createTextVNode(\" a DNS zone, and hosts a complete copy of that particular DNS zone. So, an authoritative name server for the zone \"),\n _hoisted_8,\n _createTextVNode(\" is a server listening for DNS requests on port 53 whose local DNS database contains a complete copy of the zone \"),\n _hoisted_9,\n _createTextVNode(\".\")\n ])\n ]),\n _hoisted_10,\n _hoisted_11,\n _hoisted_12,\n _hoisted_13,\n _hoisted_14,\n _hoisted_15,\n _hoisted_16,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_17\n ]),\n _: 1\n }),\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"In this example, we have the \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/soa/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"SOA record\")\n ]),\n _: 1\n }),\n _createTextVNode(\" and four NS records at the root of the DNS zone. It is typical to have four NS records for a zone. Most DNS cloud providers today automatically provide four name server records but as few as two NS records is legal.\")\n ]),\n _hoisted_18,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"The time-to-live (TTL) value for NS records should be relatively long. One to two days is typical. Shorter TTL values for NS records are not recommended. As discussed in \"),\n _createVNode(_component_router_link, { to: \"/learning/what-is-a-good-ttl-for-dns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"our article on TTL selection in the DNS\")\n ]),\n _: 1\n }),\n _createTextVNode(\", a small outage in the DNS lasting longer than the TTL of the NS records could cause a total outage for all records in the zone.\")\n ]),\n _hoisted_19,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"As explained in our article on \"),\n _createVNode(_component_router_link, { to: \"/learning/zone-delegation/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"zone delegation in the DNS\")\n ]),\n _: 1\n }),\n _createTextVNode(\", NS records exist at the root of every DNS zone and also at the same name in the parent DNS zone. To resolve a DNS name, a DNS resolver must follow a chain, or trail, of NS records. This begins at the DNS root zone and extends downwards through child zones. That would be the root zone \"),\n _hoisted_20,\n _createTextVNode(\" followed by \"),\n _hoisted_21,\n _createTextVNode(\" and then \"),\n _hoisted_22,\n _createTextVNode(\" in this case.\")\n ]),\n _hoisted_23,\n _hoisted_24,\n _hoisted_25,\n _hoisted_26,\n _hoisted_27,\n _hoisted_28,\n _hoisted_29,\n _hoisted_30,\n _hoisted_31,\n _hoisted_32,\n _hoisted_33,\n _hoisted_34,\n _hoisted_35,\n _hoisted_36,\n _hoisted_37,\n _hoisted_38,\n _hoisted_39,\n _hoisted_40,\n _hoisted_41,\n _hoisted_42,\n _hoisted_43,\n _hoisted_44,\n _hoisted_45,\n _hoisted_46,\n _hoisted_47,\n _hoisted_48,\n _hoisted_49,\n _hoisted_50,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"You can also check the NS records of any domain name in our \"),\n _createVNode(_component_router_link, { to: \"/ns-lookup/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"name server lookup\")\n ]),\n _: 1\n }),\n _createTextVNode(\" tool, or by entering it here:\")\n ]),\n _createElementVNode(\"form\", _hoisted_51, [\n _createVNode(DomainSearch, {\n emphasize: \"\",\n buttonText: \"Find NS records\",\n onSubmitted: redirectTo\n })\n ])\n ]),\n _: 1\n }, 8, [\"title\", \"description\", \"url\", \"breadcrumbs\", \"img1024x512\", \"img1200x630\", \"written\", \"updated\", \"author\", \"editor\"])\n ], 64))\n}\n}\n\n})","import script from \"./RecordTypeNs.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./RecordTypeNs.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, createElementVNode as _createElementVNode, createVNode as _createVNode, resolveComponent as _resolveComponent, unref as _unref, normalizeClass as _normalizeClass, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"strong\", { class: \"text-xl leading-8 block font-normal text-gray-500 mt-[1.3333333em]\" }, \"The PTR or \\\"pointer\\\" DNS record type maps an IP address to a domain name in the DNS. This is called a DNS reverse lookup.\", -1)\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Most DNS records types are used in \\\"forward lookups\\\". A DNS forward lookup maps a DNS name to an IP address or another piece of DNS data. PTR records do the opposite. A reverse lookup for a PTR record maps an IP address to a DNS name.\", -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The PTR record type was introduced in the original DNS specifications (\"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc1034\",\n rel: \"noopener noreferrer\"\n }, \"RFC 1034\"),\n /*#__PURE__*/_createTextVNode(\" and \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc1035\",\n rel: \"noopener noreferrer\"\n }, \"1035\"),\n /*#__PURE__*/_createTextVNode(\") in 1987. Today, \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"PTR records are essential for email delivery.\"),\n /*#__PURE__*/_createTextVNode(\" They are used as a layer of security to prove that a mail server is trustworthy.\")\n], -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full rounded-lg\",\n src: \"/img/learning/dns-record-types/ptr/the-dns-ptr-record-type.jpg\",\n alt: \"Pointer records in the DNS\",\n title: \"Pointer records in the DNS\",\n width: \"1200\",\n height: \"600\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, [\n /*#__PURE__*/_createTextVNode(\"Pointer records in the DNS. By NsLookup.io. Licensed under \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://creativecommons.org/licenses/by/4.0/\",\n title: \"Creative Commons By 4.0 licence\",\n rel: \"nofollow\"\n }, \"CC By 4.0\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"PTR record format\", -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The PTR record format is straightforward but constructing PTR names requires a few steps. The data of each PTR record contains only one data field. This field gives the canonical name for the IP address. Like all other records in the DNS, each PTR record also has a Time-to-Live (TTL) value in seconds.\", -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Here is an example of a PTR record that maps the IPv4 address \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"10.0.0.1\"),\n /*#__PURE__*/_createTextVNode(\" to the DNS name \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"mailserver.example.org\"),\n /*#__PURE__*/_createTextVNode(\". This record has a TTL of one hour (3600 seconds).\")\n], -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"1.0.0.10.in-addr.arpa. 3600 PTR mailserver.example.org.\", -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"PTR record names\", -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The owner name of a PTR record always lies in the .arpa zone. The .arpa Top Level Domain was the first TLD created. It was proposed in 1983 by \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc881\",\n rel: \"noopener noreferrer\"\n }, \"RFC 881\"),\n /*#__PURE__*/_createTextVNode(\". For IPv4 addresses, the rightmost labels are always \\\"in-addr.arpa\\\". For IPv6 addresses, \\\"ip6.arpa\\\" is used.\")\n], -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Preceding \\\"in-addr.arpa\\\" or \\\"ip6.arpa\\\" are DNS labels that contain the IP address in a specific format. For IPv4, there are four labels for the address, one for each octet in the IPv4 address. For IPv6, there is one label for each hex digit in the IPv6 address. The address labels appear in reverse order. The least significant labels of the address come first.\", -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"p\", null, \"IPv6 reverse lookup names are long! They contain 32 labels for the hex digits of the address plus two more labels for \\\"ip6.arpa\\\". So there are 34 labels in the owner name of every IPv6 PTR record versus six labels for IPv4 PTR records.\", -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"IPv4 PTR record names\", -1)\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Formulate the name of a PTR record for an IPv4 address using these steps:\", -1)\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"Separate the IPv4 address into four labels. For \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"10.0.0.1\"),\n /*#__PURE__*/_createTextVNode(\" the labels are 10, 0, 0, and 1.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"Reverse the labels and join them with dots: \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"1.0.0.10\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"Add \\\"in-addr.arpa\\\" to finish the lookup name: \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"1.0.0.10.in-addr.arpa\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"IPv6 PTR record names\", -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"code\", null, \"2001:1000::12ab\", -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"Expand the double colon if present. For \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"2001:1000::12ab\"),\n /*#__PURE__*/_createTextVNode(\" we get \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"2001:1000:0000:0000:0000:0000:0000:12ab\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"Remove colons: \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"200110000000000000000000000012ab\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"Reverse the hex digits: \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"ba210000000000000000000000011002\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"Insert a dot between each hex digit: \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"b.a.2.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.1.0.0.2\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"Add \\\"ip6.arpa\\\" to finish the lookup name: \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"b.a.2.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.1.0.0.2.ip6.arpa\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"p\", null, \"DNS lookup names are case insensitive. Upper-case or lower-case characters can be used for the hex digit labels. Both will give identical results.\", -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The PTR record for this address would be:\", -1)\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"b.a.2.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.1.0.0.2.ip6.arpa. 3600 PTR mailserver.example.org.\", -1)\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"p\", null, \"While two consecutive colons are a shortcut for a long series of zeros in an IPv6 address, there is no similar shortcut for the PTR name. All IPv6 PTR record owner names contain 34 labels.\", -1)\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Forward-confirmed reverse DNS\", -1)\nconst _hoisted_24 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The complex-sounding term \\\"forward-confirmed reverse DNS\\\" (FCrDNS) means a pair of forward and reverse lookup records in the DNS that agree with one another.\", -1)\nconst _hoisted_25 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The forward lookup record is of type A or AAAA. The reverse lookup record is of type PTR. The owner name of the A or AAAA record must match the canonical name in the PTR record data. And the address in the A or AAAA record must match the owner name of the PTR record.\", -1)\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"p\", null, \"These two example records form a forward-confirmed reverse DNS pair:\", -1)\nconst _hoisted_27 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"; In the example.org zone:\\nmailserver.example.org. 3600 A 10.0.0.1\\n\\n; In the reverse lookup zone 10.in-addr.arpa:\\n1.0.0.10.in-addr.arpa. 3600 PTR mailserver.example.org.\", -1)\nconst _hoisted_28 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Forward-confirmed reverse DNS also applies to IPv6 using a AAAA record and a corresponding 34-label PTR record.\", -1)\nconst _hoisted_29 = /*#__PURE__*/_createElementVNode(\"p\", null, \"FCrDNS is a basic but effective security measure because the two records that comprise a FCrDNS pair are in different zones in the DNS. It is difficult for spammers using temporary mail servers to pass the FCrDNS test.\", -1)\nconst _hoisted_30 = /*#__PURE__*/_createElementVNode(\"p\", null, \"It's not required that every A or AAAA record on the Internet have a matching PTR record. Most DNS names do not have PTR records but in some contexts, such as email delivery, the existence of PTR records is critical.\", -1)\nconst _hoisted_31 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"The .arpa TLD contains all of the PTR records for the Internet. The .arpa TLD is managed by the Internet Assigned Numbers Authority (IANA) with guidance from the Internet Architecture Board (IAB). \")\n], -1)\nconst _hoisted_32 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Walking down the zone tree from the .arpa TLD through delegations, you will arrive at a reverse lookup zone that contains PTR records. This zone will be managed by the agency, ISP, or corporation that purchased that block of IP addresses.\", -1)\nconst _hoisted_33 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Cloud providers offering mail hosting services will create PTR records in their reverse lookup zones automatically or at the request of their customers. But PTR record creation is not usually offered by cloud providers for other services.\", -1)\nconst _hoisted_34 = /*#__PURE__*/_createElementVNode(\"p\", null, \"For typical home Internet scenarios, the router's public IP is from a block of IP addresses owned by the ISP. Consumer ISPs typically will not create PTR records for customers. Business ISPs may offer this service to customers who run their own mail servers. Contact your ISP support team to find out if PTR record creation is supported.\", -1)\nconst _hoisted_35 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"See the \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://www.iana.org/domains/arpa\",\n rel: \"noopener noreferrer\"\n }, \"IANA page on .arpa zone management\"),\n /*#__PURE__*/_createTextVNode(\" for more information on the .arpa TLD.\")\n], -1)\nconst _hoisted_36 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Improving email delivery with PTR records\", -1)\nconst _hoisted_37 = /*#__PURE__*/_createElementVNode(\"p\", null, \"PTR records were intended for informational and inventory purposes but they have become a vital tool in the never-ending fight against email spam.\", -1)\nconst _hoisted_38 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Virtually all email relays require that the sending server pass a FCrDNS check. A PTR record must exist with the same name and address information as the type A or AAAA record for the mail server name. Mail from the sending server will usually be treated as spam if the PTR record does not exist or does not match.\", -1)\nconst _hoisted_39 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Looking up PTR records for an IP address\", -1)\nconst _hoisted_40 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The dig or nslookup command line tools can find the DNS name for an IP address. Dig has a special command line option \\\"-x\\\" that automatically uses the rules above to convert an IP address to a PTR lookup name. To find the PTR records for Cloudflare's public DNS resolver address:\", -1)\nconst _hoisted_41 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"dig -x 1.1.1.1\", -1)\nconst _hoisted_42 = /*#__PURE__*/_createElementVNode(\"p\", null, \"On operating systems that support nslookup, you can use the following:\", -1)\nconst _hoisted_43 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"nslookup -type=PTR 1.1.1.1\", -1)\nconst _hoisted_44 = /*#__PURE__*/_createElementVNode(\"p\", null, \"You can also explicitly look up the reverse lookup name using dig if you wish. Dig will perform the same DNS lookup as with the \\\"-x\\\" option above if you use:\", -1)\nconst _hoisted_45 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"dig ptr 1.1.1.1.in-addr.arpa\", -1)\nconst _hoisted_46 = {\n class: \"not-prose text-base mx-auto max-w-lg\",\n autocomplete: \"off\"\n}\nconst _hoisted_47 = { class: \"mx-auto max-w-3xl divide-y-2 divide-gray-200\" }\nconst _hoisted_48 = /*#__PURE__*/_createElementVNode(\"h2\", { class: \"ignore-toc\" }, \"Related questions\", -1)\nconst _hoisted_49 = { class: \"mt-6 space-y-6 divide-y divide-gray-200 [overflow-anchor:none]\" }\nconst _hoisted_50 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg font-medium text-gray-900\" }, \" What TTL should you use for PTR records? \", -1)\nconst _hoisted_51 = { class: \"ml-6 flex h-7 items-center\" }\nconst _hoisted_52 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", { class: \"font-medium text-gray-500\" }, \"A TTL of one hour or more is recommended for PTR records because they tend to be relatively static.\")\n], -1)\nconst _hoisted_53 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg font-medium text-gray-900\" }, \" Can an IP have multiple PTR records? \", -1)\nconst _hoisted_54 = { class: \"ml-6 flex h-7 items-center\" }\nconst _hoisted_55 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", { class: \"font-medium text-gray-500\" }, \"The DNS specifications do not prohibit multiple PTR records. However, this is not recommended. The PTR record identifies the canonical DNS name associated with an IP address. By definition, this is a singular name.\")\n], -1)\nconst _hoisted_56 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Mail servers performing FCrDNS checks are not guaranteed to examine more than one PTR record. Mail delivery may fail or be intermittent if multiple PTR records exist.\", -1)\nconst _hoisted_57 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg font-medium text-gray-900\" }, \" How do I set up a PTR record? \", -1)\nconst _hoisted_58 = { class: \"ml-6 flex h-7 items-center\" }\nconst _hoisted_59 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", { class: \"font-medium text-gray-500\" }, \"If a hosting provider operates your mail server, check your provider's documentation for instructions on setting up a PTR record. Most hosting providers will have a checkbox in their web interface to enable PTR creation. They may even do this for you automatically since PTR records for mail servers are critical.\")\n], -1)\nconst _hoisted_60 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Creating a PTR can be difficult if you operate your mail server and DNS forward lookup zone yourself. Your ISP owns the reverse lookup zone for your IP address space. Contact your ISP's technical support and ask them to add your PTR records or delegate a reverse lookup zone to you.\", -1)\nconst _hoisted_61 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg font-medium text-gray-900\" }, \" Are matching PTR records always necessary? \", -1)\nconst _hoisted_62 = { class: \"ml-6 flex h-7 items-center\" }\nconst _hoisted_63 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", { class: \"font-medium text-gray-500\" }, \"For mail servers, matching forward and reverse lookup records are virtually mandatory. However, for most other applications, PTR records are optional.\")\n], -1)\nconst _hoisted_64 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"PTR records are often omitted or do not match for web servers and other applications. If you resolve \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"www.google.com\"),\n /*#__PURE__*/_createTextVNode(\" and perform a reverse lookup on the IP address, you will probably see a cryptic name in the PTR. This cryptic name is the hostname of a Google server in a data center close to you. For example:\")\n], -1)\nconst _hoisted_65 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"dig +short www.google.com\\n142.251.215.228\\n\\ndig +short -x 142.251.215.228\\nsea09s35-in-f4.1e100.net.\", -1)\nconst _hoisted_66 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Google's web servers fail the forward-confirmed reverse DNS test. This does not cause problems because web servers and clients do not perform FCrDNS checks. But you can be sure that all of Google's mail servers have PTR records that will satisfy FCrDNS checks.\", -1)\nconst _hoisted_67 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg font-medium text-gray-900\" }, \" What does ARPA stand for? \", -1)\nconst _hoisted_68 = { class: \"ml-6 flex h-7 items-center\" }\nconst _hoisted_69 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", { class: \"font-medium text-gray-500\" }, \"PTR records appear under the .arpa TLD. This was originally short for the Advanced Research Projects Agency, but the acronym has since been redefined.\")\n], -1)\nconst _hoisted_70 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The .arpa TLD was the very first TLD created during the early days of the Internet. It is still used today for all PTR records. IPv4 PTR records appear in the DNS under \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"in-addr.arpa\"),\n /*#__PURE__*/_createTextVNode(\". IPv6 PTR records use \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"ip6.arpa\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_71 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Originally the .arpa TLD was short for Advanced Research Project Agency. This was the agency responsible for funding ARPANET, the first incarnation of the Internet.\", -1)\nconst _hoisted_72 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Many years later, the .arpa TLD became used almost exclusively for IP addresses in the form of PTR records. Since it was too late to rename the TLD, the Internet Engineering Task Force (IETF) decided to redefine the acronym. The TLD .arpa is now officially short for Address and Routing Parameter Area.\", -1)\n\nimport BlogPost from '@/components/layout/BlogPost.vue';\n\n\nimport { useRouter } from 'vue-router';\nimport {\n Disclosure,\n DisclosureButton,\n DisclosurePanel,\n} from '@headlessui/vue';\nimport { ChevronDownIcon } from '@heroicons/vue/24/outline';\nimport { jeff, ruurtjan } from '@/common/authors';\nimport { BlogMeta } from '@/common/blogMeta';\nimport DomainSearch from '@/components/DomainSearch.vue';\nimport DnsRecordTypes from '@/views/learning/DnsRecordTypes.vue';\nimport CodeBlock from '@/components/micro/CodeBlock.vue';\nimport { learningBreadcrumb } from '@/model/Breadcrumb';\nimport Callout from '@/components/layout/CalloutComponent.vue';\nimport { domainNameToUrlPath } from '@/common/domainName';\n\nexport const meta: BlogMeta = {\n tag: 'DNS record types',\n url: '/learning/dns-record-types/ptr/',\n breadcrumbs: [learningBreadcrumb, DnsRecordTypes.breadcrumb],\n title: 'The PTR record',\n description: 'The PTR or \"pointer\" DNS record type maps an IP address to a domain name in the DNS. This is called a DNS reverse lookup.',\n overviewDescription: 'The PTR or \"pointer\" DNS record type maps an IP address to a domain name in the DNS. This is called a DNS reverse lookup.',\n overviewImage: '/img/learning/dns-record-types/ptr/the-dns-ptr-record-type-small.jpg',\n overviewImageAlt: 'Pointer records in the DNS',\n author: jeff,\n editor: ruurtjan,\n img1024x512: 'https://www.nslookup.io/img/learning/dns-record-types/ptr/the-ptr-record-social.jpg',\n img1200x630: 'https://www.nslookup.io/img/learning/dns-record-types/ptr/the-ptr-record-social.jpg',\n written: new Date('2022-09-02T09:08:52.860Z'),\n updated: new Date('2023-03-28T11:57:55.025Z'),\n};\n\nconst __default__ = {\n meta,\n};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'RecordTypePtr',\n setup(__props) {\n\nconst router = useRouter();\n\nfunction redirectTo(domain: string): void {\n router.push(`/domains/${domainNameToUrlPath(domain)}/dns-records/ptr/`);\n}\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"ImageObject\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"email\\\": \\\"mailto:ruurtjan@nslookup.io\\\", \\\"image\\\": \\\"https://www.nslookup.io/img/ruurtjan-lg.jpg\\\", \\\"jobTitle\\\": \\\"CEO\\\", \\\"name\\\": \\\"Ruurtjan Pul\\\", \\\"url\\\": \\\"https://www.nslookup.io/about/ruurtjan-pul/\\\" }, \\\"copyrightHolder\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"https://www.nslookup.io/\\\", \\\"email\\\": \\\"hello@nslookup.io\\\" }, \\\"copyrightYear\\\": 2023, \\\"contentUrl\\\": \\\"https://www.nslookup.io/img/learning/dns-record-types/ptr/the-dns-ptr-record-type.jpg\\\", \\\"license\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\", \\\"acquireLicensePage\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\" } \")\n ]),\n _: 1\n }))\n ])),\n _createVNode(BlogPost, {\n title: meta.title,\n description: meta.description,\n url: `https://www.nslookup.io${meta.url}`,\n breadcrumbs: meta.breadcrumbs,\n img1024x512: meta.img1024x512,\n img1200x630: meta.img1200x630,\n written: meta.written,\n updated: meta.updated,\n author: meta.author,\n editor: meta.editor\n }, {\n default: _withCtx(() => [\n _hoisted_1,\n _hoisted_2,\n _hoisted_3,\n _hoisted_4,\n _hoisted_5,\n _hoisted_6,\n _hoisted_7,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n }),\n _hoisted_9,\n _hoisted_10,\n _hoisted_11,\n _hoisted_12,\n _hoisted_13,\n _hoisted_14,\n _hoisted_15,\n _hoisted_16,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"Use a similar process to construct the name for an IPv6 record. Let's consider the example IPv6 address \"),\n _hoisted_17,\n _createTextVNode(\". As discussed in our article on \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/aaaa/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"the AAAA record type\")\n ]),\n _: 1\n }),\n _createTextVNode(\", the two consecutive colons are a shortcut for enough zeros to pad the address out to 128 bits.\")\n ]),\n _hoisted_18,\n _hoisted_19,\n _hoisted_20,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_21\n ]),\n _: 1\n }),\n _hoisted_22,\n _hoisted_23,\n _hoisted_24,\n _hoisted_25,\n _hoisted_26,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_27\n ]),\n _: 1\n }),\n _hoisted_28,\n _hoisted_29,\n _hoisted_30,\n _createVNode(Callout, {\n icon: \"info\",\n title: \"Who manages DNS records in the .arpa TLD?\",\n heading: \"h2\"\n }, {\n default: _withCtx(() => [\n _hoisted_31,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"The IANA and the IAB do not manage individual PTR records. Child zones are \"),\n _createVNode(_component_router_link, { to: \"/learning/zone-delegation/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"delegated\")\n ]),\n _: 1\n }),\n _createTextVNode(\" below .arpa for blocks of IP addresses purchased by various agencies, ISPs, and corporations.\")\n ]),\n _hoisted_32,\n _hoisted_33,\n _hoisted_34,\n _hoisted_35\n ]),\n _: 1\n }),\n _hoisted_36,\n _hoisted_37,\n _hoisted_38,\n _hoisted_39,\n _hoisted_40,\n _hoisted_41,\n _hoisted_42,\n _hoisted_43,\n _hoisted_44,\n _hoisted_45,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"You can also check the PTR records for any domain name in our \"),\n _createVNode(_component_router_link, { to: \"/ptr-lookup/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"PTR lookup\")\n ]),\n _: 1\n }),\n _createTextVNode(\" tool or by entering it here:\")\n ]),\n _createElementVNode(\"form\", _hoisted_46, [\n _createVNode(DomainSearch, {\n emphasize: \"\",\n \"placeholder-text\": \"IP address or domain name\",\n buttonText: \"Find PTR record\",\n onSubmitted: redirectTo\n })\n ]),\n _createElementVNode(\"div\", _hoisted_47, [\n _hoisted_48,\n _createElementVNode(\"div\", _hoisted_49, [\n _createVNode(_unref(Disclosure), {\n as: \"div\",\n class: \"pt-6\"\n }, {\n default: _withCtx(({ open }) => [\n _createVNode(_unref(DisclosureButton), {\n as: \"h3\",\n class: \"ignore-toc flex mt-0 w-full items-start justify-between text-left cursor-pointer text-gray-400\"\n }, {\n default: _withCtx(() => [\n _hoisted_50,\n _createElementVNode(\"span\", _hoisted_51, [\n _createVNode(_unref(ChevronDownIcon), {\n class: _normalizeClass([open ? '-rotate-180' : 'rotate-0', 'h-6 w-6 transform']),\n \"aria-hidden\": \"true\"\n }, null, 8, [\"class\"])\n ])\n ]),\n _: 2\n }, 1024),\n _createVNode(_unref(DisclosurePanel), { class: \"mt-2 pr-12\" }, {\n default: _withCtx(() => [\n _hoisted_52,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"TTL selection in the DNS is often complicated. As we discussed in \"),\n _createVNode(_component_router_link, { to: \"/learning/what-is-a-good-ttl-for-dns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"our article on TTL selection in the DNS\")\n ]),\n _: 1\n }),\n _createTextVNode(\", shorter TTLs give agility, but longer TTLs increase reliability. Longer TTLs can also decrease latency.\")\n ])\n ]),\n _: 1\n })\n ]),\n _: 1\n }),\n _createVNode(_unref(Disclosure), {\n as: \"div\",\n class: \"pt-6\"\n }, {\n default: _withCtx(({ open }) => [\n _createVNode(_unref(DisclosureButton), {\n as: \"h3\",\n class: \"ignore-toc flex mt-0 w-full items-start justify-between text-left cursor-pointer text-gray-400\"\n }, {\n default: _withCtx(() => [\n _hoisted_53,\n _createElementVNode(\"span\", _hoisted_54, [\n _createVNode(_unref(ChevronDownIcon), {\n class: _normalizeClass([open ? '-rotate-180' : 'rotate-0', 'h-6 w-6 transform']),\n \"aria-hidden\": \"true\"\n }, null, 8, [\"class\"])\n ])\n ]),\n _: 2\n }, 1024),\n _createVNode(_unref(DisclosurePanel), { class: \"mt-2 pr-12\" }, {\n default: _withCtx(() => [\n _hoisted_55,\n _hoisted_56\n ]),\n _: 1\n })\n ]),\n _: 1\n }),\n _createVNode(_unref(Disclosure), {\n as: \"div\",\n class: \"pt-6\"\n }, {\n default: _withCtx(({ open }) => [\n _createVNode(_unref(DisclosureButton), {\n as: \"h3\",\n class: \"ignore-toc flex mt-0 w-full items-start justify-between text-left cursor-pointer text-gray-400\"\n }, {\n default: _withCtx(() => [\n _hoisted_57,\n _createElementVNode(\"span\", _hoisted_58, [\n _createVNode(_unref(ChevronDownIcon), {\n class: _normalizeClass([open ? '-rotate-180' : 'rotate-0', 'h-6 w-6 transform']),\n \"aria-hidden\": \"true\"\n }, null, 8, [\"class\"])\n ])\n ]),\n _: 2\n }, 1024),\n _createVNode(_unref(DisclosurePanel), { class: \"mt-2 pr-12\" }, {\n default: _withCtx(() => [\n _hoisted_59,\n _hoisted_60\n ]),\n _: 1\n })\n ]),\n _: 1\n }),\n _createVNode(_unref(Disclosure), {\n as: \"div\",\n class: \"pt-6\"\n }, {\n default: _withCtx(({ open }) => [\n _createVNode(_unref(DisclosureButton), {\n as: \"h3\",\n class: \"ignore-toc flex mt-0 w-full items-start justify-between text-left cursor-pointer text-gray-400\"\n }, {\n default: _withCtx(() => [\n _hoisted_61,\n _createElementVNode(\"span\", _hoisted_62, [\n _createVNode(_unref(ChevronDownIcon), {\n class: _normalizeClass([open ? '-rotate-180' : 'rotate-0', 'h-6 w-6 transform']),\n \"aria-hidden\": \"true\"\n }, null, 8, [\"class\"])\n ])\n ]),\n _: 2\n }, 1024),\n _createVNode(_unref(DisclosurePanel), { class: \"mt-2 pr-12\" }, {\n default: _withCtx(() => [\n _hoisted_63,\n _hoisted_64,\n _hoisted_65,\n _hoisted_66\n ]),\n _: 1\n })\n ]),\n _: 1\n }),\n _createVNode(_unref(Disclosure), {\n as: \"div\",\n class: \"pt-6\"\n }, {\n default: _withCtx(({ open }) => [\n _createVNode(_unref(DisclosureButton), {\n as: \"h3\",\n class: \"ignore-toc flex mt-0 w-full items-start justify-between text-left cursor-pointer text-gray-400\"\n }, {\n default: _withCtx(() => [\n _hoisted_67,\n _createElementVNode(\"span\", _hoisted_68, [\n _createVNode(_unref(ChevronDownIcon), {\n class: _normalizeClass([open ? '-rotate-180' : 'rotate-0', 'h-6 w-6 transform']),\n \"aria-hidden\": \"true\"\n }, null, 8, [\"class\"])\n ])\n ]),\n _: 2\n }, 1024),\n _createVNode(_unref(DisclosurePanel), { class: \"mt-2 pr-12\" }, {\n default: _withCtx(() => [\n _hoisted_69,\n _hoisted_70,\n _hoisted_71,\n _hoisted_72\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ])\n ])\n ]),\n _: 1\n }, 8, [\"title\", \"description\", \"url\", \"breadcrumbs\", \"img1024x512\", \"img1200x630\", \"written\", \"updated\", \"author\", \"editor\"])\n ], 64))\n}\n}\n\n})","import script from \"./RecordTypePtr.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./RecordTypePtr.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-xl leading-8 block font-normal text-gray-500 mt-[1.3333333em]\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"p\", null, \"For example, when creating a new DNS zone for ohmcar.org (a fictitious electric car company) then the process of zone creation would include the creation of a SOA record at ohmcar.org.\", -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Maintenance and creation of the SOA record is a task for the DNS server administrator of the zone. The webmaster for a domain would not generally need to add or change the SOA record.\", -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The SOA record at ohmcar.org indicates that a DNS zone begins at ohmcar.org and extends downwards in the DNS tree to encompass all the DNS names that are children of ohmcar.org. The names www.ohmcar.org and apps.backend.ohmcar.org would be part of this zone, as would the name ohmcar.org itself.\", -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The SOA record does more than just indicate that a zone exists. It also gives some important information about the zone and controls negative caching for non-existent names within the zone. More on that later.\", -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full rounded-lg\",\n src: \"/img/learning/dns-record-types/soa/the-soa-record-type.jpg\",\n alt: \"DNS records replicated (cloned) across DNS servers using the configuration of the SOA record\",\n title: \"DNS records replicated (cloned) across DNS servers using the configuration of the SOA record\",\n width: \"1200\",\n height: \"600\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, [\n /*#__PURE__*/_createTextVNode(\"DNS records replicated (cloned) across DNS servers using the configuration of the SOA record. By NsLookup.io. Licensed under \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://creativecommons.org/licenses/by/4.0/\",\n title: \"Creative Commons By 4.0 licence\",\n rel: \"nofollow\"\n }, \"CC By 4.0\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"NS records and end of authority\", -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"p\", null, \"You may have noticed that this article discusses DNS zones rather than DNS domains. These words are often used interchangeably.\", -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Generally, the word domain is used to mean a single zone or to cover multiple related zones. In the latter definition, domain sometimes describes a collection of zones owned by a single entity. This is more of a business definition than a technical DNS definition.\", -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The DNS only deals with zones. When multiple zones are delegated by a single controlling entity, the DNS still considers each zone separately. The DNS does not care who controls each individual zone in the tree of DNS names.\", -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Which SOA data fields are important?\", -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The SOA record contains several data fields. Some of these fields are only relevant for zone transfer. Zone transfer is a DNS protocol for copying a DNS zone from one DNS server to another, and is not related to the ownership of the zone.\", -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Zone transfer is sometimes used when DNS servers of multiple hosting providers are authoritative for the DNS zone, but DNS zone transfer is less relevant today than in the past.\", -1)\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Many popular cloud DNS providers such as Google, AWS, NS1, and Azure do not really use zone transfer at all. Instead, they use proprietary database replication mechanisms, which are generally superior to zone transfer. If zone transfer is not being performed for a particular zone, then Refresh Time, Retry Time, Expire Time, and Serial Number will be ignored.\", -1)\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Generally speaking, for a zone that will not use zone transfer, the important fields are:\", -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Primary Name Server\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Responsible Person\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Minimum TTL (for negative caching)\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"The TTL of the SOA record itself\")\n], -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"SOA record format and fields\", -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"p\", null, \"SOA records follow this format:\", -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"[Owner name] [SOA record TTL] SOA [MNAME] [RNAME] (\\n [Serial number]\\n [Refresh time in seconds]\\n [Retry time in seconds]\\n [Expire time in seconds]\\n [Minimum TTL (negative response cache TTL)]\\n)\", -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"p\", null, \"An example of a DNS SOA record looks something like this:\", -1)\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"ohmcar.org 900 SOA ns1.ohmcar.org. admin.ohmcar.org. (\\n 17\\n 7200\\n 3600\\n 86400\\n 300\\n)\", -1)\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The owner name of this SOA record is the name of the zone and therefore is also the point at which the zone authority starts in the DNS tree. In the example above, the TTL of the SOA record for ohmcar.org is 15 minutes (900 seconds). The data fields of the SOA record are explained below:\", -1)\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", { class: \"mb-6\" }, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"The Primary Name Server (MNAME)\"),\n /*#__PURE__*/_createTextVNode(\" for the zone, in this example ns1.ohmcar.org. Most zones have multiple Name Servers. This field must specify one of them. It does not matter which Name Server is used in this field: any of the Name Servers authoritative for this DNS zone can be used, including secondary Name Servers if they exist.\"),\n /*#__PURE__*/_createElementVNode(\"br\"),\n /*#__PURE__*/_createElementVNode(\"br\"),\n /*#__PURE__*/_createTextVNode(\"Often the host names of the Name Servers would be \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"ns1.ohmcar.org\"),\n /*#__PURE__*/_createTextVNode(\", \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"ns2.ohmcar.org\"),\n /*#__PURE__*/_createTextVNode(\", etc. but they can be any valid DNS host name. Their host names can be inside or outside the zone.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", { class: \"mb-6\" }, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"The Responsible Person (RNAME)\"),\n /*#__PURE__*/_createTextVNode(\" for the zone. This is an email address where potential problems with the zone can be reported.\"),\n /*#__PURE__*/_createElementVNode(\"br\"),\n /*#__PURE__*/_createElementVNode(\"br\"),\n /*#__PURE__*/_createTextVNode(\"For example, if spam or a DDoS attack were originating from ohmcar.org then engineers at other organizations investigating those incidents would probably send email to the RNAME address.\"),\n /*#__PURE__*/_createElementVNode(\"br\"),\n /*#__PURE__*/_createElementVNode(\"br\"),\n /*#__PURE__*/_createTextVNode(\"This field never contains the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"@\"),\n /*#__PURE__*/_createTextVNode(\" character. Instead, the first period is interpreted as the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"@\"),\n /*#__PURE__*/_createTextVNode(\". In this example, the responsible person value of \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"admin.ohmcar.org\"),\n /*#__PURE__*/_createTextVNode(\" would indicate the email address \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"admin@ohmcar.org\"),\n /*#__PURE__*/_createTextVNode(\". This format is tricky for email addresses that include a period before the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"@\"),\n /*#__PURE__*/_createTextVNode(\" character but DNS permits this with backslash escaping, for example \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"john\\\\.smith.ohmcar.org\"),\n /*#__PURE__*/_createTextVNode(\" would be interpreted as \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"john.smith@ohmcar.org\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", { class: \"mb-6\" }, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"The current Serial Number\"),\n /*#__PURE__*/_createTextVNode(\" of the zone. This field is used during zone transfer to identify and differentiate different versions of the zone. When zone transfer is not used, this field is largely ignored and is often not maintained by the zone administrator.\"),\n /*#__PURE__*/_createElementVNode(\"br\"),\n /*#__PURE__*/_createElementVNode(\"br\"),\n /*#__PURE__*/_createTextVNode(\"When serial numbers are maintained they are usually of the form \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"YYYYMMDDNN\"),\n /*#__PURE__*/_createTextVNode(\" where \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"NN\"),\n /*#__PURE__*/_createTextVNode(\" is a sequence number starting at zero and incremented with each change on the day. Alternatively, the serial number can simply be an integer value starting at one that is incremented each time the zone is updated. Maintaining the zone serial number is optional when zone transfer is not being used.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", { class: \"mb-6\" }, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"The Refresh Time\"),\n /*#__PURE__*/_createTextVNode(\" in seconds. This is used for zone transfer and specifies how often secondary servers are expected to attempt to refresh their copy of the zone. This field is not used outside of zone transfer.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", { class: \"mb-6\" }, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"The Retry Time\"),\n /*#__PURE__*/_createTextVNode(\" in seconds. This is also used for zone transfer. It specifies how often secondary servers should retry zone transfer after a failure. This field is not used outside of zone transfer.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", { class: \"mb-6\" }, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"The Expire Time\"),\n /*#__PURE__*/_createTextVNode(\" in seconds. Another field for zone transfer. If the zone cannot be transferred within this many seconds, secondary servers should discard their last copy of the zone and assume that the zone is offline. This field is not used outside of zone transfer.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"The Minimum TTL\"),\n /*#__PURE__*/_createTextVNode(\" for the zone. This field has an interesting history. Today it is used for negative caching. We’ll discuss this in more detail below.\")\n ])\n], -1)\nconst _hoisted_24 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"History\", -1)\nconst _hoisted_25 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The SOA record was introduced in \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://www.rfc-editor.org/rfc/rfc1034\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, \"RFC 1034\"),\n /*#__PURE__*/_createTextVNode(\" and \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://www.rfc-editor.org/rfc/rfc1035\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, \"RFC 1035\"),\n /*#__PURE__*/_createTextVNode(\" back in 1987 as part of the first generation of the distributed DNS. Some important clarifications were added in \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://www.rfc-editor.org/rfc/rfc2181\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, \"RFC 2181\"),\n /*#__PURE__*/_createTextVNode(\". Negative caching behavior was added in \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://www.rfc-editor.org/rfc/rfc2308\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, \"RFC 2308\"),\n /*#__PURE__*/_createTextVNode(\". \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://www.rfc-editor.org/rfc/rfc8499\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, \"RFC 8499\"),\n /*#__PURE__*/_createTextVNode(\" contains more detailed and precise SOA definitions. Many other RFCs also mention the SOA record. It is one of the most fundamental record types in the DNS.\")\n], -1)\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Negative caching\", -1)\nconst _hoisted_27 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The DNS uses an NXDOMAIN response to indicate that the DNS name in the query does not exist. This would be used if a user makes a typo in their web browser, for example, or any time a DNS name is queried for that does not exist in the DNS zone. DNS resolvers cache NXDOMAIN responses to minimize the number of queries they have to send. This is called “negative caching”.\", -1)\nconst _hoisted_28 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The Minimum TTL field was defined in RFC 1035 as the minimum TTL value for all records in the zone, but this meaning was never really implemented in practice. RFC 2308 officially deprecated this use of the field and repurposed it for negative caching.\", -1)\nconst _hoisted_29 = /*#__PURE__*/_createElementVNode(\"p\", null, \"RFC 2308 “Negative Caching of DNS Queries (DNS NCACHE)” defines how negative caching is to be performed by DNS resolvers. This standard allows the administrator of each DNS zone to specify how long NXDOMAIN responses for the zone are to be cached.\", -1)\nconst _hoisted_30 = /*#__PURE__*/_createElementVNode(\"p\", null, \"It is worth mentioning that DNS caching resolvers may not follow this exactly. They may modify their behavior based on policy or implementation to minimize their cache size or attempt to reduce problems caused by transient NXDOMAIN responses.\", -1)\nconst _hoisted_31 = /*#__PURE__*/_createElementVNode(\"p\", null, \"DNS resolvers that follow RFC 2308 section 5 are expected to cache negative answers, or NXDOMAINs, for this many seconds:\", -1)\nconst _hoisted_32 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"min(the SOA record TTL, SOA record’s Minimum TTL value)\", -1)\nconst _hoisted_33 = /*#__PURE__*/_createElementVNode(\"p\", null, \"That is to say, the NXDOMAIN caching time is the smallest of the SOA record’s own TTL and the Minimum TTL value inside the SOA record. For example, if the TTL of the SOA for ohmcar.org is 15 minutes (900 seconds) and the Minimum TTL value inside the SOA is 5 minutes (300 seconds) then DNS resolvers should cache all ohmcar.org negative responses for 300 seconds.\", -1)\nconst _hoisted_34 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Choosing negative cache TTL\", -1)\nconst _hoisted_35 = /*#__PURE__*/_createElementVNode(\"p\", null, \"As the owner of a DNS zone, it is important to set the negative cache TTL value appropriately. If NXDOMAIN responses are cached for too short a time, then the number of queries to the Name Servers for the zone may be higher than desired. On the other hand, if NXDOMAIN responses are cached for too long, they may cause problems.\", -1)\nconst _hoisted_36 = /*#__PURE__*/_createElementVNode(\"p\", null, \"As an example, suppose a workflow for ohmcar.org includes creating a new DNS record in the zone and then immediately querying for it. If the query were to arrive before the record is fully replicated, then the resolvers might mistakenly cache NXDOMAIN for the new name. This might cause clients to be unable to access the new resource for as long as the negative caching interval.\", -1)\nconst _hoisted_37 = /*#__PURE__*/_createElementVNode(\"p\", null, \"This type of issue can result in sporadic, unpredictable failures that can be frustrating and difficult to track down. To minimize this, select a moderately short negative caching TTL, such as 60 seconds, and be careful not to design workflows where clients might query for a new DNS record before it is fully provisioned and replicated.\", -1)\nconst _hoisted_38 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Remember that the negative caching TTL is the minimum of the SOA record TTL and the Minimum TTL within the SOA. If you select a short SOA record TTL, you may accidentally be specifying a shorter negative caching TTL than you intend!\", -1)\nconst _hoisted_39 = /*#__PURE__*/_createElementVNode(\"p\", null, \"For example, if a zone has a Minimum TTL of 60 seconds but the TTL on the SOA record itself is only 5 seconds, then DNS resolvers will use 5 seconds as the negative cache TTL for all negative responses within that zone.\", -1)\nconst _hoisted_40 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Suggested values\", -1)\nconst _hoisted_41 = /*#__PURE__*/_createElementVNode(\"p\", null, \"For a typical DNS zone hosted where zone transfer is not used, the following values are a safe starting point:\", -1)\nconst _hoisted_42 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"TTL of the SOA record itself\"),\n /*#__PURE__*/_createTextVNode(\": 15 minutes (900 seconds).\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Primary Name Server\"),\n /*#__PURE__*/_createTextVNode(\": Any one of the authoritative Name Servers for the zone.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Responsible Person\"),\n /*#__PURE__*/_createTextVNode(\": A well-monitored email address for the zone, with @ replaced by a period.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Serial Number\"),\n /*#__PURE__*/_createTextVNode(\": Optional. A good value is one when zone transfer is not used.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Refresh Time\"),\n /*#__PURE__*/_createTextVNode(\": Ignored. For safety, set to one hour (3600 seconds).\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Retry Time\"),\n /*#__PURE__*/_createTextVNode(\": Ignored. For safety, set to one hour (3600 seconds).\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Expire Time\"),\n /*#__PURE__*/_createTextVNode(\": Ignored. For safety, set to one day (86400 seconds).\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Minimum TTL\"),\n /*#__PURE__*/_createTextVNode(\": 60 seconds to provide a balance between reducing NXDOMAIN responses through caching and timely expiration of undesirable NXDOMAIN responses.\")\n ])\n], -1)\nconst _hoisted_43 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Other DNS records at the root of the zone\", -1)\nconst _hoisted_44 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The SOA record is never the only record at the root of the zone. In addition to exactly one SOA record at the zone root, there must be a set of Name Server records. Most zones have around 4 Name Server records. The SOA and NS records together form the basic identity and definition of the DNS zone.\", -1)\nconst _hoisted_45 = /*#__PURE__*/_createElementVNode(\"p\", null, \"It is also common to have other DNS records at the root of the zone. MX records to enable mail delivery, TXT records to secure mail delivery, CAA records to specify certificates, DNSKEY and other records if the zone is securely signed, and potentially many others. We will examine these record types in future articles.\", -1)\nconst _hoisted_46 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Finding the SOA record for a zone\", -1)\nconst _hoisted_47 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The SOA record of a zone can be queried with the dig or nslookup command line tools. To find the SOA record for wikipedia.org, use this command:\", -1)\nconst _hoisted_48 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"dig SOA wikipedia.org\", -1)\nconst _hoisted_49 = /*#__PURE__*/_createElementVNode(\"p\", null, \"On operating systems that support nslookup, you can use the following:\", -1)\nconst _hoisted_50 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"nslookup -type=soa wikipedia.org\", -1)\nconst _hoisted_51 = {\n class: \"not-prose text-base mx-auto max-w-lg\",\n autocomplete: \"off\"\n}\n\nimport BlogPost from '@/components/layout/BlogPost.vue';\n\n\nimport { useRouter } from 'vue-router';\nimport { jeff, ruurtjan } from '@/common/authors';\nimport { BlogMeta } from '@/common/blogMeta';\nimport DomainSearch from '@/components/DomainSearch.vue';\nimport CodeBlock from '@/components/micro/CodeBlock.vue';\nimport DnsRecordTypes from '@/views/learning/DnsRecordTypes.vue';\nimport { learningBreadcrumb } from '@/model/Breadcrumb';\nimport Callout from '@/components/layout/CalloutComponent.vue';\nimport { domainNameToUrlPath } from '@/common/domainName';\n\nexport const meta: BlogMeta = {\n tag: 'DNS record types',\n url: '/learning/dns-record-types/soa/',\n breadcrumbs: [learningBreadcrumb, DnsRecordTypes.breadcrumb],\n title: 'The SOA record',\n description: 'DNS SOA records state that authority for a zone starts at a particular point in the tree of DNS names. Learn how they work and how they impact negative caching.',\n overviewDescription: 'DNS SOA records state that authority for a zone starts at a particular point in the tree of DNS names. Learn how they work and how they impact negative caching.',\n overviewImage: '/img/learning/dns-record-types/soa/the-soa-record-type-small.jpg',\n overviewImageAlt: 'DNS records replicated across DNS servers',\n author: jeff,\n editor: ruurtjan,\n img1024x512: 'https://www.nslookup.io/img/learning/dns-record-types/soa/the-soa-record-social.jpg',\n img1200x630: 'https://www.nslookup.io/img/learning/dns-record-types/soa/the-soa-record-social.jpg',\n written: new Date('2022-03-03T21:53:21.428Z'),\n updated: new Date('2023-03-28T11:58:06.945Z'),\n};\n\nconst __default__ = {\n meta,\n};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'RecordTypeSoa',\n setup(__props) {\n\nconst router = useRouter();\n\nfunction redirectTo(domain: string): void {\n router.push(`/domains/${domainNameToUrlPath(domain)}/dns-records/soa/`);\n}\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"ImageObject\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"email\\\": \\\"mailto:ruurtjan@nslookup.io\\\", \\\"image\\\": \\\"https://www.nslookup.io/img/ruurtjan-lg.jpg\\\", \\\"jobTitle\\\": \\\"CEO\\\", \\\"name\\\": \\\"Ruurtjan Pul\\\", \\\"url\\\": \\\"https://www.nslookup.io/about/ruurtjan-pul/\\\" }, \\\"copyrightHolder\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"https://www.nslookup.io/\\\", \\\"email\\\": \\\"hello@nslookup.io\\\" }, \\\"copyrightYear\\\": 2023, \\\"contentUrl\\\": \\\"https://www.nslookup.io/img/learning/dns-record-types/soa/the-soa-record-type.jpg\\\", \\\"license\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\", \\\"acquireLicensePage\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\" } \")\n ]),\n _: 1\n }))\n ])),\n _createVNode(BlogPost, {\n title: meta.title,\n description: meta.description,\n url: `https://www.nslookup.io${meta.url}`,\n breadcrumbs: meta.breadcrumbs,\n img1024x512: meta.img1024x512,\n img1200x630: meta.img1200x630,\n written: meta.written,\n updated: meta.updated,\n author: meta.author,\n editor: meta.editor\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"strong\", _hoisted_1, [\n _createTextVNode(\"All \"),\n _createVNode(_component_router_link, {\n to: \"/learning/what-is-a-dns-zone/\",\n title: \"DNS zones\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(\"DNS zones\")\n ]),\n _: 1\n }),\n _createTextVNode(\" begin with a Start Of Authority (SOA) record. The SOA record states that authority for a zone is starting at a particular point in the global tree of DNS names.\")\n ]),\n _hoisted_2,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"We discuss \"),\n _createVNode(_component_router_link, { to: \"/learning/how-does-domain-name-registration-work/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"domain registration\")\n ]),\n _: 1\n }),\n _createTextVNode(\" in another article, but for now it is important to understand that zone creation is done before domain registration, and that the SOA record is part of the new zone being created.\")\n ]),\n _hoisted_3,\n _hoisted_4,\n _hoisted_5,\n _hoisted_6,\n _hoisted_7,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"The SOA record starts authority for a zone. Alongside the SOA record, the existence of a zone is also defined by a set of \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/ns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"Name Server (NS) records\")\n ]),\n _: 1\n }),\n _createTextVNode(\" at the zone root. The combination of exactly one SOA record and one more NS records (usually around 4) defines the apex or root of the zone, where the zone’s authority starts.\")\n ]),\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"Authority can also end at particular points in the DNS tree below the root of the zone in a process called delegation. We discuss this in depth in our \"),\n _createVNode(_component_router_link, { to: \"/learning/zone-delegation/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"zone delegation\")\n ]),\n _: 1\n }),\n _createTextVNode(\" article, but in summary, a delegation is a set of Name Server (NS) records at a name below the zone root.\")\n ]),\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"It is confusing that NS records are used both at the zone root to identify the Name Servers for the zone and also at points below the zone root as part of delegation. For now, it is important only to remember that the NS records at the root of each zone list the Name Servers that are \"),\n _createVNode(_component_router_link, { to: \"/learning/recursive-vs-authoritative-dns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"authoritative\")\n ]),\n _: 1\n }),\n _createTextVNode(\" for the zone and together with the SOA record form the basic identity of the zone.\")\n ]),\n _createVNode(Callout, {\n icon: \"info\",\n title: \"Zones versus domains\",\n heading: \"h2\"\n }, {\n default: _withCtx(() => [\n _hoisted_8,\n _hoisted_9,\n _hoisted_10\n ]),\n _: 1\n }),\n _hoisted_11,\n _hoisted_12,\n _hoisted_13,\n _hoisted_14,\n _hoisted_15,\n _hoisted_16,\n _hoisted_17,\n _hoisted_18,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_19\n ]),\n _: 1\n }),\n _hoisted_20,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_21\n ]),\n _: 1\n }),\n _hoisted_22,\n _hoisted_23,\n _hoisted_24,\n _hoisted_25,\n _hoisted_26,\n _hoisted_27,\n _hoisted_28,\n _hoisted_29,\n _hoisted_30,\n _hoisted_31,\n _hoisted_32,\n _hoisted_33,\n _hoisted_34,\n _hoisted_35,\n _hoisted_36,\n _hoisted_37,\n _hoisted_38,\n _hoisted_39,\n _hoisted_40,\n _hoisted_41,\n _hoisted_42,\n _hoisted_43,\n _hoisted_44,\n _hoisted_45,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"There is one type of record that can never exist at the root of the zone: CNAME. \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/cname/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"CNAME records\")\n ]),\n _: 1\n }),\n _createTextVNode(\" are forbidden to co-exist with any other record type at any name in the global DNS tree. Some implementations have bent this rule in the past, but most DNS implementations today correctly forbid this. It can be tempting to try to inject a CNAME at the zone root so that ohmcar.org and www.ohmcar.org resolve identically, but this is expressly forbidden in the DNS. There are other solutions to that problem that should be employed instead.\")\n ]),\n _hoisted_46,\n _hoisted_47,\n _hoisted_48,\n _hoisted_49,\n _hoisted_50,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"You can also check the SOA record of any domain name in our \"),\n _createVNode(_component_router_link, { to: \"/soa-lookup/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"SOA lookup\")\n ]),\n _: 1\n }),\n _createTextVNode(\" tool, or by entering it here:\")\n ]),\n _createElementVNode(\"form\", _hoisted_51, [\n _createVNode(DomainSearch, {\n emphasize: \"\",\n buttonText: \"Find SOA record\",\n onSubmitted: redirectTo\n })\n ])\n ]),\n _: 1\n }, 8, [\"title\", \"description\", \"url\", \"breadcrumbs\", \"img1024x512\", \"img1200x630\", \"written\", \"updated\", \"author\", \"editor\"])\n ], 64))\n}\n}\n\n})","import script from \"./RecordTypeSoa.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./RecordTypeSoa.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, createElementVNode as _createElementVNode, createVNode as _createVNode, resolveComponent as _resolveComponent, unref as _unref, normalizeClass as _normalizeClass, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"strong\", { class: \"text-xl leading-8 block font-normal text-gray-500 mt-[1.3333333em]\" }, \"The SRV or \\\"service locator\\\" DNS record type enables service discovery in the DNS. SRV records allow services to be advertised on specific ports and used in an order controlled by the owner of the service. SRV also provides a load balancing feature.\", -1)\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The SRV record type was proposed in the late 1990s in \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc2782\",\n rel: \"noopener noreferrer\"\n }, \"RFC 2782\"),\n /*#__PURE__*/_createTextVNode(\". The SRV record addresses limitations in the DNS around advertising and consuming services. Not all application protocols support SRV, but many do.\")\n], -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full rounded-lg\",\n src: \"/img/learning/dns-record-types/srv/the-dns-srv-record-type.jpg\",\n alt: \"Service location in the DNS\",\n title: \"Service location in the DNS\",\n width: \"1200\",\n height: \"600\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, [\n /*#__PURE__*/_createTextVNode(\"Service location in the DNS. By NsLookup.io. Licensed under \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://creativecommons.org/licenses/by/4.0/\",\n title: \"Creative Commons By 4.0 licence\",\n rel: \"nofollow\"\n }, \"CC By 4.0\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"SRV record format\", -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Each SRV record specifies one possible endpoint for a service. Each record also includes information on how clients should select among the available endpoints. The owner name of the SRV record is an essential part of the format. Like all other records in the DNS, each SRV record also has a Time-to-Live (TTL) value in seconds.\", -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The SRV record format is:\", -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"_Service._Proto.Name TTL SRV Priority Weight Port Target\", -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Let's examine each of the SRV record fields one by one.\", -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"_Service\"),\n /*#__PURE__*/_createTextVNode(\": This is a label in the DNS name that indicates the name of the service. It must begin with an underscore character.\")\n], -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"_Protocol\"),\n /*#__PURE__*/_createTextVNode(\": This is a label in the DNS name that indicates the protocol used by the service. It must begin with an underscore character. Protocol is usually either \\\"_tcp\\\" or \\\"_udp\\\".\")\n], -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Name\"),\n /*#__PURE__*/_createTextVNode(\": The DNS name of the organization or site that is providing the service.\")\n], -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"TTL\"),\n /*#__PURE__*/_createTextVNode(\": The TTL of this record in seconds. The TTL of all SRV records for a single owner name must be identical.\")\n], -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Priority\"),\n /*#__PURE__*/_createTextVNode(\": The priority of this endpoint as a 16-bit unsigned integer value. The SRV record or records with the lowest priority value among endpoints are used first.\")\n], -1)\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Weight\"),\n /*#__PURE__*/_createTextVNode(\": A 16-bit unsigned integer value. Weights are relative. Clients use weight to select randomly among endpoints with identical priority values.\")\n], -1)\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Port\"),\n /*#__PURE__*/_createTextVNode(\": The port number for this endpoint as a 16-bit unsigned integer.\")\n], -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"strong\", null, \"Target\", -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"Priority versus weight\", -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The endpoints with the lowest priority are used first. Weight specifies the relative amount of requests that each endpoint with the same priority should receive.\", -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Clients randomly select one of the endpoints using their weights if multiple SRV records have the same priority. The client adds the weight values and generates a random number between 1 and the sum of the weights to select an endpoint.\", -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"An example of weights\", -1)\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"p\", null, \"If two SRV records have the same priority value and weight values of 100 and 900, a client would generate a random number between 1 and 1000. If the result is 1 through 100, the first endpoint would be used. If the result is 101 through 1000, the second endpoint would be used. The same load balancing would be achieved if the weight values were 10 and 90 because weights are relative.\", -1)\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The same value can be used for all weights if the service owner wants equal load balancing. A value of 1 is typical in this case.\", -1)\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"Service names\", -1)\nconst _hoisted_24 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Many applications have used SRV records over the years. Service names were first collected in \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"http://www.dns-sd.org/servicetypes.html\",\n rel: \"noopener noreferrer\"\n }, \"a temporary registry operated by dns-sd.org\"),\n /*#__PURE__*/_createTextVNode(\". The Internet Assigned Numbers Authority (IANA) now maintains \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml\",\n rel: \"noopener noreferrer\"\n }, \"an official registry of service names\"),\n /*#__PURE__*/_createTextVNode(\". The IANA registry includes whether TCP or UDP is supported and a default port number.\")\n], -1)\nconst _hoisted_25 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"Finding SRV records for a service\", -1)\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"To find the set of endpoints for a service that uses SRV records, a client sends a DNS query of type SRV for a query name in the format \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"_Service._Protocol.Name\"),\n /*#__PURE__*/_createTextVNode(\". The application protocol specifies the service and protocol values in the query name. For Minecraft, the first label is \\\"_minecraft\\\" and the second label is \\\"_tcp\\\".\")\n], -1)\nconst _hoisted_27 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Putting these values together, the query name to discover the example.org Minecraft servers would be \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"_minecraft._tcp.example.org\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_28 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"In-depth with a Minecraft SRV example\", -1)\nconst _hoisted_29 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The SRV record set for the Minecraft servers for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" might look like this:\")\n], -1)\nconst _hoisted_30 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"_minecraft._tcp.example.org 3600 SRV 1 100 25565 mserver1.example.org.\\n_minecraft._tcp.example.org 3600 SRV 1 50 25565 mserver2.example.org.\\n_minecraft._tcp.example.org 3600 SRV 2 100 25565 mserver3.example.org.\", -1)\nconst _hoisted_31 = /*#__PURE__*/_createElementVNode(\"p\", null, \"As we've already seen, the service name is \\\"_minecraft\\\", and the protocol is \\\"_tcp\\\". The TTL for each record is one hour (3600 seconds).\", -1)\nconst _hoisted_32 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The first two endpoints have a priority of 1. Clients contact these first. The third endpoint has a priority of 2 so clients only use it if the first two servers are down. \\\"mserver3\\\" is a fallback server.\", -1)\nconst _hoisted_33 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The weight for the first server is 100, and the weight for the second server is 50. Clients randomly select between these two servers such that two-thirds of requests go to \\\"mserver1\\\" and one-third go to \\\"mserver2\\\".\", -1)\nconst _hoisted_34 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Lastly comes the port and target. The target is the DNS name of the server hosting the endpoint. This example uses the default Minecraft port of 25565. A different port value can be used. The Minecraft server's port configuration must match the port value in the SRV record.\", -1)\nconst _hoisted_35 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, [\n /*#__PURE__*/_createTextVNode(\"Kubernetes uses SRV records for named ports. A named port is an endpoint for a service. The owner name of the SRV record in the DNS is of the form: \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"_my-port-name._my-port-protocol.my-svc.my-namespace.svc.my-zone\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_36 = /*#__PURE__*/_createElementVNode(\"p\", null, \"An example SRV record for a Kubernetes HTTPS endpoint for example.org:\", -1)\nconst _hoisted_37 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"_https._tcp.kubernetes.default.svc.example.org. 3600 SRV 1 100 443 kubernetes.default.svc.example.org.\", -1)\nconst _hoisted_38 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Other SRV examples\", -1)\nconst _hoisted_39 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Many application protocols use SRV records. A few examples:\", -1)\nconst _hoisted_40 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"SIP (Session Initiation Protocol)\"),\n /*#__PURE__*/_createTextVNode(\": SIP uses a typical SRV record set with _sip as the service name. SIP can use either TCP or UDP.\")\n], -1)\nconst _hoisted_41 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"_sip._udp.example.org 3600 SRV 1 100 5060 sip_server.example.org.\", -1)\nconst _hoisted_42 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"XMPP (Extensible Messaging and Presence Protocol)\"),\n /*#__PURE__*/_createTextVNode(\": XMPP generally has two SRV record sets with different service names. \\\"_xmpp-client\\\" is used for client-to-server connections. \\\"_xmpp-server\\\" is used for server-to-server connections.\")\n], -1)\nconst _hoisted_43 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"_xmpp-client._tcp.example.org 3600 SRV 1 100 5060 xmpp_server.example.org.\\n_xmpp-server._tcp.example.org 3600 SRV 1 100 5060 xmpp_server.example.org.\", -1)\nconst _hoisted_44 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Kerberos\"),\n /*#__PURE__*/_createTextVNode(\": Several different SRV records can be defined for locating Kerberos KDCs (Key Distribution Centers). Kerberos supports both TCP and UDP so there will usually be SRV records for both protocols. A SRV for the master KDC can be included. Clients use the \\\"_kpasswd\\\" SRV records when changing passwords.\")\n], -1)\nconst _hoisted_45 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"_kerberos._udp.example.org 3600 SRV 1 100 88 kdc1.example.org.\\n_kerberos._tcp.example.org 3600 SRV 1 100 88 kdc1.example.org.\\n_kerberos-master._tcp.example.org 3600 SRV 1 100 749 kdcm.example.org.\\n_kpasswd._tcp.example.org 3600 SRV 1 100 464 kdc1.example.org.\", -1)\nconst _hoisted_46 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"LDAP (Lightweight Direction Access Protocol)\"),\n /*#__PURE__*/_createTextVNode(\": The service name \\\"_ldap\\\" is used, and only TCP is supported.\")\n], -1)\nconst _hoisted_47 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"_ldap._tcp.example.org 3600 SRV 1 100 389 ldap1.example.org.\\n_ldap._tcp.example.org 3600 SRV 1 100 389 ldap2.example.org.\", -1)\nconst _hoisted_48 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"CalDAV/CardDAV (calendar and address book protocols)\"),\n /*#__PURE__*/_createTextVNode(\": CalDAV and CardDAV each have two possible SRV record sets: one appended by \\\"s\\\" for SSL connections and one without \\\"s\\\" for non-SSL connections.\")\n], -1)\nconst _hoisted_49 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"_caldav._tcp.example.org 3600 SRV 1 100 8008 cal_srv.example.org.\\n_caldavs._tcp.example.org 3600 SRV 1 100 8443 cal_secure_srv.example.org.\\n_carddav._tcp.example.org 3600 SRV 1 100 8008 card_srv.example.org.\\n_carddavs._tcp.example.org 3600 SRV 1 100 8443 card_secure_srv.example.org.\", -1)\nconst _hoisted_50 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"matrix (an open standard real-time communication protocol)\"),\n /*#__PURE__*/_createTextVNode(\": If no SRV exists, the matrix protocol defines alternative DNS lookups used to locate servers.\")\n], -1)\nconst _hoisted_51 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"_matrix._tcp.example.org 3600 SRV 1 100 8448 matrix_server.example.org.\", -1)\nconst _hoisted_52 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Other service location record types\", -1)\nconst _hoisted_53 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Before SRV, the only way to advertise a service was to publish a set of address records for a name. There was no way to provide a port number or order the endpoints.\", -1)\nconst _hoisted_54 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Several other DNS record types exist for service location. These include:\", -1)\nconst _hoisted_55 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"SVCB and HTTPS\"),\n /*#__PURE__*/_createTextVNode(\": The Service Binding (SVCB) record type is a new standard emerging to address the shortcomings of SRV. HTTPS is a variant of SVCB specifically for HTTP clients. The \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/draft-ietf-dnsop-svcb-https-10\",\n rel: \"noopener noreferrer\"\n }, \"SVCB-HTTPS draft\"),\n /*#__PURE__*/_createTextVNode(\" specifies these types.\"),\n /*#__PURE__*/_createElementVNode(\"br\"),\n /*#__PURE__*/_createTextVNode(\"These records are a better version of SRV. They are extensible, can instruct clients to upgrade or switch protocols, and in general improve upon SRV. Even though they are new, they are becoming de facto standard. They are already used by iOS, Chrome, and Firefox.\")\n], -1)\nconst _hoisted_56 = /*#__PURE__*/_createElementVNode(\"strong\", null, \"MX\", -1)\nconst _hoisted_57 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"URI\"),\n /*#__PURE__*/_createTextVNode(\": Introduced in \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc7553\",\n rel: \"noopener noreferrer\"\n }, \"RFC 7553\"),\n /*#__PURE__*/_createTextVNode(\", the URI record type was intended to improve on SRV by storing URIs in the DNS instead of hostnames. This record type is not in widespread use.\")\n], -1)\nconst _hoisted_58 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"AFSDB\"),\n /*#__PURE__*/_createTextVNode(\": This is a DNS record type used to publish servers for AFS (the Andrew File System). \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc1183\",\n rel: \"noopener noreferrer\"\n }, \"RFC 1183\"),\n /*#__PURE__*/_createTextVNode(\" specifies AFSDB. It does not include a way to order endpoints.\")\n], -1)\nconst _hoisted_59 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Looking up SRV records for a name\", -1)\nconst _hoisted_60 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The dig or nslookup command line tools can query SRV records for a DNS name. To find the LDAP SRV records for Google, use this command:\", -1)\nconst _hoisted_61 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"dig SRV _ldap._tcp.google.com\", -1)\nconst _hoisted_62 = /*#__PURE__*/_createElementVNode(\"p\", null, \"On operating systems that support nslookup, you can use the following:\", -1)\nconst _hoisted_63 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"nslookup -type=srv _ldap._tcp.google.com\", -1)\nconst _hoisted_64 = {\n class: \"not-prose text-base mx-auto max-w-lg\",\n autocomplete: \"off\"\n}\nconst _hoisted_65 = { class: \"mx-auto max-w-3xl divide-y-2 divide-gray-200\" }\nconst _hoisted_66 = /*#__PURE__*/_createElementVNode(\"h2\", { class: \"ignore-toc\" }, \"Related questions\", -1)\nconst _hoisted_67 = { class: \"mt-6 space-y-6 divide-y divide-gray-200 [overflow-anchor:none]\" }\nconst _hoisted_68 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg font-medium text-gray-900\" }, \" What TTL should you use for SRV records? \", -1)\nconst _hoisted_69 = { class: \"ml-6 flex h-7 items-center\" }\nconst _hoisted_70 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", { class: \"font-medium text-gray-500\" }, \"A TTL of one hour or more is recommended for SRV records because they tend to be relatively static.\")\n], -1)\nconst _hoisted_71 = /*#__PURE__*/_createElementVNode(\"p\", null, \"SRV record sets can include backup servers with higher priority values. It's not necessary to update the SRV record set when the primary servers are down. Clients will automatically switch to backup servers with no interruption in service. So planning ahead and including backup servers in the SRV record set allows the use of longer TTLs.\", -1)\nconst _hoisted_72 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg font-medium text-gray-900\" }, \" When should you create SRV records? \", -1)\nconst _hoisted_73 = { class: \"ml-6 flex h-7 items-center\" }\nconst _hoisted_74 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", { class: \"font-medium text-gray-500\" }, \"Create SRV records when you deploy servers for an application protocol that supports SRV.\")\n], -1)\nconst _hoisted_75 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Not all application protocols use SRV records. Minecraft uses SRV records so when deploying a Minecraft server, a SRV record is needed. However, web clients do not use SRV. When deploying a new website, no SRV record is needed. But you might create an HTTPS record. Consult the documentation for the service to see if it requires or supports SRV.\", -1)\n\nimport BlogPost from '@/components/layout/BlogPost.vue';\n\n\nimport { useRouter } from 'vue-router';\nimport {\n Disclosure,\n DisclosureButton,\n DisclosurePanel,\n} from '@headlessui/vue';\nimport { ChevronDownIcon } from '@heroicons/vue/24/outline';\nimport { jeff, ruurtjan } from '@/common/authors';\nimport { BlogMeta } from '@/common/blogMeta';\nimport DomainSearch from '@/components/DomainSearch.vue';\nimport CodeBlock from '@/components/micro/CodeBlock.vue';\nimport DnsRecordTypes from '@/views/learning/DnsRecordTypes.vue';\nimport { learningBreadcrumb } from '@/model/Breadcrumb';\nimport Callout from '@/components/layout/CalloutComponent.vue';\nimport { domainNameToUrlPath } from '@/common/domainName';\n\nexport const meta: BlogMeta = {\n tag: 'DNS record types',\n url: '/learning/dns-record-types/srv/',\n breadcrumbs: [learningBreadcrumb, DnsRecordTypes.breadcrumb],\n title: 'The SRV record',\n description: 'The SRV or \"service locator\" DNS record type enables service discovery in the DNS. SRV records allow services to be advertised on specific ports.',\n overviewDescription: 'The SRV or \"service locator\" DNS record type enables service discovery in the DNS. SRV records allow services to be advertised on specific ports.',\n overviewImage: '/img/learning/dns-record-types/srv/the-dns-srv-record-type-small.jpg',\n overviewImageAlt: 'Service location in the DNS',\n author: jeff,\n editor: ruurtjan,\n img1024x512: 'https://www.nslookup.io/img/learning/dns-record-types/srv/the-srv-record-social.jpg',\n img1200x630: 'https://www.nslookup.io/img/learning/dns-record-types/srv/the-srv-record-social.jpg',\n written: new Date('2022-09-13T12:41:22.269Z'),\n updated: new Date('2023-03-28T11:58:16.472Z'),\n};\n\nconst __default__ = {\n meta,\n};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'RecordTypeSrv',\n setup(__props) {\n\nconst router = useRouter();\n\nfunction redirectTo(domain: string): void {\n router.push(`/domains/${domainNameToUrlPath(domain)}/dns-records/srv/`);\n}\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"ImageObject\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"email\\\": \\\"mailto:ruurtjan@nslookup.io\\\", \\\"image\\\": \\\"https://www.nslookup.io/img/ruurtjan-lg.jpg\\\", \\\"jobTitle\\\": \\\"CEO\\\", \\\"name\\\": \\\"Ruurtjan Pul\\\", \\\"url\\\": \\\"https://www.nslookup.io/about/ruurtjan-pul/\\\" }, \\\"copyrightHolder\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"https://www.nslookup.io/\\\", \\\"email\\\": \\\"hello@nslookup.io\\\" }, \\\"copyrightYear\\\": 2023, \\\"contentUrl\\\": \\\"https://www.nslookup.io/img/learning/dns-record-types/srv/the-dns-srv-record-type.jpg\\\", \\\"license\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\", \\\"acquireLicensePage\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\" } \")\n ]),\n _: 1\n }))\n ])),\n _createVNode(BlogPost, {\n title: meta.title,\n description: meta.description,\n url: `https://www.nslookup.io${meta.url}`,\n breadcrumbs: meta.breadcrumbs,\n img1024x512: meta.img1024x512,\n img1200x630: meta.img1200x630,\n written: meta.written,\n updated: meta.updated,\n author: meta.author,\n editor: meta.editor\n }, {\n default: _withCtx(() => [\n _hoisted_1,\n _hoisted_2,\n _hoisted_3,\n _hoisted_4,\n _hoisted_5,\n _hoisted_6,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_7\n ]),\n _: 1\n }),\n _hoisted_8,\n _createElementVNode(\"ul\", null, [\n _hoisted_9,\n _hoisted_10,\n _hoisted_11,\n _hoisted_12,\n _hoisted_13,\n _hoisted_14,\n _hoisted_15,\n _createElementVNode(\"li\", null, [\n _hoisted_16,\n _createTextVNode(\": The DNS hostname for this endpoint. The target may resolve to a \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/cname/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"CNAME record\")\n ]),\n _: 1\n }),\n _createTextVNode(\".\")\n ])\n ]),\n _hoisted_17,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"Priority and weight determine how clients select one of the endpoints in a set of SRV records. Priority is similar to the preference field in \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/mx/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"MX records\")\n ]),\n _: 1\n }),\n _createTextVNode(\". But SRV also includes a random component through the weight field for more dynamic load balancing.\")\n ]),\n _hoisted_18,\n _hoisted_19,\n _hoisted_20,\n _hoisted_21,\n _hoisted_22,\n _hoisted_23,\n _hoisted_24,\n _hoisted_25,\n _hoisted_26,\n _hoisted_27,\n _hoisted_28,\n _hoisted_29,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_30\n ]),\n _: 1\n }),\n _hoisted_31,\n _hoisted_32,\n _hoisted_33,\n _hoisted_34,\n _createVNode(Callout, {\n icon: \"info\",\n title: \"SRV records in Kubernetes\",\n heading: \"h2\"\n }, {\n default: _withCtx(() => [\n _hoisted_35,\n _hoisted_36,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_37\n ]),\n _: 1\n }),\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"For more information on how Kubernetes uses the DNS, read our article on \"),\n _createVNode(_component_router_link, { to: \"/learning/the-life-of-a-dns-query-in-kubernetes/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"the life of a DNS query in Kubernetes\")\n ]),\n _: 1\n }),\n _createTextVNode(\".\")\n ])\n ]),\n _: 1\n }),\n _hoisted_38,\n _hoisted_39,\n _createElementVNode(\"ul\", null, [\n _hoisted_40,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_41\n ]),\n _: 1\n }),\n _hoisted_42,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_43\n ]),\n _: 1\n }),\n _hoisted_44,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_45\n ]),\n _: 1\n }),\n _hoisted_46,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_47\n ]),\n _: 1\n }),\n _hoisted_48,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_49\n ]),\n _: 1\n }),\n _hoisted_50,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_51\n ]),\n _: 1\n })\n ]),\n _hoisted_52,\n _hoisted_53,\n _hoisted_54,\n _createElementVNode(\"ul\", null, [\n _hoisted_55,\n _createElementVNode(\"li\", null, [\n _hoisted_56,\n _createTextVNode(\": The \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/mx/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"Mail Exchange (MX) record type\")\n ]),\n _: 1\n }),\n _createTextVNode(\" was part of the original DNS specifications. It includes a Preference field to order mail servers. Virtually all email transactions continue to use MX records.\")\n ]),\n _hoisted_57,\n _hoisted_58\n ]),\n _hoisted_59,\n _hoisted_60,\n _hoisted_61,\n _hoisted_62,\n _hoisted_63,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"You can also check the SRV records for any domain name in our \"),\n _createVNode(_component_router_link, { to: \"/srv-lookup/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"SRV lookup\")\n ]),\n _: 1\n }),\n _createTextVNode(\" tool or by entering it here:\")\n ]),\n _createElementVNode(\"form\", _hoisted_64, [\n _createVNode(DomainSearch, {\n emphasize: \"\",\n buttonText: \"Find SRV record\",\n onSubmitted: redirectTo\n })\n ]),\n _createElementVNode(\"div\", _hoisted_65, [\n _hoisted_66,\n _createElementVNode(\"div\", _hoisted_67, [\n _createVNode(_unref(Disclosure), {\n as: \"div\",\n class: \"pt-6\"\n }, {\n default: _withCtx(({ open }) => [\n _createVNode(_unref(DisclosureButton), {\n as: \"h3\",\n class: \"ignore-toc flex mt-0 w-full items-start justify-between text-left cursor-pointer text-gray-400\"\n }, {\n default: _withCtx(() => [\n _hoisted_68,\n _createElementVNode(\"span\", _hoisted_69, [\n _createVNode(_unref(ChevronDownIcon), {\n class: _normalizeClass([open ? '-rotate-180' : 'rotate-0', 'h-6 w-6 transform']),\n \"aria-hidden\": \"true\"\n }, null, 8, [\"class\"])\n ])\n ]),\n _: 2\n }, 1024),\n _createVNode(_unref(DisclosurePanel), { class: \"mt-2 pr-12\" }, {\n default: _withCtx(() => [\n _hoisted_70,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"TTL selection in the DNS is often complicated. As we discussed in \"),\n _createVNode(_component_router_link, { to: \"/learning/what-is-a-good-ttl-for-dns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"our article on TTL selection in the DNS\")\n ]),\n _: 1\n }),\n _createTextVNode(\", shorter TTLs give agility, but longer TTLs increase reliability. Longer TTLs can also decrease latency.\")\n ]),\n _hoisted_71\n ]),\n _: 1\n })\n ]),\n _: 1\n }),\n _createVNode(_unref(Disclosure), {\n as: \"div\",\n class: \"pt-6\"\n }, {\n default: _withCtx(({ open }) => [\n _createVNode(_unref(DisclosureButton), {\n as: \"h3\",\n class: \"ignore-toc flex mt-0 w-full items-start justify-between text-left cursor-pointer text-gray-400\"\n }, {\n default: _withCtx(() => [\n _hoisted_72,\n _createElementVNode(\"span\", _hoisted_73, [\n _createVNode(_unref(ChevronDownIcon), {\n class: _normalizeClass([open ? '-rotate-180' : 'rotate-0', 'h-6 w-6 transform']),\n \"aria-hidden\": \"true\"\n }, null, 8, [\"class\"])\n ])\n ]),\n _: 2\n }, 1024),\n _createVNode(_unref(DisclosurePanel), { class: \"mt-2 pr-12\" }, {\n default: _withCtx(() => [\n _hoisted_74,\n _hoisted_75\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ])\n ])\n ]),\n _: 1\n }, 8, [\"title\", \"description\", \"url\", \"breadcrumbs\", \"img1024x512\", \"img1200x630\", \"written\", \"updated\", \"author\", \"editor\"])\n ], 64))\n}\n}\n\n})","import script from \"./RecordTypeSrv.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./RecordTypeSrv.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, unref as _unref, normalizeClass as _normalizeClass, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"strong\", { class: \"text-xl leading-8 block font-normal text-gray-500 mt-[1.3333333em]\" }, \"The TXT or “descriptive text” DNS record type was created to hold human-readable text. It now plays a critical role in the prevention of spam on the Internet.\", -1)\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The TXT record type was introduced in the original DNS specifications (\"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc1034\",\n rel: \"noopener noreferrer\"\n }, \"RFC 1034\"),\n /*#__PURE__*/_createTextVNode(\" and \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc1035\",\n rel: \"noopener noreferrer\"\n }, \"1035\"),\n /*#__PURE__*/_createTextVNode(\") in 1987. They were to be used for notes and text created by DNS administrators. There was originally no definitive purpose for TXT records. They were used for whatever information the DNS administrator thought was useful. This included contact information, the locations and owners of machines, humorous messages, and other administrivia. \")\n], -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full rounded-lg\",\n src: \"/img/learning/dns-record-types/txt/the-txt-record-type.jpg\",\n alt: \"Formatless TXT records have become messy over the years\",\n title: \"Formatless TXT records have become messy over the years\",\n width: \"1200\",\n height: \"600\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, [\n /*#__PURE__*/_createTextVNode(\"Formatless TXT records have become messy over the years. By NsLookup.io. Licensed under \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://creativecommons.org/licenses/by/4.0/\",\n title: \"Creative Commons By 4.0 licence\",\n rel: \"nofollow\"\n }, \"CC By 4.0\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"h2\", { id: \"txt-record-format\" }, \"TXT record format\", -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc1035\",\n rel: \"noopener noreferrer\"\n }, \"RFC 1035\"),\n /*#__PURE__*/_createTextVNode(\" definition of the record data for TXT record is one or more “character-strings”. Each character string can be at most 255 characters long.\")\n], -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"TXT records also have a Time-to-Live value in seconds, like all other DNS records. A simple example TXT record for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" with a TTL of 3600 seconds (one hour) might look like this:\")\n], -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"example.org. 3600 TXT \\\"Welcome to the example domain!\\\"\", -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"p\", null, \"There are a few somewhat confusing aspects of TXT records. Namely, the use of quotation marks and multiple character strings. Quotation marks are not necessary if you are working with TXT records in a DNS provider's web portal. When editing a traditional zone file, quotation marks are required around each string.\", -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Each TXT record can contain multiple character strings. Each character string may contain up to 255 characters. Multiple TXT records may also exist at a single name in the DNS. See our 'related questions' section below for more details.\", -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The examples on this page will use DNS zone file format so will contain quotation marks.\", -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"A real world TXT example\", -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"code\", null, \"icann.org\", -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"pre\", null, \";; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18975\\n;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1\\n\\n;; OPT PSEUDOSECTION:\\n; EDNS: version: 0, flags:; udp: 512\\n;; QUESTION SECTION:\\n;icann.org. IN TXT\\n\\n;; ANSWER SECTION:\\nicann.org. 600 IN TXT \\\"v=spf1 ip4:192.0.32.0/20 ip4:199.91.192.0/21 ip4:64.78.40.0/27 ip4:162.216.194.0/27 ip4:64.78.33.5/32 ip4:64.78.33.6/31 ip4:64.78.48.205/32 ip4:64.78.48.206/31\\\"\\n \\\" ip6:2620:0:2d0::0/48 ip6:2620:0:2830::0/48 ip6:2620:0:2ed0::0/48 include:salesforce.icann.org -all\\\"\", -1)\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The DNS administrator for ICANN has followed SPF requirements and created a single TXT record with two strings. There are two strings because the total length of the SPF record is longer than 255 characters.\", -1)\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Also note that quotation marks surround each character string. These quotation marks are not part of the TXT data. Dig included them so we can see where each string begins and ends.\", -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Uses of the TXT record type\", -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The TXT record was intended for free-form text entered by DNS administrators. Use of the TXT record has been expanded to other applications over the years.\", -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Today, TXT records are mainly used for:\", -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"DKIM\"),\n /*#__PURE__*/_createTextVNode(\" — Domain Keys Identified Mail\")\n], -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"DMARC\"),\n /*#__PURE__*/_createTextVNode(\" — Domain-based Message Authentication, Reporting & Conformance\")\n], -1)\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"MTA-STS\"),\n /*#__PURE__*/_createTextVNode(\" — SMTP MTA Strict Transport Security\")\n], -1)\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Domain verification\")\n], -1)\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"DNS-SD\"),\n /*#__PURE__*/_createTextVNode(\" — DNS Service Discovery\")\n], -1)\nconst _hoisted_24 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"Sender Policy Framework (SPF)\", -1)\nconst _hoisted_25 = /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc7208\",\n rel: \"noopener noreferrer\"\n}, \"RFC 7208\", -1)\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc7208#section-3.1\",\n rel: \"noopener noreferrer\"\n}, \"RFC 7208 section 3.1\", -1)\nconst _hoisted_27 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Below is a very simple SPF record example. This record states that the mail servers at the IP addresses 10.0.0.1 and 10.0.0.2 are permitted to send mail for the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" domain:\")\n], -1)\nconst _hoisted_28 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"example.org. 3600 TXT \\\"v=spf1 ip4:10.0.0.1 ip4:10.0.0.2 -all\\\"\", -1)\nconst _hoisted_29 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"Domain Keys Identified Mail (DKIM)\", -1)\nconst _hoisted_30 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"DKIM is specified in \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc6376\",\n rel: \"noopener noreferrer\"\n }, \"RFC 6376\"),\n /*#__PURE__*/_createTextVNode(\". DKIM uses DNS TXT records to publish the public key from a domain's public-private key pair. This public key is used to securely validate emails signed with a digital signature.\")\n], -1)\nconst _hoisted_31 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Unlike SPF records, the DNS TXT record for DKIM is not created at the root of the domain. The string following \\\"p=\\\" in the record data of the TXT is a public key. An example DKIM record for the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" domain is shown below. (The public key is truncated for readability.)\")\n], -1)\nconst _hoisted_32 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"default._domainkey.example.org. 3600 TXT \\\"v=DKIM1;t=s;p=MIGfMA0GCSqGS...\\\"\", -1)\nconst _hoisted_33 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"Domain-based Message Authentication, Reporting & Conformance (DMARC)\", -1)\nconst _hoisted_34 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"DMARC is specified in \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc7489\",\n rel: \"noopener noreferrer\"\n }, \"RFC 7489\"),\n /*#__PURE__*/_createTextVNode(\". DMARC uses DNS TXT records to specify email policy for a domain. The policy specifies what action to take if SPF or DKIM checks fail on email received from the domain.\")\n], -1)\nconst _hoisted_35 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Like the DKIM record, the DMARC record is not created at root of the domain. An example is shown below. This example specifies that mail which does not pass DMARC checks should be placed in quarantine. Reports should be sent to admin@example.org.\", -1)\nconst _hoisted_36 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"_dmarc.example.org. 3600 TXT \\\"v=DMARC1; p=quarantine; rua=mailto:admin@example.org\\\"\", -1)\nconst _hoisted_37 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"SMTP MTA Strict Transport Security (MTA-STS)\", -1)\nconst _hoisted_38 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"MTA-STS is specified in \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc8461\",\n rel: \"noopener noreferrer\"\n }, \"RFC 8461\"),\n /*#__PURE__*/_createTextVNode(\". MTA-STS allows a mail service provider to declare it accepts Transport Layer Security (TLS) to secure SMTP connections. It can also specify if other SMTP servers should refuse to deliver email to the domain if TLS is unavailable.\")\n], -1)\nconst _hoisted_39 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Below is a simple example of a TXT record for MTA-STS. The existence of this record signals that SMTP servers should attempt to retrieve the MTA-STS policy for the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" domain using an HTTPS get request. This record also gives the current policy ID.\")\n], -1)\nconst _hoisted_40 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"_mta-sts.example.org. 3600 TXT \\\"v=STSv1; id=20220601120000Z;\\\"\", -1)\nconst _hoisted_41 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"Domain verification\", -1)\nconst _hoisted_42 = /*#__PURE__*/_createElementVNode(\"p\", null, \"In recent years it has become popular to use a DNS TXT record to prove ownership of a domain. A service provider gives the domain's administrator a challenge string. The administrator must publish the challenge string in a TXT record in their DNS zone. The service provider performs a DNS query for the TXT record and verifies that the challenge string has been published. This proves that the administrator controls DNS for the domain.\", -1)\nconst _hoisted_43 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The format of the domain verification TXT record varies with provider. Always follow your provider's instructions exactly. The name of the service is usually included in the challenge string, so to verify a domain with Google the record might look something like this:\", -1)\nconst _hoisted_44 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"example.org. 3600 TXT \\\"google=6e6922db-e3e6-4a36-904e-a805c28087fa\\\"\", -1)\nconst _hoisted_45 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The IETF draft \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://www.ietf.org/archive/id/draft-sahib-domain-verification-techniques-03.html\",\n rel: \"noopener noreferrer\"\n }, \"sahib-domain-verification-techniques\"),\n /*#__PURE__*/_createTextVNode(\" contains a survey of current uses of this method.\")\n], -1)\nconst _hoisted_46 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"DNS Service Discovery (DNS-SD)\", -1)\nconst _hoisted_47 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"DNS-SD is specified in \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc6763\",\n rel: \"noopener noreferrer\"\n }, \"RFC 6763\"),\n /*#__PURE__*/_createTextVNode(\". DNS-SD allows services to be discovered by application clients through the DNS. This is an alternative to SRV records. The record data of the TXT record contains a set of key/value pairs preceded by length bytes. DNS-SD is not currently in widespread use.\")\n], -1)\nconst _hoisted_48 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Finding TXT records for a zone\", -1)\nconst _hoisted_49 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The TXT records for a zone can be queried with the dig or nslookup command line tools. To find the mail servers for wikipedia.org, use this command:\", -1)\nconst _hoisted_50 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"dig TXT wikipedia.org\", -1)\nconst _hoisted_51 = /*#__PURE__*/_createElementVNode(\"p\", null, \"On operating systems that support nslookup, you can use the following:\", -1)\nconst _hoisted_52 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"nslookup -type=txt wikipedia.org\", -1)\nconst _hoisted_53 = {\n class: \"not-prose text-base mx-auto max-w-lg\",\n autocomplete: \"off\"\n}\nconst _hoisted_54 = { class: \"mx-auto max-w-3xl divide-y-2 divide-gray-200\" }\nconst _hoisted_55 = /*#__PURE__*/_createElementVNode(\"h2\", { class: \"ignore-toc\" }, \"Related questions\", -1)\nconst _hoisted_56 = { class: \"mt-6 space-y-6 divide-y divide-gray-200 [overflow-anchor:none]\" }\nconst _hoisted_57 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg font-medium text-gray-900\" }, \" Should I enter quotation marks in TXT records? \", -1)\nconst _hoisted_58 = { class: \"ml-6 flex h-7 items-center\" }\nconst _hoisted_59 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", { class: \"font-medium text-gray-500\" }, \"You need quotation marks when working with standard DNS zone files but not when typing TXT data into a DNS provider's web portal. Consult your DNS provider's documentation if you are unsure.\")\n], -1)\nconst _hoisted_60 = /*#__PURE__*/_createElementVNode(\"p\", null, \"If you were to look at a DNS message as it travels across the Internet, you would not find quotation marks around TXT character strings.\", -1)\nconst _hoisted_61 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Quotation marks around the character strings are required in DNS zone files. The DNS specifications call this “presentation format”. The quotation marks are not treated as part of the TXT record data.\", -1)\nconst _hoisted_62 = /*#__PURE__*/_createElementVNode(\"p\", null, \"A typical TXT record in a zone file might look like this:\", -1)\nconst _hoisted_63 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"example.org. 3600 TXT \\\"apple banana pear\\\"\", -1)\nconst _hoisted_64 = /*#__PURE__*/_createElementVNode(\"p\", null, \"This TXT record's data is a single character string consisting of three words separated by spaces. When the file is read, the quotation marks are discarded.\", -1)\nconst _hoisted_65 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg font-medium text-gray-900\" }, \" How many TXT records should I have? \", -1)\nconst _hoisted_66 = { class: \"ml-6 flex h-7 items-center\" }\nconst _hoisted_67 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", { class: \"font-medium text-gray-500\" }, \"The DNS specification allows multiple TXT records to exist. For human-readable data you can use any combination of multiple strings and multiple TXT records.\")\n], -1)\nconst _hoisted_68 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"TXT records for other applications must follow required standards. Using SPF as an example, \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc7208#section-3\",\n rel: \"noopener noreferrer\"\n }, \"RFC 7208 section 3\"),\n /*#__PURE__*/_createTextVNode(\" specifies that a single TXT record must be used for SPF. SPF data longer than 255 characters must be broken up into multiple strings.\")\n], -1)\nconst _hoisted_69 = /*#__PURE__*/_createElementVNode(\"p\", null, \"It is common to see multiple TXT records today in the DNS. One TXT might be for SPF and others might exist for domain verification or other uses. For example this record set contains a SPF record and a domain verification record:\", -1)\nconst _hoisted_70 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"example.org. 3600 TXT \\\"v=spf1 ip4:10.0.0.1 ip4:10.0.0.2 -all\\\"\\nexample.org. 3600 TXT \\\"google=6e6922db-e3e6-4a36-904e-a805c28087fa\\\"\", -1)\nconst _hoisted_71 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg font-medium text-gray-900\" }, \" How large can TXT records be? \", -1)\nconst _hoisted_72 = { class: \"ml-6 flex h-7 items-center\" }\nconst _hoisted_73 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", { class: \"font-medium text-gray-500\" }, \"The RFCs do not impose a size limit on TXT records but there are practical considerations that are important.\")\n], -1)\nconst _hoisted_74 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"DNS can be transported over UDP or TCP. It is best to keep the total size of the TXT record set small enough that TCP is not required. If possible, keep the total size of the DNS response message below 512 bytes. However this may not always be practical. Most modern DNS resolvers support UDP payloads larger than 512 bytes. A more realistic goal for the DNS response size is 1232 bytes. \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://dnsflagday.net\",\n rel: \"noopener noreferrer\"\n }, \"DNS Flag Day\"),\n /*#__PURE__*/_createTextVNode(\" is an industry effort to set a uniform and safe upper bound for DNS UDP payload size.\")\n], -1)\nconst _hoisted_75 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Exceeding a DNS response size of 1232 bytes for DNS queries for your domain is problematic for these reasons:\", -1)\nconst _hoisted_76 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, \"DNS requests made by legitimate clients will take longer to complete. This increases latency.\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Malicious parties may use the domain as part of DNS Distributed Denial-of-Service (DDoS) attacks. Botnets may query the domain in an attempt to overwhelm resolvers with expensive TCP requests.\")\n], -1)\nconst _hoisted_77 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Limiting the amount of TXT data as much as possible reduces latency and protects against abuse.\", -1)\n\nimport BlogPost from '@/components/layout/BlogPost.vue';\n\n\nimport { useRouter } from 'vue-router';\nimport {\n Disclosure,\n DisclosureButton,\n DisclosurePanel,\n} from '@headlessui/vue';\nimport { ChevronDownIcon } from '@heroicons/vue/24/outline';\nimport { jeff, ruurtjan } from '@/common/authors';\nimport { BlogMeta } from '@/common/blogMeta';\nimport DnsRecordTypes from '@/views/learning/DnsRecordTypes.vue';\nimport DomainSearch from '@/components/DomainSearch.vue';\nimport CodeBlock from '@/components/micro/CodeBlock.vue';\nimport { learningBreadcrumb } from '@/model/Breadcrumb';\nimport { domainNameToUrlPath } from '@/common/domainName';\n\nexport const meta: BlogMeta = {\n tag: 'DNS record types',\n url: '/learning/dns-record-types/txt/',\n breadcrumbs: [learningBreadcrumb, DnsRecordTypes.breadcrumb],\n title: 'The TXT record',\n description: 'The TXT or “descriptive text” DNS record type was created to hold human-readable text but now plays a critical role in the prevention of spam on the Internet.',\n overviewImage: '/img/learning/dns-record-types/txt/the-txt-record-type-small.jpg',\n overviewImageAlt: 'Mail authentication before TXT records',\n author: jeff,\n editor: ruurtjan,\n overviewDescription: 'The TXT or “descriptive text” DNS record type was created to hold human-readable text but now plays a critical role in the prevention of spam on the Internet.',\n img1024x512: 'https://www.nslookup.io/img/learning/dns-record-types/txt/the-txt-record-social.jpg',\n img1200x630: 'https://www.nslookup.io/img/learning/dns-record-types/txt/the-txt-record-social.jpg',\n written: new Date('2022-06-21T13:26:46.745Z'),\n updated: new Date('2023-03-28T11:58:24.570Z'),\n};\n\nconst __default__ = {\n meta,\n};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'RecordTypeTxt',\n setup(__props) {\n\nconst router = useRouter();\n\nfunction redirectTo(domain: string): void {\n router.push(`/domains/${domainNameToUrlPath(domain)}/dns-records/txt/`);\n}\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"ImageObject\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"email\\\": \\\"mailto:ruurtjan@nslookup.io\\\", \\\"image\\\": \\\"https://www.nslookup.io/img/ruurtjan-lg.jpg\\\", \\\"jobTitle\\\": \\\"CEO\\\", \\\"name\\\": \\\"Ruurtjan Pul\\\", \\\"url\\\": \\\"https://www.nslookup.io/about/ruurtjan-pul/\\\" }, \\\"copyrightHolder\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"https://www.nslookup.io/\\\", \\\"email\\\": \\\"hello@nslookup.io\\\" }, \\\"copyrightYear\\\": 2023, \\\"contentUrl\\\": \\\"https://www.nslookup.io/img/learning/dns-record-types/txt/the-txt-record-type.jpg\\\", \\\"license\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\", \\\"acquireLicensePage\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\" } \")\n ]),\n _: 1\n }))\n ])),\n _createVNode(BlogPost, {\n title: meta.title,\n description: meta.description,\n url: `https://www.nslookup.io${meta.url}`,\n breadcrumbs: meta.breadcrumbs,\n img1024x512: meta.img1024x512,\n img1200x630: meta.img1200x630,\n written: meta.written,\n updated: meta.updated,\n author: meta.author,\n editor: meta.editor\n }, {\n default: _withCtx(() => [\n _hoisted_1,\n _hoisted_2,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"TXT records were used this way until 2003. In 2003 efforts began to fight back against spam and other abuses of email. This led to the creation of \"),\n _createVNode(_component_router_link, { to: \"/learning/spf-a-practical-guide/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"SPF (Sender Policy Framework)\")\n ]),\n _: 1\n }),\n _createTextVNode(\". SPF stores email authority information in TXT records. Other uses for the TXT record type have been added over the years.\")\n ]),\n _hoisted_3,\n _hoisted_4,\n _hoisted_5,\n _hoisted_6,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_7\n ]),\n _: 1\n }),\n _hoisted_8,\n _hoisted_9,\n _hoisted_10,\n _hoisted_11,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"Let's examine the actual TXT response for \"),\n _hoisted_12,\n _createTextVNode(\". At the time this page was written, the TXT response using dig or our \"),\n _createVNode(_component_router_link, { to: \"/txt-lookup/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"TXT lookup\")\n ]),\n _: 1\n }),\n _createTextVNode(\" tool is:\")\n ]),\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_13\n ]),\n _: 1\n }),\n _hoisted_14,\n _hoisted_15,\n _hoisted_16,\n _hoisted_17,\n _hoisted_18,\n _createElementVNode(\"ul\", null, [\n _createElementVNode(\"li\", null, [\n _createElementVNode(\"strong\", null, [\n _createVNode(_component_router_link, { to: \"/learning/spf-a-practical-guide/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"SPF\")\n ]),\n _: 1\n })\n ]),\n _createTextVNode(\" — Sender Policy Framework\")\n ]),\n _hoisted_19,\n _hoisted_20,\n _hoisted_21,\n _hoisted_22,\n _hoisted_23\n ]),\n _hoisted_24,\n _createElementVNode(\"p\", null, [\n _createVNode(_component_router_link, { to: \"/learning/spf-a-practical-guide/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"SPF\")\n ]),\n _: 1\n }),\n _createTextVNode(\" is specified in \"),\n _hoisted_25,\n _createTextVNode(\". SPF uses DNS TXT records to list the mail servers permitted to send email for a domain. The creators of SPF used TXT records out of convenience. There was an attempt to create a dedicated DNS record type for SPF but this was officially deprecated in \"),\n _hoisted_26,\n _createTextVNode(\".\")\n ]),\n _hoisted_27,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_28\n ]),\n _: 1\n }),\n _hoisted_29,\n _hoisted_30,\n _hoisted_31,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_32\n ]),\n _: 1\n }),\n _hoisted_33,\n _hoisted_34,\n _hoisted_35,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_36\n ]),\n _: 1\n }),\n _hoisted_37,\n _hoisted_38,\n _hoisted_39,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_40\n ]),\n _: 1\n }),\n _hoisted_41,\n _hoisted_42,\n _hoisted_43,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_44\n ]),\n _: 1\n }),\n _hoisted_45,\n _hoisted_46,\n _hoisted_47,\n _hoisted_48,\n _hoisted_49,\n _hoisted_50,\n _hoisted_51,\n _hoisted_52,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"You can also check the TXT records of any domain name in our \"),\n _createVNode(_component_router_link, { to: \"/txt-lookup/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"TXT lookup\")\n ]),\n _: 1\n }),\n _createTextVNode(\" tool, or by entering it here:\")\n ]),\n _createElementVNode(\"form\", _hoisted_53, [\n _createVNode(DomainSearch, {\n emphasize: \"\",\n buttonText: \"Find TXT records\",\n onSubmitted: redirectTo\n })\n ]),\n _createElementVNode(\"div\", _hoisted_54, [\n _hoisted_55,\n _createElementVNode(\"div\", _hoisted_56, [\n _createVNode(_unref(Disclosure), {\n as: \"div\",\n class: \"pt-6\"\n }, {\n default: _withCtx(({ open }) => [\n _createVNode(_unref(DisclosureButton), {\n as: \"h3\",\n class: \"ignore-toc flex mt-0 w-full items-start justify-between text-left cursor-pointer text-gray-400\"\n }, {\n default: _withCtx(() => [\n _hoisted_57,\n _createElementVNode(\"span\", _hoisted_58, [\n _createVNode(_unref(ChevronDownIcon), {\n class: _normalizeClass([open ? '-rotate-180' : 'rotate-0', 'h-6 w-6 transform']),\n \"aria-hidden\": \"true\"\n }, null, 8, [\"class\"])\n ])\n ]),\n _: 2\n }, 1024),\n _createVNode(_unref(DisclosurePanel), { class: \"mt-2 pr-12\" }, {\n default: _withCtx(() => [\n _hoisted_59,\n _hoisted_60,\n _hoisted_61,\n _hoisted_62,\n _hoisted_63,\n _hoisted_64\n ]),\n _: 1\n })\n ]),\n _: 1\n }),\n _createVNode(_unref(Disclosure), {\n as: \"div\",\n class: \"pt-6\"\n }, {\n default: _withCtx(({ open }) => [\n _createVNode(_unref(DisclosureButton), {\n as: \"h3\",\n class: \"ignore-toc flex mt-0 w-full items-start justify-between text-left cursor-pointer text-gray-400\"\n }, {\n default: _withCtx(() => [\n _hoisted_65,\n _createElementVNode(\"span\", _hoisted_66, [\n _createVNode(_unref(ChevronDownIcon), {\n class: _normalizeClass([open ? '-rotate-180' : 'rotate-0', 'h-6 w-6 transform']),\n \"aria-hidden\": \"true\"\n }, null, 8, [\"class\"])\n ])\n ]),\n _: 2\n }, 1024),\n _createVNode(_unref(DisclosurePanel), { class: \"mt-2 pr-12\" }, {\n default: _withCtx(() => [\n _hoisted_67,\n _hoisted_68,\n _hoisted_69,\n _hoisted_70\n ]),\n _: 1\n })\n ]),\n _: 1\n }),\n _createVNode(_unref(Disclosure), {\n as: \"div\",\n class: \"pt-6\"\n }, {\n default: _withCtx(({ open }) => [\n _createVNode(_unref(DisclosureButton), {\n as: \"h3\",\n class: \"ignore-toc flex mt-0 w-full items-start justify-between text-left cursor-pointer text-gray-400\"\n }, {\n default: _withCtx(() => [\n _hoisted_71,\n _createElementVNode(\"span\", _hoisted_72, [\n _createVNode(_unref(ChevronDownIcon), {\n class: _normalizeClass([open ? '-rotate-180' : 'rotate-0', 'h-6 w-6 transform']),\n \"aria-hidden\": \"true\"\n }, null, 8, [\"class\"])\n ])\n ]),\n _: 2\n }, 1024),\n _createVNode(_unref(DisclosurePanel), { class: \"mt-2 pr-12\" }, {\n default: _withCtx(() => [\n _hoisted_73,\n _hoisted_74,\n _hoisted_75,\n _hoisted_76,\n _hoisted_77\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ])\n ])\n ]),\n _: 1\n }, 8, [\"title\", \"description\", \"url\", \"breadcrumbs\", \"img1024x512\", \"img1200x630\", \"written\", \"updated\", \"author\", \"editor\"])\n ], 64))\n}\n}\n\n})","import script from \"./RecordTypeTxt.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./RecordTypeTxt.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, unref as _unref, normalizeClass as _normalizeClass, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"strong\", { class: \"text-xl leading-8 block font-normal text-gray-500 mt-[1.3333333em]\" }, \"DomainKeys Identified Mail (DKIM) adds public key cryptography to the Simple Mail Transfer Protocol (SMTP). Email for the domain is digitally signed by the sending mail server using the private key for the domain. Receiving mail servers use the public key from the domain's DKIM record to validate that messages have not been tampered with.\", -1)\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"DKIM is specified in \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc6376\",\n rel: \"noopener noreferrer\"\n }, \"RFC 6376\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full rounded-lg\",\n src: \"/img/learning/dkim-a-practical-guide/dns-dkim-records.jpg\",\n alt: \"DKIM adds cryptography to email\",\n title: \"DKIM adds cryptography to email\",\n width: \"1200\",\n height: \"600\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, [\n /*#__PURE__*/_createTextVNode(\"DKIM adds cryptography to email. By NsLookup.io. Licensed under \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://creativecommons.org/licenses/by/4.0/\",\n title: \"Creative Commons By 4.0 licence\",\n rel: \"nofollow\"\n }, \"CC By 4.0\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"How DKIM works\", -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"p\", null, \"A public key is published in a DNS DKIM record for the domain. The corresponding private key is used to sign email messages sent from the domain. Since the public key can be looked up in the DNS, all receiving mail servers can retrieve the public key from the DNS and use it to validate email signatures for the domain.\", -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"Signing outgoing messages\", -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Each email sent from the domain is signed just before the message is transmitted. To sign each email, the sending Mail Transfer Agent (MTA) normalizes the message following the rules in \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc6376\",\n rel: \"noopener noreferrer\"\n }, \"RFC 6376\"),\n /*#__PURE__*/_createTextVNode(\". Then it creates a hash of the normalized email and uses the domain's private key to generate a cryptographic signature of the hash. The signature is inserted into the email message in the \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"DKIM-Signature\"),\n /*#__PURE__*/_createTextVNode(\" header field.\")\n], -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"Validating received messages\", -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"When email is received, the receiving mail server examines the \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"DKIM-Signature\"),\n /*#__PURE__*/_createTextVNode(\" header field and performs a DNS lookup to retrieve the DKIM record for the domain. The DKIM record contains the public key for the domain. The receiving mail server normalizes the message and computes the hash, and then uses the domain's public key from the DKIM record to cryptographically validate that the email message has not been altered.\")\n], -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"DMARC is required to prevent unsigned mail\", -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"p\", null, \"DMARC policy requires that all email from the domain pass both SPF and DKIM authentication checks. Unsigned mail from spammers would be rejected or placed in quarantine.\", -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Yes, a domain may have multiple DKIM records. Each DKIM record publishes the public key for a different private key.\")\n], -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Multiple DKIM records are common. DKIM uses \\\"selectors\\\" to allow multiple DKIM records (see \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc6376#section-3.1\",\n rel: \"noopener noreferrer\"\n }, \"RFC 6376 section 3.1\"),\n /*#__PURE__*/_createTextVNode(\").\")\n], -1)\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"p\", null, \"There are two reasons why a domain might have multiple DKIM records:\", -1)\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"ol\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Multiple email providers\"),\n /*#__PURE__*/_createTextVNode(\": A domain may use more than one email provider, for example, MailChimp and Google Workspaces. Each provider will have their own private and public keys for DKIM.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Key rollover\"),\n /*#__PURE__*/_createTextVNode(\": It is a good security practice to periodically roll the DKIM key for a domain. When keys are rolled, there will be a short period of time when the old key and the new key are both published in different DKIM records.\")\n ])\n], -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"The DKIM record format\", -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"Where are DKIM records stored?\", -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"DKIM records are stored in the DNS for a domain using the label \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"_domainkey\"),\n /*#__PURE__*/_createTextVNode(\" preceded by an optional selector. If no selector is being used, the DKIM record for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" would be at \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"_domainkey.example.org\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"However, a DKIM record at \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"_domainkey.example.org\"),\n /*#__PURE__*/_createTextVNode(\" would be unusual. DKIM records are usually published with an additional label called a selector. A DKIM selector is a short text string that identifies, or \\\"selects\\\", among multiple DKIM records.\")\n], -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The selector is the first label in the name where the DKIM record is stored in the DNS. If the selector for one of the DKIM records for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" is \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"blue\"),\n /*#__PURE__*/_createTextVNode(\" then the DKIM record would be at \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"blue._domainkey.example.org\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Many email providers who support DKIM instruct their customers to insert a CNAME record instead of a DKIM record into the DNS zone for the domain. The target of the CNAME is a DKIM record in TXT format, usually in a DNS zone owned by the email provider.\", -1)\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"p\", null, \"This is done because DKIM records can change, for example when the DKIM keys are rolled. If the customer uses a CNAME, then the customer's domain doesn't have to be changed at all. The key rollover DKIM record change can be performed by the email provider. This greatly reduces the administrative burden on the customer.\", -1)\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"DKIM format\", -1)\nconst _hoisted_24 = /*#__PURE__*/_createElementVNode(\"p\", null, \"DKIM records are TXT record that contain tag/value pairs. The tag's name is followed by an equals sign and then the tag's value. Tags are separated by semicolons. This format is identical to the format used in DMARC records.\", -1)\nconst _hoisted_25 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Below is a current DKIM record for Google. This DKIM record has the selector \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"20210112\"),\n /*#__PURE__*/_createTextVNode(\". This is probably the date the key was generated. The \\\"k\\\" tag says that this is an RSA key. All mail servers must support the \\\"rsa\\\" key type. The long key string is omitted for brevity:\")\n], -1)\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"20210112._domainkey.google.com. 3600 TXT \\\"v=DKIM1; k=rsa; p={key string omitted}\\\"\", -1)\nconst _hoisted_27 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"This DKIM record will be applied to any email message sent by Google whose \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"DKIM-Signature\"),\n /*#__PURE__*/_createTextVNode(\" specifies the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"20210112\"),\n /*#__PURE__*/_createTextVNode(\" selector.\")\n], -1)\nconst _hoisted_28 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"DKIM tags\", -1)\nconst _hoisted_29 = /*#__PURE__*/_createElementVNode(\"p\", null, \"DKIM tags specify attributes of a DKIM key, including the public key itself. Every DKIM record must begin with the version tag \\\"v\\\". Its value must be \\\"DKIM1\\\". More versions may be added in the future. All other tags are optional and may appear in any order. DKIM is case-insensitive. Either upper- or lower-case may be used.\", -1)\nconst _hoisted_30 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The Internet Assigned Numbers Authority (IANA) maintains the official \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://www.iana.org/assignments/dkim-parameters/dkim-parameters.xhtml\",\n rel: \"noopener noreferrer\"\n }, \"registry of DKIM tags\"),\n /*#__PURE__*/_createTextVNode(\". The current set of DKIM tags are:\")\n], -1)\nconst _hoisted_31 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"v\\\"\"),\n /*#__PURE__*/_createTextVNode(\" Version. The value must be \\\"DKIM1\\\". This tag must appear first in every DKIM record.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"k\\\"\"),\n /*#__PURE__*/_createTextVNode(\" Key type. Most often \\\"rsa\\\", which is the default, but \\\"ed25519\\\" was added in \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc8032\",\n rel: \"noopener noreferrer\"\n }, \"RFC 8032\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"p\\\"\"),\n /*#__PURE__*/_createTextVNode(\" Public key data. This tag is required in every DKIM record. It contains the public key in base64 format.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"h\\\"\"),\n /*#__PURE__*/_createTextVNode(\" Acceptable hash algorithms. A colon-separated list of the hash algorithms that might be used to sign messages.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"n\\\"\"),\n /*#__PURE__*/_createTextVNode(\" Notes. Human-readable text containing notes for administrators.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"s\\\"\"),\n /*#__PURE__*/_createTextVNode(\" Service type. The type of service this key may be used for, may be \\\"*\\\" for all services or \\\"email\\\". Not to be confused with the \\\"s\\\" tag that can appear in the \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"DKIM-Signature\"),\n /*#__PURE__*/_createTextVNode(\" field of an email header!\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"t\\\"\"),\n /*#__PURE__*/_createTextVNode(\" Flags. A colon-separated list of flags. Valid flag values are \\\"y\\\" and \\\"s\\\". Use \\\"y\\\" to indicate that DKIM is in testing mode. Use \\\"s\\\" to indicate that the domain in the \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"DKIM-Signature\"),\n /*#__PURE__*/_createTextVNode(\" must exactly match the domain the message was sent from (and must not be a subdomain).\")\n ])\n], -1)\nconst _hoisted_32 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Finding DKIM records for a domain\", -1)\nconst _hoisted_33 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Like SPF and DMARC, DKIM records are stored as TXT records in the DNS. So the dig or nslookup command line tools with query type TXT can be used.\", -1)\nconst _hoisted_34 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Unlike SPF and DMARC, however, a little more information is needed to know what DNS name to use for the TXT lookup because DKIM often uses selectors.\", -1)\nconst _hoisted_35 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"You can use the \\\"show original\\\" option in Gmail (or a similar option in your mail client) to view a raw email message and find the \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"DKIM-Signature\"),\n /*#__PURE__*/_createTextVNode(\". Here is an example from a recent email sent by Google:\")\n], -1)\nconst _hoisted_36 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;\\nd=google.com; s=20210112;\\nh=to:from:subject:message-id:list-id:feedback-id:list-unsubscribe\\n:precedence:reply-to:date:mime-version:from:to:cc:subject:date;\\nbh=20sEX7VfkwWYovzA9s67DASRk/vrLDfnoMIxPqE3RWY=;\\nb=dOpodEh2qKx2TzLIxvtjCG4NHbdWHUcAC4pw018ABPS2rEGXCIhBD5nbX0kUMrLJ6E\\nNMCX7p5qW+HfBghAxWTk1q2dWbnMNtalpBYFgNdxgU6DtEuwiuZIrMGJUl32pfgttbzq\\n/CnNS6z6nLkEoUWXpwXNMBmYhPpC7/26MFF324A6l71bAKUQDfb/QNWsYyAuRwNHnHnS\\nCgTB1dERPMdgl9YJb6PiB3UIV8PlOsA3jYq1AHzMEICBaqK/Qr6SfwNA6x0gwkdfszlt\\nLMwNVR8i7/VZkUjSHEZPbB8tYiQedg6oW+0eCB/GYia2V3qqFIfudg3pYAYkG+jugbtZ\\nHVmg==\", -1)\nconst _hoisted_37 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"DKIM-Signature\"),\n /*#__PURE__*/_createTextVNode(\" is long and includes many fields, including the header fields that were signed and a digital signature of the message.\")\n], -1)\nconst _hoisted_38 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"But only the \\\"s\\\" and \\\"d\\\" tags are needed to find the DKIM record. The \\\"s\\\" tag gives the selector and the \\\"d\\\" tag gives the domain. So in this example, the DKIM selector is \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"20210112\"),\n /*#__PURE__*/_createTextVNode(\" and the DKIM domain is \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"google.com\"),\n /*#__PURE__*/_createTextVNode(\". Combine these two strings with \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"_domainkey\"),\n /*#__PURE__*/_createTextVNode(\" in between to determine the DNS lookup name for the DKIM record: \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"20210112._domainkey.google.com\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_39 = /*#__PURE__*/_createElementVNode(\"p\", null, \"This name can be looked up using dig with query type TXT to find the DKIM record for this message:\", -1)\nconst _hoisted_40 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"dig +short txt 20210112._domainkey.google.com\\n\\\"v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtnbQAeqvEP2pG2L540W9JvVU7qy767Zs83Hjw34PCkZ9/9dWE6cK+CYaMNIQqTGfwq4uUe3diBuz3Uikkr+WPMj9AuxtxJqUAO8PsZ2Y5DneFpz5kVesC9/rtXgCwgYOmO\\\" \\\"9UjSy4IN11ewXUBuCH+zp2v5Abv5T0Lol/nWl8wLgRI1IesstingY4cnSfo3Pq3U0I1GAxdNFCK2FPedPpg4sdPpHqtxVvRLMLamRKoUfySBMjpXuMNL0UeCizmFfdUL73ZdiS+MNxGECzFNmeCngFBscLQN++urvfB9OqHQrbxLIwNyni3KMbE/E+cxPkx4KxhyGHSU2klV1vvIAHfwIDAQAB\\\"\", -1)\nconst _hoisted_41 = /*#__PURE__*/_createElementVNode(\"p\", null, \"On operating systems that support nslookup, you could use the following:\", -1)\nconst _hoisted_42 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"nslookup -type=TXT 20210112._domainkey.google.com.\", -1)\nconst _hoisted_43 = {\n class: \"not-prose text-base mx-auto max-w-lg\",\n autocomplete: \"off\"\n}\nconst _hoisted_44 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"You may also need DMARC and SPF\", -1)\nconst _hoisted_45 = /*#__PURE__*/_createElementVNode(\"p\", null, \"DKIM is only part of the story for securing email. There are three pillars of email security:\", -1)\nconst _hoisted_46 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Domain-keys Identified Mail (DKIM)\"),\n /*#__PURE__*/_createTextVNode(\": DKIM uses public key cryptography to validate the sender's authenticity and to protect email messages from tampering.\")\n], -1)\nconst _hoisted_47 = /*#__PURE__*/_createElementVNode(\"p\", null, \"While adding DKIM to your domain is a good start, consider adding SPF and DMARC to protect your domain and brand from abuse.\", -1)\nconst _hoisted_48 = { class: \"mx-auto max-w-3xl divide-y-2 divide-gray-200\" }\nconst _hoisted_49 = /*#__PURE__*/_createElementVNode(\"h2\", { class: \"ignore-toc\" }, \"Related questions\", -1)\nconst _hoisted_50 = { class: \"mt-6 space-y-6 divide-y divide-gray-200 [overflow-anchor:none]\" }\nconst _hoisted_51 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg font-medium text-gray-900\" }, \" How does DKIM prevent man-in-the-middle attacks? \", -1)\nconst _hoisted_52 = { class: \"ml-6 flex h-7 items-center\" }\nconst _hoisted_53 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"A man-in-the-middle (MITM) attack occurs when a malicious party is able to observe and alter network traffic between a sender and receiver on the Internet. DKIM adds cryptographic signatures to email so that any tampering can be detected.\")\n], -1)\nconst _hoisted_54 = /*#__PURE__*/_createElementVNode(\"p\", null, \"In email, a MITM attacker intercepts TCP/IP packets as they flow from the sending mail server to the receiving mail server. The attacker would attempt to modify the contents of the packets and change the email as it travels across the Internet.\", -1)\nconst _hoisted_55 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The digital signature added by DKIM allows the receiving mail server to verify that an attacker did not alter the message after the sending mail server signed the message. MITM attacks are one reason why many Internet protocols have been upgraded to use cryptographic signatures.\", -1)\n\nimport BlogPost from '@/components/layout/BlogPost.vue';\n\n\nimport { useRouter } from 'vue-router';\nimport {\n Disclosure,\n DisclosureButton,\n DisclosurePanel,\n} from '@headlessui/vue';\nimport { ChevronDownIcon } from '@heroicons/vue/24/outline';\nimport { jeff, ruurtjan } from '@/common/authors';\nimport { BlogMeta } from '@/common/blogMeta';\nimport DomainSearch from '@/components/DomainSearch.vue';\nimport CodeBlock from '@/components/micro/CodeBlock.vue';\nimport { learningBreadcrumb, emailBreadcrumb } from '@/model/Breadcrumb';\nimport Callout from '@/components/layout/CalloutComponent.vue';\nimport { domainNameToUrlPath } from '@/common/domainName';\n\nexport const meta: BlogMeta = {\n tag: 'Email and the DNS',\n url: '/learning/dkim-a-practical-guide/',\n breadcrumbs: [learningBreadcrumb, emailBreadcrumb],\n title: 'DKIM: A practical guide',\n description: 'DomainKeys Identified Mail (DKIM) adds public key cryptography to email. Email is signed by the sender, and verified by the receiver using the DKIM record.',\n overviewDescription: 'DomainKeys Identified Mail (DKIM) adds public key cryptography to email. Email is signed by the sender, and verified by the receiver using the DKIM record.',\n overviewImage: '/img/learning/dkim-a-practical-guide/dns-dkim-records-small.jpg',\n overviewImageAlt: 'DKIM in the DNS',\n author: jeff,\n editor: ruurtjan,\n img1024x512: 'https://www.nslookup.io/img/learning/dkim-a-practical-guide/the-dkim-record-social.jpg',\n img1200x630: 'https://www.nslookup.io/img/learning/dkim-a-practical-guide/the-dkim-record-social.jpg',\n written: new Date('2022-11-14T12:32:48.825Z'),\n updated: new Date('2023-03-28T11:58:48.710Z'),\n};\n\nconst __default__ = {\n meta,\n};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'EmailSecurityDkim',\n setup(__props) {\n\nconst router = useRouter();\n\nfunction redirectTo(domain: string): void {\n router.push(`/domains/${domainNameToUrlPath(domain)}/dns-records/txt/`);\n}\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"ImageObject\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"email\\\": \\\"mailto:ruurtjan@nslookup.io\\\", \\\"image\\\": \\\"https://www.nslookup.io/img/ruurtjan-lg.jpg\\\", \\\"jobTitle\\\": \\\"CEO\\\", \\\"name\\\": \\\"Ruurtjan Pul\\\", \\\"url\\\": \\\"https://www.nslookup.io/about/ruurtjan-pul/\\\" }, \\\"copyrightHolder\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"https://www.nslookup.io/\\\", \\\"email\\\": \\\"hello@nslookup.io\\\" }, \\\"copyrightYear\\\": 2023, \\\"contentUrl\\\": \\\"https://www.nslookup.io/img/learning/dkim-a-practical-guide/dns-dkim-records.jpg\\\", \\\"license\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\", \\\"acquireLicensePage\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\" } \")\n ]),\n _: 1\n }))\n ])),\n _createVNode(BlogPost, {\n title: meta.title,\n description: meta.description,\n url: `https://www.nslookup.io${meta.url}`,\n breadcrumbs: meta.breadcrumbs,\n img1024x512: meta.img1024x512,\n img1200x630: meta.img1200x630,\n written: meta.written,\n updated: meta.updated,\n author: meta.author,\n editor: meta.editor\n }, {\n default: _withCtx(() => [\n _hoisted_1,\n _hoisted_2,\n _hoisted_3,\n _hoisted_4,\n _hoisted_5,\n _hoisted_6,\n _hoisted_7,\n _hoisted_8,\n _hoisted_9,\n _hoisted_10,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"DKIM does not include a policy to require that every email from a domain is signed. So with DKIM alone, spammers can still send forged email from your domain. This is where \"),\n _createVNode(_component_router_link, { to: \"/learning/dmarc-a-practical-guide/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"Domain-based Message Authentication, Reporting, and Conformance (DMARC)\")\n ]),\n _: 1\n }),\n _createTextVNode(\" steps in.\")\n ]),\n _hoisted_11,\n _createVNode(Callout, {\n icon: \"info\",\n title: \"Can a domain have multiple DKIM records?\",\n heading: \"h2\"\n }, {\n default: _withCtx(() => [\n _hoisted_12,\n _hoisted_13,\n _hoisted_14,\n _hoisted_15\n ]),\n _: 1\n }),\n _hoisted_16,\n _hoisted_17,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"DKIM records are stored as TXT records, although a \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/cname/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"CNAME record\")\n ]),\n _: 1\n }),\n _createTextVNode(\" is sometimes used as an intermediate \\\"hop\\\". We will discuss how CNAMEs can be used in DKIM a bit later.\")\n ]),\n _hoisted_18,\n _hoisted_19,\n _hoisted_20,\n _createVNode(Callout, {\n icon: \"info\",\n title: \"How are CNAME records used in DKIM?\",\n heading: \"h2\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"p\", null, [\n _createElementVNode(\"strong\", null, [\n _createTextVNode(\"DKIM records are stored in TXT records, but an intermediate \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/cname/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"CNAME record\")\n ]),\n _: 1\n }),\n _createTextVNode(\" is often used.\")\n ])\n ]),\n _hoisted_21,\n _hoisted_22\n ]),\n _: 1\n }),\n _hoisted_23,\n _hoisted_24,\n _hoisted_25,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_26\n ]),\n _: 1\n }),\n _hoisted_27,\n _hoisted_28,\n _hoisted_29,\n _hoisted_30,\n _hoisted_31,\n _hoisted_32,\n _hoisted_33,\n _hoisted_34,\n _hoisted_35,\n _hoisted_36,\n _hoisted_37,\n _hoisted_38,\n _hoisted_39,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_40\n ]),\n _: 1\n }),\n _hoisted_41,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_42\n ]),\n _: 1\n }),\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"Once you have the selector and domain, you can also find the DKIM record using our \"),\n _createVNode(_component_router_link, { to: \"/txt-lookup/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"TXT lookup\")\n ]),\n _: 1\n }),\n _createTextVNode(\" tool, or by entering it here:\")\n ]),\n _createElementVNode(\"form\", _hoisted_43, [\n _createVNode(DomainSearch, {\n emphasize: \"\",\n buttonText: \"Find TXT records\",\n onSubmitted: redirectTo\n })\n ]),\n _hoisted_44,\n _hoisted_45,\n _createElementVNode(\"ul\", null, [\n _createElementVNode(\"li\", null, [\n _createElementVNode(\"strong\", null, [\n _createVNode(_component_router_link, { to: \"/learning/spf-a-practical-guide/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"Sender Policy Framework (SPF)\")\n ]),\n _: 1\n })\n ]),\n _createTextVNode(\": SPF ensures that only authorized mail servers can send mail for a domain.\")\n ]),\n _hoisted_46,\n _createElementVNode(\"li\", null, [\n _createElementVNode(\"strong\", null, [\n _createVNode(_component_router_link, { to: \"/learning/dmarc-a-practical-guide/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"Domain-based Message Authentication, Reporting, and Conformance (DMARC)\")\n ]),\n _: 1\n })\n ]),\n _createTextVNode(\": DMARC adds policy and reporting. It prevents spammers from abusing the Return-Path field to evade SPF and enforces DKIM-signed email. DMARC also allows administrators to control how messages that fail SPF and DKIM checks should be treated.\")\n ])\n ]),\n _hoisted_47,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"Read my next article to learn \"),\n _createVNode(_component_router_link, { to: \"/learning/mx-vs-spf-vs-dmarc-vs-dkim-vs-bimi/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"the difference between MX, SPF, DKIM, DMARC and BIMI\")\n ]),\n _: 1\n }),\n _createTextVNode(\".\")\n ]),\n _createElementVNode(\"div\", _hoisted_48, [\n _hoisted_49,\n _createElementVNode(\"div\", _hoisted_50, [\n _createVNode(_unref(Disclosure), {\n as: \"div\",\n class: \"pt-6\"\n }, {\n default: _withCtx(({ open }) => [\n _createVNode(_unref(DisclosureButton), {\n as: \"h3\",\n class: \"ignore-toc flex mt-0 w-full items-start justify-between text-left cursor-pointer text-gray-400\"\n }, {\n default: _withCtx(() => [\n _hoisted_51,\n _createElementVNode(\"span\", _hoisted_52, [\n _createVNode(_unref(ChevronDownIcon), {\n class: _normalizeClass([open ? '-rotate-180' : 'rotate-0', 'h-6 w-6 transform']),\n \"aria-hidden\": \"true\"\n }, null, 8, [\"class\"])\n ])\n ]),\n _: 2\n }, 1024),\n _createVNode(_unref(DisclosurePanel), { class: \"mt-2 pr-12\" }, {\n default: _withCtx(() => [\n _hoisted_53,\n _hoisted_54,\n _hoisted_55\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ])\n ])\n ]),\n _: 1\n }, 8, [\"title\", \"description\", \"url\", \"breadcrumbs\", \"img1024x512\", \"img1200x630\", \"written\", \"updated\", \"author\", \"editor\"])\n ], 64))\n}\n}\n\n})","import script from \"./EmailSecurityDkim.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./EmailSecurityDkim.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-xl leading-8 block font-normal text-gray-500 mt-[1.3333333em]\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"p\", null, \"DMARC adds reporting and policy to email security:\", -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, \"DMARC reporting notifies administrators when SPF or DKIM configuration errors prevent delivery of legitimate email for the domain.\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"DMARC reporting allows administrators to monitor spoofing attempts for the domain.\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"DMARC policy fixes shortcomings in SPF and DKIM typically abused by spammers.\")\n], -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"DMARC is specified in \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc7489\",\n rel: \"noopener noreferrer\"\n }, \"RFC 7489\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full rounded-lg\",\n src: \"/img/learning/dmarc-a-practical-guide/the-dns-dmark-record.jpg\",\n alt: \"DMARC is like a control room of email\",\n title: \"DMARC is like a control room of email\",\n width: \"1200\",\n height: \"600\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, [\n /*#__PURE__*/_createTextVNode(\"DMARC is like a control room of email. By NsLookup.io. Licensed under \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://creativecommons.org/licenses/by/4.0/\",\n title: \"Creative Commons By 4.0 licence\",\n rel: \"nofollow\"\n }, \"CC By 4.0\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"How DMARC works\", -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"p\", null, \"When a mail server receives an email, it extracts the domain from the From header. It performs a DNS TXT lookup to check if there is a DMARC record for the domain. The mail server then performs three checks on the mail:\", -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"ol\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Does the mail's DKIM signature successfully validate the contents of the mail?\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Did the message come from an IP address permitted to send mail for the domain by the domain's SPF records?\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Do the domains in the email's headers pass \\\"domain alignment\\\" checks?\")\n], -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"p\", null, \"After performing these three checks, the receiving mail server is ready to apply the domain's DMARC policy. This policy dictates whether the email will be delivered, rejected, or flagged as suspicious.\", -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Note that an email doesn't need to pass both DKIM and SPF. Just one is enough to validate an email.\", -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"p\", null, \"At the end of this process, the receiving mail server reports the outcome to the sending domain's administrator. The final step is a critical part of DMARC. DMARC reports can be used to monitor for SPF and DKIM errors and to debug problems.\", -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"SPF uses the \\\"Return-Path\\\" field during validation, while DMARC uses the \\\"From\\\" field.\")\n], -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Bounce messages are sent to the address in the Return-Path field. The From field is the sender's address commonly displayed to users by email clients.\", -1)\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"p\", null, \"These two fields are sometimes referred to by the RFC in which they are defined. So Return-Path is also known as RFC5321.MailFrom. This is the field that SPF uses. From is also known as RFC5322.From. This is the field used by DMARC.\", -1)\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"p\", null, \"DMARC and SPF use different fields for historical reasons and to increase overall security. DMARC's domain alignment policy ensures that malicious parties cannot abuse these fields.\", -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"DMARC record format\", -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"DMARC records are stored as TXT records. Unlike SPF records, DMARC records are not stored at the name of the domain. DMARC records are stored using the label \\\"_dmarc\\\" immediately below the root of the domain. So the DMARC record for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" must be at \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"_dmarc.example.org\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"p\", null, \"DMARC records consist of tag/value pairs. The tag's name is followed by an equals sign and then the tag's value. Tags are separated by semicolons. We'll discuss tags in detail later.\", -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Below is the current DMARC record for MailChimp, found at \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"_dmarc.mailchimp.com\"),\n /*#__PURE__*/_createTextVNode(\". This record defines a DMARC policy where the failure of any DMARC check results in email rejection. Aggregate DMARC reports are emailed to 19ezfriw@ag.dmarcian.com. Message-specific DMARC reports are emailed to 19ezfriw@fr.dmarcian.com.\")\n], -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"v=DMARC1; p=reject; rua=mailto:19ezfriw@ag.dmarcian.com; ruf=mailto:19ezfriw@fr.dmarcian.com\", -1)\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"DMARC tags\", -1)\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"p\", null, \"DMARC tags specify the desired policy and options for the domain. Every DMARC record must begin with the version tag \\\"v\\\". Its value must be \\\"DMARC1\\\". More versions may be added in the future. The \\\"p\\\" tag must always be present immediately after the \\\"v\\\" tag. All other tags are optional and may appear in any order. DMARC is case-insensitive. Either upper- or lower-case may be used.\", -1)\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The Internet Assigned Numbers Authority (IANA) maintains the official \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://www.iana.org/assignments/dmarc-parameters/dmarc-parameters.xhtml\",\n rel: \"noopener noreferrer\"\n }, \"registry of DMARC tags\"),\n /*#__PURE__*/_createTextVNode(\". DMARC supports these tags:\")\n], -1)\nconst _hoisted_24 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"v\\\"\"),\n /*#__PURE__*/_createTextVNode(\" Version. The value must be \\\"DMARC1\\\". This tag must appear first in every DMARC record.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"p\\\"\"),\n /*#__PURE__*/_createTextVNode(\" Policy. Values are \\\"None\\\", \\\"Quarantine\\\", or \\\"Reject\\\". This tag must appear second in every DMARC record.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"sp\\\"\"),\n /*#__PURE__*/_createTextVNode(\" Subdomain Policy. Specifies how mail from subdomains is treated. If omitted, the \\\"p\\\" tag value is used for email from subdomains.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"np\\\"\"),\n /*#__PURE__*/_createTextVNode(\" Non-existent Domain Policy. Specifies how mail from non-existent subdomains is treated. Added in \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc9091\",\n rel: \"noopener noreferrer\"\n }, \"RFC 9091\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"pct\\\"\"),\n /*#__PURE__*/_createTextVNode(\" Percent. The percentage of email subject to filtering. The value must be an integer from 1 to 100. If this tag is omitted, the default is 100.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"rua\\\"\"),\n /*#__PURE__*/_createTextVNode(\" Aggregate Report Email Addresses. The email addresses where aggregate reports are sent.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"ruf\\\"\"),\n /*#__PURE__*/_createTextVNode(\" Message-specific Report Email Addresses. The email addresses where message-specific forensic reports are sent.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"fo\\\"\"),\n /*#__PURE__*/_createTextVNode(\" Failure Reporting Options. Specifies how forensic reports are created.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"aspf\\\"\"),\n /*#__PURE__*/_createTextVNode(\" SPF Domain Alignment Mode. May be \\\"r\\\" for relaxed or \\\"s\\\" for strict. The default is \\\"r\\\".\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"adkim\\\"\"),\n /*#__PURE__*/_createTextVNode(\" DKIM Identifier Alignment Mode. May be \\\"r\\\" for relaxed or \\\"s\\\" for strict. The default is \\\"r\\\".\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"ri\\\"\"),\n /*#__PURE__*/_createTextVNode(\" Reporting Interval. The number of seconds between aggregate reports. The default is 86400 (one day).\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"rf\\\"\"),\n /*#__PURE__*/_createTextVNode(\" Report Format. The format used for message-specific failure reports.\")\n ])\n], -1)\nconst _hoisted_25 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"DMARC policies\", -1)\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The \\\"p\\\" tag sets the overall DMARC policy for the domain. This policy applies to any email that fails any of the DMARC checks. A value of \\\"None\\\" means that the email will be delivered, but reports will flag the failure. \\\"None\\\" is useful when testing a new policy. \\\"Quarantine\\\" causes a failing email to be placed into a spam folder or held for administrator review. This is a cautious policy setting. \\\"Reject\\\" cases all failing emails to be rejected. \\\"Reject\\\" is the most secure policy.\", -1)\nconst _hoisted_27 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The \\\"sp\\\" tag sets the policy for mail sent from subdomains. The \\\"sp\\\" tag has the same three possible values as the \\\"p\\\" tag. Omit this tag if mail should be allowed from subdomains with the same policy. Specify \\\"sp=reject\\\" if subdomains are not permitted to send email.\", -1)\nconst _hoisted_28 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The \\\"aspf\\\" tag sets the SPF Domain Alignment Mode. The default value is \\\"r\\\" for relaxed mode. Strict mode is specified using the value \\\"s\\\".\", -1)\nconst _hoisted_29 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The \\\"adkim\\\" tag sets the DKIM Identifier Alignment Mode. The default value is \\\"r\\\" for relaxed mode. Strict mode is specified using the value \\\"s\\\".\", -1)\nconst _hoisted_30 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"The \\\"aspf\\\" and \\\"adkim\\\" tags both use the concept of domain alignment. DMARC allows strict or relaxed alignment policy for each tag.\")\n], -1)\nconst _hoisted_31 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Domain alignment controls how DMARC compares DNS domain names. For \\\"aspf\\\", the two domain names are taken from the Return-Path and From fields. For \\\"adkim\\\", the two domain names are taken from the DKIM signature and the From field.\", -1)\nconst _hoisted_32 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Strict alignment means that the domain names must be exactly equal. Relaxed alignment means that the Return-Path or DKIM signature domain must be equal to or a child of the From domain.\", -1)\nconst _hoisted_33 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"For the From domain \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\", in strict mode only \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" will pass. But in relaxed mode any child domain will also pass. So these domains would all result in a pass in relaxed mode:\")\n], -1)\nconst _hoisted_34 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"code\", null, \"mail.example.org\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"code\", null, \"accounts.example.org\")\n ])\n], -1)\nconst _hoisted_35 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Notice that at least some portion of the names must match in both modes. DMARC requires that the domain names for SPF and DKIM are always at least a partial match.\", -1)\nconst _hoisted_36 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"Reporting\", -1)\nconst _hoisted_37 = /*#__PURE__*/_createElementVNode(\"p\", null, \"DMARC has two types of reporting: aggregate and message-specific. Aggregate reports are sent to the email addresses specified by the \\\"rua\\\" tag. The reports are sent daily by default. Every ISP or mail provider who receives mail from a domain will send a daily report.\", -1)\nconst _hoisted_38 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Aggregate reports are XML files compressed using the popular .ZIP format. These reports contain a lot of information but are challenging to read. There are a number of services and tools that will parse these XML files into useful reports and charts.\", -1)\nconst _hoisted_39 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Message-specific reports are sent to the email addresses specified by the \\\"ruf\\\" tag. Some mail providers will ignore this tag and not send any message-specific failure report. For example, gmail.com ignores the \\\"ruf\\\" tag. Message-specific reports are helpful when monitoring the initial rollout of DMARC or when making a change to DMARC, SPF, or DKIM for a domain. The administrator might choose to remove the \\\"ruf\\\" tag when deployment is finished to cut down on reporting volume.\", -1)\nconst _hoisted_40 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Reports can be large. DMARC allows setting a maximum report file size by optionally adding an exclamation point and file size after each email address. For example, use \\\"rua=rua_mailbox@example.org!10m\\\" to limit aggregate report files to 10 megabytes. File size can be specified in kilobytes and other units. See \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc7489#section-6.4\",\n rel: \"noopener noreferrer\"\n }, \"RFC 7489 section 6.4\"),\n /*#__PURE__*/_createTextVNode(\" for details.\")\n], -1)\nconst _hoisted_41 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Gradual deployment with None and \\\"pct\\\"\", -1)\nconst _hoisted_42 = /*#__PURE__*/_createElementVNode(\"p\", null, \"When deploying email security, it is best to deploy gradually. This allows errors to be caught before they can cause significant problems.\", -1)\nconst _hoisted_43 = /*#__PURE__*/_createElementVNode(\"p\", null, \"DMARC supports gradual deployment. Start with a policy value of None and a percent value of 100. Since policy is None, emails that fail DMARC checks won't be rejected (yet):\", -1)\nconst _hoisted_44 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"v=DMARC1; p=none; pct=100; rua=mailto:rua_mailbox@example.org\", -1)\nconst _hoisted_45 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The daily reports can be examined to see if any legitimate mails would have been rejected or flagged. DMARC policy can be changed to Quarantine with a small percentage value once the reports look clean:\", -1)\nconst _hoisted_46 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"v=DMARC1; p=quarantine; pct=10; rua=mailto:rua_mailbox@example.org\", -1)\nconst _hoisted_47 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Monitor for issues using the daily reports and tickets from email users. If there are no issues, increase the value of percent gradually.\", -1)\nconst _hoisted_48 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Once everything looks good, change the policy value to Reject for 100% of the domain's emails:\", -1)\nconst _hoisted_49 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"v=DMARC1; p=reject; rua=mailto:rua_mailbox@example.org\", -1)\nconst _hoisted_50 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Finding the DMARC record for a domain\", -1)\nconst _hoisted_51 = /*#__PURE__*/_createElementVNode(\"p\", null, \"DMARC records are stored as TXT records, so a standard TXT lookup will retrieve DMARC records. DMARC record names always begin with the label \\\"_dmarc\\\". The dig or nslookup command line tools can be used. To find the DMARC record for Google, use this command:\", -1)\nconst _hoisted_52 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"dig TXT _dmarc.google.com\", -1)\nconst _hoisted_53 = /*#__PURE__*/_createElementVNode(\"p\", null, \"On operating systems that support nslookup, you can use the following:\", -1)\nconst _hoisted_54 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"nslookup -type=TXT _dmarc.google.com\", -1)\nconst _hoisted_55 = {\n class: \"not-prose text-base mx-auto max-w-lg\",\n autocomplete: \"off\"\n}\nconst _hoisted_56 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"DMARC requires SPF and DKIM\", -1)\nconst _hoisted_57 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Additionally, SPF and DKIM must both pass either relaxed or strict domain alignment checks. For example, if the DKIM domain is not equal to or a child of the From domain, then DMARC will always generate a failure.\", -1)\nconst _hoisted_58 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Even with these restrictions, it is possible to create DMARC before SPF or DKIM. If the \\\"p\\\" tag is set to \\\"None\\\", failure reports will be generated but mail will be delivered. This can be used as a temporary measure while SPF and DKIM are being deployed.\", -1)\n\nimport BlogPost from '@/components/layout/BlogPost.vue';\n\n\nimport { useRouter } from 'vue-router';\nimport { jeff, ruurtjan } from '@/common/authors';\nimport { BlogMeta } from '@/common/blogMeta';\nimport DomainSearch from '@/components/DomainSearch.vue';\nimport { learningBreadcrumb, emailBreadcrumb } from '@/model/Breadcrumb';\nimport Callout from '@/components/layout/CalloutComponent.vue';\nimport { domainNameToUrlPath } from '@/common/domainName';\n\nexport const meta: BlogMeta = {\n tag: 'Email and the DNS',\n url: '/learning/dmarc-a-practical-guide/',\n breadcrumbs: [learningBreadcrumb, emailBreadcrumb],\n title: 'DMARC: A practical guide',\n description: 'DMARC is one of the three pillars of modern email security. It protects email senders and recipients from spoofing, spam, and phishing attacks.',\n overviewDescription: 'Domain-based Message Authentication, Reporting, and Conformance (DMARC) is one of the three pillars of modern email security. It protects email senders and recipients from spoofing, spam, and phishing attacks.',\n overviewImage: '/img/learning/dmarc-a-practical-guide/the-dns-dmark-record-small.jpg',\n overviewImageAlt: 'DMARC for email security',\n author: jeff,\n editor: ruurtjan,\n img1024x512: 'https://www.nslookup.io/img/learning/dmarc-a-practical-guide/dmarc-a-practical-guide-social.jpg',\n img1200x630: 'https://www.nslookup.io/img/learning/dmarc-a-practical-guide/dmarc-a-practical-guide-social.jpg',\n written: new Date('2022-09-22T07:38:27.319Z'),\n updated: new Date('2023-12-29T10:17:55.581Z'),\n};\n\nconst __default__ = {\n meta,\n};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'EmailSecurityDmarc',\n setup(__props) {\n\nconst router = useRouter();\n\nfunction redirectTo(domain: string): void {\n router.push(`/domains/${domainNameToUrlPath(domain)}/dns-records/txt/`);\n}\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"ImageObject\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"email\\\": \\\"mailto:ruurtjan@nslookup.io\\\", \\\"image\\\": \\\"https://www.nslookup.io/img/ruurtjan-lg.jpg\\\", \\\"jobTitle\\\": \\\"CEO\\\", \\\"name\\\": \\\"Ruurtjan Pul\\\", \\\"url\\\": \\\"https://www.nslookup.io/about/ruurtjan-pul/\\\" }, \\\"copyrightHolder\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"https://www.nslookup.io/\\\", \\\"email\\\": \\\"hello@nslookup.io\\\" }, \\\"copyrightYear\\\": 2023, \\\"contentUrl\\\": \\\"https://www.nslookup.io/img/learning/dmarc-a-practical-guide/the-dns-dmark-record.jpg\\\", \\\"license\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\", \\\"acquireLicensePage\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\" } \")\n ]),\n _: 1\n }))\n ])),\n _createVNode(BlogPost, {\n title: meta.title,\n description: meta.description,\n url: `https://www.nslookup.io${meta.url}`,\n breadcrumbs: meta.breadcrumbs,\n img1024x512: meta.img1024x512,\n img1200x630: meta.img1200x630,\n written: meta.written,\n updated: meta.updated,\n author: meta.author,\n editor: meta.editor\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"strong\", _hoisted_1, [\n _createTextVNode(\"Domain-based Message Authentication, Reporting, and Conformance (DMARC) is one of the three pillars of modern email security. DMARC works with \"),\n _createVNode(_component_router_link, { to: \"/learning/spf-a-practical-guide/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"Sender Policy Framework (SPF)\")\n ]),\n _: 1\n }),\n _createTextVNode(\" and \"),\n _createVNode(_component_router_link, { to: \"/learning/dkim-a-practical-guide/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"DomainKeys Identified Mail (DKIM)\")\n ]),\n _: 1\n }),\n _createTextVNode(\" to protect against spoofing, spam, and phishing attacks.\")\n ]),\n _hoisted_2,\n _hoisted_3,\n _hoisted_4,\n _hoisted_5,\n _hoisted_6,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"The DMARC record for a domain appears in the DNS as a \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/txt/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"TXT record\")\n ]),\n _: 1\n }),\n _createTextVNode(\". The name of this record must begin with the label \\\"_dmarc\\\", followed by the domain name. This TXT record contains the DMARC policy for the domain as a set of tags and values.\")\n ]),\n _hoisted_7,\n _hoisted_8,\n _hoisted_9,\n _hoisted_10,\n _hoisted_11,\n _createVNode(Callout, {\n icon: \"info\",\n title: \"Mail header fields used by DMARC and SPF\",\n heading: \"h2\"\n }, {\n default: _withCtx(() => [\n _hoisted_12,\n _hoisted_13,\n _hoisted_14,\n _hoisted_15\n ]),\n _: 1\n }),\n _hoisted_16,\n _hoisted_17,\n _hoisted_18,\n _hoisted_19,\n _hoisted_20,\n _hoisted_21,\n _hoisted_22,\n _hoisted_23,\n _hoisted_24,\n _hoisted_25,\n _hoisted_26,\n _hoisted_27,\n _hoisted_28,\n _hoisted_29,\n _createVNode(Callout, {\n icon: \"info\",\n title: \"Strict and relaxed alignment\",\n heading: \"h2\"\n }, {\n default: _withCtx(() => [\n _hoisted_30,\n _hoisted_31,\n _hoisted_32,\n _hoisted_33,\n _hoisted_34,\n _hoisted_35\n ]),\n _: 1\n }),\n _hoisted_36,\n _hoisted_37,\n _hoisted_38,\n _hoisted_39,\n _hoisted_40,\n _hoisted_41,\n _hoisted_42,\n _hoisted_43,\n _hoisted_44,\n _hoisted_45,\n _hoisted_46,\n _hoisted_47,\n _hoisted_48,\n _hoisted_49,\n _hoisted_50,\n _hoisted_51,\n _hoisted_52,\n _hoisted_53,\n _hoisted_54,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"You can also check the DMARC records for any domain name in our \"),\n _createVNode(_component_router_link, { to: \"/txt-lookup/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"TXT lookup\")\n ]),\n _: 1\n }),\n _createTextVNode(\" tool or by entering it here:\")\n ]),\n _createElementVNode(\"form\", _hoisted_55, [\n _createVNode(DomainSearch, {\n emphasize: \"\",\n buttonText: \"Find TXT record\",\n prefill: \"_dmarc.\",\n onSubmitted: redirectTo\n })\n ]),\n _hoisted_56,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"DMARC specifies policy for the disposition of email messages that fail \"),\n _createVNode(_component_router_link, { to: \"/learning/spf-a-practical-guide/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"SPF\")\n ]),\n _: 1\n }),\n _createTextVNode(\" or \"),\n _createVNode(_component_router_link, { to: \"/learning/dkim-a-practical-guide/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"DKIM\")\n ]),\n _: 1\n }),\n _createTextVNode(\" checks.\")\n ]),\n _hoisted_57,\n _hoisted_58,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"Read my next article to learn \"),\n _createVNode(_component_router_link, { to: \"/learning/mx-vs-spf-vs-dmarc-vs-dkim-vs-bimi/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"the difference between MX, SPF, DKIM, DMARC and BIMI\")\n ]),\n _: 1\n }),\n _createTextVNode(\".\")\n ])\n ]),\n _: 1\n }, 8, [\"title\", \"description\", \"url\", \"breadcrumbs\", \"img1024x512\", \"img1200x630\", \"written\", \"updated\", \"author\", \"editor\"])\n ], 64))\n}\n}\n\n})","import script from \"./EmailSecurityDmarc.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./EmailSecurityDmarc.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-xl leading-8 block font-normal text-gray-500 mt-[1.3333333em]\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"p\", null, \"For example, a domain may have an on-premise Exchange server for email sent by employees and a third-party email provider for sending promotional emails to customers. The email administrators might want different DMARC records, but DMARC does not support this. In this article, we will discuss strategies to merge DMARC records from different email providers with some examples.\", -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full rounded-lg\",\n src: \"/img/learning/how-to-merge-dmarc-records/blending-two-dmarc-records.jpg\",\n alt: \"Merging DMARC records\",\n title: \"Merging DMARC records\",\n width: \"1200\",\n height: \"600\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, [\n /*#__PURE__*/_createTextVNode(\"Merging DMARC records. By NsLookup.io. Licensed under \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://creativecommons.org/licenses/by/4.0/\",\n title: \"Creative Commons By 4.0 licence\",\n rel: \"nofollow\"\n }, \"CC By 4.0\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Another solution to email providers wanting different DMARC records is for one provider to use a subdomain.\")\n], -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"A single DMARC record applies to all email sent from any single domain. For example, the DMARC record at \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"_dmarc.example.org\"),\n /*#__PURE__*/_createTextVNode(\" dictates DMARC policy for all email sent from \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\". If two email providers are sending email from \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\", they must merge their DMARC records.\")\n], -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"There may be scenarios where the administrators cannot agree on how to merge their DMARC records. In this case, one of the email providers could use a subdomain. If the business sends email from \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" and the other email provider uses a subdomain such as \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"promotions.example.org\"),\n /*#__PURE__*/_createTextVNode(\", they can each create their own DMARC records. The DMARC records would be at \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"_dmarc.example.org\"),\n /*#__PURE__*/_createTextVNode(\" and \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"_dmarc.promotions.example.org\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Caution should be used in this scenario. Using less stringent policies in the DMARC record for the subdomain may allow phishing and spam. This could potentially tarnish the reputation of the business.\", -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Merging \\\"rua\\\" and \\\"ruf\\\" tags\", -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The \\\"rua\\\" tag specifies email addresses for aggregate reports. The \\\"ruf\\\" tag specifies email addresses for message-specific forensic reports.\", -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"p\", null, \"DMARC allows multiple email addresses to receive copies of reports. So if there are two email providers for a domain, both administrators can receive reports for the domain. But each administrator may need to filter the reports for the email sent by their system.\", -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"To merge the \\\"rua\\\" and \\\"ruf\\\" tags, specify the email addresses from each record separated by commas.\"),\n /*#__PURE__*/_createTextVNode(\" Each email address can optionally have its own size limit. Append an exclamation point and a size limit such as \\\"10m\\\" for 10 megabytes. For example:\")\n], -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"- v=DMARC1; p=reject; rua=mailto:admin@example.org\\n- v=DMARC1; p=reject; rua=mailto:reports@example.net!5m\\n+ v=DMARC1; p=reject; rua=mailto:admin@example.org,mailto:reports@example.net!5m\", -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Merging \\\"p\\\", \\\"sp\\\", and \\\"np\\\" tags\", -1)\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The \\\"p\\\" tag gives the overall DMARC policy for the domain. The \\\"sp\\\" tag gives the DMARC policy for subdomains. And the \\\"np\\\" tag gives the DMARC policy for subdomains that do not exist in the DNS.\", -1)\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"p\", null, \"These DMARC tags specify how email that fails one or more DMARC checks should be handled. Each policy tag may specify:\", -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"None\\\"\"),\n /*#__PURE__*/_createTextVNode(\": No DMARC policy. Mail that fails DMARC checks should be delivered. Useful during initial deployment and testing.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"Quarantine\\\"\"),\n /*#__PURE__*/_createTextVNode(\": Mail that fails DMARC checks should be placed in quarantine. This usually means delivered to a spam folder or held for administrator review.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"Reject\\\"\"),\n /*#__PURE__*/_createTextVNode(\": Mail that fails DMARC checks should be rejected.\")\n ])\n], -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Since \\\"None\\\" is not often used, merging records will usually mean selecting between \\\"Quarantine\\\" and \\\"Reject\\\". \\\"Reject\\\" is more secure, but configuration errors may cause email to be rejected. Some domains may use \\\"Quarantine\\\" as a more cautious choice.\", -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"Merging the \\\"p\\\" tag\", -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The \\\"p\\\" tag is the most important part of the domain's DMARC record. If both records specify the same value, that value can be used in the merged record.\", -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"p\", null, \"If one of the records species \\\"Reject\\\" and the other species \\\"Quarantine\\\", then one administrator is more mindful of security. There may be good reasons for this, including past attacks, security reviews, or requirements imposed by management or oversight bodies. In most cases, \\\"Reject\\\" will be the correct choice in the merged record. The administrator that previously used \\\"Quarantine\\\" should be prepared to exercise more care to avoid configuration errors.\", -1)\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Here is an example where the two providers have agreed that \\\"Reject\\\" is the best option for the domain:\", -1)\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"- v=DMARC1; p=reject; rua=mailto:admin@example.org\\n- v=DMARC1; p=quarantine; rua=mailto:reports@example.net\\n+ v=DMARC1; p=reject; rua=mailto:admin@example.org,mailto:reports@example.net\", -1)\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"Merging the \\\"sp\\\" tag\", -1)\nconst _hoisted_24 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The \\\"sp\\\" tag should be omitted in the final DMARC record for the domain if neither of the records being merged uses the \\\"sp\\\" tag.\", -1)\nconst _hoisted_25 = /*#__PURE__*/_createElementVNode(\"p\", null, \"If one record specifies \\\"Reject\\\", then the domain probably has good reasons for this, and \\\"Reject\\\" will be the best choice for the merged record. The domain strongly desires to allow mail only from the domain itself but never from subdomains. This may be due to a strict security architecture or problems with phishing attacks in the past, or both.\", -1)\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Use \\\"Quarantine\\\" if at least one of the records being merged specifies \\\"Quarantine\\\" but neither record specifies \\\"Reject\\\".\", -1)\nconst _hoisted_27 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"Merging the \\\"np\\\" tag\", -1)\nconst _hoisted_28 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Merging the \\\"np\\\" tag is similar to merging the \\\"sp\\\" tag, but these two policies are used to combat slightly different types of phishing and spam.\", -1)\nconst _hoisted_29 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The \\\"np\\\" tag should be omitted in the final DMARC record for the domain if neither of the records being merged uses the \\\"np\\\" tag.\", -1)\nconst _hoisted_30 = /*#__PURE__*/_createElementVNode(\"p\", null, \"If one record specifies \\\"Reject\\\", then \\\"Reject\\\" will be the best choice for the merged record. The domain may have had problems with phishing attacks using important-sounding but non-existent subdomains.\", -1)\nconst _hoisted_31 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Use \\\"Quarantine\\\" if at least one of the records being merged specifies \\\"Quarantine\\\" but neither record specifies \\\"Reject\\\".\", -1)\nconst _hoisted_32 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Merging \\\"aspf\\\" and \\\"adkim\\\" tags\", -1)\nconst _hoisted_33 = /*#__PURE__*/_createElementVNode(\"p\", null, \"As with the \\\"p\\\" tag, it is generally best to use the most secure option when merging. So if the two records to be merged each specify \\\"r\\\" then the merged record should use \\\"r\\\" for these tags.\", -1)\nconst _hoisted_34 = /*#__PURE__*/_createElementVNode(\"p\", null, \"But if one record specifies \\\"s\\\", then strict alignment will be best in the merged record. This may require discussion amongst the administrators of the two domains to ensure that the change from relaxed to strict alignment doesn't cause problems.\", -1)\nconst _hoisted_35 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Here is an example of merging DMARC records with differing domain alignment policies. If the tag is not specified, the default value is \\\"r\\\" for relaxed:\", -1)\nconst _hoisted_36 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"- v=DMARC1; p=reject; aspf=s; rua=mailto:admin@example.org\\n- v=DMARC1; p=reject; adkim=s; aspf=r; rua=mailto:reports@example.net\\n+ v=DMARC1; p=reject; aspf=s; adkim=s; rua=mailto:admin@example.org,mailto:reports@example.net\", -1)\nconst _hoisted_37 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Merging the \\\"fo\\\" tag\", -1)\nconst _hoisted_38 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The \\\"fo\\\" tag specifies failure reporting options in a colon-separated list. The possible values for the \\\"fo\\\" tag are:\", -1)\nconst _hoisted_39 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"0\\\"\"),\n /*#__PURE__*/_createTextVNode(\": Generate a failure report if all checks do not result in \\\"pass\\\".\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"1\\\"\"),\n /*#__PURE__*/_createTextVNode(\": Generate a failure report if at least one check does not result in \\\"pass\\\".\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"d\\\"\"),\n /*#__PURE__*/_createTextVNode(\": Generate a DKIM failure report if the message signature fails to validate.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"s\\\"\"),\n /*#__PURE__*/_createTextVNode(\": Generate an SPF failure report if the message fails SPF evaluation.\")\n ])\n], -1)\nconst _hoisted_40 = /*#__PURE__*/_createElementVNode(\"p\", null, \"DMARC allows multiple values in this tag, so a good merge strategy is to append the tag values from the two records. For example:\", -1)\nconst _hoisted_41 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"- v=DMARC1; p=reject; fo=1; rua=mailto:admin@example.org\\n- v=DMARC1; p=reject; fo=d:s; rua=mailto:reports@example.net\\n+ v=DMARC1; p=reject; fo=1:d:s; rua=mailto:admin@example.org,mailto:reports@example.net\", -1)\nconst _hoisted_42 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Merging the \\\"rf\\\" tag\", -1)\nconst _hoisted_43 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The \\\"rf\\\" rag specifies the report format. Currently, there is only one value for this tag: \\\"afrf\\\" which is the Authentication Failure Reporting Format specified in \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc6591\",\n rel: \"noopener noreferrer\"\n }, \"RFC 6591\"),\n /*#__PURE__*/_createTextVNode(\". The value \\\"afrf\\\" is assumed if this tag is omitted.\")\n], -1)\nconst _hoisted_44 = /*#__PURE__*/_createElementVNode(\"p\", null, \"This tag can be omitted when merging records until more tag values are added to DMARC. For example:\", -1)\nconst _hoisted_45 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"- v=DMARC1; p=reject; rf=afrf; rua=mailto:admin@example.org\\n- v=DMARC1; p=reject; rua=mailto:reports@example.net\\n+ v=DMARC1; p=reject; rua=mailto:admin@example.org,mailto:reports@example.net\", -1)\nconst _hoisted_46 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Merging the \\\"ri\\\" tag\", -1)\nconst _hoisted_47 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The \\\"ri\\\" tag specifies the report interval between aggregate reports in seconds. The default value is one day (86,400 seconds).\", -1)\nconst _hoisted_48 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Using the larger of the two values from the records being merged is a good strategy. For example, if one record uses the default of one day and the other uses three days (295,200 seconds):\", -1)\nconst _hoisted_49 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"- v=DMARC1; p=reject; rua=mailto:admin@example.org\\n- v=DMARC1; p=reject; ri=295200; rua=mailto:reports@example.net\\n+ v=DMARC1; p=reject; ri=295200; rua=mailto:admin@example.org,mailto:reports@example.net\", -1)\nconst _hoisted_50 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Merging the \\\"pct\\\" tag\", -1)\nconst _hoisted_51 = /*#__PURE__*/_createElementVNode(\"p\", null, \"This tag will usually not be merged, but it is best to employ it after merging or any other potentially risky DMARC change\", -1)\nconst _hoisted_52 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The \\\"pct\\\" tag is the percentage of emails that the domain's DMARC policy should be applied to. This is used to gradually test the effects of a change in the domain's DMARC record. Once the administrator is confident that the record is correct, the \\\"pct\\\" tag can be removed so that the DMARC record will be applied to all email for the domain.\", -1)\nconst _hoisted_53 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"- v=DMARC1; p=reject; rua=mailto:admin@example.org\\n- v=DMARC1; p=reject; rua=mailto:reports@example.net\\n+ v=DMARC1; p=reject; pct=10; rua=mailto:admin@example.org,mailto:reports@example.net\", -1)\nconst _hoisted_54 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Finding the DMARC record for a domain\", -1)\nconst _hoisted_55 = /*#__PURE__*/_createElementVNode(\"p\", null, \"DMARC records are stored as TXT records, so a standard TXT lookup will retrieve DMARC records. DMARC record names always begin with the label \\\"_dmarc\\\". The dig or nslookup command line tools can be used. To find the DMARC record for Google, use this command:\", -1)\nconst _hoisted_56 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"dig TXT _dmarc.google.com\", -1)\nconst _hoisted_57 = /*#__PURE__*/_createElementVNode(\"p\", null, \"On operating systems that support nslookup, you can use the following:\", -1)\nconst _hoisted_58 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"nslookup -type=TXT _dmarc.google.com\", -1)\nconst _hoisted_59 = {\n class: \"not-prose text-base mx-auto max-w-lg\",\n autocomplete: \"off\"\n}\n\nimport BlogPost from '@/components/layout/BlogPost.vue';\n\n\nimport { useRouter } from 'vue-router';\nimport { jeff, ruurtjan } from '@/common/authors';\nimport { BlogMeta } from '@/common/blogMeta';\nimport DomainSearch from '@/components/DomainSearch.vue';\nimport CodeBlock from '@/components/micro/CodeBlock.vue';\nimport { learningBreadcrumb, emailBreadcrumb } from '@/model/Breadcrumb';\nimport Callout from '@/components/layout/CalloutComponent.vue';\nimport { domainNameToUrlPath } from '@/common/domainName';\n\nexport const meta: BlogMeta = {\n tag: 'Email and the DNS',\n url: '/learning/how-to-merge-dmarc-records/',\n breadcrumbs: [learningBreadcrumb, emailBreadcrumb],\n title: 'How to merge DMARC records',\n description: 'DMARC protect domains from phishing and spam. A domain may have multiple senders for different types of email, but each domain may have only one DMARC record.',\n overviewDescription: 'DMARC protect domains from phishing and spam. A domain may have multiple senders for different types of email, but each domain may have only one DMARC record.',\n overviewImage: '/img/learning/how-to-merge-dmarc-records/blending-two-dmarc-records-small.jpg',\n overviewImageAlt: 'How to merge DMARC records',\n author: jeff,\n editor: ruurtjan,\n img1024x512: 'https://www.nslookup.io/img/learning/dmarc-a-practical-guide/dmarc-a-practical-guide-social.jpg',\n img1200x630: 'https://www.nslookup.io/img/learning/how-to-merge-dmarc-records/how-to-merge-dmarc-records-social.jpg',\n written: new Date('2022-09-29T13:18:50.506Z'),\n updated: new Date('2023-03-28T11:59:14.580Z'),\n};\n\nconst __default__ = {\n meta,\n};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'EmailSecurityHowToMergeDmarcRecords',\n setup(__props) {\n\nconst router = useRouter();\n\nfunction redirectTo(domain: string): void {\n router.push(`/domains/${domainNameToUrlPath(domain)}/dns-records/txt/`);\n}\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"ImageObject\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"email\\\": \\\"mailto:ruurtjan@nslookup.io\\\", \\\"image\\\": \\\"https://www.nslookup.io/img/ruurtjan-lg.jpg\\\", \\\"jobTitle\\\": \\\"CEO\\\", \\\"name\\\": \\\"Ruurtjan Pul\\\", \\\"url\\\": \\\"https://www.nslookup.io/about/ruurtjan-pul/\\\" }, \\\"copyrightHolder\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"https://www.nslookup.io/\\\", \\\"email\\\": \\\"hello@nslookup.io\\\" }, \\\"copyrightYear\\\": 2023, \\\"contentUrl\\\": \\\"https://www.nslookup.io/img/learning/how-to-merge-dmarc-records/blending-two-dmarc-records.jpg\\\", \\\"license\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\", \\\"acquireLicensePage\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\" } \")\n ]),\n _: 1\n }))\n ])),\n _createVNode(BlogPost, {\n title: meta.title,\n description: meta.description,\n url: `https://www.nslookup.io${meta.url}`,\n breadcrumbs: meta.breadcrumbs,\n img1024x512: meta.img1024x512,\n img1200x630: meta.img1200x630,\n written: meta.written,\n updated: meta.updated,\n author: meta.author,\n editor: meta.editor\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"strong\", _hoisted_1, [\n _createTextVNode(\"Domain-based Message Authentication, Reporting, and Conformance (\"),\n _createVNode(_component_router_link, { to: \"/learning/dmarc-a-practical-guide/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"DMARC\")\n ]),\n _: 1\n }),\n _createTextVNode(\") is an email authentication protocol designed to protect domains from phishing attacks and abuse by spammers. A domain may have multiple senders for different types of email, but each domain may have only one DMARC record.\")\n ]),\n _hoisted_2,\n _hoisted_3,\n _createVNode(Callout, {\n icon: \"info\",\n title: \"DMARC records and subdomains\",\n heading: \"h2\"\n }, {\n default: _withCtx(() => [\n _hoisted_4,\n _hoisted_5,\n _hoisted_6,\n _hoisted_7\n ]),\n _: 1\n }),\n _hoisted_8,\n _hoisted_9,\n _hoisted_10,\n _hoisted_11,\n _createVNode(CodeBlock, { syntax: \"diff\" }, {\n default: _withCtx(() => [\n _hoisted_12\n ]),\n _: 1\n }),\n _hoisted_13,\n _hoisted_14,\n _hoisted_15,\n _hoisted_16,\n _hoisted_17,\n _hoisted_18,\n _hoisted_19,\n _hoisted_20,\n _hoisted_21,\n _createVNode(CodeBlock, { syntax: \"diff\" }, {\n default: _withCtx(() => [\n _hoisted_22\n ]),\n _: 1\n }),\n _hoisted_23,\n _hoisted_24,\n _hoisted_25,\n _hoisted_26,\n _hoisted_27,\n _hoisted_28,\n _hoisted_29,\n _hoisted_30,\n _hoisted_31,\n _hoisted_32,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"As we discussed in our \"),\n _createVNode(_component_router_link, { to: \"/learning/dmarc-a-practical-guide/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"DMARC article\")\n ]),\n _: 1\n }),\n _createTextVNode(\", the \\\"aspf\\\" and \\\"adkim\\\" tags specify the required domain alignment policy for SPF and DKIM, respectively. Each tag must specify \\\"s\\\" for strict alignment or \\\"r\\\" for relaxed alignment.\")\n ]),\n _hoisted_33,\n _hoisted_34,\n _hoisted_35,\n _createVNode(CodeBlock, { syntax: \"diff\" }, {\n default: _withCtx(() => [\n _hoisted_36\n ]),\n _: 1\n }),\n _hoisted_37,\n _hoisted_38,\n _hoisted_39,\n _hoisted_40,\n _createVNode(CodeBlock, { syntax: \"diff\" }, {\n default: _withCtx(() => [\n _hoisted_41\n ]),\n _: 1\n }),\n _hoisted_42,\n _hoisted_43,\n _hoisted_44,\n _createVNode(CodeBlock, { syntax: \"diff\" }, {\n default: _withCtx(() => [\n _hoisted_45\n ]),\n _: 1\n }),\n _hoisted_46,\n _hoisted_47,\n _hoisted_48,\n _createVNode(CodeBlock, { syntax: \"diff\" }, {\n default: _withCtx(() => [\n _hoisted_49\n ]),\n _: 1\n }),\n _hoisted_50,\n _hoisted_51,\n _hoisted_52,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"After merging records, it is a good strategy to start at a low \\\"pct\\\" tag value such as 10 for 10% of emails, and increase gradually as we discussed in our \"),\n _createVNode(_component_router_link, { to: \"/learning/dmarc-a-practical-guide/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"DMARC article\")\n ]),\n _: 1\n }),\n _createTextVNode(\":\")\n ]),\n _createVNode(CodeBlock, { syntax: \"diff\" }, {\n default: _withCtx(() => [\n _hoisted_53\n ]),\n _: 1\n }),\n _hoisted_54,\n _hoisted_55,\n _hoisted_56,\n _hoisted_57,\n _hoisted_58,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"You can also check the DMARC records for any domain name in our \"),\n _createVNode(_component_router_link, { to: \"/txt-lookup/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"TXT lookup\")\n ]),\n _: 1\n }),\n _createTextVNode(\" tool or by entering it here:\")\n ]),\n _createElementVNode(\"form\", _hoisted_59, [\n _createVNode(DomainSearch, {\n emphasize: \"\",\n buttonText: \"Find TXT record\",\n prefill: \"_dmarc.\",\n onSubmitted: redirectTo\n })\n ])\n ]),\n _: 1\n }, 8, [\"title\", \"description\", \"url\", \"breadcrumbs\", \"img1024x512\", \"img1200x630\", \"written\", \"updated\", \"author\", \"editor\"])\n ], 64))\n}\n}\n\n})","import script from \"./EmailSecurityHowToMergeDmarcRecords.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./EmailSecurityHowToMergeDmarcRecords.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, unref as _unref, normalizeClass as _normalizeClass, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"strong\", { class: \"text-xl leading-8 block font-normal text-gray-500 mt-[1.3333333em]\" }, \"Sender Policy Framework (SPF) records in the DNS identify the mail servers allowed to send email for a domain. SPF protects domains and their brands from email abuse by spammers and hackers.\", -1)\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The Simple Mail Transfer Protocol (SMTP) is used to send email. SMTP does not include validation that the sending mail server is allowed to send mail for a domain. So, anyone can use SMTP to send email that appears to be from any domain they wish. For example, a hacker might try to send phishing emails to Bank of America customers from \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"accounts@bankofamerica.com\"),\n /*#__PURE__*/_createTextVNode(\" to gain access to their bank accounts.\")\n], -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"p\", null, \"SPF addresses this weakness in SMTP. It identifies the mail servers permitted to send email for the domain. Email from a server not permitted by the SPF record will be discarded, quarantined, or placed in a spam folder.\", -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"SPF is specified in \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc7208\",\n rel: \"noopener noreferrer\"\n }, \"RFC 7208\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full rounded-lg\",\n src: \"/img/learning/spf-a-practical-guide/the-dns-spf-record-type.jpg\",\n alt: \"Only mail servers with the correct identity can deliver email\",\n title: \"Only mail servers with the correct identity can deliver email\",\n width: \"1200\",\n height: \"600\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, [\n /*#__PURE__*/_createTextVNode(\"Only mail servers with the correct identity can deliver email. By NsLookup.io. Licensed under \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://creativecommons.org/licenses/by/4.0/\",\n title: \"Creative Commons By 4.0 licence\",\n rel: \"nofollow\"\n }, \"CC By 4.0\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"How SPF works\", -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The receiving mail server extracts the domain from the Return-Path field as it receives each email message. A DNS TXT lookup is performed on this domain to retrieve the domain's SPF record. The source server of the email must be among the mail servers identified by the SPF record.\", -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The most straightforward way to identify a mail server in SPF is by IP address. Below is an SPF record that allows the mail server with IP address 10.0.0.1 to send email for the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" domain. No other servers are permitted to send email for the domain.\")\n], -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"example.org. 3600 TXT \\\"v=spf1 ip4:10.0.0.1 -all\\\"\", -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Email headers contain several \\\"from\\\" fields that each serve a different purpose. SPF uses the \\\"Return-Path\\\" field during validation.\")\n], -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Return-Path is the email address where bounce messages are sent. Mail servers use the domain portion of Return-Path to find the domain's SPF record. However, email clients usually display the From field to the user. The From field may contain a different domain.\", -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"p\", null, \"This limitation of SPF is mitigated in two ways:\", -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Domain-based Message Authentication, Reporting, and Conformance (DMARC) adds a domain alignment policy. This policy requires that the From and Return-Path domains match.\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Modern email clients often flag messages where the From and Return-Path domains are different as unsafe.\")\n], -1)\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"SPF record format\", -1)\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Every SPF record must begin with \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"v=spf1\"),\n /*#__PURE__*/_createTextVNode(\". This specifies a version 1 SPF record. This is the only version so far.\")\n], -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Next comes one or more directives. Each directive consists of an optional qualifier followed by a mechanism. The qualifier specifies if mail servers matching this mechanism pass or fail. Each mechanism identifies mail servers by IP address or through extra DNS lookups.\", -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The SPF record ends with the mechanism \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"all\"),\n /*#__PURE__*/_createTextVNode(\". The \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"all\"),\n /*#__PURE__*/_createTextVNode(\" mechanism is used if no other mechanism is a match.\")\n], -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The receiving mail server processes the SPF record from left to right. SPF processing ends when the first match is found. The first match determines if the email will be accepted, rejected, or treated as suspicious.\", -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"SPF qualifiers\", -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Each directive has one of four possible qualifiers:\", -1)\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"+\\\"\"),\n /*#__PURE__*/_createTextVNode(\" Pass. The source server is allowed to send email for the domain. If there is no qualifier, \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"+\"),\n /*#__PURE__*/_createTextVNode(\" is assumed.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"-\\\"\"),\n /*#__PURE__*/_createTextVNode(\" Fail. The source server is not allowed to send email for the domain.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"~\\\"\"),\n /*#__PURE__*/_createTextVNode(\" Softfail. This is a weak failure. The source server is probably not allowed to send email for the domain.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"?\\\"\"),\n /*#__PURE__*/_createTextVNode(\" Neutral. The SPF record does not specify if the source server is allowed to send email for the domain.\")\n ])\n], -1)\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Fail causes the email to be rejected. Softfail allows the email to be accepted, but it may be treated as suspicious. It might be placed into a spam folder or in quarantine.\", -1)\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Neutral is not very useful by itself. But it can be used with DMARC (Domain-based Message Authentication, Reporting, and Conformance) to trigger special mail handling.\", -1)\nconst _hoisted_24 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"SPF mechanisms\", -1)\nconst _hoisted_25 = /*#__PURE__*/_createElementVNode(\"p\", null, \"A mechanism identifies one or more mail servers. Mechanisms include:\", -1)\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"ip4\"),\n /*#__PURE__*/_createTextVNode(\": Specifies an IPv4 address or subnet.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"ip6\"),\n /*#__PURE__*/_createTextVNode(\": Specifies an IPv6 address or subnet.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"mx\"),\n /*#__PURE__*/_createTextVNode(\": Uses a type MX record lookup for the domain.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"a\"),\n /*#__PURE__*/_createTextVNode(\": Uses a type A or AAAA lookup.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"exists\"),\n /*#__PURE__*/_createTextVNode(\": Uses a type A lookup in a different way than the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"a\"),\n /*#__PURE__*/_createTextVNode(\" mechanism.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"include\"),\n /*#__PURE__*/_createTextVNode(\": Includes the SPF record for some other domain name.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"all\"),\n /*#__PURE__*/_createTextVNode(\": This mechanism always appears at the end of the SPF record.\")\n ])\n], -1)\nconst _hoisted_27 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"If a mechanism is determined to be a match, the qualifier decides the email's fate. For example, if the qualifier is omitted or is \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"+\"),\n /*#__PURE__*/_createTextVNode(\", the SPF result is Pass and the email is delivered. If the qualifier is \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"-\"),\n /*#__PURE__*/_createTextVNode(\", the SPF result is Fail and the email is bounced.\")\n], -1)\nconst _hoisted_28 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"The ip4 and ip6 mechanisms\", -1)\nconst _hoisted_29 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"These mechanisms contain either a single IP address or a subnet. A subnet is a range of IP addresses that share a common prefix. For IPv4, the mechanism may specify a single address such as \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"ip4:10.0.0.1\"),\n /*#__PURE__*/_createTextVNode(\" or a subnet such as \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"ip4:10.0.0.0/24\"),\n /*#__PURE__*/_createTextVNode(\". For IPv6, the mechanism may specify a single address such as \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"ip6:2001:1000::1\"),\n /*#__PURE__*/_createTextVNode(\" or a subnet such as \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"ip6:2001:1000::/64\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_30 = /*#__PURE__*/_createElementVNode(\"p\", null, \"These mechanisms match if the mail server's IP address matches the single address or is within the subnet.\", -1)\nconst _hoisted_31 = /*#__PURE__*/_createElementVNode(\"p\", null, \"This example allows an IPv4 subnet and single IPv6 address to send mail for the domain:\", -1)\nconst _hoisted_32 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"example.org. 3600 TXT \\\"v=spf1 ip4:10.0.0.0/24 ip6:2001:1000::1 -all\\\"\", -1)\nconst _hoisted_33 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"The mx mechanism\", -1)\nconst _hoisted_34 = /*#__PURE__*/_createElementVNode(\"p\", null, \"This example omits the domain, so the MX record lookup would be for the domain from the Return-Path field:\", -1)\nconst _hoisted_35 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"example.org. 3600 TXT \\\"v=spf1 mx -all\\\"\", -1)\nconst _hoisted_36 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The domain can be specified explicitly, or another domain can be specified. For example:\", -1)\nconst _hoisted_37 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"example.org. 3600 TXT \\\"v=spf1 mx:examplemailfactory.org -all\\\"\", -1)\nconst _hoisted_38 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"The a mechanism\", -1)\nconst _hoisted_39 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The administrator could publish the mail server IP addresses for the domain at \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"mailservers.example.org\"),\n /*#__PURE__*/_createTextVNode(\" and use this SPF record:\")\n], -1)\nconst _hoisted_40 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"example.org. 3600 TXT \\\"v=spf1 a:mailservers.example.org -all\\\"\", -1)\nconst _hoisted_41 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The domain may be omitted: \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"v=spf1 a -all\"),\n /*#__PURE__*/_createTextVNode(\". The type A or AAAA lookup would be for the current domain, which starts as the domain from the Return-Path field.\")\n], -1)\nconst _hoisted_42 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"The exists mechanism\", -1)\nconst _hoisted_43 = /*#__PURE__*/_createElementVNode(\"p\", null, \"This advanced mechanism is not often used in practice. Here is a trivial example:\", -1)\nconst _hoisted_44 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"example.org. 3600 TXT \\\"v=spf1 exists:some_name.example.org -all\\\"\", -1)\nconst _hoisted_45 = /*#__PURE__*/_createElementVNode(\"code\", null, \"some_name.example.org\", -1)\nconst _hoisted_46 = /*#__PURE__*/_createElementVNode(\"code\", null, \"exists\", -1)\nconst _hoisted_47 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"The include mechanism\", -1)\nconst _hoisted_48 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The include mechanism triggers evaluation of the SPF record for some other domain. Multiple includes are permitted. This mechanism is used when email for the domain is sent by a third-party mail provider. An SPF record can also be split into multiple parts using the include mechanism.\", -1)\nconst _hoisted_49 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"This SPF would be used if the domain's mail provider has an SPF record at \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"examplemailfactory.org\"),\n /*#__PURE__*/_createTextVNode(\":\")\n], -1)\nconst _hoisted_50 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"example.org. 3600 TXT \\\"v=spf1 include:examplemailfactory.org -all\\\"\", -1)\nconst _hoisted_51 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"The all mechanism\", -1)\nconst _hoisted_52 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The all mechanism appears at the end of all SPF records (unless the SPF uses the redirect modifier).\", -1)\nconst _hoisted_53 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The all mechanism specifies what should happen if none of the other mechanisms match. The all mechanism usually appears with the fail or softfail modifier. Softfail is more tolerant of errors in the SPF record, but for security it is best to use \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"-all\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_54 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"SPF modifiers\", -1)\nconst _hoisted_55 = /*#__PURE__*/_createElementVNode(\"p\", null, \"In addition to mechanisms, SPF also has something called modifiers. Modifiers look like mechanisms, but different rules apply. Modifiers are used infrequently. There are two modifiers: redirect and exp. Modifiers are always followed by an equals sign and then a value for the modifier.\", -1)\nconst _hoisted_56 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"The redirect modifier\", -1)\nconst _hoisted_57 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The redirect modifier looks similar to the include mechanism, but there are significant differences. Modifiers are processed only after all mechanisms have been evaluated, and no match has been found.\", -1)\nconst _hoisted_58 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"If an SPF record contains the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"all\"),\n /*#__PURE__*/_createTextVNode(\" mechanism, then at least one of the mechanisms (the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"all\"),\n /*#__PURE__*/_createTextVNode(\" mechanism itself) will always match. So the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"all\"),\n /*#__PURE__*/_createTextVNode(\" mechanism must be omitted when the SPF record uses the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"redirect\"),\n /*#__PURE__*/_createTextVNode(\" modifier.\")\n], -1)\nconst _hoisted_59 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Here is an example that redirects to a third-party email provider. Note there is no \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"all\"),\n /*#__PURE__*/_createTextVNode(\" mechanism:\")\n], -1)\nconst _hoisted_60 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"example.org. 3600 TXT \\\"v=spf1 redirect=examplemailfactory.org\\\"\", -1)\nconst _hoisted_61 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Use of the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"redirect\"),\n /*#__PURE__*/_createTextVNode(\" modifier is rare. The \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"include\"),\n /*#__PURE__*/_createTextVNode(\" mechanism is usually the right choice.\")\n], -1)\nconst _hoisted_62 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"The exp modifier\", -1)\nconst _hoisted_63 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Exp is short for explanation. The \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"exp\"),\n /*#__PURE__*/_createTextVNode(\" modifier is triggered when the SPF check causes mail failure. The \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"exp\"),\n /*#__PURE__*/_createTextVNode(\" modifier gives a DNS name that the receiving mail server will use to retrieve a TXT record. The contents of the TXT result contain an explanation for the failure. SPF macros can be used in the message to provide detailed information.\")\n], -1)\nconst _hoisted_64 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"An example of the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"exp\"),\n /*#__PURE__*/_createTextVNode(\" modifier:\")\n], -1)\nconst _hoisted_65 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"example.org. 3600 TXT \\\"v=spf1 ip4:10.0.0.0/24 exp=explain.spf.example.org -all\\\"\", -1)\nconst _hoisted_66 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The domain would also contain a TXT containing the explanation message at \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"explain.spf.example.org\"),\n /*#__PURE__*/_createTextVNode(\":\")\n], -1)\nconst _hoisted_67 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"explain.spf.example.org. 3600 TXT \\\"Mail for example.org may only be sent by authorized servers\\\"\", -1)\nconst _hoisted_68 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"SPF macros\", -1)\nconst _hoisted_69 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"In addition to the features of SPF we've discussed, \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc7208#section-7\",\n rel: \"noopener noreferrer\"\n }, \"RFC 7208 section 7\"),\n /*#__PURE__*/_createTextVNode(\" also specifies \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"macros\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_70 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Macros add flexibility and power to SPF. Macros appear in the SPF record as a percent sign followed by a macro letter inside curly braces. There are a number of supported macro letters. One macro is \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"%{i}\"),\n /*#__PURE__*/_createTextVNode(\". This macro expands to the IP address of the sending mail server.\")\n], -1)\nconst _hoisted_71 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"%{i}\"),\n /*#__PURE__*/_createTextVNode(\" macro can be used with the exists mechanism. Type A records would be created with names corresponding to each mail server IP address. The addresses in these A records are not used. It is only important that these records exist.\")\n], -1)\nconst _hoisted_72 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"10.0.0.1.spf.example.org. 3600 A 1.2.3.4\\n10.0.0.2.spf.example.org. 3600 A 1.2.3.4\", -1)\nconst _hoisted_73 = /*#__PURE__*/_createElementVNode(\"p\", null, \"With these A records for each of the mail server IP addresses, the SPF record would be:\", -1)\nconst _hoisted_74 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"example.org. 3600 TXT \\\"v=spf1 exists:%{i}.spf.example.org -all\\\"\", -1)\nconst _hoisted_75 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"SPF records are stored in TXT records.\")\n], -1)\nconst _hoisted_76 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"For more details on SPF record type, see \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc7208#section-3.1\",\n rel: \"noopener noreferrer\"\n }, \"RFC 7208 section 3.1\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_77 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"The importance of simplicity\", -1)\nconst _hoisted_78 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Email administrators try to make their SPF records as small and simple as possible. There are a few reasons for this:\", -1)\nconst _hoisted_79 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Efficiency\"),\n /*#__PURE__*/_createTextVNode(\": A complex SPF record may require many DNS lookups and be slow to evaluate.\")\n], -1)\nconst _hoisted_80 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Complexity\"),\n /*#__PURE__*/_createTextVNode(\": A complex SPF record will be harder to get right. And harder to maintain as email servers change over time.\")\n], -1)\nconst _hoisted_81 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Processing limits\"),\n /*#__PURE__*/_createTextVNode(\": \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc7208#section-4.6.4\",\n rel: \"noopener noreferrer\"\n }, \"RFC 7208 section 4.6.4\"),\n /*#__PURE__*/_createTextVNode(\" places a limit of 10 DNS lookups on SPF evaluation. It also recommends a maximum processing time of 20 seconds. A complex SPF record may fail to evaluate within these limits. This will cause legitimate emails to be rejected or treated as spam.\")\n], -1)\nconst _hoisted_82 = /*#__PURE__*/_createElementVNode(\"strong\", null, \"DNS TXT size\", -1)\nconst _hoisted_83 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Amazon as an example\", -1)\nconst _hoisted_84 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Large organizations like Amazon have many email servers. This may require large or complex SPF records. Let's examine Amazon's SPF records as they existed at the time this article was written. The SPF record for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"amazon.com\"),\n /*#__PURE__*/_createTextVNode(\" is:\")\n], -1)\nconst _hoisted_85 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"dig txt amazon.com +short\\n\\\"v=spf1 include:spf1.amazon.com include:spf2.amazon.com include:amazonses.com -all\\\"\", -1)\nconst _hoisted_86 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Amazon has broken its SPF into three parts and used the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"include\"),\n /*#__PURE__*/_createTextVNode(\" mechanism for each part. This keeps each TXT record relatively small in size. It may also allow the parts to be re-used individually by other domains using the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"include\"),\n /*#__PURE__*/_createTextVNode(\" mechanism. They have chosen the more secure \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"-all\"),\n /*#__PURE__*/_createTextVNode(\" over the less secure \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"~all\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_87 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The three separate parts use the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"ip4\"),\n /*#__PURE__*/_createTextVNode(\" mechanism with subnets to identify the IP addresses of Amazon's mail servers:\")\n], -1)\nconst _hoisted_88 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"dig txt +short spf1.amazon.com\\n\\\"v=spf1 ip4:207.171.160.0/19 ip4:87.238.80.0/21 ip4:72.21.192.0/19 ip4:194.154.193.192/27 ip4:194.7.41.152/28 ip4:212.123.28.40/32 ip4:203.81.17.0/24 ip4:178.236.10.128/26 ip4:52.94.124.0/28 ip4:99.78.197.208/28 ip4:52.119.213.144/28 -all\\\"\\n\\ndig txt +short spf2.amazon.com\\n\\\"v=spf1 ip4:176.32.105.0/24 ip4:176.32.127.0/24 ip4:106.50.16.0/28 ip4:205.251.233.32/32 ip4:205.251.233.36/32 ip4:72.21.217.142/32 ip4:52.95.48.152/29 ip4:52.95.49.88/29 -all\\\"\\n\\ndig txt +short amazonses.com\\n\\\"v=spf1 ip4:199.255.192.0/22 ip4:199.127.232.0/22 ip4:54.240.0.0/18 ip4:69.169.224.0/20 ip4:23.249.208.0/20 ip4:23.251.224.0/19 ip4:76.223.176.0/20 ip4:54.240.64.0/19 ip4:54.240.96.0/19 ip4:52.82.172.0/22 -all\\\"\", -1)\nconst _hoisted_89 = /*#__PURE__*/_createElementVNode(\"p\", null, \"This SPF is large. But for an organization with a global footprint like Amazon this can't be helped. Amazon engineers likely work hard to keep the SPF as small as they can, given their network architecture.\", -1)\nconst _hoisted_90 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Finding the SPF record for a domain\", -1)\nconst _hoisted_91 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"SPF records are stored as TXT records, so a normal TXT lookup will retrieve SPF records. The dig or nslookup command line tools can be used. To find the SPF record for Google, use this command and look for the TXT record that begins with \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"v=spf1\"),\n /*#__PURE__*/_createTextVNode(\":\")\n], -1)\nconst _hoisted_92 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"dig TXT google.com\", -1)\nconst _hoisted_93 = /*#__PURE__*/_createElementVNode(\"p\", null, \"On operating systems that support nslookup, you can use the following:\", -1)\nconst _hoisted_94 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"nslookup -type=TXT google.com\", -1)\nconst _hoisted_95 = {\n class: \"not-prose text-base mx-auto max-w-lg\",\n autocomplete: \"off\"\n}\nconst _hoisted_96 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"You may also need DMARC and DKIM\", -1)\nconst _hoisted_97 = /*#__PURE__*/_createElementVNode(\"p\", null, \"SPF is only part of the story for securing email. There are three pillars of email security:\", -1)\nconst _hoisted_98 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Sender Policy Framework (SPF)\"),\n /*#__PURE__*/_createTextVNode(\": SPF ensures that only authorized mail servers can send mail for a domain.\")\n], -1)\nconst _hoisted_99 = /*#__PURE__*/_createElementVNode(\"p\", null, \"While adding SPF to your domain is a good start, consider adding DKIM and DMARC to protect your domain and brand from abuse.\", -1)\nconst _hoisted_100 = { class: \"mx-auto max-w-3xl divide-y-2 divide-gray-200\" }\nconst _hoisted_101 = /*#__PURE__*/_createElementVNode(\"h2\", { class: \"ignore-toc\" }, \"Related questions\", -1)\nconst _hoisted_102 = { class: \"mt-6 space-y-6 divide-y divide-gray-200 [overflow-anchor:none]\" }\nconst _hoisted_103 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg font-medium text-gray-900\" }, \" Why doesn't SPF validate the From address? \", -1)\nconst _hoisted_104 = { class: \"ml-6 flex h-7 items-center\" }\nconst _hoisted_105 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Like many Internet protocols that have been around for a long time, the SMTP protocol has some quirks and inconsistencies.\")\n], -1)\nconst _hoisted_106 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"In \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc822\",\n rel: \"noopener noreferrer\"\n }, \"RFC 822\"),\n /*#__PURE__*/_createTextVNode(\", Return-Path was intended only to be set when the message is about to be delivered and placed in the recipient's inbox. This is when the SPF check is applied.\")\n], -1)\nconst _hoisted_107 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"However, \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc2821\",\n rel: \"noopener noreferrer\"\n }, \"RFC 2821\"),\n /*#__PURE__*/_createTextVNode(\" states: \\\"A message-originating SMTP system SHOULD NOT send a message that already contains a Return-Path header.\\\" This created a loophole for spammers to send messages that contain both From and Return-Path. It may have been necessary at the time to allow existing implementations to work properly.\")\n], -1)\nconst _hoisted_108 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg font-medium text-gray-900\" }, \" Will the email sender get a bounce message if it fails SPF? \", -1)\nconst _hoisted_109 = { class: \"ml-6 flex h-7 items-center\" }\nconst _hoisted_110 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", { class: \"font-medium text-gray-500\" }, \"Yes. Most mail servers will send a \\\"550 SPF Check Failed\\\" bounce message back to the sender.\")\n], -1)\nconst _hoisted_111 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg font-medium text-gray-900\" }, \" Why do I still need SPF when DKIM exists? \", -1)\nconst _hoisted_112 = { class: \"ml-6 flex h-7 items-center\" }\nconst _hoisted_113 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", { class: \"font-medium text-gray-500\" }, \"SPF and DKIM solve different security problems.\")\n], -1)\nconst _hoisted_114 = /*#__PURE__*/_createElementVNode(\"p\", null, \"SPF ensures that only authorized mail servers can send mail for a domain but this does not protect the message from tampering. DKIM adds a digital signature to protect against tampering.\", -1)\nconst _hoisted_115 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg font-medium text-gray-900\" }, \" Should I use ~all or -all? \", -1)\nconst _hoisted_116 = { class: \"ml-6 flex h-7 items-center\" }\nconst _hoisted_117 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", { class: \"font-medium text-gray-500\" }, \"Both are acceptable but -all is more secure.\")\n], -1)\nconst _hoisted_118 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Using \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"~all\"),\n /*#__PURE__*/_createTextVNode(\" results in a soft failure when there is no match for the mail server's IP address. Email may be flagged as suspicious or placed in a spam folder. This is good if the email is legitimate but there is an error in the SPF record. However, this means that malicious email may also be delivered and could reach your customers.\")\n], -1)\nconst _hoisted_119 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"It is best to use \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"-all\"),\n /*#__PURE__*/_createTextVNode(\" and be careful that your SPF record is correct.\")\n], -1)\n\nimport BlogPost from '@/components/layout/BlogPost.vue';\n\n\nimport { useRouter } from 'vue-router';\nimport {\n Disclosure,\n DisclosureButton,\n DisclosurePanel,\n} from '@headlessui/vue';\nimport { ChevronDownIcon } from '@heroicons/vue/24/outline';\nimport { jeff, ruurtjan } from '@/common/authors';\nimport { BlogMeta } from '@/common/blogMeta';\nimport DomainSearch from '@/components/DomainSearch.vue';\nimport CodeBlock from '@/components/micro/CodeBlock.vue';\nimport { learningBreadcrumb, emailBreadcrumb } from '@/model/Breadcrumb';\nimport Callout from '@/components/layout/CalloutComponent.vue';\nimport { domainNameToUrlPath } from '@/common/domainName';\n\nexport const meta: BlogMeta = {\n tag: 'Email and the DNS',\n url: '/learning/spf-a-practical-guide/',\n breadcrumbs: [learningBreadcrumb, emailBreadcrumb],\n title: 'SPF: A practical guide',\n description: 'Sender Policy Framework (SPF) records in the DNS identify the mail servers allowed to send email for a domain. SPF protects domains from email abuse.',\n overviewDescription: 'Sender Policy Framework (SPF) records in the DNS identify the mail servers allowed to send email for a domain. SPF protects domains from email abuse.',\n overviewImage: '/img/learning/spf-a-practical-guide/the-dns-spf-record-type-small.jpg',\n overviewImageAlt: 'SPF in the DNS',\n author: jeff,\n editor: ruurtjan,\n img1024x512: 'https://www.nslookup.io/img/learning/spf-a-practical-guide/the-spf-record-social.jpg',\n img1200x630: 'https://www.nslookup.io/img/learning/spf-a-practical-guide/the-spf-record-social.jpg',\n written: new Date('2022-09-09T09:23:58.118Z'),\n updated: new Date('2023-03-28T11:59:26.073Z'),\n};\n\nconst __default__ = {\n meta,\n};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'EmailSecuritySpf',\n setup(__props) {\n\nconst router = useRouter();\n\nfunction redirectTo(domain: string): void {\n router.push(`/domains/${domainNameToUrlPath(domain)}/email/spf/`);\n}\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"ImageObject\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"email\\\": \\\"mailto:ruurtjan@nslookup.io\\\", \\\"image\\\": \\\"https://www.nslookup.io/img/ruurtjan-lg.jpg\\\", \\\"jobTitle\\\": \\\"CEO\\\", \\\"name\\\": \\\"Ruurtjan Pul\\\", \\\"url\\\": \\\"https://www.nslookup.io/about/ruurtjan-pul/\\\" }, \\\"copyrightHolder\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"https://www.nslookup.io/\\\", \\\"email\\\": \\\"hello@nslookup.io\\\" }, \\\"copyrightYear\\\": 2023, \\\"contentUrl\\\": \\\"https://www.nslookup.io/img/learning/spf-a-practical-guide/the-dns-spf-record-type.jpg\\\", \\\"license\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\", \\\"acquireLicensePage\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\" } \")\n ]),\n _: 1\n }))\n ])),\n _createVNode(BlogPost, {\n title: meta.title,\n description: meta.description,\n url: `https://www.nslookup.io${meta.url}`,\n breadcrumbs: meta.breadcrumbs,\n img1024x512: meta.img1024x512,\n img1200x630: meta.img1200x630,\n written: meta.written,\n updated: meta.updated,\n author: meta.author,\n editor: meta.editor\n }, {\n default: _withCtx(() => [\n _hoisted_1,\n _hoisted_2,\n _hoisted_3,\n _hoisted_4,\n _hoisted_5,\n _hoisted_6,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"SPF records appear in the DNS as \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/txt/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"TXT records\")\n ]),\n _: 1\n }),\n _createTextVNode(\". The TXT record contains text that follows the SPF format. This record identifies the mail servers allowed to send email for the domain.\")\n ]),\n _hoisted_7,\n _hoisted_8,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_9\n ]),\n _: 1\n }),\n _createVNode(Callout, {\n icon: \"info\",\n title: \"Return-Path versus From\",\n heading: \"h2\"\n }, {\n default: _withCtx(() => [\n _hoisted_10,\n _hoisted_11,\n _hoisted_12,\n _hoisted_13\n ]),\n _: 1\n }),\n _hoisted_14,\n _hoisted_15,\n _hoisted_16,\n _hoisted_17,\n _hoisted_18,\n _hoisted_19,\n _hoisted_20,\n _hoisted_21,\n _hoisted_22,\n _hoisted_23,\n _hoisted_24,\n _hoisted_25,\n _hoisted_26,\n _hoisted_27,\n _hoisted_28,\n _hoisted_29,\n _hoisted_30,\n _hoisted_31,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_32\n ]),\n _: 1\n }),\n _hoisted_33,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"This mechanism triggers a type \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/mx/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"MX\")\n ]),\n _: 1\n }),\n _createTextVNode(\" lookup for the domain. A type \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/a/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"A\")\n ]),\n _: 1\n }),\n _createTextVNode(\" or \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/aaaa/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"AAAA\")\n ]),\n _: 1\n }),\n _createTextVNode(\" lookup is performed for each server in the MX record set to arrive at a set of IP addresses. This mechanism matches if the results contain the source mail server's IP address.\")\n ]),\n _hoisted_34,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_35\n ]),\n _: 1\n }),\n _hoisted_36,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_37\n ]),\n _: 1\n }),\n _hoisted_38,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"This mechanism specifies a domain name. The receiving mail server performs a type \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/a/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"A\")\n ]),\n _: 1\n }),\n _createTextVNode(\" or \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/aaaa/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"AAAA\")\n ]),\n _: 1\n }),\n _createTextVNode(\" lookup for the specified name. This mechanism is a match if the IP address of the sending mail server is found in the result.\")\n ]),\n _hoisted_39,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_40\n ]),\n _: 1\n }),\n _hoisted_41,\n _hoisted_42,\n _hoisted_43,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_44\n ]),\n _: 1\n }),\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"This SPF record would trigger a type \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/a/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"A\")\n ]),\n _: 1\n }),\n _createTextVNode(\" lookup for \"),\n _hoisted_45,\n _createTextVNode(\". If any type A record is returned, the mechanism is a match. This example is not useful but the \"),\n _hoisted_46,\n _createTextVNode(\" mechanism can be combined with SPF macros. We'll discuss macros later.\")\n ]),\n _hoisted_47,\n _hoisted_48,\n _hoisted_49,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_50\n ]),\n _: 1\n }),\n _hoisted_51,\n _hoisted_52,\n _hoisted_53,\n _hoisted_54,\n _hoisted_55,\n _hoisted_56,\n _hoisted_57,\n _hoisted_58,\n _hoisted_59,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_60\n ]),\n _: 1\n }),\n _hoisted_61,\n _hoisted_62,\n _hoisted_63,\n _hoisted_64,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_65\n ]),\n _: 1\n }),\n _hoisted_66,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_67\n ]),\n _: 1\n }),\n _hoisted_68,\n _hoisted_69,\n _hoisted_70,\n _hoisted_71,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_72\n ]),\n _: 1\n }),\n _hoisted_73,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_74\n ]),\n _: 1\n }),\n _createVNode(Callout, {\n icon: \"info\",\n title: \"What record type for SPF?\",\n heading: \"h2\"\n }, {\n default: _withCtx(() => [\n _hoisted_75,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"Initially, the creators of SPF wanted to use a new \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"DNS record type\")\n ]),\n _: 1\n }),\n _createTextVNode(\". The numeric value of this type was 99. Unfortunately, it proved too challenging to add a new record type to the global DNS. So SPF records are stored using the TXT record type.\")\n ]),\n _hoisted_76\n ]),\n _: 1\n }),\n _hoisted_77,\n _hoisted_78,\n _createElementVNode(\"ul\", null, [\n _hoisted_79,\n _hoisted_80,\n _hoisted_81,\n _createElementVNode(\"li\", null, [\n _hoisted_82,\n _createTextVNode(\": DNS TXT record strings are \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/txt/#txt-record-format\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"limited to 255 characters\")\n ]),\n _: 1\n }),\n _createTextVNode(\". Larger SPF records are supported, but TXT at the root of the domain is shared with domain authorization and other uses. Overly large TXT record sets may introduce TCP DNS lookups, which should be avoided.\")\n ])\n ]),\n _hoisted_83,\n _hoisted_84,\n _hoisted_85,\n _hoisted_86,\n _hoisted_87,\n _hoisted_88,\n _hoisted_89,\n _hoisted_90,\n _hoisted_91,\n _hoisted_92,\n _hoisted_93,\n _hoisted_94,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"You can also check the SPF records for any domain name in our \"),\n _createVNode(_component_router_link, { to: \"/spf-lookup/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"SPF lookup\")\n ]),\n _: 1\n }),\n _createTextVNode(\" tool or by entering it here:\")\n ]),\n _createElementVNode(\"form\", _hoisted_95, [\n _createVNode(DomainSearch, {\n emphasize: \"\",\n buttonText: \"Find SPF record\",\n onSubmitted: redirectTo\n })\n ]),\n _hoisted_96,\n _hoisted_97,\n _createElementVNode(\"ul\", null, [\n _hoisted_98,\n _createElementVNode(\"li\", null, [\n _createElementVNode(\"strong\", null, [\n _createVNode(_component_router_link, { to: \"/learning/dkim-a-practical-guide/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"Domain-keys Identified Mail (DKIM)\")\n ]),\n _: 1\n })\n ]),\n _createTextVNode(\": DKIM uses public key cryptography to validate the sender's authenticity and to protect email messages from tampering.\")\n ]),\n _createElementVNode(\"li\", null, [\n _createElementVNode(\"strong\", null, [\n _createVNode(_component_router_link, { to: \"/learning/dmarc-a-practical-guide/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"Domain-based Message Authentication, Reporting, and Conformance (DMARC)\")\n ]),\n _: 1\n })\n ]),\n _createTextVNode(\": DMARC adds policy and reporting. It prevents spammers from abusing the Return-Path field to evade SPF. DMARC also allows administrators to control how messages that fail SPF checks should be treated.\")\n ])\n ]),\n _hoisted_99,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"Read my next article to learn \"),\n _createVNode(_component_router_link, { to: \"/learning/mx-vs-spf-vs-dmarc-vs-dkim-vs-bimi/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"the difference between MX, SPF, DKIM, DMARC and BIMI\")\n ]),\n _: 1\n }),\n _createTextVNode(\".\")\n ]),\n _createElementVNode(\"div\", _hoisted_100, [\n _hoisted_101,\n _createElementVNode(\"div\", _hoisted_102, [\n _createVNode(_unref(Disclosure), {\n as: \"div\",\n class: \"pt-6\"\n }, {\n default: _withCtx(({ open }) => [\n _createVNode(_unref(DisclosureButton), {\n as: \"h3\",\n class: \"ignore-toc flex mt-0 w-full items-start justify-between text-left cursor-pointer text-gray-400\"\n }, {\n default: _withCtx(() => [\n _hoisted_103,\n _createElementVNode(\"span\", _hoisted_104, [\n _createVNode(_unref(ChevronDownIcon), {\n class: _normalizeClass([open ? '-rotate-180' : 'rotate-0', 'h-6 w-6 transform']),\n \"aria-hidden\": \"true\"\n }, null, 8, [\"class\"])\n ])\n ]),\n _: 2\n }, 1024),\n _createVNode(_unref(DisclosurePanel), { class: \"mt-2 pr-12\" }, {\n default: _withCtx(() => [\n _hoisted_105,\n _hoisted_106,\n _hoisted_107\n ]),\n _: 1\n })\n ]),\n _: 1\n }),\n _createVNode(_unref(Disclosure), {\n as: \"div\",\n class: \"pt-6\"\n }, {\n default: _withCtx(({ open }) => [\n _createVNode(_unref(DisclosureButton), {\n as: \"h3\",\n class: \"ignore-toc flex mt-0 w-full items-start justify-between text-left cursor-pointer text-gray-400\"\n }, {\n default: _withCtx(() => [\n _hoisted_108,\n _createElementVNode(\"span\", _hoisted_109, [\n _createVNode(_unref(ChevronDownIcon), {\n class: _normalizeClass([open ? '-rotate-180' : 'rotate-0', 'h-6 w-6 transform']),\n \"aria-hidden\": \"true\"\n }, null, 8, [\"class\"])\n ])\n ]),\n _: 2\n }, 1024),\n _createVNode(_unref(DisclosurePanel), { class: \"mt-2 pr-12\" }, {\n default: _withCtx(() => [\n _hoisted_110\n ]),\n _: 1\n })\n ]),\n _: 1\n }),\n _createVNode(_unref(Disclosure), {\n as: \"div\",\n class: \"pt-6\"\n }, {\n default: _withCtx(({ open }) => [\n _createVNode(_unref(DisclosureButton), {\n as: \"h3\",\n class: \"ignore-toc flex mt-0 w-full items-start justify-between text-left cursor-pointer text-gray-400\"\n }, {\n default: _withCtx(() => [\n _hoisted_111,\n _createElementVNode(\"span\", _hoisted_112, [\n _createVNode(_unref(ChevronDownIcon), {\n class: _normalizeClass([open ? '-rotate-180' : 'rotate-0', 'h-6 w-6 transform']),\n \"aria-hidden\": \"true\"\n }, null, 8, [\"class\"])\n ])\n ]),\n _: 2\n }, 1024),\n _createVNode(_unref(DisclosurePanel), { class: \"mt-2 pr-12\" }, {\n default: _withCtx(() => [\n _hoisted_113,\n _hoisted_114\n ]),\n _: 1\n })\n ]),\n _: 1\n }),\n _createVNode(_unref(Disclosure), {\n as: \"div\",\n class: \"pt-6\"\n }, {\n default: _withCtx(({ open }) => [\n _createVNode(_unref(DisclosureButton), {\n as: \"h3\",\n class: \"ignore-toc flex mt-0 w-full items-start justify-between text-left cursor-pointer text-gray-400\"\n }, {\n default: _withCtx(() => [\n _hoisted_115,\n _createElementVNode(\"span\", _hoisted_116, [\n _createVNode(_unref(ChevronDownIcon), {\n class: _normalizeClass([open ? '-rotate-180' : 'rotate-0', 'h-6 w-6 transform']),\n \"aria-hidden\": \"true\"\n }, null, 8, [\"class\"])\n ])\n ]),\n _: 2\n }, 1024),\n _createVNode(_unref(DisclosurePanel), { class: \"mt-2 pr-12\" }, {\n default: _withCtx(() => [\n _hoisted_117,\n _hoisted_118,\n _hoisted_119\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ])\n ])\n ]),\n _: 1\n }, 8, [\"title\", \"description\", \"url\", \"breadcrumbs\", \"img1024x512\", \"img1200x630\", \"written\", \"updated\", \"author\", \"editor\"])\n ], 64))\n}\n}\n\n})","import script from \"./EmailSecuritySpf.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./EmailSecuritySpf.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, unref as _unref, normalizeClass as _normalizeClass, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-xl leading-8 block font-normal text-gray-500 mt-[1.3333333em]\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Another solution is subdomains. Each email sender uses their own subdomain and has their own DMARC policy. This eliminates the problem of merging incompatible DMARC policies, but there are some drawbacks to this approach.\", -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full rounded-lg\",\n src: \"/img/learning/using-different-dmarc-records-for-subdomains/multiple-dmarc-records.jpg\",\n alt: \"Some things are not designed to be used by two people\",\n title: \"Some things are not designed to be used by two people\",\n width: \"1200\",\n height: \"600\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, [\n /*#__PURE__*/_createTextVNode(\"Some things are not designed to be used by two people. By NsLookup.io. Licensed under \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://creativecommons.org/licenses/by/4.0/\",\n title: \"Creative Commons By 4.0 licence\",\n rel: \"nofollow\"\n }, \"CC By 4.0\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Here's an example showing the DMARC records for a business' root domain and separate DMARC policy for promotional and support subdomains:\", -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"_dmarc.example.org. 3600 TXT \\\"v=DMARC1; p=reject; aspf=s; rua=mailto:rua@example.org\\\"\\n_dmarc.promotions.example.org. 3600 TXT \\\"v=DMARC1; p=reject; rua=mailto:promo_rua@example.org\\\"\\n_dmarc.support.example.org. 3600 TXT \\\"v=DMARC1; p=reject; ri=604800; rua=mailto:support_rua@example.org\\\"\\n\", -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"p\", null, \"These DMARC records all specify rejection for email failing DMARC checks, but there are some differences:\", -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Each subdomain has a different email address for aggregate DMARC reports\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"The SPF domain alignment policy is strict for the domain itself but relaxed for the subdomains\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"The support subdomain gets weekly aggregate reports instead of daily\")\n], -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"DNS tree walking in DMARC\", -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"p\", null, \"With three different DMARC records, how do mail servers determine which one to use?\", -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The answer is DNS tree walking using the domain portion of RFC5322.From field in each email message.\", -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Every email contains an RFC5322.From field and an RFC5321.MailFrom field. They serve a different purpose:\", -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Mail clients display the email in the RFC5322.From field as the sender of an email.\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Mail servers send bounce emails to the email address in the RFC5321.MailFrom field when an email can't be delivered.\")\n], -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Formal specification for DNS tree walking in DMARC is ongoing in the Internet draft \\\"\"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/draft-ietf-dmarc-dmarcbis/\",\n rel: \"noopener noreferrer\"\n }, \"draft-ietf-dmarc-dmarcbis\"),\n /*#__PURE__*/_createTextVNode(\"\\\".\")\n], -1)\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"This process involves walking up the DNS tree from the domain in the RFC5322.From field to search for a DMARC record. Using our example above, a receiving mail server would perform these DNS lookups if a message's RFC5322.From field is \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"sender@a.b.support.example.org\"),\n /*#__PURE__*/_createTextVNode(\":\")\n], -1)\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"code\", null, \"_dmarc.a.b.support.example.org\"),\n /*#__PURE__*/_createTextVNode(\" --> No DMARC record found.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"code\", null, \"_dmarc.b.support.example.org\"),\n /*#__PURE__*/_createTextVNode(\" --> No DMARC record found.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"code\", null, \"_dmarc.support.example.org\"),\n /*#__PURE__*/_createTextVNode(\" --> DMARC record found!\")\n ])\n], -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"p\", null, \"DNS tree walking locates the DMARC record at the \\\"closest\\\" domain name at or above the RFC5322.From field. The algorithm also has a shortcut to prevent more than 5 DNS lookups. This shortcut prevents DMARC abuse by malicious parties.\", -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Recipients will see the subdomain in emails\", -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"p\", null, \"A drawback of using DMARC records for subdomains is that the address in the From field will appear to recipients of email as the subdomain and not the root domain for the business.\", -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Instead of coming from \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\", a tech support email would come from \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"support.example.org\"),\n /*#__PURE__*/_createTextVNode(\". It would be nice if all email from subdomains appeared to come from \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Perhaps relaxed SPF domain alignment mode would allow this? Unfortunately, no.\"),\n /*#__PURE__*/_createTextVNode(\" Strict SPF domain alignment mode requires that the two From fields match exactly. Relaxed SPF domain alignment mode allows them to be different, so long as they are related. But the relationship is \\\"child only\\\". The RFC5321.MailFrom must be equal to or longer than the RFC5322.From domain.\")\n], -1)\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"This means that if RFC5322.From is \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"alice@support.example.org\"),\n /*#__PURE__*/_createTextVNode(\" then the RFC5321.MailFrom must be \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"support.example.org\"),\n /*#__PURE__*/_createTextVNode(\" in strict SPF domain alignment mode. Or some child domain of \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"support.example.org\"),\n /*#__PURE__*/_createTextVNode(\" in relaxed SPF domain alignment mode.\")\n], -1)\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Security holes and subdomains\", -1)\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Another drawback is that subdomain administrators can inadvertently torpedo DMARC protection for the domain. Imagine that the domain has \\\"p=reject\\\" in its DMARC policy so that any email that fails DMARC checks is rejected. This is a good measure to combat spam.\", -1)\nconst _hoisted_24 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Later, a subdomain DMARC record is created for promotional email. But the administrator for the subdomain doesn't understand DMARC very well. They decide to set \\\"p=none\\\" so that no promotional email is ever rejected by DMARC:\", -1)\nconst _hoisted_25 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"_dmarc.example.org. 3600 TXT \\\"v=DMARC1; p=reject; rua=mailto:rua@example.org\\\"\\n_dmarc.promotions.example.org. 3600 TXT \\\"v=DMARC1; p=none; rua=mailto:rua@example.org\\\"\\n\", -1)\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"This pattern of DMARC records could allow phishing and spam attacks to be spoofed from \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"promotions.example.org\"),\n /*#__PURE__*/_createTextVNode(\". Attackers could use this security hole to target customers of the business. This poor decision could harm the reputation of the company.\")\n], -1)\nconst _hoisted_27 = /*#__PURE__*/_createElementVNode(\"p\", null, \"To prevent this sort of problem, administrators should review and approve all DMARC record changes anywhere in the domain to ensure that security standards are met.\", -1)\nconst _hoisted_28 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Finding the DMARC record for a domain\", -1)\nconst _hoisted_29 = /*#__PURE__*/_createElementVNode(\"p\", null, \"DMARC records are stored as TXT records, so a standard TXT lookup will retrieve DMARC records. DMARC record names always begin with the label \\\"_dmarc\\\". The dig or nslookup command line tools can be used. To find the DMARC record for Google, use this command:\", -1)\nconst _hoisted_30 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"dig TXT _dmarc.google.com\", -1)\nconst _hoisted_31 = /*#__PURE__*/_createElementVNode(\"p\", null, \"On operating systems that support nslookup, you can use the following:\", -1)\nconst _hoisted_32 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"nslookup -type=TXT _dmarc.google.com\", -1)\nconst _hoisted_33 = {\n class: \"not-prose text-base mx-auto max-w-lg\",\n autocomplete: \"off\"\n}\nconst _hoisted_34 = { class: \"mx-auto max-w-3xl divide-y-2 divide-gray-200\" }\nconst _hoisted_35 = /*#__PURE__*/_createElementVNode(\"h2\", { class: \"ignore-toc\" }, \"Related questions\", -1)\nconst _hoisted_36 = { class: \"mt-6 space-y-6 divide-y divide-gray-200 [overflow-anchor:none]\" }\nconst _hoisted_37 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg font-medium text-gray-900\" }, \" Does DMARC support inheritance? \", -1)\nconst _hoisted_38 = { class: \"ml-6 flex h-7 items-center\" }\nconst _hoisted_39 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", { class: \"font-medium text-gray-500\" }, \"No, DMARC does not support inheritance.\")\n], -1)\nconst _hoisted_40 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Mail Transfer Agents (MTAs) implementing DMARC follow specific steps to locate the DMARC record for each incoming email. This procedure always results in a single DMARC record. Or no DMARC record if the domain does not have one. \", -1)\nconst _hoisted_41 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"inheritance is a common pattern in Computer Science. It's natural to assume in our example above that the DMARC policy for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"promotions.example.org\"),\n /*#__PURE__*/_createTextVNode(\" might inherit some of its DMARC policy from the parent DMARC record at \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_42 = /*#__PURE__*/_createElementVNode(\"p\", null, \"However, DMARC does not work this way. DMARC has no concept of inheritance. Each DMARC record fully specifies a policy. DMARC records at parent domains are irrelevant. Only the single DMARC record for the message's RFC5322.From domain applies.\", -1)\n\nimport BlogPost from '@/components/layout/BlogPost.vue';\n\n\nimport { useRouter } from 'vue-router';\nimport {\n Disclosure,\n DisclosureButton,\n DisclosurePanel,\n} from '@headlessui/vue';\nimport { ChevronDownIcon } from '@heroicons/vue/24/outline';\nimport { jeff, ruurtjan } from '@/common/authors';\nimport { BlogMeta } from '@/common/blogMeta';\nimport DomainSearch from '@/components/DomainSearch.vue';\nimport CodeBlock from '@/components/micro/CodeBlock.vue';\nimport { learningBreadcrumb, emailBreadcrumb } from '@/model/Breadcrumb';\nimport Callout from '@/components/layout/CalloutComponent.vue';\nimport { domainNameToUrlPath } from '@/common/domainName';\n\nexport const meta: BlogMeta = {\n tag: 'Email and the DNS',\n url: '/learning/using-different-dmarc-records-for-subdomains/',\n breadcrumbs: [learningBreadcrumb, emailBreadcrumb],\n title: 'Using different DMARC records for subdomains',\n description: \"DMARC permits only one DMARC record per domain, but subdomains can be used when DMARC policies can't be merged.\",\n overviewDescription: \"DMARC permits only one DMARC record per domain, but subdomains can be used when DMARC policies can't be merged.\",\n overviewImage: '/img/learning/using-different-dmarc-records-for-subdomains/multiple-dmarc-records-small.jpg',\n overviewImageAlt: 'Using different DMARC records for subdomains',\n author: jeff,\n editor: ruurtjan,\n img1024x512: 'https://www.nslookup.io/img/learning/using-different-dmarc-records-for-subdomains/using-different-dmarc-records-for-subdomains-social.jpg',\n img1200x630: 'https://www.nslookup.io/img/learning/using-different-dmarc-records-for-subdomains/using-different-dmarc-records-for-subdomains-social.jpg',\n written: new Date('2022-10-07T07:59:04.693Z'),\n updated: new Date('2023-03-28T11:59:38.386Z'),\n};\n\nconst __default__ = {\n meta,\n};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'EmailSecurityUsingDifferentDmarcRecordsForSubdomains',\n setup(__props) {\n\nconst router = useRouter();\n\nfunction redirectTo(domain: string): void {\n router.push(`/domains/${domainNameToUrlPath(domain)}/dns-records/txt/`);\n}\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"ImageObject\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"email\\\": \\\"mailto:ruurtjan@nslookup.io\\\", \\\"image\\\": \\\"https://www.nslookup.io/img/ruurtjan-lg.jpg\\\", \\\"jobTitle\\\": \\\"CEO\\\", \\\"name\\\": \\\"Ruurtjan Pul\\\", \\\"url\\\": \\\"https://www.nslookup.io/about/ruurtjan-pul/\\\" }, \\\"copyrightHolder\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"https://www.nslookup.io/\\\", \\\"email\\\": \\\"hello@nslookup.io\\\" }, \\\"copyrightYear\\\": 2023, \\\"contentUrl\\\": \\\"https://www.nslookup.io/img/learning/using-different-dmarc-records-for-subdomains/multiple-dmarc-records.jpg\\\", \\\"license\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\", \\\"acquireLicensePage\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\" } \")\n ]),\n _: 1\n }))\n ])),\n _createVNode(BlogPost, {\n title: meta.title,\n description: meta.description,\n url: `https://www.nslookup.io${meta.url}`,\n breadcrumbs: meta.breadcrumbs,\n img1024x512: meta.img1024x512,\n img1200x630: meta.img1200x630,\n written: meta.written,\n updated: meta.updated,\n author: meta.author,\n editor: meta.editor\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"strong\", _hoisted_1, [\n _createTextVNode(\"Each domain name may have only one \"),\n _createVNode(_component_router_link, { to: \"/learning/dmarc-a-practical-guide/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"DMARC\")\n ]),\n _: 1\n }),\n _createTextVNode(\" record. When you connect multiple email services to a domain name, they will ask you to set different DMARC records. You can \"),\n _createVNode(_component_router_link, { to: \"/learning/how-to-merge-dmarc-records/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"merge DMARC records\")\n ]),\n _: 1\n }),\n _createTextVNode(\", but that is not always practical.\")\n ]),\n _hoisted_2,\n _hoisted_3,\n _hoisted_4,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_5\n ]),\n _: 1\n }),\n _hoisted_6,\n _hoisted_7,\n _hoisted_8,\n _hoisted_9,\n _hoisted_10,\n _createVNode(Callout, {\n icon: \"info\",\n title: \"What are RFC5322.From and RFC5321.MailFrom?\",\n heading: \"h3\"\n }, {\n default: _withCtx(() => [\n _hoisted_11,\n _hoisted_12\n ]),\n _: 1\n }),\n _hoisted_13,\n _hoisted_14,\n _hoisted_15,\n _hoisted_16,\n _hoisted_17,\n _hoisted_18,\n _hoisted_19,\n _hoisted_20,\n _hoisted_21,\n _hoisted_22,\n _hoisted_23,\n _hoisted_24,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_25\n ]),\n _: 1\n }),\n _hoisted_26,\n _hoisted_27,\n _hoisted_28,\n _hoisted_29,\n _hoisted_30,\n _hoisted_31,\n _hoisted_32,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"You can also check the DMARC records for any domain name in our \"),\n _createVNode(_component_router_link, { to: \"/txt-lookup/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"TXT lookup\")\n ]),\n _: 1\n }),\n _createTextVNode(\" tool or by entering it here:\")\n ]),\n _createElementVNode(\"form\", _hoisted_33, [\n _createVNode(DomainSearch, {\n emphasize: \"\",\n buttonText: \"Find TXT record\",\n prefill: \"_dmarc.\",\n onSubmitted: redirectTo\n })\n ]),\n _createElementVNode(\"div\", _hoisted_34, [\n _hoisted_35,\n _createElementVNode(\"div\", _hoisted_36, [\n _createVNode(_unref(Disclosure), {\n as: \"div\",\n class: \"pt-6\"\n }, {\n default: _withCtx(({ open }) => [\n _createVNode(_unref(DisclosureButton), {\n as: \"h3\",\n class: \"ignore-toc flex mt-0 w-full items-start justify-between text-left cursor-pointer text-gray-400\"\n }, {\n default: _withCtx(() => [\n _hoisted_37,\n _createElementVNode(\"span\", _hoisted_38, [\n _createVNode(_unref(ChevronDownIcon), {\n class: _normalizeClass([open ? '-rotate-180' : 'rotate-0', 'h-6 w-6 transform']),\n \"aria-hidden\": \"true\"\n }, null, 8, [\"class\"])\n ])\n ]),\n _: 2\n }, 1024),\n _createVNode(_unref(DisclosurePanel), { class: \"mt-2 pr-12\" }, {\n default: _withCtx(() => [\n _hoisted_39,\n _hoisted_40,\n _hoisted_41,\n _hoisted_42\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ])\n ])\n ]),\n _: 1\n }, 8, [\"title\", \"description\", \"url\", \"breadcrumbs\", \"img1024x512\", \"img1200x630\", \"written\", \"updated\", \"author\", \"editor\"])\n ], 64))\n}\n}\n\n})","import script from \"./EmailSecurityUsingDifferentDmarcRecordsForSubdomains.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./EmailSecurityUsingDifferentDmarcRecordsForSubdomains.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"strong\", { class: \"text-xl leading-8 block font-normal text-gray-500 mt-[1.3333333em]\" }, \"Every TLD registry maintains data about registered domain names. They publish this data over the WHOIS protocol. Currently, 36 registries publish the location of their WHOIS servers using SRV records.\", -1)\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full rounded-lg\",\n src: \"/img/learning/finding-whois-servers-using-srv-records/finding-whois-servers-using-srv-records.jpg\",\n alt: \"Finding the correct WHOIS server for a domain name isn't trivial\",\n title: \"Finding the correct WHOIS server for a domain name isn't trivial\",\n width: \"1200\",\n height: \"600\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, [\n /*#__PURE__*/_createTextVNode(\"Finding the correct WHOIS server for a domain name isn't trivial. By NsLookup.io. Licensed under \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://creativecommons.org/licenses/by/4.0/\",\n title: \"Creative Commons By 4.0 licence\",\n rel: \"nofollow\"\n }, \"CC By 4.0\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"code\", null, \".de\", -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"❯ dig +short _nicname._tcp.de srv\\n0 0 43 whois.denic.de.\\n\", -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"I've queried the SRV records for every TLD according to \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://data.iana.org/TLD/tlds-alpha-by-domain.txt\",\n rel: \"noopener\"\n }, \"ICANN's TLD list\"),\n /*#__PURE__*/_createTextVNode(\" on 2023-05-15. This show that out of the 1479 TLDs, only 36 have adopted this practice. That's less than 2.5%.\")\n], -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"p\", null, \"After 50 years of WHOIS, it is — ironically — still hard to know who the authoritative WHOIS server is.\", -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"hr\", null, null, -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"p\", null, \"This is the full list of TLDs that publish the location of their WHOIS servers using SRV records as of 2023-05-15:\", -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"table\", null, [\n /*#__PURE__*/_createElementVNode(\"thead\", null, [\n /*#__PURE__*/_createElementVNode(\"th\", null, \"TLD\"),\n /*#__PURE__*/_createElementVNode(\"th\", null, \"WHOIS server\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tbody\", null, [\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"AM\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.amnic.net.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"AT\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.nic.at.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"AX\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.ax.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"BE\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.dns.be.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"BG\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.register.bg.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"BIZ\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.nic.biz.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"CH\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.nic.ch.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"CL\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.nic.cl.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"CO\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.nic.co.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"DE\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.denic.de.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"DK\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.dk-hostmaster.dk.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"FO\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.nic.fo.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"FR\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.nic.fr.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"GG\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.gg.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"HU\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.nic.hu.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"IS\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.isnic.is.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"JE\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.je.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"LA\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.nic.la.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"LI\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.nic.ch.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"LU\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.dns.lu.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"MD\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.nic.md.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"MX\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.nic.mx.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"NO\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.norid.no.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"NZ\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.srs.net.nz.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"PM\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.nic.pm.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"PW\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.centralnic.com.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"RE\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.nic.re.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"SE\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.nic-se.se.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"SI\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.register.si.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"TF\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.nic.tf.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"UA\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.ua.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"UK\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.nic.uk.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"US\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.nic.us.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"WF\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.nic.wf.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"XN--Y9A3AQ (հայ)\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.amnic.net.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"YT\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"whois.nic.yt.\")\n ])\n ])\n], -1)\n\nimport BlogPost from '@/components/layout/BlogPost.vue';\n\nimport { ruurtjan } from '@/common/authors';\nimport { BlogMeta } from '@/common/blogMeta';\nimport { learningBreadcrumb } from '@/model/Breadcrumb';\n\nconst meta: BlogMeta = {\n tag: 'Domain names',\n url: '/learning/finding-whois-servers-using-srv-records/',\n breadcrumbs: [learningBreadcrumb],\n title: 'Finding WHOIS servers using SRV records',\n description: 'Every TLD registry publishes data about registered domain names using WHOIS. 36 registries publish the location of their WHOIS servers using SRV records.',\n overviewImage: '/img/learning/finding-whois-servers-using-srv-records/finding-whois-servers-using-srv-records-small.jpg',\n overviewImageAlt: 'Finding WHOIS servers using SRV records',\n overviewDescription: 'Every TLD registry publishes data about registered domain names using WHOIS. 36 registries publish the location of their WHOIS servers using SRV records.',\n author: ruurtjan,\n editor: undefined,\n img1024x512: 'https://www.nslookup.io/img/learning/finding-whois-servers-using-srv-records/finding-whois-servers-using-srv-records-social.jpg',\n img1200x630: 'https://www.nslookup.io/img/learning/finding-whois-servers-using-srv-records/finding-whois-servers-using-srv-records-social.jpg',\n written: new Date('2023-05-15T13:42:15.009Z'),\n updated: undefined,\n};\n\nconst __default__ = {\n meta,\n};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'FindingWhoisServersUsingSrvRecords',\n setup(__props) {\n\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_CodeBlock = _resolveComponent(\"CodeBlock\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"ImageObject\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"email\\\": \\\"mailto:ruurtjan@nslookup.io\\\", \\\"image\\\": \\\"https://www.nslookup.io/img/ruurtjan-lg.jpg\\\", \\\"jobTitle\\\": \\\"CEO\\\", \\\"name\\\": \\\"Ruurtjan Pul\\\", \\\"url\\\": \\\"https://www.nslookup.io/about/ruurtjan-pul/\\\" }, \\\"copyrightHolder\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"https://www.nslookup.io/\\\", \\\"email\\\": \\\"hello@nslookup.io\\\" }, \\\"copyrightYear\\\": 2023, \\\"contentUrl\\\": \\\"https://www.nslookup.io/img/learning/finding-whois-servers-using-srv-records/finding-whois-servers-using-srv-records.jpg\\\", \\\"license\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\", \\\"acquireLicensePage\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\" } \")\n ]),\n _: 1\n }))\n ])),\n _createVNode(BlogPost, {\n title: meta.title,\n description: meta.description,\n url: `https://www.nslookup.io${meta.url}`,\n breadcrumbs: meta.breadcrumbs,\n img1024x512: meta.img1024x512,\n img1200x630: meta.img1200x630,\n written: meta.written,\n updated: meta.updated,\n author: meta.author,\n editor: meta.editor\n }, {\n default: _withCtx(() => [\n _hoisted_1,\n _hoisted_2,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"For example, the \"),\n _hoisted_3,\n _createTextVNode(\" TLD registry publishes the location of its WHOIS server in an \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/srv/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"SRV record\")\n ]),\n _: 1\n }),\n _createTextVNode(\":\")\n ]),\n _createVNode(_component_CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_4\n ]),\n _: 1\n }),\n _hoisted_5,\n _hoisted_6,\n _hoisted_7,\n _hoisted_8,\n _hoisted_9\n ]),\n _: 1\n }, 8, [\"title\", \"description\", \"url\", \"breadcrumbs\", \"img1024x512\", \"img1200x630\", \"written\", \"updated\", \"author\", \"editor\"])\n ], 64))\n}\n}\n\n})","import script from \"./FindingWhoisServersUsingSrvRecords.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./FindingWhoisServersUsingSrvRecords.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, unref as _unref, normalizeClass as _normalizeClass, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"strong\", { class: \"text-xl leading-8 block font-normal text-gray-500 mt-[1.3333333em]\" }, \"An important part of the process of creating a new website, blog, email, or other Internet service is registering the new DNS domain name. Registration inserts the new domain name into the global DNS so that everyone across the Internet can resolve it and make use of its services.\", -1)\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"You can create a new website or other Internet service without registering a domain name. For example, you could create a new blog and publish it through someone else's domain, such as \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.wordpress.org\"),\n /*#__PURE__*/_createTextVNode(\". However, you might instead want your very own domain name, perhaps at \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\". To make this happen, you will have to register \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" in the DNS.\")\n], -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"p\", null, \"When you register a domain name, your registrar adds it to the set of domain names on the Internet DNS. In reality, of course, it's a bit more complex. So let's see how it really works.\", -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full rounded-lg\",\n src: \"/img/learning/how-does-domain-name-registration-work/registering-a-domain.jpg\",\n alt: \"Registering a domain is like adding a book to the library\",\n title: \"Registering a domain is like adding a book to the library\",\n width: \"1200\",\n height: \"600\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, [\n /*#__PURE__*/_createTextVNode(\"Registering a domain is like adding a book to the library. By NsLookup.io. Licensed under \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://creativecommons.org/licenses/by/4.0/\",\n title: \"Creative Commons By 4.0 licence\",\n rel: \"nofollow\"\n }, \"CC By 4.0\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Registrants, registries, registrars, and ICANN\", -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"p\", null, \"There are four main players in the process of registering a new domain name:\", -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, \"The registrant\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"The registrar\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"The registry\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"ICANN\")\n], -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"h3\", { id: \"the-registrant\" }, \"The registrant\", -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"p\", null, \"This may be you! The domain registrant is the person or company who would like to register a new domain name. This may be the owner of a small business, the IT department of a large corporation, or an individual person who wants to register a name for their personal blog.\", -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"h3\", { id: \"the-registrar\" }, \"The registrar\", -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"p\", null, \"A domain registrar is a company that sells services to allow end users to purchase and manage their own domain names in the DNS. A registrar leases domain names and provides the services necessary to insert that domain name into the global DNS.\", -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Domain names are leased on a yearly basis, not bought outright. If the lease is not renewed, the domain name will be removed from the DNS and will become available for someone else to lease.\", -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"h3\", { id: \"the-registry\" }, \"The registry\", -1)\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"As mentioned earlier, registrars are companies that sell domain name registration services. Domain registries, on the other hand, are databases of DNS names under each of the TLDs. Each registry is operated by a different organization. For example, VeriSign operates the registry for the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"com\"),\n /*#__PURE__*/_createTextVNode(\" TLD.\")\n], -1)\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"p\", null, \"As the registrant for a new domain name, you will need to work only with a registrar. The registrar will work with the registry on your behalf.\", -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"ICANN\", -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"All this, at a very high level, is overseen by \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://www.icann.org/\",\n rel: \"noopener noreferrer\"\n }, \"ICANN\"),\n /*#__PURE__*/_createTextVNode(\" (Internet Corporation for Assigned Names and Numbers). ICANN is a non-profit organization with headquarters in California. Formed in 1998 by the US government, ICANN transitioned in 2017 to a global multi-stakeholder model. ICANN manages domain name registries and IP addresses to ensure the stability of the Internet and to foster competition and customer choice. ICANN also oversees operation of the Internet root zone. ICANN also grants accreditation to registrars.\")\n], -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Accreditation by ICANN is a long and complex process. Each registrar pays a fee to apply, plus a yearly accreditation fee, and also a quarterly fee. These fees go towards the operation of ICANN itself. Some of the requirements include:\", -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, \"A solid business plan\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Financial solvency\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"A secure and robust network architecture\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"A plan for good customer service\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Processes to prevent domain name abuse\")\n], -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"code\", null, \"\\\".\\\"\", -1)\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Originally, the TLDs included the single label domains we are all familiar with today such as \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"com\"),\n /*#__PURE__*/_createTextVNode(\", \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"edu\"),\n /*#__PURE__*/_createTextVNode(\", \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"mil\"),\n /*#__PURE__*/_createTextVNode(\", and others. Today, these TLDs are called Generic Top-level Domains (gTLDs) because they are associated with a theme rather than a nation.\")\n], -1)\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"There are also over 300 Country Code Top-level Domains (ccTLDs). Each ccTLD is for a specific nation such as \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"uk\"),\n /*#__PURE__*/_createTextVNode(\", \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"jp\"),\n /*#__PURE__*/_createTextVNode(\", and \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"au\"),\n /*#__PURE__*/_createTextVNode(\". Some ccTLDs have become popular names for business because they are catchy. For example, the ccTLD \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"fm\"),\n /*#__PURE__*/_createTextVNode(\" is for the Federated States of Micronesia but is often used by FM radio stations and podcasts, and the ccTLD \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"io\"),\n /*#__PURE__*/_createTextVNode(\" is for the British Indian Ocean Territory but has become popular with technology companies and startups (because IO is the acronym for Input/Output).\")\n], -1)\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"What happens when you register a domain name?\", -1)\nconst _hoisted_24 = /*#__PURE__*/_createElementVNode(\"p\", null, \"As a new domain's registrant, here are the steps you will need to follow and the events that will occur in the background:\", -1)\nconst _hoisted_25 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Select a registrar\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Select a new domain name and create a zone\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Claim the new domain name with the registrar\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Registrar sends NS records to the registry\")\n], -1)\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"Select a registrar\", -1)\nconst _hoisted_27 = /*#__PURE__*/_createElementVNode(\"p\", null, \"A registrant may use any registrar they wish, but not all registrars support all registries. Some newer TLDs and some ccTLDs may operate with only a few registrars, or perhaps even only one registrar.\", -1)\nconst _hoisted_28 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Enable strong MFA on your registrar account to protect your domains from hijacking.\", -1)\nconst _hoisted_29 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"Select a new domain name and create a zone\", -1)\nconst _hoisted_30 = /*#__PURE__*/_createElementVNode(\"p\", null, \"You may have a domain name in mind already, or you may use search tools provided by your registrar to see what names are available.\", -1)\nconst _hoisted_31 = /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\", -1)\nconst _hoisted_32 = /*#__PURE__*/_createElementVNode(\"p\", null, \"It is important to set up the zone correctly so that the new domain will function properly. Some registrars will validate the zone before they will publish NS records in the appropriate registry to protect their customers from accidental misconfigurations. Also note that a zone that is not set up correctly may cause the domain to be flagged as a potential source of spam or suspicious activity.\", -1)\nconst _hoisted_33 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Some registrars may allow you to claim a domain before creating the zone. Check with your registrar for the details of their exact process.\", -1)\nconst _hoisted_34 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"Claim the new domain name with the registrar\", -1)\nconst _hoisted_35 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Log onto the web portal of your registrar using your account and purchase the new domain name for at least one year. The cost may run anywhere from a few dollars up to several hundred dollars per year, depending on the registrar and the new domain's TLD. The registrar may perform validation that your DNS zone has been properly created before allowing you to complete this step.\", -1)\nconst _hoisted_36 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Part of this process will be to set contact information for the domain. This is called Whois information after the name of the Internet directory where it is stored. ICANN requires that all domains have owner information including the name of a person or company, a physical mailing address, and other information. Your registrar will insert this into the registry on your behalf, but it will be hidden for privacy.\", -1)\nconst _hoisted_37 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"Registrar sends NS records to the registry\", -1)\nconst _hoisted_38 = /*#__PURE__*/_createElementVNode(\"p\", null, \"If at some point in the future you change the NS records for the domain, you must change them with your registrar as well. This change will also take minutes to hours to propagate to the DNS servers authoritative for the TLD. NS record changes for a domain should be done carefully and incrementally, with consideration for the TTLs of the records and the propagation time for the registrar and TLD.\", -1)\nconst _hoisted_39 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"This is a good kind of hacking. \\\"Domain hacking\\\" is coming up with a clever domain name that incorporates the TLD as part of a word or phrase. For example, \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://ta.co\",\n rel: \"noopener noreferrer\",\n target: \"_blank\"\n }, \"ta.co\"),\n /*#__PURE__*/_createTextVNode(\" redirects to Taco Bell's main website and \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://n.pr\",\n rel: \"noopener noreferrer\",\n target: \"_blank\"\n }, \"n.pr\"),\n /*#__PURE__*/_createTextVNode(\" redirects to National Public Radio's (NPR) main website. These domain hacks use the ccTLDs of Colombia and Puerto Rico, even though neither is tied to those locales.\")\n], -1)\nconst _hoisted_40 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Different ccTLDs have different restrictions on who may register domains with them. Some welcome registrants from across the globe, but other ccTLDs require registrants to have ties to the country or territory of the ccTLD.\", -1)\nconst _hoisted_41 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Changing an existing domain\", -1)\nconst _hoisted_42 = /*#__PURE__*/_createElementVNode(\"p\", null, \"After registering the domain, there are two major types of changes that might be made to DNS records for the domain:\", -1)\nconst _hoisted_43 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Changes to DNS records within the zone\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Changes to the zone's NS records\")\n], -1)\nconst _hoisted_44 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"If \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" has been registered, then at any time the DNS administrator may add or change DNS records inside the zone. For example, to add or update records at \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"www.example.org\"),\n /*#__PURE__*/_createTextVNode(\". This includes all records other than type NS at \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" itself. This type of change can be made in the zone at any time. No changes by the registrar are necessary, and it is not necessary to inform the registrar that changes in the zone are being made.\")\n], -1)\nconst _hoisted_45 = /*#__PURE__*/_createElementVNode(\"p\", null, \"There are a number of strategies that can be employed to safely change NS records. These may involve making a single NS record change at a time, with a pause between stages to ensure that nothing has gone wrong. Good monitoring and a plan to roll the changes back if something goes wrong are strongly recommended.\", -1)\nconst _hoisted_46 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Domain transfer\", -1)\nconst _hoisted_47 = /*#__PURE__*/_createElementVNode(\"p\", null, \"ICANN supports transferring domains from one registrar to another, and transferring ownership from one party to another as part of its mandates to promote competition and customer choice.\", -1)\nconst _hoisted_48 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Transferring ownership of an existing domain replaces the current owner of the domain in the registry with a new owner. Each registrar has their own process to ensure that the request is legitimate. Generally, both parties must agree to the transfer via a secure mechanism.\", -1)\nconst _hoisted_49 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The owner of a domain may also transfer the domain to a new registrar. You might transfer to a new registrar if you are unhappy with the service provided by your current registrar.\", -1)\nconst _hoisted_50 = /*#__PURE__*/_createElementVNode(\"p\", null, \"There are some restrictions on this. For example, a domain transfer request may be denied if the domain is less than 60 days old to prevent abuse by malicious parties.\", -1)\nconst _hoisted_51 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Domain locking\", -1)\nconst _hoisted_52 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Many registrars offer the ability to \\\"lock\\\" the domain to the registrar due to incidents of malicious domain hijacking in the past. The registrar will automatically refuse any request to transfer the domain to another registrar while a domain is locked.\", -1)\nconst _hoisted_53 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Domain locking is a good safeguard against domain hijacking, where a malicious party attempts to fraudulently transfer the domain to another registrar, so they can take it over. The domain can be unlocked at any time. This requires an additional factor of authentication.\", -1)\nconst _hoisted_54 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Keeping domains safe\", -1)\nconst _hoisted_55 = /*#__PURE__*/_createElementVNode(\"p\", null, \"It's important to keep your domains safe. An attacker may attempt to hijack your domains through social engineering or other means, to steal data from your customers or to use your domain for some other nefarious purpose.\", -1)\nconst _hoisted_56 = /*#__PURE__*/_createElementVNode(\"p\", null, \"There are a few things that DNS administrators can and should do to keep domains safe:\", -1)\nconst _hoisted_57 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Strong passwords\"),\n /*#__PURE__*/_createTextVNode(\": Use unique and strong passwords for registrar accounts.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Use multi-factor authentication (MFA)\"),\n /*#__PURE__*/_createTextVNode(\": Enable strong MFA on registrar accounts. Note that MFA based on text (SMS) is not particularly strong.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Use domain locking\"),\n /*#__PURE__*/_createTextVNode(\": Domain transfer is rare, so keep domains locked to the registrar whenever possible.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Don't allow domains to expire\"),\n /*#__PURE__*/_createTextVNode(\": Once the lease expires, another party may be able to register the domain. Use auto-renewal for payment and update payment methods when necessary, for example when a new credit card number is issued. You may want to pre-pay for a number of years if the registrar permits.\")\n ])\n], -1)\nconst _hoisted_58 = { class: \"mx-auto max-w-3xl divide-y-2 divide-gray-200\" }\nconst _hoisted_59 = /*#__PURE__*/_createElementVNode(\"h2\", { class: \"ignore-toc\" }, \"Related questions\", -1)\nconst _hoisted_60 = { class: \"mt-6 space-y-6 divide-y divide-gray-200 [overflow-anchor:none]\" }\nconst _hoisted_61 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg font-medium text-gray-900\" }, \" How to select a registrar? \", -1)\nconst _hoisted_62 = { class: \"ml-6 flex h-7 items-center\" }\nconst _hoisted_63 = /*#__PURE__*/_createElementVNode(\"p\", null, \"There are many registrars out there these days, all offering similar services. There are a few things you might consider when selecting a registrar:\", -1)\nconst _hoisted_64 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Security\"),\n /*#__PURE__*/_createTextVNode(\": Many domains have been hijacked in the past, often through social engineering and sloppy security practices by registrars. It is worth selecting a registrar that offers strong multi-factor authentication (MFA) and is known for a commitment to security.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Reputation\"),\n /*#__PURE__*/_createTextVNode(\": It may be tempting to select a small registrar to save a few dollars. The security of your domain is likely very important to you, so it may be worth selecting a well-known, large registrar that has a good reputation for security and customer service.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Ecosystem\"),\n /*#__PURE__*/_createTextVNode(\": You may already host your website or service on a platform that also offers domain registration. It may be easiest to purchase all of your services from a single vendor. This will most likely make administration tasks simpler.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"SSL support\"),\n /*#__PURE__*/_createTextVNode(\": If you are creating a new website, you may want to also purchase SSL certificates for your new domain name, so selecting a registrar that offers this service may be important.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"TLD support\"),\n /*#__PURE__*/_createTextVNode(\": Not all registrars can lease names in all TLDs. If you have a particular TLD in mind, for example the ccTLD of your home nation, you may need to select a registrar that can operate with that TLD.\")\n ])\n], -1)\nconst _hoisted_65 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg font-medium text-gray-900\" }, \" How to select a domain name? \", -1)\nconst _hoisted_66 = { class: \"ml-6 flex h-7 items-center\" }\nconst _hoisted_67 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Finding the right domain name for your new website or service can be challenging.\", -1)\nconst _hoisted_68 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Most registrars offer search tools to help you find a domain name. If you want your domain name to include a particular word, these search tools can give you a list of variants that are available and show you which TLDs do not already have that term registered.\", -1)\nconst _hoisted_69 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Domain names should be short and easy for people to remember. It is generally best to avoid numbers in domain names, but they are legal. It is advisable to avoid trademarks and confusion with other businesses.\", -1)\nconst _hoisted_70 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Part of selecting a domain name will be to select a TLD. It's best to choose a TLD that will be easy for customers to remember. The \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"com\"),\n /*#__PURE__*/_createTextVNode(\" TLD is always a good choice for a business website, or you may choose a TLD that is commonly used by other businesses in your industry. If your business is strongly tied to a particular country, then the ccTLD for your country may be a good choice.\")\n], -1)\n\nimport BlogPost from '@/components/layout/BlogPost.vue';\n\nimport {\n Disclosure,\n DisclosureButton,\n DisclosurePanel,\n} from '@headlessui/vue';\nimport { ChevronDownIcon } from '@heroicons/vue/24/outline';\nimport { jeff, ruurtjan } from '@/common/authors';\nimport { BlogMeta } from '@/common/blogMeta';\nimport { learningBreadcrumb } from '@/model/Breadcrumb';\nimport Callout from '@/components/layout/CalloutComponent.vue';\n\nconst meta: BlogMeta = {\n tag: 'Domain names',\n url: '/learning/how-does-domain-name-registration-work/',\n breadcrumbs: [learningBreadcrumb],\n title: 'How does domain name registration work?',\n description: 'Domain registration is the process of making a new DNS zone available on the Internet.',\n overviewDescription: 'Domain registration is the process of making a new DNS zone available on the Internet.',\n overviewImage: '/img/learning/how-does-domain-name-registration-work/registering-a-domain-small.jpg',\n overviewImageAlt: 'How does domain name registration work?',\n author: jeff,\n editor: ruurtjan,\n img1024x512: 'https://www.nslookup.io/img/learning/how-does-domain-name-registration-work/how-does-domain-name-registration-work-social.jpg',\n img1200x630: 'https://www.nslookup.io/img/learning/how-does-domain-name-registration-work/how-does-domain-name-registration-work-social.jpg',\n written: new Date('2022-06-09T02:34:25.045Z'),\n updated: new Date('2023-03-28T12:00:07.611Z'),\n};\n\nconst __default__ = {\n meta,\n};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'HowDoesDomainNameRegistrationWork',\n setup(__props) {\n\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"ImageObject\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"email\\\": \\\"mailto:ruurtjan@nslookup.io\\\", \\\"image\\\": \\\"https://www.nslookup.io/img/ruurtjan-lg.jpg\\\", \\\"jobTitle\\\": \\\"CEO\\\", \\\"name\\\": \\\"Ruurtjan Pul\\\", \\\"url\\\": \\\"https://www.nslookup.io/about/ruurtjan-pul/\\\" }, \\\"copyrightHolder\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"https://www.nslookup.io/\\\", \\\"email\\\": \\\"hello@nslookup.io\\\" }, \\\"copyrightYear\\\": 2023, \\\"contentUrl\\\": \\\"https://www.nslookup.io/img/learning/how-does-domain-name-registration-work/registering-a-domain.jpg\\\", \\\"license\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\", \\\"acquireLicensePage\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\" } \")\n ]),\n _: 1\n }))\n ])),\n _createVNode(BlogPost, {\n title: meta.title,\n description: meta.description,\n url: `https://www.nslookup.io${meta.url}`,\n breadcrumbs: meta.breadcrumbs,\n img1024x512: meta.img1024x512,\n img1200x630: meta.img1200x630,\n written: meta.written,\n updated: meta.updated,\n author: meta.author,\n editor: meta.editor\n }, {\n default: _withCtx(() => [\n _hoisted_1,\n _hoisted_2,\n _hoisted_3,\n _hoisted_4,\n _hoisted_5,\n _hoisted_6,\n _hoisted_7,\n _hoisted_8,\n _hoisted_9,\n _hoisted_10,\n _hoisted_11,\n _hoisted_12,\n _hoisted_13,\n _hoisted_14,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"The registrant is the customer who wishes to register a new domain name. The registrant engages a registrar to create and manage registration of a domain name. And finally, the registrar works with the registry to actually create the \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/ns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"NS records\")\n ]),\n _: 1\n }),\n _createTextVNode(\" in the TLD for the new domain name.\")\n ]),\n _hoisted_15,\n _hoisted_16,\n _hoisted_17,\n _hoisted_18,\n _hoisted_19,\n _createVNode(Callout, {\n icon: \"info\",\n title: \"Top-level domains\",\n heading: \"h2\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"The DNS begins at the root zone \"),\n _hoisted_20,\n _createTextVNode(\" and flows downwards into the top-level domains (TLDs). As we discussed in our article on \"),\n _createVNode(_component_router_link, {\n to: \"/learning/zone-delegation/\",\n title: \"DNS zone delegation\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(\"zone delegation\")\n ]),\n _: 1\n }),\n _createTextVNode(\", the DNS resolves names starting at the root and moving downwards through delegations. The root zone and the TLDs are involved in resolving every single DNS name on the Internet!\")\n ]),\n _hoisted_21,\n _hoisted_22\n ]),\n _: 1\n }),\n _hoisted_23,\n _hoisted_24,\n _hoisted_25,\n _hoisted_26,\n _hoisted_27,\n _hoisted_28,\n _hoisted_29,\n _hoisted_30,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"Once you have \"),\n _createVNode(_component_router_link, { to: \"/learning/10-tips-for-picking-the-perfect-domain-name/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"selected your new domain name\")\n ]),\n _: 1\n }),\n _createTextVNode(\", you must create a \"),\n _createVNode(_component_router_link, {\n to: \"/learning/what-is-a-dns-zone/\",\n title: \"DNS zone\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(\"DNS zone\")\n ]),\n _: 1\n }),\n _createTextVNode(\" for it. Your registrar may offer this as a service. Or you might prefer to create and manage the DNS zone yourself using a DNS hosting provider, or even on your own DNS servers.\")\n ]),\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"If you are going to register \"),\n _hoisted_31,\n _createTextVNode(\" then you or someone acting on your behalf must create that zone somewhere. There must be an \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/soa/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"SOA record\")\n ]),\n _: 1\n }),\n _createTextVNode(\" at the root of the zone, which must contain an administrative email address for the zone in the Responsible Person field and the host name of a DNS server \"),\n _createVNode(_component_router_link, { to: \"/learning/recursive-vs-authoritative-dns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"authoritative\")\n ]),\n _: 1\n }),\n _createTextVNode(\" for the zone in the Primary Name Server field. The zone must also have at least two \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/ns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"NS records\")\n ]),\n _: 1\n }),\n _createTextVNode(\" at the root of the zone. Each NS record must list a DNS server authoritative for the zone.\")\n ]),\n _hoisted_32,\n _hoisted_33,\n _hoisted_34,\n _hoisted_35,\n _hoisted_36,\n _hoisted_37,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"Once you have submitted the domain registration request to the registrar and paid for one or more years of lease, your work is complete. The registrar will communicate your request along with the \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/ns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"NS records\")\n ]),\n _: 1\n }),\n _createTextVNode(\" for the new domain to the registry for the TLD. The changes will propagate through the network infrastructure of the registry and become visible to the DNS on the Internet. This process may take as little as 20 minutes up to several hours, or longer depending on the registrar and the registry. \")\n ]),\n _hoisted_38,\n _createVNode(Callout, {\n icon: \"info\",\n title: \"Domain hacking\",\n heading: \"h3\"\n }, {\n default: _withCtx(() => [\n _hoisted_39,\n _hoisted_40\n ]),\n _: 1\n }),\n _hoisted_41,\n _hoisted_42,\n _hoisted_43,\n _hoisted_44,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"If the NS records at the root of the zone are changed, however, this must be communicated with the registrar. This type of change can be very tricky and if not done correctly can result in a \"),\n _createVNode(_component_router_link, {\n to: \"/learning/zone-delegation/#lame-delegations\",\n title: \"Lame delegations\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(\"lame delegation\")\n ]),\n _: 1\n }),\n _createTextVNode(\" and outage for the domain.\")\n ]),\n _hoisted_45,\n _hoisted_46,\n _hoisted_47,\n _hoisted_48,\n _hoisted_49,\n _hoisted_50,\n _hoisted_51,\n _hoisted_52,\n _hoisted_53,\n _hoisted_54,\n _hoisted_55,\n _hoisted_56,\n _hoisted_57,\n _createElementVNode(\"div\", _hoisted_58, [\n _hoisted_59,\n _createElementVNode(\"div\", _hoisted_60, [\n _createVNode(_unref(Disclosure), {\n as: \"div\",\n class: \"pt-6\"\n }, {\n default: _withCtx(({ open }) => [\n _createVNode(_unref(DisclosureButton), {\n as: \"h3\",\n class: \"ignore-toc flex mt-0 w-full items-start justify-between text-left cursor-pointer text-gray-400\"\n }, {\n default: _withCtx(() => [\n _hoisted_61,\n _createElementVNode(\"span\", _hoisted_62, [\n _createVNode(_unref(ChevronDownIcon), {\n class: _normalizeClass([open ? '-rotate-180' : 'rotate-0', 'h-6 w-6 transform']),\n \"aria-hidden\": \"true\"\n }, null, 8, [\"class\"])\n ])\n ]),\n _: 2\n }, 1024),\n _createVNode(_unref(DisclosurePanel), { class: \"mt-2 pr-12\" }, {\n default: _withCtx(() => [\n _hoisted_63,\n _hoisted_64\n ]),\n _: 1\n })\n ]),\n _: 1\n }),\n _createVNode(_unref(Disclosure), {\n as: \"div\",\n class: \"pt-6\"\n }, {\n default: _withCtx(({ open }) => [\n _createVNode(_unref(DisclosureButton), {\n as: \"h3\",\n class: \"ignore-toc flex mt-0 w-full items-start justify-between text-left cursor-pointer text-gray-400\"\n }, {\n default: _withCtx(() => [\n _hoisted_65,\n _createElementVNode(\"span\", _hoisted_66, [\n _createVNode(_unref(ChevronDownIcon), {\n class: _normalizeClass([open ? '-rotate-180' : 'rotate-0', 'h-6 w-6 transform']),\n \"aria-hidden\": \"true\"\n }, null, 8, [\"class\"])\n ])\n ]),\n _: 2\n }, 1024),\n _createVNode(_unref(DisclosurePanel), { class: \"mt-2 pr-12\" }, {\n default: _withCtx(() => [\n _hoisted_67,\n _hoisted_68,\n _hoisted_69,\n _hoisted_70\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ])\n ])\n ]),\n _: 1\n }, 8, [\"title\", \"description\", \"url\", \"breadcrumbs\", \"img1024x512\", \"img1200x630\", \"written\", \"updated\", \"author\", \"editor\"])\n ], 64))\n}\n}\n\n})","import script from \"./HowDoesDomainNameRegistrationWork.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./HowDoesDomainNameRegistrationWork.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"strong\", { class: \"text-xl leading-8 block font-normal text-gray-500 mt-[1.3333333em]\" }, \"The domain name system (DNS) plays an important role in delivering email.\", -1)\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The owner of a domain name (for example: \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"@gmail.com\"),\n /*#__PURE__*/_createTextVNode(\") can specify where mail should be delivered. It can also prove that it has sent an email on behalf of the domain name owner. Other mail servers need some way to look up the email configuration of any domain name. That is why this configuration is stored in DNS records.\")\n], -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"strong\", { class: \"font-medium\" }, \"There are five types of email configurations that the DNS can store:\", -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full rounded-lg\",\n src: \"/img/learning/mx-vs-spf-vs-dmarc-vs-dkim-vs-bimi/spam-filtering.jpg\",\n alt: \"Spam filters are like an immume system of email, consisting of many different components.\",\n title: \"Spam filters are like an immume system of email, consisting of many different components.\",\n width: \"1200\",\n height: \"600\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, [\n /*#__PURE__*/_createTextVNode(\"Spam filters are like an immume system of email, consisting of many different components. By NsLookup.io. Licensed under \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://creativecommons.org/licenses/by/4.0/\",\n title: \"Creative Commons By 4.0 licence\",\n rel: \"nofollow\"\n }, \"CC By 4.0\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"MX: Specifying mail servers\", -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"p\", null, \"In addition to specifying the mail server, the MX record also includes a preference value. This value determines the order in which mail servers will be tried when multiple MX records exist for a domain. The mail server with the lowest preference value will be tried first, followed by the mail server with the next lowest value, and so on. This allows the owner of a domain to specify a primary mail server and one or more backup mail servers in case the primary server is unavailable.\", -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"SPF: Allowing servers to send email\", -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"p\", null, \"When a mail server receives an email from a domain, it will perform a DNS TXT lookup to find the SPF record for the domain. If the server that sent the email is not listed in the SPF record, the email may be marked as spam, or rejected. This helps to protect both the recipient of from spam and phishing. And it protects the domain reputation of the sender's domain.\", -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"DKIM: Proving email integrity\", -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"When an email is sent, the sending mail server will generate a digital signature for the email using a private key. It includes this signature in the email as a \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"DKIM-Signature\"),\n /*#__PURE__*/_createTextVNode(\" header.\")\n], -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The receiving mail server will perform a DNS TXT lookup to find the DKIM record for the domain. The record will include the public key that corresponds to the private key that was used to generate the signature. The receiving mail server can then use this public key to verify the integrity of the email.\", -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"p\", null, \"If the signature is valid, it indicates that the email has not been tampered with and was sent by an authorized server. This helps to protect the sender and recipient of the email, as it ensures that no unauthorized third party can change the email. It also helps to prevent spam and phishing, as the receiving mail server can verify that the email was actually sent by the domain that it claims to be from.\", -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"DMARC: Providing policies for non-conforming emails\", -1)\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"p\", null, \"When a mail server receives an email from a domain, it will perform a DNS TXT lookup to find the DMARC record for the domain. If the email does not conform to the SPF or DKIM standards, the receiving mail server will use the instructions in the DMARC record to determine how to handle the email. The DMARC record may specify that such emails should be rejected, or that they should be marked as spam.\", -1)\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"p\", null, \"In addition to specifying the policies for handling unauthenticated email, the DMARC record may also include a reporting mechanism. This allows the owner of the domain to receive reports from other mail servers about how their domain's email is being handled. This can help the domain owner to identify potential issues with their email configuration.\", -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"BIMI: Specifying a logo\", -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The BIMI (Brand Indicators for Message Identification) record allows the owner of a domain to specify a logo that email clients should show. This can help to increase the visibility and recognition of the domain's brand. It also improves the user experience for recipients of email from the domain.\", -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"p\", null, \"To use BIMI, the domain owner must first create a digital version of their logo, and then publish a BIMI record in the DNS. The record should include the URL of the logo. When an email is received from the domain, the email client will perform a DNS lookup to find the BIMI record. If the record is found, the email client may display the specified logo next to the sender's name in the email.\", -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"p\", null, \"BIMI is an optional feature, and not all email clients support it. Most of those who do will only display the logo, if there is a VMC certificate for the domain name. Getting such a certificate requires a brand trademark and involves a verification process. Not to mention the $1000 yearly price tag. This is why most domain names don’t have BIMI configured.\", -1)\n\nimport BlogPost from '@/components/layout/BlogPost.vue';\n\nimport { ruurtjan } from '@/common/authors';\nimport { learningBreadcrumb } from '@/model/Breadcrumb';\nimport { BlogMeta } from '@/common/blogMeta';\n\nconst meta: BlogMeta = {\n tag: 'Email and the DNS',\n url: '/learning/mx-vs-spf-vs-dmarc-vs-dkim-vs-bimi/',\n breadcrumbs: [learningBreadcrumb],\n title: 'MX vs SPF vs DMARC vs DKIM vs BIMI',\n description: 'Learn about the five DNS records that help control email delivery and spam prevention: MX, SPF, DKIM, DMARC, and BIMI.',\n overviewImage: '/img/learning/mx-vs-spf-vs-dmarc-vs-dkim-vs-bimi/spam-filtering-small.jpg',\n overviewImageAlt: 'MX vs SPF vs DMARC vs DKIM vs BIMI',\n overviewDescription: 'Learn about the five DNS records that help control email delivery and spam prevention: MX, SPF, DKIM, DMARC, and BIMI.',\n author: ruurtjan,\n editor: undefined,\n img1024x512: 'https://www.nslookup.io/img/learning/mx-vs-spf-vs-dmarc-vs-dkim-vs-bimi/mx-vs-spf-vs-dmarc-vs-dkim-vs-bimi-social.jpg',\n img1200x630: 'https://www.nslookup.io/img/learning/mx-vs-spf-vs-dmarc-vs-dkim-vs-bimi/mx-vs-spf-vs-dmarc-vs-dkim-vs-bimi-social.jpg',\n written: new Date('2022-12-08T11:22:08.115Z'),\n updated: new Date('2023-03-28T12:00:16.338Z'),\n};\nconst __default__ = {\n meta,\n};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'MxVsSpfVsDmarcVsDkimVsBimi',\n setup(__props) {\n\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"ImageObject\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"email\\\": \\\"mailto:ruurtjan@nslookup.io\\\", \\\"image\\\": \\\"https://www.nslookup.io/img/ruurtjan-lg.jpg\\\", \\\"jobTitle\\\": \\\"CEO\\\", \\\"name\\\": \\\"Ruurtjan Pul\\\", \\\"url\\\": \\\"https://www.nslookup.io/about/ruurtjan-pul/\\\" }, \\\"copyrightHolder\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"https://www.nslookup.io/\\\", \\\"email\\\": \\\"hello@nslookup.io\\\" }, \\\"copyrightYear\\\": 2023, \\\"contentUrl\\\": \\\"https://www.nslookup.io/img/learning/mx-vs-spf-vs-dmarc-vs-dkim-vs-bimi/spam-filtering.jpg\\\", \\\"license\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\", \\\"acquireLicensePage\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\" } \")\n ]),\n _: 1\n }))\n ])),\n _createVNode(BlogPost, {\n title: meta.title,\n description: meta.description,\n url: `https://www.nslookup.io${meta.url}`,\n breadcrumbs: meta.breadcrumbs,\n img1024x512: meta.img1024x512,\n img1200x630: meta.img1200x630,\n written: meta.written,\n updated: meta.updated,\n author: meta.author,\n editor: meta.editor\n }, {\n default: _withCtx(() => [\n _hoisted_1,\n _hoisted_2,\n _hoisted_3,\n _createElementVNode(\"ul\", null, [\n _createElementVNode(\"li\", null, [\n _createTextVNode(\"Which mail server email should be sent to (\"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/mx/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"MX\")\n ]),\n _: 1\n }),\n _createTextVNode(\")\")\n ]),\n _createElementVNode(\"li\", null, [\n _createTextVNode(\"Which servers are allowed to send email from a domain (\"),\n _createVNode(_component_router_link, { to: \"/learning/spf-a-practical-guide/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"SPF\")\n ]),\n _: 1\n }),\n _createTextVNode(\")\")\n ]),\n _createElementVNode(\"li\", null, [\n _createTextVNode(\"Which public key can be used to verify the integrity of an email (\"),\n _createVNode(_component_router_link, { to: \"/learning/dkim-a-practical-guide/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"DKIM\")\n ]),\n _: 1\n }),\n _createTextVNode(\")\")\n ]),\n _createElementVNode(\"li\", null, [\n _createTextVNode(\"What should happen when an email does not conform to SPF or DKIM (\"),\n _createVNode(_component_router_link, { to: \"/learning/dmarc-a-practical-guide/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"DMARC\")\n ]),\n _: 1\n }),\n _createTextVNode(\")\")\n ]),\n _createElementVNode(\"li\", null, [\n _createTextVNode(\"Which logo should be displayed in email clients (\"),\n _createVNode(_component_router_link, { to: \"#bimi-specifying-a-logo\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"BIMI\")\n ]),\n _: 1\n }),\n _createTextVNode(\")\")\n ])\n ]),\n _hoisted_4,\n _hoisted_5,\n _createElementVNode(\"p\", null, [\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/mx/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"The MX (Mail Exchanger) record\")\n ]),\n _: 1\n }),\n _createTextVNode(\" specifies which mail server handles incoming mail for a given domain. When a mail server sends an email for a domain, it will perform a DNS lookup to find the MX record for that domain. It then delivers the email to the specified mail server. This allows the owner of a domain to control where their email is delivered.\")\n ]),\n _hoisted_6,\n _hoisted_7,\n _createElementVNode(\"p\", null, [\n _createVNode(_component_router_link, { to: \"/learning/spf-a-practical-guide/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"The SPF (Sender Policy Framework) record\")\n ]),\n _: 1\n }),\n _createTextVNode(\" specifies which servers are allowed to send email on behalf of a given domain. This is an important security measure. It helps to prevent spam and phishing by unauthorized mail servers.\")\n ]),\n _hoisted_8,\n _hoisted_9,\n _createElementVNode(\"p\", null, [\n _createVNode(_component_router_link, { to: \"/learning/dkim-a-practical-guide/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"The DKIM (DomainKeys Identified Mail) record\")\n ]),\n _: 1\n }),\n _createTextVNode(\" allows a domain owner to prove the integrity of an email. This is done by attaching a digital signature to the email. Receiving mail servers can verify this signature using the DKIM record.\")\n ]),\n _hoisted_10,\n _hoisted_11,\n _hoisted_12,\n _hoisted_13,\n _createElementVNode(\"p\", null, [\n _createVNode(_component_router_link, { to: \"/learning/dmarc-a-practical-guide/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"The DMARC (Domain-based Message Authentication, Reporting and Conformance) record\")\n ]),\n _: 1\n }),\n _createTextVNode(\" specifies the policies that should be applied to emails that do not conform to the SPF or DKIM standards. This allows the owner of a domain to control how other mail servers handle email when it doesn't pass these checks.\")\n ]),\n _hoisted_14,\n _hoisted_15,\n _hoisted_16,\n _hoisted_17,\n _hoisted_18,\n _hoisted_19\n ]),\n _: 1\n }, 8, [\"title\", \"description\", \"url\", \"breadcrumbs\", \"img1024x512\", \"img1200x630\", \"written\", \"updated\", \"author\", \"editor\"])\n ], 64))\n}\n}\n\n})","import script from \"./MxVsSpfVsDmarcVsDkimVsBimi.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./MxVsSpfVsDmarcVsDkimVsBimi.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, unref as _unref, normalizeClass as _normalizeClass, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\nimport _imports_0 from '../../../public/img/learning/recursive-vs-authoritative-dns/recursive-vs-authoritative-dns-query.jpg'\n\n\nconst _hoisted_1 = { class: \"text-xl leading-8 block font-normal text-gray-500 mt-[1.3333333em]\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Authoritative DNS servers generally answer DNS queries only for the specific zones they are authoritative for, while a recursive DNS server can answer any DNS query for any zone. Recursive DNS servers use a process called \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"recursion\"),\n /*#__PURE__*/_createTextVNode(\" to retrieve answers from authoritative DNS servers.\")\n], -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full rounded-lg\",\n src: \"/img/learning/recursive-vs-authoritative-dns/recursive-vs-authoritative-dns.jpg\",\n alt: \"Recursive DNS servers are like librarians. They're not an authority on anything, but they know where to find the answers.\",\n title: \"Recursive DNS servers are like librarians. They're not an authority on anything, but they know where to find the answers.\",\n width: \"1200\",\n height: \"600\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, [\n /*#__PURE__*/_createTextVNode(\"Recursive DNS servers are like librarians. They're not an authority on anything, but they know where to find the answers. By NsLookup.io. Licensed under \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://creativecommons.org/licenses/by/4.0/\",\n title: \"Creative Commons By 4.0 licence\",\n rel: \"nofollow\"\n }, \"CC By 4.0\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Authoritative DNS servers\", -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"strong\", null, \"authorities\", -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Each authoritative DNS server may host a single DNS zone or many. There is no hard limit on the number of zones a single server can host. The authoritative DNS servers for a business might host several zones for different domains owned by the company. Cloud-scale DNS providers such as Amazon's Route 53 or Google's Cloud DNS host thousands of zones per server or more!\", -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Authoritative DNS servers usually don't answer DNS queries from end-user devices such as phones or laptops. That's where recursive DNS servers come in.\", -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Recursive DNS servers\", -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Unlike authoritative DNS servers, recursive DNS servers usually don't host any zones. Recursive DNS servers answer DNS queries from computers and other devices that need to locate resources on the Internet.\", -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"p\", null, \"DNS queries may be generated by a web browser running on a laptop, an app running on a phone, or a mail server trying to deliver email. When an application needs to look up a name in the DNS, a DNS query is sent to a recursive DNS server.\", -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The recursive DNS server may be automatically configured by the user's Internet Service Provider (ISP), or it may be part of the cellular carrier's infrastructure, or it may be a publicly available DNS resolver that the user has chosen to use.\", -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"p\", null, \"For each delegation, the recursive DNS server sends the query to another authoritative DNS server. Each query gets it one step closer to the answer. After following around two to four delegations, the recursive DNS server reaches an authoritative DNS server. The authoritative DNS server returns an answer to the query.\", -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The recursive DNS server then \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"caches\"),\n /*#__PURE__*/_createTextVNode(\" a copy of the answer and returns it to its client.\")\n], -1)\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Each time a computer joins a wifi or wired network, one or more recursive DNS servers are set automatically.\", -1)\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The user of the machine, be it a laptop, phone, or server, can change the network settings to specify different recursive DNS servers instead of these default servers. One might use a different resolver for privacy, performance, DNS features, or personal preference.\", -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Some popular recursive DNS servers, also called \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"open DNS resolvers\"),\n /*#__PURE__*/_createTextVNode(\" or \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"public recursive DNS servers\"),\n /*#__PURE__*/_createTextVNode(\", and their primary IPv4 DNS addresses:\")\n], -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Cloudflare - 1.1.1.1\"),\n /*#__PURE__*/_createTextVNode(\": One of the fastest open DNS resolvers available.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Google - 8.8.8.8\"),\n /*#__PURE__*/_createTextVNode(\": The largest open DNS resolver, handling over a trillion queries per day.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"OpenDNS - 208.67.222.222\"),\n /*#__PURE__*/_createTextVNode(\": Offers a security product suite called \\\"Umbrella\\\" in addition to being an open DNS resolver.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Quad9 - 9.9.9.9\"),\n /*#__PURE__*/_createTextVNode(\": A global open DNS resolver operated by a Swiss not-for-profit that aims to improve privacy and cybersecurity.\")\n ])\n], -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"How does recursion work?\", -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Let's put recursive DNS servers and authoritative DNS servers together and look at how \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"www.example.org\"),\n /*#__PURE__*/_createTextVNode(\" would be resolved when a user browses to a website:\")\n], -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"ol\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"The user's laptop sends a DNS query for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"www.example.org\"),\n /*#__PURE__*/_createTextVNode(\" to its recursive DNS server.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"The recursive DNS server sends a query for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"www.example.org\"),\n /*#__PURE__*/_createTextVNode(\" to one of the Internet root servers.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"The root server returns a delegation for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"org\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"The recursive DNS server sends a query for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"www.example.org\"),\n /*#__PURE__*/_createTextVNode(\" to an authoritative server for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"org\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"The \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"org\"),\n /*#__PURE__*/_createTextVNode(\" server returns a delegation for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"The recursive DNS server sends a query for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"www.example.org\"),\n /*#__PURE__*/_createTextVNode(\" to an authoritative server for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"The \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" server returns the answer: address records for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"www.example.org\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"The recursive DNS server sends the answer back to the user's laptop.\")\n], -1)\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"full-width\",\n src: _imports_0,\n alt: \"An example of recursion\",\n title: \"An example of recursion\"\n}, null, -1)\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Caching in the DNS\", -1)\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"p\", null, \"In the example above, the recursive DNS server had to send the user's query three times. Each query takes from 10 to 100 milliseconds or more to complete. The recursive DNS server must process each response. This is a lot of work!\", -1)\nconst _hoisted_24 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The DNS was designed from the beginning to reduce the work and time required for recursion through \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"caching\"),\n /*#__PURE__*/_createTextVNode(\". Caching is the process of saving a copy of a piece of data for a period of time to make subsequent lookups faster.\")\n], -1)\nconst _hoisted_25 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Caching is so critical to the DNS that every record in the entire DNS contains a Time-to-Live (TTL) value in seconds. The TTL of each record specifies how long that record may be cached.\", -1)\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The recursive DNS server caches the result of each query. If a second end user were to query for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"www.example.org\"),\n /*#__PURE__*/_createTextVNode(\" within the answer's TTL, then the recursive DNS server would return the cached answer. It would not send any DNS queries to the authoritative servers. Caching serves three very important purposes in the DNS:\")\n], -1)\nconst _hoisted_27 = /*#__PURE__*/_createElementVNode(\"ol\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, \"It reduces DNS query latency.\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"It reduces the number of queries each recursive DNS server has to send, reducing the workload on recursive DNS servers.\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"It also reduces the load on each of the authoritative servers.\")\n], -1)\nconst _hoisted_28 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The DNS client, in this example the user's laptop, will also cache DNS results. Client caching further reduces load on recursive and authoritative DNS servers.\", -1)\nconst _hoisted_29 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Iterative or recursive?\", -1)\nconst _hoisted_30 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Recursive DNS servers are sometimes called iterative DNS servers.\", -1)\nconst _hoisted_31 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"This is because of the type of DNS queries that recursive DNS server send. Recursive DNS servers do not set the \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Recursion Desired\"),\n /*#__PURE__*/_createTextVNode(\" or RD bit in their queries. This bit is specified in \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc1034\",\n rel: \"noopener noreferrer\"\n }, \"RFC 1034\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_32 = /*#__PURE__*/_createElementVNode(\"p\", null, \"By not setting this bit, recursive DNS servers request that recursion not be performed on their behalf. Partly, this allows recursive DNS servers to cache DNS data more effectively.\", -1)\nconst _hoisted_33 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Queries that do not have the RD bit set are called iterative queries. And so, recursive DNS servers are sometimes called iterative DNS servers.\", -1)\nconst _hoisted_34 = { class: \"mx-auto max-w-3xl divide-y-2 divide-gray-200\" }\nconst _hoisted_35 = /*#__PURE__*/_createElementVNode(\"h2\", { class: \"ignore-toc\" }, \"Related questions\", -1)\nconst _hoisted_36 = { class: \"mt-6 space-y-6 divide-y divide-gray-200 [overflow-anchor:none]\" }\nconst _hoisted_37 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg font-medium text-gray-900\" }, \" Can a DNS server be authoritative and recursive at the same time? \", -1)\nconst _hoisted_38 = { class: \"ml-6 flex h-7 items-center\" }\nconst _hoisted_39 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", { class: \"font-medium text-gray-500\" }, \"Yes, but this is uncommon and not recomended.\")\n], -1)\nconst _hoisted_40 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Most DNS server software can operate in either authoritative or recursive mode. Usually these modes are not exclusive. In earlier times, DNS servers would often serve both roles. They would answer queries authoritatively if they hosted the appropriate zone and perform recursion for other queries.\", -1)\nconst _hoisted_41 = /*#__PURE__*/_createElementVNode(\"p\", null, \"This is rare today. The primary problem is that authoritative DNS is critical and recursive DNS is expensive. An attacker might find a way to increase load on a DNS server using expensive recursive queries to such a degree it can no longer answer authoritative queries.\", -1)\nconst _hoisted_42 = { class: \"mt-6 space-y-6 divide-y divide-gray-200 [overflow-anchor:none]\" }\nconst _hoisted_43 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg font-medium text-gray-900\" }, \" Will recursive servers always return the same data as authoritative servers? \", -1)\nconst _hoisted_44 = { class: \"ml-6 flex h-7 items-center\" }\nconst _hoisted_45 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", { class: \"font-medium text-gray-500\" }, \"Often, yes. But sometimes not due to caching or filtering.\")\n], -1)\nconst _hoisted_46 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Some public recursive DNS servers offer features such as child-safe browsing, malware protection, spam blocking, and ad blocking. These features may cause them to purposefully return a DNS error instead of a valid DNS result. In this case, the authoritative DNS server for the zone would return an address or other DNS data, but some recursive DNS servers might return errors to protect their users.\", -1)\nconst _hoisted_47 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Caching can also result in differences between recursive and authoritative DNS server results. When DNS data is changed on the authoritative DNS servers there will be a period of time, up to the record's TTL in seconds, where end users may see either the old or the new DNS records. This is considered an acceptable trade-off given the considerable benefits that DNS caching provides.\", -1)\nconst _hoisted_48 = /*#__PURE__*/_createElementVNode(\"p\", null, \"DNS administrators who wish to change records and minimize impact often temporarily shorten the TTL a few days before making the change. Or they may ensure that end users will not be impacted during the period where both old and new records may be used.\", -1)\nconst _hoisted_49 = { class: \"mt-6 space-y-6 divide-y divide-gray-200 [overflow-anchor:none]\" }\nconst _hoisted_50 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg font-medium text-gray-900\" }, \" How can I tell if a DNS server is authoritative or recursive? \", -1)\nconst _hoisted_51 = { class: \"ml-6 flex h-7 items-center\" }\nconst _hoisted_52 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", { class: \"font-medium text-gray-500\" }, \"By checking if the server returns the AA bit in DNS responses.\")\n], -1)\nconst _hoisted_53 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"DNS responses contain a special bit called \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Authoritative Answer\"),\n /*#__PURE__*/_createTextVNode(\" or AA bit. This bit is specified in \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc1034\",\n rel: \"noopener noreferrer\"\n }, \"RFC 1034\"),\n /*#__PURE__*/_createTextVNode(\". An authoritative DNS server will set the AA bit in responses. The AA bit indicates that it is an authoritative server. A recursive DNS server will not set this bit in responses.\")\n], -1)\nconst _hoisted_54 = /*#__PURE__*/_createElementVNode(\"p\", null, \"You can see this bit using dig and other tools. In the dig output line that starts with \\\"flags:\\\" if you see the string \\\"aa\\\" then the AA bit is set and the response is from an authoritative DNS server. Here is a response from one of Google's authoritative DNS servers:\", -1)\nconst _hoisted_55 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"dig google.com A @ns1.google.com.\\n\\n; <<>> DiG 9.10.3 <<>> google.com A @ns1.google.com.\\n;; global options: +cmd\\n;; Got answer:\\n;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14203\\n;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1\\n;; WARNING: recursion requested but not available\\n\\n;; QUESTION SECTION:\\n;google.com. IN A\\n\\n;; ANSWER SECTION:\\ngoogle.com. 300 IN A 142.250.217.110\", -1)\nconst _hoisted_56 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Querying Google's public DNS resolver, which is not authoritative for the google.com zone, the string \\\"aa\\\" is not present next to \\\"flags\\\". So this response is not authoritative. The absence of the AA bit indicates that this is a recursive DNS server:\", -1)\nconst _hoisted_57 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"dig google.com A @8.8.8.8\\n\\n; <<>> DiG 9.10.3 <<>> google.com A @8.8.8.8\\n;; global options: +cmd\\n;; Got answer:\\n;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43950\\n;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1\\n\\n;; QUESTION SECTION:\\n;google.com. IN A\\n\\n;; ANSWER SECTION:\\ngoogle.com. 133 IN A 142.250.217.110\\n\", -1)\nconst _hoisted_58 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"There are other differences in these responses that also show authoritative versus recursive. The TTLs are different: the TTL will count down in a response that came from the cache of a recursive DNS server, but the TTL from the authoritative DNS server will always be the full TTL value. The authoritative server also indicated that it does not support recursion, so dig printed \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"WARNING: recursion requested but not available\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\n\nimport BlogPost from '@/components/layout/BlogPost.vue';\n\nimport {\n Disclosure,\n DisclosureButton,\n DisclosurePanel,\n} from '@headlessui/vue';\nimport { ChevronDownIcon } from '@heroicons/vue/24/outline';\nimport { jeff, ruurtjan } from '@/common/authors';\nimport { learningBreadcrumb } from '@/model/Breadcrumb';\nimport { BlogMeta } from '@/common/blogMeta';\nimport Callout from '@/components/layout/CalloutComponent.vue';\n\nconst meta: BlogMeta = {\n tag: 'DNS concepts',\n url: '/learning/recursive-vs-authoritative-dns/',\n breadcrumbs: [learningBreadcrumb],\n title: 'Recursive vs Authoritative DNS — What\\'s the difference?',\n description: 'There are two types of DNS servers: recursive and authoritative. Authoritative servers host DNS data, while recursive DNS servers perform DNS lookups for users.',\n overviewImage: '/img/learning/recursive-vs-authoritative-dns/recursive-vs-authoritative-dns-small.jpg',\n overviewImageAlt: 'Recursive versus Authoritative DNS',\n overviewDescription: 'There are two types of DNS servers: recursive and authoritative. Authoritative servers host DNS data, while recursive DNS servers perform DNS lookups for users.',\n author: jeff,\n editor: ruurtjan,\n img1024x512: 'https://www.nslookup.io/img/learning/recursive-vs-authoritative-dns/recursive-vs-authoritative-dns-social.jpg',\n img1200x630: 'https://www.nslookup.io/img/learning/recursive-vs-authoritative-dns/recursive-vs-authoritative-dns-social.jpg',\n written: new Date('2022-12-29T10:34:08.492Z'),\n updated: new Date('2023-03-28T12:00:26.745Z'),\n};\n\nconst __default__ = {\n meta,\n};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'RecursiveVsAuthoritativeDns',\n setup(__props) {\n\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"ImageObject\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"email\\\": \\\"mailto:ruurtjan@nslookup.io\\\", \\\"image\\\": \\\"https://www.nslookup.io/img/ruurtjan-lg.jpg\\\", \\\"jobTitle\\\": \\\"CEO\\\", \\\"name\\\": \\\"Ruurtjan Pul\\\", \\\"url\\\": \\\"https://www.nslookup.io/about/ruurtjan-pul/\\\" }, \\\"copyrightHolder\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"https://www.nslookup.io/\\\", \\\"email\\\": \\\"hello@nslookup.io\\\" }, \\\"copyrightYear\\\": 2023, \\\"contentUrl\\\": \\\"https://www.nslookup.io/img/learning/recursive-vs-authoritative-dns/recursive-vs-authoritative-dns.jpg\\\", \\\"license\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\", \\\"acquireLicensePage\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\" } \")\n ]),\n _: 1\n }))\n ])),\n _createVNode(BlogPost, {\n title: meta.title,\n description: meta.description,\n url: `https://www.nslookup.io${meta.url}`,\n breadcrumbs: meta.breadcrumbs,\n img1024x512: meta.img1024x512,\n img1200x630: meta.img1200x630,\n written: meta.written,\n updated: meta.updated,\n author: meta.author,\n editor: meta.editor\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"strong\", _hoisted_1, [\n _createTextVNode(\"There are two types of DNS servers: recursive and authoritative. Authoritative servers host data for \"),\n _createVNode(_component_router_link, { to: \"/learning/what-is-a-dns-zone/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"zones\")\n ]),\n _: 1\n }),\n _createTextVNode(\". Recursive DNS servers perform DNS lookups for users, collecting DNS data from one or more authoritative DNS servers along the way.\")\n ]),\n _hoisted_2,\n _hoisted_3,\n _hoisted_4,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"As their name suggests, authoritative DNS servers are \"),\n _hoisted_5,\n _createTextVNode(\" for a \"),\n _createVNode(_component_router_link, { to: \"/learning/what-is-a-dns-zone/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"DNS zone\")\n ]),\n _: 1\n }),\n _createTextVNode(\". They store and serve all of the DNS data for the domain, usually to the entire Internet.\")\n ]),\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"The data in a DNS zone consists of DNS records that allow clients to access resources for the domain. This will include \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/a/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"A records\")\n ]),\n _: 1\n }),\n _createTextVNode(\" and \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/aaaa/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"AAAA records\")\n ]),\n _: 1\n }),\n _createTextVNode(\" for websites and servers, \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/mx/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"MX records\")\n ]),\n _: 1\n }),\n _createTextVNode(\" to enable email for the domain, and other records. Every DNS zone must also include an \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/soa/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"SOA record\")\n ]),\n _: 1\n }),\n _createTextVNode(\" and a set of \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/ns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"the NS records\")\n ]),\n _: 1\n }),\n _createTextVNode(\".\")\n ]),\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"Every DNS zone is hosted on multiple authoritative DNS servers for redundancy. Usually, four servers are used. \"),\n _createVNode(_component_router_link, { to: \"/learning/zone-delegation/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"Delegations\")\n ]),\n _: 1\n }),\n _createTextVNode(\" in the parent zone tell the entire Internet how to find the authoritative servers.\")\n ]),\n _hoisted_6,\n _hoisted_7,\n _hoisted_8,\n _hoisted_9,\n _hoisted_10,\n _hoisted_11,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"Recursive DNS servers resolve DNS queries by starting at one of the DNS root servers and following a chain of delegations. The root servers are special authoritative DNS servers that host the \"),\n _createVNode(_component_router_link, {\n to: \"/learning/what-is-the-dns-root-zone/\",\n title: \"What is the DNS root zone?\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(\"root zone\")\n ]),\n _: 1\n }),\n _createTextVNode(\". The root zone contains a delegation for every Top Level Domain (TLD).\")\n ]),\n _hoisted_12,\n _hoisted_13,\n _createVNode(Callout, {\n icon: \"info\",\n heading: \"h3\",\n title: \"Selecting a recursive DNS server\"\n }, {\n default: _withCtx(() => [\n _hoisted_14,\n _hoisted_15,\n _hoisted_16,\n _hoisted_17\n ]),\n _: 1\n }),\n _hoisted_18,\n _hoisted_19,\n _hoisted_20,\n _hoisted_21,\n _hoisted_22,\n _hoisted_23,\n _hoisted_24,\n _hoisted_25,\n _hoisted_26,\n _hoisted_27,\n _hoisted_28,\n _hoisted_29,\n _hoisted_30,\n _hoisted_31,\n _hoisted_32,\n _hoisted_33,\n _createElementVNode(\"div\", _hoisted_34, [\n _hoisted_35,\n _createElementVNode(\"div\", _hoisted_36, [\n _createVNode(_unref(Disclosure), {\n as: \"div\",\n class: \"pt-6\"\n }, {\n default: _withCtx(({ open }) => [\n _createVNode(_unref(DisclosureButton), {\n as: \"h3\",\n class: \"ignore-toc flex mt-0 w-full items-start justify-between text-left cursor-pointer text-gray-400\"\n }, {\n default: _withCtx(() => [\n _hoisted_37,\n _createElementVNode(\"span\", _hoisted_38, [\n _createVNode(_unref(ChevronDownIcon), {\n class: _normalizeClass([open ? '-rotate-180' : 'rotate-0', 'h-6 w-6 transform']),\n \"aria-hidden\": \"true\"\n }, null, 8, [\"class\"])\n ])\n ]),\n _: 2\n }, 1024),\n _createVNode(_unref(DisclosurePanel), { class: \"mt-2 pr-12\" }, {\n default: _withCtx(() => [\n _hoisted_39,\n _hoisted_40,\n _hoisted_41\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_42, [\n _createVNode(_unref(Disclosure), {\n as: \"div\",\n class: \"pt-6\"\n }, {\n default: _withCtx(({ open }) => [\n _createVNode(_unref(DisclosureButton), {\n as: \"h3\",\n class: \"ignore-toc flex mt-0 w-full items-start justify-between text-left cursor-pointer text-gray-400\"\n }, {\n default: _withCtx(() => [\n _hoisted_43,\n _createElementVNode(\"span\", _hoisted_44, [\n _createVNode(_unref(ChevronDownIcon), {\n class: _normalizeClass([open ? '-rotate-180' : 'rotate-0', 'h-6 w-6 transform']),\n \"aria-hidden\": \"true\"\n }, null, 8, [\"class\"])\n ])\n ]),\n _: 2\n }, 1024),\n _createVNode(_unref(DisclosurePanel), { class: \"mt-2 pr-12\" }, {\n default: _withCtx(() => [\n _hoisted_45,\n _hoisted_46,\n _hoisted_47,\n _hoisted_48\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_49, [\n _createVNode(_unref(Disclosure), {\n as: \"div\",\n class: \"pt-6\"\n }, {\n default: _withCtx(({ open }) => [\n _createVNode(_unref(DisclosureButton), {\n as: \"h3\",\n class: \"ignore-toc flex mt-0 w-full items-start justify-between text-left cursor-pointer text-gray-400\"\n }, {\n default: _withCtx(() => [\n _hoisted_50,\n _createElementVNode(\"span\", _hoisted_51, [\n _createVNode(_unref(ChevronDownIcon), {\n class: _normalizeClass([open ? '-rotate-180' : 'rotate-0', 'h-6 w-6 transform']),\n \"aria-hidden\": \"true\"\n }, null, 8, [\"class\"])\n ])\n ]),\n _: 2\n }, 1024),\n _createVNode(_unref(DisclosurePanel), { class: \"mt-2 pr-12\" }, {\n default: _withCtx(() => [\n _hoisted_52,\n _hoisted_53,\n _hoisted_54,\n _hoisted_55,\n _hoisted_56,\n _hoisted_57,\n _hoisted_58\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ])\n ])\n ]),\n _: 1\n }, 8, [\"title\", \"description\", \"url\", \"breadcrumbs\", \"img1024x512\", \"img1200x630\", \"written\", \"updated\", \"author\", \"editor\"])\n ], 64))\n}\n}\n\n})","import script from \"./RecursiveVsAuthoritativeDns.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./RecursiveVsAuthoritativeDns.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, createElementVNode as _createElementVNode, createVNode as _createVNode, resolveComponent as _resolveComponent, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"strong\", { class: \"text-xl leading-8 block font-normal text-gray-500 mt-[1.3333333em]\" }, \"In Kubernetes, DNS queries follow a specific path to resolve the IP address of a hostname. In this blog post, you will learn the life of a DNS query in Kubernetes step-by-step.\", -1)\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Service discovery in Kubernetes is a crucial component of the overall architecture. It allows incoming requests to be routed to the correct workloads running in the cluster. DNS plays a key role in this process.\", -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Understanding how DNS and service discovery work in Kubernetes can be helpful for debugging issues. It allows you to better understand the flow of traffic in the cluster and diagnose any issues that may arise.\", -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Here's the TLDR.\"),\n /*#__PURE__*/_createTextVNode(\" When a pod performs a DNS lookup, the query is first sent to the DNS cache on the node where the pod is running. If the cache does not contain the IP address for the requested hostname, the query is forwarded to the cluster DNS server. This server handles service discovery in Kubernetes.\")\n], -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The cluster DNS server determines the IP address by consulting the Kubernetes service registry. This registry contains a mapping of service names to their corresponding IP addresses. This allows the cluster DNS server to return the correct IP address to the requesting pod.\", -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full rounded-lg\",\n src: \"/img/learning/the-life-of-a-dns-query-in-kubernetes/tracing-dns-through-k8s.jpg\",\n alt: \"Tracing a DNS query through Kubernetes can make you feel like a detective\",\n title: \"Tracing a DNS query through Kubernetes can make you feel like a detective\",\n width: \"1200\",\n height: \"600\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, [\n /*#__PURE__*/_createTextVNode(\"Tracing a DNS query through Kubernetes can make you feel like a detective. By NsLookup.io. Licensed under \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://creativecommons.org/licenses/by/4.0/\",\n title: \"Creative Commons By 4.0 licence\",\n rel: \"nofollow\"\n }, \"CC By 4.0\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Services\", -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"p\", null, \"As previously mentioned, DNS is a necessary component of service discovery. The way service discovery works in Kubernetes is through the use of service resources. A service has an IP that, when accessed, redirects connections to a healthy pod backing that service.\", -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"p\", null, \"An example service definition looks like this:\", -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"apiVersion: v1\\nkind: Service\\nmetadata:\\n name: foo\\n namespace: bar\\nspec:\\n ports:\\n - port: 80\\n name: http\", -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"foo.bar.svc.cluster.local 30 A 10.129.1.26\\n_http._tcp.nginx.default.svc.cluster.local 3600 SRV 0 100 80 10-129-1-26.foo.bar.svc.cluster.local.\", -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"To create the fully qualified domain name for this service, we use the name of the service (\"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"foo\"),\n /*#__PURE__*/_createTextVNode(\"), the namespace (\"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"bar\"),\n /*#__PURE__*/_createTextVNode(\"), and the cluster domain (\"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"cluster.local\"),\n /*#__PURE__*/_createTextVNode(\").\")\n], -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Any workload running in the cluster can now resolve the service's IP address using this DNS name.\", -1)\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"DNS lookups on services\", -1)\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full\",\n src: \"/img/learning/the-life-of-a-dns-query-in-kubernetes/flow-of-a-dns-query-in-kubernetes.png\",\n alt: \"Email and spam prevention is configured in the DNS\",\n title: \"Email and spam prevention is configured in the DNS\",\n width: \"1500\",\n height: \"702\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, [\n /*#__PURE__*/_createTextVNode(\"The flow of a DNS query in Kubernetes. By NsLookup.io. Licensed under \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://creativecommons.org/licenses/by/4.0/\",\n title: \"Creative Commons By 4.0 licence\",\n rel: \"nofollow\"\n }, \"CC By 4.0\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"If this cache does not contain the IP address for the requested hostname, the query is forwarded to the cluster DNS server (\"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://coredns.io/\",\n rel: \"noopener noreferrer\"\n }, \"CoreDNS\"),\n /*#__PURE__*/_createTextVNode(\").\")\n], -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"p\", null, \"This DNS server determines the IP address by consulting the Kubernetes service registry. This registry contains a mapping of service names to their corresponding IP addresses. This allows the cluster DNS server to return the correct IP address to the requesting pod.\", -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Any domains that are queried but are not in the Kubernetes service registry are forwarded to an upstream DNS server.\", -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"p\", null, \"We will go through each of these components in more detail step-by-step.\", -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"Pod foo\", -1)\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"When a pod sends an API request to a service within the same Kubernetes cluster, it must first resolve the IP address of the service. To do this, the pod performs a DNS lookup using the DNS server specified in its \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://en.wikipedia.org/wiki/Resolv.conf\",\n rel: \"noopener noreferrer\"\n }, \"/etc/resolv.conf\"),\n /*#__PURE__*/_createTextVNode(\" configuration file.\")\n], -1)\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"p\", null, \"This file, which is provisioned by the Kubelet, defines the settings for DNS lookups in the pod. It contains a reference to the cluster DNS server.\", -1)\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"p\", null, \"By default, this configuration file looks something like this:\", -1)\nconst _hoisted_24 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"search namespace.svc.cluster.local svc.cluster.local cluster.local\\nnameserver 10.123.0.10\\noptions ndots:5\", -1)\nconst _hoisted_25 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"Pod config\", -1)\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"By default, the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"/etc/resolv.conf\"),\n /*#__PURE__*/_createTextVNode(\" file provided by the Kubelet will forward all DNS queries to the cluster's DNS server (10.123.0.10 in the example above). The Kubelet also defines search domains and the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"ndots\"),\n /*#__PURE__*/_createTextVNode(\" option for DNS queries.\")\n], -1)\nconst _hoisted_27 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The search domains specify which domain suffixes should be searched when incomplete domains (non-FQDNs) are given. The \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"ndots\"),\n /*#__PURE__*/_createTextVNode(\" option determines when a query for the absolute domain is made directly instead of first appending the search domains.\")\n], -1)\nconst _hoisted_28 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"To better understand how this works, let's look at an example. Suppose a pod named foo performs a DNS lookup for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"bar.other-ns\"),\n /*#__PURE__*/_createTextVNode(\". If the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"ndots\"),\n /*#__PURE__*/_createTextVNode(\" option is set to 5 (the default value — \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://github.com/kubernetes/kubernetes/issues/33554#issuecomment-266251056\",\n rel: \"noopener noreferrer\"\n }, \"here's why\"),\n /*#__PURE__*/_createTextVNode(\"), the resolver will count the number of dots in the domain.\")\n], -1)\nconst _hoisted_29 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"If there are fewer than 5 dots, the search domains will be appended before the DNS lookup is performed on the DNS server. If there are 5 or more dots, the domain will be queried as-is without appending the search domains. In this example, \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"bar.other-ns\"),\n /*#__PURE__*/_createTextVNode(\" has less than 5 dots, so the search domains will be appended before the DNS lookup is performed.\")\n], -1)\nconst _hoisted_30 = /*#__PURE__*/_createElementVNode(\"p\", null, \"By default, the search domains are:\", -1)\nconst _hoisted_31 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, \".svc.cluster.local\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"svc.cluster.local\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"cluster.local\")\n], -1)\nconst _hoisted_32 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Until a valid response is found, these search domains are appended to the domain and queried. The resolver will try the following queries one by one:\", -1)\nconst _hoisted_33 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, \"bar.other-ns..svc.cluster.local\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"bar.other-ns.svc.cluster.local (⇐ match found!)\")\n], -1)\nconst _hoisted_34 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The bar service will be listening on \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"bar.other-ns.svc.cluster.local\"),\n /*#__PURE__*/_createTextVNode(\", so a match is found and the proper A-record is returned.\")\n], -1)\nconst _hoisted_35 = /*#__PURE__*/_createElementVNode(\"p\", null, \"To change the behavior of a pod's DNS resolver, you can change the DNS config of a pod:\", -1)\nconst _hoisted_36 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"apiVersion: v1\\nkind: Pod\\nmetadata:\\n namespace: default\\n name: dns-example\\nspec:\\n containers:\\n - name: test\\n image: nginx\\n dnsPolicy: \\\"None\\\"\\n dnsConfig:\\n nameservers:\\n - 1.2.3.4\\n searches:\\n - ns1.svc.cluster-domain.example\\n - my.dns.search.suffix\\n options:\\n - name: ndots\\n value: \\\"2\\\"\\n - name: edns0\", -1)\nconst _hoisted_37 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"In the example above, the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"dnsPolicy\"),\n /*#__PURE__*/_createTextVNode(\" is set to \\\"None\\\", which means that the pod will not use the default DNS settings provided by the cluster. Instead, the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"dnsConfig\"),\n /*#__PURE__*/_createTextVNode(\" field is used to specify custom DNS settings for the pod.\")\n], -1)\nconst _hoisted_38 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"nameservers\"),\n /*#__PURE__*/_createTextVNode(\" field is used to specify the DNS servers that the pod should use for DNS lookups. The searches field is used to specify the search domains that should be used for incomplete domains.\")\n], -1)\nconst _hoisted_39 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"options\"),\n /*#__PURE__*/_createTextVNode(\" field is used to specify custom options for the DNS resolver, such as the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"ndots\"),\n /*#__PURE__*/_createTextVNode(\" and \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"edns0\"),\n /*#__PURE__*/_createTextVNode(\" options in the example above.\")\n], -1)\nconst _hoisted_40 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"These settings will be used by the pod's DNS resolver instead of the default settings provided by the cluster. For more information on pod DNS configuration, see the \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-dns-config\",\n rel: \"noopener noreferrer\"\n }, \"official docs\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_41 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"Authoritative DNS server\", -1)\nconst _hoisted_42 = /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://kubernetes.io/blog/2018/12/03/kubernetes-1-13-release-announcement/#coredns-is-now-the-default-dns-server-for-kubernetes\",\n rel: \"noopener noreferrer\"\n}, \"CoreDNS replaced kube-dns\", -1)\nconst _hoisted_43 = /*#__PURE__*/_createElementVNode(\"p\", null, \"CoreDNS is a popular choice, as it supports building a DNS zone from the Kubernetes service registry. It also offers extra features such as caching, forwarding, and logging.\", -1)\nconst _hoisted_44 = /*#__PURE__*/_createElementVNode(\"p\", null, \"An example of a configuration file of CoreDNS:\", -1)\nconst _hoisted_45 = /*#__PURE__*/_createElementVNode(\"pre\", null, \".:53 {\\n errors\\n health {\\n lameduck 5s\\n }\\n ready\\n kubernetes cluster.local in-addr.arpa ip6.arpa {\\n fallthrough in-addr.arpa ip6.arpa\\n ttl 30\\n }\\n forward . /etc/resolv.conf\\n cache 30\\n}\", -1)\nconst _hoisted_46 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Important to note are the kubernetes zone and the forward statement.\", -1)\nconst _hoisted_47 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"For more information on changing the kube-dns configuration, see \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://kubernetes.io/docs/tasks/administer-cluster/dns-custom-nameservers/\",\n rel: \"noopener noreferrer\"\n }, \"this documentation page\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_48 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"Nodelocaldns\", -1)\nconst _hoisted_49 = /*#__PURE__*/_createElementVNode(\"p\", null, \"DNS queries are a common and essential part of network communication. They need to be processed quickly to avoid performance issues. Slow DNS queries can cause problems that are difficult to diagnose and troubleshoot.\", -1)\nconst _hoisted_50 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"To improve the performance of DNS queries in a Kubernetes cluster, a cache layer can be added on each node using the \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://kubernetes.io/docs/tasks/administer-cluster/nodelocaldns/\",\n rel: \"noopener noreferrer\"\n }, \"nodelocaldns\"),\n /*#__PURE__*/_createTextVNode(\" component. This component caches the responses to DNS queries.\")\n], -1)\nconst _hoisted_51 = /*#__PURE__*/_createElementVNode(\"p\", null, \"If no response is found in the cache, it forwards the query to the authoritative nameserver (CoreDNS). The response is stored in the local cache so that it can be used to serve future queries from the same or other pods on the same node.\", -1)\nconst _hoisted_52 = /*#__PURE__*/_createElementVNode(\"p\", null, \"This reduces the amount of network traffic between pods and the DNS server. This means lower latencies and faster DNS query performance. The function of nodelocaldns is often fulfilled by CoreDNS as well.\", -1)\nconst _hoisted_53 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"A note on the TTL (time-to-live) of records in Kubernetes\", -1)\nconst _hoisted_54 = /*#__PURE__*/_createElementVNode(\"p\", null, \"In Kubernetes, the time-to-live (TTL) of DNS records is determined by the DNS server implementation that is being used.\", -1)\nconst _hoisted_55 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"By default, CoreDNS sets the TTL of DNS records to 30 seconds. This means that when a DNS query is resolved, the response will be cached for up to 30 seconds before it is considered stale. The TTL of DNS records can be modified using the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"ttl\"),\n /*#__PURE__*/_createTextVNode(\" option in the CoreDNS configuration file.\")\n], -1)\nconst _hoisted_56 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The TTL of DNS records is an important parameter because it determines how long a DNS response will be considered valid before a new query must be made.\", -1)\nconst _hoisted_57 = /*#__PURE__*/_createElementVNode(\"p\", null, \"A shorter TTL can improve the accuracy of DNS responses, but it can also increase the load on the DNS server. A longer TTL can reduce the load on the DNS server. However, it can also cause DNS responses to be outdated or inaccurate if the underlying DNS records are updated.\", -1)\nconst _hoisted_58 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Therefore, the appropriate TTL should be chosen based on the specific requirements of the cluster.\", -1)\nconst _hoisted_59 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Bonus: SRV records\", -1)\nconst _hoisted_60 = /*#__PURE__*/_createElementVNode(\"p\", null, \"So far we've only talked about resolving IP addresses using A-records. Kubernetes also uses SRV (service) records to resolve the port numbers of named services. This allows clients to discover the port numbers of services by querying the DNS server for the appropriate SRV record.\", -1)\nconst _hoisted_61 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"apiVersion: v1\\nkind: Service\\nmetadata:\\n name: nginx\\n namespace: default\\nspec:\\n ports:\\n - port: 80\\n name: http\", -1)\nconst _hoisted_62 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"In this service, the container port 80 is exposed and is given the name \\\"http\\\". Because the port is named, Kubernetes will generate an SRV record with the following name: \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"_._...svc.\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_63 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"In this case, the SRV record will be named \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"_http._tcp.nginx.default.svc.cluster.local\"),\n /*#__PURE__*/_createTextVNode(\". A DNS query for this record would return the port number and IP address of the named service:\")\n], -1)\nconst _hoisted_64 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"dig +short SRV _http._tcp.nginx.default.svc.cluster.local\\n0 100 80 10-129-1-26.nginx.default.svc.cluster.local.\", -1)\nconst _hoisted_65 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Some services, such as Kerberos, use SRV records for the discovery of the KDC (Key Distribution Center) servers.\", -1)\n\nimport BlogPost from '@/components/layout/BlogPost.vue';\n\nimport { ruurtjan, steven } from '@/common/authors';\nimport { learningBreadcrumb } from '@/model/Breadcrumb';\nimport { BlogMeta } from '@/common/blogMeta';\nimport CalloutComponent from '@/components/layout/CalloutComponent.vue';\nimport CodeBlock from '@/components/micro/CodeBlock.vue';\n\nconst meta: BlogMeta = {\n tag: 'Operations',\n url: '/learning/the-life-of-a-dns-query-in-kubernetes/',\n breadcrumbs: [learningBreadcrumb],\n title: 'The life of a DNS query in Kubernetes',\n description: 'In Kubernetes, DNS queries follow a specific path to resolve the IP address of a hostname. Here are all the steps and components it goes through.',\n overviewImage: '/img/learning/the-life-of-a-dns-query-in-kubernetes/tracing-dns-through-k8s-small.jpg',\n overviewImageAlt: 'The life of a DNS query in Kubernetes',\n overviewDescription: 'In Kubernetes, DNS queries follow a specific path to resolve the IP address of a hostname. Here are all the steps and components it goes through.',\n author: steven,\n editor: ruurtjan,\n img1024x512: 'https://www.nslookup.io/img/learning/the-life-of-a-dns-query-in-kubernetes/the-life-of-a-dns-query-in-kubernetes-social.jpg',\n img1200x630: 'https://www.nslookup.io/img/learning/the-life-of-a-dns-query-in-kubernetes/the-life-of-a-dns-query-in-kubernetes-social.jpg',\n written: new Date('2022-12-20T08:49:36.186Z'),\n updated: new Date('2023-12-29T10:10:55.153Z'),\n};\nconst __default__ = {\n meta,\n};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'TheLifeOfADnsQueryInKubernetes',\n setup(__props) {\n\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"ImageObject\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"email\\\": \\\"mailto:ruurtjan@nslookup.io\\\", \\\"image\\\": \\\"https://www.nslookup.io/img/ruurtjan-lg.jpg\\\", \\\"jobTitle\\\": \\\"CEO\\\", \\\"name\\\": \\\"Ruurtjan Pul\\\", \\\"url\\\": \\\"https://www.nslookup.io/about/ruurtjan-pul/\\\" }, \\\"copyrightHolder\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"https://www.nslookup.io/\\\", \\\"email\\\": \\\"hello@nslookup.io\\\" }, \\\"copyrightYear\\\": 2023, \\\"contentUrl\\\": \\\"https://www.nslookup.io/img/learning/the-life-of-a-dns-query-in-kubernetes/tracing-dns-through-k8s.jpg\\\", \\\"license\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\", \\\"acquireLicensePage\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\" } \")\n ]),\n _: 1\n })),\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"ImageObject\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"name\\\": \\\"Steven Reitsma\\\" }, \\\"copyrightHolder\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"https://www.nslookup.io/\\\", \\\"email\\\": \\\"hello@nslookup.io\\\" }, \\\"copyrightYear\\\": 2022, \\\"contentUrl\\\": \\\"https://www.nslookup.io/img/learning/the-life-of-a-dns-query-in-kubernetes/flow-of-a-dns-query-in-kubernetes.png\\\", \\\"license\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\", \\\"acquireLicensePage\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\" } \")\n ]),\n _: 1\n }))\n ])),\n _createVNode(BlogPost, {\n title: meta.title,\n description: meta.description,\n url: `https://www.nslookup.io${meta.url}`,\n breadcrumbs: meta.breadcrumbs,\n img1024x512: meta.img1024x512,\n img1200x630: meta.img1200x630,\n written: meta.written,\n updated: meta.updated,\n author: meta.author,\n editor: meta.editor\n }, {\n default: _withCtx(() => [\n _hoisted_1,\n _hoisted_2,\n _hoisted_3,\n _hoisted_4,\n _hoisted_5,\n _createVNode(CalloutComponent, { icon: \"info\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"The information in this blog post might not apply to every single Kubernetes cluster. However, most of the well-known Kubernetes distributions will behave as shown.\")\n ]),\n _: 1\n }),\n _hoisted_6,\n _hoisted_7,\n _hoisted_8,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"When a service is created in Kubernetes, the cluster DNS server creates an \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/a/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"A record\")\n ]),\n _: 1\n }),\n _createTextVNode(\" for the service. This record maps the service's DNS name to its IP address. This allows pods to access the service using its DNS name. The DNS server also updates the A-record whenever the IP address of the service changes. This ensures that the DNS name always points to the correct IP address.\")\n ]),\n _hoisted_9,\n _createVNode(CodeBlock, { syntax: \"yaml\" }, {\n default: _withCtx(() => [\n _hoisted_10\n ]),\n _: 1\n }),\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"The \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/a/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"A record\")\n ]),\n _: 1\n }),\n _createTextVNode(\" and \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/srv/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"SRV record\")\n ]),\n _: 1\n }),\n _createTextVNode(\" (discussed later in the article) that are created in this instance look like this:\")\n ]),\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_11\n ]),\n _: 1\n }),\n _hoisted_12,\n _hoisted_13,\n _hoisted_14,\n _hoisted_15,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"When a pod performs a DNS lookup, the query is first sent to the \"),\n _createVNode(_component_router_link, { to: \"/learning/what-is-a-dns-resolver/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"local DNS resolver\")\n ]),\n _: 1\n }),\n _createTextVNode(\" in the pod. This resolver uses the resolv.conf configuration file. In this file, the nodelocaldns server is set up as the default recursive DNS resolver, which acts as a cache.\")\n ]),\n _hoisted_16,\n _hoisted_17,\n _hoisted_18,\n _hoisted_19,\n _hoisted_20,\n _hoisted_21,\n _hoisted_22,\n _hoisted_23,\n _hoisted_24,\n _hoisted_25,\n _hoisted_26,\n _hoisted_27,\n _hoisted_28,\n _hoisted_29,\n _hoisted_30,\n _hoisted_31,\n _hoisted_32,\n _hoisted_33,\n _hoisted_34,\n _hoisted_35,\n _createVNode(CodeBlock, { syntax: \"yaml\" }, {\n default: _withCtx(() => [\n _hoisted_36\n ]),\n _: 1\n }),\n _hoisted_37,\n _hoisted_38,\n _hoisted_39,\n _hoisted_40,\n _hoisted_41,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"In Kubernetes clusters up to version 1.13, kube-dns acted as the \"),\n _createVNode(_component_router_link, { to: \"/learning/recursive-vs-authoritative-dns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"authoritative DNS server\")\n ]),\n _: 1\n }),\n _createTextVNode(\" for Kubernetes. In Kubernetes version 1.13, \"),\n _hoisted_42,\n _createTextVNode(\" as the default component for authoritative DNS queries.\")\n ]),\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"The DNS server adds all services to its authoritative \"),\n _createVNode(_component_router_link, { to: \"/learning/what-is-a-dns-zone/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"DNS zone\")\n ]),\n _: 1\n }),\n _createTextVNode(\", so that it can resolve domain names to IP addresses for Kubernetes services. Various software implementations exist for the authoritative DNS server in Kubernetes.\")\n ]),\n _hoisted_43,\n _hoisted_44,\n _createVNode(CodeBlock, { syntax: \"json\" }, {\n default: _withCtx(() => [\n _hoisted_45\n ]),\n _: 1\n }),\n _hoisted_46,\n _hoisted_47,\n _hoisted_48,\n _hoisted_49,\n _hoisted_50,\n _hoisted_51,\n _hoisted_52,\n _hoisted_53,\n _hoisted_54,\n _hoisted_55,\n _hoisted_56,\n _hoisted_57,\n _hoisted_58,\n _hoisted_59,\n _hoisted_60,\n _createVNode(CodeBlock, { syntax: \"yaml\" }, {\n default: _withCtx(() => [\n _hoisted_61\n ]),\n _: 1\n }),\n _hoisted_62,\n _hoisted_63,\n _hoisted_64,\n _hoisted_65\n ]),\n _: 1\n }, 8, [\"title\", \"description\", \"url\", \"breadcrumbs\", \"img1024x512\", \"img1200x630\", \"written\", \"updated\", \"author\", \"editor\"])\n ], 64))\n}\n}\n\n})","import script from \"./TheLifeOfADnsQueryInKubernetes.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./TheLifeOfADnsQueryInKubernetes.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, createElementVNode as _createElementVNode, createVNode as _createVNode, resolveComponent as _resolveComponent, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\nimport _imports_0 from '../../../public/img/learning/what-is-a-dns-resolver/how-does-dns-resolver-work.jpg'\nimport _imports_1 from '../../../public/img/learning/what-is-a-dns-resolver/windows-ipv4-properties.jpg'\nimport _imports_2 from '../../../public/img/learning/what-is-a-dns-resolver/configure-dns-resolver-macos.png'\n\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"strong\", { class: \"text-xl leading-8 block font-normal text-gray-500 mt-[1.3333333em]\" }, \"A DNS stub resolver is an operating system component that performs DNS name resolution for applications running on a computer, cell phone, or another Internet-connected device.\", -1)\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full rounded-lg\",\n src: \"/img/learning/what-is-a-dns-resolver/what-is-a-dns-stub-resolver.jpg\",\n alt: \"A stub resolver is like a liftboy. Taking you where you need to go, without executing the work itself.\",\n title: \"A stub resolver is like a liftboy. Taking you where you need to go, without executing the work itself.\",\n width: \"1200\",\n height: \"600\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, [\n /*#__PURE__*/_createTextVNode(\"A stub resolver is like a liftboy. Taking you where you need to go, without executing the work itself. By NsLookup.io. Licensed under \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://creativecommons.org/licenses/by/4.0/\",\n title: \"Creative Commons By 4.0 licence\",\n rel: \"nofollow\"\n }, \"CC By 4.0\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Why is it called a stub resolver?\", -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The term \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"stub resolver\"),\n /*#__PURE__*/_createTextVNode(\" may seem strange. The word \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"stub\"),\n /*#__PURE__*/_createTextVNode(\" refers to something that's partial or a subset of something larger.\")\n], -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"A stub resolver is a partial DNS resolver. It relies on the services of a recursive DNS resolver. Stub resolvers were first formally defined in 1989 in \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc1123#section-6.1.3.1\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, \"section 6 of RFC 1123\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"p\", null, \"A stub resolver converts name resolution requests from applications like web browsers into DNS request messages. The stub resolver sends the DNS request messages to a DNS recursive resolver and returns the result to the application.\", -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Stub resolvers don't perform recursion themselves. Instead, they talk to a recursive DNS resolver which performs recursion on their behalf. This allows many stub resolvers to collectively share the cache of the recursive DNS resolver. This speeds up name resolution for all the stub resolvers and reduces the overall load on the DNS.\", -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The terms \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"stub resolver\"),\n /*#__PURE__*/_createTextVNode(\" and \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"DNS client\"),\n /*#__PURE__*/_createTextVNode(\" are used interchangeably to mean the same thing: a software component or service running on a computer that sends DNS messages to a recursive DNS resolver and caches the results.\")\n], -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Historically the term \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"stub resolver\"),\n /*#__PURE__*/_createTextVNode(\" was used. A DNS stub resolver can be considered a client of a recursive DNS resolver. So, later the term \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"DNS client\"),\n /*#__PURE__*/_createTextVNode(\" was coined.\")\n], -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Linux-based operating systems generally use the term \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"stub resolver\"),\n /*#__PURE__*/_createTextVNode(\", and the Windows operating system uses the term \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"DNS client\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"How does a DNS stub resolver work?\", -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The DNS stub resolver is a part of the operating system running on a computer, cell phone, or another device. It talks to a recursive DNS resolver to convert DNS names into IP addresses for all the applications running on the device.\", -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Typically, DNS stub resolvers are used like this:\", -1)\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"A user types a DNS name such as \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"www.google.com\"),\n /*#__PURE__*/_createTextVNode(\" into an application like a web browser.\")\n], -1)\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"li\", null, \"The application makes a standard operating system call to request a DNS lookup for the name.\", -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"li\", null, \"The DNS stub resolver on the device creates a DNS message for the request and sends it to a DNS recursive resolver.\", -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"li\", null, \"The IP address for the name is sent back to the stub resolver. The stub resolver caches the IP address and returns it to the application.\", -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"li\", null, \"The web browser can now connect to the IP address and display the web page.\", -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"full-width\",\n src: _imports_0,\n alt: \"How does a DNS stub resolver work?\",\n title: \"How does a DNS stub resolver work?\"\n}, null, -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"p\", null, \"How does a DNS stub resolver know which DNS recursive resolver to use?\", -1)\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Each time a computer or another device connects to a network, its DNS stub resolver is automatically configured to use the recursive DNS resolver for that network. Usually, this recursive DNS resolver belongs to the ISP or cellular data carrier.\", -1)\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"p\", null, \"You might want to use a different DNS recursive resolver for privacy, speed, or reliability. Or one that provides features like filtering for inappropriate websites.\", -1)\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"p\", null, \"All operating systems allow the user to specify a DNS recursive resolver of their choosing. Some popular recursive DNS resolver are:\", -1)\nconst _hoisted_24 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Cloudflare - 1.1.1.1\"),\n /*#__PURE__*/_createTextVNode(\": One of the fastest open DNS resolvers available.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Google - 8.8.8.8\"),\n /*#__PURE__*/_createTextVNode(\": The largest open DNS resolver, handling over a trillion queries per day.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"OpenDNS - 208.67.222.222\"),\n /*#__PURE__*/_createTextVNode(\": Offers a security product suite called \\\"Umbrella\\\" in addition to being an open DNS resolver.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Quad9 - 9.9.9.9\"),\n /*#__PURE__*/_createTextVNode(\": A global open DNS resolver operated by a Swiss not-for-profit that aims to improve privacy and cybersecurity.\")\n ])\n], -1)\nconst _hoisted_25 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Checking DNS stub resolver configuration\", -1)\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"p\", null, \"If you have an issue with DNS, check how your DNS stub resolver is configured. On Windows 10 or 11:\", -1)\nconst _hoisted_27 = /*#__PURE__*/_createElementVNode(\"ol\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"Open the \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Control Panel\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"Click on \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Network and Internet\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"Click on \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Network and Sharing Center\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"Click \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Change adapter settings\"),\n /*#__PURE__*/_createTextVNode(\" on the left side of the window.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"Right-click on the appropriate Network Connection, usually called \\\"Wi-Fi\\\", and click \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Properties\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"Double-click on \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Internet Prococol Version 4 (TCP/IPv4)\")\n ])\n], -1)\nconst _hoisted_28 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"You will see a dialog like the one below. If you want the Windows DNS stub resolver to use the default DNS recursive resolver, ensure that \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"Obtain DNS server address automatically\\\"\"),\n /*#__PURE__*/_createTextVNode(\" is selected and click OK. If you are having trouble with DNS, this is the safest choice.\")\n], -1)\nconst _hoisted_29 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Select \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"Use the following DNS server addresses\\\"\"),\n /*#__PURE__*/_createTextVNode(\" if you want the Windows DNS stub resolver to use a public DNS recursive resolver. For Google DNS, enter 8.8.8.8 and 8.8.4.4 as the preferred and alternate DNS server addresses. For Cloudflare, enter 1.1.1.1 and 1.0.0.1. Other public DNS recursive resolvers will have their IP addresses in their help guides.\")\n], -1)\nconst _hoisted_30 = /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"full-width\",\n src: _imports_1,\n alt: \"Settings to configure a dns resolver on Windows\",\n title: \"Settings to configure a dns resolver on Windows\"\n}, null, -1)\nconst _hoisted_31 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"DNS stub resolver on Mac OS\", -1)\nconst _hoisted_32 = /*#__PURE__*/_createElementVNode(\"p\", null, \"On Mac OS to get to the DNS stub resolver settings:\", -1)\nconst _hoisted_33 = /*#__PURE__*/_createElementVNode(\"ol\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"Open \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"System Settings\"),\n /*#__PURE__*/_createTextVNode(\" from the Apple menu\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"Click \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Network\"),\n /*#__PURE__*/_createTextVNode(\" in the sidebar\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Click on your network connection\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"Click \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Details\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"Click \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"DNS\")\n ])\n], -1)\nconst _hoisted_34 = /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"full-width\",\n src: _imports_2,\n alt: \"Settings to configure a dns resolver on macOS\",\n title: \"Settings to configure a dns resolver on macOS\"\n}, null, -1)\nconst _hoisted_35 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"How do you bypass the DNS stub resolver?\", -1)\nconst _hoisted_36 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The hosts file is a special text file that contains DNS entries. The DNS stub resolver uses names and addresses in the hosts file \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"instead of sending a query to the DNS recursive resolver\"),\n /*#__PURE__*/_createTextVNode(\" to respond to application name resolution requests.\")\n], -1)\nconst _hoisted_37 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Perhaps you are testing a website on your laptop, and you want the hostname \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"mytestwebsite.example.org\"),\n /*#__PURE__*/_createTextVNode(\" to resolve to the IP address \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"10.10.10.10\"),\n /*#__PURE__*/_createTextVNode(\". You would add this line of text to the hosts file on your laptop:\")\n], -1)\nconst _hoisted_38 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"10.10.10.10 mytestwebsite.example.org\", -1)\nconst _hoisted_39 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Virtually every operating system supports the hosts file and uses the same file format, but the hosts file is located in different places:\", -1)\nconst _hoisted_40 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Windows\"),\n /*#__PURE__*/_createTextVNode(\": %SystemRoot%\\\\System32\\\\drivers\\\\etc\\\\hosts\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Mac OS\"),\n /*#__PURE__*/_createTextVNode(\": /etc/hosts (which is a symbolic link to /private/etc/hosts)\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Most versions of Linux\"),\n /*#__PURE__*/_createTextVNode(\": /etc/hosts\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Android\"),\n /*#__PURE__*/_createTextVNode(\": /etc/hosts\")\n ])\n], -1)\nconst _hoisted_41 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The hosts file can be used to block name resolution by inserting an invalid address for a name. This is useful if you want to prevent certain DNS names from resolving. Some ad-blocking software packages use this to prevent advertisements from being displayed.\", -1)\nconst _hoisted_42 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Fixing a broken DNS resolver\", -1)\nconst _hoisted_43 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Since DNS is so critical, you'll probably be painfully aware if your stub resolver is not working properly!\", -1)\nconst _hoisted_44 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The ping command line tool is handy because it invokes the DNS stub resolver in the same way as a web browser or another application. If you were to accidentally misconfigure your DNS stub resolver by specifying a DNS recursive resolver address of 8.8.8.9 (instead of 8.8.8.8), you would find that you could not reach any websites. On Windows, you would see output like this:\", -1)\nconst _hoisted_45 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"C:\\\\ > ping www.google.com\\nPing request could not find host www.google.com. Please check the name and try again.\\n\\nC:\\\\> nslookup www.google.com\\nDNS request timed out.\\n timeout was 2 seconds.\\nServer: UnKnown\\nAddress: 8.8.8.9\\nDNS request timed out.\\n timeout was 2 seconds.\\n\\nC:\\\\> dig www.google.com\\n; <<>> DiG 9.10.3 <<>> www.google.com\\n;; global options: +cmd\\n;; connection timed out; no servers could be reached\", -1)\nconst _hoisted_46 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Here are some steps to take if you are having trouble with your DNS stub resolver:\", -1)\nconst _hoisted_47 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Open your hosts file and check for unexpected lines that might interfere with normal name resolution\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Check your DNS stub resolver configuration and see if unexpected preferred or alternate DNS servers are set\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"Try changing your DNS stub resolver to \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"\\\"Obtain DNS server address automatically\\\"\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Try changing your DNS stub resolver to use Google DNS by setting the DNS server addresses to 8.8.8.8 and 8.8.4.4\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Try changing your DNS stub resolver to use Cloudflare by setting the DNS server addresses to 1.1.1.1 and 1.0.0.1\")\n], -1)\n\nimport BlogPost from '@/components/layout/BlogPost.vue';\n\nimport { jeff, ruurtjan } from '@/common/authors';\nimport { BlogMeta } from '@/common/blogMeta';\nimport Callout from '@/components/layout/CalloutComponent.vue';\nimport { learningBreadcrumb } from '@/model/Breadcrumb';\n\nconst meta: BlogMeta = {\n tag: 'DNS concepts',\n url: '/learning/what-is-a-dns-resolver/',\n breadcrumbs: [learningBreadcrumb],\n title: 'What is a DNS stub resolver?',\n description: 'A DNS stub resolver is an operating system component that performs DNS name resolution for applications running on a computer or phone.',\n overviewImage: '/img/learning/what-is-a-dns-resolver/what-is-a-dns-stub-resolver-small.png',\n overviewImageAlt: 'What is a DNS stub resolver?',\n overviewDescription: 'A DNS stub resolver is an operating system component that performs DNS name resolution for applications running on a computer or phone.',\n author: jeff,\n editor: ruurtjan,\n img1024x512: 'https://www.nslookup.io/img/learning/what-is-a-dns-resolver/what-is-a-dns-resolver-social.jpg',\n img1200x630: 'https://www.nslookup.io/img/learning/what-is-a-dns-resolver/what-is-a-dns-resolver-social.jpg',\n written: new Date('2023-03-21T10:17:08.798Z'),\n updated: new Date('2023-03-28T12:00:48.455Z'),\n};\n\nconst __default__ = {\n meta,\n};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'WhatIsADnsResolver',\n setup(__props) {\n\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"ImageObject\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"email\\\": \\\"mailto:ruurtjan@nslookup.io\\\", \\\"image\\\": \\\"https://www.nslookup.io/img/ruurtjan-lg.jpg\\\", \\\"jobTitle\\\": \\\"CEO\\\", \\\"name\\\": \\\"Ruurtjan Pul\\\", \\\"url\\\": \\\"https://www.nslookup.io/about/ruurtjan-pul/\\\" }, \\\"copyrightHolder\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"https://www.nslookup.io/\\\", \\\"email\\\": \\\"hello@nslookup.io\\\" }, \\\"copyrightYear\\\": 2023, \\\"contentUrl\\\": \\\"https://www.nslookup.io/img/learning/what-is-a-dns-resolver/what-is-a-dns-stub-resolver.jpg\\\", \\\"license\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\", \\\"acquireLicensePage\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\" } \")\n ]),\n _: 1\n }))\n ])),\n _createVNode(BlogPost, {\n title: meta.title,\n description: meta.description,\n url: `https://www.nslookup.io${meta.url}`,\n breadcrumbs: meta.breadcrumbs,\n img1024x512: meta.img1024x512,\n img1200x630: meta.img1200x630,\n written: meta.written,\n updated: meta.updated,\n author: meta.author,\n editor: meta.editor\n }, {\n default: _withCtx(() => [\n _hoisted_1,\n _hoisted_2,\n _hoisted_3,\n _hoisted_4,\n _hoisted_5,\n _hoisted_6,\n _hoisted_7,\n _createVNode(Callout, {\n icon: \"info\",\n heading: \"h3\",\n title: \"Stub resolver or DNS client?\"\n }, {\n default: _withCtx(() => [\n _hoisted_8,\n _hoisted_9,\n _hoisted_10\n ]),\n _: 1\n }),\n _hoisted_11,\n _hoisted_12,\n _hoisted_13,\n _createElementVNode(\"ol\", null, [\n _hoisted_14,\n _hoisted_15,\n _hoisted_16,\n _createElementVNode(\"li\", null, [\n _createTextVNode(\"The DNS recursive resolver consults its cache and various authoritative DNS servers to find the address for the name. See our article on \"),\n _createVNode(_component_router_link, { to: \"/learning/recursive-vs-authoritative-dns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"Recursive vs Authoritative DNS\")\n ]),\n _: 1\n }),\n _createTextVNode(\" for more information.\")\n ]),\n _hoisted_17,\n _hoisted_18\n ]),\n _hoisted_19,\n _createVNode(Callout, {\n icon: \"info\",\n heading: \"h3\",\n title: \"Which DNS recursive resolver?\"\n }, {\n default: _withCtx(() => [\n _hoisted_20,\n _hoisted_21,\n _hoisted_22,\n _hoisted_23,\n _hoisted_24\n ]),\n _: 1\n }),\n _hoisted_25,\n _hoisted_26,\n _hoisted_27,\n _hoisted_28,\n _hoisted_29,\n _hoisted_30,\n _hoisted_31,\n _hoisted_32,\n _hoisted_33,\n _hoisted_34,\n _hoisted_35,\n _hoisted_36,\n _hoisted_37,\n _hoisted_38,\n _hoisted_39,\n _hoisted_40,\n _hoisted_41,\n _hoisted_42,\n _hoisted_43,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"If you wish to compare the results of your stub resolver against another resolver, you can run a command line tool like ping, nslookup, or dig and compare the results obtained from our \"),\n _createVNode(_component_router_link, { to: \"/a-lookup/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"A record lookup\")\n ]),\n _: 1\n }),\n _createTextVNode(\".\")\n ]),\n _hoisted_44,\n _hoisted_45,\n _hoisted_46,\n _hoisted_47\n ]),\n _: 1\n }, 8, [\"title\", \"description\", \"url\", \"breadcrumbs\", \"img1024x512\", \"img1200x630\", \"written\", \"updated\", \"author\", \"editor\"])\n ], 64))\n}\n}\n\n})","import script from \"./WhatIsADnsResolver.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WhatIsADnsResolver.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, unref as _unref, normalizeClass as _normalizeClass, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\nimport _imports_0 from '../../../public/img/learning/what-is-a-dns-zone/example-zone.jpg'\n\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"strong\", { class: \"text-xl leading-8 block font-normal text-gray-500 mt-[1.3333333em]\" }, \"A DNS zone represents a portion of the DNS namespace owned and managed as a single unit by one organization. The global DNS is composed of many zones.\", -1)\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The most well-known zones are the DNS root zone, where the DNS begins, and the Top Level Domains (TLDs) such as .com, .net, .org, etc. Below the TLDs, virtually every recognizable brand with a presence on the Internet has its very own DNS zone. So, for example, individual DNS zones exist for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"google.com\"),\n /*#__PURE__*/_createTextVNode(\", \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"wikipedia.org\"),\n /*#__PURE__*/_createTextVNode(\", \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"bit.ly\"),\n /*#__PURE__*/_createTextVNode(\", and millions upon millions of other domains.\")\n], -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full rounded-lg\",\n src: \"/img/learning/what-is-a-dns-zone/what-is-a-dns-zone.jpg\",\n alt: \"Zones in the DNS are organized in a tree\",\n title: \"Zones in the DNS are organized in a tree\",\n width: \"1200\",\n height: \"600\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, [\n /*#__PURE__*/_createTextVNode(\"Zones in the DNS are organized in a tree. By NsLookup.io. Licensed under \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://creativecommons.org/licenses/by/4.0/\",\n title: \"Creative Commons By 4.0 licence\",\n rel: \"nofollow\"\n }, \"CC By 4.0\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Where does a zone begin?\", -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Every DNS zone begins at a specific name in the DNS. The DNS zone owns that name and all of the children of that name. For example, the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \".com\"),\n /*#__PURE__*/_createTextVNode(\" TLD is a zone that begins at the name \\\"com\\\" and extends downwards to encompass all of the DNS names that end with \\\".com\\\".\")\n], -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"And where does a zone end?\", -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Each zone owns the name where the zone starts and of that name's children. But each zone's administrator can insert \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"delegations\"),\n /*#__PURE__*/_createTextVNode(\" to transfer, or \\\"delegate\\\", ownership to other zones.\")\n], -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"An example zone\", -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"example.org. 3600 SOA ns1.example.org. admin.example.org. 100 7200 3600 86400 300\\nexample.org. 3600 NS ns1.example.org.\\nexample.org. 3600 NS ns2.example.org.\\n\\ndatabase.example.org. 3600 A 10.0.0.3\\ndatabase.example.org. 3600 A 10.0.0.4\\n\\nmail.example.org. 3600 A 10.0.0.1\\nmail.example.org. 3600 A 10.0.0.2\\n\\n; The 'support' subdomain is delegated to DNS servers of a third party\\nsupport.example.org. 3600 NS ns1.support-software.org.\\nsupport.example.org. 3600 NS ns2.support-software.org.\\n\", -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" zone owns, or is authoritative for, the DNS name\"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\". It also owns all of the DNS names that are children of \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\", with the exception of \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"support.example.org\"),\n /*#__PURE__*/_createTextVNode(\". The delegation at \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"support.example.org\"),\n /*#__PURE__*/_createTextVNode(\" means that authority at that point in the DNS tree is delegated to other DNS servers.\")\n], -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"What names in the DNS belong to the example.org zone?\", -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"p\", null, \"It's helpful to consider the DNS as a tree of names starting with the DNS root at the top and flowing downward. Each node in this tree represents one label of a DNS name.\", -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"As we discussed, the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" zone begins at example.org and flows downwards to all child names, stopping at delegations. So names shown as spheres on green in the diagram below are part of the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\". Names shown as cubes on purple belong a different zone in the DNS.\")\n], -1)\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"full-width\",\n src: _imports_0,\n alt: \"Our example zone\",\n title: \"Our example zone\"\n}, null, -1)\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"How do DNS lookups use DNS zones?\", -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"strong\", null, \"DNS resolver\", -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"A DNS resolver performing a DNS lookup for a typical name such as \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"www.example.org\"),\n /*#__PURE__*/_createTextVNode(\" will move through three DNS zones:\")\n], -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"The root\"),\n /*#__PURE__*/_createTextVNode(\": Authority begins with the DNS root zone. The root zone contains a delegation to the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"org\"),\n /*#__PURE__*/_createTextVNode(\" zone.\")\n], -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"org\"),\n /*#__PURE__*/_createTextVNode(\": The \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"org\"),\n /*#__PURE__*/_createTextVNode(\" zone contains a delegation to the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" zone.\")\n], -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"strong\", null, \"example.org\", -1)\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\", -1)\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"code\", null, \"www.example.org\", -1)\nconst _hoisted_23 = { class: \"mx-auto max-w-3xl divide-y-2 divide-gray-200\" }\nconst _hoisted_24 = /*#__PURE__*/_createElementVNode(\"h2\", { class: \"ignore-toc\" }, \"Related questions\", -1)\nconst _hoisted_25 = { class: \"mt-6 space-y-6 divide-y divide-gray-200 [overflow-anchor:none]\" }\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg font-medium text-gray-900\" }, \" What is a DNS zone file? \", -1)\nconst _hoisted_27 = { class: \"ml-6 flex h-7 items-center\" }\nconst _hoisted_28 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", { class: \"font-medium text-gray-500\" }, \"The zone file is a standardized text file format for the DNS. DNS server software such as BIND, Unbound, Knot, and many others read the DNS records for each DNS zone that they host from a DNS zone file.\")\n], -1)\nconst _hoisted_29 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Each DNS record in a zone is represented by one line in the zone file. Each line includes the owner name of the DNS record, the Time-To-Live (TTL) of the record in seconds, the record type, and the record data. Each DNS zone file contains all of the records for a single DNS zone.\", -1)\nconst _hoisted_30 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Today, many DNS providers have a web-based or scriptable portal that can be used instead of DNS zone files. But these providers usually offer a way to import a DNS zone file. The DNS zone file format is also convenient for examples in articles on the DNS!\", -1)\nconst _hoisted_31 = { class: \"mt-6 space-y-6 divide-y divide-gray-200 [overflow-anchor:none]\" }\nconst _hoisted_32 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg font-medium text-gray-900\" }, \" What is DNS zone transfer? \", -1)\nconst _hoisted_33 = { class: \"ml-6 flex h-7 items-center\" }\nconst _hoisted_34 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", { class: \"font-medium text-gray-500\" }, \"Zone transfer is used to copy or \\\"transfer\\\" the contents of a DNS zone from one DNS server to another over the Internet using the DNS protocol.\")\n], -1)\nconst _hoisted_35 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"DNS zone transfer was introduced in \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc1034\",\n rel: \"noopener noreferrer\"\n }, \"RFC 1034\"),\n /*#__PURE__*/_createTextVNode(\" and \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc1035\",\n rel: \"noopener noreferrer\"\n }, \"RFC 1035\"),\n /*#__PURE__*/_createTextVNode(\" and later updated by \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc5936\",\n rel: \"noopener noreferrer\"\n }, \"RFC 5936\"),\n /*#__PURE__*/_createTextVNode(\". Each zone transfer includes every record in a DNS zone. Incremental zone transfer was added in \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc1995\",\n rel: \"noopener noreferrer\"\n }, \"RFC 1995\"),\n /*#__PURE__*/_createTextVNode(\" to improve efficiency.\")\n], -1)\nconst _hoisted_36 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Zone transfer allows a DNS administrator to host a zone on multiple DNS servers for redundancy without having to manually copy the zone to each DNS server whenever a change is made. The administrator makes changes on one DNS server, called the \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"primary server\"),\n /*#__PURE__*/_createTextVNode(\", and zone transfer automatically updates all of the other DNS servers for the zone, called the \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"secondary servers\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_37 = { class: \"mt-6 space-y-6 divide-y divide-gray-200 [overflow-anchor:none]\" }\nconst _hoisted_38 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-lg font-medium text-gray-900\" }, \" How many zones can be involved in a single DNS lookup? \", -1)\nconst _hoisted_39 = { class: \"ml-6 flex h-7 items-center\" }\nconst _hoisted_40 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", { class: \"font-medium text-gray-500\" }, \"Up to 63! But usually three to five.\")\n], -1)\nconst _hoisted_41 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"In our example lookup for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"www.example.org\"),\n /*#__PURE__*/_createTextVNode(\" there were three zones but the lookup path from the root can flow through more than three zones. In theory there can be up to 63 labels in a DNS name which could mean up to 63 distinct zones! But between three and five labels, and roughly that number of zones, is typical.\")\n], -1)\nconst _hoisted_42 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Each label in a DNS name may lie in a different DNS zone, or a single zone may encompass multiple labels.\", -1)\n\nimport BlogPost from '@/components/layout/BlogPost.vue';\n\nimport { useRouter } from 'vue-router';\nimport {\n Disclosure,\n DisclosureButton,\n DisclosurePanel,\n} from '@headlessui/vue';\nimport { ChevronDownIcon } from '@heroicons/vue/24/outline';\nimport { jeff, ruurtjan } from '@/common/authors';\nimport { learningBreadcrumb } from '@/model/Breadcrumb';\nimport { BlogMeta } from '@/common/blogMeta';\nimport CodeBlock from '@/components/micro/CodeBlock.vue';\n\nconst meta: BlogMeta = {\n tag: 'DNS concepts',\n url: '/learning/what-is-a-dns-zone/',\n breadcrumbs: [learningBreadcrumb],\n title: 'What is a DNS zone?',\n description: 'A DNS zone represents a portion of the DNS namespace owned and managed as a single unit by one organization. The global DNS is composed of many zones.',\n overviewImage: '/img/learning/what-is-a-dns-zone/what-is-a-dns-zone-small.png',\n overviewImageAlt: 'What is a DNS zone?',\n overviewDescription: 'A DNS zone represents a portion of the DNS namespace owned and managed as a single unit by one organization. The global DNS is composed of many zones.',\n author: jeff,\n editor: ruurtjan,\n img1024x512: 'https://www.nslookup.io/img/learning/dns-what-is-a-dns-zone/dns-what-is-a-dns-zone-social.jpg',\n img1200x630: 'https://www.nslookup.io/img/learning/dns-what-is-a-dns-zone/dns-what-is-a-dns-zone-social.jpg',\n written: new Date('2022-12-01T09:02:05.061Z'),\n updated: new Date('2023-03-28T12:01:00.156Z'),\n};\n\nconst __default__ = {\n meta,\n};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'WhatIsADnsZone',\n setup(__props) {\n\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"ImageObject\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"email\\\": \\\"mailto:ruurtjan@nslookup.io\\\", \\\"image\\\": \\\"https://www.nslookup.io/img/ruurtjan-lg.jpg\\\", \\\"jobTitle\\\": \\\"CEO\\\", \\\"name\\\": \\\"Ruurtjan Pul\\\", \\\"url\\\": \\\"https://www.nslookup.io/about/ruurtjan-pul/\\\" }, \\\"copyrightHolder\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"https://www.nslookup.io/\\\", \\\"email\\\": \\\"hello@nslookup.io\\\" }, \\\"copyrightYear\\\": 2023, \\\"contentUrl\\\": \\\"https://www.nslookup.io/img/learning/what-is-a-dns-zone/what-is-a-dns-zone.jpg\\\", \\\"license\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\", \\\"acquireLicensePage\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\" } \")\n ]),\n _: 1\n }))\n ])),\n _createVNode(BlogPost, {\n title: meta.title,\n description: meta.description,\n url: `https://www.nslookup.io${meta.url}`,\n breadcrumbs: meta.breadcrumbs,\n img1024x512: meta.img1024x512,\n img1200x630: meta.img1200x630,\n written: meta.written,\n updated: meta.updated,\n author: meta.author,\n editor: meta.editor\n }, {\n default: _withCtx(() => [\n _hoisted_1,\n _hoisted_2,\n _hoisted_3,\n _hoisted_4,\n _hoisted_5,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"The DNS contains a special record at the start of each zone: the \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/soa/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"Start of Authority (SOA) record\")\n ]),\n _: 1\n }),\n _createTextVNode(\". This record signifies the beginning of a zone and contains some important metadata about the zone. All zones start with an SOA record.\")\n ]),\n _hoisted_6,\n _hoisted_7,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"A \"),\n _createVNode(_component_router_link, { to: \"/learning/zone-delegation/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"delegation\")\n ]),\n _: 1\n }),\n _createTextVNode(\" serves two important purposes. First, a delegation marks the end of the zone's authority. The delegated name and all of its children are not part of the zone: they are instead part of the child zone. Second, the delegation publishes, to the entire Internet, the set of DNS servers that can resolve names in the child zone.\")\n ]),\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"In this way, the global DNS begins at \"),\n _createVNode(_component_router_link, {\n to: \"/learning/what-is-the-dns-root-zone/\",\n title: \"What is the DNS root zone?\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(\"the root zone\")\n ]),\n _: 1\n }),\n _createTextVNode(\" and flows downwards to different zones through delegations.\")\n ]),\n _hoisted_8,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"Let's consider a simple example zone file. The zone starts with an \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/soa/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"SOA\")\n ]),\n _: 1\n }),\n _createTextVNode(\" record. There must also be two or more \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/ns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"NS records\")\n ]),\n _: 1\n }),\n _createTextVNode(\" at the root of the zone. And often \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/mx/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"MX records\")\n ]),\n _: 1\n }),\n _createTextVNode(\" for mail delivery, and other records as well.\")\n ]),\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_9\n ]),\n _: 1\n }),\n _hoisted_10,\n _hoisted_11,\n _hoisted_12,\n _hoisted_13,\n _hoisted_14,\n _hoisted_15,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"A DNS lookup occurs when a piece of software, such as a web browser, needs to map a DNS name to an IP address or another piece of DNS data. The result of a DNS lookup is often an IP address, but it may be something else. For example, a DNS \"),\n _createVNode(_component_router_link, { to: \"/mx-lookup/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"MX record lookup\")\n ]),\n _: 1\n }),\n _createTextVNode(\" is used to retrieve the mail servers for a domain.\")\n ]),\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"DNS lookups are performed by a software component called a \"),\n _hoisted_16,\n _createTextVNode(\". The DNS resolver begins each query at the DNS root domain by sending a DNS query to one of the DNS root servers. The root server will usually respond with a delegation. The resolver then sends the same query to one of the DNS servers listed in the delegation. These servers might respond with another delegation. This process continues until the DNS resolver gets an answer from one of the DNS servers \"),\n _createVNode(_component_router_link, { to: \"/learning/recursive-vs-authoritative-dns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"authoritative\")\n ]),\n _: 1\n }),\n _createTextVNode(\" for the zone.\")\n ]),\n _hoisted_17,\n _createElementVNode(\"ul\", null, [\n _hoisted_18,\n _hoisted_19,\n _createElementVNode(\"li\", null, [\n _hoisted_20,\n _createTextVNode(\": The \"),\n _hoisted_21,\n _createTextVNode(\" zone would typically contain \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/a/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"A\")\n ]),\n _: 1\n }),\n _createTextVNode(\" or \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/aaaa/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"AAAA\")\n ]),\n _: 1\n }),\n _createTextVNode(\" records for \"),\n _hoisted_22,\n _createTextVNode(\".\")\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_23, [\n _hoisted_24,\n _createElementVNode(\"div\", _hoisted_25, [\n _createVNode(_unref(Disclosure), {\n as: \"div\",\n class: \"pt-6\"\n }, {\n default: _withCtx(({ open }) => [\n _createVNode(_unref(DisclosureButton), {\n as: \"h3\",\n class: \"ignore-toc flex mt-0 w-full items-start justify-between text-left cursor-pointer text-gray-400\"\n }, {\n default: _withCtx(() => [\n _hoisted_26,\n _createElementVNode(\"span\", _hoisted_27, [\n _createVNode(_unref(ChevronDownIcon), {\n class: _normalizeClass([open ? '-rotate-180' : 'rotate-0', 'h-6 w-6 transform']),\n \"aria-hidden\": \"true\"\n }, null, 8, [\"class\"])\n ])\n ]),\n _: 2\n }, 1024),\n _createVNode(_unref(DisclosurePanel), { class: \"mt-2 pr-12\" }, {\n default: _withCtx(() => [\n _hoisted_28,\n _hoisted_29,\n _hoisted_30\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_31, [\n _createVNode(_unref(Disclosure), {\n as: \"div\",\n class: \"pt-6\"\n }, {\n default: _withCtx(({ open }) => [\n _createVNode(_unref(DisclosureButton), {\n as: \"h3\",\n class: \"ignore-toc flex mt-0 w-full items-start justify-between text-left cursor-pointer text-gray-400\"\n }, {\n default: _withCtx(() => [\n _hoisted_32,\n _createElementVNode(\"span\", _hoisted_33, [\n _createVNode(_unref(ChevronDownIcon), {\n class: _normalizeClass([open ? '-rotate-180' : 'rotate-0', 'h-6 w-6 transform']),\n \"aria-hidden\": \"true\"\n }, null, 8, [\"class\"])\n ])\n ]),\n _: 2\n }, 1024),\n _createVNode(_unref(DisclosurePanel), { class: \"mt-2 pr-12\" }, {\n default: _withCtx(() => [\n _hoisted_34,\n _hoisted_35,\n _hoisted_36\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ]),\n _createElementVNode(\"div\", _hoisted_37, [\n _createVNode(_unref(Disclosure), {\n as: \"div\",\n class: \"pt-6\"\n }, {\n default: _withCtx(({ open }) => [\n _createVNode(_unref(DisclosureButton), {\n as: \"h3\",\n class: \"ignore-toc flex mt-0 w-full items-start justify-between text-left cursor-pointer text-gray-400\"\n }, {\n default: _withCtx(() => [\n _hoisted_38,\n _createElementVNode(\"span\", _hoisted_39, [\n _createVNode(_unref(ChevronDownIcon), {\n class: _normalizeClass([open ? '-rotate-180' : 'rotate-0', 'h-6 w-6 transform']),\n \"aria-hidden\": \"true\"\n }, null, 8, [\"class\"])\n ])\n ]),\n _: 2\n }, 1024),\n _createVNode(_unref(DisclosurePanel), { class: \"mt-2 pr-12\" }, {\n default: _withCtx(() => [\n _hoisted_40,\n _hoisted_41,\n _hoisted_42\n ]),\n _: 1\n })\n ]),\n _: 1\n })\n ])\n ])\n ]),\n _: 1\n }, 8, [\"title\", \"description\", \"url\", \"breadcrumbs\", \"img1024x512\", \"img1200x630\", \"written\", \"updated\", \"author\", \"editor\"])\n ], 64))\n}\n}\n\n})","import script from \"./WhatIsADnsZone.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WhatIsADnsZone.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"strong\", { class: \"text-xl leading-8 block font-normal text-gray-500 mt-[1.3333333em]\" }, \"This week, Facebook suffered its worst outage since 2008 and was down for six hours. The economic cost of this outage will be large in both dollars and customer goodwill. Facebook will undoubtedly spend many person-hours on post-mortems and repairs to prevent this from happening again.\", -1)\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"p\", null, \"While this was not a DNS issue, it’s worth considering how the operators of websites and Internet services can protect themselves against unexpected events, such as interruptions and outages in the DNS.\", -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full rounded-lg\",\n src: \"/img/learning/what-is-a-good-ttl-for-dns/what-is-a-good-ttl-for-dns.png\",\n alt: \"Multiple clocks, analogous to DNS resolvers' expiring DNS caches\",\n title: \"Multiple clocks, analogous to DNS resolvers' expiring DNS caches\",\n width: \"1200\",\n height: \"600\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, \"Multiple clocks, analogous to DNS resolvers' expiring DNS caches\")\n], -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"A short TTL for agility\", -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Service operators sometimes view DNS caching as an enemy rather than a friend. When it becomes necessary to move a website or service to another set of machines or another hosting provider, the IP address will change. If this change is unplanned and must occur suddenly, then for the length of the TTL of the address record, clients of the website or service may experience an outage.\", -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"p\", null, \"One obvious solution to this potential problem is to set TTLs to a low value, like 15 seconds. This would guarantee that no matter what infrastructure changes happen in the future, clients will never experience any significant outage. The ability to make agile infrastructure changes in a timely manner is certainly important, and it is true that low TTLs can offer more agility.\", -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Resolution latency\", -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"p\", null, \"It may seem that all DNS TTLs should therefore be low, but there are some pitfalls involved. The first pitfall is resolution latency. If the DNS records for a service are constantly expiring from DNS caches around the world, then resolvers are continually having to re-fetch the records from the authoritative DNS servers. Latency in user experience, especially during web browsing, is a critical metric for many services.\", -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Realistically, the latency of an extra DNS resolution is usually not a huge problem. Applications resolve and fetch in parallel, and some DNS resolvers re-fetch DNS records as they approach cache expiration. But if latency is important, it should be remembered that lower TTLs will result in slightly higher average latency.\", -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Longer TTLs as defense against DNS outages\", -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The second pitfall is more insidious and more dangerous: how will a website or service be impacted by a DDoS attack, DNS-impacting network issue, or even a brief DNS outage lasting a few minutes? The DNS is the lifeblood of the Internet, but it can experience periods of unavailability caused by DDoS attacks on DNS providers or networks, as well as by outages caused by bad networking changes and bugs.\", -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"p\", null, \"This is where the choice of TTL arguably matters most. A TTL of 15 seconds means that suddenly moving the service to a new IP address can result in a worst-case outage of 15 seconds. However, it also means that if the authoritative DNS servers are unreachable for several seconds, many clients will experience an outage. If DNS was interrupted for longer than 15 seconds, then virtually all clients of the service would experience total outage!\", -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Of course, one can argue that this is unlikely to occur. Most of the time, the DNS is extremely reliable. As the owner of a website or service, you might go months or years of operation with 15 second TTLs and never notice problems. However, even a relatively brief disruption in the DNS will cause a service backed by 15 second TTL records to effectively be offline.\", -1)\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"p\", null, \"By choosing a longer TTL, the service is somewhat protected against this scenario. The ability to survive a short outage caused by Internet DDoS attack, network issue, or DNS provider outage means that the service will have fewer headaches and happier customers.\", -1)\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The DNS industry is hard at work trying to mitigate the impact of outages on short TTL records by serving stale records when the authoritative DNS servers cannot be reached. However, the major DNS resolvers have not yet implemented this \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc8767\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, \"proposed standard\"),\n /*#__PURE__*/_createTextVNode(\" and while it is very promising, it is not a total solution.\")\n], -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"TTLs and load balancing\", -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Another factor that must be considered when selecting TTLs is load balancing. Sometimes load balancing is performed by giving out different DNS answers to different clients in a near-random fashion. Higher DNS TTLs can interfere with this. If your service relies on this type of load balancing, you may not have much flexibility in increasing your TTL values, but some increase could probably still be made.\", -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"A different TTL per DNS record type\", -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Final thoughts\", -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Be cautious when using short TTLs. Short TTLs may work perfectly well under normal conditions, but they make a website or service unable to survive even the briefest of interruptions in the DNS. Instead, consider a longer TTL. Ideally, the longest TTL that the service can realistically tolerate.\", -1)\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"p\", null, \"At the time of writing, the TTL on the NS records for google.com is two days, the TTL on the SPF record set for google.com is one hour, and the TTL on the A record for www.google.com is five minutes. These values provide a reasonable balance between agility and outage survivability.\", -1)\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"p\", null, \"In typical situations, the following table gives a reasonable rule of thumb for setting TTL values.\", -1)\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"table\", null, [\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"th\", null, \"Record type\"),\n /*#__PURE__*/_createElementVNode(\"th\", null, \"Conservative TTL\"),\n /*#__PURE__*/_createElementVNode(\"th\", null, \"Recommended TTL\"),\n /*#__PURE__*/_createElementVNode(\"th\", null, \"Aggressive TTL\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"A / AAAA\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"1 hour\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"5 minutes\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"60 seconds\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"NS\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \">2 days\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"2 days\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"12 hours\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"MX\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"1 day\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"4 hours\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"1 hour\")\n ]),\n /*#__PURE__*/_createElementVNode(\"tr\", null, [\n /*#__PURE__*/_createElementVNode(\"td\", null, \"TXT (for SPF)\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"1 day\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"1 hour\"),\n /*#__PURE__*/_createElementVNode(\"td\", null, \"5 minutes\")\n ])\n], -1)\n\nimport BlogPost from '@/components/layout/BlogPost.vue';\n\nimport { jeff, ruurtjan } from '@/common/authors';\nimport { BlogMeta } from '@/common/blogMeta';\nimport { learningBreadcrumb } from '@/model/Breadcrumb';\n\nexport const meta: BlogMeta = {\n tag: 'DNS',\n url: '/learning/what-is-a-good-ttl-for-dns/',\n breadcrumbs: [learningBreadcrumb],\n title: 'What is a good TTL for DNS?',\n description: 'What is a sensible TTL for DNS records, and how should you trade off between agility, latency and other factors? Here\\'s how to select appropriate TTL values.',\n overviewDescription: 'This article will examine some of the pitfalls that come with low TTLs and will help you select appropriate TTL values.',\n overviewImage: 'img/learning/what-is-a-good-ttl-for-dns/what-is-a-good-ttl-for-dns-small.png',\n overviewImageAlt: 'A pile of clocks representing DNS TTL',\n author: jeff,\n editor: ruurtjan,\n img1024x512: 'https://www.nslookup.io/img/learning/what-is-a-good-ttl-for-dns/what-is-a-good-ttl-for-dns-social.png',\n img1200x630: 'https://www.nslookup.io/img/learning/what-is-a-good-ttl-for-dns/what-is-a-good-ttl-for-dns-social.png',\n written: new Date('2022-10-07T02:14:55.260Z'),\n updated: new Date('2023-04-18T09:55:21.579Z'),\n};\n\nconst __default__ = {\n meta,\n};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'WhatIsAGoodTtlForDns',\n setup(__props) {\n\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createBlock(BlogPost, {\n title: meta.title,\n description: meta.description,\n url: `https://www.nslookup.io${meta.url}`,\n breadcrumbs: meta.breadcrumbs,\n img1024x512: meta.img1024x512,\n img1200x630: meta.img1200x630,\n written: meta.written,\n updated: meta.updated,\n author: meta.author,\n editor: meta.editor\n }, {\n default: _withCtx(() => [\n _hoisted_1,\n _hoisted_2,\n _hoisted_3,\n _hoisted_4,\n _hoisted_5,\n _hoisted_6,\n _hoisted_7,\n _hoisted_8,\n _hoisted_9,\n _hoisted_10,\n _hoisted_11,\n _hoisted_12,\n _hoisted_13,\n _hoisted_14,\n _hoisted_15,\n _hoisted_16,\n _hoisted_17,\n _hoisted_18,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"The last point to consider is TTLs on different \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"types of DNS data\")\n ]),\n _: 1\n }),\n _createTextVNode(\" in a zone. For records that do not change often, such as \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/soa/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"SOA\")\n ]),\n _: 1\n }),\n _createTextVNode(\", NS, SPF, and similar, longer TTLs are always a good idea.\")\n ]),\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"A common recommendation for DNS records that are generally static in nature is a TTL of an hour or even longer, up to a few days. This is especially true for NS records. \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/ns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"NS records\")\n ]),\n _: 1\n }),\n _createTextVNode(\" are critical in the DNS, so they should usually be relatively static and have somewhat longer TTLs than other records in the DNS.\")\n ]),\n _hoisted_19,\n _hoisted_20,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"If agility is absolutely needed on some DNS records, consider using a TTL of perhaps 5 minutes instead of a few seconds. For records that are unlikely to need urgent changes, use a TTL of an hour or even longer. This may seem like conservative advice, but consider how Google manages \"),\n _createVNode(_component_router_link, {\n to: \"/domains/google.com/dns-records/#authoritative\",\n title: \"Google's DNS records\",\n alt: \"Google's DNS records\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(\"their DNS presence\")\n ]),\n _: 1\n }),\n _createTextVNode(\".\")\n ]),\n _hoisted_21,\n _hoisted_22,\n _hoisted_23\n ]),\n _: 1\n }, 8, [\"title\", \"description\", \"url\", \"breadcrumbs\", \"img1024x512\", \"img1200x630\", \"written\", \"updated\", \"author\", \"editor\"]))\n}\n}\n\n})","import script from \"./WhatIsAGoodTtlForDns.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WhatIsAGoodTtlForDns.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\nimport _imports_0 from '../../../public/img/learning/what-is-dns/what-is-dns-query.jpg'\n\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"strong\", { class: \"text-xl leading-8 block font-normal text-gray-500 mt-[1.3333333em]\" }, \"The Domain Name System (DNS) is a critical piece of the Internet. Its primary function is to translate human-readable names into machine-friendly addresses. But the DNS is also a global directory for other important services on the Internet.\", -1)\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full rounded-lg\",\n src: \"/img/learning/what-is-dns/what-is-dns.jpg\",\n alt: \"The DNS helps humans navigate the digital infrastructure\",\n title: \"The DNS helps humans navigate the digital infrastructure\",\n width: \"1200\",\n height: \"600\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, [\n /*#__PURE__*/_createTextVNode(\"The DNS helps humans navigate the digital infrastructure. By NsLookup.io. Licensed under \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://creativecommons.org/licenses/by/4.0/\",\n title: \"Creative Commons By 4.0 licence\",\n rel: \"nofollow\"\n }, \"CC By 4.0\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"All devices connected to the Internet, from the smallest phone to the largest server, have an Internet Protocol (IP) address. \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"IP addresses are used by computers and other devices on the Internet to communicate with each other.\")\n], -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"p\", null, \"When you visit a website on your phone, it sends a message to the IP address of a web server, and the web server sends the web page back to your phone's IP address.\", -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"p\", null, \"IP addresses are strings of numbers. They are difficult for humans to remember and type. Imagine having to type 2607:f8b0:400a:080a::2004 instead of www.google.com! The DNS allows us to use friendly names for websites instead of IP addresses.\", -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Converting friendly, human-readable names like www.google.com into IP addresses is the primary job of the DNS.\"),\n /*#__PURE__*/_createTextVNode(\" But the DNS does a lot more behind the scenes to keep the Internet running!\")\n], -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"How does the DNS work?\", -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The DNS is like a telephone directory of IP addresses for all of the names on the Internet. Any time a device needs to convert a DNS name like \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"wikipedia.org\"),\n /*#__PURE__*/_createTextVNode(\" or \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"bbc.co.uk\"),\n /*#__PURE__*/_createTextVNode(\" into an IP address, the DNS supplies the answer.\")\n], -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"A zone like \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"wikipedia.org\"),\n /*#__PURE__*/_createTextVNode(\" will hold different DNS names that are part of Wikipedia's domain, such as \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"en.wikipedia.org\"),\n /*#__PURE__*/_createTextVNode(\" and \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"fr.wikipedia.org\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"full-width\",\n src: \"/img/learning/what-is-dns/what-is-dns-hierarchy.jpg\",\n alt: \"The DNS is a tree of names\",\n title: \"The DNS is a tree of names\"\n}, null, -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"When a user types a DNS name like \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"www.google.com\"),\n /*#__PURE__*/_createTextVNode(\" into their browser, software on their computer sends a \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"DNS query\"),\n /*#__PURE__*/_createTextVNode(\" to convert the name into an IP address. This query usually goes to a recursive DNS server operated by the user's Internet Service Provider (ISP).\")\n], -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The recursive DNS server sends additional DNS queries to follow the chain of delegations from the DNS root down through various DNS zones until it discovers the IP address corresponding to the DNS name the user typed into the browser.\", -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The IP address is sent back to the user's computer in a DNS response message, and the browser uses the IP address to connect to the web server. The process is called \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"recursion\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"How is domain name ownership managed?\", -1)\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Many registrars will provide DNS zone hosting as part of their services, or the domain owner can host and operate the DNS zone themselves.\", -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Once a domain name is purchased from a registrar, the registrar will insert the domain in the registry of DNS names for the appropriate Top Level Domain (TLD).\", -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The entire process of operating DNS registries and TLDs is overseen by \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://www.icann.org/\",\n rel: \"noopener noreferrer\"\n }, \"ICANN\"),\n /*#__PURE__*/_createTextVNode(\" (Internet Corporation for Assigned Names and Numbers). ICANN ensures that all registrars have good security, provide good customer service, and prevent abuse of the DNS.\")\n], -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"What are the steps in a DNS lookup?\", -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"A lot of work happens under the covers when a DNS name is resolved. Let's consider what happens when a user tries to open a webpage such as \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"www.example.org\"),\n /*#__PURE__*/_createTextVNode(\" from their laptop:\")\n], -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"ol\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"The user's laptop sends a DNS query for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"www.example.org\"),\n /*#__PURE__*/_createTextVNode(\" to its recursive DNS server.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"The recursive DNS server sends a query for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"www.example.org\"),\n /*#__PURE__*/_createTextVNode(\" to one of the Internet root servers.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"The root server returns a delegation for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"org\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"The recursive DNS server sends a query for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"www.example.org\"),\n /*#__PURE__*/_createTextVNode(\" to an authoritative server for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"org\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"The \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"org\"),\n /*#__PURE__*/_createTextVNode(\" server returns a delegation for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"The recursive DNS server sends a query for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"www.example.org\"),\n /*#__PURE__*/_createTextVNode(\" to an authoritative server for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"The \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" server returns the answer: address records for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"www.example.org\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"The recursive DNS server sends the answer back to the user's laptop.\")\n], -1)\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"full-width\",\n src: _imports_0,\n alt: \"An example of recursion\",\n title: \"An example of recursion\"\n}, null, -1)\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Not all DNS lookups will involve so many steps. The recursive DNS server will often have previously resolved the name. In this case, it will have a copy of the answer saved in its \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"cache\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"p\", null, \"There are two different types of DNS servers on the Internet: authoritative DNS servers and recursive DNS servers.\", -1)\nconst _hoisted_24 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Authoritative DNS servers generally answer DNS queries only for the specific zones they are authoritative for, while a recursive DNS server can answer any DNS query for any zone. Recursive DNS servers use a process called \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"recursion\"),\n /*#__PURE__*/_createTextVNode(\" to retrieve answers from authoritative DNS servers.\")\n], -1)\nconst _hoisted_25 = /*#__PURE__*/_createElementVNode(\"p\", null, \"A recursive DNS server uses recursion to answer a DNS query. A recursive DNS server starts at the DNS root zone and works its way down through delegations until it reaches an authoritative DNS server that hosts the DNS zone containing the answer.\", -1)\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"p\", null, \"If the recursive DNS server already has the answer in its cache, it will respond directly and skip recursion.\", -1)\nconst _hoisted_27 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"What is DNS caching?\", -1)\nconst _hoisted_28 = /*#__PURE__*/_createElementVNode(\"p\", null, \"In the example above, the recursive DNS server had to send the user's query three times. The recursive DNS server must process each response. This is a lot of work!\", -1)\nconst _hoisted_29 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The DNS was designed to reduce the work and time required for recursion through \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"caching\"),\n /*#__PURE__*/_createTextVNode(\". Caching is the process of saving a copy of a piece of data for a period of time to make subsequent lookups faster.\")\n], -1)\nconst _hoisted_30 = /*#__PURE__*/_createElementVNode(\"p\", null, \"When a recursive DNS server receives a lookup request that it resolved recently, within the DNS record's Time-To-Live (TTL), it will return the answer directly from its cache.\", -1)\nconst _hoisted_31 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Caching serves three very important purposes in the DNS:\", -1)\nconst _hoisted_32 = /*#__PURE__*/_createElementVNode(\"ol\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, \"It reduces DNS query latency.\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"It reduces the number of queries each recursive DNS server sends, reducing the workload on recursive DNS servers.\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"It also reduces the load on each of the authoritative servers.\")\n], -1)\nconst _hoisted_33 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Caching is critical in the DNS to make lookups faster and reduce the overall number of queries. Caching is performed in several places in the DNS:\", -1)\nconst _hoisted_34 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Recursive DNS servers cache for all of their customers and clients.\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Devices such as laptops and phones cache for all the applications on that device.\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Some applications, particularly web browsers, have their own dedicated caches.\")\n], -1)\nconst _hoisted_35 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"When are cached records purged?\", -1)\nconst _hoisted_36 = /*#__PURE__*/_createElementVNode(\"p\", null, \"DNS caches remove records when their TTLs expire. Some DNS caches ignore this TTL when domain owners set it to a very low or high value. It may do so to protect itself from querying those records too often or running out of memory.\", -1)\nconst _hoisted_37 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"What else can the DNS do?\", -1)\nconst _hoisted_38 = /*#__PURE__*/_createElementVNode(\"p\", null, \"So far, we've talked about how the DNS converts human-readable names into IP addresses. But the DNS does much more than this, including:\", -1)\n\nimport BlogPost from '@/components/layout/BlogPost.vue';\n\nimport { jeff, ruurtjan } from '@/common/authors';\nimport { learningBreadcrumb } from '@/model/Breadcrumb';\nimport { BlogMeta } from '@/common/blogMeta';\nimport Callout from '@/components/layout/CalloutComponent.vue';\n\nconst meta: BlogMeta = {\n tag: 'DNS concepts',\n url: '/learning/what-is-dns/',\n breadcrumbs: [learningBreadcrumb],\n title: 'What is the DNS?',\n description: 'The Domain Name System (DNS) is a critical piece of the Internet. Its primary function is to translate human-readable names into machine-friendly addresses.',\n overviewImage: '/img/learning/what-is-dns/what-is-dns-small.jpg',\n overviewImageAlt: 'What is the DNS?',\n overviewDescription: 'The Domain Name System (DNS) is a critical piece of the Internet. Its primary function is to translate human-readable names into machine-friendly addresses.',\n author: jeff,\n editor: ruurtjan,\n img1024x512: 'https://www.nslookup.io/img/learning/what-is-dns/what-is-dns-social.jpg',\n img1200x630: 'https://www.nslookup.io/img/learning/what-is-dns/what-is-dns-social.jpg',\n written: new Date('2023-01-23T10:01:06.042Z'),\n updated: new Date('2023-05-22T07:37:36.488Z'),\n};\n\nconst __default__ = {\n meta,\n};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'WhatIsDns',\n setup(__props) {\n\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"ImageObject\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"email\\\": \\\"mailto:ruurtjan@nslookup.io\\\", \\\"image\\\": \\\"https://www.nslookup.io/img/ruurtjan-lg.jpg\\\", \\\"jobTitle\\\": \\\"CEO\\\", \\\"name\\\": \\\"Ruurtjan Pul\\\", \\\"url\\\": \\\"https://www.nslookup.io/about/ruurtjan-pul/\\\" }, \\\"copyrightHolder\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"https://www.nslookup.io/\\\", \\\"email\\\": \\\"hello@nslookup.io\\\" }, \\\"copyrightYear\\\": 2023, \\\"contentUrl\\\": \\\"https://www.nslookup.io/img/learning/what-is-dns/what-is-dns.jpg\\\", \\\"license\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\", \\\"acquireLicensePage\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\" } \")\n ]),\n _: 1\n }))\n ])),\n _createVNode(BlogPost, {\n title: meta.title,\n description: meta.description,\n url: `https://www.nslookup.io${meta.url}`,\n breadcrumbs: meta.breadcrumbs,\n img1024x512: meta.img1024x512,\n img1200x630: meta.img1200x630,\n written: meta.written,\n updated: meta.updated,\n author: meta.author,\n editor: meta.editor\n }, {\n default: _withCtx(() => [\n _hoisted_1,\n _hoisted_2,\n _hoisted_3,\n _hoisted_4,\n _hoisted_5,\n _hoisted_6,\n _hoisted_7,\n _hoisted_8,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"The DNS is a massive global database made up of millions of \"),\n _createVNode(_component_router_link, { to: \"/learning/what-is-a-dns-zone/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"DNS zones\")\n ]),\n _: 1\n }),\n _createTextVNode(\". Each DNS zone holds a small portion of the DNS tree. DNS zones are linked together using \"),\n _createVNode(_component_router_link, { to: \"/learning/zone-delegation/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"delegations\")\n ]),\n _: 1\n }),\n _createTextVNode(\" to form a single database of names for the entire Internet.\")\n ]),\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"At the top of the tree is a special zone called the \"),\n _createVNode(_component_router_link, {\n to: \"/learning/what-is-the-dns-root-zone/\",\n title: \"What is the DNS root zone?\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(\"DNS root zone\")\n ]),\n _: 1\n }),\n _createTextVNode(\". Directly below the root zone are the Top Level Domains (TLDs) like org, com, net, and uk.\")\n ]),\n _hoisted_9,\n _hoisted_10,\n _hoisted_11,\n _hoisted_12,\n _hoisted_13,\n _hoisted_14,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"Anyone can purchase a DNS domain name from a \"),\n _createVNode(_component_router_link, { to: \"/learning/how-does-domain-name-registration-work/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"DNS registrar\")\n ]),\n _: 1\n }),\n _createTextVNode(\". A \"),\n _createVNode(_component_router_link, { to: \"/learning/what-is-a-dns-zone/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"DNS zone\")\n ]),\n _: 1\n }),\n _createTextVNode(\" will also need to be created and hosted somewhere on the Internet.\")\n ]),\n _hoisted_15,\n _hoisted_16,\n _hoisted_17,\n _hoisted_18,\n _hoisted_19,\n _hoisted_20,\n _hoisted_21,\n _hoisted_22,\n _createVNode(Callout, {\n icon: \"info\",\n heading: \"h3\",\n title: \"Authoritative vs recursive DNS servers\"\n }, {\n default: _withCtx(() => [\n _hoisted_23,\n _hoisted_24,\n _hoisted_25,\n _hoisted_26\n ]),\n _: 1\n }),\n _hoisted_27,\n _hoisted_28,\n _hoisted_29,\n _hoisted_30,\n _hoisted_31,\n _hoisted_32,\n _createVNode(Callout, {\n icon: \"info\",\n heading: \"h3\",\n title: \"Where does DNS caching take place?\"\n }, {\n default: _withCtx(() => [\n _hoisted_33,\n _hoisted_34\n ]),\n _: 1\n }),\n _hoisted_35,\n _hoisted_36,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"To speed up \"),\n _createVNode(_component_router_link, { to: \"/dns-checker/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"DNS propagation\")\n ]),\n _: 1\n }),\n _createTextVNode(\", you can also clear the DNS cache on your device and browser.\")\n ]),\n _hoisted_37,\n _hoisted_38,\n _createElementVNode(\"ul\", null, [\n _createElementVNode(\"li\", null, [\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/ns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"NS records\")\n ]),\n _: 1\n }),\n _createTextVNode(\" form delegations, which allow the DNS to maintain itself as a massive, global hierarchical database.\")\n ]),\n _createElementVNode(\"li\", null, [\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/mx/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"MX records\")\n ]),\n _: 1\n }),\n _createTextVNode(\" allow email to be delivered for each domain.\")\n ]),\n _createElementVNode(\"li\", null, [\n _createVNode(_component_router_link, { to: \"/learning/spf-a-practical-guide/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"SPF\")\n ]),\n _: 1\n }),\n _createTextVNode(\", \"),\n _createVNode(_component_router_link, { to: \"/learning/dkim-a-practical-guide/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"DKIM\")\n ]),\n _: 1\n }),\n _createTextVNode(\", and \"),\n _createVNode(_component_router_link, { to: \"/learning/dmarc-a-practical-guide/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"DMARC\")\n ]),\n _: 1\n }),\n _createTextVNode(\" records prevent spam and provide security for email.\")\n ]),\n _createElementVNode(\"li\", null, [\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/cname/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"CNAME records\")\n ]),\n _: 1\n }),\n _createTextVNode(\" allow aliases in the DNS, so one set of IP addresses can be reused for many names without duplication.\")\n ]),\n _createElementVNode(\"li\", null, [\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/srv/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"SRV records\")\n ]),\n _: 1\n }),\n _createTextVNode(\" are used by some applications load balance traffic across servers.\")\n ]),\n _createElementVNode(\"li\", null, [\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/ptr/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"PTR records\")\n ]),\n _: 1\n }),\n _createTextVNode(\" allow IP addresses to be converted back into domain names.\")\n ]),\n _createElementVNode(\"li\", null, [\n _createTextVNode(\"The DNS is used internally by countless applications and services, such as \"),\n _createVNode(_component_router_link, { to: \"/learning/the-life-of-a-dns-query-in-kubernetes/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"Kubernetes\")\n ]),\n _: 1\n }),\n _createTextVNode(\".\")\n ])\n ])\n ]),\n _: 1\n }, 8, [\"title\", \"description\", \"url\", \"breadcrumbs\", \"img1024x512\", \"img1200x630\", \"written\", \"updated\", \"author\", \"editor\"])\n ], 64))\n}\n}\n\n})","import script from \"./WhatIsDns.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WhatIsDns.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode } from \"vue\"\nimport _imports_0 from '../../../public/img/learning/what-is-the-dns-root-zone/dns-tree.jpg'\n\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"strong\", { class: \"text-xl leading-8 block font-normal text-gray-500 mt-[1.3333333em]\" }, \"The DNS is a massive tree of names containing all the names on the Internet. But it has a single starting point: the DNS root zone. The DNS root zone is the parent of all the DNS TLDs. The DNS root zone gives the DNS a single point to begin. You can find any DNS name in the world starting from the DNS root zone!\", -1)\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full rounded-lg\",\n src: \"/img/learning/what-is-the-dns-root-zone/the-internet-relies-on-the-dns-root-zone.jpg\",\n alt: \"The entire internet rests on the foundation of the DNS root zone\",\n title: \"The entire internet rests on the foundation of the DNS root zone\",\n width: \"1200\",\n height: \"600\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, [\n /*#__PURE__*/_createTextVNode(\"The entire internet rests on the foundation of the DNS root zone. By NsLookup.io. Licensed under \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://creativecommons.org/licenses/by/4.0/\",\n title: \"Creative Commons By 4.0 licence\",\n rel: \"nofollow\"\n }, \"CC By 4.0\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"The DNS as a tree of names\", -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"It's helpful to dissect a few DNS names to understand how the DNS forms a tree and where the \\\"root\\\" of the tree lies. Consider a few popular DNS names: \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"google.com\"),\n /*#__PURE__*/_createTextVNode(\", \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"cnn.com\"),\n /*#__PURE__*/_createTextVNode(\", and \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"bbc.co.uk\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The right-most label in all DNS names is always a Top Level Domain (TLD) such as \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \".com\"),\n /*#__PURE__*/_createTextVNode(\" or \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \".uk\"),\n /*#__PURE__*/_createTextVNode(\". Below the TLDs are the next labels in domain names like \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"google.com\"),\n /*#__PURE__*/_createTextVNode(\". So below \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \".com\"),\n /*#__PURE__*/_createTextVNode(\" we find \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"google.com\"),\n /*#__PURE__*/_createTextVNode(\", and below \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \".uk\"),\n /*#__PURE__*/_createTextVNode(\" we find \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"co.uk\"),\n /*#__PURE__*/_createTextVNode(\". Each time we move downwards in the DNS tree, another label is added to the left side of the DNS name.\")\n], -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"We can put these relationships together in a picture that looks like a tree with a single node at the top and the branches (or roots, if you prefer) extending downward. We can see that \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \".com\"),\n /*#__PURE__*/_createTextVNode(\" is the parent of \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"google.com\"),\n /*#__PURE__*/_createTextVNode(\" and \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"co.uk\"),\n /*#__PURE__*/_createTextVNode(\" is the parent of \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"bbc.co.uk\"),\n /*#__PURE__*/_createTextVNode(\", and so on. All DNS names fall somewhere in this tree.\")\n], -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"But what is the parent of \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \".com\"),\n /*#__PURE__*/_createTextVNode(\" and \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \".uk\"),\n /*#__PURE__*/_createTextVNode(\" and all other TLDs? The answer is the DNS root zone. The DNS root zone is the parent of all the DNS TLDs. It is the starting point for the entire DNS.\")\n], -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"full-width\",\n src: _imports_0,\n alt: \"The DNS is a tree branching downwards from the root zone\",\n title: \"The DNS is a tree branching downwards from the root zone\"\n}, null, -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"The DNS is a global hierarchical database\", -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The DNS was envisioned as a single database for all the names on what would become the Internet. But because many different organizations would own the names in the DNS, it was designed to be hierarchical. The DNS root zone gives this massive database of names a single starting point. Hence the name \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"root zone\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"strong\", null, \"www.google.com\", -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The beauty of the DNS is that if you know how to contact a single server for the DNS root zone, you can resolve any name in the entire DNS!\", -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"strong\", null, \"zone\", -1)\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"A DNS zone is a portion of the DNS namespace owned and managed by a specific person, corporation, or other entity. Each label in a DNS name, the string of characters between periods, may represent a new DNS zone. Other labels may represent names within a zone. As an example, let's consider all of the labels involved in the DNS name \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"www.google.com\"),\n /*#__PURE__*/_createTextVNode(\":\")\n], -1)\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, \"At the top is the root zone. The root zone is the parent of all of the TLDs. Technically the root zone's name is the empty string.\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"Next is the \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \".com\"),\n /*#__PURE__*/_createTextVNode(\" zone. This is one of the Internet TLDs. All names in the DNS lie below a TLD.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"Below \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \".com\"),\n /*#__PURE__*/_createTextVNode(\" we have \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"google.com\"),\n /*#__PURE__*/_createTextVNode(\". This is the DNS zone owned by Google.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"Lastly, \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"www.google.com\"),\n /*#__PURE__*/_createTextVNode(\" is a DNS name within the \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"google.com\"),\n /*#__PURE__*/_createTextVNode(\" zone managed by Google.\")\n ])\n], -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Who oversees the root zone?\", -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The DNS is the lifeblood of the Internet: without the DNS, virtually every online resource would be unavailable. And the DNS root zone is the most critical part of the DNS since resolving any DNS name begins at the root zone. So who owns and operates the DNS root zone?\", -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://www.icann.org/\",\n rel: \"noopener noreferrer\"\n}, \"ICANN\", -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The United States Department of Commerce directly oversaw ICANN for many years. In 2017, ICANN transitioned to a global multi-stakeholder model, but even today the US government has a significant amount of power over the root zone.\", -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"How many servers host the root zone?\", -1)\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"strong\", null, \"dig\", -1)\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"dig +short ns .\\na.root-servers.net.\\nb.root-servers.net.\\nc.root-servers.net.\\nd.root-servers.net.\\ne.root-servers.net.\\nf.root-servers.net.\\ng.root-servers.net.\\nh.root-servers.net.\\ni.root-servers.net.\\nj.root-servers.net.\\nk.root-servers.net.\\nl.root-servers.net.\\nm.root-servers.net.\", -1)\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"If you don't have dig, you can view the same information using the nslookup command line tool: \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"nslookup -q=ns .\")\n], -1)\nconst _hoisted_24 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"From this list, there are 13 NS records for the DNS root. They have very regular names: \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"a\"),\n /*#__PURE__*/_createTextVNode(\" through \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"m\"),\n /*#__PURE__*/_createTextVNode(\", followed by \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"root-servers.net\"),\n /*#__PURE__*/_createTextVNode(\". Each of these NS records represents a DNS root server. But behind each NS name is a cluster of servers tied together using Anycast routing. Anycast allows many servers to act as one. When a DNS resolver sends a query to one of the root server addresses, the query is automatically routed to one of these many individual servers.\")\n], -1)\nconst _hoisted_25 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"So while there are 13 DNS root server names, there are currently over 1600 individual root server instances worldwide, according to \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://root-servers.org/\",\n rel: \"noopener noreferrer\"\n }, \"root-servers.org\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"strong\", null, \"a.root-servers.net\", -1)\nconst _hoisted_27 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The answer is that all recursive DNS servers come pre-provisioned with a \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"root hints file\"),\n /*#__PURE__*/_createTextVNode(\". For historical reasons this file is often called \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"named.root\"),\n /*#__PURE__*/_createTextVNode(\". This file contains the IP addresses of the DNS root servers. The current official version of this file is maintained by \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://www.internic.net/domain/named.root\",\n rel: \"noopener noreferrer\"\n }, \"Internic\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_28 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"It is possible that these IP addresses may change, although that does not happen often. DNS recursive resolvers try \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"all\"),\n /*#__PURE__*/_createTextVNode(\" of the root server IP addresses from the root hints file until one responds. So even if one or more of the IP addresses changes, they will still be able to find the DNS root zone.\")\n], -1)\nconst _hoisted_29 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Who operates each DNS root server?\", -1)\nconst _hoisted_30 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The root zone itself is overseen by ICANN. The operation of the 13 individual root servers is contracted out to various organizations:\", -1)\nconst _hoisted_31 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"a.root-servers.net: \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Verisign, Inc.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"b.root-servers.net: \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"University of Southern California, Information Sciences Institute\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"c.root-servers.net: \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Cogent Communications\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"d.root-servers.net: \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"University of Maryland\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"e.root-servers.net: \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"NASA (Ames Research Center)\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"f.root-servers.net: \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Internet Systems Consortium, Inc.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"g.root-servers.net: \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"US Department of Defense (NIC)\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"h.root-servers.net: \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"US Army (Research Lab)\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"i.root-servers.net: \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Netnod\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"j.root-servers.net: \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Verisign, Inc.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"k.root-servers.net: \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"RIPE NCC\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"l.root-servers.net: \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"ICANN\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createTextVNode(\"m.root-servers.net: \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"WIDE Project\")\n ])\n], -1)\nconst _hoisted_32 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"You can find this list, along with the Anycast IP addresses of each root server at the \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://www.iana.org/domains/root/servers\",\n rel: \"noopener noreferrer\"\n }, \"Internet Assigned Numbers Authority (IANA)\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_33 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Many of the DNS root servers are operated by American organizations and some are operated by the United States military. This dependence on the United States is a common criticism of the DNS, and the operation of the Internet in general.\", -1)\nconst _hoisted_34 = /*#__PURE__*/_createElementVNode(\"p\", null, \"As we have seen, there are 13 NS records for the DNS root zone, and hence officially, there are 13 root servers. With many more servers operating behind the scenes through the magic of Anycast routing. But why the \\\"unlucky\\\" number thirteen?\", -1)\nconst _hoisted_35 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Another interesting side note is that the DNS names of the root servers were selected to be so similar to one another so that DNS name compression can more efficiently pack the NS records into DNS messages.\", -1)\nconst _hoisted_36 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"How many TLDs are in the root zone?\", -1)\nconst _hoisted_37 = /*#__PURE__*/_createElementVNode(\"p\", null, \"When the DNS root zone was first created, there were only a handful of Top Level Domains (TLDs) such as com, org, and net. Over time the number of TLDs has exploded. Today, there are currently 1,480 TLDs!\", -1)\nconst _hoisted_38 = /*#__PURE__*/_createElementVNode(\"p\", null, \"There are different types of TLDs, including:\", -1)\nconst _hoisted_39 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Generic TLDs (gTLDs)\"),\n /*#__PURE__*/_createTextVNode(\": This group includes the popular .com, .org, .net, and .info. But also many more. These TLDs are open to anyone to register in without restriction. Most TLDs, currently over 1200, fall into this group.\")\n], -1)\nconst _hoisted_40 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Sponsored TLDs (sTLDs)\"),\n /*#__PURE__*/_createTextVNode(\": These TLDs are supervised by private organizations. The organizing body has the final say over whether a new name can be registered in their sTLD. Some popular sTLDs include .edu, .gov, and .travel.\")\n], -1)\nconst _hoisted_41 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Country Code TLDs (ccTLDs)\"),\n /*#__PURE__*/_createTextVNode(\": These TLDs were each created for a specific country, such as .ca for Canada and .uk for the United Kingdom. But many ccTLDs are used to create catchy domain names without regard for domain's actual country. For example, YouTube uses .be (Belgium) to create video links at youtu.be, and Microsoft often uses .ms (Montserrat). This practice is sometimes called \\\"name hacking\\\".\")\n], -1)\nconst _hoisted_42 = /*#__PURE__*/_createElementVNode(\"strong\", null, \"Infrastructure TLDs\", -1)\nconst _hoisted_43 = /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Test TLDs\"),\n /*#__PURE__*/_createTextVNode(\": These are TLDs reserved for testing by \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc2606\",\n rel: \"noopener noreferrer\"\n }, \"RFC 2606\"),\n /*#__PURE__*/_createTextVNode(\". It includes .test, .example, .invalid, and .localhost.\")\n], -1)\nconst _hoisted_44 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"IANA publishes the \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://data.iana.org/TLD/tlds-alpha-by-domain.txt\",\n rel: \"noopener noreferrer\"\n }, \"official list of TLDs\"),\n /*#__PURE__*/_createTextVNode(\", and the \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://www.internic.net/domain/root.zone\",\n rel: \"noopener noreferrer\"\n }, \"DNS root zone file\"),\n /*#__PURE__*/_createTextVNode(\" is published for everyone to see by Internic.\")\n], -1)\nconst _hoisted_45 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Are there other DNS root zones?\", -1)\nconst _hoisted_46 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Many attempts have been made to create \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"alternative root zones\"),\n /*#__PURE__*/_createTextVNode(\", dating back to at least 1995. Alternative roots, or \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"altroots\"),\n /*#__PURE__*/_createTextVNode(\", have been created either for profit or for ideological reasons. Often to protest the way the Internet root zone has been centrally governed. China and Russia have been working on alternative roots to restrict and control the flow of information to their citizens.\")\n], -1)\nconst _hoisted_47 = /*#__PURE__*/_createElementVNode(\"p\", null, \"These altroot projects have had limited success, and many have become defunct. This is largely because it is difficult for non-technical users to easily access them. There have been a number projects involving browser extensions to try to make altroots easier to use, but they still enjoy limited success.\", -1)\nconst _hoisted_48 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"A thorough list of past and present alternative roots can be found at \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://icannwiki.org/Alternative_Roots\",\n rel: \"noopener noreferrer\"\n }, \"icannwiki.org\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_49 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Decentralizing the DNS\", -1)\nconst _hoisted_50 = /*#__PURE__*/_createElementVNode(\"p\", null, \"A common criticism of the DNS is that while it is globally distributed, it is based on a centralized model of trust. And additionally that the United States ultimately controls, or at least strongly influences, too much of the operation of the DNS.\", -1)\nconst _hoisted_51 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The most recent attempt to create an alternative DNS root, and in fact an alternative to the current DNS entirely, is based on blockchain. \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://www.namecoin.org/\",\n rel: \"noopener noreferrer\"\n }, \"Namecoin\"),\n /*#__PURE__*/_createTextVNode(\" is a prominent example.\")\n], -1)\nconst _hoisted_52 = /*#__PURE__*/_createElementVNode(\"p\", null, \"An alternative to DNS based on blockchain could solve many problems with the DNS:\", -1)\nconst _hoisted_53 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"DDoS\"),\n /*#__PURE__*/_createTextVNode(\": The DNS is vulnerable to large-scale Distributed Denial of Service (DDoS) attacks that have significantly impacted end users by effectively knocking many websites temporarily off the Internet.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"DNS tunneling\"),\n /*#__PURE__*/_createTextVNode(\": The DNS can be abused to tunnel information through secure firewalls and is often used to coordinate botnets and other malware.\")\n ]),\n /*#__PURE__*/_createElementVNode(\"li\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Centralization\"),\n /*#__PURE__*/_createTextVNode(\": Blockchain is decentralized by nature, which would eliminate the current centralized model of trust.\")\n ])\n], -1)\nconst _hoisted_54 = /*#__PURE__*/_createElementVNode(\"p\", null, \"While a DNS based on blockchain could result in a more democratic and less centralized version of the DNS, it is still in its infancy. The DNS, for all its flaws, continues to run smoothly, and efforts are continually being made to ensure that it is governed in a way that is fair and respectful of the needs of everyone. But who knows what the future of DNS, and of the Internet itself, might be!\", -1)\n\nimport BlogPost from '@/components/layout/BlogPost.vue';\n\nimport { jeff, ruurtjan } from '@/common/authors';\nimport { BlogMeta } from '@/common/blogMeta';\nimport Callout from '@/components/layout/CalloutComponent.vue';\nimport { learningBreadcrumb } from '@/model/Breadcrumb';\n\nconst meta: BlogMeta = {\n tag: 'DNS concepts',\n url: '/learning/what-is-the-dns-root-zone/',\n breadcrumbs: [learningBreadcrumb],\n title: 'What is the DNS root zone?',\n description: 'The DNS root zone is the starting point of the domain name system. It is where all domain names originate. The root zone is overseen by ICANN.',\n overviewImage: '/img/learning/what-is-the-dns-root-zone/the-internet-relies-on-the-dns-root-zone-small.jpg',\n overviewImageAlt: 'What is the DNS root zone?',\n overviewDescription: 'The DNS is a massive tree of names containing all the names on the Internet. But it has a single starting point: the DNS root zone.',\n author: jeff,\n editor: ruurtjan,\n img1024x512: 'https://www.nslookup.io/img/learning/dns-what-is-the-dns-root-zone/dns-what-is-the-dns-root-zone-social.jpg',\n img1200x630: 'https://www.nslookup.io/img/learning/dns-what-is-the-dns-root-zone/dns-what-is-the-dns-root-zone-social.jpg',\n written: new Date('2023-04-05T09:06:13.911Z'),\n updated: new Date('2023-04-18T10:02:09.421Z'),\n};\n\nconst __default__ = {\n meta,\n};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'WhatIsTheDnsRootZone',\n setup(__props) {\n\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createBlock(BlogPost, {\n title: meta.title,\n description: meta.description,\n url: `https://www.nslookup.io${meta.url}`,\n breadcrumbs: meta.breadcrumbs,\n img1024x512: meta.img1024x512,\n img1200x630: meta.img1200x630,\n written: meta.written,\n updated: meta.updated,\n author: meta.author,\n editor: meta.editor\n }, {\n default: _withCtx(() => [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"ImageObject\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"email\\\": \\\"mailto:ruurtjan@nslookup.io\\\", \\\"image\\\": \\\"https://www.nslookup.io/img/ruurtjan-lg.jpg\\\", \\\"jobTitle\\\": \\\"CEO\\\", \\\"name\\\": \\\"Ruurtjan Pul\\\", \\\"url\\\": \\\"https://www.nslookup.io/about/ruurtjan-pul/\\\" }, \\\"copyrightHolder\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"https://www.nslookup.io/\\\", \\\"email\\\": \\\"hello@nslookup.io\\\" }, \\\"copyrightYear\\\": 2023, \\\"contentUrl\\\": \\\"https://www.nslookup.io/img/learning/what-is-the-dns-root-zone/the-internet-relies-on-the-dns-root-zone.jpg\\\", \\\"license\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\", \\\"acquireLicensePage\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\" } \")\n ]),\n _: 1\n }))\n ])),\n _hoisted_1,\n _hoisted_2,\n _hoisted_3,\n _hoisted_4,\n _hoisted_5,\n _hoisted_6,\n _hoisted_7,\n _hoisted_8,\n _hoisted_9,\n _hoisted_10,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"DNS resolvers use a process called \"),\n _createVNode(_component_router_link, {\n to: \"/learning/recursive-vs-authoritative-dns/\",\n title: \"Recursive vs Authoritative DNS — What\\\\'s the difference?\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(\"recursion\")\n ]),\n _: 1\n }),\n _createTextVNode(\" to resolve names by starting at the DNS root zone. Resolvers follow pointers called \"),\n _createVNode(_component_router_link, {\n to: \"/learning/zone-delegation/\",\n title: \"DNS zone delegation\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(\"delegations\")\n ]),\n _: 1\n }),\n _createTextVNode(\" from the DNS root zone down the DNS tree to eventually arrive at the answer, which is often the address of a web server such as \"),\n _hoisted_11,\n _createTextVNode(\".\")\n ]),\n _hoisted_12,\n _createVNode(Callout, {\n icon: \"info\",\n heading: \"h2\",\n title: \"What are DNS zones?\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"You may be wondering what a \"),\n _hoisted_13,\n _createTextVNode(\" is if you are new to DNS. Our article, \"),\n _createVNode(_component_router_link, {\n to: \"/learning/what-is-a-dns-zone/\",\n title: \"What is a DNS zone?\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(\"What is a DNS zone?\")\n ]),\n _: 1\n }),\n _createTextVNode(\" may be helpful.\")\n ]),\n _hoisted_14,\n _hoisted_15\n ]),\n _: 1\n }),\n _hoisted_16,\n _hoisted_17,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"Operation of the DNS root zone is overseen by \"),\n _hoisted_18,\n _createTextVNode(\" (Internet Corporation for Assigned Names and Numbers). ICANN not only oversees the root zone. It also manages \"),\n _createVNode(_component_router_link, {\n to: \"/learning/how-does-domain-name-registration-work/#the-registry\",\n title: \"How does domain name registration work?\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(\"domain name registries\")\n ]),\n _: 1\n }),\n _createTextVNode(\" and IP addresses to ensure the stability of the Internet, and to foster competition and customer choice.\")\n ]),\n _hoisted_19,\n _hoisted_20,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"Anyone can view the set of \"),\n _createVNode(_component_router_link, { to: \"/domains/[.]/dns-records/ns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"NS records for the root zone\")\n ]),\n _: 1\n }),\n _createTextVNode(\". There are many online DNS lookup tools, or you can use the popular DNS command line tool \"),\n _hoisted_21,\n _createTextVNode(\". This command tells dig to retrieve the NS records for the DNS root (denoted by \\\".\\\") and return the short form of the output:\")\n ]),\n _hoisted_22,\n _hoisted_23,\n _hoisted_24,\n _hoisted_25,\n _createVNode(Callout, {\n icon: \"info\",\n heading: \"h2\",\n title: \"How does a recursive DNS server find root server IP addresses?\"\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"The DNS root servers have names like \"),\n _hoisted_26,\n _createTextVNode(\". But since DNS is used to map names to IP addresses, how do \"),\n _createVNode(_component_router_link, {\n to: \"/learning/recursive-vs-authoritative-dns/#recursive-dns-servers\",\n title: \"Recursive vs Authoritative DNS — What\\\\'s the difference?\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(\"recursive DNS servers\")\n ]),\n _: 1\n }),\n _createTextVNode(\" find the IP addresses of the root servers without ending up in a infinite circular loop?\")\n ]),\n _hoisted_27,\n _hoisted_28\n ]),\n _: 1\n }),\n _hoisted_29,\n _hoisted_30,\n _hoisted_31,\n _hoisted_32,\n _hoisted_33,\n _createVNode(Callout, {\n icon: \"info\",\n heading: \"h2\",\n title: \"Why are there exactly 13 root servers?\"\n }, {\n default: _withCtx(() => [\n _hoisted_34,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"The answer has to do with size of a DNS message on the Internet. Originally, DNS messages had to be kept below 512 bytes in size for efficiency. It turns out that 13 \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/ns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"NS records\")\n ]),\n _: 1\n }),\n _createTextVNode(\" plus one \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/ns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"A record\")\n ]),\n _: 1\n }),\n _createTextVNode(\" for each fits almost exactly into 512 bytes!\")\n ]),\n _hoisted_35\n ]),\n _: 1\n }),\n _hoisted_36,\n _hoisted_37,\n _hoisted_38,\n _createElementVNode(\"ol\", null, [\n _hoisted_39,\n _hoisted_40,\n _hoisted_41,\n _createElementVNode(\"li\", null, [\n _hoisted_42,\n _createTextVNode(\": There is only one infrastructure TLD: .arpa. This TLD contains reverse mappings for IP addresses using \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/ptr/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"PTR records\")\n ]),\n _: 1\n }),\n _createTextVNode(\".\")\n ]),\n _hoisted_43\n ]),\n _hoisted_44,\n _hoisted_45,\n _hoisted_46,\n _hoisted_47,\n _hoisted_48,\n _hoisted_49,\n _hoisted_50,\n _hoisted_51,\n _hoisted_52,\n _hoisted_53,\n _hoisted_54\n ]),\n _: 1\n }, 8, [\"title\", \"description\", \"url\", \"breadcrumbs\", \"img1024x512\", \"img1200x630\", \"written\", \"updated\", \"author\", \"editor\"]))\n}\n}\n\n})","import script from \"./WhatIsTheDnsRootZone.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./WhatIsTheDnsRootZone.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\nimport _imports_0 from '../../../public/img/learning/zone-delegation/example-zone-delegation-in-action.png'\n\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"strong\", { class: \"text-xl leading-8 block font-normal text-gray-500 mt-[1.3333333em]\" }, \"Zone delegation in the DNS is how a parent zone signals to DNS resolvers that authority for a child zone is served by (or delegated to) a different set of servers.\", -1)\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"code\", null, \".com\", -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"code\", null, \"google.com\", -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full rounded-lg\",\n src: \"/img/learning/zone-delegation/dns-zone-delegation.jpg\",\n alt: \"Traversing the DNS tree\",\n title: \"Traversing the DNS tree\",\n width: \"1200\",\n height: \"600\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, [\n /*#__PURE__*/_createTextVNode(\"Traversing the DNS tree. By NsLookup.io. Licensed under \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://creativecommons.org/licenses/by/4.0/\",\n title: \"Creative Commons By 4.0 licence\",\n rel: \"nofollow\"\n }, \"CC By 4.0\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Delegations are NS records\", -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Using the reserved domain \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\", a set of NS records for the zone \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" might look something like the example below. This same set of NS records would actually exist in both the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" zone and the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"org\"),\n /*#__PURE__*/_createTextVNode(\" zone, and we'll discuss that wrinkle in more detail later.\")\n], -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"example.org. 86400 NS ns1.example.org.\\nexample.org. 86400 NS ns2.example.org.\\nexample.org. 86400 NS ns3.example.org.\\nexample.org. 86400 NS ns4.example.org.\", -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Name servers are often named \\\"ns1\\\", \\\"ns2\\\", etc., but they can be named anything. They can be either inside the zone they serve, or they may be in another zone altogether.\", -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"p\", null, \"There is no requirement to have a particular number of NS records for a zone, but a de facto standard is to have four identical NS records in both the delegation and authoritative NS record sets. Too few NS records leads to fragility in case of outage, and too many leads to DNS responses that are larger than necessary.\", -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"It all starts at the root\", -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"code\", null, \".\", -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"In the past, each IP was a distinct server. Today, these IP addresses are anycasted — each hosted by many servers scattered around the globe. The root servers are operated by \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://www.iana.org/domains/root/servers\",\n title: \"List of root servers\",\n rel: \"noopener noreferrer\"\n }, \"many different entities\"),\n /*#__PURE__*/_createTextVNode(\" including ICANN, Verisign, the Internet Systems Consortium (ISC, the makers of BIND), NASA, the US army, universities, and others. The operation of these root servers is very serious business indeed. Without them, the Internet would cease to function.\")\n], -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Delegating to children\", -1)\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"p\", null, \"When a recursive resolver encounters this set of NS records, they will resend the DNS query to the name servers authoritative for the child zone. This process may repeat a number of times during resolution of a single name.\", -1)\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Recursion in action\", -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"So for example, if a recursive resolver is asked to resolve \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"www.example.org\"),\n /*#__PURE__*/_createTextVNode(\", it will first send the query to one of its pre-configured root servers. The root server does not know anything about the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" zone, but it does have a delegation for the top-level zone \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"org\"),\n /*#__PURE__*/_createTextVNode(\", so it will respond with a delegation containing the name servers for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"org\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"full-width\",\n src: _imports_0,\n alt: \"An example of zone delegation\",\n title: \"An example of zone delegation\"\n}, null, -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"image-title\" }, \"An example of zone delegation.\", -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Next, the resolver will send the same DNS query to one of the name servers for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"org\"),\n /*#__PURE__*/_createTextVNode(\". This server will not know the answer either, but it will have a delegation for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\", and so it will return the list of name servers for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" to the recursive resolver. The resolver is now a step closer.\")\n], -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\", -1)\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\", -1)\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"code\", null, \"www.example.org\", -1)\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"p\", null, \"In this example, there were only two delegations, but there could be more. There is no hard limit on the number of delegations that might be required to resolve a name. In theory, there could be up to 128, but that would be very strange. Generally, five or six delegations would be considered high.\", -1)\nconst _hoisted_24 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Caching\", -1)\nconst _hoisted_25 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Delegation may seem an expensive process since a recursive resolver must send the same DNS query multiple times to multiple servers, and that is certainly true at times. Each query takes 20-60 milliseconds or more, which means that a web page will load that much slower. The good news is that caching is fundamental to the DNS.\", -1)\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The first time a DNS resolver is asked to resolve a name from a \\\"cold\\\" cache with no entries, it will have to send one query for each level of delegation. The NS records in each delegation will be cached for their TTL, which will generally be for several hours or even days. The next time a client wants to resolve a name in that zone, the resolver will use the cached NS records to send the query directly to the server authoritative for the name. So, name resolution will usually be much faster once a resolver's cache has warmed up.\", -1)\nconst _hoisted_27 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Selecting your NS TTL\", -1)\nconst _hoisted_28 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"The duality of NS records\", -1)\nconst _hoisted_29 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"For example, the administrator for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" created an SOA and a set of NS records at \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\". These records exist in the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\" zone. When the administrator is ready to open the zone up to the Internet, he instructs his registrar to create a delegation in the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"org\"),\n /*#__PURE__*/_createTextVNode(\" zone. The delegation is a set of NS records, often identical to those at \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"example.org\"),\n /*#__PURE__*/_createTextVNode(\", but these records are in the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"org\"),\n /*#__PURE__*/_createTextVNode(\" zone.\")\n], -1)\nconst _hoisted_30 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"So there are actually TWO sets of NS records for every zone: the authoritative NS record set in the child zone and the delegation NS record set in the parent zone. It is recommended that these NS record sets be identical, but they do not have to be. Generally speaking, DNS resolvers can use either set of NS records. When a resolver has access to both, it will prefer the authoritative NS record set from the child zone. The way DNS data should be preferred, or ranked, by resolvers is specified in \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://www.rfc-editor.org/rfc/rfc2181#section-5.4.1\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, \"RFC 2181 section 5.4.1\"),\n /*#__PURE__*/_createTextVNode(\".\")\n], -1)\nconst _hoisted_31 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Gluing the DNS together\", -1)\nconst _hoisted_32 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Glue records are extra copies of DNS address records, either type A for IPv4 addresses or type AAAA for IPv6 addresses. Glue records are included in the parent zone. They can be critical for the operation of a DNS zone. One common scenario is called \\\"inside zone glue\\\" because the glue records are for data inside the zone. Consider this common pattern of delegation:\", -1)\nconst _hoisted_33 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"example.org. 86400 NS ns1.example.org.\\nexample.org. 86400 NS ns2.example.org.\", -1)\nconst _hoisted_34 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"The name server host names \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"ns1\"),\n /*#__PURE__*/_createTextVNode(\" and \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"ns2\"),\n /*#__PURE__*/_createTextVNode(\" are inside the zone they serve. There is a chicken-and-egg problem lurking here, though: how does a DNS resolver find the IP addresses of \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"ns1.example.org\"),\n /*#__PURE__*/_createTextVNode(\" and \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"ns2.example.org\"),\n /*#__PURE__*/_createTextVNode(\"? To resolve those names, the resolver would have to follow the delegation, but following the delegation is impossible without knowing the IP addresses! The solution to this problem is glue records.\")\n], -1)\nconst _hoisted_35 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The parent zone contains not only the delegation shown above, but it also contains glue records such as the ones below. It is common to include at least one glue record for each name server host name in the delegation. Registrars will usually require this and may not permit a delegation without glue.\", -1)\nconst _hoisted_36 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"ns1.example.org. 86400 A 1.2.3.4\\nns2.example.org. 86400 A 1.2.3.5\", -1)\nconst _hoisted_37 = /*#__PURE__*/_createElementVNode(\"p\", null, \"When the parent zone generates a DNS delegation response, it includes both the NS record set and all the glue records that the resolver will need to contact the name servers for the child domain. Thus, DNS resolvers are spared the impossible chicken-and-egg problem of trying to use the delegation to resolve DNS server host names within the delegation.\", -1)\nconst _hoisted_38 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Missing or deleted delegations\", -1)\nconst _hoisted_39 = /*#__PURE__*/_createElementVNode(\"p\", null, \"There are two common causes of problems with delegation. The first is that the delegation may simply be missing. If the registrar or parent zone administrator has not yet added the delegation or if it has been accidentally deleted, then clients who are trying to resolve a name below the delegation will receive a non-existent name (NXDOMAIN) error. This is because if the delegation is not present in the parent zone, then by definition all names below the delegation do not exist in the DNS.\", -1)\nconst _hoisted_40 = /*#__PURE__*/_createElementVNode(\"h2\", { id: \"lame-delegations\" }, \"Lame delegations\", -1)\nconst _hoisted_41 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Another common problem with delegations is that they might be \\\"lame\\\", which is to say that the name server names in the NS records are not correct. \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc8499\",\n rel: \"noopener noreferrer\"\n }, \"RFC 8499\"),\n /*#__PURE__*/_createTextVNode(\" has a good technical definition of lame delegation. For example, suppose the parent zone delegation is:\")\n], -1)\nconst _hoisted_42 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"example.org 86400 NS ns1.example.org.\\nexample.org 86400 NS ns2.example.org.\", -1)\nconst _hoisted_43 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Also, suppose these names were correct last week but yesterday the DNS administrator replaced some name servers with new machines. However, they forgot to tell the registrar and now the delegation should actually be:\", -1)\nconst _hoisted_44 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"example.org 86400 NS rainier.example.org.\\nexample.org 86400 NS denali.example.org.\", -1)\nconst _hoisted_45 = /*#__PURE__*/_createElementVNode(\"p\", null, \"In this scenario, the old records are said to be lame as soon as the old name servers are turned off. At this point, recursive resolvers will be unable to connect to any name servers for the zone through the delegation. Resolvers will attempt resolution a few times and then give up. Clients will usually receive a DNS server failure (SERVFAIL) error.\", -1)\nconst _hoisted_46 = /*#__PURE__*/_createElementVNode(\"p\", null, \"It's important as a DNS administrator to remember that when the DNS servers for a zone are updated, any changes must be communicated clearly to the registrar. It's also a good idea to plan for a period of overlap at least as long as the NS record TTL when replacing servers. Changing the NS records one by one instead of all at once is also advisable.\", -1)\nconst _hoisted_47 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Privacy\", -1)\nconst _hoisted_48 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"In recent years, DNS privacy has become an important and controversial topic. One issue with the way that DNS resolvers historically work is that they send the full query name to all the name servers in the entire delegation chain. This reveals the names that are being resolved by end users unnecessarily. For example, the DNS root servers do not need to know that a user is resolving \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"www.example.org\"),\n /*#__PURE__*/_createTextVNode(\" in order to provide the delegation for \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"org\"),\n /*#__PURE__*/_createTextVNode(\". They only need to be told that someone is trying to resolve a name that has \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"org\"),\n /*#__PURE__*/_createTextVNode(\" as the right-most label.\")\n], -1)\nconst _hoisted_49 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"To address this concern and increase DNS privacy for end users, many DNS resolver implementations now include \\\"DNS Query Name Minimisation\\\", which was originally defined in \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc7816\",\n rel: \"noopener noreferrer\"\n }, \"RFC 7816\"),\n /*#__PURE__*/_createTextVNode(\" and later updated by \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://datatracker.ietf.org/doc/html/rfc9156\",\n rel: \"noopener noreferrer\"\n }, \"RFC 9156\"),\n /*#__PURE__*/_createTextVNode(\". This RFC was designed so that DNS delegation and zone data does not need to be changed, so there is no added burden on DNS administrators.\")\n], -1)\nconst _hoisted_50 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Tools\", -1)\nconst _hoisted_51 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"There are a number of tools that can be used to test delegations. The popular command line tool \\\"dig\\\" (included in \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://www.isc.org/bind/\",\n rel: \"noopener noreferrer\"\n }, \"ISC BIND\"),\n /*#__PURE__*/_createTextVNode(\") has a \\\"+trace\\\" option that will perform queries from the root down through delegations. \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://github.com/dnsviz/dnsviz\",\n rel: \"nofollow noreferrer noopener\"\n }, \"dnsviz.net\"),\n /*#__PURE__*/_createTextVNode(\" is another popular tool, but the output can be confusing to DNS novices as it is primarily focused on DNSSEC.\")\n], -1)\n\nimport BlogPost from '@/components/layout/BlogPost.vue';\n\nimport { jeff, ruurtjan } from '@/common/authors';\nimport { learningBreadcrumb } from '@/model/Breadcrumb';\nimport { BlogMeta } from '@/common/blogMeta';\nimport CodeBlock from '@/components/micro/CodeBlock.vue';\n\nconst meta: BlogMeta = {\n tag: 'DNS concepts',\n url: '/learning/zone-delegation/',\n breadcrumbs: [learningBreadcrumb],\n title: 'DNS zone delegation',\n description: 'Zone delegation is how a parent zone signals to DNS resolvers that authority for a child zone is served by a different set of servers.',\n overviewImage: '/img/learning/zone-delegation/dns-zone-delegation-small.png',\n overviewImageAlt: 'DNS zone delegation',\n overviewDescription: 'Zone delegation is how a parent zone signals to DNS resolvers that authority for a child zone is served by a different set of servers.',\n author: jeff,\n editor: ruurtjan,\n img1024x512: 'https://www.nslookup.io/img/learning/zone-delegation/dns-zone-delegation-social-1024x512.png',\n img1200x630: 'https://www.nslookup.io/img/learning/zone-delegation/dns-zone-delegation-social-1200x630.png',\n written: new Date('2022-04-28T01:24:45.041Z'),\n updated: new Date('2023-03-28T12:01:19.381Z'),\n};\n\nconst __default__ = {\n meta,\n};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'ZoneDelegation',\n setup(__props) {\n\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"ImageObject\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"email\\\": \\\"mailto:ruurtjan@nslookup.io\\\", \\\"image\\\": \\\"https://www.nslookup.io/img/ruurtjan-lg.jpg\\\", \\\"jobTitle\\\": \\\"CEO\\\", \\\"name\\\": \\\"Ruurtjan Pul\\\", \\\"url\\\": \\\"https://www.nslookup.io/about/ruurtjan-pul/\\\" }, \\\"copyrightHolder\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"https://www.nslookup.io/\\\", \\\"email\\\": \\\"hello@nslookup.io\\\" }, \\\"copyrightYear\\\": 2023, \\\"contentUrl\\\": \\\"https://www.nslookup.io/img/learning/zone-delegation/dns-zone-delegation.jpg\\\", \\\"license\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\", \\\"acquireLicensePage\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\" } \")\n ]),\n _: 1\n }))\n ])),\n _createVNode(BlogPost, {\n title: meta.title,\n description: meta.description,\n url: `https://www.nslookup.io${meta.url}`,\n breadcrumbs: meta.breadcrumbs,\n img1024x512: meta.img1024x512,\n img1200x630: meta.img1200x630,\n written: meta.written,\n updated: meta.updated,\n author: meta.author,\n editor: meta.editor\n }, {\n default: _withCtx(() => [\n _hoisted_1,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"This is a fundamental part of the DNS. The DNS is very large, and each \"),\n _createVNode(_component_router_link, { to: \"/learning/what-is-a-dns-zone/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"zone\")\n ]),\n _: 1\n }),\n _createTextVNode(\" is owned and managed independently. For example, the \"),\n _hoisted_2,\n _createTextVNode(\" zone is managed by Verisign, while the \"),\n _hoisted_3,\n _createTextVNode(\" zone is managed by Google. Verisign delegated that zone to Google.\")\n ]),\n _hoisted_4,\n _hoisted_5,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"A delegation is a set of \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/ns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"name server (NS) records\")\n ]),\n _: 1\n }),\n _createTextVNode(\" which list the DNS host names of the name servers that are \"),\n _createVNode(_component_router_link, { to: \"/learning/recursive-vs-authoritative-dns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"authoritative\")\n ]),\n _: 1\n }),\n _createTextVNode(\" for the domain. Like all DNS records, each NS record has a time-to-live (TTL) in seconds. Each NS record has one data field: the DNS host name of a name server. This host name must resolve, through the DNS, to an IP address where DNS server software is running and available to respond to DNS queries.\")\n ]),\n _hoisted_6,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_7\n ]),\n _: 1\n }),\n _hoisted_8,\n _hoisted_9,\n _hoisted_10,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"Now that we know what an NS record looks like, how are they used? The DNS is a top-down distributed database of DNS names beginning with the \"),\n _createVNode(_component_router_link, {\n to: \"/learning/what-is-the-dns-root-zone/\",\n title: \"What is the DNS root zone?\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(\"root zone\")\n ]),\n _: 1\n }),\n _createTextVNode(\" at the apex. The root zone is commonly referred to by a single period or dot character: \\\"\"),\n _hoisted_11,\n _createTextVNode(\"\\\". All DNS recursive resolvers come pre-configured with a list of the IP addresses of the DNS name servers for the root zone. These are often called root servers. Today there are 13 root servers. Each has one IPv4 address and one IPv6 address, so there are actually 26 root server IP addresses.\")\n ]),\n _hoisted_12,\n _hoisted_13,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"Each \"),\n _createVNode(_component_router_link, {\n to: \"/learning/what-is-a-dns-zone/\",\n title: \"DNS zone\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(\"DNS zone\")\n ]),\n _: 1\n }),\n _createTextVNode(\", especially the root zone, may have child zones that are owned and operated by a different entity. To signal to recursive resolvers that authority for a child zone has been delegated, the owner of the parent zone inserts a set of NS records at that name in the parent zone.\")\n ]),\n _hoisted_14,\n _hoisted_15,\n _hoisted_16,\n _hoisted_17,\n _hoisted_18,\n _hoisted_19,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"Finally, the recursive resolver will use the list of name servers it just received for \"),\n _hoisted_20,\n _createTextVNode(\" to send the DNS query to one of the name servers for \"),\n _hoisted_21,\n _createTextVNode(\". This server will know the answer and so will respond with the address records or perhaps a \"),\n _createVNode(_component_router_link, {\n to: \"/learning/dns-record-types/cname/\",\n title: \"The CNAME record type\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(\"CNAME record\")\n ]),\n _: 1\n }),\n _createTextVNode(\" for \"),\n _hoisted_22,\n _createTextVNode(\". The recursive resolver will then return that answer to its client, and the application will be able to open a web page or perform some other operation for the user.\")\n ]),\n _hoisted_23,\n _hoisted_24,\n _hoisted_25,\n _hoisted_26,\n _hoisted_27,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"Registrars often select the TTLs for delegation NS records on behalf of their clients, but it's best to \"),\n _createVNode(_component_router_link, { to: \"/learning/what-is-a-good-ttl-for-dns/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"use relatively long TTLs\")\n ]),\n _: 1\n }),\n _createTextVNode(\" in delegations. A TTL of one day is common. TTLs shorter than one hour are not recommended, nor are TTLs longer than a week. You may use the same TTL in both the delegation NS record set and the authoritative record set.\")\n ]),\n _hoisted_28,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"The root of a zone must always contain one SOA record and a set of NS records listing the authoritative name servers for the zone. For more information about the SOA record and the root of a zone, see our article on \"),\n _createVNode(_component_router_link, { to: \"/learning/dns-record-types/soa/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"the SOA record type\")\n ]),\n _: 1\n }),\n _createTextVNode(\". The parent zone delegation is also a set of NS records for the name of the child zone. These two NS record sets exist in the DNS at the same time at the same name. Delegation points are unique in the DNS in this respect. One NS record set exists in the parent zone and one exists in the child zone at the same DNS name.\")\n ]),\n _hoisted_29,\n _hoisted_30,\n _hoisted_31,\n _hoisted_32,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_33\n ]),\n _: 1\n }),\n _hoisted_34,\n _hoisted_35,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_36\n ]),\n _: 1\n }),\n _hoisted_37,\n _hoisted_38,\n _hoisted_39,\n _hoisted_40,\n _hoisted_41,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_42\n ]),\n _: 1\n }),\n _hoisted_43,\n _createVNode(CodeBlock, null, {\n default: _withCtx(() => [\n _hoisted_44\n ]),\n _: 1\n }),\n _hoisted_45,\n _hoisted_46,\n _hoisted_47,\n _hoisted_48,\n _hoisted_49,\n _hoisted_50,\n _hoisted_51\n ]),\n _: 1\n }, 8, [\"title\", \"description\", \"url\", \"breadcrumbs\", \"img1024x512\", \"img1200x630\", \"written\", \"updated\", \"author\", \"editor\"])\n ], 64))\n}\n}\n\n})","import script from \"./ZoneDelegation.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./ZoneDelegation.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"strong\", { class: \"text-xl leading-8 block font-normal text-gray-500 mt-[1.3333333em]\" }, \"The nslookup command line tool uses your system's DNS stub resolver by default. This resolver uses your ISP's DNS servers if you haven't changed them. You can overwrite this default setting by specifying a DNS server in the command itself.\", -1)\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"p\", null, \"To query a specific DNS server in nslookup, add the server's IP or hostname at the end of your command. For example:\", -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"nslookup isc.org 8.8.8.8\", -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Nslookup will now use Google's DNS server — running at the IP address 8.8.8.8 — to query the DNS records of isc.org.\", -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The syntax for nslookup is:\", -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"nslookup [-option ...] domain-name [dns-server]\", -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full rounded-lg\",\n src: \"/img/learning/how-to-specify-a-dns-server-in-nslookup/nslookup-specific-dns-server.png\",\n alt: \"A specific DNS server in nslookup\",\n title: \"A specific DNS server in nslookup\",\n width: \"1216\",\n height: \"691\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, \"A specific DNS server in nslookup.\")\n], -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"If you ever forget the order of nslookup's parameters, remember that you can check them from the command line.\")\n], -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"On Windows, you can type \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"nslookup /?\"),\n /*#__PURE__*/_createTextVNode(\" to get a short help message.\")\n], -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"On Linux and macOS, type \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"man nslookup\"),\n /*#__PURE__*/_createTextVNode(\" instead.\")\n], -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Specifying the port number\", -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"DNS uses port 53. But some DNS servers listen on a different port. In that case, you'll have to tell nslookup to use that port instead. You can change the port nslookup uses by adding the \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"-port=42\"),\n /*#__PURE__*/_createTextVNode(\" option.\")\n], -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"p\", null, \"For example:\", -1)\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"nslookup -port=42 isc.org 8.8.8.8\", -1)\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Setting a DNS server in nslookup's interactive mode\", -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"You can run nslookup in interactive mode by typing \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"nslookup\"),\n /*#__PURE__*/_createTextVNode(\" without a domain name. This way, you can keep an nslookup session open. To set the DNS server in interactive mode, enter \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"server 8.8.8.8\"),\n /*#__PURE__*/_createTextVNode(\" to switch to Google's public DNS servers.\")\n], -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"pre\", null, \"% nslookup\\nDefault Server: UnKnown\\nAddress: fe80::21c:42ff:fe00:18\\n\\n> server 8.8.8.8\\nDefault Server: dns.google\\nAddress: 8.8.8.8\\n\\n> set port=53\", -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"If you use the DNS server's hostname, then nslookup needs to resolve that to an IP address. It will try to do so with the currently set DNS server. If that server can't resolve the IP address of the new DNS server, then you can use \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"lserver\"),\n /*#__PURE__*/_createTextVNode(\" instead. This will instruct nslookup to use your local DNS resolver instead of the one set in this nslookup session.\")\n], -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"There is no difference between \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"server\"),\n /*#__PURE__*/_createTextVNode(\" and \"),\n /*#__PURE__*/_createElementVNode(\"code\", null, \"lserver\"),\n /*#__PURE__*/_createTextVNode(\" if you use the DNS server's IP address.\")\n], -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Looking up DNS records at multiple servers\", -1)\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The nslookup command line tool doesn't have any way to check DNS records at multiple servers at once. You need to run the command multiple times if you want to check multiple servers.\", -1)\nconst _hoisted_22 = {\n class: \"not-prose text-base mx-auto max-w-lg mt-10\",\n autocomplete: \"off\"\n}\n\nimport BlogPost from '@/components/layout/BlogPost.vue';\n\n\nimport { ruurtjan } from '@/common/authors';\nimport { BlogMeta } from '@/common/blogMeta';\nimport DomainSearch from '@/components/DomainSearch.vue';\nimport Callout from '@/components/layout/CalloutComponent.vue';\nimport { commandLineToolsBreadcrumb, learningBreadcrumb } from '@/model/Breadcrumb';\nimport { useRouter } from 'vue-router';\nimport { domainNameToUrlPath } from '@/common/domainName';\n\nexport const meta: BlogMeta = {\n tag: 'Command line tools',\n url: '/learning/how-to-specify-a-dns-server-in-nslookup/',\n breadcrumbs: [learningBreadcrumb, commandLineToolsBreadcrumb],\n title: 'How to specify a DNS server in nslookup?',\n description: 'Nslookup uses your system\\'s DNS server by default. You can change by specifying a DNS server in the command itself. Here\\'s how.',\n overviewDescription: 'Nslookup uses your system\\'s DNS server by default. You can change by specifying a DNS server in the command itself. Here\\'s how.',\n overviewImage: '/img/learning/how-to-specify-a-dns-server-in-nslookup/nslookup-specific-dns-server.png',\n overviewImageAlt: 'A specific DNS server in nslookup',\n author: ruurtjan,\n editor: undefined,\n img1024x512: 'https://www.nslookup.io/img/learning/how-to-specify-a-dns-server-in-nslookup/nslookup-specific-dns-server.png',\n img1200x630: 'https://www.nslookup.io/img/learning/how-to-specify-a-dns-server-in-nslookup/nslookup-specific-dns-server.png',\n written: new Date('2023-03-09T13:16:08.799Z'),\n updated: new Date('2023-03-11T11:39:31.105Z'),\n};\n\nconst __default__ = {\n meta,\n};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'HowToSpecifyADnsServerInNslookup',\n setup(__props) {\n\nconst router = useRouter();\n\nfunction redirectTo(domain: string): void {\n router.push(`/domains/${domainNameToUrlPath(domain)}/dns-propagation/a/`);\n}\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createBlock(BlogPost, {\n title: meta.title,\n description: meta.description,\n url: `https://www.nslookup.io${meta.url}`,\n breadcrumbs: meta.breadcrumbs,\n img1024x512: meta.img1024x512,\n img1200x630: meta.img1200x630,\n written: meta.written,\n updated: meta.updated,\n author: meta.author,\n editor: meta.editor\n }, {\n default: _withCtx(() => [\n _hoisted_1,\n _hoisted_2,\n _hoisted_3,\n _hoisted_4,\n _hoisted_5,\n _hoisted_6,\n _hoisted_7,\n _createVNode(Callout, {\n icon: \"info\",\n title: \"Checking the nslookup documentation from the command line\",\n heading: \"h2\"\n }, {\n default: _withCtx(() => [\n _hoisted_8,\n _hoisted_9,\n _hoisted_10\n ]),\n _: 1\n }),\n _hoisted_11,\n _hoisted_12,\n _hoisted_13,\n _hoisted_14,\n _hoisted_15,\n _hoisted_16,\n _hoisted_17,\n _hoisted_18,\n _hoisted_19,\n _hoisted_20,\n _hoisted_21,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"A simpler way to check the DNS propagation for a domain name is using our \"),\n _createVNode(_component_router_link, { to: \"/dns-checker/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"DNS checker\")\n ]),\n _: 1\n }),\n _createTextVNode(\". This will show you the DNS records at global and regional DNS servers.\")\n ]),\n _createElementVNode(\"form\", _hoisted_22, [\n _createVNode(DomainSearch, {\n emphasize: \"\",\n onSubmitted: redirectTo\n })\n ])\n ]),\n _: 1\n }, 8, [\"title\", \"description\", \"url\", \"breadcrumbs\", \"img1024x512\", \"img1200x630\", \"written\", \"updated\", \"author\", \"editor\"]))\n}\n}\n\n})","import script from \"./HowToSpecifyADnsServerInNslookup.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./HowToSpecifyADnsServerInNslookup.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, createElementVNode as _createElementVNode, createVNode as _createVNode, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"strong\", { class: \"text-xl leading-8 block font-normal text-gray-500 mt-[1.3333333em]\" }, \"Your web address or the URL is what people type in their browsers to access your website. This address helps people and search engines to identify you online. As you can guess, this is a pretty important element to nail down when you launch your business.\", -1)\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Many businesses mistakenly do not give it the consideration it deserves. Here's why you must.\", -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full rounded-lg\",\n src: \"/img/learning/tips-for-picking-a-domain-name/how-to-pick-a-domain-name.jpg\",\n alt: \"A domain name is as important as your brand\",\n title: \"A domain name is as important as your brand\",\n width: \"1200\",\n height: \"600\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, [\n /*#__PURE__*/_createTextVNode(\"A domain name is as important as your brand. By NsLookup.io. Licensed under \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://creativecommons.org/licenses/by/4.0/\",\n title: \"Creative Commons By 4.0 licence\",\n rel: \"nofollow\"\n }, \"CC By 4.0\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"Your web address is as important as your brand.\", -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Businesses spend considerable resources on branding. A design that's easy to remember, conveys what the company does, and helps separate your brand from the rest. \", -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"p\", null, \"A web address does the same.\", -1)\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"In fact, considering its impact on SEO, I'd say arriving at a winning URL is even more important than creating a bang-on brand. At least you can redesign a brand if you don't like the original result. \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Changing a domain name can be chaotic and risky.\")\n], -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Most \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://www.logodesign.net/web\",\n rel: \"noopener noreferrer\"\n }, \"online web builders\"),\n /*#__PURE__*/_createTextVNode(\" allow you to create your web URL as you are building the website. No need to buy a domain name before. But before you get carried away with the design process — because the aesthetics can be quite appealing — it's necessary to have a list of potential domain names ready that you can choose from before you click the Publish button.\")\n], -1)\nconst _hoisted_9 = /*#__PURE__*/_createElementVNode(\"p\", null, \"In this article, we'll share 10 tips to building a strategic web address that can be a true asset for your brand.\", -1)\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"1. Get it right the first time\", -1)\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Domain name changes come with a host of risks and challenges. You stand to hurt your SEO, link authority might suffer for a bit, and it can be a hassle asking other websites to change your domain name on their sites.\", -1)\nconst _hoisted_12 = /*#__PURE__*/_createElementVNode(\"p\", null, \"And while there are steps you can take to minimize the damage; some concerns always persist:\", -1)\nconst _hoisted_13 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, \"It can take time to bring back your organic traffic.\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Brand awareness almost complete resets as you try to tell your audience that now you have a new name.\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"You'll need to restart your new social media presence from scratch — and we all know it can be a challenge.\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Domain name changes require you to get new names on your email, branding, and other marketing materials. It can be time-consuming and expensive.\")\n], -1)\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Therefore, it is important to get your domain name right the first time. \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Take some time to research domain names before you start.\"),\n /*#__PURE__*/_createTextVNode(\" Your future self will thank you!\")\n], -1)\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"2. Think beyond .com\", -1)\nconst _hoisted_16 = /*#__PURE__*/_createElementVNode(\"p\", null, \"As you are finalizing your brand name, you'd do well to research if the matching domain name with the '.com' extension is available. While we now have access to fancier top level domains (TLDs), too -. club, .blog, .shop, and such —- it's better to stick with the classic and trustworthy .com.\", -1)\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Some reasons why:\", -1)\nconst _hoisted_18 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Visitors always default to typing .com after a domain name in the URL bar. A mistype can land them to an error page or (worse) to a competitor's page.\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Most smartphones also have a default .com after a web address is typed, and you stand to lose a lot of traffic if you go after anything other than a .com.\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"The .com top-level-domain makes your brand look more established and trustworthy.\")\n], -1)\nconst _hoisted_19 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Having said that, if a \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://www.startupgrind.com/blog/beyond-dot-com-the-search-for-the-ultimate-domain-name/\",\n rel: \"noopener noreferrer\"\n }, \".com extension isn't available\"),\n /*#__PURE__*/_createTextVNode(\", don't lose your sleep over it. Extension such as .net, .org, and .biz, etc., are also great and pretty popular with people.\")\n], -1)\nconst _hoisted_20 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Plus, if you choose to get something new like a .blog or a .shop extension, not only will it come cheaper, but it can be a great branding opportunity too. With clever branding, you can own and flaunt these new extensions and make them a brand asset.\", -1)\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Important note: when you are buying your domain name, try getting all the available extensions and redirect them to your main site. This ensures that no other business can buy a similar looking domain name as you and infringe upon your brand.\", -1)\nconst _hoisted_22 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"3. Go for short, memorable, & on-brand domains\", -1)\nconst _hoisted_23 = /*#__PURE__*/_createElementVNode(\"p\", null, \"The reason you need a short domain name is that it's easier to say and easier to share with people, even vocally.\", -1)\nconst _hoisted_24 = /*#__PURE__*/_createElementVNode(\"p\", null, \"It's also memorable. You don't want an overly complicated or a long URL that won't win you any favors with your audience.\", -1)\nconst _hoisted_25 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Also, your domain name \"),\n /*#__PURE__*/_createElementVNode(\"i\", null, \"should\"),\n /*#__PURE__*/_createTextVNode(\" be your brand name. Imagine if Nike had a domain called 'nikeshoes.com'. Not only it'll be limiting, but also quite inauthentic and generic.\")\n], -1)\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Therefore, always match your domain name with your brand, even if you have to sacrifice your favorite TLD.\", -1)\nconst _hoisted_27 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"4. Be smart with the keywords\", -1)\nconst _hoisted_28 = /*#__PURE__*/_createElementVNode(\"p\", null, \"You need to consider two things.\", -1)\nconst _hoisted_29 = /*#__PURE__*/_createElementVNode(\"p\", null, \"First, search engines no longer require you to have your main keyword (exact match keyword) in your URL for it to rank higher. Rankings have become more nuanced than that now. Plus, stuffing your URL with keywords can actually backfire and get you penalized. Also, the audience equates such web addresses with spammy, untrustworthy businesses.\", -1)\nconst _hoisted_30 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Second, in some cases, having a relevant keyword in your domain name can help. It's especially helpful if it's part of your brand name in the first place. For example, \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://domainnamestat.com/\",\n rel: \"noopener noreferrer\"\n }, \"domainnamestat.com\"),\n /*#__PURE__*/_createTextVNode(\" sounds like a search query, but since it's an actual company, the keyword doesn't seem forced at all — instead, it has become branded.\")\n], -1)\nconst _hoisted_31 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"5. Easy to spell and pronounce\", -1)\nconst _hoisted_32 = /*#__PURE__*/_createElementVNode(\"p\", null, \"When you interact with a business that you like, you tell people about it. You text them, mention it in conversations, and basically say the business' name a lot.\", -1)\nconst _hoisted_33 = /*#__PURE__*/_createElementVNode(\"p\", null, \"But what happens if the name is confusing to spell or difficult to pronounce? Something with a hyphen in it, or some words that have been replaced with a number? How can you convey that verbally?\", -1)\nconst _hoisted_34 = /*#__PURE__*/_createElementVNode(\"p\", null, \"If you can't, the business loses a huge branding, marketing, and organic SEO opportunity.\", -1)\nconst _hoisted_35 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Do not be such a business.\", -1)\nconst _hoisted_36 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Choose brand names — and thus the domain names — that have simple spellings and are no-brainers when pronouncing.\", -1)\nconst _hoisted_37 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Facebook, Instagram, YouTube, all foot the bill.\", -1)\nconst _hoisted_38 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"They are easy to say verbally, with nothing lost in translation. \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"With simple spellings, they can't be mistyped in the browsers.\"),\n /*#__PURE__*/_createTextVNode(\" Meaning, you won't lose any traffic to error pages or rival companies, and your happy customers will become effective tools of marketing hyping up your (easy and simple) brand name to everyone who listens.\")\n], -1)\nconst _hoisted_39 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"6. Make it intuitive\", -1)\nconst _hoisted_40 = /*#__PURE__*/_createElementVNode(\"p\", null, \"When people hear your domain name, do they instantly get an idea of what your business has to offer?\", -1)\nconst _hoisted_41 = /*#__PURE__*/_createElementVNode(\"p\", null, \"If so, you have achieved domain name nirvana.\", -1)\nconst _hoisted_42 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Take a popular example of Wikipedia. Thename instantly gives away the kind of information you are going to find there. Something similar to an encyclopedia. No guessing here and no confusion.\", -1)\nconst _hoisted_43 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"When you choose intuitive domain names, you not only strengthen brand recognition but brand memorability, too.\"),\n /*#__PURE__*/_createTextVNode(\" If your audience can hear your name and understand what you do, it's going to remember you for a long time to come.\")\n], -1)\nconst _hoisted_44 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"7. Research the domain history\", -1)\nconst _hoisted_45 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Sometimes, the available domain names come with baggage. What you thought was a brand-new name was actually someone else's website in the past. Now that it has become available again, you want to make sure that the name you are buying comes with impeccable character history.\", -1)\nconst _hoisted_46 = /*#__PURE__*/_createElementVNode(\"p\", null, \"You don't want anyone associating your business with anything less than completely kosher.\", -1)\nconst _hoisted_47 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, [\n /*#__PURE__*/_createTextVNode(\"Look up prospect domain names in the \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://web.archive.org/\",\n rel: \"noopener noreferrer\"\n }, \"Wayback Machine\"),\n /*#__PURE__*/_createTextVNode(\" to see what was hosted on it before.\")\n ])\n], -1)\nconst _hoisted_48 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"8. Explore social media handles\", -1)\nconst _hoisted_49 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Your brand has to live not only on web servers but also on social media. Before you finalize a URL, look around on social platforms to ensure that your preferred name is available on all major social sites. These include Facebook, Instagram, YouTube, Twitter, and TikTok.\", -1)\nconst _hoisted_50 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Even if you are not going to have a presence on all these platforms, \"),\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"nab the names right now to protect your brand for the future.\")\n], -1)\nconst _hoisted_51 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Having different online identities for the same brand online is a recipe for reputation disaster. If people perceive your business as anything less than completely professional with high integrity, you'll have a hard time getting your foot in the door.\", -1)\nconst _hoisted_52 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"9. Keep room for growth\", -1)\nconst _hoisted_53 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"strong\", null, \"Some domain names are so specific that it limits your chances for expansion.\")\n], -1)\nconst _hoisted_54 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Suppose you are an SEO company called DirectSeo. The name is short, memorable, on-brand, but it's also highly limiting. If you try to venture into digital marketing, let's say, you'll have a hard time convincing your audience of your digital marketing expertise if they only associate you with SEO.\", -1)\nconst _hoisted_55 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Therefore, as you are shortlisting your domain names, keep room for future growth and expansion in mind.\", -1)\nconst _hoisted_56 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"10. Protect your brand\", -1)\nconst _hoisted_57 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"Buying a domain name has a legal angle to it as well. You want to make sure that your domain name does not infringe upon anyone's trademark. Check the trademark registries of \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://euipo.europa.eu/eSearch/\",\n rel: \"noopener noreferrer\"\n }, \"Europe\"),\n /*#__PURE__*/_createTextVNode(\" and the \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://tmsearch.uspto.gov/bin/gate.exe?f=login&p_lang=english&p_d=trmk\",\n rel: \"noopener noreferrer\"\n }, \"United States\"),\n /*#__PURE__*/_createTextVNode(\" to see if the brand has already been trademarked.\")\n], -1)\nconst _hoisted_58 = /*#__PURE__*/_createElementVNode(\"p\", null, \"You also don't want to expose your brand to professional domain name flippers who buy available domain names with varied extensions and then sell them to anxious brands at a higher cost.\", -1)\nconst _hoisted_59 = /*#__PURE__*/_createElementVNode(\"p\", null, \"When you buy a domain, buy it with all common extensions. It means, do not stop at the .com. Go after .net, .org, .io, and other common TLDs too. It not only future-proofs your brand, but by redirecting them all to your main site, you save up on a lot of lost traffic when people type in a wrong extension.\", -1)\nconst _hoisted_60 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"In Short\", -1)\nconst _hoisted_61 = /*#__PURE__*/_createElementVNode(\"p\", null, \"Your URL is your brand name — just online. Treat it with the same deference you'd treat your brand name and logo, to protect and strengthen your digital presence.\", -1)\nconst _hoisted_62 = /*#__PURE__*/_createElementVNode(\"ul\", null, [\n /*#__PURE__*/_createElementVNode(\"li\", null, \"Choose the right domain name from the get-go to create an uninterrupted brand presence.\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"The domain name needs to be intuitive, and short, on-brand, with no confusing digits or symbols.\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"The .com is good, but explore more domain extensions for a flexible brand that has room to grow.\"),\n /*#__PURE__*/_createElementVNode(\"li\", null, \"And lastly, protect your brand by researching your domain name's history and current use, so you don't get into any legal or security issues down the road.\")\n], -1)\n\nimport BlogPost from '@/components/layout/BlogPost.vue';\n\nimport { holly, ruurtjan } from '@/common/authors';\nimport { learningBreadcrumb } from '@/model/Breadcrumb';\nimport { BlogMeta } from '@/common/blogMeta';\n\nconst meta: BlogMeta = {\n tag: 'Domain names',\n url: '/learning/10-tips-for-picking-the-perfect-domain-name/',\n breadcrumbs: [learningBreadcrumb],\n title: '10 tips for picking the perfect domain name',\n description: 'Your web address is as important as your brand. We\\'ve laid out 10 tips for you to pick the perfect domain name.',\n overviewDescription: 'Your web address is as important as your brand. We\\'ve laid out 10 tips for you to pick the perfect domain name.',\n overviewImage: '/img/learning/tips-for-picking-a-domain-name/how-to-pick-a-domain-name-small.jpg',\n overviewImageAlt: '10 tips for picking the perfect domain name',\n author: holly,\n editor: ruurtjan,\n img1024x512: 'https://www.nslookup.io/img/learning/tips-for-picking-a-domain-name/tips-for-picking-a-domain-name.jpg',\n img1200x630: 'https://www.nslookup.io/img/learning/tips-for-picking-a-domain-name/tips-for-picking-a-domain-name.jpg',\n written: new Date('2022-09-02T12:36:21.803Z'),\n updated: new Date('2023-03-28T11:58:34.654Z'),\n};\n\nconst __default__ = {\n meta,\n};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'TipsForPickingADomainName',\n setup(__props) {\n\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"ImageObject\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"email\\\": \\\"mailto:ruurtjan@nslookup.io\\\", \\\"image\\\": \\\"https://www.nslookup.io/img/ruurtjan-lg.jpg\\\", \\\"jobTitle\\\": \\\"CEO\\\", \\\"name\\\": \\\"Ruurtjan Pul\\\", \\\"url\\\": \\\"https://www.nslookup.io/about/ruurtjan-pul/\\\" }, \\\"copyrightHolder\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"https://www.nslookup.io/\\\", \\\"email\\\": \\\"hello@nslookup.io\\\" }, \\\"copyrightYear\\\": 2023, \\\"contentUrl\\\": \\\"https://www.nslookup.io/img/learning/tips-for-picking-a-domain-name/how-to-pick-a-domain-name.jpg\\\", \\\"license\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\", \\\"acquireLicensePage\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\" } \")\n ]),\n _: 1\n }))\n ])),\n _createVNode(BlogPost, {\n title: meta.title,\n description: meta.description,\n url: `https://www.nslookup.io${meta.url}`,\n breadcrumbs: meta.breadcrumbs,\n img1024x512: meta.img1024x512,\n img1200x630: meta.img1200x630,\n written: meta.written,\n updated: meta.updated,\n author: meta.author,\n editor: meta.editor\n }, {\n default: _withCtx(() => [\n _hoisted_1,\n _hoisted_2,\n _hoisted_3,\n _hoisted_4,\n _hoisted_5,\n _hoisted_6,\n _hoisted_7,\n _hoisted_8,\n _hoisted_9,\n _hoisted_10,\n _hoisted_11,\n _hoisted_12,\n _hoisted_13,\n _hoisted_14,\n _hoisted_15,\n _hoisted_16,\n _hoisted_17,\n _hoisted_18,\n _hoisted_19,\n _hoisted_20,\n _hoisted_21,\n _hoisted_22,\n _hoisted_23,\n _hoisted_24,\n _hoisted_25,\n _hoisted_26,\n _hoisted_27,\n _hoisted_28,\n _hoisted_29,\n _hoisted_30,\n _hoisted_31,\n _hoisted_32,\n _hoisted_33,\n _hoisted_34,\n _hoisted_35,\n _hoisted_36,\n _hoisted_37,\n _hoisted_38,\n _hoisted_39,\n _hoisted_40,\n _hoisted_41,\n _hoisted_42,\n _hoisted_43,\n _hoisted_44,\n _hoisted_45,\n _hoisted_46,\n _hoisted_47,\n _hoisted_48,\n _hoisted_49,\n _hoisted_50,\n _hoisted_51,\n _hoisted_52,\n _hoisted_53,\n _hoisted_54,\n _hoisted_55,\n _hoisted_56,\n _hoisted_57,\n _hoisted_58,\n _hoisted_59,\n _hoisted_60,\n _hoisted_61,\n _hoisted_62\n ]),\n _: 1\n }, 8, [\"title\", \"description\", \"url\", \"breadcrumbs\", \"img1024x512\", \"img1200x630\", \"written\", \"updated\", \"author\", \"editor\"])\n ], 64))\n}\n}\n\n})","import script from \"./TipsForPickingADomainName.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./TipsForPickingADomainName.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, Teleport as _Teleport, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"strong\", { class: \"text-xl leading-8 block font-normal text-gray-500 mt-[1.3333333em]\" }, [\n /*#__PURE__*/_createTextVNode(\"On November 8th 2011, the Estonian police, the FBI, and the NASA-OIG arrested seven men in \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://www.fbi.gov/news/stories/international-cyber-ring-that-infected-millions-of-computers-dismantled\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, \"Operation Ghost Click\"),\n /*#__PURE__*/_createTextVNode(\". This group of people operated under the company name Rove Digital, and distributed viruses that changes the DNS settings of victims. The Estonian court found their guilt not proven, but one member later plead guilty in the USA, and was sentenced to seven and a quarter years in prison. This malware was known under the names of DNS changer, Alureon, TDSS, TidServ and TDL4.\")\n], -1)\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"figure\", { class: \"mt-6\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"w-full rounded-lg\",\n src: \"/img/learning/security/dns-changer/operation-ghost-click.jpg\",\n alt: \"What we imagine Operation Ghost Click must have looked like\",\n title: \"What we imagine Operation Ghost Click must have looked like\",\n width: \"1200\",\n height: \"600\"\n }),\n /*#__PURE__*/_createElementVNode(\"figcaption\", null, [\n /*#__PURE__*/_createTextVNode(\"What we imagine Operation Ghost Click must have looked like. By NsLookup.io. Licensed under \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://creativecommons.org/licenses/by/4.0/\",\n title: \"Creative Commons By 4.0 licence\",\n rel: \"nofollow\"\n }, \"CC By 4.0\"),\n /*#__PURE__*/_createTextVNode(\".\")\n ])\n], -1)\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"What does the DNS Changer Malware do?\", -1)\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\"On March 12th 2012, the FBI announced that, under a court order, the \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://www.isc.org/\",\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, \"ISC\"),\n /*#__PURE__*/_createTextVNode(\" (Internet Systems Consortium) was operating a replacement DNS service for the Rove Digital network. This will allow affected networks time to identify infected hosts, and avoid sudden disruption of services to victim machines. These servers were to be shut off on July 9th 2012.\")\n], -1)\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"h2\", null, \"How Can I Protect Myself?\", -1)\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"p\", null, \"If you were affected by this DNS Changer, then your DNS configuration has changed. You can make sure your operating system has the latest security patches, and update your configured DNS servers in its operating system. However, this malware is no longer being distributed, and many popular sites are now defended against this type of attack. So the chances of this still affecting you are very small.\", -1)\n\nimport BlogPost from '@/components/layout/BlogPost.vue';\n\nimport { ruurtjan } from '@/common/authors';\nimport { learningBreadcrumb } from '@/model/Breadcrumb';\nimport { BlogMeta } from '@/common/blogMeta';\n\nconst meta: BlogMeta = {\n tag: 'Security',\n url: '/learning/security/dns-changer/',\n breadcrumbs: [learningBreadcrumb],\n title: 'What is the DNS Changer Malware?',\n description: 'The DNS changer malware changed the DNS servers of its victims. It was shut down by the FBI, Estonian police and NASA-OIG in 2011.',\n overviewImage: '/img/learning/security/dns-changer/operation-ghost-click-small.jpg',\n overviewImageAlt: 'Redirecting DNS traffic maliciously',\n overviewDescription: 'The DNS changer malware changed the DNS servers of its victims. It was shut down by the FBI, Estonian police and NASA-OIG in 2011.',\n author: ruurtjan,\n img1024x512: 'https://www.nslookup.io/img/learning/security/dns-changer/dns-changer-social.jpg',\n img1200x630: 'https://www.nslookup.io/img/learning/security/dns-changer/dns-changer-social.jpg',\n written: new Date('2022-04-19T23:49:01.320Z'),\n updated: new Date('2023-03-28T11:59:49.110Z'),\n};\n\nconst __default__ = {\n meta,\n};\n\nexport default /*#__PURE__*/_defineComponent({\n ...__default__,\n __name: 'DnsChanger',\n setup(__props) {\n\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (_openBlock(), _createBlock(_Teleport, { to: \"head\" }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent('script'), { type: \"application/ld+json\" }, {\n default: _withCtx(() => [\n _createTextVNode(\" { \\\"@context\\\": \\\"https://schema.org\\\", \\\"@type\\\": \\\"ImageObject\\\", \\\"author\\\": { \\\"@type\\\": \\\"Person\\\", \\\"email\\\": \\\"mailto:ruurtjan@nslookup.io\\\", \\\"image\\\": \\\"https://www.nslookup.io/img/ruurtjan-lg.jpg\\\", \\\"jobTitle\\\": \\\"CEO\\\", \\\"name\\\": \\\"Ruurtjan Pul\\\", \\\"url\\\": \\\"https://www.nslookup.io/about/ruurtjan-pul/\\\" }, \\\"copyrightHolder\\\": { \\\"@type\\\": \\\"Organization\\\", \\\"url\\\": \\\"https://www.nslookup.io/\\\", \\\"email\\\": \\\"hello@nslookup.io\\\" }, \\\"copyrightYear\\\": 2023, \\\"contentUrl\\\": \\\"https://www.nslookup.io/img/learning/security/dns-changer/operation-ghost-click.jpg\\\", \\\"license\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\", \\\"acquireLicensePage\\\": \\\"https://creativecommons.org/licenses/by/4.0/\\\" } \")\n ]),\n _: 1\n }))\n ])),\n _createVNode(BlogPost, {\n title: meta.title,\n description: meta.description,\n url: `https://www.nslookup.io${meta.url}`,\n breadcrumbs: meta.breadcrumbs,\n img1024x512: meta.img1024x512,\n img1200x630: meta.img1200x630,\n written: meta.written,\n updated: meta.updated,\n author: meta.author,\n editor: meta.editor\n }, {\n default: _withCtx(() => [\n _hoisted_1,\n _hoisted_2,\n _hoisted_3,\n _createElementVNode(\"p\", null, [\n _createTextVNode(\"The DNS changer malware pointed the victims DNS configuration to their own malicious DNS servers in Estonia, Chicago, and New York. This caused \"),\n _createVNode(_component_router_link, { to: \"/\" }, {\n default: _withCtx(() => [\n _createTextVNode(\"DNS lookup\")\n ]),\n _: 1\n }),\n _createTextVNode(\" queries to be directed to malicious DNS servers, and in turn allowed the group to re-route internet traffic to malicious web servers. These web servers then served to replace the links in search results, and replace ads on popular websites. At the time, DNS wasn't as secure as it is today, making this attack quite effective.\")\n ]),\n _hoisted_4,\n _hoisted_5,\n _hoisted_6\n ]),\n _: 1\n }, 8, [\"title\", \"description\", \"url\", \"breadcrumbs\", \"img1024x512\", \"img1200x630\", \"written\", \"updated\", \"author\", \"editor\"])\n ], 64))\n}\n}\n\n})","import script from \"./DnsChanger.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./DnsChanger.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import{defineComponent as y,ref as d,provide as C,inject as O,computed as m,watchEffect as M,onMounted as P,onUnmounted as h}from\"vue\";import{Keys as f}from'../../keyboard.js';import{match as I}from'../../utils/match.js';import{render as b,Features as R}from'../../utils/render.js';import{useId as E}from'../../hooks/use-id.js';import{dom as p}from'../../utils/dom.js';import{useOpenClosedProvider as w,State as v,useOpenClosed as H}from'../../internal/open-closed.js';import{useResolveButtonType as L}from'../../hooks/use-resolve-button-type.js';var j=(o=>(o[o.Open=0]=\"Open\",o[o.Closed=1]=\"Closed\",o))(j||{});let x=Symbol(\"DisclosureContext\");function g(t){let r=O(x,null);if(r===null){let o=new Error(`<${t} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(o,g),o}return r}let B=Symbol(\"DisclosurePanelContext\");function $(){return O(B,null)}let Q=y({name:\"Disclosure\",props:{as:{type:[Object,String],default:\"template\"},defaultOpen:{type:[Boolean],default:!1}},setup(t,{slots:r,attrs:o}){let u=d(t.defaultOpen?0:1),e=d(null),i=d(null),s={buttonId:d(null),panelId:d(null),disclosureState:u,panel:e,button:i,toggleDisclosure(){u.value=I(u.value,{[0]:1,[1]:0})},closeDisclosure(){u.value!==1&&(u.value=1)},close(l){s.closeDisclosure();let a=(()=>l?l instanceof HTMLElement?l:l.value instanceof HTMLElement?p(l):p(s.button):p(s.button))();a==null||a.focus()}};return C(x,s),w(m(()=>I(u.value,{[0]:v.Open,[1]:v.Closed}))),()=>{let{defaultOpen:l,...a}=t,c={open:u.value===0,close:s.close};return b({theirProps:a,ourProps:{},slot:c,slots:r,attrs:o,name:\"Disclosure\"})}}}),V=y({name:\"DisclosureButton\",props:{as:{type:[Object,String],default:\"button\"},disabled:{type:[Boolean],default:!1},id:{type:String,default:()=>`headlessui-disclosure-button-${E()}`}},setup(t,{attrs:r,slots:o,expose:u}){let e=g(\"DisclosureButton\");P(()=>{e.buttonId.value=t.id}),h(()=>{e.buttonId.value=null});let i=$(),s=m(()=>i===null?!1:i.value===e.panelId.value),l=d(null);u({el:l,$el:l}),s.value||M(()=>{e.button.value=l.value});let a=L(m(()=>({as:t.as,type:r.type})),l);function c(){var n;t.disabled||(s.value?(e.toggleDisclosure(),(n=p(e.button))==null||n.focus()):e.toggleDisclosure())}function D(n){var S;if(!t.disabled)if(s.value)switch(n.key){case f.Space:case f.Enter:n.preventDefault(),n.stopPropagation(),e.toggleDisclosure(),(S=p(e.button))==null||S.focus();break}else switch(n.key){case f.Space:case f.Enter:n.preventDefault(),n.stopPropagation(),e.toggleDisclosure();break}}function T(n){switch(n.key){case f.Space:n.preventDefault();break}}return()=>{let n={open:e.disclosureState.value===0},{id:S,...k}=t,K=s.value?{ref:l,type:a.value,onClick:c,onKeydown:D}:{id:S,ref:l,type:a.value,\"aria-expanded\":t.disabled?void 0:e.disclosureState.value===0,\"aria-controls\":p(e.panel)?e.panelId.value:void 0,disabled:t.disabled?!0:void 0,onClick:c,onKeydown:D,onKeyup:T};return b({ourProps:K,theirProps:k,slot:n,attrs:r,slots:o,name:\"DisclosureButton\"})}}}),X=y({name:\"DisclosurePanel\",props:{as:{type:[Object,String],default:\"div\"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},id:{type:String,default:()=>`headlessui-disclosure-panel-${E()}`}},setup(t,{attrs:r,slots:o,expose:u}){let e=g(\"DisclosurePanel\");P(()=>{e.panelId.value=t.id}),h(()=>{e.panelId.value=null}),u({el:e.panel,$el:e.panel}),C(B,e.panelId);let i=H(),s=m(()=>i!==null?(i.value&v.Open)===v.Open:e.disclosureState.value===0);return()=>{let l={open:e.disclosureState.value===0,close:e.close},{id:a,...c}=t,D={id:a,ref:e.panel};return b({ourProps:D,theirProps:c,slot:l,attrs:r,slots:o,features:R.RenderStrategy|R.Static,visible:s.value,name:\"DisclosurePanel\"})}}});export{Q as Disclosure,V as DisclosureButton,X as DisclosurePanel};\n"],"names":["createElementVNode","_createElementVNode","openBlock","_openBlock","createElementBlock","_createElementBlock","module","exports","_ctx","_cache","xmlns","fill","viewBox","stroke","d","authorToLdJson","author","name","bio","join","imgLarge","url","socials","map","social","toString","alumniOf","ruurtjan","firstName","lastName","img","title","platform","jeff","steven","holly","undefined","learningBreadcrumb","commandLineToolsBreadcrumb","emailBreadcrumb","aboutBreadcrumb","_hoisted_1","_defineComponent","__name","props","sitekey","type","String","required","id","setup","__props","executeWhenTurnstileLoads","cb","console","log","window","turnstile","setTimeout","onMounted","render","__exports__","class","_hoisted_2","_hoisted_3","key","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","Object","_component_router_link","_resolveComponent","_createBlock","to","default","_withCtx","src","alt","_","_createTextVNode","_toDisplayString","_Fragment","_renderList","bioParagraph","href","_createCommentVNode","input","ref","recentlyClicked","router","useRouter","route","currentRoute","value","fullPath","clicked","setAttribute","select","document","execCommand","blur","onClick","ref_key","throttle","fn","wait","inThrottle","lastFn","lastTime","context","this","args","arguments","clearTimeout","Date","now","apply","Math","max","editor","description","breadcrumbs","Array","img1024x512","img1200x630","written","updated","content","tocElements","active","headings","from","querySelectorAll","filter","h","classList","contains","e","text","innerText","trim","toLowerCase","replace","indent","tagName","throttledOnScroll","slice","reverse","find","getBoundingClientRect","top","innerHeight","addEventListener","_Teleport","_createVNode","MetaTags","modified","_resolveDynamicComponent","_unref","getFullYear","replaceAll","ContentPage","Breadcrumbs","routes","concat","length","CopyArticleLink","datetime","toISOString","formatDate","_renderSlot","$slots","AuthorBox","tocElement","_normalizeClass","DnsForDevelopersAd","index","_createStaticVNode","icon","heading","styles","info","container","body","warning","step","Number","imgWidth","imgHeight","width","height","syntax","slots","useSlots","code","watchEffect","innerHTML","children","Prism","HeaderComponent","FooterComponent","x","y","patternUnits","preserveAspectRatio","x1","y1","x2","y2","gradientUnits","offset","method","action","for","maxlength","autocomplete","useRoute","includes","hash","TurnstileCaptcha","Alert","target","rel","sections","articles","WhatIsDns","WhatIsADnsResolver","WhatIsADnsZone","ZoneDelegation","WhatIsTheDnsRootZone","RecursiveVersusAuthoritativeDns","DnsRecordTypes","DnsPropagationDoesNotExist","RecordTypeNs","RecordTypeCname","RecordTypeMx","RecordTypeTxt","RecordTypeA","RecordTypeAAAA","RecordTypeSoa","RecordTypeSrv","RecordTypePtr","EmailSecuritySpf","EmailSecurityDkim","EmailSecurityDmarc","MxVsSpfVsDmarcVsDkimVsBimi","EmailSecurityHowToMergeDmarcRecords","EmailSecurityUsingDifferentDmarcRecordsForSubdomains","HowDoesDomainNameRegistrationWork","TipsForPickingADomainName","FindingWhoisServersUsingSrvRecords","TheLifeOfADnsQueryInKubernetes","WhatIsAGoodTtlForDns","HowToSpecifyADnsServerInNslookup","DnsChanger","section","post","overviewImage","overviewImageAlt","tag","overviewDescription","insertConsentLinks","_withModifiers","$event","askConsent","GuideStep","meta","__default__","BlogPost","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_44","_hoisted_45","_hoisted_46","_hoisted_47","_hoisted_48","_hoisted_49","breadcrumb","_hoisted_50","_hoisted_51","_hoisted_52","_hoisted_53","_hoisted_54","_hoisted_55","_hoisted_56","_hoisted_57","_hoisted_58","redirectTo","domain","push","domainNameToUrlPath","CodeBlock","Callout","DomainSearch","emphasize","buttonText","onSubmitted","Disclosure","as","open","DisclosureButton","ChevronDownIcon","DisclosurePanel","_imports_0","_hoisted_59","_hoisted_60","_hoisted_61","_hoisted_62","_hoisted_63","_hoisted_64","_hoisted_65","_hoisted_66","_hoisted_67","_hoisted_68","_hoisted_69","_hoisted_70","_hoisted_71","_hoisted_72","_hoisted_73","_hoisted_74","_hoisted_75","_hoisted_76","_hoisted_77","prefill","_hoisted_78","_hoisted_79","_hoisted_80","_hoisted_81","_hoisted_82","_hoisted_83","_hoisted_84","_hoisted_85","_hoisted_86","_hoisted_87","_hoisted_88","_hoisted_89","_hoisted_90","_hoisted_91","_hoisted_92","_hoisted_93","_hoisted_94","_hoisted_95","_hoisted_96","_hoisted_97","_hoisted_98","_hoisted_99","_hoisted_100","_hoisted_101","_hoisted_102","_hoisted_103","_hoisted_104","_hoisted_105","_hoisted_106","_hoisted_107","_hoisted_108","_hoisted_109","_hoisted_110","_hoisted_111","_hoisted_112","_hoisted_113","_hoisted_114","_hoisted_115","_hoisted_116","_hoisted_117","_hoisted_118","_hoisted_119","_component_CodeBlock","CalloutComponent","_imports_1","_imports_2","j","o","Open","Closed","Symbol","g","t","r","Error","captureStackTrace","B","$","Q","defaultOpen","Boolean","attrs","u","i","s","buttonId","panelId","disclosureState","panel","button","toggleDisclosure","closeDisclosure","close","l","a","HTMLElement","focus","c","theirProps","ourProps","slot","V","disabled","expose","el","$el","n","D","S","preventDefault","stopPropagation","T","k","K","onKeydown","onKeyup","X","static","unmount","features","visible"],"sourceRoot":""}