{"version":3,"sources":["../../src/data/patterns.json","../../src/core/patterns-loader.ts","../../src/core/constants.ts","../../src/data/bot-patterns.json","../../src/middleware/bot-detection.ts","../../src/middleware/fastify.ts"],"names":[],"mappings":";AAAA,IAAA,gBAAA,GAAA;AAAA,EAeE,QAAA,EAAY;AAAA,IACV,GAAA,EAAO;AAAA,MACL,IAAA,EAAQ,4BAAA;AAAA,MACR,QAAA,EAAY,UAAA;AAAA,MACZ,KAAA,EAAS,UAAA;AAAA,MACT,KAAA,EAAS;AAAA,QACP;AAAA,UACE,EAAA,EAAM,kBAAA;AAAA,UACN,OAAA,EAAW,kCAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,yDAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,gBAAA;AAAA,UACN,OAAA,EAAW,eAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,4CAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,yBAAA;AAAA,UACN,OAAA,EAAW,uBAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,+DAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,0BAAA;AAAA,UACN,OAAA,EAAW,CAAA,uCAAA,CAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,4EAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,4BAAA;AAAA,UACN,OAAA,EAAW,mCAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,wEAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,kBAAA;AAAA,UACN,OAAA,EAAW,kCAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,4BAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,YAAA;AAAA,UACN,OAAA,EAAW,cAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,2CAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,iBAAA;AAAA,UACN,OAAA,EAAW,gCAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,4EAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,eAAA;AAAA,UACN,OAAA,EAAW,mBAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,wIAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,kBAAA;AAAA,UACN,OAAA,EAAW,kCAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,4BAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,YAAA;AAAA,UACN,OAAA,EAAW,cAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,2CAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,WAAA;AAAA,UACN,OAAA,EAAW,aAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,oBAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,cAAA;AAAA,UACN,OAAA,EAAW,8CAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,iFAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,cAAA;AAAA,UACN,OAAA,EAAW,eAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,4BAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,iBAAA;AAAA,UACN,OAAA,EAAW,WAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,iCAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,gBAAA;AAAA,UACN,OAAA,EAAW,uBAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,wCAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,oBAAA;AAAA,UACN,OAAA,EAAW,kBAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,mFAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,oBAAA;AAAA,UACN,OAAA,EAAW,kBAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,uEAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,oBAAA;AAAA,UACN,OAAA,EAAW,kBAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,mFAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,oBAAA;AAAA,UACN,OAAA,EAAW,kBAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,wEAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,oBAAA;AAAA,UACN,OAAA,EAAW,mBAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,6FAAA;AAAA,UACf,UAAA,EAAc;AAAA;AAChB,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,GAAA,EAAK,OAAA;AAAA,QACL,GAAA,EAAK,MAAA;AAAA,QACL,GAAA,EAAK,MAAA;AAAA,QACL,GAAA,EAAM,QAAA;AAAA,QACN,GAAA,EAAK;AAAA;AACP,KACF;AAAA,IACA,aAAA,EAAiB;AAAA,MACf,IAAA,EAAQ,eAAA;AAAA,MACR,QAAA,EAAY,UAAA;AAAA,MACZ,KAAA,EAAS,UAAA;AAAA,MACT,KAAA,EAAS;AAAA,QACP;AAAA,UACE,EAAA,EAAM,eAAA;AAAA,UACN,OAAA,EAAW,6UAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,kSAAA;AAAA,UACf,UAAA,EAAc,IAAA;AAAA,UACd,qBAAA,EAAyB;AAAA,SAC3B;AAAA,QACA;AAAA,UACE,EAAA,EAAM,eAAA;AAAA,UACN,OAAA,EAAW,sCAAA;AAAA,UACX,KAAA,EAAS,GAAA;AAAA,UACT,WAAA,EAAe,uVAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,sBAAA;AAAA,UACN,OAAA,EAAW,4BAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,gCAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,qBAAA;AAAA,UACN,OAAA,EAAW,CAAA,+CAAA,CAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,oCAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,kBAAA;AAAA,UACN,OAAA,EAAW,6BAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,iCAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,iBAAA;AAAA,UACN,OAAA,EAAW,CAAA,gDAAA,CAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,qCAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,YAAA;AAAA,UACN,OAAA,EAAW,gCAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,yCAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,gBAAA;AAAA,UACN,OAAA,EAAW,qBAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,6CAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,eAAA;AAAA,UACN,OAAA,EAAW,oBAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,uDAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,oBAAA;AAAA,UACN,OAAA,EAAW,wBAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,uDAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,2BAAA;AAAA,UACN,OAAA,EAAW,qEAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,qPAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,eAAA;AAAA,UACN,OAAA,EAAW,0BAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,gIAAA;AAAA,UACf,UAAA,EAAc,IAAA;AAAA,UACd,qBAAA,EAAyB;AAAA,SAC3B;AAAA,QACA;AAAA,UACE,EAAA,EAAM,oBAAA;AAAA,UACN,OAAA,EAAW,QAAA;AAAA,UACX,KAAA,EAAS,GAAA;AAAA,UACT,WAAA,EAAe,8JAAA;AAAA,UACf,UAAA,EAAc,IAAA;AAAA,UACd,qBAAA,EAAyB;AAAA;AAC3B;AACF,KACF;AAAA,IACA,eAAA,EAAmB;AAAA,MACjB,IAAA,EAAQ,iBAAA;AAAA,MACR,QAAA,EAAY,UAAA;AAAA,MACZ,KAAA,EAAS,UAAA;AAAA,MACT,KAAA,EAAS;AAAA,QACP;AAAA,UACE,EAAA,EAAM,iBAAA;AAAA,UACN,OAAA,EAAW,sNAAA;AAAA,UACX,KAAA,EAAS,GAAA;AAAA,UACT,WAAA,EAAe,2BAAA;AAAA,UACf,UAAA,EAAc;AAAA;AAChB,OACF;AAAA,MACA,cAAA,EAAkB;AAAA,QAChB,KAAA;AAAA,QACA,MAAA;AAAA,QACA,KAAA;AAAA,QACA,MAAA;AAAA,QACA,KAAA;AAAA,QACA,KAAA;AAAA,QACA,KAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA;AAAA,QACA,KAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA;AAAA,QACA,SAAA;AAAA,QACA,OAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAA;AAAA,QACA,MAAA;AAAA,QACA,OAAA;AAAA,QACA,aAAA;AAAA,QACA,WAAA;AAAA,QACA,cAAA;AAAA,QACA,YAAA;AAAA,QACA,MAAA;AAAA,QACA,OAAA;AAAA,QACA,SAAA;AAAA,QACA,QAAA;AAAA,QACA,UAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAA;AAAA,QACA,SAAA;AAAA,QACA,YAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,iBAAA,EAAqB;AAAA,MACnB,IAAA,EAAQ,mBAAA;AAAA,MACR,QAAA,EAAY,UAAA;AAAA,MACZ,KAAA,EAAS,UAAA;AAAA,MACT,KAAA,EAAS;AAAA,QACP;AAAA,UACE,EAAA,EAAM,kBAAA;AAAA,UACN,OAAA,EAAW,kPAAA;AAAA,UACX,KAAA,EAAS,GAAA;AAAA,UACT,WAAA,EAAe,+UAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,2BAAA;AAAA,UACN,OAAA,EAAW,QAAA;AAAA,UACX,KAAA,EAAS,GAAA;AAAA,UACT,WAAA,EAAe,mGAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,iBAAA;AAAA,UACN,OAAA,EAAW,yBAAA;AAAA,UACX,KAAA,EAAS,GAAA;AAAA,UACT,WAAA,EAAe,wMAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,oBAAA;AAAA,UACN,OAAA,EAAW,eAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,uGAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,kBAAA;AAAA,UACN,OAAA,EAAW,WAAA;AAAA,UACX,KAAA,EAAS,GAAA;AAAA,UACT,WAAA,EAAe,kMAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,iBAAA;AAAA,UACN,OAAA,EAAW,2FAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,qHAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,uBAAA;AAAA,UACN,OAAA,EAAW,8DAAA;AAAA,UACX,KAAA,EAAS,GAAA;AAAA,UACT,WAAA,EAAe,sJAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,sBAAA;AAAA,UACN,OAAA,EAAW,wOAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,gGAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,uBAAA;AAAA,UACN,OAAA,EAAW,iOAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,+IAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,kBAAA;AAAA,UACN,OAAA,EAAW,aAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,2DAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,oBAAA;AAAA,UACN,OAAA,EAAW,sEAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,gEAAA;AAAA,UACf,UAAA,EAAc;AAAA;AAChB;AACF,KACF;AAAA,IACA,cAAA,EAAkB;AAAA,MAChB,IAAA,EAAQ,gBAAA;AAAA,MACR,QAAA,EAAY,MAAA;AAAA,MACZ,KAAA,EAAS,UAAA;AAAA,MACT,KAAA,EAAS;AAAA,QACP;AAAA,UACE,EAAA,EAAM,aAAA;AAAA,UACN,OAAA,EAAW,SAAA;AAAA,UACX,KAAA,EAAS,GAAA;AAAA,UACT,WAAA,EAAe,uBAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,uBAAA;AAAA,UACN,OAAA,EAAW,YAAA;AAAA,UACX,KAAA,EAAS,GAAA;AAAA,UACT,WAAA,EAAe,wBAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,cAAA;AAAA,UACN,OAAA,EAAW,QAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,+BAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,qBAAA;AAAA,UACN,OAAA,EAAW,OAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,sCAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,2BAAA;AAAA,UACN,OAAA,EAAW,OAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,0CAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,yBAAA;AAAA,UACN,OAAA,EAAW,oBAAA;AAAA,UACX,KAAA,EAAS,GAAA;AAAA,UACT,WAAA,EAAe,6CAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,gBAAA;AAAA,UACN,OAAA,EAAW,KAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,yCAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,wBAAA;AAAA,UACN,OAAA,EAAW,OAAA;AAAA,UACX,KAAA,EAAS,GAAA;AAAA,UACT,WAAA,EAAe,yCAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,oBAAA;AAAA,UACN,OAAA,EAAW,cAAA;AAAA,UACX,KAAA,EAAS,GAAA;AAAA,UACT,WAAA,EAAe,0JAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,wBAAA;AAAA,UACN,OAAA,EAAW,eAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,mKAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,4BAAA;AAAA,UACN,OAAA,EAAW,eAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,iKAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,wBAAA;AAAA,UACN,OAAA,EAAW,iBAAA;AAAA,UACX,KAAA,EAAS,GAAA;AAAA,UACT,WAAA,EAAe,oOAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,0BAAA;AAAA,UACN,OAAA,EAAW,iBAAA;AAAA,UACX,KAAA,EAAS,GAAA;AAAA,UACT,WAAA,EAAe,kMAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,kBAAA;AAAA,UACN,OAAA,EAAW,6BAAA;AAAA,UACX,KAAA,EAAS,GAAA;AAAA,UACT,WAAA,EAAe,mNAAA;AAAA,UACf,UAAA,EAAc;AAAA;AAChB;AACF,KACF;AAAA,IACA,mBAAA,EAAuB;AAAA,MACrB,IAAA,EAAQ,qBAAA;AAAA,MACR,QAAA,EAAY,MAAA;AAAA,MACZ,KAAA,EAAS,UAAA;AAAA,MACT,SAAA,EAAa;AAAA,QACX,YAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,cAAA,EAAkB;AAAA,QAChB,WAAA;AAAA,QACA,aAAA;AAAA,QACA,WAAA;AAAA,QACA,kBAAA;AAAA,QACA,kBAAA;AAAA,QACA,kBAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,cAAA,EAAkB;AAAA,MAChB,IAAA,EAAQ,gBAAA;AAAA,MACR,QAAA,EAAY,MAAA;AAAA,MACZ,KAAA,EAAS,UAAA;AAAA,MACT,KAAA,EAAS;AAAA,QACP;AAAA,UACE,EAAA,EAAM,cAAA;AAAA,UACN,OAAA,EAAW,WAAA;AAAA,UACX,KAAA,EAAS,GAAA;AAAA,UACT,WAAA,EAAe,iNAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,uBAAA;AAAA,UACN,OAAA,EAAW,8BAAA;AAAA,UACX,KAAA,EAAS,GAAA;AAAA,UACT,WAAA,EAAe,4JAAA;AAAA,UACf,UAAA,EAAc,IAAA;AAAA,UACd,qBAAA,EAAyB;AAAA,SAC3B;AAAA,QACA;AAAA,UACE,EAAA,EAAM,iBAAA;AAAA,UACN,OAAA,EAAW,+CAAA;AAAA,UACX,KAAA,EAAS,GAAA;AAAA,UACT,WAAA,EAAe,gWAAA;AAAA,UACf,UAAA,EAAc,IAAA;AAAA,UACd,qBAAA,EAAyB;AAAA,SAC3B;AAAA,QACA;AAAA,UACE,EAAA,EAAM,gBAAA;AAAA,UACN,OAAA,EAAW,cAAA;AAAA,UACX,KAAA,EAAS,GAAA;AAAA,UACT,WAAA,EAAe,4IAAA;AAAA,UACf,UAAA,EAAc,IAAA;AAAA,UACd,qBAAA,EAAyB;AAAA;AAC3B;AACF,KACF;AAAA,IACA,eAAA,EAAmB;AAAA,MACjB,IAAA,EAAQ,iBAAA;AAAA,MACR,QAAA,EAAY,MAAA;AAAA,MACZ,KAAA,EAAS,UAAA;AAAA,MACT,KAAA,EAAS;AAAA,QACP;AAAA,UACE,EAAA,EAAM,wBAAA;AAAA,UACN,OAAA,EAAW,CAAA,uEAAA,CAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,CAAA,sMAAA,CAAA;AAAA,UACf,UAAA,EAAc,IAAA;AAAA,UACd,qBAAA,EAAyB;AAAA,SAC3B;AAAA,QACA;AAAA,UACE,EAAA,EAAM,uBAAA;AAAA,UACN,OAAA,EAAW,iFAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,8GAAA;AAAA,UACf,UAAA,EAAc,IAAA;AAAA,UACd,qBAAA,EAAyB;AAAA;AAC3B;AACF,KACF;AAAA,IACA,sBAAA,EAA0B;AAAA,MACxB,IAAA,EAAQ,oCAAA;AAAA,MACR,QAAA,EAAY,MAAA;AAAA,MACZ,KAAA,EAAS,UAAA;AAAA,MACT,KAAA,EAAS;AAAA,QACP;AAAA,UACE,EAAA,EAAM,2BAAA;AAAA,UACN,OAAA,EAAW,8FAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,6LAAA;AAAA,UACf,UAAA,EAAc,IAAA;AAAA,UACd,qBAAA,EAAyB;AAAA,SAC3B;AAAA,QACA;AAAA,UACE,EAAA,EAAM,2BAAA;AAAA,UACN,OAAA,EAAW,+CAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,+aAAA;AAAA,UACf,UAAA,EAAc,IAAA;AAAA,UACd,qBAAA,EAAyB;AAAA;AAC3B;AACF,KACF;AAAA,IACA,IAAA,EAAQ;AAAA,MACN,IAAA,EAAQ,uCAAA;AAAA,MACR,QAAA,EAAY,UAAA;AAAA,MACZ,KAAA,EAAS,UAAA;AAAA,MACT,KAAA,EAAS;AAAA,QACP;AAAA,UACE,EAAA,EAAM,kBAAA;AAAA,UACN,OAAA,EAAW,iBAAA;AAAA,UACX,KAAA,EAAS,GAAA;AAAA,UACT,WAAA,EAAe,+DAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,wBAAA;AAAA,UACN,OAAA,EAAW,cAAA;AAAA,UACX,YAAA,EAAgB,iCAAA;AAAA,UAChB,KAAA,EAAS,GAAA;AAAA,UACT,WAAA,EAAe,uNAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,cAAA;AAAA,UACN,OAAA,EAAW,gBAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,uDAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,eAAA;AAAA,UACN,OAAA,EAAW,YAAA;AAAA,UACX,YAAA,EAAgB,+BAAA;AAAA,UAChB,KAAA,EAAS,GAAA;AAAA,UACT,WAAA,EAAe,oKAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,yBAAA;AAAA,UACN,OAAA,EAAW,sDAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,qDAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,kBAAA;AAAA,UACN,OAAA,EAAW,wBAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,8CAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,uBAAA;AAAA,UACN,OAAA,EAAW,oEAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,gDAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,oBAAA;AAAA,UACN,OAAA,EAAW,sGAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,oGAAA;AAAA,UACf,UAAA,EAAc;AAAA;AAChB;AACF,KACF;AAAA,IACA,aAAA,EAAiB;AAAA,MACf,IAAA,EAAQ,mBAAA;AAAA,MACR,QAAA,EAAY,UAAA;AAAA,MACZ,KAAA,EAAS,UAAA;AAAA,MACT,KAAA,EAAS;AAAA,QACP;AAAA,UACE,EAAA,EAAM,aAAA;AAAA,UACN,OAAA,EAAW,WAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,8BAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,YAAA;AAAA,UACN,OAAA,EAAW,UAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,6BAAA;AAAA,UACf,UAAA,EAAc;AAAA,SAChB;AAAA,QACA;AAAA,UACE,EAAA,EAAM,YAAA;AAAA,UACN,OAAA,EAAW,CAAA,cAAA,CAAA;AAAA,UACX,KAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAe,2BAAA;AAAA,UACf,UAAA,EAAc;AAAA;AAChB;AACF;AACF,GA4DJ,CAAA;;;AC7tBA,IAAM,IAAA,GAAO,gBAAA;AAGb,IAAM,cAAA,mBAAiB,IAAI,GAAA,CAAI,CAAC,GAAA,EAAK,KAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAG,CAAC,CAAA;AAE7D,SAAS,eAAe,KAAA,EAAmC;AACzD,EAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AACnB,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,KAAA,MAAW,MAAM,KAAA,EAAO;AACtB,IAAA,IAAI,cAAA,CAAe,IAAI,EAAE,CAAA,IAAK,CAAC,GAAA,CAAI,QAAA,CAAS,EAAE,CAAA,EAAG,GAAA,IAAO,EAAA;AAAA,EAC1D;AACA,EAAA,OAAO,GAAA;AACT;AAQO,SAAS,gBAAgB,QAAA,EAA4B;AAC1D,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA;AAClC,EAAA,IAAI,CAAC,GAAA,EAAK,KAAA,EAAO,OAAO,EAAC;AACzB,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,KAAA,MAAW,IAAA,IAAQ,IAAI,KAAA,EAAO;AAC5B,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,YAAA,IAAgB,IAAA,CAAK,OAAA;AACtC,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,GAAA,CAAI,IAAA,CAAK,IAAI,MAAA,CAAO,GAAA,EAAK,eAAe,IAAA,CAAK,KAAK,CAAC,CAAC,CAAA;AAAA,EACtD;AACA,EAAA,OAAO,GAAA;AACT;AAOO,SAAS,WAAA,CAAY,QAAA,EAAkB,EAAA,EAAY,KAAA,EAAoC;AAC5F,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,EAAG,KAAA,EAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,EAAE,CAAA;AACpE,EAAA,IAAI,CAAC,MAAM,OAAO,MAAA;AAClB,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,YAAA,IAAgB,IAAA,CAAK,OAAA;AACtC,EAAA,IAAI,CAAC,KAAK,OAAO,MAAA;AACjB,EAAA,OAAO,IAAI,MAAA,CAAO,GAAA,EAAK,eAAwB,IAAA,CAAK,KAAK,CAAC,CAAA;AAC5D;AAMO,SAAS,iBAAiB,QAAA,EAA4B;AAC3D,EAAA,OAAO,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,EAAG,kBAAkB,EAAC;AACrD;;;ACtEO,IAAM,UAAA,GAAa;AAAA;AAAA,EAExB,iBAAA,EAAmB,GAAA;AAAA;AAAA,EAEnB,oBAAA,EAAsB,GASxB,CAAA;AAKO,IAAM,OAAA,GAAU;AAAA;AAAA,EAErB,WAAA,EAAa;AAAA,IACX,oBAAA;AAAA,IACA,mBAAA;AAAA,IACA,kCAAA;AAAA,IACA,6BAAA;AAAA,IACA,iBAAA;AAAA,IACA,mBAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,IAAI,CAAA;AAAA;AAAA,EAEX,YAAA,EAAc,OAAA;AAAA;AAAA,EAEd,aAAA,EAAe,MAAA;AAAA;AAAA,EAEf,oBAAA,EAAsB,SAAA;AAAA;AAAA,EAEtB,eAAA,EAAiB,iCAAA;AAAA;AAAA,EAEjB,kBAAA,EAAoB,0CAAA;AAAA;AAAA,EAEpB,aAAA,EAAe;AACjB,CAAA;AAkB4B,gBAAgB,KAAK;AAKd,gBAAgB,KAAK;AAS5B,gBAAgB,eAAe;AAM9B,gBAAgB,gBAAgB;AAM7B,gBAAgB,mBAAmB;AAiB/B,IAAI,GAAA,CAAI,gBAAA,CAAiB,qBAAqB,CAAC;AAG/C,IAAI,GAAA,CAAI,gBAAA,CAAiB,iBAAiB,CAAC;AAkB/E,IAAM,eAAA,GAAkB,WAAA,CAAY,iBAAA,EAAmB,iBAAiB,CAAA;AACxE,IAAI,CAAC,eAAA,EAAiB;AACpB,EAAA,MAAM,IAAI,MAAM,wDAAwD,CAAA;AAC1E;;;AClJA,IAAA,oBAAA,GAAA;AAAA,EACE;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,aAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,WAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,WAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,0BAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,wBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,OAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,4BAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,4BAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,aAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,aAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,SAAA;AAAA,IACN,QAAA,EAAY,WAAA;AAAA,IACZ,IAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,YAAA;AAAA,IACN,QAAA,EAAY,WAAA;AAAA,IACZ,IAAA,EAAQ,UAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,WAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,WAAA;AAAA,IACZ,IAAA,EAAQ,WAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,YAAA;AAAA,IACN,QAAA,EAAY,WAAA;AAAA,IACZ,IAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,WAAA;AAAA,IACN,QAAA,EAAY,WAAA;AAAA,IACZ,IAAA,EAAQ,WAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,UAAA;AAAA,IACN,QAAA,EAAY,WAAA;AAAA,IACZ,IAAA,EAAQ,UAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,WAAA;AAAA,IACN,QAAA,EAAY,WAAA;AAAA,IACZ,IAAA,EAAQ,WAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,6BAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,6BAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,yBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,yBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,yBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,yBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,4BAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,4BAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,yBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,yBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,4BAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,4BAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,4BAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,2BAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,2BAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,4BAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,4BAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,0BAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,0BAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qCAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,qCAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,0BAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,0BAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,uBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,uBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,uBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,uBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,aAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,uBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,uBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,uBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,uBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,YAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,MAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,QAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,wBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,wBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,uBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,uBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,SAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,KAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,KAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,UAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,UAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,QAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,aAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,UAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,UAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,wBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,aAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,YAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,OAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,uBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,WAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,WAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,aAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,UAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,MAAA;AAAA,IACN,QAAA,EAAY,kBAAA;AAAA,IACZ,IAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,OAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,OAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,SAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,aAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,YAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,QAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,KAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,SAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,MAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,uBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,uBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,yBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,UAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,UAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,MAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,UAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,UAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,OAAA;AAAA,IACN,QAAA,EAAY,kBAAA;AAAA,IACZ,IAAA,EAAQ,OAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,WAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,WAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,UAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,aAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,aAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,UAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,UAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,yBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,yBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,aAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,wBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,wBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,wBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,wBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,0BAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,0BAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,WAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,4BAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,4BAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,uBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,uBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,uBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,uBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,wBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,wBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,2BAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,6BAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,6BAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,4BAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,4BAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,uBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,uBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,uBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,UAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,WAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,2BAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,2BAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,eAAA;AAAA,IACZ,IAAA,EAAQ,WAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,6BAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,6BAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,wBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,wBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,aAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,SAAA,EAAa;AAAA,MACX,qBAAA;AAAA,MACA;AAAA;AACF,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,wBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,UAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,SAAA,EAAa;AAAA,MACX,YAAA;AAAA,MACA;AAAA;AACF,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV,qBAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,aAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,aAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,aAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,WAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,UAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,aAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,SAAA,EAAa;AAAA,MACX,qBAAA;AAAA,MACA;AAAA;AACF,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,wBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,wBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,UAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,UAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,QAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,SAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,SAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,aAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,QAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,SAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,WAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,WAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,QAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,UAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,UAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,aAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,WAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,WAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,YAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,0BAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,0BAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,6BAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,6BAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,wBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,wBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,UAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,UAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,yBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,yBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,0BAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,0BAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,uBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,uBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,uBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,uBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,yBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,yBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,uBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,uBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,0BAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,0BAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,uBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,uBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,UAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,UAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,yBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,yBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,yBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,yBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,wBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,wBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,QAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,YAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,SAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,SAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,uBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,uBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,aAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,MAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,SAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,SAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,aAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,aAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,wBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,wBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,WAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,WAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,2BAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,2BAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,QAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,WAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,SAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,aAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,4BAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,4BAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,wBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,wBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,WAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,WAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,UAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,UAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,UAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,UAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,YAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,wBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,wBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,wBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,wBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,aAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,0BAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,0BAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,QAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,uBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,uBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,uBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,uBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,0BAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,0BAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,wBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,wBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,UAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,UAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,qBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,aAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,2BAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,2BAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,wBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,wBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,sBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,QAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,wBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,wBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAY,SAAA;AAAA,IACZ,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,wBAAA;AAAA,IACN,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY,eAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,4BAAA;AAAA,IACN,IAAA,EAAQ,wBAAA;AAAA,IACR,QAAA,EAAY,eAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kCAAA;AAAA,IACN,IAAA,EAAQ,8BAAA;AAAA,IACR,QAAA,EAAY,eAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,IAAA,EAAQ,aAAA;AAAA,IACR,QAAA,EAAY,SAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,wBAAA;AAAA,IACN,IAAA,EAAQ,oBAAA;AAAA,IACR,QAAA,EAAY,SAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,0BAAA;AAAA,IACN,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY,SAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,IAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAY,YAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,aAAA;AAAA,IACN,IAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAY,eAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,uBAAA;AAAA,IACN,IAAA,EAAQ,mBAAA;AAAA,IACR,QAAA,EAAY,YAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY,YAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,aAAA;AAAA,IACN,IAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAY,YAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY,SAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,kBAAA;AAAA,IACN,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY,SAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,IAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAY,SAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY,SAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,2BAAA;AAAA,IACN,IAAA,EAAQ,uBAAA;AAAA,IACR,QAAA,EAAY,eAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,IAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAY,eAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,aAAA;AAAA,IACN,IAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAY,SAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,IAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAY,SAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,IAAA,EAAQ,WAAA;AAAA,IACR,QAAA,EAAY,SAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,IAAA,EAAQ,UAAA;AAAA,IACR,QAAA,EAAY,SAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,WAAA;AAAA,IACN,IAAA,EAAQ,OAAA;AAAA,IACR,QAAA,EAAY,kBAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,YAAA;AAAA,IACN,IAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAY,kBAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,UAAA;AAAA,IACN,IAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAY,kBAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,aAAA;AAAA,IACN,IAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAY,kBAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,YAAA;AAAA,IACN,IAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAY,kBAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,IAAA,EAAQ,WAAA;AAAA,IACR,QAAA,EAAY,kBAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,YAAA;AAAA,IACN,IAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAY,kBAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,IAAA,EAAQ,aAAA;AAAA,IACR,QAAA,EAAY,kBAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,WAAA;AAAA,IACN,IAAA,EAAQ,OAAA;AAAA,IACR,QAAA,EAAY,SAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,IAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAY,SAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY,SAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY,SAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,IAAA,EAAQ,WAAA;AAAA,IACR,QAAA,EAAY,eAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,YAAA;AAAA,IACN,IAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAY,kBAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,IAAA,EAAQ,aAAA;AAAA,IACR,QAAA,EAAY,eAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,2BAAA;AAAA,IACN,IAAA,EAAQ,uBAAA;AAAA,IACR,QAAA,EAAY,SAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,0BAAA;AAAA,IACN,IAAA,EAAQ,sBAAA;AAAA,IACR,QAAA,EAAY,eAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY,eAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY,eAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,qBAAA;AAAA,IACN,IAAA,EAAQ,iBAAA;AAAA,IACR,QAAA,EAAY,SAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,mBAAA;AAAA,IACN,IAAA,EAAQ,eAAA;AAAA,IACR,QAAA,EAAY,eAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,oBAAA;AAAA,IACN,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY,SAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,YAAA;AAAA,IACN,IAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAY,eAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,YAAA;AAAA,IACN,IAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAY,SAAA;AAAA,IACZ,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,kBAAA;AAAA,IACZ,IAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAY,kBAAA;AAAA,IACZ,IAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,UAAA;AAAA,IACN,QAAA,EAAY,kBAAA;AAAA,IACZ,IAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,UAAA;AAAA,IACN,QAAA,EAAY,kBAAA;AAAA,IACZ,IAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,iBAAA;AAAA,IACN,QAAA,EAAY,kBAAA;AAAA,IACZ,IAAA,EAAQ,aAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,kBAAA;AAAA,IACZ,IAAA,EAAQ,UAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAY,kBAAA;AAAA,IACZ,IAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,UAAA;AAAA,IACN,QAAA,EAAY,kBAAA;AAAA,IACZ,IAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,QAAA,EAAY,kBAAA;AAAA,IACZ,IAAA,EAAQ,UAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,gBAAA;AAAA,IACN,QAAA,EAAY,kBAAA;AAAA,IACZ,IAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,aAAA;AAAA,IACN,QAAA,EAAY,kBAAA;AAAA,IACZ,IAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,WAAA;AAAA,IACN,QAAA,EAAY,kBAAA;AAAA,IACZ,IAAA,EAAQ,OAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC,GAChB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,YAAA;AAAA,IACN,QAAA,EAAY,kBAAA;AAAA,IACZ,IAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,WAAa;AAAC;AAElB,CAAA;;;AClpMA,SAAS,eAAe,MAAA,EAAwB;AAM9C,EAAA,OAAO,IAAI,MAAA,CAAO,MAAA,EAAQ,GAAG,CAAA;AAC/B;AAEA,IAAM,YAAA,GAA8B,oBAAA,CAAsC,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,EACxF,IAAI,KAAA,CAAM,EAAA;AAAA,EACV,MAAM,KAAA,CAAM,IAAA;AAAA,EACZ,UAAU,KAAA,CAAM,QAAA;AAAA,EAChB,QAAA,EAAU,KAAA,CAAM,QAAA,CAAS,GAAA,CAAI,cAAc,CAAA;AAAA,EAC3C,SAAA,EAAW,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,cAAc;AAC/C,CAAA,CAAE,CAAA;AAIqC,CAAC,GAAG,YAAY;AA8CvD,SAAS,wBAAwB,GAAA,EAAwB;AACvD,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,MAAM,UAAU,GAAA,CAAI,OAAA;AAGpB,EAAA,IAAI,CAAC,OAAA,CAAQ,YAAY,CAAA,EAAG;AAC1B,IAAA,OAAA,CAAQ,KAAK,oBAAoB,CAAA;AAAA,EACnC;AAGA,EAAA,IAAI,CAAC,OAAA,CAAQ,QAAQ,CAAA,EAAG;AACtB,IAAA,OAAA,CAAQ,KAAK,gBAAgB,CAAA;AAAA,EAC/B;AAGA,EAAA,IAAI,CAAC,OAAA,CAAQ,iBAAiB,CAAA,EAAG;AAC/B,IAAA,OAAA,CAAQ,KAAK,yBAAyB,CAAA;AAAA,EACxC;AAGA,EAAA,IAAI,CAAC,OAAA,CAAQ,iBAAiB,CAAA,EAAG;AAC/B,IAAA,OAAA,CAAQ,KAAK,yBAAyB,CAAA;AAAA,EACxC;AAGA,EAAA,IAAI,OAAA,CAAQ,YAAY,CAAA,KAAM,OAAA,EAAS;AACrC,IAAA,OAAA,CAAQ,KAAK,kBAAkB,CAAA;AAAA,EACjC;AAEA,EAAA,OAAO,OAAA;AACT;AAcO,SAAS,UAAU,GAAA,EAAkC;AAC1D,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,OAAA,CAAQ,YAAY,CAAA,IAAK,EAAA;AAI3C,EAAA,IAAI,KAAA,CAAM,SAAS,IAAA,EAAM;AACvB,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,IAAA;AAAA,MACP,QAAA,EAAU,SAAA;AAAA,MACV,IAAA,EAAM,IAAA;AAAA,MACN,UAAA,EAAY,GAAA;AAAA,MACZ,OAAA,EAAS,wBAAwB,GAAG;AAAA,KACtC;AAAA,EACF;AACA,EAAA,MAAM,EAAA,GAAK,KAAA;AACX,EAAA,MAAM,OAAA,GAAU,wBAAwB,GAAG,CAAA;AAG3C,EAAA,IAAI,CAAC,EAAA,EAAI;AACP,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,IAAA;AAAA,MACP,QAAA,EAAU,SAAA;AAAA,MACV,IAAA,EAAM,IAAA;AAAA,MACN,UAAA,EAAY,GAAA;AAAA,MACZ;AAAA,KACF;AAAA,EACF;AASA,EAAA,KAAA,MAAW,OAAO,YAAA,EAAc;AAC9B,IAAA,IAAI,UAAA,GAAa,GAAA,CAAI,QAAA,CAAS,MAAA,GAAS,CAAA;AACvC,IAAA,KAAA,MAAW,OAAA,IAAW,IAAI,QAAA,EAAU;AAClC,MAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,CAAK,EAAE,CAAA,EAAG;AACrB,QAAA,UAAA,GAAa,KAAA;AACb,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAI,CAAC,UAAA,EAAY;AAEjB,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,KAAA,MAAW,OAAA,IAAW,IAAI,SAAA,EAAW;AACnC,MAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,EAAE,CAAA,EAAG;AACpB,QAAA,SAAA,GAAY,IAAA;AACZ,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAI,SAAA,EAAW;AAEf,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,IAAA;AAAA,MACP,UAAU,GAAA,CAAI,QAAA;AAAA,MACd,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,UAAA,EAAY,IAAA;AAAA,MACZ;AAAA,KACF;AAAA,EACF;AAGA,EAAA,MAAM,gBAAgB,OAAA,CAAQ,MAAA;AAG9B,EAAA,IAAI,iBAAiB,CAAA,EAAG;AACtB,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,IAAA;AAAA,MACP,QAAA,EAAU,SAAA;AAAA,MACV,IAAA,EAAM,IAAA;AAAA,MACN,YAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAK,GAAA,GAAO,gBAAgB,GAAI,CAAA;AAAA,MACrD;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA;AAAA,IACP,QAAA,EAAU,OAAA;AAAA,IACV,IAAA,EAAM,IAAA;AAAA,IACN,YAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAK,CAAA,GAAO,gBAAgB,IAAK,CAAA;AAAA,IACtD;AAAA,GACF;AACF;;;ACxKA,SAAS,aAAa,IAAA,EAA4D;AAChF,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,IAAO,UAAA,CAAW,oBAAA;AACnC,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,IAAY,UAAA,CAAW,iBAAA;AAE7C,EAAA,MAAM,KAAA,mBAAQ,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAChC,EAAA,OAAO,CAAC,GAAA,KAAmC;AACzC,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,IAAI,KAAA,GAAQ,MAAM,GAAG,CAAA;AACrB,IAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,SAAA,GAAY,GAAA,EAAK;AACnC,MAAA,KAAA,GAAQ,EAAE,KAAA,EAAO,CAAA,EAAG,SAAA,EAAW,MAAM,QAAA,EAAS;AAC9C,MAAA,KAAA,CAAM,GAAG,CAAA,GAAI,KAAA;AAAA,IACf;AACA,IAAA,KAAA,CAAM,KAAA,IAAS,CAAA;AACf,IAAA,MAAM,YAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAA,GAAM,MAAM,KAAK,CAAA;AAC/C,IAAA,MAAM,eAAe,IAAA,CAAK,IAAA,CAAA,CAAM,KAAA,CAAM,SAAA,GAAY,OAAO,GAAI,CAAA;AAC7D,IAAA,OAAO,EAAE,OAAA,EAAS,KAAA,CAAM,KAAA,IAAS,GAAA,EAAK,OAAO,KAAA,CAAM,KAAA,EAAO,GAAA,EAAK,SAAA,EAAW,YAAA,EAAa;AAAA,EACzF,CAAA;AACF;AAOA,SAAS,WAAA,CACP,SACA,IAAA,EACoB;AACpB,EAAA,MAAM,CAAA,GAAI,QAAQ,IAAI,CAAA;AACtB,EAAA,IAAI,CAAA,KAAM,QAAW,OAAO,MAAA;AAC5B,EAAA,IAAI,MAAM,OAAA,CAAQ,CAAC,CAAA,EAAG,OAAO,EAAE,CAAC,CAAA;AAChC,EAAA,OAAO,CAAA;AACT;AAOA,SAAS,YACP,OAAA,EACoB;AACpB,EAAA,MAAM,CAAA,GAAwC;AAAA,IAC5C,YAAA,EAAc,WAAA,CAAY,OAAA,EAAS,YAAY,CAAA;AAAA,IAC/C,MAAA,EAAQ,WAAA,CAAY,OAAA,EAAS,QAAQ,CAAA;AAAA,IACrC,iBAAA,EAAmB,WAAA,CAAY,OAAA,EAAS,iBAAiB,CAAA;AAAA,IACzD,iBAAA,EAAmB,WAAA,CAAY,OAAA,EAAS,iBAAiB,CAAA;AAAA,IACzD,UAAA,EAAY,WAAA,CAAY,OAAA,EAAS,YAAY;AAAA,GAC/C;AACA,EAAA,OAAO,EAAE,SAAS,CAAA,EAAE;AACtB;AASA,SAAS,WAAW,OAAA,EAAqC;AACvD,EAAA,IAAI,OAAA,CAAQ,EAAA,EAAI,OAAO,OAAA,CAAQ,EAAA;AAC/B,EAAA,MAAM,UAAU,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,GAAA,EAAK,WAAW,EAAC;AAC5D,EAAA,MAAM,GAAA,GAAM,WAAA,CAAY,OAAA,EAAS,iBAAiB,CAAA;AAClD,EAAA,IAAI,GAAA,EAAK;AACP,IAAA,MAAM,QAAQ,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,GAAG,IAAA,EAAK;AACtC,IAAA,IAAI,OAAO,OAAO,KAAA;AAAA,EACpB;AACA,EAAA,MAAM,IAAA,GAAO,WAAA,CAAY,OAAA,EAAS,WAAW,CAAA;AAC7C,EAAA,IAAI,IAAA,EAAM,OAAO,IAAA,CAAK,IAAA,EAAK;AAC3B,EAAA,IAAI,OAAA,CAAQ,MAAA,EAAQ,aAAA,EAAe,OAAO,QAAQ,MAAA,CAAO,aAAA;AACzD,EAAA,OAAO,SAAA;AACT;AAEA,SAAS,oBAAA,CACP,KAAA,EACA,OAAA,EACA,OAAA,EACM;AACN,EAAA,MAAM;AAAA,IACJ,qBAAA,GAAwB,IAAA;AAAA,IACxB,SAAA,GAAY,IAAA;AAAA,IACZ,OAAA,GAAU,IAAA;AAAA,IACV,eAAe,OAAA,CAAQ,aAAA;AAAA,IACvB,IAAA,GAAO,IAAA;AAAA,IACP,iBAAiB,OAAA,CAAQ,eAAA;AAAA,IACzB,oBAAoB,OAAA,CAAQ,kBAAA;AAAA,IAC5B,YAAA,GAAe,IAAA;AAAA,IACf,uBAAA,GAA0B,aAAA;AAAA,IAC1B,yBAAA,GAA4B,aAAA;AAAA,IAC5B,yBAAA,GAA4B,cAAA;AAAA,IAC5B,kBAAA,GAAqB,IAAA;AAAA,IACrB,kBAAA,GAAqB;AAAA,GACvB,GAAI,OAAA;AAEJ,EAAA,IAAI,qBAAA,EAAuB;AACzB,IAAA,KAAA,CAAM,MAAA;AAAA,MACJ,yBAAA;AAAA,MACA,OAAO,qBAAA,KAA0B,QAAA,GAAW,qBAAA,GAAwB,OAAA,CAAQ;AAAA,KAC9E;AAAA,EACF;AACA,EAAA,IAAI,SAAA,EAAW,KAAA,CAAM,MAAA,CAAO,kBAAA,EAAoB,GAAG,CAAA;AACnD,EAAA,IAAI,OAAA,EAAS,KAAA,CAAM,MAAA,CAAO,wBAAA,EAA0B,QAAQ,oBAAoB,CAAA;AAChF,EAAA,IAAI,YAAA,EAAc,KAAA,CAAM,MAAA,CAAO,iBAAA,EAAmB,YAAY,CAAA;AAK9D,EAAA,MAAM,UAAU,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,GAAA,EAAK,WAAW,EAAC;AAC5D,EAAA,MAAM,GAAA,GAAM,WAAA,CAAY,OAAA,EAAS,mBAAmB,CAAA,EAChD,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,EACZ,IAAA,EAAK,EACL,WAAA,EAAY;AAChB,EAAA,MAAM,UAAA,GAAa,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,SAAS,GAAA,GAAM,MAAA;AAM7D,EAAA,MAAM,UAAU,UAAA,KAAe,OAAA;AAE/B,EAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,IAAA,MAAM,CAAA,GAAiB,OAAO,IAAA,KAAS,QAAA,GAAW,OAAO,EAAC;AAC1D,IAAA,MAAM,MAAA,GAAS,CAAA,CAAE,MAAA,IAAU,OAAA,CAAQ,YAAA;AACnC,IAAA,MAAM,UAAA,GAAa,EAAE,iBAAA,KAAsB,KAAA;AAC3C,IAAA,MAAM,OAAA,GAAU,EAAE,OAAA,KAAY,IAAA;AAC9B,IAAA,IAAI,CAAA,GAAI,WAAW,MAAM,CAAA,CAAA;AACzB,IAAA,IAAI,YAAY,CAAA,IAAK,qBAAA;AACrB,IAAA,IAAI,SAAS,CAAA,IAAK,WAAA;AAClB,IAAA,KAAA,CAAM,MAAA,CAAO,6BAA6B,CAAC,CAAA;AAAA,EAC7C;AAEA,EAAA,IAAI,cAAA,EAAgB,KAAA,CAAM,MAAA,CAAO,iBAAA,EAAmB,cAAc,CAAA;AAClE,EAAA,IAAI,iBAAA,EAAmB,KAAA,CAAM,MAAA,CAAO,oBAAA,EAAsB,iBAAiB,CAAA;AAC3E,EAAA,IAAI,uBAAA,EAAyB,KAAA,CAAM,MAAA,CAAO,4BAAA,EAA8B,uBAAuB,CAAA;AAC/F,EAAA,IAAI,yBAAA,EAA2B,KAAA,CAAM,MAAA,CAAO,8BAAA,EAAgC,yBAAyB,CAAA;AACrG,EAAA,IAAI,yBAAA,EAA2B,KAAA,CAAM,MAAA,CAAO,8BAAA,EAAgC,yBAAyB,CAAA;AACrG,EAAA,IAAI,kBAAA,EAAoB,KAAA,CAAM,MAAA,CAAO,sBAAA,EAAwB,IAAI,CAAA;AACjE,EAAA,IAAI,kBAAA,EAAoB,KAAA,CAAM,MAAA,CAAO,wBAAA,EAA0B,KAAK,CAAA;AACpE,EAAA,KAAA,CAAM,MAAA,CAAO,qCAAqC,MAAM,CAAA;AAExD,EAAA,IAAI,YAAA,EAAc;AAChB,IAAA,KAAA,CAAM,MAAA;AAAA,MACJ,eAAA;AAAA,MACA,OAAO,YAAA,KAAiB,QAAA,GAAW,YAAA,GAAe,OAAA,CAAQ;AAAA,KAC5D;AACA,IAAA,KAAA,CAAM,MAAA,CAAO,UAAU,UAAU,CAAA;AACjC,IAAA,KAAA,CAAM,MAAA,CAAO,WAAW,GAAG,CAAA;AAAA,EAC7B;AACF;AAYA,eAAsB,YAAA,CACpB,OAAA,EACA,OAAA,GAA+B,EAAC,EACjB;AACf,EAAA,MAAM,UAAA,GAAa,QAAQ,OAAA,IAAW,IAAA;AACtC,EAAA,MAAM,YAAA,GAAe,QAAQ,SAAA,IAAa,IAAA;AAC1C,EAAA,MAAM,SAAS,OAAA,CAAQ,GAAA;AAEvB,EAAA,MAAM,OAAA,GAAU,eACZ,YAAA,CAAa,OAAO,iBAAiB,QAAA,GAAW,YAAA,GAAe,EAAE,CAAA,GACjE,IAAA;AAEJ,EAAA,MAAM,UAAA,GAAa,CAAC,CAAC,MAAA;AACrB,EAAA,MAAM,OAAA,GACJ,OAAO,MAAA,KAAW,QAAA,GAAW,SAAS,EAAC;AACzC,EAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,OAAA,CAAQ,SAAS,CAAC,eAAA,EAAiB,QAAA,EAAU,YAAY,CAAC,CAAA;AACnF,EAAA,MAAM,UAAU,IAAI,GAAA,CAAI,QAAQ,IAAA,IAAQ,CAAC,WAAW,CAAC,CAAA;AACrD,EAAA,MAAM,UAAA,GAAa,QAAQ,aAAA,IAAiB,OAAA;AAC5C,EAAA,MAAM,aAAA,GAAgB,QAAQ,UAAA,IAAc,GAAA;AAC5C,EAAA,MAAM,UAAA,GAAa,QAAQ,OAAA,IAAW,gBAAA;AAEtC,EAAA,OAAA,CAAQ,OAAA,CAAQ,WAAA,EAAa,OAAO,OAAA,EAAS,KAAA,KAAU;AAErD,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAM,GAAA,GAAM,WAAW,OAAO,CAAA;AAC9B,MAAA,MAAM,QAAA,GAAW,QAAQ,GAAG,CAAA;AAC5B,MAAA,KAAA,CAAM,MAAA,CAAO,mBAAA,EAAqB,QAAA,CAAS,GAAA,CAAI,UAAU,CAAA;AACzD,MAAA,KAAA,CAAM,MAAA;AAAA,QACJ,uBAAA;AAAA,QACA,QAAA,CAAS,OAAA,GAAU,QAAA,CAAS,SAAA,CAAU,UAAS,GAAI;AAAA,OACrD;AACA,MAAA,KAAA,CAAM,MAAA,CAAO,mBAAA,EAAqB,QAAA,CAAS,YAAA,CAAa,UAAU,CAAA;AAClE,MAAA,IAAI,CAAC,SAAS,OAAA,EAAS;AACrB,QAAA,KAAA,CAAM,MAAA,CAAO,aAAA,EAAe,QAAA,CAAS,YAAA,CAAa,UAAU,CAAA;AAC5D,QAAA,MAAM,KAAA,CAAM,MAAA,CAAO,GAAG,CAAA,CAAE,IAAA,CAAK;AAAA,UAC3B,KAAA,EAAO,4CAAA;AAAA,UACP,YAAY,QAAA,CAAS;AAAA,SACtB,CAAA;AACD,QAAA;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAM,UAAU,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,GAAA,EAAK,WAAW,EAAC;AAC5D,MAAA,MAAM,MAAA,GAA6B,SAAA,CAAU,WAAA,CAAY,OAAO,CAAC,CAAA;AACjE,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAA,MAAM,MAAA,GACJ,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,QAAQ,CAAA,IAC1B,CAAC,QAAA,CAAS,GAAA,CAAI,MAAA,CAAO,QAAQ,CAAA,IAAK,UAAA,KAAe,MAAA;AACpD,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,MAAM,KAAA,CAAM,OAAO,aAAa,CAAA,CAAE,KAAK,EAAE,KAAA,EAAO,YAAY,CAAA;AAC5D,UAAA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AAED,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,OAAA,CAAQ,OAAA,CAAQ,QAAA,EAAU,OAAO,OAAA,EAAS,OAAO,OAAA,KAAY;AAI3D,MAAA,oBAAA;AAAA,QACE,KAAA;AAAA,QACA,OAAO,UAAA,KAAe,QAAA,GAAW,UAAA,GAAa,EAAC;AAAA,QAC/C;AAAA,OACF;AACA,MAAA,OAAO,OAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH;AACF;AAEA,IAAO,eAAA,GAAQ","file":"index.mjs","sourcesContent":["{\n  \"version\": \"1.1.0\",\n  \"description\": \"Arcis Core Security Patterns - Language Agnostic\",\n  \"_pattern_convention\": {\n    \"description\": \"Pattern field naming convention for SDK implementers\",\n    \"pattern\": \"The primary regex pattern. May contain ReDoS-vulnerable constructs.\",\n    \"pattern_safe\": \"ReDoS-safe alternative pattern. SDKs MUST prefer this when available.\",\n    \"redos_safe\": \"Boolean indicating if 'pattern' is ReDoS-safe. If false, use 'pattern_safe'.\",\n    \"usage\": \"pattern_str = rule.get('pattern_safe') or rule.get('pattern')\"\n  },\n  \"config\": {\n    \"max_input_size\": 1000000,\n    \"max_recursion_depth\": 10,\n    \"enable_redos_protection\": true\n  },\n  \"patterns\": {\n    \"xss\": {\n      \"name\": \"Cross-Site Scripting (XSS)\",\n      \"severity\": \"critical\",\n      \"owasp\": \"A03:2021\",\n      \"rules\": [\n        {\n          \"id\": \"xss-script-block\",\n          \"pattern\": \"<script[^>]*>[\\\\s\\\\S]*?</script>\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects full script blocks (open tag through close tag)\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"xss-script-tag\",\n          \"pattern\": \"<script[^>]*>\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects standalone or unclosed script tags\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"xss-javascript-protocol\",\n          \"pattern\": \"javascript\\\\s*:[^\\\\s]\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects javascript: protocol (allows whitespace around colon)\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"xss-event-handler-quoted\",\n          \"pattern\": \"(?:[\\\\s/])on\\\\w+\\\\s*=\\\\s*[\\\"'][^\\\"']*[\\\"']\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects inline event handlers with quoted values (e.g. onclick=\\\"alert(1)\\\")\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"xss-event-handler-unquoted\",\n          \"pattern\": \"(?:[\\\\s/])on\\\\w+\\\\s*=\\\\s*[^\\\\s>]*\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects inline event handlers with unquoted values (e.g. onload=value)\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"xss-iframe-block\",\n          \"pattern\": \"<iframe[^>]*>[\\\\s\\\\S]*?</iframe>\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects full iframe blocks\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"xss-iframe\",\n          \"pattern\": \"<iframe[^>]*\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects iframe tags (partial or unclosed)\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"xss-style-block\",\n          \"pattern\": \"<style[^>]*>[\\\\s\\\\S]*?</style>\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects full style blocks (CSS injection, expression(), behavior: attacks)\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"xss-style-tag\",\n          \"pattern\": \"<style[\\\\s>][^>]*\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects style tags (partial or unclosed). Requires whitespace or > after `style` so `<styled>` / `<StyledButton>` text is not flagged.\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"xss-object-block\",\n          \"pattern\": \"<object[^>]*>[\\\\s\\\\S]*?</object>\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects full object blocks\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"xss-object\",\n          \"pattern\": \"<object[^>]*\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects object tags (partial or unclosed)\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"xss-embed\",\n          \"pattern\": \"<embed[^>]*\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects embed tags\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"xss-data-uri\",\n          \"pattern\": \"data\\\\s*:\\\\s*(?:text/html|image/svg)[^>\\\\s]*\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects data: URIs with HTML or SVG content (avoids 'metadata' false positives)\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"xss-vbscript\",\n          \"pattern\": \"vbscript\\\\s*:\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects vbscript: protocol\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"xss-url-encoded\",\n          \"pattern\": \"%3Cscript\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects URL-encoded script tags\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"xss-svg-onload\",\n          \"pattern\": \"<svg[^>]*onload[^>]*>\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects SVG with inline event handlers\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"xss-form-injection\",\n          \"pattern\": \"<form[\\\\s>][^>]*\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects form tags used for phishing/credential harvesting via action= redirection\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"xss-meta-injection\",\n          \"pattern\": \"<meta[\\\\s>][^>]*\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects meta tags used for http-equiv refresh redirects or CSP bypass\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"xss-base-injection\",\n          \"pattern\": \"<base[\\\\s>][^>]*\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects base href hijacking — redirects all relative URLs to attacker domain\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"xss-link-injection\",\n          \"pattern\": \"<link[\\\\s>][^>]*\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects link tag injection used for stylesheet or preload CSRF attacks\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"xss-css-expression\",\n          \"pattern\": \"expression\\\\s*\\\\(\",\n          \"flags\": \"gi\",\n          \"description\": \"Legacy IE CSS expression() in a style context, executes JS. Benchmark xss-style-expression.\",\n          \"redos_safe\": true\n        }\n      ],\n      \"encoding\": {\n        \"&\": \"&amp;\",\n        \"<\": \"&lt;\",\n        \">\": \"&gt;\",\n        \"\\\"\": \"&quot;\",\n        \"'\": \"&#x27;\"\n      }\n    },\n    \"sql_injection\": {\n      \"name\": \"SQL Injection\",\n      \"severity\": \"critical\",\n      \"owasp\": \"A03:2021\",\n      \"rules\": [\n        {\n          \"id\": \"sqli-keywords\",\n          \"pattern\": \"(\\\\bUNION\\\\s+(?:ALL\\\\s+)?SELECT\\\\b)|(\\\\b(?:DROP|TRUNCATE)\\\\s+(?:TABLE|DATABASE|INDEX|VIEW|SCHEMA)\\\\b)|(\\\\bINTO\\\\s+(?:OUTFILE|DUMPFILE)\\\\b)|(\\\\bATTACH\\\\s+DATABASE\\\\b)|(\\\\bCREATE\\\\s+(?:USER|FUNCTION|TRIGGER|PROCEDURE)\\\\b)|(\\\\bGRANT\\\\s+(?:ALL|SELECT|INSERT|UPDATE|DELETE)\\\\b)|(\\\\bSHUTDOWN\\\\b)|(\\\\bxp_cmdshell\\\\b)|(\\\\bsp_executesql\\\\b)\",\n          \"flags\": \"gi\",\n          \"description\": \"Multi-token SQL attack shapes (UNION SELECT, DROP TABLE, INTO OUTFILE, etc.) that real attackers use and benign users essentially never type. Replaces older bare-keyword rule that false-positived on 'please select an option', 'I'll update you tomorrow'. Benchmark FP class B3, 2026-06-07.\",\n          \"redos_safe\": true,\n          \"request_boundary_safe\": true\n        },\n        {\n          \"id\": \"sqli-comments\",\n          \"pattern\": \"((?:^|[^!])--(?:[\\\\s-]|$)|/\\\\*|\\\\*/)\",\n          \"flags\": \"g\",\n          \"description\": \"SQL comments. ANSI -- requires a following space / dash / end-of-string so it matches a real trailing comment (1=1--, -- -) but not CLI flags (--max-retries). C-style /* */ kept. MySQL # excluded (see sqli-comment-quote). FPR pass 2026-06-08. The -- must not be immediately preceded by '!' so HTML comments (<!-- -->) are not flagged as SQL.\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"sqli-boolean-numeric\",\n          \"pattern\": \"\\\\bOR\\\\s+\\\\d+\\\\s*=\\\\s*\\\\d+\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects OR 1=1 style injection\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"sqli-boolean-string\",\n          \"pattern\": \"\\\\bOR\\\\s+['\\\"][^'\\\"]*['\\\"]\\\\s*=\\\\s*['\\\"][^'\\\"]*['\\\"]?\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects OR 'a'='a' style injection\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"sqli-and-numeric\",\n          \"pattern\": \"\\\\bAND\\\\s+\\\\d+\\\\s*=\\\\s*\\\\d+\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects AND 1=1 style injection\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"sqli-and-string\",\n          \"pattern\": \"\\\\bAND\\\\s+['\\\"][^'\\\"]*['\\\"]\\\\s*=\\\\s*['\\\"][^'\\\"]*['\\\"]?\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects AND 'a'='a' style injection\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"sqli-sleep\",\n          \"pattern\": \"\\\\bSLEEP\\\\s*\\\\(\\\\s*\\\\d+\\\\s*\\\\)\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects time-based blind SQLi via SLEEP\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"sqli-benchmark\",\n          \"pattern\": \"\\\\bBENCHMARK\\\\s*\\\\(\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects time-based blind SQLi via BENCHMARK\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"sqli-pg-sleep\",\n          \"pattern\": \"\\\\bpg_sleep\\\\s*\\\\(\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects time-based blind SQLi via PostgreSQL pg_sleep\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"sqli-waitfor-delay\",\n          \"pattern\": \"\\\\bWAITFOR\\\\s+DELAY\\\\b\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects time-based blind SQLi via MSSQL WAITFOR DELAY\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"sqli-oracle-dbms-packages\",\n          \"pattern\": \"\\\\bDBMS_(?:LOCK|PIPE|UTILITY|XSLPROCESSOR|JAVA|OUTPUT|SCHEDULER)\\\\b\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects Oracle DBMS_* package references used in time-based blind SQLi (DBMS_LOCK.SLEEP, DBMS_PIPE.RECEIVE_MESSAGE) and other Oracle stdlib abuse paths. Broad match — no legitimate user input contains these (improvements.md §1.1.e Q3).\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"sqli-hex-blob\",\n          \"pattern\": \"\\\\b0x[0-9a-fA-F]{16,}\\\\b\",\n          \"flags\": \"gi\",\n          \"description\": \"Long hex-encoded blob (8+ bytes) smuggling SQL past keyword filters; far longer than any hex color. Benchmark sql-hex-encoded.\",\n          \"redos_safe\": true,\n          \"request_boundary_safe\": true\n        },\n        {\n          \"id\": \"sqli-comment-quote\",\n          \"pattern\": \"'\\\\s*#\",\n          \"flags\": \"g\",\n          \"description\": \"Single-quote immediately followed by a MySQL # line comment (admin' #). Quote anchor avoids FP on bare # (hex colors, hashtags). Benchmark sql-comment-hash.\",\n          \"redos_safe\": true,\n          \"request_boundary_safe\": true\n        }\n      ]\n    },\n    \"nosql_injection\": {\n      \"name\": \"NoSQL Injection\",\n      \"severity\": \"critical\",\n      \"owasp\": \"A03:2021\",\n      \"rules\": [\n        {\n          \"id\": \"nosql-operators\",\n          \"pattern\": \"\\\\$(?:gt|gte|lt|lte|ne|eq|in|nin|and|or|not|nor|exists|type|regex|where|expr|mod|text|jsonSchema|function|accumulator|elemMatch|all|size|lookup|match|project|group|sort|limit|skip|unwind|addFields|replaceRoot)\\\\b\",\n          \"flags\": \"i\",\n          \"description\": \"Detects MongoDB operators\",\n          \"redos_safe\": true\n        }\n      ],\n      \"dangerous_keys\": [\n        \"$gt\",\n        \"$gte\",\n        \"$lt\",\n        \"$lte\",\n        \"$ne\",\n        \"$eq\",\n        \"$in\",\n        \"$nin\",\n        \"$and\",\n        \"$or\",\n        \"$not\",\n        \"$nor\",\n        \"$exists\",\n        \"$type\",\n        \"$regex\",\n        \"$where\",\n        \"$expr\",\n        \"$mod\",\n        \"$text\",\n        \"$jsonSchema\",\n        \"$function\",\n        \"$accumulator\",\n        \"$elemMatch\",\n        \"$all\",\n        \"$size\",\n        \"$lookup\",\n        \"$match\",\n        \"$project\",\n        \"$group\",\n        \"$sort\",\n        \"$limit\",\n        \"$skip\",\n        \"$unwind\",\n        \"$addFields\",\n        \"$replaceRoot\"\n      ]\n    },\n    \"command_injection\": {\n      \"name\": \"Command Injection\",\n      \"severity\": \"critical\",\n      \"owasp\": \"A03:2021\",\n      \"rules\": [\n        {\n          \"id\": \"cmdi-shell-chars\",\n          \"pattern\": \"[;&|]\\\\s*(?:(?:cat|ls|dir|rm|cp|mv|wget|curl|nc|ncat|bash|sh|zsh|ksh|chmod|chown|kill|ps|id|touch|ping|dig|su|head|tail|php|sed|whoami|nslookup|nmap|python3?|perl|ruby|node|eval|exec|sudo|telnet|ssh|ftp|tftp|scp|awk|xxd)\\\\b|base64(?:\\\\s|$))\",\n          \"flags\": \"g\",\n          \"description\": \"Shell command chained after a metacharacter (; cat, | nc, & curl). Replaces the bare [;&|`] rule, which flagged every semicolon / ampersand in code, URLs and prose. FPR pass 2026-06-08. base64 requires a trailing space or end-of-input so `;base64 -d` is caught but the data-URI `;base64,` MIME parameter is not (FP on inline images).\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"cmdi-command-substitution\",\n          \"pattern\": \"\\\\$\\\\(\",\n          \"flags\": \"g\",\n          \"description\": \"Detects command substitution syntax $( — paired form, fewer false positives than bare parens\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"cmdi-ifs-bypass\",\n          \"pattern\": \"\\\\$\\\\{IFS(?:%[^}]*)?\\\\}\",\n          \"flags\": \"g\",\n          \"description\": \"Detects POSIX shell IFS substitution like ${IFS} or ${IFS%??}. Attackers use this to inject spaces past metacharacter filters in commands like `;cat${IFS}/etc/passwd` (improvements.md §1.1.e Q5).\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"cmdi-control-chars\",\n          \"pattern\": \"%0[0-9a-fA-F]\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects URL-encoded control characters (%00-%0F) including null, tab, vertical tab, form feed, LF, CR\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"cmdi-redirection\",\n          \"pattern\": \"(>>|<<<?)\",\n          \"flags\": \"g\",\n          \"description\": \"Append (>>) and here-doc (<<, <<<) redirection. The bare [<>] space form was dropped (matched 'a > b', 'RAM > 16GB'); redirect-to-file is covered by cmdi-redirect-syspath. FPR pass 2026-06-08.\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"cmdi-env-assign\",\n          \"pattern\": \"\\\\b(?:LD_PRELOAD|LD_LIBRARY_PATH|BASH_ENV|PYTHONPATH|PERL5LIB|DYLD_INSERT_LIBRARIES)\\\\s*=\",\n          \"flags\": \"gi\",\n          \"description\": \"Dangerous env-var assignment to smuggle code into a spawned process (LD_PRELOAD=). Benchmark cmd-env-var-smuggling.\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"cmdi-redirect-syspath\",\n          \"pattern\": \">\\\\s*/(?:etc|var|tmp|usr|bin|sbin|root|home|dev|proc|opt)\\\\b\",\n          \"flags\": \"g\",\n          \"description\": \"Shell output redirect to a system directory (> /var/www/shell.php). Anchored to system dirs to avoid math/text FP. Benchmark cmd-redirect-overwrite.\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"cmdi-newline-command\",\n          \"pattern\": \"[\\\\n\\\\r]\\\\s*(?:cat|ls|dir|rm|cp|mv|wget|curl|nc|ncat|bash|sh|zsh|ksh|chmod|chown|kill|ps|id|touch|ping|dig|su|head|tail|php|sed|whoami|nslookup|nmap|python3?|perl|ruby|node|eval|exec|sudo|telnet|ssh|ftp|tftp|scp|awk|xxd|base64)\\\\b\",\n          \"flags\": \"gi\",\n          \"description\": \"Newline followed by a shell command (host\\\\ncat /etc/passwd). Benchmark cmd-newline-injection.\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"cmdi-backtick-command\",\n          \"pattern\": \"`\\\\s*(?:cat|ls|dir|rm|cp|mv|wget|curl|nc|ncat|bash|sh|zsh|ksh|chmod|chown|kill|ps|id|touch|ping|dig|su|head|tail|php|sed|whoami|nslookup|nmap|python3?|perl|ruby|node|eval|exec|sudo|telnet|ssh|ftp|tftp|scp|awk|xxd|base64)\\\\b\",\n          \"flags\": \"gi\",\n          \"description\": \"Backtick command substitution wrapping a known command (`whoami`). Avoids FP on markdown inline code like `npm install`. FPR pass 2026-06-08.\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"cmdi-jndi-lookup\",\n          \"pattern\": \"\\\\$\\\\{jndi:\",\n          \"flags\": \"gi\",\n          \"description\": \"JNDI lookup used by Log4Shell, e.g. ${jndi:ldap://host/a}\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"cmdi-ssi-directive\",\n          \"pattern\": \"<!--\\\\s*#\\\\s*(?:exec|include|echo|config|fsize|flastmod|printenv)\\\\b\",\n          \"flags\": \"gi\",\n          \"description\": \"Server-side include (SSI) directive, e.g. <!--#exec cmd=...-->\",\n          \"redos_safe\": true\n        }\n      ]\n    },\n    \"path_traversal\": {\n      \"name\": \"Path Traversal\",\n      \"severity\": \"high\",\n      \"owasp\": \"A01:2021\",\n      \"rules\": [\n        {\n          \"id\": \"path-dotdot\",\n          \"pattern\": \"\\\\.\\\\./\",\n          \"flags\": \"g\",\n          \"description\": \"Detects ../ sequences\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"path-dotdot-backslash\",\n          \"pattern\": \"\\\\.\\\\.\\\\\\\\\",\n          \"flags\": \"g\",\n          \"description\": \"Detects ..\\\\ sequences\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"path-encoded\",\n          \"pattern\": \"%2e%2e\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects URL-encoded traversal\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"path-double-encoded\",\n          \"pattern\": \"%252e\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects double URL-encoded traversal\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"path-double-encoded-slash\",\n          \"pattern\": \"%252f\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects double URL-encoded forward slash\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"path-dotdotslash-bypass\",\n          \"pattern\": \"\\\\.{2,}[/\\\\\\\\]{2,}\",\n          \"flags\": \"g\",\n          \"description\": \"Detects ....// and ....\\\\\\\\ bypass variants\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"path-null-byte\",\n          \"pattern\": \"%00\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects URL-encoded null byte injection\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"path-null-byte-literal\",\n          \"pattern\": \"\\\\x00\",\n          \"flags\": \"g\",\n          \"description\": \"Detects literal NUL byte in path inputs\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"path-mixed-encoded\",\n          \"pattern\": \"\\\\.\\\\.%2[fF]\",\n          \"flags\": \"g\",\n          \"description\": \"Detects mixed encoding: literal `..` followed by URL-encoded slash (%2F). Benchmark B6 — Python had no coverage; Node had this pattern. 2026-06-07.\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"path-mixed-dot-encoded\",\n          \"pattern\": \"%2e\\\\.[\\\\\\\\/]\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects half-encoded traversal: URL-encoded dot (%2e) followed by a literal dot and a slash (`%2e./`). Node caught this; Python/Go did not. Migration 2026-06-13.\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"path-mixed-dot-encoded-rev\",\n          \"pattern\": \"\\\\.%2e[\\\\\\\\/]\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects half-encoded traversal: literal dot followed by URL-encoded dot (%2e) and a slash (`.%2e/`). Node caught this; Python/Go did not. Migration 2026-06-13.\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"path-overlong-utf8-dot\",\n          \"pattern\": \"%[Cc]0%[Aa][Ee]\",\n          \"flags\": \"g\",\n          \"description\": \"Detects overlong UTF-8 encoding of '.' (%C0%AE). Historic IIS/Apache decoder bypass. Real char `.` is %2E; overlong encoding only appears in evasion attempts. Benchmark B6 gap — neither SDK caught this before. 2026-06-07.\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"path-overlong-utf8-slash\",\n          \"pattern\": \"%[Cc]0%[Aa][Ff]\",\n          \"flags\": \"g\",\n          \"description\": \"Detects overlong UTF-8 encoding of forward slash (%C0%AF). Same IIS/Apache decoder bypass class as path-overlong-utf8-dot. Real slash is %2F; overlong form only appears in evasion. 2026-06-13.\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"path-windows-unc\",\n          \"pattern\": \"\\\\\\\\\\\\\\\\[A-Za-z0-9_.-]+\\\\\\\\\",\n          \"flags\": \"g\",\n          \"description\": \"Detects Windows UNC paths (\\\\\\\\\\\\\\\\server\\\\\\\\share) in user input. Legitimate web-app inputs never contain UNC references; attacker UNC payloads leak SMB auth or pull remote payloads. Benchmark B6. 2026-06-07.\",\n          \"redos_safe\": true\n        }\n      ]\n    },\n    \"prototype_pollution\": {\n      \"name\": \"Prototype Pollution\",\n      \"severity\": \"high\",\n      \"owasp\": \"A03:2021\",\n      \"languages\": [\n        \"javascript\",\n        \"typescript\"\n      ],\n      \"dangerous_keys\": [\n        \"__proto__\",\n        \"constructor\",\n        \"prototype\",\n        \"__definegetter__\",\n        \"__definesetter__\",\n        \"__lookupgetter__\",\n        \"__lookupsetter__\"\n      ]\n    },\n    \"ldap_injection\": {\n      \"name\": \"LDAP Injection\",\n      \"severity\": \"high\",\n      \"owasp\": \"A03:2021\",\n      \"rules\": [\n        {\n          \"id\": \"ldap-special\",\n          \"pattern\": \"[()\\\\\\\\*]\",\n          \"flags\": \"g\",\n          \"description\": \"Detects LDAP special characters. Broad rule for sanitization context only; NOT safe for request-boundary scanning (every parenthesised string trips it). Use 'ldap-injection-strict' below at request boundary.\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"ldap-injection-strict\",\n          \"pattern\": \"\\\\)\\\\s*\\\\(|\\\\*\\\\s*\\\\)\\\\s*\\\\(\",\n          \"flags\": \"g\",\n          \"description\": \"Detects attack-specific LDAP filter-break shapes ')(' and '*)('. Safe to wire into request-boundary scanners. Catches '*)(uid=*))(|(uid=*' style payloads.\",\n          \"redos_safe\": true,\n          \"request_boundary_safe\": true\n        },\n        {\n          \"id\": \"ldap-not-bypass\",\n          \"pattern\": \"\\\\)\\\\s*\\\\(\\\\s*!|&\\\\s*\\\\(\\\\s*!|\\\\|\\\\s*\\\\(\\\\s*!\",\n          \"flags\": \"g\",\n          \"description\": \"Detects LDAP NOT-operator bypass shapes ')(!', '&(!', and '|(!'. Catches injections where attacker appends a NOT clause to enumerate or exclude specific entries, e.g. '*)(uid=*)(!(uid=admin))'. Companion to ldap-injection-strict; together they cover the OR-then-NOT enumeration corpus that legitimate LDAP queries never produce. (improvements.md Q8.)\",\n          \"redos_safe\": true,\n          \"request_boundary_safe\": true\n        },\n        {\n          \"id\": \"ldap-null-byte\",\n          \"pattern\": \"\\\\\\\\00|\\\\x00\",\n          \"flags\": \"g\",\n          \"description\": \"LDAP null-byte truncation (admin\\\\00) used to terminate a filter early and bypass appended constraints. Benchmark ldap-null-byte-truncate.\",\n          \"redos_safe\": true,\n          \"request_boundary_safe\": true\n        }\n      ]\n    },\n    \"xpath_injection\": {\n      \"name\": \"XPath Injection\",\n      \"severity\": \"high\",\n      \"owasp\": \"A03:2021\",\n      \"rules\": [\n        {\n          \"id\": \"xpath-injection-strict\",\n          \"pattern\": \"('\\\\s*(or|and)\\\\s*'|\\\"\\\\s*(or|and)\\\\s*\\\"|\\\\)\\\\s*(or|and)\\\\s*\\\\(|\\\\|\\\\s*/)\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects XPath injection patterns: boolean-injection (' or ' / \\\" or \\\"), function-arity tampering with closing+opening parens around or/and, and union operator before path step. Request-boundary safe.\",\n          \"redos_safe\": true,\n          \"request_boundary_safe\": true\n        },\n        {\n          \"id\": \"xpath-blind-substring\",\n          \"pattern\": \"\\\\bsubstring\\\\s*\\\\(\\\\s*name\\\\s*\\\\(|\\\\bstring-length\\\\s*\\\\(|\\\\bcount\\\\s*\\\\(\\\\s*/\",\n          \"flags\": \"gi\",\n          \"description\": \"Blind XPath extraction via substring(name()), string-length(), count(/...). Benchmark xpath-blind-substring.\",\n          \"redos_safe\": true,\n          \"request_boundary_safe\": true\n        }\n      ]\n    },\n    \"email_header_injection\": {\n      \"name\": \"Email Header Injection (SMTP CRLF)\",\n      \"severity\": \"high\",\n      \"owasp\": \"A03:2021\",\n      \"rules\": [\n        {\n          \"id\": \"email-header-smtp-keyword\",\n          \"pattern\": \"(\\\\r\\\\n|\\\\r|\\\\n)\\\\s*(bcc|cc|to|from|subject|reply-to|return-path|content-type|x-mailer)\\\\s*:\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects SMTP header injection: CR/LF followed by a known SMTP header keyword. Narrow enough for request-boundary scanning because legitimate user input rarely contains '\\\\nBcc:' verbatim.\",\n          \"redos_safe\": true,\n          \"request_boundary_safe\": true\n        },\n        {\n          \"id\": \"email-header-bare-newline\",\n          \"pattern\": \"(\\\\r\\\\n|\\\\r|\\\\n)\\\\s*[a-z][a-z0-9-]{0,40}\\\\s*:\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects bare CR/LF followed by ANY plausible header keyword (not just the SMTP allowlist). Catches MTAs that accept bare LF or bare CR as a header separator (qmail, sendmail variants), where attacker bypasses the strict keyword list by injecting a non-SMTP-keyword header (X-Custom, Authentication-Results, DKIM-Signature, ...). Companion to email-header-smtp-keyword; together they cover the bypass class. (improvements.md Q10.)\",\n          \"redos_safe\": true,\n          \"request_boundary_safe\": true\n        }\n      ]\n    },\n    \"ssti\": {\n      \"name\": \"Server-Side Template Injection (SSTI)\",\n      \"severity\": \"critical\",\n      \"owasp\": \"A03:2021\",\n      \"rules\": [\n        {\n          \"id\": \"ssti-jinja2-twig\",\n          \"pattern\": \"\\\\{\\\\{.*?\\\\}\\\\}\",\n          \"flags\": \"g\",\n          \"description\": \"Detects Jinja2/Twig/Nunjucks template expressions ({{ ... }})\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"ssti-freemarker-spring\",\n          \"pattern\": \"\\\\$\\\\{.*?\\\\}\",\n          \"pattern_safe\": \"\\\\$\\\\{[^}]*[?!()*+\\\\-/][^}]*\\\\}\",\n          \"flags\": \"g\",\n          \"description\": \"Detects Freemarker/Thymeleaf/Spring EL expressions. Detection uses broad pattern; sanitization uses pattern_safe which requires operators/method-calls to avoid false-positives on JS template literals like ${name}.\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"ssti-erb-ejs\",\n          \"pattern\": \"<%[=\\\\-]?.*?%>\",\n          \"flags\": \"gs\",\n          \"description\": \"Detects ERB/EJS template tags (<%= ... %>, <% ... %>)\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"ssti-pug-jade\",\n          \"pattern\": \"#\\\\{.*?\\\\}\",\n          \"pattern_safe\": \"#\\\\{[^}]*[?!()*+\\\\-/][^}]*\\\\}\",\n          \"flags\": \"g\",\n          \"description\": \"Detects Pug/Jade/Slim template expressions. Detection uses broad pattern; sanitization uses pattern_safe to avoid false-positives on Ruby/Pug output like #{name}.\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"ssti-python-class-chain\",\n          \"pattern\": \"__(?:class|mro|subclasses|globals|builtins|import)__\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects Python sandbox escape via dunder attributes\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"ssti-config-leak\",\n          \"pattern\": \"\\\\{\\\\{\\\\s*config[.\\\\[]\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects Jinja2 config/settings leak attempts\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"ssti-jinja2-functions\",\n          \"pattern\": \"\\\\{\\\\{\\\\s*(?:self|request|lipsum|cycler|joiner|namespace|range)\\\\b\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects Jinja2 built-in object/function access\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"ssti-velocity-ognl\",\n          \"pattern\": \"#set\\\\s*\\\\(\\\\s*\\\\$|#foreach\\\\s*\\\\(\\\\s*\\\\$|\\\\$\\\\w+\\\\.(?:exec|getClass|getRuntime|getMethod|invoke)\\\\b\",\n          \"flags\": \"gi\",\n          \"description\": \"Velocity #set/#foreach directives and OGNL/Velocity method calls. Benchmark ssti-velocity-runtime.\",\n          \"redos_safe\": true\n        }\n      ]\n    },\n    \"xml_injection\": {\n      \"name\": \"XML/XXE Injection\",\n      \"severity\": \"critical\",\n      \"owasp\": \"A03:2021\",\n      \"rules\": [\n        {\n          \"id\": \"xxe-doctype\",\n          \"pattern\": \"<!DOCTYPE\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects DOCTYPE declarations\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"xxe-entity\",\n          \"pattern\": \"<!ENTITY\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects ENTITY declarations\",\n          \"redos_safe\": true\n        },\n        {\n          \"id\": \"xxe-system\",\n          \"pattern\": \"SYSTEM\\\\s+[\\\"']\",\n          \"flags\": \"gi\",\n          \"description\": \"Detects SYSTEM references\",\n          \"redos_safe\": true\n        }\n      ]\n    }\n  },\n  \"security_headers\": {\n    \"Content-Security-Policy\": \"default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self'; object-src 'none'; frame-ancestors 'none';\",\n    \"X-Content-Type-Options\": \"nosniff\",\n    \"X-Frame-Options\": \"DENY\",\n    \"X-XSS-Protection\": \"0\",\n    \"Strict-Transport-Security\": \"max-age=31536000; includeSubDomains\",\n    \"Referrer-Policy\": \"strict-origin-when-cross-origin\",\n    \"Permissions-Policy\": \"geolocation=(), microphone=(), camera=()\",\n    \"X-Permitted-Cross-Domain-Policies\": \"none\",\n    \"Cache-Control\": \"no-store, no-cache, must-revalidate, proxy-revalidate\",\n    \"Pragma\": \"no-cache\",\n    \"Expires\": \"0\"\n  },\n  \"rate_limiting\": {\n    \"default_max\": 100,\n    \"default_window_ms\": 60000,\n    \"headers\": {\n      \"limit\": \"X-RateLimit-Limit\",\n      \"remaining\": \"X-RateLimit-Remaining\",\n      \"reset\": \"X-RateLimit-Reset\"\n    }\n  },\n  \"sensitive_keys\": [\n    \"password\",\n    \"passwd\",\n    \"pwd\",\n    \"secret\",\n    \"token\",\n    \"apikey\",\n    \"api_key\",\n    \"apiKey\",\n    \"auth\",\n    \"authorization\",\n    \"credit_card\",\n    \"creditcard\",\n    \"cc\",\n    \"ssn\",\n    \"social_security\",\n    \"private_key\",\n    \"privateKey\",\n    \"access_token\",\n    \"accessToken\",\n    \"refresh_token\",\n    \"refreshToken\",\n    \"bearer\",\n    \"jwt\",\n    \"session\",\n    \"cookie\",\n    \"x-api-key\",\n    \"x-auth-token\",\n    \"credentials\"\n  ],\n  \"validation\": {\n    \"email\": \"^[^\\\\s@]+@[^\\\\s@]+\\\\.[^\\\\s@]+$\",\n    \"url\": \"^https?://[^\\\\s/$.?#].[^\\\\s]*$\",\n    \"uuid\": \"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\n    \"ipv4\": \"^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$\"\n  }\n}\n","/**\n * @module @arcis/node/core/patterns-loader\n *\n * Loads the shared security regex patterns from the bundled\n * `data/patterns.json` (a copy of the canonical `packages/core/patterns.json`,\n * kept byte-identical by the CI data-sync-check). This is the Node counterpart\n * of Go's `sanitizers/loader.go` and Python's `core/constants.load_patterns` +\n * `_compile_rules`.\n *\n * Why this exists: pre-migration, Node hardcoded every regex in `constants.ts`,\n * so each pattern edit was a manual dual-write against patterns.json (which\n * Python + Go already load at runtime). That is a Pattern 2 violation\n * (Shared Pattern Repository). Sourcing the arrays from patterns.json here\n * makes patterns.json the single source for all three SDKs.\n *\n * The JSON is a static `import`, so tsup inlines it into the CJS + ESM bundles\n * at build time (same as `bot-detection.ts` does with `bot-patterns.json`); no\n * runtime filesystem access. resolveJsonModule is already enabled in tsconfig.\n */\n\nimport patternsData from '../data/patterns.json';\n\ninterface PatternRule {\n  id: string;\n  pattern: string;\n  pattern_safe?: string;\n  flags?: string;\n}\n\ninterface PatternCategory {\n  rules?: PatternRule[];\n  dangerous_keys?: string[];\n}\n\ninterface PatternsSpec {\n  version: string;\n  patterns: Record<string, PatternCategory>;\n}\n\nconst spec = patternsData as unknown as PatternsSpec;\n\n/** Valid JavaScript RegExp flags. patterns.json uses g/i/m; anything else is dropped. */\nconst VALID_JS_FLAGS = new Set(['g', 'i', 'm', 's', 'u', 'y']);\n\nfunction normalizeFlags(flags: string | undefined): string {\n  if (!flags) return '';\n  let out = '';\n  for (const ch of flags) {\n    if (VALID_JS_FLAGS.has(ch) && !out.includes(ch)) out += ch;\n  }\n  return out;\n}\n\n/**\n * Compile every rule in a patterns.json category into a RegExp array, in file\n * order. Prefers the ReDoS-safe `pattern_safe` variant when present (parity\n * with Go's compileCategory / Python's _compile_rules). A category with no\n * rules returns an empty array.\n */\nexport function compileCategory(category: string): RegExp[] {\n  const cat = spec.patterns[category];\n  if (!cat?.rules) return [];\n  const out: RegExp[] = [];\n  for (const rule of cat.rules) {\n    const raw = rule.pattern_safe || rule.pattern;\n    if (!raw) continue;\n    out.push(new RegExp(raw, normalizeFlags(rule.flags)));\n  }\n  return out;\n}\n\n/**\n * Compile a single named rule from a category into one RegExp, or undefined if\n * the rule id is absent. Used where Node consumes a single pattern rather than\n * a list (e.g. the string-form NoSQL operator check).\n */\nexport function compileRule(category: string, id: string, flags?: string): RegExp | undefined {\n  const rule = spec.patterns[category]?.rules?.find((r) => r.id === id);\n  if (!rule) return undefined;\n  const raw = rule.pattern_safe || rule.pattern;\n  if (!raw) return undefined;\n  return new RegExp(raw, normalizeFlags(flags ?? rule.flags));\n}\n\n/**\n * Return the `dangerous_keys` list for a category (e.g. `nosql_injection`,\n * `prototype_pollution`), or an empty array if the category has none.\n */\nexport function dangerousKeysFor(category: string): string[] {\n  return spec.patterns[category]?.dangerous_keys ?? [];\n}\n\n/** The version string from the bundled patterns.json. Used by tests/diagnostics. */\nexport const PATTERNS_VERSION = spec.version;\n","/**\n * @module @arcis/node/core/constants\n * Named constants for Arcis - no magic numbers\n */\n\nimport { compileCategory, compileRule, dangerousKeysFor } from './patterns-loader';\n\n// =============================================================================\n// INPUT LIMITS\n// =============================================================================\nexport const INPUT = {\n  /** Default maximum input size (1MB) */\n  DEFAULT_MAX_SIZE: 1_000_000,\n  /** Maximum recursion depth for nested objects */\n  MAX_RECURSION_DEPTH: 10,\n} as const;\n\n// =============================================================================\n// RATE LIMITING\n// =============================================================================\nexport const RATE_LIMIT = {\n  /** Default window size (1 minute) */\n  DEFAULT_WINDOW_MS: 60_000,\n  /** Default max requests per window */\n  DEFAULT_MAX_REQUESTS: 100,\n  /** Default HTTP status code for rate limited responses */\n  DEFAULT_STATUS_CODE: 429,\n  /** Default error message */\n  DEFAULT_MESSAGE: 'Too many requests, please try again later.',\n  /** Minimum window size (1 second) */\n  MIN_WINDOW_MS: 1_000,\n  /** Maximum window size (24 hours) */\n  MAX_WINDOW_MS: 86_400_000,\n} as const;\n\n// =============================================================================\n// SECURITY HEADERS\n// =============================================================================\nexport const HEADERS = {\n  /** Default Content Security Policy */\n  DEFAULT_CSP: [\n    \"default-src 'self'\",\n    \"script-src 'self'\",\n    \"style-src 'self' 'unsafe-inline'\",\n    \"img-src 'self' data: https:\",\n    \"font-src 'self'\",\n    \"object-src 'none'\",\n    \"frame-ancestors 'none'\",\n  ].join('; '),\n  /** Default HSTS max age (1 year in seconds) */\n  HSTS_MAX_AGE: 31_536_000,\n  /** Default X-Frame-Options value */\n  FRAME_OPTIONS: 'DENY' as const,\n  /** Default X-Content-Type-Options value */\n  CONTENT_TYPE_OPTIONS: 'nosniff',\n  /** Default Referrer-Policy value */\n  REFERRER_POLICY: 'strict-origin-when-cross-origin',\n  /** Default Permissions-Policy value */\n  PERMISSIONS_POLICY: 'geolocation=(), microphone=(), camera=()',\n  /** Default Cache-Control value for security */\n  CACHE_CONTROL: 'no-store, no-cache, must-revalidate, proxy-revalidate',\n} as const;\n\n// =============================================================================\n// XSS PATTERNS (sourced from patterns.json)\n// =============================================================================\n\n/**\n * XSS patterns, compiled from the shared `patterns.json` `xss` category.\n *\n * Both detection (detectXss) and removal (sanitizeXss) iterate the same rule\n * list: the rules are precise capture patterns (full tag / attribute / protocol)\n * so they double as removal targets, and patterns.json file order keeps every\n * block rule (e.g. `<script>...</script>`) ahead of its bare-tag counterpart so\n * removal strips the larger match first. Pre-migration these were two hardcoded\n * arrays (a broad detect set + a precise remove set); single-sourcing them here\n * ends the dual-write against patterns.json and converges Node onto the same\n * detection Python + Go already ship (Pattern 2 + Pattern 7).\n */\nexport const XSS_PATTERNS = compileCategory('xss');\n\n/** Removal patterns for sanitizeXss(): the same patterns.json `xss` rules.\n *  A separate compiled array so its RegExp lastIndex state is independent of\n *  the detection pass. */\nexport const XSS_REMOVE_PATTERNS = compileCategory('xss');\n\n// =============================================================================\n// SQL INJECTION PATTERNS (sourced from patterns.json)\n// =============================================================================\n/** Compiled from the shared `patterns.json` `sql_injection` category. The\n *  quoted-boolean rules use RE2-safe `['\"]...['\"]` (no backreference) since\n *  patterns.json is also consumed by Go's RE2 engine; validated equivalent to\n *  the former backreference forms on the O'Brien / tautology corpus. */\nexport const SQL_PATTERNS = compileCategory('sql_injection');\n\n// =============================================================================\n// PATH TRAVERSAL PATTERNS (sourced from patterns.json)\n// =============================================================================\n/** Compiled from the shared `patterns.json` `path_traversal` category. */\nexport const PATH_PATTERNS = compileCategory('path_traversal');\n\n// =============================================================================\n// COMMAND INJECTION PATTERNS (sourced from patterns.json)\n// =============================================================================\n/** Compiled from the shared `patterns.json` `command_injection` category. */\nexport const COMMAND_PATTERNS = compileCategory('command_injection');\n\n// =============================================================================\n// DANGEROUS KEYS\n// =============================================================================\n\n/**\n * Prototype pollution keys to block.\n * Stored lowercase — always compare with key.toLowerCase().\n *\n * Includes:\n * - __proto__: direct prototype assignment\n * - constructor: access to constructor.prototype chain\n * - prototype: direct prototype property\n * - __defineGetter__/__defineSetter__: legacy property definition (can override getters/setters)\n * - __lookupGetter__/__lookupSetter__: legacy property introspection\n */\nexport const DANGEROUS_PROTO_KEYS = new Set(dangerousKeysFor('prototype_pollution'));\n\n/** MongoDB operators to block, from `patterns.json` nosql_injection.dangerous_keys. */\nexport const NOSQL_DANGEROUS_KEYS = new Set(dangerousKeysFor('nosql_injection'));\n\n/**\n * String-form NoSQL operator detection (block-mode scanThreats).\n *\n * NOSQL_DANGEROUS_KEYS catches operators that arrive as OBJECT KEYS\n * (`{\"$gt\": \"\"}`). But MongoDB operators also bypass as STRING VALUES —\n * query params like `?username[$ne]=1` arrive as the literal string\n * `$ne` before the body parser ever builds an object, and mongo-shell\n * payloads (`$where: '1==1'`) are plain strings. Node previously had no\n * string-level NoSQL check, so GoTestWAF scored NoSQL at 0% while Python\n * (which loads the shared `nosql-operators` rule) caught these. This\n * closes that Pattern-7 parity gap.\n *\n * Sourced from the `nosql-operators` rule in patterns.json. The trailing\n * `\\b` word boundary keeps `$invoice`/`$order`/`$index` from matching\n * `$in`/`$or` (a false-positive class the un-bounded rule had).\n */\nconst nosqlStringRule = compileRule('nosql_injection', 'nosql-operators');\nif (!nosqlStringRule) {\n  throw new Error('arcis: nosql-operators rule missing from patterns.json');\n}\nexport const NOSQL_STRING_PATTERN = nosqlStringRule;\n\n/**\n * Identity/auth field names that must hold a scalar value. A field here\n * carrying an array or object is a NoSQL type-juggling operator-injection\n * shape (e.g. {\"username\":[\"admin\"]}). v1.7 nosql-type-juggle.\n */\nexport const AUTH_FIELDS = new Set([\n  'username', 'user', 'userid', 'user_id', 'login', 'email',\n  'password', 'pass', 'passwd', 'pwd', 'token', 'apikey', 'api_key',\n  'secret', 'otp', 'pin',\n]);\n\n// =============================================================================\n// REDACTION\n// =============================================================================\nexport const REDACTION = {\n  /** Replacement text for redacted values */\n  REPLACEMENT: '[REDACTED]',\n  /** Truncation indicator */\n  TRUNCATED: '[TRUNCATED]',\n  /** Max depth indicator */\n  MAX_DEPTH: '[MAX_DEPTH]',\n  /** Default max message length */\n  DEFAULT_MAX_LENGTH: 10_000,\n  /** Default sensitive keys to redact */\n  SENSITIVE_KEYS: new Set([\n    'password', 'passwd', 'pwd', 'secret', 'token', 'apikey',\n    'api_key', 'apiKey', 'auth', 'authorization', 'credit_card',\n    'creditcard', 'cc', 'ssn', 'social_security', 'private_key',\n    'privateKey', 'access_token', 'accessToken', 'refresh_token',\n    'refreshToken', 'bearer', 'jwt', 'session', 'cookie',\n    'credentials', 'x-api-key', 'x-auth-token',\n  ]),\n} as const;\n\n// =============================================================================\n// VALIDATION PATTERNS\n// =============================================================================\nexport const VALIDATION = {\n  /**\n   * Email regex pattern.\n   * Rejects consecutive dots in local part (e.g. test..foo@example.com),\n   * leading/trailing dots, and other common invalid forms.\n   */\n  EMAIL: /^[^\\s@.][^\\s@]*(?:\\.[^\\s@.][^\\s@]*)*@[^\\s@]+\\.[^\\s@]+$/,\n  /**\n   * URL regex pattern.\n   * Only allows http:// and https:// (case-insensitive scheme per\n   * RFC 3986); explicitly rejects javascript:, data:, vbscript:, and\n   * other dangerous URI schemes.\n   */\n  URL: /^https?:\\/\\/[^\\s/$.?#][^\\s]*$/i,\n  /** UUID regex pattern (v4) */\n  UUID: /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,\n} as const;\n\n// =============================================================================\n// ERROR MESSAGES\n// =============================================================================\nexport const ERRORS = {\n  /** Generic error message (production) */\n  INTERNAL_SERVER_ERROR: 'Internal Server Error',\n  /** Input too large error */\n  INPUT_TOO_LARGE: (maxSize: number) => `Input exceeds maximum size of ${maxSize} bytes`,\n  /** Validation error messages */\n  VALIDATION: {\n    REQUIRED: (field: string) => `${field} is required`,\n    INVALID_TYPE: (field: string, type: string) => `${field} must be a ${type}`,\n    MIN_LENGTH: (field: string, min: number) => `${field} must be at least ${min} characters`,\n    MAX_LENGTH: (field: string, max: number) => `${field} must be at most ${max} characters`,\n    MIN_VALUE: (field: string, min: number) => `${field} must be at least ${min}`,\n    MAX_VALUE: (field: string, max: number) => `${field} must be at most ${max}`,\n    INVALID_FORMAT: (field: string) => `${field} format is invalid`,\n    INVALID_EMAIL: (field: string) => `${field} must be a valid email`,\n    INVALID_URL: (field: string) => `${field} must be a valid URL`,\n    INVALID_UUID: (field: string) => `${field} must be a valid UUID`,\n    INVALID_ENUM: (field: string, values: unknown[]) => `${field} must be one of: ${values.join(', ')}`,\n    MIN_ITEMS: (field: string, min: number) => `${field} must have at least ${min} items`,\n    MAX_ITEMS: (field: string, max: number) => `${field} must have at most ${max} items`,\n  },\n} as const;\n\n// =============================================================================\n// BLOCKED TEXT (for sanitizer replacements)\n// =============================================================================\nexport const BLOCKED = '[BLOCKED]' as const;\n","[\n  {\n    \"id\": \"ai-search-bot\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"ai-search-bot\",\n    \"patterns\": [\n      \"AISearchBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ai2-crawler\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"ai2-crawler\",\n    \"patterns\": [\n      \"AI2Bot\\\\s\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ai2-crawler-dolma\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"ai2-crawler-dolma\",\n    \"patterns\": [\n      \"Ai2Bot-Dolma\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"aihit-crawler\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"aihit-crawler\",\n    \"patterns\": [\n      \"aiHitBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"anthropic-ai-token\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"Anthropic\",\n    \"patterns\": [\n      \"anthropic-ai\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"anthropic-crawler\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"ClaudeBot\",\n    \"patterns\": [\n      \"[cC]laude(?:[bB]ot|-[Ww]eb)\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"anthropic-crawler-search\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"ClaudeSearchBot\",\n    \"patterns\": [\n      \"Claude-SearchBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"anthropic-crawler-user\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"ClaudeUser\",\n    \"patterns\": [\n      \"Claude-User\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"botify-crawler\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"botify-crawler\",\n    \"patterns\": [\n      \"botify\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"bytedance-crawler\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"Bytespider\",\n    \"patterns\": [\n      \"Bytespider\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ccbot-crawler\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"CCBot\",\n    \"patterns\": [\n      \"CCBot\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"cohere-crawler\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"cohere-crawler\",\n    \"patterns\": [\n      \"cohere-ai\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"diffbot-crawler\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"diffbot-crawler\",\n    \"patterns\": [\n      \"Diffbot\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"friendlycrawler\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"friendlycrawler\",\n    \"patterns\": [\n      \"FriendlyCrawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"glutenfreepleasure-crawler\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"glutenfreepleasure-crawler\",\n    \"patterns\": [\n      \"Gluten Free Crawler\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"imagesift-crawler\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"imagesift-crawler\",\n    \"patterns\": [\n      \"ImagesiftBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"infegy-crawler\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"infegy-crawler\",\n    \"patterns\": [\n      \"collection@infegy\\\\.com\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"integralads-crawler\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"integralads-crawler\",\n    \"patterns\": [\n      \"IAS crawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"leadcrunch-crawler\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"leadcrunch-crawler\",\n    \"patterns\": [\n      \"CrunchBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"mediatoolkit-crawler\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"mediatoolkit-crawler\",\n    \"patterns\": [\n      \"Mediatoolkitbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"meta-externalagent\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"Meta AI\",\n    \"patterns\": [\n      \"meta-externalagent\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ntent-crawler\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"ntent-crawler\",\n    \"patterns\": [\n      \"NTENTbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"omgili-crawler\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"omgili-crawler\",\n    \"patterns\": [\n      \"omgili\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"openai-crawler\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"GPTBot\",\n    \"patterns\": [\n      \"GPTBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"openai-crawler-user\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"ChatGPTUser\",\n    \"patterns\": [\n      \"ChatGPT-User\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"perplexity-crawler\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"PerplexityBot\",\n    \"patterns\": [\n      \"PerplexityBot\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"perplexity-user\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"perplexity-user\",\n    \"patterns\": [\n      \"Perplexity-User\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"primal-crawler\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"primal-crawler\",\n    \"patterns\": [\n      \"Primalbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"sbintuitions-bot\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"sbintuitions-bot\",\n    \"patterns\": [\n      \"SBIntuitionsBot\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"searchatlas-crawler\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"searchatlas-crawler\",\n    \"patterns\": [\n      \"SearchAtlas\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"sentione-crawler\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"sentione-crawler\",\n    \"patterns\": [\n      \"SentiBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"storygize-crawler\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"storygize-crawler\",\n    \"patterns\": [\n      \"StorygizeBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"timpi-crawler\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"timpi-crawler\",\n    \"patterns\": [\n      \"Timpibot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"velen-crawler\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"velen-crawler\",\n    \"patterns\": [\n      \"VelenPublicWebCrawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"webzio-crawler-ai\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"webzio-crawler-ai\",\n    \"patterns\": [\n      \"webzio-extended\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"you-crawler\",\n    \"category\": \"AI_CRAWLER\",\n    \"name\": \"you-crawler\",\n    \"patterns\": [\n      \"YouBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"cypress\",\n    \"category\": \"AUTOMATED\",\n    \"name\": \"Cypress\",\n    \"patterns\": [\n      \"[Cc]ypress\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"fake-msie6\",\n    \"category\": \"AUTOMATED\",\n    \"name\": \"Fake IE6\",\n    \"patterns\": [\n      \"MSIE 6\\\\.0\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"headless-chrome\",\n    \"category\": \"AUTOMATED\",\n    \"name\": \"Headless Chrome\",\n    \"patterns\": [\n      \"HeadlessChrome\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"javascript-phantom\",\n    \"category\": \"AUTOMATED\",\n    \"name\": \"PhantomJS\",\n    \"patterns\": [\n      \"PhantomJS\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"playwright\",\n    \"category\": \"AUTOMATED\",\n    \"name\": \"Playwright\",\n    \"patterns\": [\n      \"[Pp]laywright\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"puppeteer\",\n    \"category\": \"AUTOMATED\",\n    \"name\": \"Puppeteer\",\n    \"patterns\": [\n      \"[Pp]uppeteer\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"selenium\",\n    \"category\": \"AUTOMATED\",\n    \"name\": \"Selenium\",\n    \"patterns\": [\n      \"[Ss]elenium\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"webdriver\",\n    \"category\": \"AUTOMATED\",\n    \"name\": \"WebDriver\",\n    \"patterns\": [\n      \"[Ww]ebdriver\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"amazon-route53-health-check\",\n    \"category\": \"MONITORING\",\n    \"name\": \"amazon-route53-health-check\",\n    \"patterns\": [\n      \"Amazon Route 53 Health Check Service\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"azure-app-insights\",\n    \"category\": \"MONITORING\",\n    \"name\": \"azure-app-insights\",\n    \"patterns\": [\n      \"AppInsights\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"betterstack-monitor\",\n    \"category\": \"MONITORING\",\n    \"name\": \"betterstack-monitor\",\n    \"patterns\": [\n      \"Better Stack\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"betteruptime-monitor\",\n    \"category\": \"MONITORING\",\n    \"name\": \"betteruptime-monitor\",\n    \"patterns\": [\n      \"Better Uptime Bot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"brandverity-crawler\",\n    \"category\": \"MONITORING\",\n    \"name\": \"brandverity-crawler\",\n    \"patterns\": [\n      \"BrandVerity\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"censys-inspect\",\n    \"category\": \"MONITORING\",\n    \"name\": \"censys-inspect\",\n    \"patterns\": [\n      \"CensysInspect\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"changedetection-crawler\",\n    \"category\": \"MONITORING\",\n    \"name\": \"changedetection-crawler\",\n    \"patterns\": [\n      \"changedetection\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"checkly-monitor\",\n    \"category\": \"MONITORING\",\n    \"name\": \"checkly-monitor\",\n    \"patterns\": [\n      \"Checkly\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"cloudflare-healthchecks\",\n    \"category\": \"MONITORING\",\n    \"name\": \"cloudflare-healthchecks\",\n    \"patterns\": [\n      \"Cloudflare-Healthchecks\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"cloudflare-security-center\",\n    \"category\": \"MONITORING\",\n    \"name\": \"cloudflare-security-center\",\n    \"patterns\": [\n      \"https:\\\\/\\\\/developers\\\\.cloudflare\\\\.com\\\\/security-center\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"cloudflare-ssl-detector\",\n    \"category\": \"MONITORING\",\n    \"name\": \"cloudflare-ssl-detector\",\n    \"patterns\": [\n      \"Cloudflare-SSLDetector\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"cloudflare-traffic-manager\",\n    \"category\": \"MONITORING\",\n    \"name\": \"cloudflare-traffic-manager\",\n    \"patterns\": [\n      \"Cloudflare-Traffic-Manager\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"datadog-monitor-synthetics\",\n    \"category\": \"MONITORING\",\n    \"name\": \"Datadog\",\n    \"patterns\": [\n      \"Datadog\\\\/{0,1}Synthetics\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"deadlinkchecker\",\n    \"category\": \"MONITORING\",\n    \"name\": \"deadlinkchecker\",\n    \"patterns\": [\n      \"deadlinkchecker\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"disqus-crawler\",\n    \"category\": \"MONITORING\",\n    \"name\": \"disqus-crawler\",\n    \"patterns\": [\n      \"Disqus\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"dubbot-crawler\",\n    \"category\": \"MONITORING\",\n    \"name\": \"dubbot-crawler\",\n    \"patterns\": [\n      \"Dubbotbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"dynatrace-monitor\",\n    \"category\": \"MONITORING\",\n    \"name\": \"dynatrace-monitor\",\n    \"patterns\": [\n      \"RuxitSynthetic\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"freewebmonitoring-monitor\",\n    \"category\": \"MONITORING\",\n    \"name\": \"freewebmonitoring-monitor\",\n    \"patterns\": [\n      \"FreeWebMonitoring SiteChecker\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"freshworks-monitor\",\n    \"category\": \"MONITORING\",\n    \"name\": \"freshworks-monitor\",\n    \"patterns\": [\n      \"FreshpingBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"google-certificates-bridge\",\n    \"category\": \"MONITORING\",\n    \"name\": \"google-certificates-bridge\",\n    \"patterns\": [\n      \"Google-Certificates-Bridge\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"google-site-verification\",\n    \"category\": \"MONITORING\",\n    \"name\": \"google-site-verification\",\n    \"patterns\": [\n      \"Google-Site-Verification\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"google-structured-data-testing-tool\",\n    \"category\": \"MONITORING\",\n    \"name\": \"google-structured-data-testing-tool\",\n    \"patterns\": [\n      \"Google-Structured-Data-Testing-Tool\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"hubspot-crawler\",\n    \"category\": \"MONITORING\",\n    \"name\": \"HubSpotBot\",\n    \"patterns\": [\n      \"HubSpot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"hydrozen-monitor\",\n    \"category\": \"MONITORING\",\n    \"name\": \"hydrozen-monitor\",\n    \"patterns\": [\n      \"Hydrozen\\\\.io\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"kuma-monitor\",\n    \"category\": \"MONITORING\",\n    \"name\": \"kuma-monitor\",\n    \"patterns\": [\n      \"Uptime-Kuma\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"monitorbacklinks-crawler\",\n    \"category\": \"MONITORING\",\n    \"name\": \"monitorbacklinks-crawler\",\n    \"patterns\": [\n      \"MBCrawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"newrelic-monitor\",\n    \"category\": \"MONITORING\",\n    \"name\": \"newrelic-monitor\",\n    \"patterns\": [\n      \"NewRelicbot\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"nixstats-crawler\",\n    \"category\": \"MONITORING\",\n    \"name\": \"nixstats-crawler\",\n    \"patterns\": [\n      \"NIXStatsbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"outbrain-link-checker\",\n    \"category\": \"MONITORING\",\n    \"name\": \"outbrain-link-checker\",\n    \"patterns\": [\n      \"outbrain\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"pingdom-crawler\",\n    \"category\": \"MONITORING\",\n    \"name\": \"Pingdom\",\n    \"patterns\": [\n      \"[pP]ingdom\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"safedns-crawler\",\n    \"category\": \"MONITORING\",\n    \"name\": \"safedns-crawler\",\n    \"patterns\": [\n      \"SafeDNSBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"sentry-crawler\",\n    \"category\": \"MONITORING\",\n    \"name\": \"sentry-crawler\",\n    \"patterns\": [\n      \"(^| )sentry\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"sentry-uptime-monitor\",\n    \"category\": \"MONITORING\",\n    \"name\": \"sentry-uptime-monitor\",\n    \"patterns\": [\n      \"SentryUptimeBot\\\\/1\\\\.0\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"statuscake-monitor\",\n    \"category\": \"MONITORING\",\n    \"name\": \"statuscake-monitor\",\n    \"patterns\": [\n      \"StatusCake\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"surly-crawler\",\n    \"category\": \"MONITORING\",\n    \"name\": \"surly-crawler\",\n    \"patterns\": [\n      \"SurdotlyBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"testomato-crawler\",\n    \"category\": \"MONITORING\",\n    \"name\": \"testomato-crawler\",\n    \"patterns\": [\n      \"minicrawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"uptime-monitor\",\n    \"category\": \"MONITORING\",\n    \"name\": \"uptime-monitor\",\n    \"patterns\": [\n      \"www\\\\.uptime\\\\.com\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"uptimebot-monitor\",\n    \"category\": \"MONITORING\",\n    \"name\": \"uptimebot-monitor\",\n    \"patterns\": [\n      \"Uptimebot\\\\.org\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"uptimerobot-monitor\",\n    \"category\": \"MONITORING\",\n    \"name\": \"UptimeRobot\",\n    \"patterns\": [\n      \"UptimeRobot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"w3c-validator-css\",\n    \"category\": \"MONITORING\",\n    \"name\": \"w3c-validator-css\",\n    \"patterns\": [\n      \"W3C_CSS_Validator\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"w3c-validator-feed\",\n    \"category\": \"MONITORING\",\n    \"name\": \"w3c-validator-feed\",\n    \"patterns\": [\n      \"FeedValidator\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"w3c-validator-html\",\n    \"category\": \"MONITORING\",\n    \"name\": \"w3c-validator-html\",\n    \"patterns\": [\n      \"W3C_Validator\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"w3c-validator-html-nu\",\n    \"category\": \"MONITORING\",\n    \"name\": \"w3c-validator-html-nu\",\n    \"patterns\": [\n      \"Validator\\\\.nu\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"w3c-validator-i18n\",\n    \"category\": \"MONITORING\",\n    \"name\": \"w3c-validator-i18n\",\n    \"patterns\": [\n      \"W3C_I18n-Checker\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"w3c-validator-links\",\n    \"category\": \"MONITORING\",\n    \"name\": \"w3c-validator-links\",\n    \"patterns\": [\n      \"W3C-checklink\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"w3c-validator-mobile\",\n    \"category\": \"MONITORING\",\n    \"name\": \"w3c-validator-mobile\",\n    \"patterns\": [\n      \"W3C-mobileOK\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"w3c-validator-unified\",\n    \"category\": \"MONITORING\",\n    \"name\": \"w3c-validator-unified\",\n    \"patterns\": [\n      \"W3C_Unicorn\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"webpagetest-crawler\",\n    \"category\": \"MONITORING\",\n    \"name\": \"webpagetest-crawler\",\n    \"patterns\": [\n      \"(^| )PTST\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"xenu-crawler\",\n    \"category\": \"MONITORING\",\n    \"name\": \"xenu-crawler\",\n    \"patterns\": [\n      \"Xenu Link Sleuth\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"zabbix-monitor\",\n    \"category\": \"MONITORING\",\n    \"name\": \"zabbix-monitor\",\n    \"patterns\": [\n      \"Zabbix\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"academicbot-rtu\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"academicbot-rtu\",\n    \"patterns\": [\n      \"AcademicBotRTU\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"adagio-crawler\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"adagio-crawler\",\n    \"patterns\": [\n      \"Adagiobot\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ahrefs-site-audit\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"ahrefs-site-audit\",\n    \"patterns\": [\n      \"AhrefsSiteAudit\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"blackboard-crawler\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"blackboard-crawler\",\n    \"patterns\": [\n      \"Blackboard\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"cispa-crawler\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"cispa-crawler\",\n    \"patterns\": [\n      \"CISPA Webcrawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"cloudflare-prefetch\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"cloudflare-prefetch\",\n    \"patterns\": [\n      \"CloudFlare-Prefetch\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"coda-server-fetcher\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"coda-server-fetcher\",\n    \"patterns\": [\n      \"Coda-Server-Fetcher\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"conductor-crawler\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"conductor-crawler\",\n    \"patterns\": [\n      \"Caliperbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"cookiehub-scan\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"cookiehub-scan\",\n    \"patterns\": [\n      \"CookieHubScan\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"curl\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"curl\",\n    \"patterns\": [\n      \"^curl\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"dareboost-crawler\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"dareboost-crawler\",\n    \"patterns\": [\n      \"DareBoost\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"dcrawl\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"dcrawl\",\n    \"patterns\": [\n      \"dcrawl\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"domainsproject-crawler\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"domainsproject-crawler\",\n    \"patterns\": [\n      \"Domains Project\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"epfl-crawler\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"epfl-crawler\",\n    \"patterns\": [\n      \"A Patent Crawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"gigablast-crawler-oss\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"gigablast-crawler-oss\",\n    \"patterns\": [\n      \"Gigablast\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"go-http\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"Go-http-client\",\n    \"patterns\": [\n      \"Go-http-client\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"got\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"got\",\n    \"patterns\": [\n      \"sindresorhus\\\\/got\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"gowiki-crawler\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"gowiki-crawler\",\n    \"patterns\": [\n      \"Gowikibot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"http-get\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"http-get\",\n    \"patterns\": [\n      \"http_get\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"httpie\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"HTTPie\",\n    \"patterns\": [\n      \"^HTTPie\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"img2dataset\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"img2dataset\",\n    \"patterns\": [\n      \"img2dataset\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"insomnia\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"Insomnia\",\n    \"patterns\": [\n      \"^[iI]nsomnia\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ipip-crawler\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"ipip-crawler\",\n    \"patterns\": [\n      \"HTTP Banner Detection\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"java-apache-httpclient\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"Apache HttpClient\",\n    \"patterns\": [\n      \"^Apache-HttpClient\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"java-asynchttpclient\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"java-asynchttpclient\",\n    \"patterns\": [\n      \"AHC\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"java-crawler4j\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"java-crawler4j\",\n    \"patterns\": [\n      \"crawler4j\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"java-httpunit\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"java-httpunit\",\n    \"patterns\": [\n      \"httpunit\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"java-jersey\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"java-jersey\",\n    \"patterns\": [\n      \"HttpUrlConnection\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"java-jetty\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"java-jetty\",\n    \"patterns\": [\n      \"Jetty\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"java-okhttp\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"OkHttp\",\n    \"patterns\": [\n      \"okhttp\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"java-snacktory\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"java-snacktory\",\n    \"patterns\": [\n      \"Snacktory\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"java-stdlib\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"Java HttpClient\",\n    \"patterns\": [\n      \"^Java\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"javascript-axios\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"axios\",\n    \"patterns\": [\n      \"axios\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"javascript-node-fetch\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"node-fetch\",\n    \"patterns\": [\n      \"node-fetch\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"l9explore\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"l9explore\",\n    \"patterns\": [\n      \"l9explore\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"law-unimi-crawler\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"law-unimi-crawler\",\n    \"patterns\": [\n      \"BUbiNG\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"leipzig-findlinks\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"leipzig-findlinks\",\n    \"patterns\": [\n      \"findlink\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"leipzig-lcc\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"leipzig-lcc\",\n    \"patterns\": [\n      \"^LCC \"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"macocu-crawler\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"macocu-crawler\",\n    \"patterns\": [\n      \"MaCoCu\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"moat-crawler\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"moat-crawler\",\n    \"patterns\": [\n      \"moatbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"monsido-crawler\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"monsido-crawler\",\n    \"patterns\": [\n      \"Monsidobot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"moz-site-audit\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"RogerBot\",\n    \"patterns\": [\n      \"rogerbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"nagios-check-http\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"nagios-check-http\",\n    \"patterns\": [\n      \"check_http\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"nict-crawler\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"nict-crawler\",\n    \"patterns\": [\n      \"ICC-Crawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"nmap\",\n    \"category\": \"SECURITY_SCANNER\",\n    \"name\": \"nmap\",\n    \"patterns\": [\n      \"Nmap Scripting Engine\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"nutch\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"nutch\",\n    \"patterns\": [\n      \"Nutch\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"oncrawl\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"oncrawl\",\n    \"patterns\": [\n      \"OnCrawl\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"perl-libwww\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"libwww-perl\",\n    \"patterns\": [\n      \"libwww-perl\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"perl-pcore\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"perl-pcore\",\n    \"patterns\": [\n      \"Pcore-HTTP\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"php-curlclass\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"php-curlclass\",\n    \"patterns\": [\n      \"^PHP-Curl-Class\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"php-phpcrawl\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"php-phpcrawl\",\n    \"patterns\": [\n      \"phpcrawl\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"php-simple-scraper\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"php-simple-scraper\",\n    \"patterns\": [\n      \"SimpleScraper\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"php-simplepie\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"php-simplepie\",\n    \"patterns\": [\n      \"SimplePie\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"php-ua\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"PHP\",\n    \"patterns\": [\n      \"^PHP\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"postman\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"Postman\",\n    \"patterns\": [\n      \"PostmanRuntime\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"postman-loose\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"Postman\",\n    \"patterns\": [\n      \"^Postman[ /]\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"python-aiohttp\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"python-aiohttp\",\n    \"patterns\": [\n      \"aiohttp\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"python-bitbot\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"python-bitbot\",\n    \"patterns\": [\n      \"BitBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"python-httpx\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"python-httpx\",\n    \"patterns\": [\n      \"httpx\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"python-opengraph\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"python-opengraph\",\n    \"patterns\": [\n      \"python-opengraph\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"python-requests\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"python-requests\",\n    \"patterns\": [\n      \"python-requests\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"python-scrapy\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"Scrapy\",\n    \"patterns\": [\n      \"Scrapy\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"python-urllib\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"python-urllib\",\n    \"patterns\": [\n      \"Python-urllib\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"quantcast-crawler\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"quantcast-crawler\",\n    \"patterns\": [\n      \"Quantcastbot\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ruby\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"Ruby\",\n    \"patterns\": [\n      \"^Ruby\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ruby-metainspector\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"ruby-metainspector\",\n    \"patterns\": [\n      \"MetaInspector\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"screamingfrog-crawler\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"screamingfrog-crawler\",\n    \"patterns\": [\n      \"Screaming Frog SEO Spider\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"semanticscholar-crawler\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"SemanticScholarBot\",\n    \"patterns\": [\n      \"SemanticScholarBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"sistrix-crawler\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"sistrix-crawler\",\n    \"patterns\": [\n      \"(sistrix|SISTRIX) [cC]rawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"sitebulb\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"sitebulb\",\n    \"patterns\": [\n      \"sitebulb\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"stripe-crawler\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"stripe-crawler\",\n    \"patterns\": [\n      \"Stripebot\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"summaly-crawler\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"summaly-crawler\",\n    \"patterns\": [\n      \"SummalyBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"turnitin-crawler\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"turnitin-crawler\",\n    \"patterns\": [\n      \"Turnitin\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"utexas-crawler\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"utexas-crawler\",\n    \"patterns\": [\n      \"UT-Dorkbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"wget\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"wget\",\n    \"patterns\": [\n      \"[wW]get\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"yamanalab-crawler\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"yamanalab-crawler\",\n    \"patterns\": [\n      \"Sonic\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"yext-bot\",\n    \"category\": \"SCRAPER\",\n    \"name\": \"yext-bot\",\n    \"patterns\": [\n      \"YextBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"zgrab\",\n    \"category\": \"SECURITY_SCANNER\",\n    \"name\": \"zgrab\",\n    \"patterns\": [\n      \"zgrab\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"addsearch-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"addsearch-crawler\",\n    \"patterns\": [\n      \"AddSearchBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ahrefs-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"AhrefsBot\",\n    \"patterns\": [\n      \"AhrefsBot\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"alexandria-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"alexandria-crawler\",\n    \"patterns\": [\n      \"AlexandriaOrgBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"algolia-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"algolia-crawler\",\n    \"patterns\": [\n      \"Algolia Crawler\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"amazon-adbot\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"amazon-adbot\",\n    \"patterns\": [\n      \"AmazonAdBot\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"amazon-alexa-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"amazon-alexa-crawler\",\n    \"patterns\": [\n      \"exabot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"amazon-cloudfront\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"amazon-cloudfront\",\n    \"patterns\": [\n      \"Amazon CloudFront\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"amazon-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"AmazonBot\",\n    \"patterns\": [\n      \"Amazonbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"apple-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"Applebot\",\n    \"patterns\": [\n      \"Applebot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"apple-feedfetcher\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"apple-feedfetcher\",\n    \"patterns\": [\n      \"i[Tt][Mm][Ss]\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"archiveorg-archiver\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"ArchiveOrgBot\",\n    \"patterns\": [\n      \"archive\\\\.org_bot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ask-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"ask-crawler\",\n    \"patterns\": [\n      \"Teoma\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"avira-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"avira-crawler\",\n    \"patterns\": [\n      \"SafeSearch microdata crawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"awario-crawler-rss\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"awario-crawler-rss\",\n    \"patterns\": [\n      \"AwarioRssBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"baidu-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"Baiduspider\",\n    \"patterns\": [\n      \"Baiduspider\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"bazqux-feedfetcher\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"bazqux-feedfetcher\",\n    \"patterns\": [\n      \"BazQux\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"bing-ads\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"bing-ads\",\n    \"patterns\": [\n      \"Adidxbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"bing-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"Bingbot\",\n    \"patterns\": [\n      \"bingbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"bing-office-store\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"bing-office-store\",\n    \"patterns\": [\n      \"officestorebot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"blogtraffic-feedfetcher\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"blogtraffic-feedfetcher\",\n    \"patterns\": [\n      \"BlogTraffic\\\\/\\\\d\\\\.\\\\d+ Feed-Fetcher\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"cloudflare-archiver\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"cloudflare-archiver\",\n    \"patterns\": [\n      \"CloudFlare-AlwaysOnline\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"commoncrawl-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"CommonCrawlBot\",\n    \"patterns\": [\n      \"CCBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"duckduckgo-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"DuckDuckBot\",\n    \"patterns\": [\n      \"DuckDuckBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"entireweb-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"entireweb-crawler\",\n    \"patterns\": [\n      \"speedy\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ezid-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"ezid-crawler\",\n    \"patterns\": [\n      \"EZID\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"feedbin-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"feedbin-crawler\",\n    \"patterns\": [\n      \"Feedbin\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"feedly-feedfetcher\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"feedly-feedfetcher\",\n    \"patterns\": [\n      \"Feedly\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"feedspot-feedfetcher\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"feedspot-feedfetcher\",\n    \"patterns\": [\n      \"Feedspot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"freshrss-feedfetcher\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"freshrss-feedfetcher\",\n    \"patterns\": [\n      \"FreshRSS\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"g2reader-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"g2reader-crawler\",\n    \"patterns\": [\n      \"g2reader-bot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"geedo-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"geedo-crawler\",\n    \"patterns\": [\n      \"GeedoBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"geedo-crawler-products\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"geedo-crawler-products\",\n    \"patterns\": [\n      \"GeedoProductSearch\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"google-ads-conversions\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"google-ads-conversions\",\n    \"patterns\": [\n      \"Google-Ads-Conversions\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"google-adsbot\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"AdsBotGoogle\",\n    \"patterns\": [\n      \"AdsBot-Google([^-]|$)\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"google-adsbot-mobile\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"GoogleAdsBot\",\n    \"patterns\": [\n      \"AdsBot-Google-Mobile\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"google-adsense\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"MediapartnersGoogle\",\n    \"patterns\": [\n      \"Mediapartners-Google\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"google-adsense-googlebot\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"google-adsense-googlebot\",\n    \"patterns\": [\n      \"Mediapartners \\\\(Googlebot\\\\)\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"google-adwords\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"google-adwords\",\n    \"patterns\": [\n      \"Google-Adwords-Instant\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"google-appengine\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"google-appengine\",\n    \"patterns\": [\n      \"AppEngine-Google\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"google-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"Googlebot\",\n    \"patterns\": [\n      \"Googlebot\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"google-crawler-cloudvertex\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"google-crawler-cloudvertex\",\n    \"patterns\": [\n      \"Google-CloudVertexBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"google-crawler-image\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"Googlebot-Image\",\n    \"patterns\": [\n      \"Googlebot-Image\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"google-crawler-mobile\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"google-crawler-mobile\",\n    \"patterns\": [\n      \"Googlebot-Mobile\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"google-crawler-news\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"Googlebot-News\",\n    \"patterns\": [\n      \"Googlebot-News\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"google-crawler-other\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"google-crawler-other\",\n    \"patterns\": [\n      \"GoogleOther\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"google-crawler-safety\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"google-crawler-safety\",\n    \"patterns\": [\n      \"Google-Safety\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"google-crawler-store\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"StorebotGoogle\",\n    \"patterns\": [\n      \"Storebot-Google\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"google-crawler-video\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"Googlebot-Video\",\n    \"patterns\": [\n      \"Googlebot-Video\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"google-feedfetcher\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"google-feedfetcher\",\n    \"patterns\": [\n      \"Feedfetcher-Google\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"google-inspection-tool\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"google-inspection-tool\",\n    \"patterns\": [\n      \"Google-InspectionTool\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"google-lighthouse\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"google-lighthouse\",\n    \"patterns\": [\n      \"Chrome-Lighthouse\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"google-physical-web\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"google-physical-web\",\n    \"patterns\": [\n      \"Google-PhysicalWeb\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"google-push-notifications\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"APIsGoogle\",\n    \"patterns\": [\n      \"APIs-Google\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"google-read-aloud\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"google-read-aloud\",\n    \"patterns\": [\n      \"Google-Read-Aloud\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"google-xrawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"google-xrawler\",\n    \"patterns\": [\n      \"google-xrawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"iask-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"iask-crawler\",\n    \"patterns\": [\n      \"iaskspider\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"inoreader-aggregator\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"inoreader-aggregator\",\n    \"patterns\": [\n      \"inoreader\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"internetarchive-crawler-oss\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"internetarchive-crawler-oss\",\n    \"patterns\": [\n      \"heritrix\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"linguee-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"linguee-crawler\",\n    \"patterns\": [\n      \"Linguee Bot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"majestic-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"majestic-crawler\",\n    \"patterns\": [\n      \"MJ12bot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"marginalia-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"marginalia-crawler\",\n    \"patterns\": [\n      \"search\\\\.marginalia\\\\.nu\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"meta-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"meta-crawler\",\n    \"patterns\": [\n      \"[Mm]eta-[Ee]xternal[Aa]gent\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"meta-externalads\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"meta-externalads\",\n    \"patterns\": [\n      \"meta-externalads\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"microsoft-research-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"microsoft-research-crawler\",\n    \"patterns\": [\n      \"msrbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"miniflux-feedfetcher\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"miniflux-feedfetcher\",\n    \"patterns\": [\n      \"Miniflux\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"mojeek-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"mojeek-crawler\",\n    \"patterns\": [\n      \"MojeekBot\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"msn-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"MsnBot\",\n    \"patterns\": [\n      \"msnbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"naver-crawler-rss\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"naver-crawler-rss\",\n    \"patterns\": [\n      \"NAVER Blog Rssbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"netestate-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"netestate-crawler\",\n    \"patterns\": [\n      \"netEstate NE Crawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"newsblur-aggregator\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"newsblur-aggregator\",\n    \"patterns\": [\n      \"NewsBlur\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"nicecrawler-archive\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"nicecrawler-archive\",\n    \"patterns\": [\n      \"Nicecrawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"openai-crawler-search\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"OAISearchBot\",\n    \"patterns\": [\n      \"OAI-SearchBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"petalsearch-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"petalsearch-crawler\",\n    \"patterns\": [\n      \"PetalBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"pipl-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"pipl-crawler\",\n    \"patterns\": [\n      \"PiplBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"pocket-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"pocket-crawler\",\n    \"patterns\": [\n      \"PocketParser\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"qwant-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"qwant-crawler\",\n    \"patterns\": [\n      \"Qwantify\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"refind-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"refind-crawler\",\n    \"patterns\": [\n      \"Refindbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"rssbot-feedfetcher\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"rssbot-feedfetcher\",\n    \"patterns\": [\n      \"rssbot\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"rssing-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"rssing-crawler\",\n    \"patterns\": [\n      \"RSSingBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"rssmicro-feedfetcher\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"rssmicro-feedfetcher\",\n    \"patterns\": [\n      \"Atom Feed Robot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"seekport-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"seekport-crawler\",\n    \"patterns\": [\n      \"Seekport\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"serendeputy-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"serendeputy-crawler\",\n    \"patterns\": [\n      \"SerendeputyBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"startme-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"startme-crawler\",\n    \"patterns\": [\n      \"startmebot\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"stract-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"stract-crawler\",\n    \"patterns\": [\n      \"StractBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"superfeedr-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"superfeedr-crawler\",\n    \"patterns\": [\n      \"Superfeedr\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"theoldreader-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"theoldreader-crawler\",\n    \"patterns\": [\n      \"theoldreader\\\\.com\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ttrss-feedfetcher\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"ttrss-feedfetcher\",\n    \"patterns\": [\n      \"Tiny Tiny RSS\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"webarchive-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"webarchive-crawler\",\n    \"patterns\": [\n      \"web-archive-net\\\\.com\\\\.bot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"webzio-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"webzio-crawler\",\n    \"patterns\": [\n      \"webzio\\\\s\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"wellknown-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"wellknown-crawler\",\n    \"patterns\": [\n      \"WellKnownBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"wordpress-crawler-rss\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"wordpress-crawler-rss\",\n    \"patterns\": [\n      \"feedbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"yacy-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"yacy-crawler\",\n    \"patterns\": [\n      \"yacybot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"yahoo-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"SlurpBot\",\n    \"patterns\": [\n      \"Slurp\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"yahoo-crawler-japan\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"yahoo-crawler-japan\",\n    \"patterns\": [\n      \"Y!J\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"yandex-crawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"YandexBot\",\n    \"patterns\": [\n      \"yandex\\\\.com\\\\/bots\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"yandex-crawler-javascript\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"yandex-crawler-javascript\",\n    \"patterns\": [\n      \"YandexRenderResourcesBot\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"yandex-loose\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"name\": \"YandexBot\",\n    \"patterns\": [\n      \"YandexBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"adyen-webhook\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"adyen-webhook\",\n    \"patterns\": [\n      \"Adyen HttpClient\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"bing-preview\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"BingPreviewBot\",\n    \"patterns\": [\n      \"BingPreview\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"bitly-crawler\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"bitly-crawler\",\n    \"patterns\": [\n      \"bitlybot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"digg-crawler\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"digg-crawler\",\n    \"patterns\": [\n      \"Digg Deeper\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"discord-crawler\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"Discordbot\",\n    \"patterns\": [\n      \"Discordbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"duckduckgo-crawler-favicons\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"duckduckgo-crawler-favicons\",\n    \"patterns\": [\n      \"DuckDuckGo-Favicons-Bot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"embedly-crawler\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"EmbedlyBot\",\n    \"patterns\": [\n      \"Embedly\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"everyonesocial-crawler\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"everyonesocial-crawler\",\n    \"patterns\": [\n      \"EveryoneSocialBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"facebook-catalog\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"facebook-catalog\",\n    \"patterns\": [\n      \"facebookcatalog\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"facebook-crawler\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"FacebookBot\",\n    \"patterns\": [\n      \"Face(book){0,1}[Bb]ot\"\n    ],\n    \"forbidden\": [\n      \"facebookexternalhit\",\n      \"Twitterbot\"\n    ]\n  },\n  {\n    \"id\": \"facebook-share-crawler\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"Facebook\",\n    \"patterns\": [\n      \"facebookexternalhit\"\n    ],\n    \"forbidden\": [\n      \"Twitterbot\",\n      \"Facebot\"\n    ]\n  },\n  {\n    \"id\": \"flipboard-proxy\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"flipboard-proxy\",\n    \"patterns\": [\n      \"FlipboardProxy\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"google-favicon\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"google-favicon\",\n    \"patterns\": [\n      \"Google Favicon\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"google-preview\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"google-preview\",\n    \"patterns\": [\n      \"Google Web Preview\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"google-web-snippet\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"google-web-snippet\",\n    \"patterns\": [\n      \"developers\\\\.google\\\\.com\\\\/\\\\+\\\\/web\\\\/snippet\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"groupme-crawler\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"groupme-crawler\",\n    \"patterns\": [\n      \"GroupMeBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"iframely-preview\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"iframely-preview\",\n    \"patterns\": [\n      \"Iframely\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"imessage-preview\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"imessage-preview\",\n    \"patterns\": [\n      \"facebookexternalhit\",\n      \"Twitterbot\",\n      \"Facebot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"irc-archivebot\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"ArchiveBot\",\n    \"patterns\": [\n      \"ArchiveBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"keybase-bot\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"keybase-bot\",\n    \"patterns\": [\n      \"KeybaseBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"lemmy-crawler\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"lemmy-crawler\",\n    \"patterns\": [\n      \"Lemmy\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"linkarchiver\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"linkarchiver\",\n    \"patterns\": [\n      \"LinkArchiver\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"linkedin-crawler\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"LinkedInBot\",\n    \"patterns\": [\n      \"LinkedInBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"mastodon-crawler\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"MastodonBot\",\n    \"patterns\": [\n      \"Mastodon\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"meta-crawler-user\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"meta-crawler-user\",\n    \"patterns\": [\n      \"meta-externalfetcher\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"microsoft-preview\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"microsoft-preview\",\n    \"patterns\": [\n      \"MicrosoftPreview\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"neticle-crawler\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"neticle-crawler\",\n    \"patterns\": [\n      \"Neticle Crawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"pagepeeker-crawler\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"pagepeeker-crawler\",\n    \"patterns\": [\n      \"PagePeeker\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"pinterest-crawler\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"pinterest-crawler\",\n    \"patterns\": [\n      \"Pinterest(bot)?\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"pintrest-crawler\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"PinterestBot\",\n    \"patterns\": [\n      \"pinterest\\\\.com\\\\/bot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"reddit-crawler\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"RedditBot\",\n    \"patterns\": [\n      \"redditbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"skype-preview\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"skype-preview\",\n    \"patterns\": [\n      \"SkypeUriPreview\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"slack-crawler\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"Slackbot\",\n    \"patterns\": [\n      \"Slackbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"slack-image-proxy\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"slack-image-proxy\",\n    \"patterns\": [\n      \"Slack-ImgProxy\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"snap-preview\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"snap-preview\",\n    \"patterns\": [\n      \"Snap URL Preview Service\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"steam-preview\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"ValveSteamBot\",\n    \"patterns\": [\n      \"Valve\\\\/Steam\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"stripe-webhook\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"stripe-webhook\",\n    \"patterns\": [\n      \"Stripe\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"synapse-crawler\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"synapse-crawler\",\n    \"patterns\": [\n      \"Synapse\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"telegram-crawler\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"TelegramBot\",\n    \"patterns\": [\n      \"TelegramBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"tiktok-crawler\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"tiktok-crawler\",\n    \"patterns\": [\n      \"TikTokSpider\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"trendsmap-crawler\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"trendsmap-crawler\",\n    \"patterns\": [\n      \"TrendsmapResolver\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"tweetedtimes-crawler\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"tweetedtimes-crawler\",\n    \"patterns\": [\n      \"tweetedtimes\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"twitter-crawler\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"Twitterbot\",\n    \"patterns\": [\n      \"Twitterbot\"\n    ],\n    \"forbidden\": [\n      \"facebookexternalhit\",\n      \"Facebot\"\n    ]\n  },\n  {\n    \"id\": \"vercel-crawler\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"vercel-crawler\",\n    \"patterns\": [\n      \"Vercelbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"vercel-monitor-preview\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"vercel-monitor-preview\",\n    \"patterns\": [\n      \"vercel-screenshot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"viber-crawler\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"ViberBot\",\n    \"patterns\": [\n      \"Viber\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"whatsapp-crawler\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"WhatsApp\",\n    \"patterns\": [\n      \"WhatsApp\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"yahoo-preview\",\n    \"category\": \"SOCIAL\",\n    \"name\": \"yahoo-preview\",\n    \"patterns\": [\n      \"Yahoo Link Preview\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"a6corp-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"a6corp-crawler\",\n    \"patterns\": [\n      \"A6-Indexer\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"aboundex-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"aboundex-crawler\",\n    \"patterns\": [\n      \"Aboundex\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"acapbot\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"acapbot\",\n    \"patterns\": [\n      \"acapbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"acoon-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"acoon-crawler\",\n    \"patterns\": [\n      \"acoonbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"adbeat-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"adbeat-crawler\",\n    \"patterns\": [\n      \"adbeat_bot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"addthis-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"addthis-crawler\",\n    \"patterns\": [\n      \"AddThis\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"admantx-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"admantx-crawler\",\n    \"patterns\": [\n      \"ADmantX\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"adscanner-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"adscanner-crawler\",\n    \"patterns\": [\n      \"adscanner\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"adstxtcrawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"adstxtcrawler\",\n    \"patterns\": [\n      \"AdsTxtCrawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"advbot-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"advbot-crawler\",\n    \"patterns\": [\n      \"AdvBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"alphaseobot-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"alphaseobot-crawler\",\n    \"patterns\": [\n      \"AlphaBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"anderspink-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"anderspink-crawler\",\n    \"patterns\": [\n      \"AndersPinkBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"antibot\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"antibot\",\n    \"patterns\": [\n      \"antibot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"apercite-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"apercite-crawler\",\n    \"patterns\": [\n      \"Apercite\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ara-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"ara-crawler\",\n    \"patterns\": [\n      \"arabot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"araturka-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"araturka-crawler\",\n    \"patterns\": [\n      \"Bot\\\\.AraTurka\\\\.com\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"arocom-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"arocom-crawler\",\n    \"patterns\": [\n      \"drupact\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"aspiegel-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"aspiegel-crawler\",\n    \"patterns\": [\n      \"AspiegelBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"audisto-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"audisto-crawler\",\n    \"patterns\": [\n      \"Audisto Crawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"awario-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"awario-crawler\",\n    \"patterns\": [\n      \"AwarioBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"awario-crawler-smart\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"awario-crawler-smart\",\n    \"patterns\": [\n      \"AwarioSmartBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"awesomecrawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"awesomecrawler\",\n    \"patterns\": [\n      \"awesomecrawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"b2bbot\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"b2bbot\",\n    \"patterns\": [\n      \"B2B Bot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"backlinktest-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"backlinktest-crawler\",\n    \"patterns\": [\n      \"backlinkcrawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"baidu-cloud-watch\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"baidu-cloud-watch\",\n    \"patterns\": [\n      \"Baidu-YunGuanCe\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"betabot\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"betabot\",\n    \"patterns\": [\n      \"betaBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"bidswitch-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"bidswitch-crawler\",\n    \"patterns\": [\n      \"bidswitchbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"bigdatacorp-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"bigdatacorp-crawler\",\n    \"patterns\": [\n      \"BDCbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"biglotron\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"biglotron\",\n    \"patterns\": [\n      \"BIGLOTRON\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"binlar\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"binlar\",\n    \"patterns\": [\n      \"binlar\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"bitsight-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"bitsight-crawler\",\n    \"patterns\": [\n      \"BitSightBot\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"blogmura-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"blogmura-crawler\",\n    \"patterns\": [\n      \"blogmuraBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"blp-bbot\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"blp-bbot\",\n    \"patterns\": [\n      \"BLP_bbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"bnf-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"bnf-crawler\",\n    \"patterns\": [\n      \"bnf\\\\.fr_bot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"bombora-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"bombora-crawler\",\n    \"patterns\": [\n      \"BomboraBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"boxcar-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"boxcar-crawler\",\n    \"patterns\": [\n      \"BoxcarBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"brainobot\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"brainobot\",\n    \"patterns\": [\n      \"brainobot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"brandonmedia-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"brandonmedia-crawler\",\n    \"patterns\": [\n      \"BrandONbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"brandwatch-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"brandwatch-crawler\",\n    \"patterns\": [\n      \"magpie-crawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"brightedge-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"brightedge-crawler\",\n    \"patterns\": [\n      \"BrightEdge Crawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"bublup-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"bublup-crawler\",\n    \"patterns\": [\n      \"BublupBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"builtwith-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"builtwith-crawler\",\n    \"patterns\": [\n      \"^BW\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"buzzstream-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"buzzstream-crawler\",\n    \"patterns\": [\n      \"buzzbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"capsulink-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"capsulink-crawler\",\n    \"patterns\": [\n      \"CapsuleChecker\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"careerx-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"careerx-crawler\",\n    \"patterns\": [\n      \"careerbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"centurybot\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"centurybot\",\n    \"patterns\": [\n      \"centurybot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"checkmarknetwork-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"checkmarknetwork-crawler\",\n    \"patterns\": [\n      \"CheckMarkNetwork\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"chlooe-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"chlooe-crawler\",\n    \"patterns\": [\n      \"bot-pge\\\\.chlooe\\\\.com\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"cincrawdata-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"cincrawdata-crawler\",\n    \"patterns\": [\n      \"Cincraw\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"citeseerx-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"citeseerx-crawler\",\n    \"patterns\": [\n      \"citeseerxbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"clickagy-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"clickagy-crawler\",\n    \"patterns\": [\n      \"Clickagy\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"cliqz-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"cliqz-crawler\",\n    \"patterns\": [\n      \"Cliqzbot\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"cloudsystemnetworks-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"cloudsystemnetworks-crawler\",\n    \"patterns\": [\n      \"Nimbostratus-Bot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"coccoc-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"coccoc-crawler\",\n    \"patterns\": [\n      \"coccoc\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"cocolyze-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"cocolyze-crawler\",\n    \"patterns\": [\n      \"Cocolyzebot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"codewise-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"codewise-crawler\",\n    \"patterns\": [\n      \"VoluumDSP-content-bot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"cognitiveseo-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"cognitiveseo-crawler\",\n    \"patterns\": [\n      \"James BOT\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"companybook-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"companybook-crawler\",\n    \"patterns\": [\n      \"Companybook-Crawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"content-crawler-spider\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"content-crawler-spider\",\n    \"patterns\": [\n      \"content crawler spider\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"contextad-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"contextad-crawler\",\n    \"patterns\": [\n      \"ContextAd Bot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"contxbot\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"contxbot\",\n    \"patterns\": [\n      \"contxbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"convera-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"convera-crawler\",\n    \"patterns\": [\n      \"convera\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"cookiebot-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"cookiebot-crawler\",\n    \"patterns\": [\n      \"Cookiebot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"creativecommons-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"creativecommons-crawler\",\n    \"patterns\": [\n      \"CC Metadata Scaper\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"criteo-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"criteo-crawler\",\n    \"patterns\": [\n      \"CriteoBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"crystalsemantics-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"crystalsemantics-crawler\",\n    \"patterns\": [\n      \"CrystalSemanticsBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"curebot-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"curebot-crawler\",\n    \"patterns\": [\n      \"[Cc]urebot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"cutbot-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"cutbot-crawler\",\n    \"patterns\": [\n      \"Cutbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"cxense-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"cxense-crawler\",\n    \"patterns\": [\n      \"cXensebot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"cyberpatrol-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"cyberpatrol-crawler\",\n    \"patterns\": [\n      \"CyberPatrol\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"datafeedwatch-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"datafeedwatch-crawler\",\n    \"patterns\": [\n      \"Datafeedwatch\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"dataforseo-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"dataforseo-crawler\",\n    \"patterns\": [\n      \"DataForSeoBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"datagnion-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"datagnion-crawler\",\n    \"patterns\": [\n      \"datagnionbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"datanyze-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"datanyze-crawler\",\n    \"patterns\": [\n      \"Datanyze\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"dataprovider-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"dataprovider-crawler\",\n    \"patterns\": [\n      \"Dataprovider\\\\.com\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"datenbutler-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"datenbutler-crawler\",\n    \"patterns\": [\n      \"mindUpBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"daum-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"daum-crawler\",\n    \"patterns\": [\n      \"Daum\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"deepnoc-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"deepnoc-crawler\",\n    \"patterns\": [\n      \"deepnoc\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"deusu-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"deusu-crawler\",\n    \"patterns\": [\n      \"DeuSu\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"digincore-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"digincore-crawler\",\n    \"patterns\": [\n      \"Digincore bot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"digitaldragon-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"digitaldragon-crawler\",\n    \"patterns\": [\n      \"CrawlyProjectCrawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"discoveryengine-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"discoveryengine-crawler\",\n    \"patterns\": [\n      \"discobot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"dnyz-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"dnyz-crawler\",\n    \"patterns\": [\n      \"DnyzBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"domaincrawler-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"domaincrawler-crawler\",\n    \"patterns\": [\n      \"domaincrawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"domainreanimator-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"domainreanimator-crawler\",\n    \"patterns\": [\n      \"Domain Re-Animator Bot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"domainsbot-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"domainsbot-crawler\",\n    \"patterns\": [\n      \"Pandalytics\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"domainstats-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"domainstats-crawler\",\n    \"patterns\": [\n      \"DomainStatsBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"domaintools-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"domaintools-crawler\",\n    \"patterns\": [\n      \"SurveyBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"dotnetdotcom-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"dotnetdotcom-crawler\",\n    \"patterns\": [\n      \"ezooms\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"dragonmetrics-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"dragonmetrics-crawler\",\n    \"patterns\": [\n      \"Dragonbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"driftnet-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"driftnet-crawler\",\n    \"patterns\": [\n      \"InternetMeasurement\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"duedil-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"duedil-crawler\",\n    \"patterns\": [\n      \"electricmonk\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ec2linkfinder\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"ec2linkfinder\",\n    \"patterns\": [\n      \"ec2linkfinder\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"edister-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"edister-crawler\",\n    \"patterns\": [\n      \"edisterbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"elisabot\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"elisabot\",\n    \"patterns\": [\n      \"elisabot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"epictions-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"epictions-crawler\",\n    \"patterns\": [\n      \"epicbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"eright-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"eright-crawler\",\n    \"patterns\": [\n      \"eright\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"europarchive-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"europarchive-crawler\",\n    \"patterns\": [\n      \"europarchive\\\\.org\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"eventures-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"eventures-crawler\",\n    \"patterns\": [\n      \"e\\\\.ventures Investment Crawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"eventures-crawler-batch\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"eventures-crawler-batch\",\n    \"patterns\": [\n      \"evc-batch\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"exensa-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"exensa-crawler\",\n    \"patterns\": [\n      \"Bark[rR]owler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"experibot-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"experibot-crawler\",\n    \"patterns\": [\n      \"Experibot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"extlinks-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"extlinks-crawler\",\n    \"patterns\": [\n      \"ExtLinksBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"eyeota-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"eyeota-crawler\",\n    \"patterns\": [\n      \"Eyeotabot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"fast-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"fast-crawler\",\n    \"patterns\": [\n      \"FAST-WebCrawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"fast-crawler-enterprise\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"fast-crawler-enterprise\",\n    \"patterns\": [\n      \"FAST Enterprise Crawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"fedoraplanet-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"fedoraplanet-crawler\",\n    \"patterns\": [\n      \"fedoraplanet\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"feedafever-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"feedafever-crawler\",\n    \"patterns\": [\n      \"Fever\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"femtosearch-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"femtosearch-crawler\",\n    \"patterns\": [\n      \"FemtosearchBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"findthatfile-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"findthatfile-crawler\",\n    \"patterns\": [\n      \"findthatfile\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"flamingosearch-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"flamingosearch-crawler\",\n    \"patterns\": [\n      \"Flamingo_SearchEngine\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"fluffy\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"fluffy\",\n    \"patterns\": [\n      \"fluffy\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"fr-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"fr-crawler\",\n    \"patterns\": [\n      \"fr-crawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"fuelbot\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"fuelbot\",\n    \"patterns\": [\n      \"fuelbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"fyrebot\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"fyrebot\",\n    \"patterns\": [\n      \"Fyrebot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"g00g1e-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"g00g1e-crawler\",\n    \"patterns\": [\n      \"g00g1e\\\\.net\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"g2webservices-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"g2webservices-crawler\",\n    \"patterns\": [\n      \"G2 Web Services\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"garlik-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"garlik-crawler\",\n    \"patterns\": [\n      \"GarlikCrawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"genieo-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"genieo-crawler\",\n    \"patterns\": [\n      \"Genieo\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"gigablast-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"gigablast-crawler\",\n    \"patterns\": [\n      \"Gigabot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ginger-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"ginger-crawler\",\n    \"patterns\": [\n      \"GingerCrawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"gnam-gnam-spider\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"gnam-gnam-spider\",\n    \"patterns\": [\n      \"gnam gnam spider\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"gnowit-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"gnowit-crawler\",\n    \"patterns\": [\n      \"GnowitNewsbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"goo-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"goo-crawler\",\n    \"patterns\": [\n      \"ichiro\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"grapeshot-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"grapeshot-crawler\",\n    \"patterns\": [\n      \"GrapeshotCrawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"grob-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"grob-crawler\",\n    \"patterns\": [\n      \"Grobbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"grouphigh-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"grouphigh-crawler\",\n    \"patterns\": [\n      \"GroupHigh\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"grub\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"grub\",\n    \"patterns\": [\n      \"grub\\\\.org\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"gslfbot\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"gslfbot\",\n    \"patterns\": [\n      \"gslfbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"gwene-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"gwene-crawler\",\n    \"patterns\": [\n      \"Gwene\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"haosou-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"haosou-crawler\",\n    \"patterns\": [\n      \"360Spider\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"hatena-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"hatena-crawler\",\n    \"patterns\": [\n      \"Hatena\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"headline-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"headline-crawler\",\n    \"patterns\": [\n      \"ev-crawler\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"hoyer-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"hoyer-crawler\",\n    \"patterns\": [\n      \"Friendica\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"httrack\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"httrack\",\n    \"patterns\": [\n      \"HTTrack\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"hypefactors-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"hypefactors-crawler\",\n    \"patterns\": [\n      \"Buck\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"hypestat-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"hypestat-crawler\",\n    \"patterns\": [\n      \"hypestat\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"hyscore-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"hyscore-crawler\",\n    \"patterns\": [\n      \"hyscore\\\\.io\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ia-archiver\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"ia-archiver\",\n    \"patterns\": [\n      \"ia_archiver\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ideasandcode-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"ideasandcode-crawler\",\n    \"patterns\": [\n      \"ICBot\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"indeed-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"indeed-crawler\",\n    \"patterns\": [\n      \"IndeedBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"inetdex-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"inetdex-crawler\",\n    \"patterns\": [\n      \"INETDEX-BOT\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"infoo-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"infoo-crawler\",\n    \"patterns\": [\n      \"infoobot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"integromedb-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"integromedb-crawler\",\n    \"patterns\": [\n      \"integromedb\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"intelium-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"intelium-crawler\",\n    \"patterns\": [\n      \"intelium_bot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ionos-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"ionos-crawler\",\n    \"patterns\": [\n      \"IonCrawl\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ip-web-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"ip-web-crawler\",\n    \"patterns\": [\n      \"ip-web-crawler\\\\.com\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"iskanie-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"iskanie-crawler\",\n    \"patterns\": [\n      \"iskanie\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"iss-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"iss-crawler\",\n    \"patterns\": [\n      \"filterdb\\\\.iss\\\\.net\\\\/crawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"it2media-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"it2media-crawler\",\n    \"patterns\": [\n      \"it2media-domain-crawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"itinfluentials-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"itinfluentials-crawler\",\n    \"patterns\": [\n      \"FindITAnswersbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"jamiembrown-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"jamiembrown-crawler\",\n    \"patterns\": [\n      \"Jamie's Spider\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"jetslide-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"jetslide-crawler\",\n    \"patterns\": [\n      \"Jetslide\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"jobboerse-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"jobboerse-crawler\",\n    \"patterns\": [\n      \"JobboerseBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"jooble-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"jooble-crawler\",\n    \"patterns\": [\n      \"Jooblebot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"jusprog-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"jusprog-crawler\",\n    \"patterns\": [\n      \"Jugendschutzprogramm-Crawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"jyxo-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"jyxo-crawler\",\n    \"patterns\": [\n      \"jyxobot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"k7computing-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"k7computing-crawler\",\n    \"patterns\": [\n      \"K7MLWCBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"kemvi-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"kemvi-crawler\",\n    \"patterns\": [\n      \"Kemvibot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"komodia-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"komodia-crawler\",\n    \"patterns\": [\n      \"KomodiaBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"kosmio-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"kosmio-crawler\",\n    \"patterns\": [\n      \"KosmioBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"landaumedia-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"landaumedia-crawler\",\n    \"patterns\": [\n      \"Landau-Media-Spider\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"laserlike-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"laserlike-crawler\",\n    \"patterns\": [\n      \"Laserlikebot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"lb-spider\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"lb-spider\",\n    \"patterns\": [\n      \"lb-spider\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"leiki-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"leiki-crawler\",\n    \"patterns\": [\n      \"Leikibot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"lightspeedsystems-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"lightspeedsystems-crawler\",\n    \"patterns\": [\n      \"LightspeedSystemsCrawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"line-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"line-crawler\",\n    \"patterns\": [\n      \"Linespider\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"linkapedia-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"linkapedia-crawler\",\n    \"patterns\": [\n      \"linkapediabot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"linkdex-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"linkdex-crawler\",\n    \"patterns\": [\n      \"linkdex\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"linkfluence-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"linkfluence-crawler\",\n    \"patterns\": [\n      \"YaK\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"linkis-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"linkis-crawler\",\n    \"patterns\": [\n      \"LinkisBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"lipperhey-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"lipperhey-crawler\",\n    \"patterns\": [\n      \"lipperhey\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"livelap-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"livelap-crawler\",\n    \"patterns\": [\n      \"Livelap[bB]ot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"logly-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"logly-crawler\",\n    \"patterns\": [\n      \"zenback bot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"loop-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"loop-crawler\",\n    \"patterns\": [\n      \"netresearchserver\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"lssbot\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"lssbot\",\n    \"patterns\": [\n      \"lssbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"lssbot-rocket\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"lssbot-rocket\",\n    \"patterns\": [\n      \"lssrocketcrawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ltx71-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"ltx71-crawler\",\n    \"patterns\": [\n      \"ltx71\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"luminator-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"luminator-crawler\",\n    \"patterns\": [\n      \"Luminator-robots\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"mailru-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"MailRuBot\",\n    \"patterns\": [\n      \"Mail\\\\.RU_Bot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"mappydata-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"mappydata-crawler\",\n    \"patterns\": [\n      \"mappydata\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"mauibot\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"mauibot\",\n    \"patterns\": [\n      \"MauiBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"megaindex-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"megaindex-crawler\",\n    \"patterns\": [\n      \"MegaIndex\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"meltwater-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"meltwater-crawler\",\n    \"patterns\": [\n      \"MeltwaterNews\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"metadatalabs-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"metadatalabs-crawler\",\n    \"patterns\": [\n      \"mlbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"metajob-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"metajob-crawler\",\n    \"patterns\": [\n      \"MetaJobBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"metauri-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"metauri-crawler\",\n    \"patterns\": [\n      \"MetaURI\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"metricstools-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"metricstools-crawler\",\n    \"patterns\": [\n      \"MTRobot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"mignify-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"mignify-crawler\",\n    \"patterns\": [\n      \"memorybot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"mignify-imrbot\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"mignify-imrbot\",\n    \"patterns\": [\n      \"imrbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"mixnode-cache\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"mixnode-cache\",\n    \"patterns\": [\n      \"MixnodeCache\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"moodle-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"moodle-crawler\",\n    \"patterns\": [\n      \"MoodleBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"moreover-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"moreover-crawler\",\n    \"patterns\": [\n      \"Moreover\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"moz-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"moz-crawler\",\n    \"patterns\": [\n      \"dotbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"muckrack-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"muckrack-crawler\",\n    \"patterns\": [\n      \"MuckRack\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"multiviewbot\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"multiviewbot\",\n    \"patterns\": [\n      \"Multiviewbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"naver-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"naver-crawler\",\n    \"patterns\": [\n      \"Yeti\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"neeva-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"neeva-crawler\",\n    \"patterns\": [\n      \"Neevabot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"nerdbynature-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"nerdbynature-crawler\",\n    \"patterns\": [\n      \"NerdByNature\\\\.Bot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"nerdybot-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"nerdybot-crawler\",\n    \"patterns\": [\n      \"nerdybot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"netcraft-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"netcraft-crawler\",\n    \"patterns\": [\n      \"NetcraftSurveyAgent\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"netsystemsresearch-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"netsystemsresearch-crawler\",\n    \"patterns\": [\n      \"NetSystemsResearch\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"netvibes-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"netvibes-crawler\",\n    \"patterns\": [\n      \"Netvibes\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"newsharecounts-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"newsharecounts-crawler\",\n    \"patterns\": [\n      \"newsharecounts\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"newspaper\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"newspaper\",\n    \"patterns\": [\n      \"newspaper\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"nextcloud-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"NextCloudBot\",\n    \"patterns\": [\n      \"NextCloud\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"niki-bot\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"niki-bot\",\n    \"patterns\": [\n      \"niki-bot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ning-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"ning-crawler\",\n    \"patterns\": [\n      \"NING\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ninjabot\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"ninjabot\",\n    \"patterns\": [\n      \"NINJA bot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"nuzzel-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"nuzzel-crawler\",\n    \"patterns\": [\n      \"Nuzzel\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ocarinabot\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"ocarinabot\",\n    \"patterns\": [\n      \"Ocarinabot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"okru-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"okru-crawler\",\n    \"patterns\": [\n      \"OdklBot\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"opengraphcheck-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"opengraphcheck-crawler\",\n    \"patterns\": [\n      \"OpenGraphCheck\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"openhose-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"openhose-crawler\",\n    \"patterns\": [\n      \"OpenHoseBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"openindex-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"openindex-crawler\",\n    \"patterns\": [\n      \"openindexspider\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"orange-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"orange-crawler\",\n    \"patterns\": [\n      \"OrangeBot\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"orange-ftgroup-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"orange-ftgroup-crawler\",\n    \"patterns\": [\n      \"voilabot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"outclicks-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"outclicks-crawler\",\n    \"patterns\": [\n      \"OutclicksBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"page-to-rss\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"page-to-rss\",\n    \"patterns\": [\n      \"page2rss\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"pagething-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"pagething-crawler\",\n    \"patterns\": [\n      \"PageThing\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"paloaltonetworks-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"paloaltonetworks-crawler\",\n    \"patterns\": [\n      \"Expanse\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"panscient-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"panscient-crawler\",\n    \"patterns\": [\n      \"panscient\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"paperli-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"paperli-crawler\",\n    \"patterns\": [\n      \"PaperLiBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"phxbot\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"phxbot\",\n    \"patterns\": [\n      \"PhxBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"picsearch-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"picsearch-crawler\",\n    \"patterns\": [\n      \"psbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"postrank-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"postrank-crawler\",\n    \"patterns\": [\n      \"postrank\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"prcy-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"prcy-crawler\",\n    \"patterns\": [\n      \"PR-CY\\\\.RU\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"privacore-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"privacore-crawler\",\n    \"patterns\": [\n      \"findxbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"privacyaware-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"privacyaware-crawler\",\n    \"patterns\": [\n      \"PrivacyAwareBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"profound-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"profound-crawler\",\n    \"patterns\": [\n      \"urlappendbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"proximic-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"proximic-crawler\",\n    \"patterns\": [\n      \"proximic\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"pulsepoint-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"pulsepoint-crawler\",\n    \"patterns\": [\n      \"Pulsepoint\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"pure-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"pure-crawler\",\n    \"patterns\": [\n      \"purebot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"rankactive-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"rankactive-crawler\",\n    \"patterns\": [\n      \"RankActiveLinkBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"retrevo-page-analyzer\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"retrevo-page-analyzer\",\n    \"patterns\": [\n      \"RetrevoPageAnalyzer\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ridder-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"ridder-crawler\",\n    \"patterns\": [\n      \"RidderBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"rivva-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"rivva-crawler\",\n    \"patterns\": [\n      \"Rivva\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ryte-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"ryte-crawler\",\n    \"patterns\": [\n      \"RyteBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"scan-interfax-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"scan-interfax-crawler\",\n    \"patterns\": [\n      \"InterfaxScanBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"schmorp-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"schmorp-crawler\",\n    \"patterns\": [\n      \"AnyEvent\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"scoutjet-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"scoutjet-crawler\",\n    \"patterns\": [\n      \"ScoutJet\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"scribd-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"scribd-crawler\",\n    \"patterns\": [\n      \"scribdbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"scritch-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"scritch-crawler\",\n    \"patterns\": [\n      \"Fetch\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"seekbot-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"seekbot-crawler\",\n    \"patterns\": [\n      \"seekbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"seewithkids-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"seewithkids-crawler\",\n    \"patterns\": [\n      \"seewithkids\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"semanticaudience-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"semanticaudience-crawler\",\n    \"patterns\": [\n      \"semanticbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"sempitech-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"sempitech-crawler\",\n    \"patterns\": [\n      \"sempi\\\\.tech\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"semrush-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"SemRushBot\",\n    \"patterns\": [\n      \"S[eE][mM]rushBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"senuto-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"senuto-crawler\",\n    \"patterns\": [\n      \"SenutoBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"seobility-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"seobility-crawler\",\n    \"patterns\": [\n      \"SeobilityBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"seokicks-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"seokicks-crawler\",\n    \"patterns\": [\n      \"SEOkicks\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"seolizer-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"seolizer-crawler\",\n    \"patterns\": [\n      \"SEOlizer\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"seoprofiler-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"seoprofiler-crawler\",\n    \"patterns\": [\n      \"spbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"seoscanners-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"seoscanners-crawler\",\n    \"patterns\": [\n      \"seoscanners\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"seostar-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"seostar-crawler\",\n    \"patterns\": [\n      \"seostar\\\\.co\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"seozoom-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"ZoomBot\",\n    \"patterns\": [\n      \"ZoomBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"serpstatbot-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"serpstatbot-crawler\",\n    \"patterns\": [\n      \"serpstatbot\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"seznam-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"seznam-crawler\",\n    \"patterns\": [\n      \"SeznamBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"similartech-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"similartech-crawler\",\n    \"patterns\": [\n      \"smtbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"simple-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"simple-crawler\",\n    \"patterns\": [\n      \"SimpleCrawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"sistrix-007ac9-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"sistrix-007ac9-crawler\",\n    \"patterns\": [\n      \"007ac9 Crawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"sitebot-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"sitebot-crawler\",\n    \"patterns\": [\n      \"sitebot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"sitechecker-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"sitechecker-crawler\",\n    \"patterns\": [\n      \"SiteCheckerBotCrawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"siteexplorer-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"siteexplorer-crawler\",\n    \"patterns\": [\n      \"siteexplorer\\\\.info\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"siteimprove-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"siteimprove-crawler\",\n    \"patterns\": [\n      \"Siteimprove\\\\.com\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"socialrank-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"socialrank-crawler\",\n    \"patterns\": [\n      \"SocialRankIOBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"softbytelabs-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"softbytelabs-crawler\",\n    \"patterns\": [\n      \"SBL-BOT\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"sogou-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"sogou-crawler\",\n    \"patterns\": [\n      \"Sogou\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"stuttgart-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"stuttgart-crawler\",\n    \"patterns\": [\n      \"RegionStuttgartBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"summify-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"summify-crawler\",\n    \"patterns\": [\n      \"summify\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"swimgbot\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"swimgbot\",\n    \"patterns\": [\n      \"SWIMGBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"sysomos-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"sysomos-crawler\",\n    \"patterns\": [\n      \"Sysomos\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"t3versions-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"t3versions-crawler\",\n    \"patterns\": [\n      \"t3versionsBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"taboola-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"taboola-crawler\",\n    \"patterns\": [\n      \"Taboolabot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"tagoo-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"tagoo-crawler\",\n    \"patterns\": [\n      \"tagoobot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"tangiblee-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"tangiblee-crawler\",\n    \"patterns\": [\n      \"TangibleeBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"thinklab-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"thinklab-crawler\",\n    \"patterns\": [\n      \"Thinklab\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"tiger-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"tiger-crawler\",\n    \"patterns\": [\n      \"tigerbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"tineye-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"tineye-crawler\",\n    \"patterns\": [\n      \"TinEye\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"tiscali-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"tiscali-crawler\",\n    \"patterns\": [\n      \"IstellaBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"tombascraper-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"tombascraper-crawler\",\n    \"patterns\": [\n      \"TombaPublicWebCrawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"toplist-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"toplist-crawler\",\n    \"patterns\": [\n      \"toplistbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"torus-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"torus-crawler\",\n    \"patterns\": [\n      \"ReverseEngineeringBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"toutiao-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"toutiao-crawler\",\n    \"patterns\": [\n      \"ToutiaoSpider\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"traackr-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"traackr-crawler\",\n    \"patterns\": [\n      \"Traackr\\\\.com\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"tracemyfile-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"tracemyfile-crawler\",\n    \"patterns\": [\n      \"tracemyfile\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"trendiction-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"trendiction-crawler\",\n    \"patterns\": [\n      \"trendictionbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"trove-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"trove-crawler\",\n    \"patterns\": [\n      \"Trove\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"trovit-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"trovit-crawler\",\n    \"patterns\": [\n      \"trovitBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"tweetmemebot\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"tweetmemebot\",\n    \"patterns\": [\n      \"TweetmemeBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"twenga-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"twenga-crawler\",\n    \"patterns\": [\n      \"twengabot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"twingly-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"twingly-crawler\",\n    \"patterns\": [\n      \"Twingly\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"twoip-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"twoip-crawler\",\n    \"patterns\": [\n      \"2ip bot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"twoip-crawler-cms\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"twoip-crawler-cms\",\n    \"patterns\": [\n      \"2ip\\\\.ru\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"twurly-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"twurly-crawler\",\n    \"patterns\": [\n      \"Twurly\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ubermetrics-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"ubermetrics-crawler\",\n    \"patterns\": [\n      \"um-LN\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ubt-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"ubt-crawler\",\n    \"patterns\": [\n      \"Streamline3Bot\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"upflow-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"upflow-crawler\",\n    \"patterns\": [\n      \"Upflow\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"urlclassification-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"urlclassification-crawler\",\n    \"patterns\": [\n      \"KStandBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"usine-nouvelle-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"usine-nouvelle-crawler\",\n    \"patterns\": [\n      \"UsineNouvelleCrawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"utorrent-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"utorrent-crawler\",\n    \"patterns\": [\n      \"BTWebClient\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"vebidoo-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"vebidoo-crawler\",\n    \"patterns\": [\n      \"vebidoobot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"veooz-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"veooz-crawler\",\n    \"patterns\": [\n      \"Veoozbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"verisign-ips-agent\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"verisign-ips-agent\",\n    \"patterns\": [\n      \"ips-agent\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"vigil-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"vigil-crawler\",\n    \"patterns\": [\n      \"Vigil\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"vipnytt-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"vipnytt-crawler\",\n    \"patterns\": [\n      \"jpg-newsbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"virustotal-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"virustotal-crawler\",\n    \"patterns\": [\n      \"virustotal\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"vkrobot-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"vkrobot-crawler\",\n    \"patterns\": [\n      \"VKRobot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"vkshare-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"vkshare-crawler\",\n    \"patterns\": [\n      \"vkShare\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"vuhuv-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"vuhuv-crawler\",\n    \"patterns\": [\n      \"vuhuvBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"warebay-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"warebay-crawler\",\n    \"patterns\": [\n      \"wbsearchbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"webceo-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"webceo-crawler\",\n    \"patterns\": [\n      \"online-webceo-bot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"webcompany-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"webcompany-crawler\",\n    \"patterns\": [\n      \"webcompanycrawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"webdatastats-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"webdatastats-crawler\",\n    \"patterns\": [\n      \"WebDataStats\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"webeaver-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"webeaver-crawler\",\n    \"patterns\": [\n      \"BehloolBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"webmeup-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"webmeup-crawler\",\n    \"patterns\": [\n      \"BLEXBot\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"webmon\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"webmon\",\n    \"patterns\": [\n      \"webmon \"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"wesee-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"wesee-crawler\",\n    \"patterns\": [\n      \"WeSEE:Search\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"wocodi-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"wocodi-crawler\",\n    \"patterns\": [\n      \"wocbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"woorank-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"woorank-crawler\",\n    \"patterns\": [\n      \"woobot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"woorank-crawler-review\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"woorank-crawler-review\",\n    \"patterns\": [\n      \"woorankreview\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"wordpress-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"WordPressBot\",\n    \"patterns\": [\n      \"WordPress\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"wordup-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"wordup-crawler\",\n    \"patterns\": [\n      \"WordupInfoSearch\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"worio-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"worio-crawler\",\n    \"patterns\": [\n      \"woriobot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"wotbox-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"wotbox-crawler\",\n    \"patterns\": [\n      \"wotbox\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"xovibot-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"xovibot-crawler\",\n    \"patterns\": [\n      \"xovibot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"yanga-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"yanga-crawler\",\n    \"patterns\": [\n      \"yanga\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"yellowbp-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"yellowbp-crawler\",\n    \"patterns\": [\n      \"Yellowbrandprotectionbot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"yisou-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"yisou-crawler\",\n    \"patterns\": [\n      \"YisouSpider\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"yooz-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"yooz-crawler\",\n    \"patterns\": [\n      \"yoozBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"zoominfo-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"zoominfo-crawler\",\n    \"patterns\": [\n      \"ZoominfoBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"zum-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"ZumBot\",\n    \"patterns\": [\n      \"ZumBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"zuperlist-crawler\",\n    \"category\": \"UNKNOWN\",\n    \"name\": \"zuperlist-crawler\",\n    \"patterns\": [\n      \"ZuperlistBot\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-ahrefsbotsiteaudit\",\n    \"name\": \"ahrefsbotsiteaudit\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"patterns\": [\n      \"Ahrefs(Bot|SiteAudit)\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-amazonproductdiscovery\",\n    \"name\": \"amazonproductdiscovery\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"patterns\": [\n      \"AmazonProductDiscovery\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-amazonsellerinitiatedlisting\",\n    \"name\": \"amazonsellerinitiatedlisting\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"patterns\": [\n      \"AmazonSellerInitiatedListing\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-cclaudebbot\",\n    \"name\": \"cclaudebbot\",\n    \"category\": \"SCRAPER\",\n    \"patterns\": [\n      \"[cC]laude[bB]ot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-meta-externalagent\",\n    \"name\": \"meta-externalagent\",\n    \"category\": \"SCRAPER\",\n    \"patterns\": [\n      \"meta-externalagent\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-meta-externalfetcher\",\n    \"name\": \"meta-externalfetcher\",\n    \"category\": \"SCRAPER\",\n    \"patterns\": [\n      \"meta-externalfetcher\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-hydrozenio\",\n    \"name\": \"hydrozenio\",\n    \"category\": \"MONITORING\",\n    \"patterns\": [\n      \"Hydrozen\\\\.io\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-yextbot\",\n    \"name\": \"yextbot\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"patterns\": [\n      \"YextBot\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-datadogsynthetics\",\n    \"name\": \"datadogsynthetics\",\n    \"category\": \"MONITORING\",\n    \"patterns\": [\n      \"DatadogSynthetics\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-observepoint\",\n    \"name\": \"observepoint\",\n    \"category\": \"MONITORING\",\n    \"patterns\": [\n      \"ObservePoint\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-checkly\",\n    \"name\": \"checkly\",\n    \"category\": \"MONITORING\",\n    \"patterns\": [\n      \"Checkly\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-alittleclient\",\n    \"name\": \"alittleclient\",\n    \"category\": \"SCRAPER\",\n    \"patterns\": [\n      \"ALittle Client\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-aliyunsecbot\",\n    \"name\": \"aliyunsecbot\",\n    \"category\": \"SCRAPER\",\n    \"patterns\": [\n      \"AliyunSecBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-claude-web\",\n    \"name\": \"claude-web\",\n    \"category\": \"SCRAPER\",\n    \"patterns\": [\n      \"Claude-Web\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-google-extended\",\n    \"name\": \"google-extended\",\n    \"category\": \"SCRAPER\",\n    \"patterns\": [\n      \"Google-Extended\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-serankingbacklinksbot\",\n    \"name\": \"serankingbacklinksbot\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"patterns\": [\n      \"SERankingBacklinksBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-cmschecker\",\n    \"name\": \"cmschecker\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"patterns\": [\n      \"CMSChecker\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-wayback\",\n    \"name\": \"wayback\",\n    \"category\": \"SCRAPER\",\n    \"patterns\": [\n      \"Wayback\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-playwright\",\n    \"name\": \"playwright\",\n    \"category\": \"SCRAPER\",\n    \"patterns\": [\n      \"Playwright\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-puppeteer\",\n    \"name\": \"puppeteer\",\n    \"category\": \"SCRAPER\",\n    \"patterns\": [\n      \"Puppeteer\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-selenium\",\n    \"name\": \"selenium\",\n    \"category\": \"SCRAPER\",\n    \"patterns\": [\n      \"Selenium\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-nikto\",\n    \"name\": \"nikto\",\n    \"category\": \"SECURITY_SCANNER\",\n    \"patterns\": [\n      \"Nikto\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-sqlmap\",\n    \"name\": \"sqlmap\",\n    \"category\": \"SECURITY_SCANNER\",\n    \"patterns\": [\n      \"sqlmap\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-zmeu\",\n    \"name\": \"zmeu\",\n    \"category\": \"SECURITY_SCANNER\",\n    \"patterns\": [\n      \"ZmEu\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-masscan\",\n    \"name\": \"masscan\",\n    \"category\": \"SECURITY_SCANNER\",\n    \"patterns\": [\n      \"masscan\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-wpscan\",\n    \"name\": \"wpscan\",\n    \"category\": \"SECURITY_SCANNER\",\n    \"patterns\": [\n      \"WPScan\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-aacunetix\",\n    \"name\": \"aacunetix\",\n    \"category\": \"SECURITY_SCANNER\",\n    \"patterns\": [\n      \"[aA]cunetix\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-nessus\",\n    \"name\": \"nessus\",\n    \"category\": \"SECURITY_SCANNER\",\n    \"patterns\": [\n      \"Nessus\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-ddirbbuster\",\n    \"name\": \"ddirbbuster\",\n    \"category\": \"SECURITY_SCANNER\",\n    \"patterns\": [\n      \"[dD]ir[Bb]uster\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-colly\",\n    \"name\": \"colly\",\n    \"category\": \"SCRAPER\",\n    \"patterns\": [\n      \"colly\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-mmechanize\",\n    \"name\": \"mmechanize\",\n    \"category\": \"SCRAPER\",\n    \"patterns\": [\n      \"[mM]echanize\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-airaiscanning\",\n    \"name\": \"airaiscanning\",\n    \"category\": \"SCRAPER\",\n    \"patterns\": [\n      \"air\\\\.ai\\\\/scanning\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-asnriskscorer\",\n    \"name\": \"asnriskscorer\",\n    \"category\": \"SCRAPER\",\n    \"patterns\": [\n      \"asnriskscorer\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-oicrawler\",\n    \"name\": \"oicrawler\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"patterns\": [\n      \"OICrawler\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-l9scan\",\n    \"name\": \"l9scan\",\n    \"category\": \"SECURITY_SCANNER\",\n    \"patterns\": [\n      \"l9scan\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-slaccalebot\",\n    \"name\": \"slaccalebot\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"patterns\": [\n      \"SlaccaleBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-customasynchttpclient\",\n    \"name\": \"customasynchttpclient\",\n    \"category\": \"SCRAPER\",\n    \"patterns\": [\n      \"CustomAsyncHttpClient\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-gemini-deep-research\",\n    \"name\": \"gemini-deep-research\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"patterns\": [\n      \"Gemini-Deep-Research\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-perplexity-user\",\n    \"name\": \"perplexity-user\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"patterns\": [\n      \"Perplexity-User\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-perplexityuser\",\n    \"name\": \"perplexityuser\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"patterns\": [\n      \"PerplexityUser\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-meta-webindexer\",\n    \"name\": \"meta-webindexer\",\n    \"category\": \"SCRAPER\",\n    \"patterns\": [\n      \"meta-webindexer\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-duckassistbot\",\n    \"name\": \"duckassistbot\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"patterns\": [\n      \"DuckAssistBot\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-mistralai-user\",\n    \"name\": \"mistralai-user\",\n    \"category\": \"SCRAPER\",\n    \"patterns\": [\n      \"MistralAI-User\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-webzio\",\n    \"name\": \"webzio\",\n    \"category\": \"SEARCH_ENGINE\",\n    \"patterns\": [\n      \"webzio\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-newsai\",\n    \"name\": \"newsai\",\n    \"category\": \"SCRAPER\",\n    \"patterns\": [\n      \"newsai\\\\/\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"arcis-nuclei\",\n    \"category\": \"SECURITY_SCANNER\",\n    \"name\": \"nuclei\",\n    \"patterns\": [\n      \"Nuclei\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-openvas\",\n    \"category\": \"SECURITY_SCANNER\",\n    \"name\": \"openvas\",\n    \"patterns\": [\n      \"OpenVAS\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-ffuf\",\n    \"category\": \"SECURITY_SCANNER\",\n    \"name\": \"ffuf\",\n    \"patterns\": [\n      \"Fuzz Faster U Fool\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-nasl\",\n    \"category\": \"SECURITY_SCANNER\",\n    \"name\": \"nasl\",\n    \"patterns\": [\n      \".nasl\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-feroxbuster\",\n    \"category\": \"SECURITY_SCANNER\",\n    \"name\": \"feroxbuster\",\n    \"patterns\": [\n      \"feroxbuster\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-gobuster\",\n    \"category\": \"SECURITY_SCANNER\",\n    \"name\": \"gobuster\",\n    \"patterns\": [\n      \"gobuster\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-arachni\",\n    \"category\": \"SECURITY_SCANNER\",\n    \"name\": \"arachni\",\n    \"patterns\": [\n      \"Arachni\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-w3af\",\n    \"category\": \"SECURITY_SCANNER\",\n    \"name\": \"w3af\",\n    \"patterns\": [\n      \"w3af\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-skipfish\",\n    \"category\": \"SECURITY_SCANNER\",\n    \"name\": \"skipfish\",\n    \"patterns\": [\n      \"skipfish\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-netsparker\",\n    \"category\": \"SECURITY_SCANNER\",\n    \"name\": \"netsparker\",\n    \"patterns\": [\n      \"Netsparker\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-whatweb\",\n    \"category\": \"SECURITY_SCANNER\",\n    \"name\": \"whatweb\",\n    \"patterns\": [\n      \"WhatWeb\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-wfuzz\",\n    \"category\": \"SECURITY_SCANNER\",\n    \"name\": \"wfuzz\",\n    \"patterns\": [\n      \"Wfuzz\"\n    ],\n    \"forbidden\": []\n  },\n  {\n    \"id\": \"ext-qualys\",\n    \"category\": \"SECURITY_SCANNER\",\n    \"name\": \"qualys\",\n    \"patterns\": [\n      \"Qualys\"\n    ],\n    \"forbidden\": []\n  }\n]","/**\n * @module @arcis/node/middleware/bot-detection\n * Local-only bot detection using User-Agent and behavioral signals.\n *\n * Categorizes requests into bot types and allows/denies based on config.\n * No cloud calls — everything runs locally.\n *\n * @example\n * // Block automated tools, allow search engines\n * app.use(botProtection({\n *   allow: ['SEARCH_ENGINE', 'SOCIAL', 'MONITORING'],\n *   deny: ['AUTOMATED', 'SCRAPER'],\n * }));\n */\n\nimport type { Request, Response, NextFunction, RequestHandler } from 'express';\nimport BOT_PATTERN_DATA from '../data/bot-patterns.json';\n\n// =============================================================================\n// BOT CATEGORIES\n// =============================================================================\n\nexport type BotCategory =\n  | 'SEARCH_ENGINE'\n  | 'SOCIAL'\n  | 'MONITORING'\n  | 'AI_CRAWLER'\n  | 'SCRAPER'\n  | 'SECURITY_SCANNER'\n  | 'AUTOMATED'\n  | 'UNKNOWN'\n  | 'HUMAN';\n\nexport interface BotDetectionResult {\n  /** Whether the request appears to be from a bot */\n  isBot: boolean;\n  /** Bot category */\n  category: BotCategory;\n  /** Matched bot name (e.g. 'Googlebot', 'curl') or null */\n  name: string | null;\n  /** Confidence score: 0-1 */\n  confidence: number;\n  /** Behavioral signals detected */\n  signals: string[];\n}\n\nexport interface BotProtectionOptions {\n  /** Categories to explicitly allow. Default: ['SEARCH_ENGINE', 'SOCIAL', 'MONITORING'] */\n  allow?: BotCategory[];\n  /** Categories to explicitly deny. Default: ['AUTOMATED'] */\n  deny?: BotCategory[];\n  /** Action for categories not in allow or deny. Default: 'allow' */\n  defaultAction?: 'allow' | 'deny';\n  /** HTTP status code for denied bots. Default: 403 */\n  statusCode?: number;\n  /** Error message for denied bots */\n  message?: string;\n  /** Enable behavioral signal detection. Default: true */\n  detectBehavior?: boolean;\n  /** Custom handler called on detection (instead of default deny response) */\n  onDetected?: (req: Request, res: Response, result: BotDetectionResult) => void;\n}\n\n// =============================================================================\n// BOT DATABASE\n// =============================================================================\n\ninterface BotPattern {\n  /** Compiled regex(es) to match against the User-Agent. ANY match counts. */\n  patterns: RegExp[];\n  /** Compiled forbidden patterns. If ANY matches, this entry is rejected. */\n  forbidden: RegExp[];\n  /** Bot name (e.g. 'Googlebot') */\n  name: string;\n  /** Category */\n  category: BotCategory;\n  /** Stable identifier from the source corpus */\n  id: string;\n}\n\n/**\n * Source data for the bot corpus — `packages/core/bot-patterns.json`, derived\n * from arcjet/well-known-bots (MIT) plus a supplementary list of browser\n * automation tools the upstream doesn't separately track. Regenerate via\n * `python packages/core/generate-bot-patterns.py` after upgrading the source.\n */\ninterface BotPatternData {\n  id: string;\n  name: string;\n  category: string;\n  patterns: string[];\n  forbidden: string[];\n}\n\nfunction compilePattern(source: string): RegExp {\n  // Patterns from the corpus are JS-style regex bodies (no enclosing /.../ ).\n  // Compile case-insensitive: matches Arcis's documented contract that bot\n  // detection ignores UA case (`GPTBOT` and `gptbot` match the same entry).\n  // This is additive on top of Arcjet's explicit character classes like\n  // `[wW]get` — the `i` flag doesn't conflict with character ranges.\n  return new RegExp(source, 'i');\n}\n\nconst BOT_PATTERNS: BotPattern[] = (BOT_PATTERN_DATA as BotPatternData[]).map((entry) => ({\n  id: entry.id,\n  name: entry.name,\n  category: entry.category as BotCategory,\n  patterns: entry.patterns.map(compilePattern),\n  forbidden: entry.forbidden.map(compilePattern),\n}));\n\n// Snapshot of the bundled set, captured before any cloud merge, so tests can\n// restore a clean baseline.\nconst BUNDLED_PATTERNS: BotPattern[] = [...BOT_PATTERNS];\n\n/**\n * Merge cloud-fetched bot-corpus entries into the live pattern set (Phase C\n * cloud refresh). New ids are appended; existing ids are replaced in place so\n * a curated correction overrides the bundled entry. An entry with an\n * uncompilable pattern is skipped — this never throws into the refresh path\n * (fail-open). Process-global by design: the corpus is a singleton, same as the\n * bundled import. Returns the number of entries merged.\n */\nexport function mergeBotPatterns(entries: BotPatternData[]): number {\n  let merged = 0;\n  for (const entry of entries) {\n    try {\n      const compiled: BotPattern = {\n        id: entry.id,\n        name: entry.name,\n        category: entry.category as BotCategory,\n        patterns: entry.patterns.map(compilePattern),\n        forbidden: entry.forbidden.map(compilePattern),\n      };\n      const idx = BOT_PATTERNS.findIndex((b) => b.id === entry.id);\n      if (idx >= 0) BOT_PATTERNS[idx] = compiled;\n      else BOT_PATTERNS.push(compiled);\n      merged += 1;\n    } catch {\n      // skip an entry with a bad regex; never break the refresh\n    }\n  }\n  return merged;\n}\n\n/** Test hook — restore the bundled corpus, dropping any cloud-merged entries. */\nexport function _resetBotPatternsForTest(): void {\n  BOT_PATTERNS.length = 0;\n  BOT_PATTERNS.push(...BUNDLED_PATTERNS);\n}\n\n\n// =============================================================================\n// DETECTION ENGINE\n// =============================================================================\n\n/**\n * Detect behavioral signals that suggest a bot.\n */\nfunction detectBehavioralSignals(req: Request): string[] {\n  const signals: string[] = [];\n  const headers = req.headers;\n\n  // Missing User-Agent\n  if (!headers['user-agent']) {\n    signals.push('missing_user_agent');\n  }\n\n  // Missing Accept header (browsers always send this)\n  if (!headers['accept']) {\n    signals.push('missing_accept');\n  }\n\n  // Missing Accept-Language (browsers always send this)\n  if (!headers['accept-language']) {\n    signals.push('missing_accept_language');\n  }\n\n  // Missing Accept-Encoding (browsers always send this)\n  if (!headers['accept-encoding']) {\n    signals.push('missing_accept_encoding');\n  }\n\n  // Connection: close (browsers typically use keep-alive)\n  if (headers['connection'] === 'close') {\n    signals.push('connection_close');\n  }\n\n  return signals;\n}\n\n/**\n * Detect what kind of bot (if any) is making the request.\n *\n * @param req - HTTP request object\n * @returns Detection result with category, name, confidence, and signals\n *\n * @example\n * const result = detectBot(req);\n * if (result.isBot && result.category === 'AUTOMATED') {\n *   // Block automated tools\n * }\n */\nexport function detectBot(req: Request): BotDetectionResult {\n  const rawUa = req.headers['user-agent'] ?? '';\n  // SECURITY: A UA longer than 2048 chars is either buggy client or attempt to hide\n  // a bot signature past a truncation boundary. Flag as suspicious bot directly —\n  // don't silently truncate and continue.\n  if (rawUa.length > 2048) {\n    return {\n      isBot: true,\n      category: 'UNKNOWN',\n      name: null,\n      confidence: 0.9,\n      signals: detectBehavioralSignals(req),\n    };\n  }\n  const ua = rawUa;\n  const signals = detectBehavioralSignals(req);\n\n  // No User-Agent at all\n  if (!ua) {\n    return {\n      isBot: true,\n      category: 'UNKNOWN',\n      name: null,\n      confidence: 0.8,\n      signals,\n    };\n  }\n\n  // Match against known bot patterns. An entry matches when ALL of its\n  // accepted patterns match AND none of its forbidden patterns matches.\n  // ALL-of semantics makes multi-pattern entries (e.g. iMessage-Preview which\n  // expects both `facebookexternalhit` and `Twitterbot` in the same UA) only\n  // fire on real iMessage traffic, not on bare `Twitterbot/1.0` requests.\n  // Single-pattern entries (the common case) reduce trivially to that one\n  // pattern matching.\n  for (const bot of BOT_PATTERNS) {\n    let allMatched = bot.patterns.length > 0;\n    for (const pattern of bot.patterns) {\n      if (!pattern.test(ua)) {\n        allMatched = false;\n        break;\n      }\n    }\n    if (!allMatched) continue;\n\n    let forbidden = false;\n    for (const pattern of bot.forbidden) {\n      if (pattern.test(ua)) {\n        forbidden = true;\n        break;\n      }\n    }\n    if (forbidden) continue;\n\n    return {\n      isBot: true,\n      category: bot.category,\n      name: bot.name,\n      confidence: 0.95,\n      signals,\n    };\n  }\n\n  // Behavioral analysis for unrecognized UAs\n  const behaviorScore = signals.length;\n\n  // 3+ missing standard headers = likely bot\n  if (behaviorScore >= 3) {\n    return {\n      isBot: true,\n      category: 'UNKNOWN',\n      name: null,\n      confidence: Math.min(1.0, 0.6 + (behaviorScore * 0.1)),\n      signals,\n    };\n  }\n\n  return {\n    isBot: false,\n    category: 'HUMAN',\n    name: null,\n    confidence: Math.max(0.0, 1.0 - (behaviorScore * 0.15)),\n    signals,\n  };\n}\n\n/**\n * Create Express middleware for bot protection.\n *\n * @example\n * // Block automated tools and scrapers\n * app.use(botProtection({\n *   allow: ['SEARCH_ENGINE', 'SOCIAL', 'MONITORING'],\n *   deny: ['AUTOMATED', 'SCRAPER'],\n * }));\n *\n * @example\n * // Block everything except search engines\n * app.use(botProtection({\n *   allow: ['SEARCH_ENGINE'],\n *   defaultAction: 'deny',\n * }));\n *\n * @example\n * // Custom handler\n * app.use(botProtection({\n *   deny: ['AUTOMATED'],\n *   onDetected: (req, res, result) => {\n *     console.log(`Bot blocked: ${result.name} (${result.category})`);\n *     res.status(403).json({ error: 'Bots not allowed' });\n *   },\n * }));\n */\nexport function botProtection(options: BotProtectionOptions = {}): RequestHandler {\n  const {\n    allow = ['SEARCH_ENGINE', 'SOCIAL', 'MONITORING'],\n    deny = ['AUTOMATED'],\n    defaultAction = 'allow',\n    statusCode = 403,\n    message = 'Access denied.',\n    onDetected,\n  } = options;\n\n  const allowSet = new Set(allow);\n  const denySet = new Set(deny);\n\n  return (req: Request, res: Response, next: NextFunction) => {\n    const result = detectBot(req);\n\n    // Attach result to request for downstream use\n    (req as unknown as Record<string, unknown>).botDetection = result;\n\n    // Humans always pass\n    if (!result.isBot) {\n      return next();\n    }\n\n    // Check explicit allow/deny lists\n    if (allowSet.has(result.category)) {\n      return next();\n    }\n\n    if (denySet.has(result.category)) {\n      // Telemetry attribution: dashboard groups bot denials under vector=bot.\n      req.__arcis = {\n        vector: 'bot',\n        rule: `bot/${result.category.toLowerCase()}`,\n        severity: 'medium',\n        reason: result.name ? `Bot detected: ${result.name}` : 'Bot detected',\n        decision: 'deny',\n      };\n      if (onDetected) {\n        return onDetected(req, res, result);\n      }\n      res.status(statusCode).json({ error: message });\n      return;\n    }\n\n    // Default action for uncategorized bots\n    if (defaultAction === 'deny') {\n      req.__arcis = {\n        vector: 'bot',\n        rule: 'bot/uncategorized',\n        severity: 'medium',\n        reason: 'Uncategorized bot under defaultAction=deny',\n        decision: 'deny',\n      };\n      if (onDetected) {\n        return onDetected(req, res, result);\n      }\n      res.status(statusCode).json({ error: message });\n      return;\n    }\n\n    next();\n  };\n}\n","/**\n * @module @arcis/node/fastify\n *\n * Fastify plugin for Arcis. Registers `onRequest` (rate-limit + bot) and\n * `onSend` (security headers) hooks so the protections compose with any\n * other Fastify plugins your app uses.\n *\n * ```ts\n * import Fastify from 'fastify';\n * import { arcisFastify } from '@arcis/node/fastify';\n *\n * const app = Fastify();\n * await app.register(arcisFastify, {\n *   rateLimit: { max: 100, windowMs: 60_000 },\n *   bot: true,\n * });\n *\n * app.get('/', async () => ({ ok: true }));\n * await app.listen({ port: 3000 });\n * ```\n *\n * No runtime dependency on `fastify` — its types are duck-typed enough to\n * satisfy Fastify's actual `FastifyInstance` / `FastifyRequest` /\n * `FastifyReply` shapes without pulling Fastify into peer-deps.\n *\n * For body-content inspection (the `block: true` flow other adapters\n * expose), drop the standard Express adapter (`arcis()` from the package\n * root) into a custom server, or pair this plugin with the standalone\n * sanitizer middleware on a hook. v1 keeps the surface narrow:\n * rate-limit, bot, headers.\n */\n\nimport type { Request as ExpressRequestLike } from 'express';\nimport { HEADERS, RATE_LIMIT } from '../core/constants';\nimport type {\n  HeaderOptions,\n  HstsOptions,\n  RateLimitOptions,\n} from '../core/types';\nimport {\n  detectBot,\n  type BotProtectionOptions,\n  type BotDetectionResult,\n} from './bot-detection';\n\n// ─── Fastify duck-typed contracts ───────────────────────────────────────────\n// Mirror just enough of the FastifyInstance / FastifyRequest / FastifyReply\n// surface to wire the hooks without taking a runtime dep on `fastify`.\n\n/**\n * Subset of Fastify's request shape used by the hooks. Real\n * `FastifyRequest` is assignable to this.\n */\nexport interface FastifyRequestLike {\n  headers: Record<string, string | string[] | undefined>;\n  url?: string;\n  method?: string;\n  ip?: string;\n  socket?: { remoteAddress?: string };\n  raw?: { headers: Record<string, string | string[] | undefined>; url?: string };\n}\n\n/**\n * Subset of Fastify's reply shape. Real `FastifyReply` is assignable to\n * this — the methods we use (`status`, `header`, `send`) all exist on\n * the actual Fastify reply.\n */\nexport interface FastifyReplyLike {\n  status(code: number): FastifyReplyLike;\n  header(name: string, value: string): FastifyReplyLike;\n  send(payload: unknown): FastifyReplyLike;\n}\n\nexport type FastifyHookHandler = (\n  request: FastifyRequestLike,\n  reply: FastifyReplyLike,\n) => Promise<void> | void;\n\nexport type FastifyOnSendHandler = (\n  request: FastifyRequestLike,\n  reply: FastifyReplyLike,\n  payload: unknown,\n) => Promise<unknown> | unknown;\n\nexport interface FastifyInstanceLike {\n  addHook(name: 'onRequest', handler: FastifyHookHandler): unknown;\n  addHook(name: 'onSend', handler: FastifyOnSendHandler): unknown;\n}\n\n// ─── Plugin options ─────────────────────────────────────────────────────────\n\nexport interface ArcisFastifyOptions {\n  /** Security headers configuration. Default: enabled. Pass `false` to disable. */\n  headers?: boolean | HeaderOptions;\n  /** Rate limiter configuration. Default: 100 req/60s in-memory. Pass `false` to disable. */\n  rateLimit?: boolean | RateLimitOptions;\n  /**\n   * Bot protection. Default: disabled (opt-in to avoid surprising behavior on\n   * legitimate crawlers). Pass `true` for sensible defaults or an options\n   * object for full control.\n   */\n  bot?: boolean | BotProtectionOptions;\n}\n\n// ─── Helpers ────────────────────────────────────────────────────────────────\n\ninterface RateLimitEntry {\n  count: number;\n  resetTime: number;\n}\n\ninterface RateLimitDecision {\n  allowed: boolean;\n  count: number;\n  max: number;\n  remaining: number;\n  resetSeconds: number;\n}\n\nfunction buildLimiter(opts: RateLimitOptions): (key: string) => RateLimitDecision {\n  const max = opts.max ?? RATE_LIMIT.DEFAULT_MAX_REQUESTS;\n  const windowMs = opts.windowMs ?? RATE_LIMIT.DEFAULT_WINDOW_MS;\n  // Object.create(null) avoids prototype-pollution risk if a key is \"__proto__\".\n  const store = Object.create(null) as Record<string, RateLimitEntry>;\n  return (key: string): RateLimitDecision => {\n    const now = Date.now();\n    let entry = store[key];\n    if (!entry || entry.resetTime < now) {\n      entry = { count: 0, resetTime: now + windowMs };\n      store[key] = entry;\n    }\n    entry.count += 1;\n    const remaining = Math.max(0, max - entry.count);\n    const resetSeconds = Math.ceil((entry.resetTime - now) / 1000);\n    return { allowed: entry.count <= max, count: entry.count, max, remaining, resetSeconds };\n  };\n}\n\n/**\n * Pull the first header value as a plain string. Fastify's request.headers\n * is `Record<string, string | string[] | undefined>` — matches Node's\n * IncomingMessage.headers shape.\n */\nfunction headerValue(\n  headers: Record<string, string | string[] | undefined>,\n  name: string,\n): string | undefined {\n  const v = headers[name];\n  if (v === undefined) return undefined;\n  if (Array.isArray(v)) return v[0];\n  return v;\n}\n\n/**\n * Adapt the Fastify-style headers object to the shape `detectBot()`\n * reads off an Express request. Only headers `detectBot` consults are\n * forwarded — keeps the surface tiny.\n */\nfunction botInputFor(\n  headers: Record<string, string | string[] | undefined>,\n): ExpressRequestLike {\n  const h: Record<string, string | undefined> = {\n    'user-agent': headerValue(headers, 'user-agent'),\n    accept: headerValue(headers, 'accept'),\n    'accept-language': headerValue(headers, 'accept-language'),\n    'accept-encoding': headerValue(headers, 'accept-encoding'),\n    connection: headerValue(headers, 'connection'),\n  };\n  return { headers: h } as unknown as ExpressRequestLike;\n}\n\n/**\n * Pull a stable client IP. Order: `request.ip` (Fastify pre-resolves\n * trustProxy when configured) → X-Forwarded-For (leftmost) → X-Real-IP →\n * socket.remoteAddress → \"unknown\". `request.ip` is the canonical Fastify\n * field — when the user enables `trustProxy: true` Fastify already parsed\n * the right entry from XFF; we honor that when it's set.\n */\nfunction clientIpOf(request: FastifyRequestLike): string {\n  if (request.ip) return request.ip;\n  const headers = request.headers ?? request.raw?.headers ?? {};\n  const xff = headerValue(headers, 'x-forwarded-for');\n  if (xff) {\n    const first = xff.split(',')[0]?.trim();\n    if (first) return first;\n  }\n  const xrip = headerValue(headers, 'x-real-ip');\n  if (xrip) return xrip.trim();\n  if (request.socket?.remoteAddress) return request.socket.remoteAddress;\n  return 'unknown';\n}\n\nfunction applySecurityHeaders(\n  reply: FastifyReplyLike,\n  options: HeaderOptions,\n  request: FastifyRequestLike,\n): void {\n  const {\n    contentSecurityPolicy = true,\n    xssFilter = true,\n    noSniff = true,\n    frameOptions = HEADERS.FRAME_OPTIONS,\n    hsts = true,\n    referrerPolicy = HEADERS.REFERRER_POLICY,\n    permissionsPolicy = HEADERS.PERMISSIONS_POLICY,\n    cacheControl = true,\n    crossOriginOpenerPolicy = 'same-origin',\n    crossOriginResourcePolicy = 'same-origin',\n    crossOriginEmbedderPolicy = 'require-corp',\n    originAgentCluster = true,\n    dnsPrefetchControl = true,\n  } = options;\n\n  if (contentSecurityPolicy) {\n    reply.header(\n      'Content-Security-Policy',\n      typeof contentSecurityPolicy === 'string' ? contentSecurityPolicy : HEADERS.DEFAULT_CSP,\n    );\n  }\n  if (xssFilter) reply.header('X-XSS-Protection', '0');\n  if (noSniff) reply.header('X-Content-Type-Options', HEADERS.CONTENT_TYPE_OPTIONS);\n  if (frameOptions) reply.header('X-Frame-Options', frameOptions);\n\n  // HSTS only over HTTPS — sending it over HTTP can brick HTTP-only dev\n  // servers. Trust X-Forwarded-Proto only when it's exactly 'http' or\n  // 'https'; reject malformed values.\n  const headers = request.headers ?? request.raw?.headers ?? {};\n  const xfp = headerValue(headers, 'x-forwarded-proto')\n    ?.split(',')[0]\n    ?.trim()\n    ?.toLowerCase();\n  const trustedXfp = xfp === 'https' || xfp === 'http' ? xfp : undefined;\n  // We don't know the protocol from request.url alone (Fastify gives a\n  // path, not a full URL), so fall back to the trusted XFP. Without XFP\n  // and without a way to inspect the listening socket, default to\n  // non-HTTPS — HSTS won't be set. Production deployments behind a TLS-\n  // terminating proxy MUST set X-Forwarded-Proto to get HSTS.\n  const isHttps = trustedXfp === 'https';\n\n  if (hsts && isHttps) {\n    const o: HstsOptions = typeof hsts === 'object' ? hsts : {};\n    const maxAge = o.maxAge ?? HEADERS.HSTS_MAX_AGE;\n    const includeSub = o.includeSubDomains !== false;\n    const preload = o.preload === true;\n    let v = `max-age=${maxAge}`;\n    if (includeSub) v += '; includeSubDomains';\n    if (preload) v += '; preload';\n    reply.header('Strict-Transport-Security', v);\n  }\n\n  if (referrerPolicy) reply.header('Referrer-Policy', referrerPolicy);\n  if (permissionsPolicy) reply.header('Permissions-Policy', permissionsPolicy);\n  if (crossOriginOpenerPolicy) reply.header('Cross-Origin-Opener-Policy', crossOriginOpenerPolicy);\n  if (crossOriginResourcePolicy) reply.header('Cross-Origin-Resource-Policy', crossOriginResourcePolicy);\n  if (crossOriginEmbedderPolicy) reply.header('Cross-Origin-Embedder-Policy', crossOriginEmbedderPolicy);\n  if (originAgentCluster) reply.header('Origin-Agent-Cluster', '?1');\n  if (dnsPrefetchControl) reply.header('X-DNS-Prefetch-Control', 'off');\n  reply.header('X-Permitted-Cross-Domain-Policies', 'none');\n\n  if (cacheControl) {\n    reply.header(\n      'Cache-Control',\n      typeof cacheControl === 'string' ? cacheControl : HEADERS.CACHE_CONTROL,\n    );\n    reply.header('Pragma', 'no-cache');\n    reply.header('Expires', '0');\n  }\n}\n\n// ─── Public API ─────────────────────────────────────────────────────────────\n\n/**\n * Fastify plugin. Registers `onRequest` (rate-limit + bot) + `onSend`\n * (security headers) hooks. Use via `app.register(arcisFastify, options)`.\n *\n * Plugin signature follows the canonical async Fastify plugin shape.\n * Returns a Promise<void> so Fastify's encapsulation contract is met\n * even if no async work is currently performed inside.\n */\nexport async function arcisFastify(\n  fastify: FastifyInstanceLike,\n  options: ArcisFastifyOptions = {},\n): Promise<void> {\n  const headersCfg = options.headers ?? true;\n  const rateLimitCfg = options.rateLimit ?? true;\n  const botCfg = options.bot;\n\n  const limiter = rateLimitCfg\n    ? buildLimiter(typeof rateLimitCfg === 'object' ? rateLimitCfg : {})\n    : null;\n\n  const botEnabled = !!botCfg;\n  const botOpts: BotProtectionOptions =\n    typeof botCfg === 'object' ? botCfg : {};\n  const botAllow = new Set(botOpts.allow ?? ['SEARCH_ENGINE', 'SOCIAL', 'MONITORING']);\n  const botDeny = new Set(botOpts.deny ?? ['AUTOMATED']);\n  const botDefault = botOpts.defaultAction ?? 'allow';\n  const botStatusCode = botOpts.statusCode ?? 403;\n  const botMessage = botOpts.message ?? 'Access denied.';\n\n  fastify.addHook('onRequest', async (request, reply) => {\n    // 1. Rate limit\n    if (limiter) {\n      const key = clientIpOf(request);\n      const decision = limiter(key);\n      reply.header('X-RateLimit-Limit', decision.max.toString());\n      reply.header(\n        'X-RateLimit-Remaining',\n        decision.allowed ? decision.remaining.toString() : '0',\n      );\n      reply.header('X-RateLimit-Reset', decision.resetSeconds.toString());\n      if (!decision.allowed) {\n        reply.header('Retry-After', decision.resetSeconds.toString());\n        await reply.status(429).send({\n          error: 'Too many requests, please try again later.',\n          retryAfter: decision.resetSeconds,\n        });\n        return;\n      }\n    }\n\n    // 2. Bot detection\n    if (botEnabled) {\n      const headers = request.headers ?? request.raw?.headers ?? {};\n      const result: BotDetectionResult = detectBot(botInputFor(headers));\n      if (result.isBot) {\n        const denied =\n          botDeny.has(result.category) ||\n          (!botAllow.has(result.category) && botDefault === 'deny');\n        if (denied) {\n          await reply.status(botStatusCode).send({ error: botMessage });\n          return;\n        }\n      }\n    }\n  });\n\n  if (headersCfg) {\n    fastify.addHook('onSend', async (request, reply, payload) => {\n      // onSend runs after the route handler but before the response is\n      // flushed — last chance to mutate headers. Fastify expects the\n      // (possibly transformed) payload returned; we don't touch it.\n      applySecurityHeaders(\n        reply,\n        typeof headersCfg === 'object' ? headersCfg : {},\n        request,\n      );\n      return payload;\n    });\n  }\n}\n\nexport default arcisFastify;\n"]}