@dra2020/baseclient 1.0.163 → 1.0.164
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/baseclient.js +93 -0
- package/dist/baseclient.js.map +1 -1
- package/dist/poly/all.d.ts +1 -0
- package/dist/poly/polyhash.d.ts +1 -0
- package/lib/poly/all.ts +1 -0
- package/lib/poly/polyhash.ts +52 -0
- package/package.json +1 -1
package/dist/baseclient.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseclient.js","mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACVA,oBAAoB;AACpB,uFAAoC;AAC3B,oBAAI;AACb,gGAA0C;AACjC,0BAAO;AAChB,oFAAkC;AACzB,kBAAG;AACZ,uFAAoC;AAC3B,oBAAI;AACb,4GAAkD;AACzC,kCAAW;AACpB,sGAA8C;AACrC,8BAAS;AAClB,uFAAmC;AAC1B,gBAAE;AACX,oGAA0C;AACjC,kBAAG;AACZ,sFAA+C;AACtC,4FADA,gBAAU,QACA;AACnB,kFAAgC;AACvB,cAAC;AACV,uFAAoC;AAC3B,oBAAI;AACb,oFAAkC;AACzB,kBAAG;AACZ,mGAA2C;AAClC,wBAAM;AACf,mGAA4C;AACnC,4BAAQ;AACjB,6FAAwC;AAC/B,wBAAM;AACf,gGAA0C;AACjC,0BAAO;;;;;;;;;;;;;;ACmQhB,4BAkBC;AA6BD,sCAsBC;AAED,gCAYC;AArXD,2FAA2F;AAC3F,2IAA2I;AAC3I,2IAA2I;AAC3I,2HAA2H;AAC3H,2CAA2C;AAC3C,2FAAkE;AACzD,4FADA,uBAAU,QACA;AAAE,wGADA,mCAAsB,QACA;AAE9B,wBAAgB,GAAW,EAAE,CAAC;AAC9B,iBAAS,GAAW,wBAAgB,GAAG,CAAC,CAAC,CAAI,0BAA0B;AACvE,wBAAgB,GAAW,EAAE,CAAC;AAE9B,yBAAiB,GAAa;IACzC,YAAY;IACZ,MAAM;IACN,OAAO;IACP,aAAa;IACb,KAAK;IACL,MAAM;IACN,MAAM;IACN,WAAW,EAAI,qBAAqB;IACpC,WAAW;IACX,MAAM;IACN,UAAU;IACV,YAAY;IACZ,gBAAgB;IAChB,YAAY;IACZ,OAAO;IACP,YAAY;IACZ,MAAM;IACN,eAAe;IACf,QAAQ;IACR,aAAa;IACb,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,YAAY;IACZ,QAAQ;IACR,eAAe;IACf,MAAM,EAAI,wBAAwB;IAClC,aAAa;IACb,MAAM;IACN,cAAc;IACd,YAAY;IACZ,OAAO;IACP,WAAW;IACX,WAAW;IACX,WAAW;IACX,YAAY;IACZ,QAAQ;IACR,YAAY;IACZ,kBAAkB;IAClB,UAAU;IACV,WAAW;IACX,gBAAgB;IAChB,WAAW;IACX,SAAS;IACT,iBAAiB;IACjB,WAAW;IACX,QAAQ;IACR,SAAS;IACT,YAAY;IACZ,WAAW;IACX,YAAY;IACZ,aAAa;IACb,WAAW;IACX,SAAS,EAAO,qBAAqB;IACrC,WAAW;IACX,WAAW;CACZ,CAAC;AAOW,mBAAW,GACxB;IACE,WAAW,EAAE,SAAS;IACtB,cAAc,EAAE,SAAS;IACzB,MAAM,EAAE,SAAS;IACjB,YAAY,EAAE,SAAS;IACvB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,SAAS;IACnB,OAAO,EAAE,SAAS;IAClB,gBAAgB,EAAE,SAAS;IAC3B,MAAM,EAAE,SAAS;IACjB,YAAY,EAAE,SAAS;IACvB,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,SAAS;IACtB,WAAW,EAAE,SAAS;IACtB,YAAY,EAAE,SAAS;IACvB,WAAW,EAAE,SAAS;IACtB,OAAO,EAAE,SAAS;IAClB,gBAAgB,EAAE,SAAS;IAC3B,UAAU,EAAE,SAAS;IACrB,SAAS,EAAE,SAAS;IACpB,MAAM,EAAE,SAAS;IACjB,UAAU,EAAE,SAAS;IACrB,UAAU,EAAE,SAAS;IACrB,eAAe,EAAE,SAAS;IAC1B,UAAU,EAAE,SAAS;IACrB,WAAW,EAAE,SAAS;IACtB,WAAW,EAAE,SAAS;IACtB,aAAa,EAAE,SAAS;IACxB,gBAAgB,EAAE,SAAS;IAC3B,YAAY,EAAE,SAAS;IACvB,YAAY,EAAE,SAAS;IACvB,SAAS,EAAE,SAAS;IACpB,YAAY,EAAE,SAAS;IACvB,cAAc,EAAE,SAAS;IACzB,eAAe,EAAE,SAAS;IAC1B,eAAe,EAAE,SAAS;IAC1B,eAAe,EAAE,SAAS;IAC1B,YAAY,EAAE,SAAS;IACvB,UAAU,EAAE,SAAS;IACrB,aAAa,EAAE,SAAS;IACxB,SAAS,EAAE,SAAS;IACpB,YAAY,EAAE,SAAS;IACvB,WAAW,EAAE,SAAS;IACtB,aAAa,EAAE,SAAS;IACxB,aAAa,EAAE,SAAS;IACxB,SAAS,EAAE,SAAS;IACpB,WAAW,EAAE,SAAS;IACtB,YAAY,EAAE,SAAS;IACvB,MAAM,EAAE,SAAS;IACjB,WAAW,EAAE,SAAS;IACtB,MAAM,EAAE,SAAS;IACjB,OAAO,EAAE,SAAS;IAClB,aAAa,EAAE,SAAS;IACxB,UAAU,EAAE,SAAS;IACrB,SAAS,EAAE,SAAS;IACpB,WAAW,EAAE,SAAS;IACtB,QAAQ,EAAE,SAAS;IACnB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,SAAS;IACrB,eAAe,EAAE,SAAS;IAC1B,WAAW,EAAE,SAAS;IACtB,cAAc,EAAE,SAAS;IACzB,WAAW,EAAE,SAAS;IACtB,YAAY,EAAE,SAAS;IACvB,WAAW,EAAE,SAAS;IACtB,sBAAsB,EAAE,SAAS;IACjC,WAAW,EAAE,SAAS;IACtB,YAAY,EAAE,SAAS;IACvB,WAAW,EAAE,SAAS;IACtB,aAAa,EAAE,SAAS;IACxB,eAAe,EAAE,SAAS;IAC1B,cAAc,EAAE,SAAS;IACzB,gBAAgB,EAAE,SAAS;IAC3B,gBAAgB,EAAE,SAAS;IAC3B,aAAa,EAAE,SAAS;IACxB,MAAM,EAAE,SAAS;IACjB,WAAW,EAAE,SAAS;IACtB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,SAAS;IACpB,QAAQ,EAAE,SAAS;IACnB,kBAAkB,EAAE,SAAS;IAC7B,YAAY,EAAE,SAAS;IACvB,cAAc,EAAE,SAAS;IACzB,cAAc,EAAE,SAAS;IACzB,gBAAgB,EAAE,SAAS;IAC3B,iBAAiB,EAAE,SAAS;IAC5B,mBAAmB,EAAE,SAAS;IAC9B,iBAAiB,EAAE,SAAS;IAC5B,iBAAiB,EAAE,SAAS;IAC5B,cAAc,EAAE,SAAS;IACzB,WAAW,EAAE,SAAS;IACtB,WAAW,EAAE,SAAS;IACtB,UAAU,EAAE,SAAS;IACrB,aAAa,EAAE,SAAS;IACxB,MAAM,EAAE,SAAS;IACjB,SAAS,EAAE,SAAS;IACpB,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,SAAS;IACtB,QAAQ,EAAE,SAAS;IACnB,WAAW,EAAE,SAAS;IACtB,QAAQ,EAAE,SAAS;IACnB,eAAe,EAAE,SAAS;IAC1B,WAAW,EAAE,SAAS;IACtB,eAAe,EAAE,SAAS;IAC1B,eAAe,EAAE,SAAS;IAC1B,YAAY,EAAE,SAAS;IACvB,WAAW,EAAE,SAAS;IACtB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,SAAS;IACjB,YAAY,EAAE,SAAS;IACvB,QAAQ,EAAE,SAAS;IACnB,KAAK,EAAE,SAAS;IAChB,WAAW,EAAE,SAAS;IACtB,WAAW,EAAE,SAAS;IACtB,aAAa,EAAE,SAAS;IACxB,QAAQ,EAAE,SAAS;IACnB,YAAY,EAAE,SAAS;IACvB,UAAU,EAAE,SAAS;IACrB,UAAU,EAAE,SAAS;IACrB,QAAQ,EAAE,SAAS;IACnB,QAAQ,EAAE,SAAS;IACnB,SAAS,EAAE,SAAS;IACpB,WAAW,EAAE,SAAS;IACtB,WAAW,EAAE,SAAS;IACtB,MAAM,EAAE,SAAS;IACjB,aAAa,EAAE,SAAS;IACxB,WAAW,EAAE,SAAS;IACtB,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,SAAS;IACjB,SAAS,EAAE,SAAS;IACpB,QAAQ,EAAE,SAAS;IACnB,WAAW,EAAE,SAAS;IACtB,QAAQ,EAAE,SAAS;IACnB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,YAAY,EAAE,SAAS;IACvB,QAAQ,EAAE,SAAS;IACnB,aAAa,EAAE,SAAS;CACzB,CAAC;AAEF,oCAAoC;AACvB,8BAAsB,GAAG;IACpC,SAAS,EAAG,GAAG;IACf,SAAS,EAAG,GAAG;IACf,SAAS,EAAG,EAAE;IACd,SAAS,EAAG,GAAG;CAChB,CAAC;AAEF,0CAA0C;AAC7B,qCAA6B,GAAG;IAC3C,SAAS,EAAG,UAAU;IACtB,SAAS,EAAG,GAAG;IACf,SAAS,EAAG,GAAG;IACf,SAAS,EAAG,GAAG;IACf,SAAS,EAAG,EAAE;IACd,SAAS,EAAG,WAAW;IACvB,SAAS,EAAG,YAAY;IACxB,SAAS,EAAG,GAAG;IACf,SAAS,EAAG,GAAG;IACf,SAAS,EAAG,GAAG;IACf,SAAS,EAAG,GAAG;IACf,SAAS,EAAG,YAAY;CACzB,CAAC;AAEF,yCAAyC;AAC9B,qCAA6B,GAAG;IACzC,SAAS,EAAG,UAAU;IACtB,SAAS,EAAG,aAAa;IACzB,SAAS,EAAG,GAAG;IACf,SAAS,EAAG,aAAa;IACzB,SAAS,EAAG,EAAE;IACd,SAAS,EAAG,aAAa;IACzB,SAAS,EAAG,GAAG;IACf,SAAS,EAAG,aAAa;IACzB,SAAS,EAAG,GAAG;IACf,SAAS,EAAG,aAAa;IACzB,SAAS,EAAG,GAAG;IACf,SAAS,EAAG,aAAa;CAC1B,CAAC;AAEF,8BAA8B;AACjB,6BAAqB,GAAa;IAC7C,SAAS,EAAE,cAAc;IACzB,SAAS,EAAE,cAAc;IACzB,SAAS,EAAE,iBAAiB;IAC5B,SAAS,EAAE,cAAc;IACzB,SAAS,EAAE,eAAe;IAC1B,SAAS,EAAE,eAAe;IAC1B,SAAS,EAAE,kBAAkB;IAC7B,SAAS,EAAE,eAAe;IAC1B,SAAS,EAAE,gBAAgB;IAC3B,SAAS,EAAE,MAAM;IACjB,SAAS,EAAE,mBAAmB;IAC9B,SAAS,EAAE,gBAAgB;IAC3B,SAAS,EAAE,mBAAmB;IAC9B,SAAS,EAAE,gBAAgB;IAC3B,SAAS,EAAE,mBAAmB;IAC9B,SAAS,EAAE,gBAAgB;CAC5B,CAAC;AAEW,+BAAuB,GAAG,OAAO,CAAC;AAElC,mBAAW,GAAa;IACnC,OAAO,EAAC,SAAS,EAAC,WAAW,EAAC,WAAW,EAAC,SAAS,EAAC,UAAU,EAAC,OAAO,EAAC,QAAQ;IAC/E,KAAK,EAAC,OAAO,EAAC,SAAS,EAAC,SAAS,EAAC,OAAO,EAAC,QAAQ,EAAC,MAAM;CAC1D,CAAC;AAEF,wCAAwC;AACxC,IAAI,iBAAiB,GAA8B,EAAE,CAAC;AAEtD,SAAgB,QAAQ,CAAC,CAAS,EAAE,aAAsB,EAAE,OAAe;IAEzE,0FAA0F;IAC1F,IAAI,CAAC,IAAI,CAAC;QACR,OAAO,mBAAW,CAAC,yBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3C,IAAI,CAAC,aAAa,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,YAAY;QACxD,OAAO,WAAW,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;IAEvC,MAAM,MAAM,GAAa,aAAa,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,MAAM,CAAC,MAAM,IAAI,wBAAgB;QACnC,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,wBAAgB,CAAC,CAAC;IAE5C,IAAI,mBAAW,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAI,oBAAoB;QAC1D,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAEzC,4DAA4D;IAC5D,OAAO,WAAW,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;AACvC,CAAC;AAED,4BAA4B;AAC5B,SAAS,WAAW,CAAC,CAAS,EAAE,aAAsB;IAEpD,0FAA0F;IAC1F,SAAS,SAAS;QAEhB,uBAAU,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,wBAAgB,EAAE,CAAC,EAAE,EACjD,CAAC;YACC,4DAA4D;YAC5D,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,yBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACjD,uBAAU,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,mBAAW,CAAC,yBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,IAAI,CAAC,uBAAU,CAAC,YAAY,CAAC;QAC3B,SAAS,EAAE,CAAC;IAEd,IAAI,CAAC,IAAI,CAAC;QACR,OAAO,mBAAW,CAAC,yBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,OAAO,uBAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,wBAAgB,CAAC,CAAC;AAC1F,CAAC;AAED,MAAM,mBAAmB,GACvB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE;IAC9H,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAEjE,SAAgB,aAAa,CAAC,OAAe;IAE3C,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IAEnC,6IAA6I;IAC7I,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAC/B,CAAC;QACC,IAAI,mBAAW,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,oBAAoB;YACxD,iBAAiB,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;aAEtC,CAAC;YACC,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YAChC,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAC9C,CAAC;gBACC,IAAI,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,SAAS;oBAC9C,iBAAiB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;;oBAEvF,iBAAiB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,SAAgB,UAAU,CAAC,OAAe;IAExC,IAAI,OAAO,KAAK,YAAY,EAC5B,CAAC;QACC,gDAAgD;QAChD,IAAI,MAAM,GAAa,EAAE,CAAC;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,wBAAgB,EAAE,CAAC,EAAE;YACvC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QACpC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,6BAA6B;AAC7B,SAAS,aAAa,CAAC,OAAe;IAEpC,2IAA2I;IAC3I,IAAI,OAAO,KAAK,qBAAqB,EACrC,CAAC;QACC,IAAI,CAAC,uBAAU,CAAC,OAAO,CAAC;YACtB,uBAAU,CAAC,OAAO,CAAC,GAAG,8BAAsB,CAAC;QAC/C,OAAO,uBAAU,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;SACI,IAAI,OAAO,KAAK,iBAAiB,EACtC,CAAC;QACC,IAAI,CAAC,uBAAU,CAAC,OAAO,CAAC;YACtB,uBAAU,CAAC,OAAO,CAAC,GAAG,qCAA6B,CAAC;QACtD,OAAO,uBAAU,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;SACI,IAAI,OAAO,KAAK,0BAA0B,EAC/C,CAAC;QACC,IAAI,CAAC,uBAAU,CAAC,OAAO,CAAC;YACtB,uBAAU,CAAC,OAAO,CAAC,GAAG,qCAA6B,CAAC;QACtD,OAAO,uBAAU,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;SACI,IAAI,OAAO,KAAK,kBAAkB,EACvC,CAAC;QACC,IAAI,CAAC,uBAAU,CAAC,OAAO,CAAC;YACtB,uBAAU,CAAC,OAAO,CAAC,GAAG,6BAAqB,CAAC;QAC9C,OAAO,uBAAU,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,uBAAU,CAAC,OAAO,CAAC;QACrB,OAAO,uBAAU,CAAC,OAAO,CAAC,CAAC;IAE7B,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC1B,CAAC;QACC,mHAAmH;QACnH,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC7D,IAAI,uBAAU,CAAC,WAAW,CAAC,EAC3B,CAAC;YACC,uBAAU,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,uBAAU,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YAC7D,OAAO,uBAAU,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,iCAAiC,OAAO,EAAE,CAAC,CAAC;IACxD,OAAO,CAAC,SAAS,CAAC,CAAC;AACrB,CAAC;AAED,UAAU;AACV;;;;;;;;;;;;;;;;;;;;;;;;KAwBK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAqDD;AAEJ,sBAAsB;AACtB,4DAA4D;;;;;;;;;;;;;;ACxf/C,8BAAsB,GAC/B,CAAC,QAAQ,EAAC,OAAO,EAAC,QAAQ,EAAC,SAAS,EAAC,SAAS,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,OAAO,EAAC,QAAQ,EAAC,SAAS,EAAC,MAAM,EAAC,SAAS,EAAC,QAAQ,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,QAAQ,EAAC,MAAM,EAAC,UAAU,EAAC,QAAQ,EAAC,MAAM,EAAC,MAAM,EAAC,QAAQ,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,CAAC,CAAC;AACtO,kBAAU,GAA8B;IACjD,OAAO,EAAE,CAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,CAAC;IACt+C,MAAM,EAAE,CAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,CAAC;IACr+C,SAAS,EAAE,CAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,CAAC;IACx+C,KAAK,EAAE,CAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,CAAC;IACp+C,OAAO,EAAE,CAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,CAAC;IACt+C,QAAQ,EAAE,CAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,CAAC;IACv+C,OAAO,EAAE,CAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,CAAC;IACt+C,SAAS,EAAE,CAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,CAAC;IACx+C,QAAQ,EAAE,CAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,CAAC;IAC3F,OAAO,EAAE,CAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,CAAC;IAC1F,QAAQ,EAAE,CAAC,SAAS,EAAC,SAAS,EA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","sources":["webpack://baseclient/webpack/universalModuleDefinition","webpack://baseclient/./lib/all/all.ts","webpack://baseclient/./lib/colors/colors.ts","webpack://baseclient/./lib/colors/colortable.ts","webpack://baseclient/./lib/context/all.ts","webpack://baseclient/./lib/context/context.ts","webpack://baseclient/./lib/control/all.ts","webpack://baseclient/./lib/control/control.ts","webpack://baseclient/./lib/csv/all.ts","webpack://baseclient/./lib/csv/csv.ts","webpack://baseclient/./lib/csv/csvparseline.ts","webpack://baseclient/./lib/dataflow/all.ts","webpack://baseclient/./lib/dataflow/dataflow.ts","webpack://baseclient/./lib/detail/all.ts","webpack://baseclient/./lib/detail/detail.ts","webpack://baseclient/./lib/emit/all.ts","webpack://baseclient/./lib/emit/emit.ts","webpack://baseclient/./lib/filterexpr/all.ts","webpack://baseclient/./lib/filterexpr/filterexpr.ts","webpack://baseclient/./lib/fsm/all.ts","webpack://baseclient/./lib/fsm/fsm.ts","webpack://baseclient/./lib/geo/all.ts","webpack://baseclient/./lib/geo/ensurecentroid.ts","webpack://baseclient/./lib/geo/flexname.ts","webpack://baseclient/./lib/geo/geo.ts","webpack://baseclient/./lib/geo/multiblockmapping.ts","webpack://baseclient/./lib/geo/vfeature.ts","webpack://baseclient/./lib/logabstract/all.ts","webpack://baseclient/./lib/logabstract/log.ts","webpack://baseclient/./lib/logclient/all.ts","webpack://baseclient/./lib/logclient/log.ts","webpack://baseclient/./lib/ot-editutil/all.ts","webpack://baseclient/./lib/ot-editutil/oteditutil.ts","webpack://baseclient/./lib/ot-editutil/otmaputil.ts","webpack://baseclient/./lib/ot-js/all.ts","webpack://baseclient/./lib/ot-js/otarray.ts","webpack://baseclient/./lib/ot-js/otclientengine.ts","webpack://baseclient/./lib/ot-js/otcomposite.ts","webpack://baseclient/./lib/ot-js/otcounter.ts","webpack://baseclient/./lib/ot-js/otengine.ts","webpack://baseclient/./lib/ot-js/otmap.ts","webpack://baseclient/./lib/ot-js/otserverengine.ts","webpack://baseclient/./lib/ot-js/otsession.ts","webpack://baseclient/./lib/ot-js/ottypes.ts","webpack://baseclient/./lib/poly/all.ts","webpack://baseclient/./lib/poly/blend.ts","webpack://baseclient/./lib/poly/boundbox.ts","webpack://baseclient/./lib/poly/cartesian.ts","webpack://baseclient/./lib/poly/featurecleanholes.ts","webpack://baseclient/./lib/poly/graham-scan.ts","webpack://baseclient/./lib/poly/mapto.ts","webpack://baseclient/./lib/poly/matrix.ts","webpack://baseclient/./lib/poly/minbound.ts","webpack://baseclient/./lib/poly/pointinpoly.ts","webpack://baseclient/./lib/poly/poly.ts","webpack://baseclient/./lib/poly/polybin.ts","webpack://baseclient/./lib/poly/polylabel.ts","webpack://baseclient/./lib/poly/polypack.ts","webpack://baseclient/./lib/poly/polyround.ts","webpack://baseclient/./lib/poly/polysimplify.ts","webpack://baseclient/./lib/poly/quad.ts","webpack://baseclient/./lib/poly/selfintersect.ts","webpack://baseclient/./lib/poly/shamos.ts","webpack://baseclient/./lib/poly/simplify.ts","webpack://baseclient/./lib/poly/topo.ts","webpack://baseclient/./lib/poly/union.ts","webpack://baseclient/./lib/util/all.ts","webpack://baseclient/./lib/util/bintrie.ts","webpack://baseclient/./lib/util/bitset.ts","webpack://baseclient/./lib/util/countedhash.ts","webpack://baseclient/./lib/util/gradient.ts","webpack://baseclient/./lib/util/indexedarray.ts","webpack://baseclient/./lib/util/util.ts","webpack://baseclient/external commonjs \"@dra2020/topojson-client\"","webpack://baseclient/external commonjs \"@dra2020/topojson-server\"","webpack://baseclient/external commonjs \"@dra2020/topojson-simplify\"","webpack://baseclient/external commonjs \"diff-match-patch\"","webpack://baseclient/external commonjs \"polygon-clipping\"","webpack://baseclient/external commonjs \"splaytree\"","webpack://baseclient/external commonjs \"tinyqueue\"","webpack://baseclient/webpack/bootstrap","webpack://baseclient/webpack/before-startup","webpack://baseclient/webpack/startup","webpack://baseclient/webpack/after-startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"baseclient\"] = factory();\n\telse\n\t\troot[\"baseclient\"] = factory();\n})(global, () => {\nreturn ","// Client and Server\nimport * as Util from '../util/all';\nexport { Util };\nimport * as Context from '../context/all';\nexport { Context };\nimport * as FSM from '../fsm/all';\nexport { FSM };\nimport * as Poly from '../poly/all';\nexport { Poly };\nimport * as LogAbstract from '../logabstract/all';\nexport { LogAbstract };\nimport * as LogClient from '../logclient/all';\nexport { LogClient };\nimport * as OT from '../ot-js/all';\nexport { OT };\nimport * as OTE from '../ot-editutil/all';\nexport { OTE };\nimport { FilterExpr } from '../filterexpr/all';\nexport { FilterExpr }\nimport * as G from '../geo/all';\nexport { G };\nimport * as Emit from '../emit/all';\nexport { Emit };\nimport * as CSV from '../csv/all';\nexport { CSV };\nimport * as Colors from '../colors/colors';\nexport { Colors };\nimport * as DataFlow from '../dataflow/all';\nexport { DataFlow }\nimport * as Detail from '../detail/all';\nexport { Detail }\nimport * as Control from '../control/all';\nexport { Control }\n","\n// ColorTable is now generated by make_colortable.py; formerly we used './jscolormapsdata';\n// ColorTable includes \"Big palletes\" (jet, turbo, inferno, viridis, magma, plasma, greys, bone), whose reverses are generated as needed\n// and Color Brewer palettes (Accent, Blues, BrBG, BuGn, BuPu, CMRmap, Dark2, GnBu, Greens, Greys, OrRd, Oranges, PRGn, Paired, Pastel1,\n// Pastel2, PiYG, PuBu, PuBuGn, PuOr, PuRd, Purples, RdBu, RdGy, RdPu, RdYlBu, RdYlGn, Reds, Set1, Set2, Set3, Spectral,\n// Wistia, YlGn, YlGnBu, YlOrBr, YlOrRd)\nimport { ColorTable, ColorBrewerSchemeNames } from './colortable';\nexport { ColorTable, ColorBrewerSchemeNames };\n\nexport const MaxOrderedColors: number = 50;\nexport const MaxColors: number = MaxOrderedColors * 3; // Tied to orderedColors()\nexport const MaxClassicColors: number = 55;\n\nexport const DefaultColorNames: string[] = [\n 'GhostWhite',\n 'Blue',\n 'Green',\n 'DarkMagenta',\n 'Red',\n 'Gold',\n 'Teal',\n 'Chocolate', //'DarkGray', // \n 'SlateBlue',\n 'Cyan',\n 'DeepPink',\n 'Chartreuse',\n 'CornflowerBlue',\n 'DarkSalmon',\n 'Olive',\n 'DarkOrange',\n 'Lime',\n 'DarkSlateBlue',\n 'Yellow',\n 'YellowGreen',\n 'Pink',\n 'Maroon',\n 'Sienna',\n 'Aquamarine',\n 'Indigo',\n 'PaleVioletRed',\n 'Navy', // 'Gray', // \n 'SpringGreen',\n 'Plum',\n 'DarkSeaGreen',\n 'LightCoral',\n 'Khaki',\n 'OrangeRed',\n 'RoyalBlue',\n 'LimeGreen',\n 'DarkOrchid',\n 'Orange',\n 'DodgerBlue',\n 'MediumAquamarine',\n 'Moccasin',\n 'Firebrick',\n 'LightSteelBlue',\n 'LawnGreen',\n 'Magenta',\n 'MediumVioletRed',\n 'Turquoise',\n 'Tomato',\n 'Thistle',\n 'SandyBrown',\n 'IndianRed',\n 'PowderBlue',\n 'SaddleBrown',\n 'OliveDrab',\n 'Fuchsia', // 'Gainsboro', //\n 'PeachPuff',\n 'RosyBrown',\n];\n\nexport interface ColorLookup\n{\n [key: string]: string;\n}\n\nexport const ColorValues: ColorLookup =\n{\n 'AliceBlue': '#F0F8FF',\n 'AntiqueWhite': '#FAEBD7',\n 'Aqua': '#00FFFF',\n 'Aquamarine': '#7FFFD4',\n 'Azure': '#F0FFFF',\n 'Beige': '#F5F5DC',\n 'Bisque': '#FFE4C4',\n 'Black': '#000000',\n 'BlanchedAlmond': '#FFEBCD',\n 'Blue': '#0000FF',\n 'BlueViolet': '#8A2BE2',\n 'Brown': '#A52A2A',\n 'BurlyWood': '#DEB887',\n 'CadetBlue': '#5F9EA0',\n 'Chartreuse': '#7FFF00',\n 'Chocolate': '#D2691E',\n 'Coral': '#FF7F50',\n 'CornflowerBlue': '#6495ED',\n 'Cornsilk': '#FFF8DC',\n 'Crimson': '#DC143C',\n 'Cyan': '#00FFFF',\n 'DarkBlue': '#00008B',\n 'DarkCyan': '#008B8B',\n 'DarkGoldenrod': '#B8860B',\n 'DarkGray': '#A9A9A9',\n 'DarkGreen': '#006400',\n 'DarkKhaki': '#BDB76B',\n 'DarkMagenta': '#8B008B',\n 'DarkOliveGreen': '#556B2F',\n 'DarkOrange': '#FF8C00',\n 'DarkOrchid': '#9932CC',\n 'DarkRed': '#8B0000',\n 'DarkSalmon': '#E9967A',\n 'DarkSeaGreen': '#8FBC8F',\n 'DarkSlateBlue': '#483D8B',\n 'DarkSlateGray': '#2F4F4F',\n 'DarkTurquoise': '#00CED1',\n 'DarkViolet': '#9400D3',\n 'DeepPink': '#FF1493',\n 'DeepSkyBlue': '#00BFFF',\n 'DimGray': '#696969',\n 'DodgerBlue': '#1E90FF',\n 'Firebrick': '#B22222',\n 'FloralWhite': '#FFFAF0',\n 'ForestGreen': '#228B22',\n 'Fuchsia': '#FF00FF',\n 'Gainsboro': '#DCDCDC',\n 'GhostWhite': '#F8F8FF',\n 'Gold': '#FFD700',\n 'Goldenrod': '#DAA520',\n 'Gray': '#808080',\n 'Green': '#008000',\n 'GreenYellow': '#ADFF2F',\n 'Honeydew': '#F0FFF0',\n 'HotPink': '#FF69B4',\n 'IndianRed': '#CD5C5C',\n 'Indigo': '#4B0082',\n 'Ivory': '#FFFFF0',\n 'Khaki': '#F0E68C',\n 'Lavender': '#E6E6FA',\n 'LavenderBlush': '#FFF0F5',\n 'LawnGreen': '#7CFC00',\n 'LemonChiffon': '#FFFACD',\n 'LightBlue': '#ADD8E6',\n 'LightCoral': '#F08080',\n 'LightCyan': '#E0FFFF',\n 'LightGoldenrodYellow': '#FAFAD2',\n 'LightGray': '#D3D3D3',\n 'LightGreen': '#90EE90',\n 'LightPink': '#FFB6C1',\n 'LightSalmon': '#FFA07A',\n 'LightSeaGreen': '#20B2AA',\n 'LightSkyBlue': '#87CEFA',\n 'LightSlateGray': '#778899',\n 'LightSteelBlue': '#B0C4DE',\n 'LightYellow': '#FFFFE0',\n 'Lime': '#00FF00',\n 'LimeGreen': '#32CD32',\n 'Linen': '#FAF0E6',\n 'Magenta': '#FF00FF',\n 'Maroon': '#800000',\n 'MediumAquamarine': '#66CDAA',\n 'MediumBlue': '#0000CD',\n 'MediumOrchid': '#BA55D3',\n 'MediumPurple': '#9370DB',\n 'MediumSeaGreen': '#3CB371',\n 'MediumSlateBlue': '#7B68EE',\n 'MediumSpringGreen': '#00FA9A',\n 'MediumTurquoise': '#48D1CC',\n 'MediumVioletRed': '#C71585',\n 'MidnightBlue': '#191970',\n 'MintCream': '#F5FFFA',\n 'MistyRose': '#FFE4E1',\n 'Moccasin': '#FFE4B5',\n 'NavajoWhite': '#FFDEAD',\n 'Navy': '#000080',\n 'OldLace': '#FDF5E6',\n 'Olive': '#808000',\n 'OliveDrab': '#6B8E23',\n 'Orange': '#FFA500',\n 'OrangeRed': '#FF4500',\n 'Orchid': '#DA70D6',\n 'PaleGoldenrod': '#EEE8AA',\n 'PaleGreen': '#98FB98',\n 'PaleTurquoise': '#AFEEEE',\n 'PaleVioletRed': '#DB7093',\n 'PapayaWhip': '#FFEFD5',\n 'PeachPuff': '#FFDAB9',\n 'Peru': '#CD853F',\n 'Pink': '#FFC0CB',\n 'Plum': '#DDA0DD',\n 'PowderBlue': '#B0E0E6',\n 'Purple': '#800080',\n 'Red': '#FF0000',\n 'RosyBrown': '#BC8F8F',\n 'RoyalBlue': '#4169E1',\n 'SaddleBrown': '#8B4513',\n 'Salmon': '#FA8072',\n 'SandyBrown': '#F4A460',\n 'SeaGreen': '#2E8B57',\n 'SeaShell': '#FFF5EE',\n 'Sienna': '#A0522D',\n 'Silver': '#C0C0C0',\n 'SkyBlue': '#87CEEB',\n 'SlateBlue': '#6A5ACD',\n 'SlateGray': '#708090',\n 'Snow': '#FFFAFA',\n 'SpringGreen': '#00FF7F',\n 'SteelBlue': '#4682B4',\n 'Tan': '#D2B48C',\n 'Teal': '#008080',\n 'Thistle': '#D8BFD8',\n 'Tomato': '#FF6347',\n 'Turquoise': '#40E0D0',\n 'Violet': '#EE82EE',\n 'Wheat': '#F5DEB3',\n 'White': '#FFFFFF',\n 'WhiteSmoke': '#F5F5F5',\n 'Yellow': '#FFFF00',\n 'YellowGreen': '#9ACD32',\n};\n\n// For Demographics scale (4 colors)\nexport const EthnicFewClassicColors = [\n '#fafafa', // \n '#aaaaaa', // \n '#666666', //\n '#111111', // \n];\n\n// For Partisan Precinct Scale (12 colors)\nexport const PartisanPrecinctClassicColors = [\n '#960018', // Carmine\n '#FF2020', // \n '#FF6060', // \n '#FFA0A0', // \n '#FFC0C0', //\n '#FFDEDE', // pale red\n '#DEDEFF', // pale blue\n '#C0C0FF', // \n '#A0A0FF', // \n '#6060FF', // \n '#2020FF', // \n '#00008B', // Dark blue\n];\n\n// For Partisan District Scale (12 stops)\nexport let PartisanDistrictClassicColors = [\n '#960018', // Carmine\n '#960018', // .00 <= .40\n '#FF2020', // \n '#FF2020', // .40 <= .45\n '#FF6060', //\n '#FFDEDE', // .45 <= .50\n '#DEDEFF', // \n '#6060FF', // .50 <= .55\n '#2020FF', // \n '#2020FF', // .55 <= .60\n '#00008B', // \n '#00008B', // .60 <= 1.0\n];\n\n// All Groups Mosaic 16 colors\nexport const EthnicBackgroundColor: string[] = [\n '#c0392b', // solid white\n '#3498db', // solid black\n '#2ecc71', // solid hispanic\n '#9b59b6', // solid asian\n '#d98880', // mostly white\n '#aed6f1', // mostly black\n '#abebc6', // mostly hispanic\n '#bb8fce', // mostly asian\n '#f1c40f', // mostly native\n '#aab7b8', // mix\n '#d5f5e3', // hispanic / white\n '#d6eaf8', // black / white\n '#186a3b', // hispanic / black\n '#e8daef', // asian / white\n '#45b39d', // asian / hispanic\n '#4a235a', // black / asian\n];\n\nexport const defaultDistrictsPalette = 'jet_r';\n\nexport const BigPalettes: string[] = [\n 'jet_r','turbo_r','inferno_r','viridis_r','magma_r','plasma_r','Greys','bone_r',\n 'jet','turbo','inferno','viridis','magma','plasma','bone'\n];\n\n// OrderedColorTable is lazily populated\nlet OrderedColorTable: {[key: string]: string[]} = {};\n\nexport function genColor(i: number, useFirstColor: boolean, palette: string): string\n{\n // i is district number, 0 => District[0] (unassigned), so subtract 1 to access ColorTable\n if (i == 0)\n return ColorValues[DefaultColorNames[0]];\n\n if (!useFirstColor || !palette || palette === 'draclassic')\n return genDRAColor(i, useFirstColor); \n\n const colors: string[] = orderedColors(palette);\n if (colors.length >= MaxOrderedColors)\n return colors[(i - 1) % MaxOrderedColors];\n\n if (BigPalettes.indexOf(palette) < 0) // not a big palette\n return colors[(i - 1) % colors.length];\n\n // Unexpected to get here, but something in case of an error\n return genDRAColor(i, useFirstColor);\n}\n\n// DRA classic color palette\nfunction genDRAColor(i: number, useFirstColor: boolean): string\n{\n // i is district number, 0 => District[0] (unassigned), so subtract 1 to access ColorTable\n function gen_table(): void\n {\n ColorTable['draclassic'] = [];\n for (let i: number = 0; i < MaxClassicColors; i++)\n {\n // A little funky math below to skip the first (white) color\n let j = (i % (DefaultColorNames.length - 1)) + 1;\n ColorTable['draclassic'].push(ColorValues[DefaultColorNames[j]]);\n }\n }\n\n if (!ColorTable['draclassic'])\n gen_table();\n \n if (i == 0)\n return ColorValues[DefaultColorNames[0]];\n return ColorTable['draclassic'][((i - 1) + (useFirstColor ? 0 : 1)) % MaxClassicColors];\n}\n\nconst DistrictsColorOrder: number[] =\n [0, 49, 24, 36, 12, 42, 6, 30, 18, 45, 3, 27, 9, 33, 15, 46, 21, 39, 4, 28, 10, 34, 16, 48, 22, 40, 5, 29, 11, 35, 17, 1, 23, 41,\n 7, 31, 13, 37, 19, 47, 25, 43, 8, 32, 14, 38, 2, 20, 26, 44];\n\nexport function orderedColors(palette: string): string[]\n{\n const colors = getPalette(palette);\n\n // Color Brewer palettes typically have only 8 colors; other palettes have MaxColors (except draclassic, which has 50 and does not call here)\n if (!OrderedColorTable[palette])\n {\n if (BigPalettes.indexOf(palette) < 0) // not a big palette\n OrderedColorTable[palette] = colors;\n else\n {\n OrderedColorTable[palette] = [];\n for (let i: number = 0; i < colors.length; i++)\n {\n if (palette === 'jet_r' || palette === 'turbo_r')\n OrderedColorTable[palette].push(colors[Math.floor(DistrictsColorOrder[i] * 2.5) + 12]);\n else\n OrderedColorTable[palette].push(colors[DistrictsColorOrder[i] * 3]);\n }\n }\n }\n return OrderedColorTable[palette];\n}\n\nexport function getPalette(palette: string): string[]\n{\n if (palette === 'draclassic')\n {\n // return draclassic palette with only 50 colors\n let colors: string[] = [];\n for (let i = 1; i < MaxOrderedColors; i++)\n colors.push(genDRAColor(i, true));\n return colors;\n }\n\n return getColorTable(palette);\n}\n\n// Generate table for palette\nfunction getColorTable(palette: string): string[]\n{\n // Classic palettes are referenced directly in some places, so we define them separately and add a reference to ColorTable for each of them\n if (palette === 'demographicsclassic')\n {\n if (!ColorTable[palette])\n ColorTable[palette] = EthnicFewClassicColors;\n return ColorTable[palette];\n }\n else if (palette === 'partisanclassic')\n {\n if (!ColorTable[palette])\n ColorTable[palette] = PartisanPrecinctClassicColors;\n return ColorTable[palette];\n }\n else if (palette === 'partisandistrictsclassic')\n {\n if (!ColorTable[palette])\n ColorTable[palette] = PartisanDistrictClassicColors;\n return ColorTable[palette];\n }\n else if (palette === 'allgroupsclassic')\n {\n if (!ColorTable[palette])\n ColorTable[palette] = EthnicBackgroundColor;\n return ColorTable[palette];\n }\n\n if (ColorTable[palette])\n return ColorTable[palette];\n\n if (palette.endsWith('_r'))\n {\n // Reverse palettes are not pre-generated into ColorTable; reverse the pre-generated one and cache it in ColorTable\n const basePalette = palette.substring(0, palette.length - 2);\n if (ColorTable[basePalette])\n {\n ColorTable[palette] = [...ColorTable[basePalette]].reverse();\n return ColorTable[palette];\n }\n }\n\n console.log(`colors.ts: palette not found: ${palette}`);\n return ['#ffffff'];\n}\n\n// Helpers\n/**** These helpers are now in data_tools/make_colortable.py which generates colortable.ts (9/15/2025) ****\nfunction toHexColor(r: number, g: number, b: number): string\n{\n return `#${Util.toHex(r)}${Util.toHex(g)}${Util.toHex(b)}`;\n}\n\nfunction jscolormap(name: string, shades: number): string[]\n{\n let result: string[] = [];\n for (let i = 0; i < shades; i++)\n {\n const rgb: number[] = partial(name)((i + 0.5) / shades);\n result.push(toHexColor(rgb[0], rgb[1], rgb[2]));\n }\n return result;\n}\n\nfunction evaluate_cmap(x: number, name: string, reverse: boolean) {\n /**\n * Evaluate colormap `name` at some value `x`.\n * @param {number} x - The value (between 0 and 1) at which to evaluate the colormap.\n * @param {string} name - The name of the colormap (see matplotlib documentation).\n * @reverse {boolean} reverse - Whether or not to reverse the colormap.\n * @return {list} - A 3-tuple (R, G, B) containing the color assigned to `x`.\n *//*\n\n // Ensure that the value of `x` is valid (i.e., 0 <= x <= 1)\n if (!(0 <= x && x <= 1)) {\n alert('Illegal value for x! Must be in [0, 1].')\n }\n\n // Ensure that `name` is a valid colormap\n if (!(name in JsColorMapsData.data)) {\n alert('Colormap ' + name + 'does not exist!');\n }\n\n // We can get the reverse colormap by evaluating colormap(1-x)\n if (reverse === true) {\n x = 1 - x;\n }\n\n // Get the colors and whether or not we need to interpolate\n let colors = JsColorMapsData.data[name]['colors'];\n let interpolate = JsColorMapsData.data[name]['interpolate'];\n\n if (interpolate === true) {\n return interpolated(x, colors);\n } else {\n return qualitative(x, colors);\n }\n}\n\nfunction interpolated(x: number, colors: any[]) {\n let lo = Math.floor(x * (colors.length - 1));\n let hi = Math.ceil(x * (colors.length - 1));\n let r = Math.round((colors[lo][0] + colors[hi][0]) / 2 * 255);\n let g = Math.round((colors[lo][1] + colors[hi][1]) / 2 * 255);\n let b = Math.round((colors[lo][2] + colors[hi][2]) / 2 * 255);\n return [r, g, b];\n}\n\nfunction qualitative(x: number, colors: any[]) {\n let idx = 0;\n while (x > (idx + 1) / (colors.length - 0) ) { idx++; }\n let r = Math.round(colors[idx][0] * 255);\n let g = Math.round(colors[idx][1] * 255);\n let b = Math.round(colors[idx][2] * 255);\n return [r, g, b];\n}\n\nfunction partial(name: string) {\n if (name.endsWith('_r')) {\n return function(x: number) { return evaluate_cmap(x, name.substring(0, name.length - 2), true) };\n } else {\n return function(x: number) { return evaluate_cmap(x, name, false) };\n }\n\n} */\n\n// End of js-colormaps\n// *********************************************************\n","export const ColorBrewerSchemeNames: string[] =\n [\"Accent\",\"Dark2\",\"Paired\",\"Pastel1\",\"Pastel2\",\"Set1\",\"Set2\",\"Set3\",\"Blues\",\"Greens\",\"Oranges\",\"Reds\",\"Purples\",\"Greys1\",\"BuGn\",\"BuPu\",\"GnBu\",\"OrRd\",\"PuBuGn\",\"YlGn\",\"Spectral\",\"RdYlBu\",\"PiYG\",\"PRGn\",\"RdYlGn\",\"RdGy\",\"RdBu\",\"BrBG\",\"PuOr\"];\nexport var ColorTable: {[key: string]: string[]} = {\n \"Greys\": [\"#ffffff\",\"#fefefe\",\"#fdfdfd\",\"#fcfcfc\",\"#fbfbfb\",\"#fbfbfb\",\"#fafafa\",\"#f9f9f9\",\"#f8f8f8\",\"#f7f7f7\",\"#f7f7f7\",\"#f6f6f6\",\"#f5f5f5\",\"#f4f4f4\",\"#f3f3f3\",\"#f3f3f3\",\"#f2f2f2\",\"#f1f1f1\",\"#f0f0f0\",\"#efefef\",\"#eeeeee\",\"#ededed\",\"#ebebeb\",\"#eaeaea\",\"#e9e9e9\",\"#e8e8e8\",\"#e6e6e6\",\"#e5e5e5\",\"#e4e4e4\",\"#e3e3e3\",\"#e2e2e2\",\"#e0e0e0\",\"#dfdfdf\",\"#dedede\",\"#dddddd\",\"#dbdbdb\",\"#dadada\",\"#d9d9d9\",\"#d7d7d7\",\"#d6d6d6\",\"#d5d5d5\",\"#d3d3d3\",\"#d1d1d1\",\"#d0d0d0\",\"#cfcfcf\",\"#cdcdcd\",\"#cbcbcb\",\"#cacaca\",\"#c9c9c9\",\"#c7c7c7\",\"#c6c6c6\",\"#c4c4c4\",\"#c2c2c2\",\"#c2c2c2\",\"#c0c0c0\",\"#bebebe\",\"#bcbcbc\",\"#bbbbbb\",\"#b8b8b8\",\"#b6b6b6\",\"#b5b5b5\",\"#b2b2b2\",\"#b0b0b0\",\"#aeaeae\",\"#acacac\",\"#aaaaaa\",\"#a7a7a7\",\"#a6a6a6\",\"#a3a3a3\",\"#a1a1a1\",\"#a0a0a0\",\"#9d9d9d\",\"#9b9b9b\",\"#9a9a9a\",\"#979797\",\"#959595\",\"#939393\",\"#929292\",\"#8f8f8f\",\"#8d8d8d\",\"#8c8c8c\",\"#8a8a8a\",\"#888888\",\"#878787\",\"#848484\",\"#828282\",\"#808080\",\"#7f7f7f\",\"#7d7d7d\",\"#7b7b7b\",\"#797979\",\"#777777\",\"#757575\",\"#747474\",\"#727272\",\"#707070\",\"#6e6e6e\",\"#6d6d6d\",\"#6b6b6b\",\"#696969\",\"#676767\",\"#656565\",\"#636363\",\"#626262\",\"#606060\",\"#5e5e5e\",\"#5c5c5c\",\"#5b5b5b\",\"#595959\",\"#575757\",\"#565656\",\"#545454\",\"#525252\",\"#505050\",\"#4d4d4d\",\"#4b4b4b\",\"#484848\",\"#464646\",\"#444444\",\"#414141\",\"#3f3f3f\",\"#3c3c3c\",\"#3a3a3a\",\"#383838\",\"#353535\",\"#333333\",\"#303030\",\"#2e2e2e\",\"#2c2c2c\",\"#292929\",\"#272727\",\"#252525\",\"#222222\",\"#212121\",\"#1f1f1f\",\"#1c1c1c\",\"#1a1a1a\",\"#191919\",\"#171717\",\"#141414\",\"#131313\",\"#111111\",\"#0f0f0f\",\"#0d0d0d\",\"#0b0b0b\",\"#090909\",\"#060606\",\"#050505\",\"#030303\",\"#010101\"],\n \"bone\": [\"#000001\",\"#020203\",\"#040405\",\"#050507\",\"#070709\",\"#08080c\",\"#0a0a0e\",\"#0b0b0f\",\"#0d0d12\",\"#0e0e14\",\"#0f0f15\",\"#111118\",\"#13131a\",\"#14141b\",\"#15151e\",\"#171720\",\"#191923\",\"#1a1a24\",\"#1c1c26\",\"#1d1d29\",\"#1e1e2a\",\"#20202c\",\"#22222f\",\"#232330\",\"#242433\",\"#262635\",\"#282837\",\"#292939\",\"#2a2a3b\",\"#2c2c3d\",\"#2d2d3f\",\"#2f2f41\",\"#313144\",\"#313145\",\"#333347\",\"#35354a\",\"#37374c\",\"#38384d\",\"#393950\",\"#3b3b52\",\"#3c3c53\",\"#3e3e56\",\"#3f3f58\",\"#404059\",\"#42425c\",\"#44445e\",\"#464661\",\"#464662\",\"#484864\",\"#4a4a67\",\"#4b4b68\",\"#4d4d6b\",\"#4e4e6d\",\"#4f4f6e\",\"#515171\",\"#535373\",\"#545674\",\"#555775\",\"#575977\",\"#595c79\",\"#5a5d7a\",\"#5b5f7b\",\"#5d627d\",\"#5e637e\",\"#606580\",\"#626881\",\"#636a83\",\"#646b84\",\"#666e86\",\"#687088\",\"#697188\",\"#6a748a\",\"#6c768c\",\"#6d778d\",\"#6f7a8f\",\"#707c90\",\"#727e92\",\"#738093\",\"#758295\",\"#778496\",\"#778697\",\"#798899\",\"#7b8a9b\",\"#7c8c9c\",\"#7e8e9d\",\"#7f919f\",\"#8193a1\",\"#8294a2\",\"#8497a4\",\"#8599a5\",\"#869aa6\",\"#889da8\",\"#8a9faa\",\"#8ba0ab\",\"#8ca3ac\",\"#8ea5ae\",\"#90a7b0\",\"#91a9b1\",\"#93abb2\",\"#94adb4\",\"#95afb5\",\"#97b1b7\",\"#99b3b9\",\"#9ab5b9\",\"#9bb7bb\",\"#9db9bd\",\"#9fbcbf\",\"#a0bdc0\",\"#a1bfc1\",\"#a3c2c3\",\"#a4c3c4\",\"#a6c5c6\",\"#a8c7c7\",\"#aac8c8\",\"#accaca\",\"#afcccc\",\"#b2cece\",\"#b3cece\",\"#b6d0d0\",\"#b9d2d2\",\"#bad3d3\",\"#bdd5d5\",\"#bfd6d6\",\"#c1d7d7\",\"#c4d9d9\",\"#c6dbdb\",\"#c9dcdc\",\"#cadddd\",\"#cddfdf\",\"#d0e1e1\",\"#d1e2e2\",\"#d4e3e3\",\"#d7e5e5\",\"#d8e6e6\",\"#dbe8e8\",\"#deeaea\",\"#e0ebeb\",\"#e2ecec\",\"#e4eeee\",\"#e7f0f0\",\"#e8f1f1\",\"#ebf2f2\",\"#eef4f4\",\"#eff5f5\",\"#f2f7f7\",\"#f5f8f8\",\"#f7fafa\",\"#f9fbfb\",\"#fcfdfd\",\"#feffff\"],\n \"inferno\": [\"#000004\",\"#010107\",\"#02010b\",\"#02020d\",\"#030311\",\"#050416\",\"#06051a\",\"#07051c\",\"#090621\",\"#0b0725\",\"#0d0827\",\"#0f092c\",\"#120a31\",\"#130a33\",\"#160b38\",\"#180c3d\",\"#1b0c42\",\"#1d0c44\",\"#200c49\",\"#230c4e\",\"#250c50\",\"#290b54\",\"#2c0b58\",\"#2e0a5a\",\"#310a5d\",\"#350a60\",\"#380962\",\"#3a0964\",\"#3e0966\",\"#410a67\",\"#430a68\",\"#460b69\",\"#490b6a\",\"#4b0c6b\",\"#4e0d6c\",\"#510e6d\",\"#550f6d\",\"#56106d\",\"#59116e\",\"#5d126e\",\"#5e136e\",\"#61146e\",\"#65156e\",\"#66166e\",\"#69176e\",\"#6d186e\",\"#70196e\",\"#711a6e\",\"#741b6e\",\"#781c6d\",\"#791c6d\",\"#7c1e6d\",\"#801f6c\",\"#811f6c\",\"#84206b\",\"#88226a\",\"#8b236a\",\"#8c2369\",\"#902468\",\"#932567\",\"#942667\",\"#972766\",\"#9b2865\",\"#9c2964\",\"#9f2a63\",\"#a22b62\",\"#a62d60\",\"#a72d5f\",\"#aa2f5e\",\"#ad305c\",\"#af315c\",\"#b2325a\",\"#b53458\",\"#b63457\",\"#b93656\",\"#bc3754\",\"#bf3952\",\"#c13a51\",\"#c43c4f\",\"#c63e4d\",\"#c83f4c\",\"#ca404a\",\"#cd4248\",\"#ce4447\",\"#d14644\",\"#d44842\",\"#d64a40\",\"#d74b3f\",\"#da4e3d\",\"#dc503a\",\"#dd5139\",\"#df5437\",\"#e15734\",\"#e35833\",\"#e55b31\",\"#e65e2e\",\"#e8612c\",\"#e9622b\",\"#eb6528\",\"#ed6826\",\"#ed6a24\",\"#ef6d22\",\"#f0701f\",\"#f1721e\",\"#f2751b\",\"#f47819\",\"#f57c16\",\"#f57d15\",\"#f68112\",\"#f78410\",\"#f8860e\",\"#f98a0c\",\"#f98d09\",\"#fa8f08\",\"#fa9307\",\"#fb9706\",\"#fb9a06\",\"#fb9c06\",\"#fca007\",\"#fca40a\",\"#fca60b\",\"#fca90e\",\"#fcad12\",\"#fcaf13\",\"#fcb317\",\"#fbb71c\",\"#fbbb20\",\"#fbbd22\",\"#fac127\",\"#fac52c\",\"#f9c62e\",\"#f9ca33\",\"#f8ce39\",\"#f8d03b\",\"#f7d441\",\"#f6d847\",\"#f5dc4e\",\"#f4de51\",\"#f3e258\",\"#f2e55f\",\"#f2e763\",\"#f2eb6b\",\"#f1ee73\",\"#f1f077\",\"#f2f37f\",\"#f3f688\",\"#f5f890\",\"#f6f994\",\"#f8fc9b\",\"#fbfea3\"],\n \"jet\": [\"#000082\",\"#00008b\",\"#000094\",\"#000099\",\"#0000a2\",\"#0000ab\",\"#0000b4\",\"#0000b8\",\"#0000c1\",\"#0000ca\",\"#0000cf\",\"#0000d8\",\"#0000e1\",\"#0000e6\",\"#0000ef\",\"#0000f8\",\"#0000ff\",\"#0000ff\",\"#0000ff\",\"#0006ff\",\"#000aff\",\"#0013ff\",\"#001bff\",\"#001fff\",\"#0026ff\",\"#002eff\",\"#0037ff\",\"#003bff\",\"#0042ff\",\"#004aff\",\"#004fff\",\"#0057ff\",\"#005eff\",\"#0062ff\",\"#006bff\",\"#0073ff\",\"#007aff\",\"#007eff\",\"#0086ff\",\"#008fff\",\"#0093ff\",\"#009aff\",\"#00a2ff\",\"#00a7ff\",\"#00afff\",\"#00b6ff\",\"#00beff\",\"#00c3ff\",\"#00cbff\",\"#00d2ff\",\"#00d6ff\",\"#00dffc\",\"#01e7f6\",\"#04ebf3\",\"#0af2ec\",\"#11fae6\",\"#17ffdf\",\"#1bffdc\",\"#21ffd6\",\"#28ffcf\",\"#2bffcc\",\"#31ffc6\",\"#38ffbf\",\"#3bffbc\",\"#41ffb5\",\"#48ffaf\",\"#4effa9\",\"#51ffa5\",\"#58ff9f\",\"#5eff98\",\"#62ff95\",\"#68ff8f\",\"#6eff88\",\"#72ff85\",\"#78ff7f\",\"#7fff78\",\"#85ff72\",\"#88ff6e\",\"#8fff68\",\"#95ff62\",\"#98ff5e\",\"#9fff58\",\"#a5ff51\",\"#a9ff4e\",\"#afff48\",\"#b5ff41\",\"#bcff3b\",\"#bfff38\",\"#c6ff31\",\"#ccff2b\",\"#cfff28\",\"#d6ff21\",\"#dcff1b\",\"#dfff17\",\"#e6ff11\",\"#ecff0a\",\"#f3fa04\",\"#f6f601\",\"#fcef00\",\"#ffe800\",\"#ffe400\",\"#ffdd00\",\"#ffd500\",\"#ffd100\",\"#ffca00\",\"#ffc300\",\"#ffbb00\",\"#ffb800\",\"#ffb000\",\"#ffa900\",\"#ffa500\",\"#ff9e00\",\"#ff9600\",\"#ff9200\",\"#ff8b00\",\"#ff8400\",\"#ff7c00\",\"#ff7900\",\"#ff7100\",\"#ff6a00\",\"#ff6600\",\"#ff5f00\",\"#ff5700\",\"#ff5400\",\"#ff4c00\",\"#ff4500\",\"#ff3d00\",\"#ff3a00\",\"#ff3200\",\"#ff2b00\",\"#ff2700\",\"#ff2000\",\"#ff1800\",\"#ff1500\",\"#f80d00\",\"#ef0600\",\"#e60000\",\"#e10000\",\"#d80000\",\"#cf0000\",\"#ca0000\",\"#c10000\",\"#b80000\",\"#b40000\",\"#ab0000\",\"#a20000\",\"#990000\",\"#940000\",\"#8b0000\",\"#820000\"],\n \"magma\": [\"#000004\",\"#010107\",\"#02010a\",\"#02020c\",\"#030311\",\"#040415\",\"#060519\",\"#07061b\",\"#09071f\",\"#0b0823\",\"#0c0925\",\"#0e0a2a\",\"#100c2e\",\"#110c30\",\"#140e35\",\"#160f39\",\"#180f3e\",\"#1a1041\",\"#1c1145\",\"#1f114a\",\"#20114d\",\"#231152\",\"#261256\",\"#281159\",\"#2b115d\",\"#2e1162\",\"#321066\",\"#331068\",\"#37106c\",\"#3a0f6f\",\"#3c0f70\",\"#3f0f73\",\"#430f75\",\"#450f76\",\"#481078\",\"#4b117a\",\"#4e127b\",\"#50127b\",\"#53137d\",\"#56147d\",\"#58157e\",\"#5b167f\",\"#5e177f\",\"#60187f\",\"#631980\",\"#661b80\",\"#691c81\",\"#6b1c81\",\"#6e1e81\",\"#711f81\",\"#722081\",\"#752181\",\"#792282\",\"#7a2382\",\"#7d2482\",\"#802582\",\"#842681\",\"#852781\",\"#882881\",\"#8c2981\",\"#8d2981\",\"#902a81\",\"#942b80\",\"#952c80\",\"#982d80\",\"#9c2e7f\",\"#9f2f7f\",\"#a1307e\",\"#a4317e\",\"#a7327d\",\"#a9327d\",\"#ac337c\",\"#af347b\",\"#b1357b\",\"#b4367a\",\"#b73779\",\"#bb3878\",\"#bc3977\",\"#c03a76\",\"#c33b75\",\"#c43c74\",\"#c83d73\",\"#cb3f72\",\"#cc3f71\",\"#d04170\",\"#d3426e\",\"#d6446d\",\"#d7456c\",\"#da476a\",\"#dd4969\",\"#de4a68\",\"#e14c66\",\"#e44e65\",\"#e55064\",\"#e75263\",\"#e95561\",\"#ec5860\",\"#ed595f\",\"#ef5c5e\",\"#f05f5d\",\"#f1615d\",\"#f3655c\",\"#f4685c\",\"#f56a5c\",\"#f66d5c\",\"#f7715c\",\"#f8755c\",\"#f8775c\",\"#f97a5d\",\"#fa7e5e\",\"#fa805f\",\"#fb8460\",\"#fb8861\",\"#fc8a62\",\"#fc8d63\",\"#fd9165\",\"#fd9567\",\"#fd9768\",\"#fd9b6a\",\"#fe9e6c\",\"#fea06e\",\"#fea470\",\"#fea872\",\"#fea974\",\"#fead76\",\"#feb179\",\"#feb57c\",\"#feb67d\",\"#feba80\",\"#febe83\",\"#fec085\",\"#fec388\",\"#fec78b\",\"#fec98c\",\"#fecc90\",\"#fed093\",\"#fed496\",\"#fed698\",\"#fdd99b\",\"#fddd9f\",\"#fddfa1\",\"#fde2a4\",\"#fde6a8\",\"#fde8aa\",\"#fdecad\",\"#fcefb1\",\"#fcf3b5\",\"#fcf5b7\",\"#fcf8ba\",\"#fcfcbe\"],\n \"plasma\": [\"#0f0787\",\"#15078a\",\"#1a068c\",\"#1c068d\",\"#21068f\",\"#250591\",\"#290593\",\"#2b0594\",\"#2f0595\",\"#320597\",\"#340598\",\"#380499\",\"#3b049b\",\"#3d049b\",\"#40049d\",\"#43039e\",\"#47039f\",\"#4803a0\",\"#4c03a1\",\"#4f02a2\",\"#5102a2\",\"#5402a3\",\"#5701a4\",\"#5801a5\",\"#5c01a5\",\"#5f01a6\",\"#6200a7\",\"#6400a7\",\"#6700a7\",\"#6a00a8\",\"#6b00a8\",\"#6e00a8\",\"#7100a8\",\"#7301a8\",\"#7601a8\",\"#7902a8\",\"#7c02a8\",\"#7d03a8\",\"#8004a7\",\"#8305a7\",\"#8506a7\",\"#8808a6\",\"#8b09a5\",\"#8c0aa5\",\"#8f0da4\",\"#920fa3\",\"#9411a2\",\"#9612a1\",\"#9814a0\",\"#9b169e\",\"#9c189e\",\"#9f1a9c\",\"#a21c9b\",\"#a31d9a\",\"#a51f98\",\"#a82297\",\"#aa2495\",\"#ab2594\",\"#ae2792\",\"#b02a90\",\"#b12b8f\",\"#b42d8e\",\"#b62f8c\",\"#b7308b\",\"#b93389\",\"#bb3587\",\"#bd3785\",\"#be3884\",\"#c03a82\",\"#c23d81\",\"#c33e80\",\"#c5407e\",\"#c7427c\",\"#c8437b\",\"#ca4679\",\"#cc4877\",\"#ce4a75\",\"#cf4b75\",\"#d14e73\",\"#d25071\",\"#d35170\",\"#d5536e\",\"#d7566d\",\"#d8576c\",\"#d9596a\",\"#db5b68\",\"#dc5e66\",\"#dd5f66\",\"#df6164\",\"#e06462\",\"#e16561\",\"#e36760\",\"#e4695e\",\"#e56b5d\",\"#e66d5b\",\"#e86f5a\",\"#e97258\",\"#ea7357\",\"#eb7655\",\"#ec7854\",\"#ed7953\",\"#ee7c51\",\"#ef7e4f\",\"#f0804e\",\"#f1824d\",\"#f2854b\",\"#f38749\",\"#f48948\",\"#f58b47\",\"#f68e45\",\"#f68f44\",\"#f79242\",\"#f89541\",\"#f89640\",\"#f9993e\",\"#fa9c3c\",\"#fb9e3b\",\"#fba03a\",\"#fba338\",\"#fca636\",\"#fca735\",\"#fdaa34\",\"#fdad32\",\"#fdae31\",\"#fdb130\",\"#fdb42e\",\"#feb82d\",\"#feb92c\",\"#febc2b\",\"#febf29\",\"#fdc129\",\"#fdc428\",\"#fdc727\",\"#fdc926\",\"#fccc26\",\"#fccf25\",\"#fbd325\",\"#fbd424\",\"#fad724\",\"#fadb24\",\"#f9dc24\",\"#f8e025\",\"#f7e325\",\"#f7e526\",\"#f6e826\",\"#f4ec27\",\"#f3ef27\",\"#f2f127\",\"#f1f426\",\"#f0f823\"],\n \"turbo\": [\"#31143f\",\"#331a4e\",\"#36205c\",\"#372263\",\"#392870\",\"#3b2e7c\",\"#3d3489\",\"#3d378e\",\"#3f3c9a\",\"#4042a4\",\"#4145a9\",\"#424ab3\",\"#434fbc\",\"#4452c1\",\"#4558c9\",\"#455dd1\",\"#4662d8\",\"#4665db\",\"#466ae2\",\"#476fe8\",\"#4772ea\",\"#4777ef\",\"#467cf3\",\"#467ff5\",\"#4684f9\",\"#4589fc\",\"#448dfe\",\"#4390fe\",\"#4195ff\",\"#3f9afe\",\"#3e9dfe\",\"#3ba2fd\",\"#37a7fa\",\"#36a9f9\",\"#32aef6\",\"#2fb3f3\",\"#2bb8ef\",\"#29baec\",\"#26bfe8\",\"#23c4e3\",\"#21c6e1\",\"#1ecadb\",\"#1cced6\",\"#1bd1d4\",\"#19d5ce\",\"#18d8c9\",\"#18dcc4\",\"#18dec1\",\"#18e1bc\",\"#1ae4b7\",\"#1be5b5\",\"#1ee8b0\",\"#21eaab\",\"#24eca8\",\"#28eea2\",\"#2ef09c\",\"#34f396\",\"#37f493\",\"#3ef58c\",\"#45f785\",\"#48f882\",\"#50f97b\",\"#57fb74\",\"#5bfb71\",\"#63fc6a\",\"#6bfd64\",\"#73fe5e\",\"#77fe5b\",\"#7fff55\",\"#86ff4f\",\"#8aff4d\",\"#91ff48\",\"#97fe43\",\"#9afe41\",\"#a0fd3e\",\"#a5fc3b\",\"#abfb39\",\"#adfa38\",\"#b3f836\",\"#b8f735\",\"#baf534\",\"#c0f334\",\"#c5f134\",\"#c7ef34\",\"#ccec34\",\"#d1e935\",\"#d5e635\",\"#d8e536\",\"#dce136\",\"#e0de37\",\"#e2dc38\",\"#e6d838\",\"#ead439\",\"#ebd239\",\"#efce3a\",\"#f2ca3a\",\"#f4c63a\",\"#f6c43a\",\"#f8c03a\",\"#f9bb39\",\"#fab938\",\"#fcb537\",\"#fdb035\",\"#fdad34\",\"#fea832\",\"#fea330\",\"#fe9d2e\",\"#fe9a2d\",\"#fe942a\",\"#fd8e28\",\"#fd8b27\",\"#fc8524\",\"#fb7f21\",\"#fa7c20\",\"#f9761d\",\"#f8701b\",\"#f66a18\",\"#f56717\",\"#f36215\",\"#f05c12\",\"#ef5911\",\"#ed540f\",\"#ea4f0e\",\"#e94d0d\",\"#e6480b\",\"#e3440a\",\"#e04009\",\"#de3e08\",\"#db3a07\",\"#d73606\",\"#d53406\",\"#d13005\",\"#cd2c04\",\"#cb2b04\",\"#c62703\",\"#c22403\",\"#bd2102\",\"#bb1f02\",\"#b61c02\",\"#b01901\",\"#ae1801\",\"#a81501\",\"#a21201\",\"#9f1101\",\"#990e01\",\"#930c01\",\"#8d0a02\",\"#8a0902\",\"#830702\",\"#7c0503\"],\n \"viridis\": [\"#440255\",\"#450458\",\"#46075b\",\"#46095c\",\"#470c5f\",\"#470f62\",\"#471265\",\"#481366\",\"#481669\",\"#48196b\",\"#481a6c\",\"#481d6f\",\"#481f71\",\"#482172\",\"#482374\",\"#482676\",\"#482878\",\"#482a79\",\"#472c7b\",\"#472f7d\",\"#47307d\",\"#46327f\",\"#453580\",\"#453681\",\"#453882\",\"#443b83\",\"#433d85\",\"#433e85\",\"#424186\",\"#414387\",\"#414487\",\"#404788\",\"#3f4989\",\"#3e4a89\",\"#3d4c8a\",\"#3c4e8a\",\"#3b518b\",\"#3b528b\",\"#3a548b\",\"#39568c\",\"#38578c\",\"#37598c\",\"#365b8d\",\"#365c8d\",\"#355e8d\",\"#34608d\",\"#33628d\",\"#33638d\",\"#32658e\",\"#31678e\",\"#30688e\",\"#306a8e\",\"#2f6c8e\",\"#2e6d8e\",\"#2d6f8e\",\"#2d718e\",\"#2c738e\",\"#2b748e\",\"#2b768e\",\"#2a788e\",\"#2a798e\",\"#297a8e\",\"#287c8e\",\"#287d8e\",\"#277f8e\",\"#26818e\",\"#25838e\",\"#25848e\",\"#24868e\",\"#24888e\",\"#23898e\",\"#238a8d\",\"#228c8d\",\"#228d8d\",\"#218f8d\",\"#20918c\",\"#20938c\",\"#20948c\",\"#1f968b\",\"#1f988b\",\"#1f998a\",\"#1e9a8a\",\"#1e9c89\",\"#1e9d89\",\"#1f9f88\",\"#1fa187\",\"#20a387\",\"#20a486\",\"#21a685\",\"#22a784\",\"#23a884\",\"#24aa83\",\"#26ac81\",\"#27ad81\",\"#29af80\",\"#2bb17e\",\"#2db27d\",\"#2fb37c\",\"#31b57b\",\"#34b779\",\"#36b878\",\"#39b976\",\"#3cbb75\",\"#3ebc74\",\"#41be72\",\"#45bf70\",\"#49c16e\",\"#4bc26d\",\"#4fc36b\",\"#53c568\",\"#55c667\",\"#59c765\",\"#5dc962\",\"#5fca61\",\"#64cb5e\",\"#68cc5c\",\"#6dce59\",\"#6fce58\",\"#74d055\",\"#79d152\",\"#7bd250\",\"#80d34d\",\"#85d44a\",\"#87d549\",\"#8cd645\",\"#91d742\",\"#97d83f\",\"#99d93d\",\"#9eda3a\",\"#a4db36\",\"#a6db35\",\"#acdc31\",\"#b1dd2e\",\"#b4dd2c\",\"#b9de29\",\"#bedf25\",\"#c4e022\",\"#c6e021\",\"#cce11e\",\"#d1e11c\",\"#d4e21b\",\"#d9e219\",\"#dee318\",\"#e1e318\",\"#e6e419\",\"#ebe51a\",\"#f0e51c\",\"#f2e61d\",\"#f7e620\",\"#fce724\"],\n \"Accent\": [\"#7fc97f\",\"#beaed4\",\"#fdc086\",\"#ffff99\",\"#386cb0\",\"#f0027f\",\"#bf5b17\",\"#666666\"],\n \"Dark2\": [\"#1b9e77\",\"#d95f02\",\"#7570b3\",\"#e7298a\",\"#66a61e\",\"#e6ab02\",\"#a6761d\",\"#666666\"],\n \"Paired\": [\"#a6cee3\",\"#1f78b4\",\"#b2df8a\",\"#33a02c\",\"#fb9a99\",\"#e31a1c\",\"#fdbf6f\",\"#ff7f00\"],\n \"Pastel1\": [\"#fbb4ae\",\"#b3cde3\",\"#ccebc5\",\"#decbe4\",\"#fed9a6\",\"#ffffcc\",\"#e5d8bd\",\"#fddaec\"],\n \"Pastel2\": [\"#b3e2cd\",\"#fdcdac\",\"#cbd5e8\",\"#f4cae4\",\"#e6f5c9\",\"#fff2ae\",\"#f1e2cc\",\"#cccccc\"],\n \"Set1\": [\"#e41a1c\",\"#377eb8\",\"#4daf4a\",\"#984ea3\",\"#ff7f00\",\"#ffff33\",\"#a65628\",\"#f781bf\"],\n \"Set2\": [\"#66c2a5\",\"#fc8d62\",\"#8da0cb\",\"#e78ac3\",\"#a6d854\",\"#ffd92f\",\"#e5c494\",\"#b3b3b3\"],\n \"Set3\": [\"#8dd3c7\",\"#ffffb3\",\"#bebada\",\"#fb8072\",\"#80b1d3\",\"#fdb462\",\"#b3de69\",\"#fccde5\"],\n \"Blues\": [\"#f7fbff\",\"#deebf7\",\"#c6dbef\",\"#9ecae1\",\"#6baed6\",\"#4292c6\",\"#2171b5\",\"#084594\"],\n \"Greens\": [\"#f7fcf5\",\"#e5f5e0\",\"#c7e9c0\",\"#a1d99b\",\"#74c476\",\"#41ab5d\",\"#238b45\",\"#005a32\"],\n \"Oranges\": [\"#fff5eb\",\"#fee6ce\",\"#fdd0a2\",\"#fdae6b\",\"#fd8d3c\",\"#f16913\",\"#d94801\",\"#8c2d04\"],\n \"Reds\": [\"#fff5f0\",\"#fee0d2\",\"#fcbba1\",\"#fc9272\",\"#fb6a4a\",\"#ef3b2c\",\"#cb181d\",\"#99000d\"],\n \"Purples\": [\"#fcfbfd\",\"#efedf5\",\"#dadaeb\",\"#bcbddc\",\"#9e9ac8\",\"#807dba\",\"#6a51a3\",\"#4a1486\"],\n \"Greys1\": [\"#ffffff\",\"#f0f0f0\",\"#d9d9d9\",\"#bdbdbd\",\"#969696\",\"#737373\",\"#525252\",\"#252525\"],\n \"BuGn\": [\"#f7fcfd\",\"#e5f5f9\",\"#ccece6\",\"#99d8c9\",\"#66c2a4\",\"#41ae76\",\"#238b45\",\"#005824\"],\n \"BuPu\": [\"#f7fcfd\",\"#e0ecf4\",\"#bfd3e6\",\"#9ebcda\",\"#8c96c6\",\"#8c6bb1\",\"#88419d\",\"#6e016b\"],\n \"GnBu\": [\"#f7fcf0\",\"#e0f3db\",\"#ccebc5\",\"#a8ddb5\",\"#7bccc4\",\"#4eb3d3\",\"#2b8cbe\",\"#08589e\"],\n \"OrRd\": [\"#fff7ec\",\"#fee8c8\",\"#fdd49e\",\"#fdbb84\",\"#fc8d59\",\"#ef6548\",\"#d7301f\",\"#990000\"],\n \"PuBuGn\": [\"#fff7fb\",\"#ece2f0\",\"#d0d1e6\",\"#a6bddb\",\"#67a9cf\",\"#3690c0\",\"#02818a\",\"#016450\"],\n \"YlGn\": [\"#ffffe5\",\"#f7fcb9\",\"#d9f0a3\",\"#addd8e\",\"#78c679\",\"#41ab5d\",\"#238443\",\"#005a32\"],\n \"Spectral\": [\"#d53e4f\",\"#f46d43\",\"#fdae61\",\"#fee08b\",\"#e6f598\",\"#abdda4\",\"#66c2a5\",\"#3288bd\"],\n \"RdYlBu\": [\"#d73027\",\"#f46d43\",\"#fdae61\",\"#fee090\",\"#e0f3f8\",\"#abd9e9\",\"#74add1\",\"#4575b4\"],\n \"PiYG\": [\"#c51b7d\",\"#de77ae\",\"#f1b6da\",\"#fde0ef\",\"#e6f5d0\",\"#b8e186\",\"#7fbc41\",\"#4d9221\"],\n \"PRGn\": [\"#762a83\",\"#9970ab\",\"#c2a5cf\",\"#e7d4e8\",\"#d9f0d3\",\"#a6dba0\",\"#5aae61\",\"#1b7837\"],\n \"RdYlGn\": [\"#d73027\",\"#f46d43\",\"#fdae61\",\"#fee08b\",\"#d9ef8b\",\"#a6d96a\",\"#66bd63\",\"#1a9850\"],\n \"RdGy\": [\"#b2182b\",\"#d6604d\",\"#f4a582\",\"#fddbc7\",\"#e0e0e0\",\"#bababa\",\"#878787\",\"#4d4d4d\"],\n \"RdBu\": [\"#b2182b\",\"#d6604d\",\"#f4a582\",\"#fddbc7\",\"#d1e5f0\",\"#92c5de\",\"#4393c3\",\"#2166ac\"],\n \"BrBG\": [\"#8c510a\",\"#bf812d\",\"#dfc27d\",\"#f6e8c3\",\"#c7eae5\",\"#80cdc1\",\"#35978f\",\"#01665e\"],\n \"PuOr\": [\"#b35806\",\"#e08214\",\"#fdb863\",\"#fee0b6\",\"#d8daeb\",\"#b2abd2\",\"#8073ac\",\"#542788\"]\n};\n","export * from './context';\n","import * as Util from '../util/all';\n\nexport type ContextValues = { [key: string]: any };\nexport interface IContext\n{\n setDefaults: (o: ContextValues) => void\n setValues: (o: ContextValues) => void\n xvalue: (prop: string) => any\n xset: (prop: string) => boolean\n xflag: (prop: string) => boolean\n xnumber: (prop: string) => number\n xstring: (prop: string) => string\n}\n\nclass Context implements IContext\n{\n private values: ContextValues;\n private defaults: ContextValues;\n\n constructor()\n {\n this.values = {};\n this.defaults = {};\n }\n\n setValues(o: ContextValues): void\n {\n this.values = Util.shallowAssignImmutable(this.values, o);\n }\n\n setDefaults(o: ContextValues): void\n {\n this.defaults = Util.shallowAssignImmutable(this.defaults, o);\n }\n\n xvalue(prop: string): any\n {\n let v: any = this.values[prop];\n if (v === undefined && process && process.env)\n v = process.env[prop.toUpperCase()];\n if (v === undefined)\n v = this.defaults[prop];\n return v;\n }\n\n xset(prop: string): boolean\n {\n let v: any = this.values[prop];\n if (v === undefined && process && process.env)\n v = process.env[prop.toUpperCase()];\n return v !== undefined;\n }\n\n xflag(prop: string): boolean\n {\n let v: any = this.xvalue(prop);\n if (v === undefined || v === null)\n return false;\n return Number(v) != 0;\n }\n\n xnumber(prop: string): number\n {\n let v: any = this.xvalue(prop);\n if (v === undefined || v === null)\n return 0;\n return Number(v);\n }\n\n xstring(prop: string): string\n {\n let v: any = this.xvalue(prop);\n if (v === undefined || v === null)\n return null;\n return String(v);\n }\n}\n\nexport function create(): IContext\n{\n return new Context();\n}\n","export * from './control';\n","export interface Control {\n isCanceled: () => boolean,\n statusUpdate: (complete: number, total: number) => void,\n}\n","export * from './csv';\nexport * from './csvparseline';\n","import * as Util from '../util/all';\n\n// Parse CSV. \n// Fields are separated by commas or pipe symbol (census uses pipe separators.\n// Quoted fields may contain commas or pipes.\n// Either single quotes or double quotes may be used to surround field value.\n// Spaces at the beginning and end of fields are ignored.\n// Quotes must be the first non-space character in the field (otherwise they are part of the field value).\n//\n\nconst Space = 32;\nconst Tab = 9;\nconst Newline = 10;\nconst CR = 13;\nconst Comma = 44;\nconst SingleQuote = 39;\nconst DoubleQuote = 34;\nconst BackSlash = 92;\nconst Pipe = 124;\n\nfunction isWhite(c: number): boolean\n{\n return c === Space || c === Newline || c === Tab || c == CR;\n}\n\n// Keep calling next() to retrieve next parsed line. Returns false when done. Empty lines are ignored.\n\nexport class ParseMany\n{\n buf: Uint8Array;\n n: number;\n one: ParseOne;\n\n constructor(coder: Util.Coder, buf: Uint8Array)\n {\n this.buf = buf;\n this.n = 0;\n this.one = new ParseOne(coder);\n }\n\n get length(): number { return this.one.length }\n get fields(): string[] { return this.one.fields }\n\n next(): boolean\n {\n // Move past any leading CRLF\n while (this.n < this.buf.length)\n {\n let c = this.buf[this.n];\n if (c == CR || c == Newline)\n this.n++;\n else\n break;\n }\n\n let s = this.n;\n while (this.n < this.buf.length)\n {\n let c = this.buf[this.n];\n if (c == CR || c == Newline)\n break;\n else\n this.n++;\n }\n\n if (s != this.n)\n {\n this.one.setBuf(this.buf.subarray(s, this.n));\n return true;\n }\n else\n return false;\n }\n}\n\nexport class ParseOne\n{\n coder: Util.Coder;\n fields: string[]; // output\n buf: Uint8Array;\n n: number;\n tok: Uint8Array;\n toklen: number;\n infield: boolean;\n quote: number;\n nwhite: number;\n force: boolean;\n\n constructor(coder: Util.Coder, line?: string)\n {\n this.coder = coder;\n if (line)\n this.set(line);\n else\n this.fields = [];\n }\n\n set(line: string): void\n {\n this.setBuf(Util.s2u8(this.coder, line));\n }\n\n setBuf(buf: Uint8Array): void\n {\n this.buf = buf;\n this.fields = [];\n if (!this.tok || this.tok.length < this.buf.length)\n this.tok = new Uint8Array(new ArrayBuffer(this.buf.length));\n this.n = 0;\n this.toklen = 0;\n this.infield = false;\n this.nwhite = 0;\n this.quote = 0;\n this.force = false;\n this.parse();\n }\n\n get length(): number { return this.fields.length }\n\n pushtok(): void\n {\n // Trim trailing whitespace\n this.toklen -= this.nwhite;\n\n if (this.toklen || this.force)\n {\n this.fields.push(Util.u82s(this.coder, this.tok, 0, this.toklen));\n this.toklen = 0;\n }\n this.infield = false;\n this.nwhite = 0;\n this.quote = 0;\n this.force = false;\n }\n\n parse(): void\n {\n while (this.n < this.buf.length)\n {\n let c: number = this.buf[this.n++];\n if (this.quote && c === this.quote)\n {\n this.quote = 0;\n this.nwhite = 0;\n }\n else if (this.quote)\n {\n this.tok[this.toklen++] = c;\n }\n else if (c === Comma || c === Pipe)\n {\n this.force = true;\n this.pushtok();\n this.force = true;\n }\n else if (this.infield)\n {\n this.tok[this.toklen++] = c;\n if (!this.quote && isWhite(c))\n this.nwhite++;\n else\n this.nwhite = 0;\n }\n else if (isWhite(c))\n continue;\n else if (c === SingleQuote || c === DoubleQuote)\n {\n this.quote = c;\n this.infield = true;\n this.force = true;\n }\n else\n {\n this.infield = true;\n this.tok[this.toklen++] = c;\n this.force = true;\n }\n }\n this.pushtok();\n }\n}\n","const reField = /^\\s*(\"([^\"]*(?:\"\"[^\"]*)*)\"|[^,|]*)\\s*[|,]?/;\nconst reQuote = /^\"/;\nconst reAddOne = /[|,]$/;\n\nexport function csvParseLine(s: string): string[]\n{\n let fields: string[] = [];\n\n s = s.trim();\n let addOne = reAddOne.test(s);\n while (s)\n {\n const match = reField.exec(s);\n if (match)\n {\n let field = match[1];\n if (reQuote.test(field))\n {\n // if quoted string, convert quoted double-quotes to single quote\n field = field.slice(1, -1).replace(/\"\"/g, '\"');\n // and remove optional start and end double quote\n field = field.replace(/^[\"]?/, '').replace(/[\"]?$/, '');\n }\n fields.push(field);\n s = s.substring(match[0].length);\n }\n else\n s = null;\n }\n // Handle trailing separator\n if (addOne)\n fields.push('');\n return fields;\n}\n\n","export * from './dataflow';\n","//\n// DataFlow: mechanism for setting up a data-flow dependency graph that gets computed on demand.\n//\n// Semantics are these:\n// 1. The simplest \"atomic\" DataFlow object just has an id(). The id() is used to check for exact\n// equivalence when determining if any dependents need to be recomputed.\n// 2. A DataFlow object can record that it \"uses\" another DataFlow object. If it does, it can use a set of helper\n// routines to track the state of its dependents. When its dependents are \"stale\" (have changed) the computation\n// needs to be run.\n//\n//\n\nexport interface IDataFlow\n{\n dfid: () => any;\n}\n\ninterface UseItem\n{\n name?: string;\n df: IDataFlow,\n id?: any,\n wasfresh?: boolean,\n}\n\nexport class DataFlow\n{\n usesList: UseItem[];\n inCompute: boolean;\n\n constructor()\n {\n this.usesList = [];\n this.inCompute = false;\n }\n\n // override in subclass\n destroy(): void\n {\n this._destroy();\n }\n\n _destroy(): void\n {\n // Premise is that the 'id' value may contain significant storage\n this.usesList.forEach(ui => { delete ui.id });\n }\n\n // override in subclass\n dfid(): any { return null }\n\n // override in subclass\n compute(): void\n {\n }\n\n uses(df: IDataFlow, name?: string): void\n {\n this.usesList.push({ name: name, df: df });\n }\n\n stale(): boolean\n {\n let isstale = false;\n this.usesList.forEach(ui => {\n ui.wasfresh = ui.id !== ui.df.dfid();\n if (ui.wasfresh) isstale = true;\n });\n return isstale;\n }\n\n wasFresh(name: string): boolean\n {\n let ui: UseItem = this.usesList.find((ui: UseItem) => ui.name === name);\n return ui != null && ui.wasfresh;\n }\n\n remember(): void\n {\n this.usesList.forEach(ui => { ui.id = ui.df.dfid() });\n }\n\n ifcompute(): void\n {\n if (this.stale())\n {\n if (this.inCompute)\n console.log(`DataFlow compute reentrancy: ${this.constructor?.name}`);\n this.inCompute = true;\n this.remember();\n this.compute();\n this.inCompute = false;\n }\n }\n}\n\n// Takes callback that, eventually, returns non-null. The return value is both the value and the id.\n// Once the value returns non-null, the callback is never called again.\nexport class DataFlowCallback extends DataFlow\n{\n _value: any;\n _cb: () => any;\n\n constructor(cb: () => any)\n {\n super();\n this._cb = cb;\n }\n\n dfid(): any { if (!this._value) this._value = this._cb(); return this._value }\n}\n\n// Simple helper that maintains a simple monotonically increasing stamp\nexport class DataFlowStamp extends DataFlow\n{\n _stamp: number;\n\n constructor()\n {\n super();\n this._stamp = 0;\n }\n\n dfid(): any { return this._stamp }\n\n stamp(): void { this._stamp++ }\n}\n","export * from './detail';\n","//\n// FormatDetail will take an expression that specifies a format detail lines.\n// Given an object with a set of integer properties, it will evaluate the expression and produce\n// a result { k: string, n: number, v: string } results for displaying the contents of the object.\n//\n// The formatting string is a statement of the form:\n// =expr\n// Expr can be an arithmetic expression using +-/*()?: as operators and variables are the field\n// names of properties on the object passed in. The special field name Tot represents the\n// total of all properties. The expression may also include double-quoted strings that are\n// passed through (e.g. for use as labels = area\" sqm\")\n//\n\nimport * as Util from '../util/all';\n//import { Util } from '@dra2020/baseclient';\n\nconst reIdentifierOrStringOrNumber = /([a-zA-Z0-9_$][a-zA-Z0-9_$]*)|(['\"])(?:(?=(\\\\?))\\3.)*?\\2/g;\nconst reNumber = /[0-9][0-9]*/;\nconst reParam = /^__\\d+$/;\nconst reString = /^['\"]/;\n\n// Number format: (locale|general|integer|currency).precision\n\nfunction formatNumber(n: number, format: string): string\n{\n if (!format) format = 'locale.0';\n if (isNaN(n)) n = 0;\n let parts = format.split('.');\n let fmt = parts[0];\n let precision = Number(parts[1] || '0');\n // Only have implementation for 'locale'\n return n.toLocaleString(undefined, { maximumFractionDigits: precision, minimumFractionDigits: precision } );\n}\n\nexport interface DetailOptions\n{\n numberFormat?: string,\n}\n\nconst DefaultDetailOptions: DetailOptions = { numberFormat: 'locale.0' };\n\nclass Evaluator\n{\n options: DetailOptions;\n expr: string;\n _error: boolean;\n\n constructor(expr: string, options?: DetailOptions)\n {\n this.options = Util.shallowAssignImmutable(DefaultDetailOptions, options);\n this.expr = expr;\n this._error = false;\n }\n\n get error(): boolean { return this._error }\n\n eval(o: any): any\n {\n this._error = false;\n try\n {\n // Convert property names to valid Javascript to ensure expression safety\n o = Util.shallowCopy(o);\n let namemap: any = {};\n Object.keys(o).forEach((n: string, i: number) => {\n namemap[n] = `__${i}`;\n });\n\n // Extract variable names and values from the object\n let names = Object.keys(o);\n let values = Object.values(o);\n let safeexpr = this.expr;\n let safenames = names.map(n => namemap[n]);\n\n // Replace valid identifiers with safe version\n safeexpr = safeexpr.replace(reIdentifierOrStringOrNumber,\n (match) => {\n if (namemap[match])\n return namemap[match];\n else if (reNumber.test(match))\n return match;\n else if (match === '__format' || reString.test(match))\n return match;\n else\n {\n this._error = true;\n return 'invalid';\n }\n });\n\n // Remove any identifiers that aren't the simple parameters to prevent out-of-sandbox execution\n safeexpr = safeexpr.replace(reIdentifierOrStringOrNumber,\n (match) => {\n let valid = reParam.test(match)\n || match === '__format'\n || reString.test(match)\n || reNumber.test(match);\n if (valid)\n return match;\n else\n {\n this._error = true;\n return 'invalid';\n }\n });\n let __format = (n: number) => { return formatNumber(n, this.options.numberFormat) };\n safenames.push('__format');\n values.push(__format);\n\n // Create a new function that accepts the variables as parameters\n // and evaluates the expression\n const func = new Function(...safenames, `return ${safeexpr};`);\n\n // Call the function with the variable values\n let r = func(...values);\n return typeof r === 'string' ? r : ((typeof r !== 'number' || isNaN(r)) ? 0 : r);\n }\n catch (err)\n {\n this._error = true;\n return 0;\n }\n }\n}\n\ninterface DetailItem\n{\n expr?: string,\n text?: string,\n}\n\nexport interface DetailResult\n{\n n: number, // value before formatting\n v: string, // value\n}\n\nconst reInvalidChars = /[\\[\\]\\\\]/;\nconst reExpr = /^=(.*)$/\n\nexport class FormatDetail\n{\n pattern: string;\n items: DetailItem[];\n _error: boolean;\n options: DetailOptions;\n\n constructor(pattern: string, options?: DetailOptions)\n {\n this.options = Util.shallowAssignImmutable(DefaultDetailOptions, options);\n this._error = false;\n this.pattern = pattern.trim();\n let a = reExpr.exec(pattern);\n if (a && a.length == 2)\n {\n const expr = a[1];\n this.items = [ { expr } ];\n }\n else\n {\n this._error = true;\n this.items = [ { text: 'invalid' } ];\n }\n }\n\n get error(): boolean { return this._error }\n\n static prepare(o: any): any\n {\n if (o && o.Tot === undefined && o.Total === undefined)\n {\n // Add a total field\n let t = 0;\n Object.keys(o).forEach((k: string) => {\n let v: any = o[k];\n if (!isNaN(v) && typeof v === 'number')\n t += v;\n });\n\n o = Util.deepCopy(o);\n o.Tot = t;\n o.Total = t;\n }\n return o;\n }\n\n format(o: any): DetailResult\n {\n if (!o)\n {\n this._error = true;\n return { n: 0, v: '' };\n }\n let n: any = 0;\n let av = this.items.map(di => {\n if (di.text)\n return di.text;\n else\n {\n let e = new Evaluator(di.expr, this.options);\n n = e.eval(o);\n if (! this._error)\n this._error = e.error;\n if (typeof n === 'string')\n return n;\n else\n return formatNumber(n, this.options.numberFormat);\n }\n });\n return { n, v: av.join('') }\n }\n}\n","export * from './emit';\n","export class Emit\n{\n onList: any;\n\n constructor()\n {\n this.onList = {};\n }\n\n on(eventName: string, cb: any): void\n {\n let aCB: any = this.onList[eventName];\n if (aCB === undefined)\n {\n aCB = [];\n this.onList[eventName] = aCB;\n }\n aCB.push(cb);\n }\n\n emit(eventName: string, arg1?: any, arg2?: any, arg3?: any): void\n {\n let aCB: any[] = this.onList[eventName];\n if (aCB !== undefined)\n for (let i: number = 0; i < aCB.length; i++)\n (aCB[i])(arg1, arg2, arg3);\n }\n\n off(eventName: string, cb: any): void\n {\n let aCB: any = this.onList[eventName];\n if (aCB !== undefined)\n for (let i: number = 0; i < aCB.length; i++)\n if (aCB[i] === cb)\n {\n aCB.splice(i, 1);\n break;\n }\n }\n}\n","export * from './filterexpr';\n","import * as Util from '../util/all';\n\nconst Space = 32;\nconst Tab = 9;\nconst Newline = 10;\nconst CR = 13;\nconst OpenParen = 40;\nconst CloseParen = 41;\nconst Colon = 58;\nconst SingleQuote = 39;\nconst DoubleQuote = 34;\nconst BackSlash = 92;\nconst Exclamation = 33;\nconst LessThan = 60;\nconst Equal = 61;\nconst GreaterThan = 62;\nconst LowerA = 97;\nconst UpperA = 65;\nconst LowerN = 110;\nconst UpperN = 78;\nconst LowerD = 100;\nconst UpperD = 68;\nconst LowerO = 111;\nconst UpperO = 79;\nconst LowerT = 97;\nconst UpperT = 65;\nconst LowerR = 114;\nconst UpperR = 82;\n\nfunction isWhite(c: number): boolean\n{\n return c === Space || c === Newline || c === Tab || c == CR;\n}\n\nfunction toString(a: any): string\n{\n if (typeof a === 'object' && a && typeof a.value === 'string')\n return a.value;\n return String(a);\n}\n\nenum TokType\n{\n Text,\n OpenParen,\n CloseParen,\n Not,\n And,\n Or,\n Colon,\n GreaterThan,\n GreaterThanEqual,\n Equal,\n LessThan,\n LessThanEqual,\n NotEqual,\n}\n\nfunction tokToText(tt: TokType): string\n{\n switch (tt)\n {\n case TokType.Text: return 'text';\n case TokType.OpenParen: return '(';\n case TokType.CloseParen: return ')';\n case TokType.Not: return 'not';\n case TokType.And: return 'and';\n case TokType.Or: return 'or';\n case TokType.Colon: return ':';\n case TokType.GreaterThan: return '>';\n case TokType.GreaterThanEqual: return '>=';\n case TokType.Equal: return '=';\n case TokType.LessThan: return '<';\n case TokType.LessThanEqual: return '<=';\n case TokType.NotEqual: return '!=';\n }\n}\n\nfunction tokIsUnary(tt: TokType): boolean\n{\n switch (tt)\n {\n case TokType.Text: return false;\n case TokType.OpenParen: return false;\n case TokType.CloseParen: return false;\n case TokType.Not: return true;\n case TokType.And: return false;\n case TokType.Or: return false;\n case TokType.Colon: return false;\n case TokType.GreaterThan: return false;\n case TokType.GreaterThanEqual: return false;\n case TokType.Equal: return false;\n case TokType.LessThan: return false;\n case TokType.LessThanEqual: return false;\n case TokType.NotEqual: return false;\n }\n}\n\nfunction tokIsArithmetic(tt: TokType): boolean\n{\n switch (tt)\n {\n case TokType.Text: return false;\n case TokType.OpenParen: return false;\n case TokType.CloseParen: return false;\n case TokType.Not: return false;\n case TokType.And: return false;\n case TokType.Or: return false;\n case TokType.Colon: return false;\n // Nominally binary, but written as \"prop: < 3\" so appears as unary operator where test is comparative to prop value\n case TokType.GreaterThan: return true;\n case TokType.GreaterThanEqual: return true;\n case TokType.Equal: return true;\n case TokType.LessThan: return true;\n case TokType.LessThanEqual: return true;\n case TokType.NotEqual: return true;\n }\n}\n\nfunction tokIsBinary(tt: TokType): boolean\n{\n switch (tt)\n {\n case TokType.Text: return false;\n case TokType.OpenParen: return false;\n case TokType.CloseParen: return false;\n case TokType.Not: return false;\n case TokType.And: return true;\n case TokType.Or: return true;\n case TokType.Colon: return true;\n // Nominally binary, but written as \"prop: < 3\" so appears as unary operator where test is comparative to prop value\n case TokType.GreaterThan: return false;\n case TokType.GreaterThanEqual: return false;\n case TokType.Equal: return false;\n case TokType.LessThan: return false;\n case TokType.LessThanEqual: return false;\n case TokType.NotEqual: return false;\n }\n}\n\ninterface Token\n{\n tt: TokType;\n text?: string;\n}\n\ninterface Clause\n{\n op: Token;\n operand1?: Clause;\n operand2?: Clause;\n}\n\nenum ParseState\n{\n Start,\n InString,\n Ended\n}\n\nclass Lexer\n{\n coder: Util.Coder;\n tokens: Token[];\n buf: Uint8Array;\n tok: Uint8Array;\n toklen: number;\n n: number;\n\n constructor(coder: Util.Coder, expr?: string)\n {\n this.coder = coder;\n if (expr)\n this.set(expr);\n }\n\n set(expr: string): void\n {\n this.tokens = [];\n this.buf = Util.s2u8(this.coder, expr);\n this.tok = new Uint8Array(new ArrayBuffer(this.buf.length));\n this.toklen = 0;\n this.n = 0;\n this.lex();\n }\n\n pushString(s: string): void\n {\n this.tokens.push({ tt: TokType.Text, text: s });\n }\n\n pushText(bForce: boolean = false): void\n {\n if (this.toklen > 0)\n {\n let text = Util.u82s(this.coder, this.tok, 0, this.toklen).toLowerCase();\n this.toklen = 0;\n if (!bForce && text === 'or')\n this.tokens.push({ tt: TokType.Or });\n else if (!bForce && text === 'and')\n this.tokens.push({ tt: TokType.And });\n else if (!bForce && text === 'not')\n this.tokens.push({ tt: TokType.Not });\n else\n this.pushString(text);\n }\n }\n\n pushSpecial(tt: TokType): void\n {\n this.pushText();\n this.tokens.push({ tt: tt });\n }\n\n lex(): void\n {\n while (this.n < this.buf.length)\n {\n let c: number = this.buf[this.n++];\n if (c == Colon)\n this.pushSpecial(TokType.Colon);\n else if (c == OpenParen)\n this.pushSpecial(TokType.OpenParen);\n else if (c == CloseParen)\n this.pushSpecial(TokType.CloseParen);\n else if (c == SingleQuote || c == DoubleQuote)\n {\n this.pushText();\n while (this.n < this.buf.length)\n {\n let cc = this.buf[this.n++];\n if (cc === c)\n break;\n else\n this.tok[this.toklen++] = cc;\n }\n this.pushText(true);\n }\n else if (isWhite(c))\n this.pushText();\n else if (c === GreaterThan)\n {\n if (this.n < this.buf.length && this.buf[this.n] === Equal)\n {\n this.n++;\n this.pushSpecial(TokType.GreaterThanEqual)\n }\n else\n this.pushSpecial(TokType.GreaterThan)\n }\n else if (c === LessThan)\n {\n if (this.n < this.buf.length && this.buf[this.n] === Equal)\n {\n this.n++;\n this.pushSpecial(TokType.LessThanEqual)\n }\n else\n this.pushSpecial(TokType.LessThan)\n }\n else if (c === Equal)\n this.pushSpecial(TokType.Equal)\n else if (c === Exclamation)\n {\n if (this.n < this.buf.length && this.buf[this.n] === Equal)\n {\n this.n++;\n this.pushSpecial(TokType.NotEqual)\n }\n else\n this.tok[this.toklen++] = c;\n }\n else\n this.tok[this.toklen++] = c;\n }\n this.pushText();\n }\n\n}\n\nclass Parser\n{\n clauses: Clause[];\n\n constructor() { }\n\n get clause(): Clause { return this.clauses && this.clauses.length == 1 ? this.clauses[0] : undefined }\n\n initFromTokens(tokens: Token[])\n {\n this.clausesFromTokens(tokens);\n }\n\n initFromClauses(clauses: Clause[])\n {\n this.clauses = clauses;\n this.combineParenthetical();\n this.convertOpToText();\n this.combineArithmetic();\n this.convertOpToText();\n this.combineBinary(TokType.Colon);\n this.convertOpToText();\n this.combineUnary();\n this.convertOpToText();\n this.combineBinary(TokType.And);\n this.convertOpToText();\n this.combineBinary(TokType.Or);\n this.convertOpToText();\n this.combineImplicitAnd();\n }\n\n convertOpToText(): void\n {\n // walk through and convert naked ops to simple text matches (so \"state: or\" matches oregon rather than being invalid)\n this.clauses.forEach((c, i) => {\n let bad = false;\n switch (c.op.tt)\n {\n case TokType.And:\n case TokType.Or:\n case TokType.Colon:\n if (c.operand1 == null)\n {\n if (i == 0 || i == this.clauses.length-1)\n bad = true;\n else\n {\n let cBefore = this.clauses[i-1];\n if (cBefore.operand1 == null && tokIsBinary(cBefore.op.tt))\n bad = true;\n }\n }\n break;\n case TokType.Not:\n case TokType.GreaterThan:\n case TokType.LessThan:\n case TokType.GreaterThanEqual:\n case TokType.LessThanEqual:\n case TokType.Equal:\n case TokType.NotEqual:\n if (c.operand1 == null && i == this.clauses.length-1)\n bad = true;\n break;\n }\n if (bad)\n c.op = { tt: TokType.Text, text: tokToText(c.op.tt) };\n });\n }\n\n combineParenthetical(): void\n {\n for (let i: number = 0; i < this.clauses.length; i++)\n {\n let c = this.clauses[i];\n if (c.op.tt === TokType.OpenParen)\n {\n let depth = 1;\n let j = i+1;\n for (; j < this.clauses.length; j++)\n {\n let c1 = this.clauses[j];\n if (c1.op.tt === TokType.OpenParen)\n depth++;\n else if (c1.op.tt === TokType.CloseParen)\n depth--;\n if (depth == 0)\n break;\n }\n // Pull out stuff inside parens\n let clauses = this.clauses.splice(i+1, j-(i+1));\n // Parse it\n let parser = new Parser();\n parser.initFromClauses(clauses);\n // Insert it back, deleting parens along the way\n if (parser.clause)\n this.clauses.splice(i, 2, parser.clause);\n else\n this.clauses.splice(i, 2);\n }\n else if (c.op.tt === TokType.CloseParen) // malformed - extra paren\n {\n this.clauses.splice(i, 1);\n i--;\n }\n }\n }\n\n combineArithmetic(): void\n {\n // go backwards to handle not not\n for (let i: number = this.clauses.length-1; i >= 0; i--)\n {\n let c = this.clauses[i];\n if (tokIsArithmetic(c.op.tt))\n {\n let argclause = (i < this.clauses.length-1) ? { op: c.op, operand1: this.clauses[i+1] } : undefined;\n if (argclause)\n this.clauses.splice(i, 2, argclause);\n else\n this.clauses.splice(i, 1);\n }\n }\n }\n\n combineUnary(): void\n {\n // go backwards to handle not not\n for (let i: number = this.clauses.length-1; i >= 0; i--)\n {\n let c = this.clauses[i];\n if (tokIsUnary(c.op.tt))\n {\n let notclause = (i < this.clauses.length-1) ? { op: c.op, operand1: this.clauses[i+1] } : undefined;\n if (notclause)\n this.clauses.splice(i, 2, notclause);\n else\n this.clauses.splice(i, 1);\n }\n }\n }\n\n combineColon(): void\n {\n for (let i: number = 0; i < this.clauses.length; i++)\n {\n let c = this.clauses[i];\n\n if (c.op.tt === TokType.Colon && c.operand1 == null)\n {\n if (i === 0) // malformed, but ignore\n this.clauses.splice(i, 1);\n else\n {\n c = { op: c.op, operand1: this.clauses[i-1], operand2: null };\n this.clauses.splice(i-1, 2, c);\n i--;\n }\n }\n }\n }\n\n combineBinary(tt: TokType): void\n {\n for (let i: number = 0; i < this.clauses.length; i++)\n {\n let c = this.clauses[i];\n\n if (c.op.tt === tt)\n if (c.operand1 == null)\n {\n if (i === 0 || i === this.clauses.length-1) // malformed, but ignore\n this.clauses.splice(i, 1);\n else\n {\n c = { op: c.op, operand1: this.clauses[i-1], operand2: this.clauses[i+1] };\n this.clauses.splice(i-1, 3, c);\n i--;\n }\n }\n else if (c.operand2 == null) // just colon where name binds earlier in combineColon\n {\n if (i === this.clauses.length-1) // malformed, but ignore\n this.clauses.splice(i, 1);\n else\n {\n c.operand2 = this.clauses[i+1];\n this.clauses.splice(i+1, 1);\n }\n }\n }\n }\n\n combineImplicitAnd(): void\n {\n while (this.clauses.length > 1)\n {\n let c: Clause = { op: { tt: TokType.And }, operand1: this.clauses[0], operand2: this.clauses[1] };\n this.clauses.splice(0, 2, c);\n }\n }\n\n clausesFromTokens(tokens: Token[]): void\n {\n let clauses: Clause[] = [];\n // combine sequential text tokens into AND clauses, push rest as distinct clauses\n for (let i: number = 0; i < tokens.length; i++)\n {\n let t = tokens[i];\n if (t.tt === TokType.Text)\n {\n let c: Clause = { op: t };\n let j = i+1;\n for (; j < tokens.length; j++)\n {\n let jt = tokens[j];\n if (jt.tt === TokType.Text)\n c = { op: { tt: TokType.And }, operand1: c, operand2: { op: jt } };\n else\n break;\n }\n clauses.push(c);\n i = j-1;\n }\n else\n clauses.push({ op: t });\n }\n this.initFromClauses(clauses);\n }\n}\n\nfunction wordyDate(s: string): string\n{\n let d = new Date(s);\n let now = new Date();\n let yyyyNow = now.getFullYear();\n let mmmNow = now.getMonth();\n let ddNow = now.getDate();\n\n let mmm = d.getMonth();\n let dd = d.getDate();\n let yyyy = d.getFullYear();\n\n s = Util.prettyDate(d);\n if (yyyyNow === yyyy && mmmNow === mmm && ddNow === dd)\n s = 'today ' + s;\n\n // If I get ambitious, could add \"yesterday\", \"this week\", \"last week\", \"this month\", \"last month\", \"this year\"\n // But this is close enough to match what gets displayed by \"prettyDate\" while also letting selection by month year\n\n return s;\n}\n\nfunction clauseEqual(c1: Clause, c2: Clause): boolean\n{\n if (c1 == null && c2 == null) return true;\n if (c1 == null || c2 == null) return false;\n if (c1.op.tt === c2.op.tt)\n {\n if (c1.op.tt === TokType.Text)\n return c1.op.text === c2.op.text;\n else\n return clauseEqual(c1.operand1, c2.operand1) && clauseEqual(c1.operand2, c2.operand2);\n }\n else\n return false;\n}\n\nfunction containsClause(c: Clause, s: Clause): boolean\n{\n if (clauseEqual(c, s))\n return true;\n if (c == null || s == null) return false;\n return containsClause(c.operand1, s) || containsClause(c.operand2, s);\n}\n\nfunction removeClause(c: Clause, s: Clause): Clause\n{\n if (c == null || (c.op.tt === TokType.Text && c.op.tt !== s.op.tt))\n return c;\n else if (clauseEqual(c, s))\n return null;\n else\n {\n c.operand1 = removeClause(c.operand1, s);\n c.operand2 = removeClause(c.operand2, s);\n if ((c.op.tt === TokType.And || c.op.tt === TokType.Or) && (c.operand1 == null || c.operand2 == null))\n return c.operand1 || c.operand2;\n return c;\n }\n}\n\nexport class FilterExpr\n{\n lexer: Lexer;\n parser: Parser;\n\n constructor(coder: Util.Coder, expr?: string)\n {\n this.lexer = new Lexer(coder);\n this.parser = new Parser;\n if (expr) this.set(expr);\n }\n\n set(expr: string): void\n {\n this.lexer.set(expr);\n this.parser.initFromTokens(this.lexer.tokens);\n }\n\n test(o: any, types?: any): boolean\n {\n return this.testClause(o, types, this.parser.clause);\n }\n\n asString(): string\n {\n return this.asStringClause(this.parser.clause);\n }\n\n containsClause(expr: string): boolean\n {\n let sub = new FilterExpr(this.lexer.coder, expr);\n return containsClause(this.parser.clause, sub.parser.clause);\n }\n\n addClause(expr: string): void\n {\n let sub = new FilterExpr(this.lexer.coder, expr);\n if (! containsClause(this.parser.clause, sub.parser.clause))\n {\n if (this.parser.clause)\n this.parser.clauses = [ { op: { tt: TokType.And }, operand1: this.parser.clause, operand2: sub.parser.clause } ];\n else\n this.parser.clauses = [ sub.parser.clause ];\n }\n }\n\n removeClause(expr: string): void\n {\n if (this.containsClause(expr))\n {\n let sub = new FilterExpr(this.lexer.coder, expr);\n this.parser.clauses = [ removeClause(this.parser.clause, sub.parser.clause) ];\n }\n }\n\n asStringClause(clause: Clause): string\n {\n if (clause == null) return '';\n if (clause.op.tt == TokType.Text)\n {\n this.lexer.set(clause.op.text);\n if (this.lexer.tokens.length == 1 && this.lexer.tokens[0].tt === TokType.Text)\n return clause.op.text;\n else\n return `'${clause.op.text}'`;\n }\n let a: string[] = [];\n if (clause !== this.parser.clause)\n a.push('(');\n switch (clause.op.tt)\n {\n case TokType.And:\n a.push(this.asStringClause(clause.operand1));\n a.push('and');\n a.push(this.asStringClause(clause.operand2));\n break;\n case TokType.Or:\n a.push(this.asStringClause(clause.operand1));\n a.push('or');\n a.push(this.asStringClause(clause.operand2));\n break;\n case TokType.Not:\n a.push('not');\n a.push(this.asStringClause(clause.operand1));\n break;\n case TokType.Colon:\n a.push(`${this.asStringClause(clause.operand1)}:`);\n a.push(this.asStringClause(clause.operand2));\n break;\n case TokType.Equal:\n case TokType.LessThan:\n case TokType.GreaterThan:\n case TokType.LessThanEqual:\n case TokType.GreaterThanEqual:\n case TokType.NotEqual:\n a.push(tokToText(clause.op.tt));\n a.push(this.asStringClause(clause.operand1));\n break;\n default:\n throw 'Unexpected token in asString';\n }\n if (clause !== this.parser.clause)\n a.push(')');\n return a.join(' ');\n }\n\n testClause(o: any, types: any, clause: Clause, prop?: string, relation?: TokType): boolean\n {\n if (clause == null) return true;\n switch (clause.op.tt)\n {\n case TokType.Text:\n for (let p in o) if (o.hasOwnProperty(p) && (prop == null || p.toLowerCase() === prop))\n {\n let s = toString(o[p]);\n if (s)\n {\n let t = types ? types[p] : undefined;\n if (t === 'skip')\n continue;\n if (t && t === 'date')\n s = wordyDate(s);\n s = s.toLowerCase();\n if (relation === undefined)\n {\n if (s.indexOf(clause.op.text) >= 0)\n return true;\n }\n else\n {\n let op2: any = isNaN(Number(clause.op.text)) ? clause.op.text : Number(clause.op.text);\n let op1: any = typeof op2 === 'number' ? Number(s) : s;\n switch (relation)\n {\n case TokType.Equal: return op1 === op2;\n case TokType.LessThan: return op1 < op2;\n case TokType.LessThanEqual: return op1 <= op2;\n case TokType.GreaterThanEqual: return op1 >= op2;\n case TokType.GreaterThan: return op1 > op2;\n case TokType.NotEqual: return op1 !== op2;\n }\n }\n }\n }\n return false;\n\n case TokType.Colon:\n if (clause.operand1 && clause.operand1.op.tt === TokType.Text)\n prop = clause.operand1.op.text;\n return this.testClause(o, types, clause.operand2, prop);\n \n case TokType.Not:\n return ! this.testClause(o, types, clause.operand1, prop);\n\n case TokType.Equal:\n case TokType.LessThan:\n case TokType.GreaterThan:\n case TokType.LessThanEqual:\n case TokType.GreaterThanEqual:\n case TokType.NotEqual:\n return this.testClause(o, types, clause.operand1, prop, clause.op.tt);\n\n case TokType.And:\n return this.testClause(o, types, clause.operand1, prop) && this.testClause(o, types, clause.operand2, prop);\n\n case TokType.Or:\n return this.testClause(o, types, clause.operand1, prop) || this.testClause(o, types, clause.operand2, prop);\n\n default:\n throw 'Unexpected token in clause';\n }\n // NOTREACHED\n }\n}\n","export * from './fsm';\n","// Shared libraries\nimport * as Util from '../util/all';\n\n// States (note these are no longer bit flags - most uses create custom values incrementally from CUSTOM1)\nexport const FSM_STARTING: number = 0;\nexport const FSM_PENDING: number = 1<<0;\nexport const FSM_DONE: number = 1<<1;\nexport const FSM_ERROR: number = 1<<2;\nexport const FSM_CANCEL: number = 5;\nexport const FSM_RELEASED: number = 1<<3;\nexport const FSM_CUSTOM1: number = 1<<4;\nexport const FSM_CUSTOM2: number = 1<<5;\nexport const FSM_CUSTOM3: number = 1<<6;\nexport const FSM_CUSTOM4: number = 1<<7;\nexport const FSM_CUSTOM5: number = 1<<8;\nexport const FSM_CUSTOM6: number = 1<<9;\nexport const FSM_CUSTOM7: number = 1<<10;\nexport const FSM_CUSTOM8: number = 1<<11;\nexport const FSM_CUSTOM9: number = 1<<12;\n\n// polyfill\nlet doLater: any = global && global.setImmediate ? setImmediate : (cb: any) => { setTimeout(cb, 0) };\n\nfunction FsmDone(s: number): boolean\n{\n return (s === FSM_DONE || s === FSM_ERROR || s === FSM_RELEASED || s === FSM_CANCEL);\n}\n\nfunction FsmStateToString(state: number): string\n{\n let a: string[] = [];\n\n if (state === FSM_STARTING)\n return 'starting';\n else\n {\n if (state === FSM_PENDING) a.push('pending');\n if (state === FSM_DONE) a.push('done');\n if (state === FSM_ERROR) a.push('error');\n if (state === FSM_RELEASED) a.push('released');\n if (state === FSM_CUSTOM1) a.push('custom1');\n if (state === FSM_CUSTOM2) a.push('custom2');\n if (state === FSM_CUSTOM3) a.push('custom3');\n if (state === FSM_CUSTOM4) a.push('custom4');\n if (state === FSM_CUSTOM5) a.push('custom5');\n if (state === FSM_CUSTOM6) a.push('custom6');\n if (state === FSM_CUSTOM7) a.push('custom7');\n if (state === FSM_CUSTOM8) a.push('custom8');\n if (state === FSM_CUSTOM9) a.push('custom9');\n return a.join('|');\n }\n}\n\nexport type FsmIndex = Set<Fsm>;\n\nexport class FsmManager\n{\n theId: number;\n theEpoch: number;\n bTickSet: boolean;\n theTickList: FsmIndex;\n theBusyLoopCount: number;\n\n constructor()\n {\n this.theId = 0;\n this.theEpoch = 0;\n this.bTickSet = false;\n this.theTickList = new Set<Fsm>();\n this.theBusyLoopCount = 0;\n this.doTick = this.doTick.bind(this);\n }\n\n forceTick(fsm: Fsm): void\n {\n this.theTickList.add(fsm);\n if (! this.bTickSet)\n {\n this.bTickSet = true;\n doLater(this.doTick);\n }\n }\n\n doTick(): void\n {\n this.bTickSet = false;\n let nLoops = 0;\n\n while (nLoops < 1 && this.theTickList.size > 0)\n {\n nLoops++;\n let thisTickList = this.theTickList;\n this.theTickList = new Set<Fsm>();\n\n thisTickList.forEach((f: Fsm) => f.tick());\n }\n\n if (this.theTickList.size == 0)\n this.theBusyLoopCount = 0;\n else\n this.theBusyLoopCount++;\n\n this.theEpoch++;\n }\n}\n\nexport interface FsmEnvironment\n{\n fsmManager: FsmManager;\n}\n\nexport class Fsm\n{\n id: number;\n state: number;\n dependentError: boolean;\n epochDone: number;\n _env: FsmEnvironment;\n _waitOn: FsmIndex;\n _waitedOn: FsmIndex;\n\n constructor(env: FsmEnvironment)\n {\n this._env = env;\n this.id = this.manager.theId++;\n this.state = FSM_STARTING;\n this.dependentError = false;\n this.epochDone = -1;\n this._waitOn = new Set<Fsm>();\n this._waitedOn = new Set<Fsm>();\n this.manager.forceTick(this);\n }\n\n get env(): FsmEnvironment { return this._env; }\n get manager(): FsmManager { return this.env.fsmManager; }\n\n get done(): boolean { return FsmDone(this.state) }\n\n get ready(): boolean { return !this.done && this.nWaitOn == 0 }\n\n get iserror(): boolean { return this.state === FSM_ERROR || this.state === FSM_CANCEL }\n\n get isDependentError(): boolean { return this.dependentError }\n\n // Override if you need to do more than marking complete\n cancel(): void { this.setState(FSM_CANCEL) }\n\n setDependentError(): void { this.dependentError = true }\n\n clearDependentError(): void { this.dependentError = false }\n\n get ticked(): boolean { return this.done && this.manager.theEpoch > this.epochDone }\n\n get nWaitOn(): number { return this._waitOn.size }\n\n get nWaitedOn(): number { return this._waitedOn.size }\n\n waitOn(fsm: Fsm | Fsm[]): Fsm\n {\n if (fsm == null)\n return this;\n else if (Array.isArray(fsm))\n {\n fsm.forEach((f: Fsm) => this.waitOn(f));\n }\n else\n {\n if (fsm.done)\n {\n // If dependency is already done, don't add to waitOn list but ensure that\n // this Fsm gets ticked during next epoch. This is because the dependent tick\n // only happens when the dependency state is changed.\n this.manager.forceTick(this);\n if (fsm.iserror)\n this.setDependentError();\n }\n else\n {\n this._waitOn.add(fsm);\n fsm._waitedOn.add(this);\n }\n }\n return this;\n }\n\n setState(state: number): void\n {\n this.state = state;\n if (this.done)\n {\n // Loop because completion might add more to wait list\n while (this.nWaitedOn)\n {\n let waitedOn = this._waitedOn;\n this._waitedOn = new Set<Fsm>();\n waitedOn.forEach((f: Fsm) => { f._completed(this); this.manager.forceTick(f) });\n }\n\n this.epochDone = this.manager.theEpoch;\n }\n this.manager.forceTick(this);\n }\n\n // Can override if need to do more here\n end(state: number = FSM_DONE): void\n {\n this.setState(state);\n }\n\n // Override if subclass needs to respond to individual items completing rather than waiting\n // in tick. Useful to avoid O(n^2) if waiting on lots of items and not wanting to do a linear\n // scan for completed FSMs. Or to not require separate bookkeeping for list of dependents.\n waitOnCompleted(f: Fsm): void { }\n\n _completed(f: Fsm): void\n {\n if (f.iserror) this.setDependentError();\n if (f.done && this._waitOn.has(f))\n {\n this._waitOn.delete(f);\n this.waitOnCompleted(f);\n }\n }\n\n tick(): void\n {\n }\n}\n\n// Launches callback provided when the associated Fsm (or Fsm array) completes.\nexport class FsmOnDone extends Fsm\n{\n cb: any;\n fsm: Fsm | Fsm[];\n\n constructor(env: FsmEnvironment, fsm: Fsm | Fsm[], cb: any)\n {\n super(env);\n this.waitOn(fsm);\n this.fsm = fsm;\n this.cb = cb;\n }\n\n tick(): void\n {\n if (this.ready && this.state == FSM_STARTING)\n {\n this.setState(this.isDependentError ? FSM_ERROR : FSM_DONE);\n this.cb(this.fsm);\n }\n }\n}\n\nexport class FsmSleep extends Fsm\n{\n delay: number;\n timeoutHandle: any;\n\n constructor(env: FsmEnvironment, delay: number)\n {\n super(env);\n this.delay = delay;\n }\n\n tick(): void\n {\n // This allows canceling by simply setting state to done\n if (this.done && this.timeoutHandle !== undefined)\n {\n clearTimeout(this.timeoutHandle);\n delete this.timeoutHandle;\n }\n else if (this.ready && this.state === FSM_STARTING)\n {\n this.setState(FSM_PENDING);\n this.timeoutHandle = setTimeout(() => {\n delete this.timeoutHandle;\n this.setState(FSM_DONE)\n }, this.delay);\n }\n }\n}\n\nexport type SerializerIndex = { [key: string]: Fsm };\n\nexport class FsmSerializer extends Fsm\n{\n index: SerializerIndex;\n\n constructor(env: FsmEnvironment)\n {\n super(env);\n this.index = {};\n }\n\n serialize(id: string, fsm?: Fsm): Fsm\n {\n let prev = this.index[id];\n if (prev && !fsm) return prev;\n if (prev !== undefined)\n fsm.waitOn(prev);\n this.index[id] = fsm;\n if (this.done)\n this.setState(FSM_STARTING);\n this.waitOn(fsm);\n return prev;\n }\n\n tick(): void\n {\n // If fully quiescent, take advantage to clear the waiting cache.\n if (this.ready && this.state == FSM_STARTING)\n {\n this.index = {};\n this.setState(FSM_DONE);\n }\n }\n}\n\n// The FsmTracker class provides a mechanism for serializing a set of finite state\n// machines identified by a consistent unique identifier. A finite state machine is\n// \"tracked\" until completion. If any other finite state machine calls \"maybeWait\"\n// while any other are tracked and pending, that FSM will wait for the others to\n// complete.\n//\n\nclass FsmTrackerWrap extends Fsm\n{\n index: FsmTracker;\n uid: string;\n fsm: Fsm;\n\n constructor(env: FsmEnvironment, index: FsmTracker, uid: string, fsm: Fsm)\n {\n super(env);\n this.index = index;\n this.uid = uid;\n this.fsm = fsm;\n index._track(uid, fsm);\n this.waitOn(fsm);\n }\n\n tick(): void\n {\n if (this.ready && this.state == FSM_STARTING)\n {\n this.index._untrack(this.uid, this.fsm);\n this.setState(FSM_DONE);\n }\n }\n}\n\ntype FsmArrayMap = { [key: string]: Fsm[] };\n\nexport class FsmTracker\n{\n env: FsmEnvironment;\n map: FsmArrayMap;\n\n constructor(env: FsmEnvironment)\n {\n this.env = env;\n this.map = {};\n }\n\n _track(uid: string, fsm: Fsm): void\n {\n let a = this.map[uid];\n if (a === undefined)\n {\n a = [];\n this.map[uid] = a;\n }\n a.push(fsm);\n }\n\n _untrack(uid: string, fsm: Fsm): void\n {\n let a = this.map[uid];\n if (a)\n {\n for (let i: number = 0; i < a.length; i++)\n if (a[i] === fsm)\n {\n if (a.length == 1)\n delete this.map[uid];\n else\n a.splice(i, 1);\n break;\n }\n }\n }\n\n track(uid: string, fsm: Fsm): Fsm\n {\n return new FsmTrackerWrap(this.env, this, uid, fsm);\n }\n\n maybeWait(uid: string, fsm: Fsm): void\n {\n fsm.waitOn(this.map[uid]);\n }\n}\n\n\n// FsmLoop: repeat the Fsm passed in (resetting to STARTING state after finished) at some minimum interval.\n// Assumes that the Fsm can be correctly reset and restarted by setting the state.\n//\n\nexport interface LoopOptions\n{\n minRepeatInterval?: number;\n exitOnError?: boolean;\n}\n\nexport const DefaultLoopOptions = { minRepeatInterval: 0, exitOnError: true };\n\nconst FSM_DELAYING = FSM_CUSTOM1;\n\nexport class FsmLoop extends Fsm\n{\n fsm: Fsm;\n options: LoopOptions;\n elapsed: Util.Elapsed;\n\n constructor(env: FsmEnvironment, fsm: Fsm, options?: LoopOptions)\n {\n super(env);\n this.fsm = fsm;\n this.elapsed = new Util.Elapsed();\n this.options = Util.shallowAssignImmutable(DefaultLoopOptions, options);\n this.waitOn(fsm);\n }\n\n tick(): void\n {\n if (this.ready && this.isDependentError)\n {\n if (this.options.exitOnError)\n this.setState(FSM_ERROR);\n else\n this.clearDependentError();\n // Fall through\n }\n\n if (this.ready)\n {\n switch (this.state)\n {\n case FSM_STARTING:\n let msLeft = this.options.minRepeatInterval - this.elapsed.ms();\n if (msLeft > 0)\n this.waitOn(new FsmSleep(this.env, msLeft));\n this.setState(FSM_DELAYING);\n break;\n\n case FSM_DELAYING:\n this.elapsed.start();\n this.fsm.setState(FSM_STARTING);\n this.waitOn(this.fsm);\n this.setState(FSM_STARTING);\n break;\n }\n }\n }\n}\n\nexport interface ISet\n{\n test: (o: any) => boolean;\n reset: () => void;\n}\n\nexport class FsmArray extends Fsm\n{\n a: any[];\n iset: ISet;\n\n constructor(env: FsmEnvironment, iset?: ISet)\n {\n super(env);\n this.iset = iset;\n this.a = [];\n }\n\n push(o: any): void\n {\n if (this.iset == null || !this.iset.test(o))\n {\n if (! this.done) this.setState(FSM_DONE);\n this.a.push(o);\n }\n }\n\n concat(a: any[]): void\n {\n if (a)\n {\n for (let i: number = 0; i < a.length; i++)\n this.push(a[i]);\n }\n }\n\n splice(i?: number, n?: number): void\n {\n if (i === undefined)\n this.reset();\n else\n {\n this.a.splice(i, n);\n if (this.a.length == 0)\n this.reset();\n }\n }\n\n reset(): void\n {\n this.a = [];\n if (this.iset) this.iset.reset();\n this.setState(FSM_STARTING);\n }\n}\n","export * from './geo';\nexport * from './vfeature';\nexport * from './flexname';\nexport * from './multiblockmapping';\nexport * from './ensurecentroid';\n","import * as geojson from 'geojson';\nimport * as Util from '../util/all'\nimport * as Poly from '../poly/all'\nimport * as G from './geo'\n\nfunction oneNumberOf(f: G.GeoFeature, props: string[]): number\n{\n for (let i = 0; i < props.length; i++)\n if (f.properties[props[i]])\n return Number(f.properties[props[i]]);\n return 0;\n}\n\nexport function ensureCentroidInFeature(f: G.GeoFeature): void\n{\n if (f.geometry && f.properties.labelx === undefined)\n {\n f.properties.labelx = oneNumberOf(f, ['INTPTLON30', 'INTPTLON20','INTPTLON10','INTPTLON']);\n f.properties.labely = oneNumberOf(f, ['INTPTLAT30', 'INTPTLAT20','INTPTLAT10','INTPTLAT']);\n if (f.properties.labelx && f.properties.labely)\n if (! Poly.polyContainsPoint(f, f.properties.labelx, f.properties.labely))\n {\n delete f.properties.labelx;\n delete f.properties.labely;\n }\n\n // If internal point not specified, compute it\n if (!f.properties.labelx || !f.properties.labely)\n {\n let result = Poly.polyLabel(f);\n f.properties.labelx = Util.precisionRound(result.x, 6);\n f.properties.labely = Util.precisionRound(result.y, 6);\n }\n\n delete f.properties.INTPTLAT30;\n delete f.properties.INTPTLON30;\n delete f.properties.INTPTLAT20;\n delete f.properties.INTPTLON20;\n delete f.properties.INTPTLAT10;\n delete f.properties.INTPTLON10;\n delete f.properties.INTPTLAT;\n delete f.properties.INTPTLON;\n }\n}\n\nexport function ensureCentroidInCollection(col: G.GeoFeatureCollection): void\n{\n col.features.forEach(ensureCentroidInFeature);\n}\n","export function flexName(f: any): string\n{\n if (!f || !f.properties) return null;\n\n let oneOf = [ 'name', 'entry_name', 'Name', 'NAME',\n 'NAMELSAD', 'namelsad',\n 'NAME10', 'name10',\n 'NAMELSAD10', 'namelsad10',\n 'NAME20', 'name20',\n 'NAMELSAD20', 'namelsad20',\n 'NAME30', 'name30',\n 'NAMELSAD30', 'namelsad30',\n ];\n\n for (let i = 0; i < oneOf.length; i++)\n if (f.properties[oneOf[i]] !== undefined)\n {\n let name: string = f.properties[oneOf[i]];\n if (name.startsWith('Block Group') && f.properties['GEOID10'] !== undefined)\n return String(f.properties['GEOID10']).substr(2);\n name = name.replace('Voting Districts', '');\n name = name.replace('Precinct', '');\n return name.replace('Voting District', '').trim();\n }\n\n return `${f.properties.id}`;\n}\n","import * as geojson from 'geojson';\nimport * as Util from '../util/all'\nimport * as Poly from '../poly/all'\n\nexport type GeoProperties = geojson.GeoJsonProperties;\nexport type GeoFeature = geojson.Feature;\nexport type GeoFeatureArray = GeoFeature[];\nexport type GeoFeatureCollection = geojson.FeatureCollection;\nexport type GeoCentroidMap = { [geoid: string]: { x: number, y: number } };\nexport type HideMap = { [id: string]: boolean };\n\n// Tracing/debugging aid\nlet metrics: { [action: string]: { count: number, total: number } } = {};\nconst MinRecordTotal = 500;\n\nfunction record(action: string, total: number): void\n{\n if (total > MinRecordTotal)\n {\n if (metrics[action] === undefined)\n metrics[action] = { count: 0, total: 0 };\n metrics[action].count++;\n metrics[action].total += total;\n }\n}\n\nexport function dumpMetrics(): void\n{\n Object.keys(metrics).forEach(action => {\n console.log(`G.${action}: count: ${metrics[action].count}, total: ${metrics[action].total}`);\n });\n metrics = {};\n}\n\nexport function hidemapConcat(...args: HideMap[]): HideMap\n{\n let hm: HideMap = {};\n\n for (let i = 0; i < args.length; i++)\n if (args[i]) Object.keys(args[i]).forEach(id => hm[id] = true);\n return hm;\n}\n\nexport interface NormalizeOptions\n{\n joinPolygons?: boolean,\n checkRewind?: boolean,\n ensureID?: boolean,\n}\nconst NormalizeAll: NormalizeOptions = { joinPolygons: true, checkRewind: true, ensureID: true };\n\nexport function applyCanonicalID(col: GeoFeatureCollection): void\n{\n if (col && Array.isArray(col.features))\n col.features.forEach((f: GeoFeature, n: number) => { f.properties.id = String(n+1) });\n}\n\nexport function isValidId(col: GeoFeatureCollection): boolean\n{\n if (! col || ! Array.isArray(col.features)) return true;\n\n let set = new Set<string>();\n for (let i = 0; i < col.features.length; i++)\n {\n let f = col.features[i];\n if (typeof f.properties.id === 'number') f.properties.id = String(f.properties.id); // Fix old 2016_BG collections\n if (typeof f.properties.id !== 'string') return false; // id must be string\n if (set.has(f.properties.id)) return false; // id must be unique\n set.add(f.properties.id);\n }\n return true;\n}\n\n// set the canonical 'id' property from the best property value.\n// if joinPolygons is true, we do not enforce uniqueness.\n//\n\nexport function geoEnsureID(col: GeoFeatureCollection, options?: NormalizeOptions): void\n{\n options = Util.shallowAssignImmutable({}, options);\n\n let prop: string;\n const props = [ 'id', 'GEOID', 'GEOID10', 'GEOID20', 'GEOID30', 'DISTRICT', 'DISTRICTNO', 'DISTRICTNAME' ];\n\n if (col && col.features && col.features.length > 0)\n {\n let f = col.features[0];\n props.forEach(p => {\n if (prop === undefined)\n if (f.properties[p] !== undefined)\n prop = p;\n else\n {\n p = p.toLowerCase();\n if (f.properties[p] !== undefined)\n prop = p\n }\n });\n if (prop)\n {\n col.features.forEach(f => { f.properties.id = f.properties[prop] });\n if (! isValidId(col))\n applyCanonicalID(col);\n }\n else\n applyCanonicalID(col);\n }\n}\n\nexport function geoNormalizeFeature(f: any, options?: NormalizeOptions): GeoFeature\n{\n options = Util.shallowAssignImmutable({}, options);\n\n if (options.checkRewind)\n Poly.featureRewind(f);\n\n return f;\n}\n\nfunction onlyPolygons(col: GeoFeatureCollection): boolean\n{\n if (col && Array.isArray(col.features))\n for (let i = 0; i < col.features.length; i++)\n {\n let f = col.features[i];\n if (f.geometry && f.geometry.type === 'MultiPolygon')\n return false;\n }\n\n return true;\n}\n\nfunction mergePolygon(f1: any, f2: any): any\n{\n if (!f1) return f2;\n if (!f2) return f1;\n if (f1.geometry.type !== 'Polygon' && f1.geometry.type !== 'MultiPolygon')\n return f1;\n if (f2.geometry.type !== 'Polygon' && f2.geometry.type !== 'MultiPolygon')\n return f2;\n if (f1.geometry.type === 'Polygon')\n {\n f1.geometry.type = 'MultiPolygon';\n if (f2.geometry.type === 'Polygon')\n f1.geometry.coordinates = [ f1.geometry.coordinates, f2.geometry.coordinates ];\n else\n f1.geometry.coordinates = [ f1.geometry.coordinates, ...f2.geometry.coordinates ];\n }\n else\n {\n if (f2.geometry.type === 'Polygon')\n f1.geometry.coordinates.push(f2.geometry.coordinates);\n else\n f1.geometry.coordinates = [...f1.geometry.coordinates, ...f2.geometry.coordinates];\n }\n return f1;\n}\n\nexport function geoNormalizeCollection(col: GeoFeatureCollection, options?: NormalizeOptions): GeoFeatureCollection\n{\n options = Util.shallowAssignImmutable(NormalizeAll, options);\n\n // Normalize individual features\n if (col && Array.isArray(col.features))\n col.features = col.features.filter((f: any) => f.properties && f.geometry && f.geometry.coordinates);\n if (col && Array.isArray(col.features))\n col.features.forEach((f: GeoFeature) => geoNormalizeFeature(f, options));\n\n // Ensure ID\n if (options.ensureID)\n geoEnsureID(col, options);\n\n // Merge polygons into multi-polygons based on id?\n if (options.ensureID && options.joinPolygons && onlyPolygons(col))\n {\n let map: GeoFeatureMap = {};\n col.features.forEach(f => { let id = f.properties.id; map[id] = mergePolygon(map[id], f) });\n col.features = Object.values(map);\n }\n return col;\n}\n\nexport function geoCollectionToMap(col: GeoFeatureCollection): GeoFeatureMap\n{\n if (col == null) return null;\n let map: GeoFeatureMap = {};\n col.features.forEach((f: GeoFeature) => { map[String(f.properties.id)] = f; });\n return map;\n}\n\nexport function geoMapToCollection(map: GeoFeatureMap): GeoFeatureCollection\n{\n if (Util.countKeys(map) == 0) return null;\n return geoMapToCollectionNonNull(map);\n}\n\nexport function geoMapToCollectionNonNull(map: GeoFeatureMap): GeoFeatureCollection\n{\n if (map == null) return null;\n let col: GeoFeatureCollection = { type: 'FeatureCollection', features: [] };\n Object.keys(map).forEach((geoid: string) => { col.features.push(map[geoid]) });\n return col;\n}\n\nexport function geoCollectionToTopo(col: GeoFeatureCollection): Poly.Topo\n{\n let topo = Poly.topoFromCollection(col);\n Poly.topoPack(topo);\n record('coltotopo', col.features.length);\n if ((col as any).datasets) (topo as any).datasets = (col as any).datasets;\n return topo;\n}\n\nexport function geoCollectionToTopoNonNull(col: GeoFeatureCollection): Poly.Topo\n{\n return geoCollectionToTopo(col);\n}\n\nexport function geoTopoToCollection(topo: Poly.Topo): GeoFeatureCollection\n{\n let col = Poly.topoToCollection(topo);\n Poly.featurePack(col);\n record('topotocol', col.features.length);\n if ((topo as any).datasets) (col as any).datasets = (topo as any).datasets;\n return col;\n}\n\nexport function geoTopoToCollectionNonNull(topo: Poly.Topo): GeoFeatureCollection\n{\n return geoTopoToCollection(topo);\n}\n\nexport interface GeoFeatureMap\n{\n [id: string]: GeoFeature; // Maps id to GeoFeature\n}\n\nexport type FeatureFunc = (f: GeoFeature) => void;\n\ninterface GeoEntry\n{\n tag: string;\n col?: GeoFeatureCollection;\n map?: GeoFeatureMap;\n topo?: Poly.Topo;\n}\ntype GeoEntryMap = { [tag: string]: GeoEntry };\n\nexport function geoEqual(m1: GeoMultiCollection, m2: GeoMultiCollection): boolean\n{\n let n1 = m1 ? m1.length : 0;\n let n2 = m2 ? m2.length : 0;\n \n if (n1 != n2) return false;\n if (n1 == 0) return true;\n\n let n = 0;\n let eq = true;\n m1.forEach(f => { if (eq && !m2.find(f.properties.id)) eq = false });\n return eq;\n}\n\nexport function geoMapEqual(m1: GeoFeatureMap, m2: GeoFeatureMap): boolean\n{\n if (m1 == null) return Util.isEmpty(m2);\n if (m2 == null) return Util.isEmpty(m1);\n let p: string;\n for (p in m1) if (m1.hasOwnProperty(p))\n if (m1[p] !== m2[p])\n return false;\n for (p in m2) if (m2.hasOwnProperty(p))\n if (m1[p] === undefined)\n return false;\n return true;\n}\n\nexport class GeoMultiCollection\n{\n entries: GeoEntryMap;\n all: GeoEntry;\n hidden: HideMap;\n stamp: number;\n\n constructor(tag?: string, topo?: Poly.Topo, col?: GeoFeatureCollection, map?: GeoFeatureMap)\n {\n this.stamp = Math.trunc(Math.random() * Number.MAX_SAFE_INTEGER / 2);\n this.empty();\n if (tag)\n this.add(tag, topo, col, map);\n }\n\n empty()\n {\n this.all = { tag: 'all' };\n this.entries = {};\n this.hidden = {};\n this._onChange();\n }\n\n get nEntries(): number { return Util.countKeys(this.entries) }\n\n nthEntry(n: number): GeoEntry\n {\n return Util.nthProperty(this.entries, n) as GeoEntry;\n }\n\n add(tag: string, topo: Poly.Topo, col: GeoFeatureCollection, map: GeoFeatureMap): void\n {\n let entry = this.entries[tag];\n if (entry === undefined) entry = { tag: tag }, this.entries[tag] = entry;\n if ((topo && entry.topo !== topo) || (col && entry.col !== col) || (map && entry.map !== map))\n {\n entry.topo = topo;\n entry.col = col;\n entry.map = map;\n this._onChange();\n }\n else if (topo == null && col == null && map == null)\n this.remove(tag);\n }\n\n addMulti(multi: GeoMultiCollection): void\n {\n multi.forEachEntry(e => {\n this.add(e.tag, e.topo, e.col, e.map);\n });\n for (let p in multi.hidden) if (multi.hidden.hasOwnProperty(p))\n {\n this.hidden[p] = true;\n this._onChange();\n }\n }\n\n // Add the \"all\" collection from the passed in multi, but do not force compute of any things not computed yet.\n addAll(tag: string, multi: GeoMultiCollection): void\n {\n if (multi == null || Util.isEmpty(multi.entries))\n this.remove(tag);\n else\n {\n let nEntries = Util.countKeys(multi.entries);\n if (nEntries)\n {\n // Make sure all collection is created\n if (!multi.all.topo && !multi.all.col && !multi.all.map)\n {\n // Create cheapest one (collection if I need to create, otherwise copy from single entry)\n if (nEntries > 1)\n multi.allCol();\n else\n {\n let e = multi.nthEntry(0);\n multi.all.topo = e.topo;\n multi.all.col = e.col;\n multi.all.map = e.map;\n }\n }\n this.add(tag, multi.all.topo, multi.all.col, multi.all.map);\n }\n }\n }\n\n remove(tag: string): void\n {\n let entry = this.entries[tag];\n if (entry)\n {\n if (entry.topo || entry.col || entry.map)\n this._onChange();\n delete this.entries[tag];\n }\n }\n\n _onChange(): void\n {\n if (this.all.topo || this.all.col || this.all.map)\n this.all = { tag: 'all' };\n this.stamp++;\n }\n\n _col(e: GeoEntry): GeoFeatureCollection\n {\n if (e == null) return null;\n if (! e.col)\n {\n if (e.map)\n e.col = geoMapToCollectionNonNull(e.map);\n else if (e.topo)\n e.col = geoTopoToCollectionNonNull(e.topo);\n }\n return e.col;\n }\n\n _map(e: GeoEntry): GeoFeatureMap\n {\n if (e == null) return null;\n if (! e.map)\n {\n if (e.col)\n e.map = geoCollectionToMap(e.col);\n else if (e.topo)\n {\n e.col = geoTopoToCollectionNonNull(e.topo);\n e.map = geoCollectionToMap(e.col);\n }\n }\n return e.map;\n }\n\n _topo(e: GeoEntry): Poly.Topo\n {\n if (e == null) return null;\n if (! e.topo)\n {\n if (e.col)\n e.topo = geoCollectionToTopoNonNull(e.col);\n else if (e.map)\n {\n e.col = geoMapToCollectionNonNull(e.map);\n e.topo = geoCollectionToTopoNonNull(e.col);\n }\n }\n return e.topo;\n }\n\n _length(e: GeoEntry): number\n {\n if (e == null) return 0;\n return e.col ? e.col.features.length\n : e.map ? Util.countKeys(e.map)\n : e.topo ? Util.countKeys(e.topo.objects)\n : 0;\n }\n\n colOf(tag: string): GeoFeatureCollection { return this._col(this.entries[tag]); }\n mapOf(tag: string): GeoFeatureMap { return this._map(this.entries[tag]); }\n topoOf(tag: string): Poly.Topo { return this._topo(this.entries[tag]); }\n\n forEachEntry(cb: (e: GeoEntry) => void): void\n {\n Object.values(this.entries).forEach(cb);\n }\n\n allCol(): GeoFeatureCollection\n {\n if (this.nEntries == 0) return null;\n if (! this.all.col)\n {\n // optimise case where one entry\n let n = this.nEntries;\n if (n == 1)\n {\n let e = this.nthEntry(0);\n this.all.col = this._col(e);\n this.all.topo = this.all.topo || e.topo;\n this.all.map = this.all.map || e.map;\n }\n else\n {\n // Going from map to collection guarantees that any duplicates are removed\n this.all.col = geoMapToCollectionNonNull(this.allMap());\n this.forEachEntry(e => {\n if (e.col && (e.col as any).datasets)\n (this.all.col as any).datasets = (e.col as any).datasets;\n if (e.topo && (e.topo as any).datasets)\n (this.all.col as any).datasets = (e.topo as any).datasets;\n });\n }\n }\n return this.all.col;\n }\n\n allMap(): GeoFeatureMap\n {\n if (this.nEntries == 0) return null;\n if (! this.all.map)\n {\n // optimise case where one entry\n let n = this.nEntries;\n if (n == 1)\n {\n let e = this.nthEntry(0);\n this.all.map = this._map(e);\n this.all.topo = this.all.topo || e.topo;\n this.all.col = this.all.col || e.col;\n }\n else\n {\n let map: GeoFeatureMap = {};\n this.all.map = map;\n this.forEachEntry(e => {\n let col = this._col(e); // convert feature geometry from topo to polygon\n col.features.forEach(f => {\n let id = f.properties.id;\n if (! this.hidden[id])\n map[id] = f;\n });\n });\n }\n }\n return this.all.map;\n }\n\n allTopo(): Poly.Topo\n {\n // Note that you can't actually switch between allNewTopo and allOldTopo\n // without calling _onChange between the calls to reset the 'all' tag.\n return this.allNewTopo();\n }\n\n allOldTopo(): Poly.Topo\n {\n if (this.nEntries == 0) return null;\n if (! this.all.topo)\n {\n // optimise case where one entry\n let n = this.nEntries;\n if (n == 1)\n {\n let e = this.nthEntry(0);\n this.all.topo = this._topo(e);\n this.all.col = this.all.col || e.col;\n this.all.map = this.all.map || e.map;\n }\n else\n {\n // Old-style, goes through map (to filter hidden) and then collection\n this.all.topo = geoCollectionToTopoNonNull(this.allCol());\n }\n }\n return this.all.topo;\n }\n\n allNewTopo(): Poly.Topo\n {\n if (this.nEntries == 0) return null;\n if (! this.all.topo)\n {\n // optimise case where one entry\n let n = this.nEntries;\n let e = this.nthEntry(0);\n if (n == 1)\n {\n // Note that this is potentially invalid shortcut when some features are hidden from base geometry.\n // Could test overall count of objects vs. this count to check.\n this.all.topo = this._topo(e);\n this.all.col = this.all.col || e.col;\n this.all.map = this.all.map || e.map;\n }\n else if (e.topo)\n {\n // Old-style, goes through map (to filter hidden) and then collection\n // this.all.topo = geoCollectionToTopoNonNull(this.allCol());\n // New style, use splice on packed topologies\n let filterout = Util.isEmpty(this.hidden) ? null : this.hidden; // splice function requires NULL for empty\n let topoarray = Object.values(this.entries).filter((e: GeoEntry) => this._length(e) > 0)\n .map((e: GeoEntry) => { return { topology: this._topo(e), filterout } });\n this.all.topo = topoarray.length == 0 ? null : topoarray.length == 1 ? topoarray[0].topology : Poly.topoSplice(topoarray);\n }\n else\n // Old-style, goes through map (to filter hidden) and then collection\n this.all.topo = geoCollectionToTopoNonNull(this.allCol());\n }\n return this.all.topo;\n }\n\n hideSetAll(hm: HideMap): void\n {\n // Prevents onChange when resetting to same value\n if (! Util.shallowEqual(this.hidden, hm))\n {\n this.showAll();\n this.hide(hm);\n }\n }\n\n hide(id: any): void\n {\n if (id)\n {\n if (typeof id === 'string')\n {\n if (! this.hidden[id])\n {\n this.hidden[id] = true;\n this._onChange();\n }\n }\n else if (Array.isArray(id))\n id.forEach((i: any) => this.hide(i));\n else if (typeof id === 'object')\n for (let p in id) if (id.hasOwnProperty(p)) this.hide(p);\n }\n }\n\n show(id: any): void\n {\n if (id)\n {\n if (typeof id === 'string')\n {\n if (this.hidden[id])\n {\n delete this.hidden[id];\n this._onChange();\n }\n }\n else if (Array.isArray(id))\n id.forEach((i: any) => this.show(i))\n else if (typeof id === 'object')\n for (let p in id) if (id.hasOwnProperty(p)) this.show(p);\n }\n }\n\n showAll(): void\n {\n if (! Util.isEmpty(this.hidden))\n {\n this.hidden = {};\n this._onChange();\n }\n }\n\n get length(): number\n {\n let n = 0;\n this.forEachEntry(e => n += this._length(e));\n return n;\n }\n\n // Use forEach in preference to iteration using this function\n nthFeature(n: number): GeoFeature\n {\n let found: GeoFeature;\n\n if (n >= 0)\n this.forEachEntry(e => {\n if (found) return;\n let col = this._col(e);\n if (col)\n if (n > col.features.length)\n n -= col.features.length;\n else\n found = col.features[n];\n });\n return found;\n }\n\n nthFilteredFeature(n: number, cb: (f: GeoFeature) => boolean)\n {\n let found: GeoFeature;\n\n this.forEachEntry(e => {\n if (found) return;\n let col = this._col(e);\n if (col)\n for (let i = 0; !found && i < col.features.length; i++)\n {\n let f = col.features[i];\n if (this.hidden[f.properties.id] === undefined && cb(f))\n {\n if (n === 0)\n {\n found = f;\n break;\n }\n n--;\n }\n }\n });\n return found;\n }\n\n forEach(cb: FeatureFunc): void\n {\n this.forEachEntry(e => {\n if (e.col)\n e.col.features.forEach(f => { if (! this.hidden[f.properties.id]) cb(f) })\n else if (e.topo)\n Object.values(e.topo.objects).forEach((f: GeoFeature) => { if (! this.hidden[f.properties.id]) cb(f) });\n else if (e.map)\n Object.values(e.map).forEach(f => { if (! this.hidden[f.properties.id]) cb(f) });\n });\n }\n\n map(cb: (f: GeoFeature) => GeoFeature): GeoFeature[]\n {\n let features: GeoFeature[] = [];\n this.forEach((f: GeoFeature) => { features.push(cb(f)) });\n return features;\n }\n\n isHidden(id: string): boolean\n {\n return this.hidden[id] !== undefined;\n }\n\n findNoHide(id: string): GeoFeature\n {\n let entries = Object.values(this.entries);\n for (let i = 0; i < entries.length; i++)\n {\n let map = this._map(entries[i]);\n if (map[id])\n return map[id];\n }\n return undefined;\n }\n\n find(id: string): GeoFeature\n {\n if (this.hidden[id] !== undefined)\n return undefined;\n\n return this.findNoHide(id);\n }\n\n filter(test: (f: GeoFeature) => boolean): GeoMultiCollection\n {\n let m = new GeoMultiCollection();\n this.forEachEntry(e => {\n let col = this._col(e);\n let features = col ? col.features.filter(test) : null;\n if (features && features.length)\n m.add(e.tag, null, { type: 'FeatureCollection', features: features }, null);\n });\n return m;\n }\n}\n\nexport enum geoIntersectOptions { Intersects, Bounds, BoundsCenter };\n\nfunction geoBoxIntersect(x1: Poly.BoundBox, x2: Poly.BoundBox, opt: geoIntersectOptions): boolean\n{\n if (x1.left === undefined || x2.left === undefined) return false;\n\n let l1 = x1.left;\n let l2 = x2.left;\n let r1 = x1.right;\n let r2 = x2.right;\n let b1 = x1.top; // flip\n let b2 = x2.top; // flip\n let t1 = x1.bottom; // flip\n let t2 = x2.bottom; // flip\n let cx2 = l2 + (r2 - l2) / 2;\n let cy2 = t2 + (b2 - t2) / 2;\n\n // Note I flipped top and bottom above when extracting,\n // in order to make below logic work for normal y axis alignment (0 at top).\n switch (opt)\n {\n case geoIntersectOptions.Intersects:\n return !(l2 > r1 || r2 < l1 || t2 > b1 || b2 < t1);\n case geoIntersectOptions.Bounds:\n return l1 <= l2 && t1 <= t2 && r1 >= r2 && b1 >= b2;\n case geoIntersectOptions.BoundsCenter:\n return l1 <= cx2 && t1 <= cy2 && r1 >= cx2 && b1 >= cy2;\n }\n}\n\nexport function geoIntersect(multi: GeoMultiCollection, bbox: Poly.BoundBox, opt: geoIntersectOptions): GeoMultiCollection\n{\n let m: GeoFeatureMap = {};\n let bboxPoly = Poly.boundboxPoly(bbox);\n\n multi.forEach((f: GeoFeature) => {\n let box = Poly.boundbox(f);\n if (geoBoxIntersect(bbox, box, opt))\n {\n if (opt !== geoIntersectOptions.Intersects || Poly.polyIntersects(bboxPoly, f))\n m[f.properties.id] = f;\n }\n });\n\n let result = new GeoMultiCollection();\n result.add('result', null, null, m);\n return result;\n}\n","export type BlockMapping = { [blockid: string]: string };\nexport type ReverseBlockMapping = { [geoid: string]: string[] };\n\ninterface Entry\n{\n tag: string,\n bm: BlockMapping,\n rbm?: ReverseBlockMapping,\n}\n\nexport function reverseBlockMapping(bm: BlockMapping): ReverseBlockMapping\n{\n let rev: ReverseBlockMapping = {};\n\n if (bm) Object.keys(bm).forEach(blockid => {\n let geoid = bm[blockid];\n if (! rev[geoid]) rev[geoid] = [];\n rev[geoid].push(blockid);\n });\n Object.values(rev).forEach((a: string[]) => a.sort());\n return rev;\n}\n\nexport class MultiBlockMapping\n{\n entries: Entry[];\n stamp: number;\n\n constructor(tag?: string, bm?: BlockMapping)\n {\n this.entries = [];\n this.stamp = Math.trunc(Math.random() * Number.MAX_SAFE_INTEGER / 2);\n if (tag && bm)\n this.entries.push({ tag, bm });\n }\n\n add(tag: string, bm: BlockMapping): void\n {\n this.entries.forEach(e => { if (e.tag === tag) { e.bm = bm; delete e.rbm; bm = null } });\n if (bm)\n this.entries.push({ tag, bm });\n this.stamp++;\n }\n\n remove(tag: string): void\n {\n for (let i = this.entries.length-1; i >= 0; i--)\n if (this.entries[i].tag === tag)\n {\n this.stamp++;\n this.entries.splice(i, 1);\n }\n }\n\n map(blockid: string): string\n {\n // Walk backwards to pick up overrides first\n for (let i = this.entries.length-1; i >= 0; i--)\n {\n let e = this.entries[i];\n if (e.bm[blockid])\n return e.bm[blockid];\n }\n return undefined;\n }\n\n multimap(blockid: string): string[]\n {\n let a: string[] = [];\n this.entries.forEach(e => { if (e.bm[blockid]) a.push(e.bm[blockid]) });\n return a;\n }\n\n bmOf(tag: string): BlockMapping\n {\n let e = this.entries.find(e => e.tag === tag);\n return e ? e.bm : null;\n }\n\n mapmain(blockid: string): string\n {\n return this.entries.length ? this.entries[0].bm[blockid] : undefined;\n }\n\n rev(geoid: string): string[]\n {\n for (let i = this.entries.length-1; i >= 0; i--)\n {\n let e = this.entries[i];\n if (! e.rbm)\n e.rbm = reverseBlockMapping(e.bm);\n if (e.rbm[geoid])\n return e.rbm[geoid];\n }\n return undefined;\n }\n\n // Just walks first map\n forEach(cb: (blockid: string) => void): void\n {\n if (this.entries.length)\n Object.keys(this.entries[0].bm).forEach(blockid => cb(blockid));\n }\n\n // Walk maps in reverse order, careful to not invoke on same geoid\n forEachRev(cb: (geoidid: string, blocks: string[]) => void): void\n {\n let seen = new Set<string>();\n for (let i = this.entries.length-1; i >= 0; i--)\n {\n let e = this.entries[i];\n if (! e.rbm) e.rbm = reverseBlockMapping(e.bm);\n Object.keys(e.rbm).forEach(geoid => {\n if (! seen.has(geoid))\n {\n seen.add(geoid);\n cb(geoid, e.rbm[geoid]);\n }\n });\n }\n }\n}\n","import * as geojson from 'geojson';\nimport * as Util from '../util/all'\nimport * as Poly from '../poly/all'\nimport * as G from './geo';\n\n// Given the topology for a precinct, the bintrie mapping and the list of blocks, construct the\n// feature data for the virtual feature.\n//\n\nexport function computeVFeature(topoPrecinct: Poly.Topo, bintrie: Util.BinTrie, blocks: string[]): G.GeoFeature\n{\n let contiguity = new Util.IndexedArray();\n let block_contiguity = new Util.IndexedArray();\n let f = Poly.topoMerge(topoPrecinct, blocks);\n f.properties.datasets = {};\n blocks.forEach(blockid => {\n let b = topoPrecinct.objects[blockid];\n if (b.properties.datasets)\n Util.deepAccum(f.properties.datasets, b.properties.datasets);\n if (b.properties.contiguity)\n {\n b.properties.contiguity.forEach((id: string) => {\n contiguity.set(id === 'OUT_OF_STATE' ? id : bintrie.get(id));\n });\n b.properties.contiguity.forEach((id: string) => {\n block_contiguity.set(id);\n });\n }\n });\n f.properties.contiguity = contiguity.asArray();\n f.properties.block_contiguity = block_contiguity.asArray();\n f.properties.blocks = blocks;\n return f;\n}\n","export * from './log';\n","import * as Util from '../util/all';\nimport * as FSM from '../fsm/all';\n\nexport interface ILog\n{\n dump: () => FSM.Fsm;\n stamp: (o: any) => void;\n log: (o: any, verbosity?: number) => void;\n event: (o: any, verbosity?: number) => void;\n error: (o: any) => void;\n value: (o: any, verbosity?: number) => void;\n chatter: (s: string) => void;\n chatters: () => string[];\n}\n\nexport class Timer\n{\n ilog: ILog;\n o: any;\n verbosity: number;\n elapsed: Util.Elapsed;\n\n constructor(ilog: ILog, kind: string, o: any, verbosity: number = 0)\n {\n this.ilog = ilog;\n if (typeof o === 'string') o = { event: o };\n this.o = o;\n this.o.kind = kind;\n this.verbosity = verbosity;\n this.elapsed = new Util.Elapsed();\n }\n\n log(): void\n {\n this.elapsed.end();\n this.o.ms = this.elapsed.ms();\n this.ilog.log(this.o, this.verbosity);\n }\n}\n\nexport class AsyncTimer extends Timer\n{\n constructor(ilog: ILog, o: any, verbosity: number = 0)\n {\n super(ilog, 'async', o, verbosity);\n }\n}\n\nexport class SyncTimer extends Timer\n{\n constructor(ilog: ILog, o: any, verbosity: number = 0)\n {\n super(ilog, 'sync', o, verbosity);\n }\n}\n","export * from './log';\n","import * as Context from '../context/all';\nimport * as LogAbstract from '../logabstract/all';\nimport * as Util from '../util/all';\nimport * as FSM from '../fsm/all';\n\nexport interface LogEnvironment\n{\n context: Context.IContext;\n}\n\nclass LogManager implements LogAbstract.ILog\n{\n env: LogEnvironment;\n count: number;\n\n constructor(env: LogEnvironment)\n {\n this.env = env;\n this.count = 0;\n }\n\n dump(): FSM.Fsm { return null; }\n\n print(o: any): void\n {\n let sa: string[] = [];\n\n if (o._count !== undefined)\n sa.push(String(o._count));\n if (o.kind === 'error')\n {\n sa.push('error');\n sa.push(o.event);\n }\n else if (o.kind !== 'value')\n {\n sa.push('info');\n sa.push(o.event);\n }\n else\n {\n sa.push('value');\n sa.push(o.event);\n sa.push(String(o.value));\n }\n if (o.detail !== undefined)\n sa.push(o.detail);\n console.log(sa.join(': '));\n }\n\n stamp(o: any): void\n {\n this.log(o);\n }\n\n log(o: any, verbosity: number = 0): void\n {\n // Show some restraint\n if (verbosity > this.env.context.xnumber('verbosity'))\n return;\n\n // Inject some standard properties\n o._time = Util.Now();\n o._count = this.count++;\n if (o.kind === undefined)\n o.kind = 'misc';\n this.print(o);\n }\n\n\n event(o: any, verbosity: number = 0): void\n {\n if (typeof o === 'string') o = { event: o };\n o.kind = 'event';\n this.log(o, verbosity);\n }\n\n error(o: any): void\n {\n if (typeof o === 'string') o = { event: o };\n o.kind = 'error';\n this.log(o);\n }\n\n value(o: any, verbosity: number = 0): void\n {\n o.kind = 'value';\n this.log(o, verbosity);\n }\n\n chatter(s: string): void\n {\n console.log(s);\n }\n\n chatters(): string[]\n {\n return null;\n }\n}\n\nexport function create(env: LogEnvironment): LogAbstract.ILog\n{\n return new LogManager(env);\n}\n","export * from \"./oteditutil\";\nexport * from \"./otmaputil\";\n","import * as LogAbstract from '../logabstract/all';\nimport * as OT from '../ot-js/all';\n\nimport * as DMP from \"diff-match-patch\";\nlet DiffMatchPatch = new DMP.diff_match_patch();\nlet DIFF_DELETE = DMP.DIFF_DELETE;\nlet DIFF_INSERT = DMP.DIFF_INSERT;\nlet DIFF_EQUAL = DMP.DIFF_EQUAL;\n\nexport class OTEditUtil\n{\n\t// Data members\n\tilog: LogAbstract.ILog;\n\tresourceID: string;\n\tresourceName: string;\n\tclientID: string;\n\n\t// Constructor\n\tconstructor(ilog: LogAbstract.ILog, rid: string, cid: string, name: string)\n\t\t{\n\t\t\tthis.ilog = ilog;\n\t\t\tthis.resourceID = rid;\n\t\t\tthis.clientID = cid;\n\t\t\tthis.resourceName = name;\n\t\t}\n\n\t//\n\t// Function: insertAtStart\n\t//\n\t// Description:\n\t//\tGenerate an OTCompositeResource to insert a string at the start of a buffer of the given size.\n\t//\n\n\tinsertAtStart(s: any, nCurrentLen: number): OT.OTCompositeResource\n\t\t{\n\t\t\tlet edit = new OT.OTCompositeResource(this.resourceID, this.clientID);\n\t\t\tlet sEdit = new OT.OTStringResource(this.resourceName);\n\t\t\tsEdit.edits.push([ OT.OpInsert, s.length, s ]);\n\t\t\tsEdit.edits.push([ OT.OpCursor, 0, '' ]);\n\t\t\tsEdit.edits.push([ OT.OpRetain, nCurrentLen, '' ]);\n\t\t\tedit.edits.push(sEdit);\n\t\t\treturn edit;\n\t\t}\n\n\t//\n\t// Function: insertAtEnd\n\t//\n\t// Description:\n\t//\tGenerate an OTCompositeResource to insert a string at the end of a buffer of the given size.\n\t//\n\n\tinsertAtEnd(s: any, nCurrentLen: number): OT.OTCompositeResource\n\t\t{\n\t\t\tlet edit = new OT.OTCompositeResource(this.resourceID, this.clientID);\n\t\t\tlet sEdit = new OT.OTStringResource(this.resourceName);\n\t\t\tsEdit.edits.push([ OT.OpRetain, nCurrentLen, '' ]);\n\t\t\tsEdit.edits.push([ OT.OpInsert, s.length, s ]);\n\t\t\tsEdit.edits.push([ OT.OpCursor, 0, '' ]);\n\t\t\tedit.edits.push(sEdit);\n\t\t\treturn edit;\n\t\t}\n\n\t//\n\t// Function: injectCursor\n\t//\n\t// Inject start/end cursor positions into an existing string resource.\n\t//\n\n\tinjectCursor(edit: OT.OTCompositeResource, start: number, end?: number): void\n\t\t{\n\t\t\tif (start === undefined) return;\n\t\t\tif (end === undefined) end = start;\n\n\t\t\tlet sEdit: OT.OTStringResource = edit.findResource(this.resourceName) as OT.OTStringResource;\n\t\t\tif (sEdit == null)\n\t\t\t\treturn;\n\t\t\tlet cEdit: OT.OTStringResource = new OT.OTStringResource(this.resourceName);\n\t\t\tif (start != 0)\n\t\t\t\tcEdit.edits.push( [ OT.OpRetain, start, '' ] );\n\t\t\tcEdit.edits.push( [ OT.OpCursor, 0, this.clientID ] );\n\t\t\tif (end != start)\n\t\t\t{\n\t\t\t\tcEdit.edits.push( [ OT.OpRetain, end-start, '' ] );\n\t\t\t\tcEdit.edits.push( [ OT.OpCursor, 1, this.clientID ] );\n\t\t\t}\n\t\t\tlet nFinal: number = sEdit.finalLength();\n\t\t\tif (end != nFinal)\n\t\t\t\tcEdit.edits.push( [ OT.OpRetain, nFinal-end, '' ] );\n\t\t\tsEdit.compose(cEdit);\n\t\t}\n\n\t//\n\t// Function: extractCursor\n\t//\n\t// Extract cursor information by client. Returns an object indexed by clientID with an object with\n\t// properties startSelection, endSelection.\n\t//\n\n\textractCursor(edit: OT.OTCompositeResource): any\n\t\t{\n\t\t\tlet cursors: any = { };\n\t\t\tlet sEdit: OT.OTStringResource = edit.findResource(this.resourceName) as OT.OTStringResource;\n\t\t\tif (sEdit == null)\n\t\t\t\treturn cursors;\n\t\t\tlet pos: number = 0;\n\t\t\tfor (let i: number = 0; i < sEdit.length; i++)\n\t\t\t{\n\t\t\t\tlet a: OT.OTSingleArrayEdit = sEdit.edits[i];\n\t\t\t\tswitch (a[0])\n\t\t\t\t{\n\t\t\t\t\tcase OT.OpInsert:\n\t\t\t\t\t\tpos += a[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OT.OpDelete:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OT.OpRetain:\n\t\t\t\t\t\tpos += a[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OT.OpCursor:\n\t\t\t\t\t\tif (a[2] != '')\t// should have clientID...\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlet sel: any = cursors[a[2]];\t// a[2] is clientID\n\t\t\t\t\t\t\tif (sel === undefined) { sel = { }; cursors[a[2]] = sel; }\n\t\t\t\t\t\t\tif (a[1] == 0)\n\t\t\t\t\t\t\t\tsel['selectionStart'] = pos;\t// 0 is selectionStart\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tsel['selectionEnd'] = pos;\t\t// 1 is selectionEnd\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OT.OpSet:\n\t\t\t\t\t\tpos += a[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cursors;\n\t\t}\n\n\t//\n\t// Function: computeEdit\n\t//\n\t// Description:\n\t//\tGiven an old and new string, generate the (minimal) edits list necessary to convert the old\n\t//\tstring into the new string.\n\t//\n\t// \tThis is useful if you're not actually tracking the specfic edit operations happening to the\n\t//\tunderlying string but rather just examining old and new values and trying to transmit\n\t//\tminimal diffs.\n\t//\n\t//\tThere are various good algorithms for computing the \"edit distance\" between two strings.\n\t//\tHere I've used the google DiffMatchPatch algorithm.\n\t//\n\n\tcomputeEdit(sOld: string, sNew: string): OT.OTCompositeResource\n\t\t{\n\t\t\tlet edit = new OT.OTCompositeResource(this.resourceID, this.clientID);\n\t\t\tlet sEdit = new OT.OTStringResource(this.resourceName);\n\t\t\tlet diffs: DMP.Diff[] = DiffMatchPatch.diff_main(sOld, sNew);\n\t\t\tif (diffs)\n\t\t\t\tfor (let i: number = 0; i < diffs.length; i++)\n\t\t\t\t{\n\t\t\t\t\tlet diff: DMP.Diff = diffs[i];\n\t\t\t\t\tlet s = diff[1];\n\t\t\t\t\tswitch (diff[0])\n\t\t\t\t\t{\n\t\t\t\t\t\tcase DIFF_DELETE:\n\t\t\t\t\t\t\tsEdit.edits.push([ OT.OpDelete, s.length, '' ]);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase DIFF_INSERT:\n\t\t\t\t\t\t\tsEdit.edits.push([ OT.OpInsert, s.length, s ]);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase DIFF_EQUAL:\n\t\t\t\t\t\t\tsEdit.edits.push([ OT.OpRetain, s.length, '' ]);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tedit.edits.push(sEdit);\n\t\t\treturn edit;\n\t\t}\n}\n","import * as OT from '../ot-js/all';\nimport * as Util from '../util/all';\n\nexport const MERGE: number = 0;\nexport const REPLACE: number = 1;\n\nexport class Editor\n{\n private engine: OT.OTEngine;\n private root: OT.OTCompositeResource;\n private stamps: OT.OTCounterResource;\n\n constructor(engine: OT.OTEngine)\n {\n this.engine = engine;\n this.root = null;\n this.stamps = null;\n }\n\n startLocalEdit(): void\n {\n if (this.root == null)\n this.root = this.engine.startLocalEdit();\n }\n\n stamp(rid: string, prop: string): void\n {\n if (this.stamps == null)\n {\n this.startLocalEdit();\n this.stamps = new OT.OTCounterResource(rid);\n this.root.edits.push(this.stamps);\n }\n this.stamps.edits.push([ OT.OpCounterAdd, prop, 1 ]);\n }\n\n set(rid: string, p: string, v: any): Editor\n {\n this.rawObject(rid).set(p, v);\n return this;\n }\n\n del(rid: string, p: string): Editor\n {\n this.rawObject(rid).del(p);\n return this;\n }\n\n rawObject(rid: string): OT.OTMapResource\n {\n this.startLocalEdit();\n return this.root.map(rid);\n }\n\n rawArray(rid: string): OT.OTArrayResource\n {\n this.startLocalEdit();\n return this.root.array(rid);\n }\n\n editCounter(rid: string, oNew: any, mode: number = MERGE): void\n {\n let oOld = this.engine.toPartialValue(rid);\n let aDiff: string[] = keyDiff(oOld, oNew);\n \n let mEdit = new OT.OTCounterResource(rid);\n\n // Propagate sets\n for (let i: number = 0; i < aDiff.length; i++)\n mEdit.edits.push([ OT.OpCounterAdd, aDiff[i], oNew[aDiff[i]] ]);\n\n // Also propagate deletes if REPLACE mode\n if (mode == REPLACE)\n {\n for (var p in oOld) if (oOld.hasOwnProperty(p))\n if (oNew[p] === undefined)\n mEdit.edits.push([ OT.OpCounterDel, p, 0 ]);\n }\n\n if (mEdit.edits.length)\n {\n this.startLocalEdit();\n this.root.edits.push(mEdit);\n }\n }\n\n editObject(rid: string, oNew: any, mode: number = MERGE): void\n {\n if (rid === 'stamps')\n {\n this.editCounter(rid, oNew, mode);\n return;\n }\n\n let oOld = this.engine.toPartialValue(rid);\n let aDiff: string[] = keyDiff(oOld, oNew);\n \n let mEdit = new OT.OTMapResource(rid);\n\n // Propagate sets\n for (let i: number = 0; i < aDiff.length; i++)\n mEdit.edits.push([ OT.OpMapSet, aDiff[i], oNew[aDiff[i]] ]);\n\n // Also propagate deletes if REPLACE mode\n if (mode == REPLACE)\n {\n for (var p in oOld) if (oOld.hasOwnProperty(p))\n if (oNew[p] === undefined)\n mEdit.edits.push([ OT.OpMapDel, p, 0 ]);\n }\n\n if (mEdit.edits.length)\n {\n this.startLocalEdit();\n this.root.edits.push(mEdit);\n }\n }\n\n editArray(rid: string, aNew: any[]): void\n {\n let aOld = this.engine.toPartialValue(rid);\n if (aOld == null) aOld = [];\n if (Util.deepEqual(aNew, aOld))\n return;\n\n let aEdit = new OT.OTArrayResource(rid);\n\n let i: number = 0;\n let iRetain: number = 0;\n for (; i < aNew.length && i < aOld.length; i++)\n if (Util.deepEqual(aNew[i], aOld[i]))\n iRetain++;\n else\n {\n if (iRetain > 0)\n {\n aEdit.edits.push([ OT.OpRetain, iRetain, [] ] );\n iRetain = 0;\n }\n aEdit.edits.push([ OT.OpSet, 1, [ aNew[i] ] ]);\n }\n // Preserve equal ones at end\n if (iRetain > 0)\n aEdit.edits.push([ OT.OpRetain, iRetain, [] ] );\n // Add new ones\n if (aNew.length > i)\n aEdit.edits.push([ OT.OpInsert, aNew.length - i, aNew.slice(i) ]);\n // Or delete old ones\n else if (aOld.length > i)\n aEdit.edits.push([ OT.OpDelete, aOld.length - i, [] ]);\n\n if (aEdit.edits.length)\n {\n this.startLocalEdit();\n this.root.edits.push(aEdit);\n }\n }\n\n edit(oNew: any): boolean\n {\n for (var p in oNew) if (oNew.hasOwnProperty(p))\n if (Array.isArray(oNew[p]))\n this.editArray(p, oNew[p]);\n else\n this.editObject(p, oNew[p]);\n return this.commit();\n }\n\n get length(): number\n {\n return this.root && this.root.edits ? this.root.edits.length : 0;\n }\n\n commit(): boolean\n {\n if (this.root)\n {\n try\n {\n if (this.root.edits.length)\n this.engine.addLocalEdit(this.root);\n this.root = null;\n this.stamps = null;\n return true;\n }\n catch (err)\n {\n // Really would like to log this, but effectively this is a programming error of mismatched bases.\n return false;\n }\n }\n }\n}\n\nfunction keyDiff(oOld: any, oNew: any): string[]\n\t{\n\t\tif (oNew == null)\n\t\t\treturn [];\n\n\t\tlet aDiff: string[] = [];\n\t\tfor (var p in oNew) if (oNew.hasOwnProperty(p))\n\t\t\t{\n\t\t\t\tif (oOld == null || oOld[p] === undefined)\n\t\t\t\t\taDiff.push(p)\n\t\t\t\telse if (! Util.deepEqual(oNew[p], oOld[p]))\n\t\t\t\t\taDiff.push(p);\n\t\t\t}\n\t\treturn aDiff;\n\t}\n","export * from \"./otarray\";\nexport * from \"./otengine\";\nexport * from \"./otclientengine\";\nexport * from \"./otcomposite\";\nexport * from \"./otmap\";\nexport * from \"./otcounter\";\nexport * from \"./otserverengine\";\nexport * from \"./ottypes\";\nexport * from \"./otsession\";\n","import * as OT from \"./ottypes\";\n\nconst TestUnitSize: number = 4;\nlet TestCounter: number = 0;\n\n// Array Ops\nexport const OpInsert: number = 1;\nexport const OpDelete: number = 2;\nexport const OpRetain: number = 3;\nexport const OpCursor: number = 4;\t// 2nd arg is 0/1 for start/end of region, 3rd arg is clientID\nexport const OpSet: number = 5;\nexport const OpTmpRetain: number = 6;\n\n// Op, Len, Data\nexport type OTSingleArrayEdit = [number, number, any];\nexport type OTEdits = OTSingleArrayEdit[];\n\nenum OTalignEdgesType { AlignForCompose, AlignForTransform };\n\n// Set of interfaces that operates on the underlying array-like value type.\n// If more efficient, can modify the initial argument and simply return it.\n// Alternatively, can create new instance and return it (string works this way since\n// underlying type is immutable).\n// This is used for the array-like specialization of IOTInterface\nexport interface IOTArrayLikeOperations\n{\n\tunderlyingTypeName(): string;\n\n\t// Return empty instance\n\tempty(): any;\n\n\t// Insert new instance at position specified\n\tinsert(t: any, pos: number, tInsert: any): any;\t\t\t\t// Can modify input\n\n\t// Delete part of instance\n\tdelete(t: any, pos: number, len: number): any;\t\t\t\t// Can modify input\n\n\t// Set value of part of instance\n\tset(t: any, pos: number, tSet: any): any;\t\t\t\t\t// Can modify input\n\n\t// append to instance (insert at end)\n\tappend(t: any, tAppend: any): any;\t\t\t\t\t\t\t// Can modify input\n\n\t// Take substring of instance\n\tsubstr(t: any, pos: number, len: number): any;\t\t\t\t// Can modify input\n\n\t// Take substring of provided base value type and set\n\tsubstrOf(t: any, pos: number, len: number, tsub: any): any;\t// Cannot modify input\n\n\t// Construct an instance N long\n\tconstructN(n: number): any;\n\n\t// Test for equality\n\tequal(t1: any, t2: any): boolean;\n\n\t// copy an instance\n\tcopy(t: any): any;\t\t\t\t\t\t\t\t\t\t\t// Need to do deep copy if T is mutable.\n\n\t// Return length of instance\n\tlength(t: any): number;\n};\n\n// Operates on a single \"OTSingleArrayEdit\", parameterized by an object that manipulates the underlying\n// array-like value stored as the third property of the 3-element edit object.\nexport class OTSingleArrayEditor\n{\n\traw: IOTArrayLikeOperations;\n\n\tconstructor(raw: IOTArrayLikeOperations)\n\t\t{\n\t\t\tthis.raw = raw;\n\t\t}\n\n\tcopy(a: OTSingleArrayEdit): OTSingleArrayEdit \t\t// If a[2] is mutable, need to override and do deep copy\n\t\t{ return [ a[0], a[1], this.raw.copy(a[2]) ]; }\n\n\t// Static Predicates for MoveAction\n\tisDelete(a: OTSingleArrayEdit): boolean { return a[0] == OpDelete; }\n\tisNotDelete(a: OTSingleArrayEdit): boolean { return a[0] != OpDelete; }\n\tisCursor(a: OTSingleArrayEdit): boolean { return a[0] == OpCursor; }\n\tisNotCursor(a: OTSingleArrayEdit): boolean { return a[0] != OpCursor; }\n\tisTmpRetain(a: OTSingleArrayEdit): boolean { return a[0] == OpTmpRetain; }\n\tisNotTmpRetainOrDelete(a: OTSingleArrayEdit): boolean { return (a[0] != OpTmpRetain && a[0] != OpDelete); }\n\tisTmpRetainOrDelete(a: OTSingleArrayEdit): boolean { return (a[0] == OpTmpRetain || a[0] == OpDelete); }\n\n\t// Other static predicates\n\tisIgnore(a: OTSingleArrayEdit): boolean { return a[0] < 0; }\n\tisNoOp(a: OTSingleArrayEdit): boolean { return a[1] === 0 && a[0] != OpCursor; }\n\tisEqual(a1: OTSingleArrayEdit, a2: OTSingleArrayEdit) { return a1[0] == a2[0] && a1[1] == a2[1] && this.raw.equal(a1[2], a2[2]); }\n\n\t// Helpers\n\tappendValue(a: OTSingleArrayEdit, s: any): void\n\t\t{ a[2] = this.raw.append(a[2], s); a[1] = a[1] + this.raw.length(s); }\n\tempty(a: OTSingleArrayEdit): void { a[0] = OpCursor; a[1] = 0; a[2] = this.raw.empty(); }\n\tsetIgnore(a: OTSingleArrayEdit): void { if (a[0] > 0) a[0] = - a[0]; }\n\tsubstr(aIn: OTSingleArrayEdit, pos: number, len: number): void\n\t\t{\n\t\t\tlet sSource: any = aIn[2];\n\t\t\tif (len > 0 && pos+len <= this.raw.length(sSource))\n\t\t\t\taIn[2] = this.raw.substr(sSource, pos, len);\n\t\t\taIn[1] = len;\n\t\t}\n\tsubstrFromRaw(aIn: OTSingleArrayEdit, pos: number, len: number, s: any): void\n\t\t{\n\t\t\tlet sSource: any = s;\n\t\t\tif (len > 0 && pos+len <= this.raw.length(sSource))\n\t\t\t\taIn[2] = this.raw.substr(sSource, pos, len);\n\t\t\taIn[1] = len;\n\t\t}\n\tcopyWithSubstr(aIn: OTSingleArrayEdit, pos: number, len: number): OTSingleArrayEdit\n\t\t{\n\t\t\tlet aOut: OTSingleArrayEdit = this.copy(aIn);\n\t\t\tthis.substr(aOut, pos, len);\n\t\t\treturn aOut;\n\t\t}\n};\n\nexport class OTStringOperations implements IOTArrayLikeOperations\n{\n\tunderlyingTypeName(): string { return 'string'; }\n\tempty(): any { return ''; }\n\tinsert(a: any, pos: number, aInsert: any): any\n\t\t{\n\t\t\tlet s: string = a as string;\n\t\t\tlet sInsert: string = aInsert as string;\n\t\t\treturn s.substr(0, pos) + sInsert + s.substr(pos);\n\t\t}\n\tdelete(a: any, pos: number, len: number): any\n\t\t{\n\t\t\tlet s: string = a as string;\n\t\t\treturn s.substr(0, pos) + s.substr(pos+len);\n\t\t}\n\tset(a: any, pos: number, aSet: any): any\n\t\t{\n\t\t\tlet s: string = a as string;\n\t\t\tlet sSet: string = aSet as string;\n\t\t\treturn s.substr(0, pos) + sSet + s.substr(pos+sSet.length);\n\t\t}\n\tappend(a: any, aAppend: any): any\n\t\t{\n\t\t\tlet s: string = a as string;\n\t\t\tlet sAppend: string = aAppend as string;\n\t\t\treturn s + sAppend;\n\t\t}\n\tsubstr(a: any, pos: number, len: number): any\t\t\t\t\t// Can modify source\n\t\t{\n\t\t\tlet s: string = a as string;\n\t\t\treturn s.substr(pos, len);\n\t\t}\n\tsubstrOf(a: any, pos: number, len: number, aSub: any): any\t\t\t// Copies from tsub argument\n\t\t{\n\t\t\t// a unused if not updated with return value contents\n\t\t\tlet sSub: string = aSub as string;\n\t\t\treturn sSub.substr(pos, len);\n\t\t}\n\tconstructN(n: number): any\n\t\t{\n\t\t\tlet x = ' ';\n\t\t\tlet s = '';\n\t\t\tfor (;;)\n\t\t\t{\n\t\t\t\tif (n & 1)\n\t\t\t\t\ts += x;\n\t\t\t\tn >>= 1;\n\t\t\t\tif (n)\n\t\t\t\t\tx += x;\n\t\t\t\telse\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn s;\n\t\t}\n\tequal(a1: any, a2: any): boolean\n\t\t{\n\t\t\tlet s1: string = a1 as string;\n\t\t\tlet s2: string = a2 as string;\n\t\t\treturn s1 === s2;\n\t\t}\n\tcopy(a: any): any { return a; }\n\tlength(a: any): number { return a.length; }\n};\n\nexport class OTArrayOperations implements IOTArrayLikeOperations\n{\n\tunderlyingTypeName(): string { return 'array'; }\n\tempty(): any { return []; }\n\tinsert(a: any, pos: number, aInsert: any): any\n\t\t{\n\t\t\tlet arr: Array<any> = a as Array<any>;\n\t\t\tlet arrInsert: Array<any> = aInsert as Array<any>;\n\t\t\tlet arrReturn = Array(arr.length + arrInsert.length);\n\t\t\tlet i: number, j: number;\n\t\t\tfor (i = 0; i < pos; i++)\n\t\t\t\tarrReturn[i] = arr[i];\n\t\t\tfor (j = 0; j < arrInsert.length; j++)\n\t\t\t\tarrReturn[i+j] = arrInsert[j];\n\t\t\tfor (i = pos; i < arr.length; i++)\n\t\t\t\tarrReturn[i+j] = arr[i];\n\t\t\treturn arrReturn;\n\t\t}\n\tdelete(a: any, pos: number, len: number): any\n\t\t{\n\t\t\tlet arr: Array<any> = a as Array<any>;\n\t\t\tarr.splice(pos, len);\n\t\t\treturn arr;\n\t\t}\n\tset(a: any, pos: number, aSet: any): any\n\t\t{\n\t\t\tlet arr: Array<any> = a as Array<any>;\n\t\t\tlet arrSet: Array<any> = aSet as Array<any>;\n\t\t\tfor (let i: number = 0; i < arrSet.length; i++)\n\t\t\t\tarr[i+pos] = arrSet[i];\n\t\t\treturn arr;\n\t\t}\n\tappend(a: any, aAppend: any): any\n\t\t{\n\t\t\tlet arr: Array<any> = a as Array<any>;\n\t\t\tlet arrAppend: Array<any> = aAppend as Array<any>;\n\t\t\treturn arr.concat(arrAppend);\n\t\t}\n\tsubstr(a: any, pos: number, len: number): any\t\t\t\t\t// Can modify source\n\t\t{\n\t\t\tlet arr: Array<any> = a as Array<any>;\n\t\t\treturn arr.slice(pos, pos+len);\n\t\t}\n\tsubstrOf(a: any, pos: number, len: number, aSub: any): any\t\t\t// Copies from tsub argument\n\t\t{\n\t\t\t// a unused if not updated with return value contents\n\t\t\tlet arrSub: Array<any> = aSub as Array<any>;\n\t\t\treturn arrSub.slice(pos, pos+len);\n\t\t}\n\tconstructN(n: number): any\n\t\t{\n\t\t\treturn new Array(n);\n\t\t}\n\tequal(a1: any, a2: any): boolean\n\t\t{\n\t\t\tlet arr1: Array<any> = a1 as Array<any>;\n\t\t\tlet arr2: Array<any> = a2 as Array<any>;\n\t\t\tif (arr1.length != arr2.length)\n\t\t\t\treturn false;\n\t\t\tfor (let i: number = 0; i < arr1.length; i++)\n\t\t\t\tif (arr1[i] !== arr2[i])\n\t\t\t\t\treturn false;\n\t\t\treturn true;\n\t\t}\n\tcopy(a: any): any\n\t\t{\n\t\t\tlet arr: Array<any> = a as Array<any>;\n\t\t\tlet arrRet = new Array(arr.length);\n\t\t\tfor (let i: number = 0; i < arr.length; i++)\n\t\t\t\tarrRet[i] = arr[i];\n\t\t\treturn arrRet;\n\t\t}\n\tlength(a: any): number\n\t\t{\n\t\t\treturn a.length;\n\t\t}\n};\n\nexport class OTArrayLikeResource extends OT.OTResourceBase\n{\n\teditor: OTSingleArrayEditor;\n\n\tconstructor(ed: OTSingleArrayEditor, rname: string)\n\t\t{\n\t\t\tsuper(rname, ed.raw.underlyingTypeName());\n\t\t\tthis.editor = ed;\n\t\t}\n\n\tcopy(): OTArrayLikeResource\n\t\t{\n\t\t\treturn null;\t// Needs to be overridden\n\t\t}\n\n\tmoveEdits(newA: OTEdits, iStart: number, iEnd?: number, pred?: (a: OTSingleArrayEdit) => boolean)\n\t\t{\n\t\t\tif (iEnd == undefined)\n\t\t\t\tiEnd = this.edits.length - 1;\n\n\t\t\tfor (; iStart <= iEnd; iStart++)\n\t\t\t{\n\t\t\t\tlet a: OTSingleArrayEdit = this.edits[iStart];\n\t\t\t\tif (!this.editor.isIgnore(a) && (pred == undefined || pred(a)))\n\t\t\t\t\tnewA.push(a);\n\t\t\t}\n\t\t}\n\n\tequal(rhs: OTArrayLikeResource): boolean\n\t\t{\n\t\t\tif (this.length != rhs.length)\n\t\t\t\treturn false;\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t\tif (! this.editor.isEqual(this.edits[i], rhs.edits[i]))\n\t\t\t\t\treturn false;\n\t\t\treturn true;\n\t\t}\n\n\t// Function: OTArrayLikeResource::effectivelyEqual\n\t//\n\t// Description:\n\t//\tA looser definition than operator==. Returns true if two actions would result in the\n\t//\tsame final string. This ignores no-ops like OpCursor and allows different orderings of\n\t//\tinserts and deletes at the same location.\n\t//\n\t// Played around with different algorithms, but the simplest is probably just to apply\n\t//\tthe two actions and see if I get the same final string. Came up with an interesting\n\t//\talgorithm of walking through comparing hashes, but that was not robust to operations\n\t//\tbeing split into fragments and interposed with alternate ops (OpCursor or interleaving of Ins/Del)\n\t//\tthat still leave the string the same. If unhappy with this approach (which scales with size\n\t//\tof string to edit rather than complexity of the edit), the other approach would be to canonicalize\n\t//\tthe edit operations (including removing cursor operations and normalizing order of deletes).\n\t//\t(Added that version of the algorithm under #ifdef). Could also dynamically choose approach based\n\t//\ton relative size of arrays.\n\t//\n\teffectivelyEqual(rhs: OTArrayLikeResource): boolean\n\t\t{\n\t\t\t// Exactly equal is always effectively equal\n\t\t\tif (this.equal(rhs))\n\t\t\t\treturn true;\n\n\t\t\tif (this.originalLength() != rhs.originalLength())\n\t\t\t\treturn false;\n\n\t\t\t// Preferred algorithm\n\t\t\tlet s: any = this.editor.raw.constructN(this.originalLength());\n\n\t\t\tlet sL: any = this.apply(s);\n\t\t\tlet sR: any = rhs.apply(s);\n\t\t\treturn sL === sR;\n\n\t\t\t// Alternate algorithm (see above)\n\t\t\t//let aL: OTArrayLikeResource = this.copy();\n\t\t\t//let aR: OTArrayLikeResource = rhs.copy();\n\n\t\t\t//aL.fullyCoalesce();\n\t\t\t//aR.fullyCoalesce();\n\t\t\t//return aL.equal(aR);\n\t\t}\n\n\tbasesConsistent(rhs: OTArrayLikeResource): void\n\t\t{\n\t\t\tif (this.originalLength() != rhs.originalLength())\n\t\t\t{\n\t\t\t\tconsole.log(\"Logic Failure: transform: Bases Inconsistent.\");\n\t\t\t\tthrow(\"Logic Failure: transform: Bases Inconsistent.\");\n\t\t\t}\n\t\t}\n\n\toriginalLength(): number\n\t\t{\n\t\t\tlet len: number = 0;\n\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet a: OTSingleArrayEdit = this.edits[i];\n\t\t\t\tif (a[0] == OpRetain || a[0] == OpDelete || a[0] == OpSet)\n\t\t\t\t\tlen += a[1];\n\t\t\t}\n\t\t\treturn len;\n\t\t}\n\n\tfinalLength(): number\n\t\t{\n\t\t\tlet len: number = 0;\n\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet a: OTSingleArrayEdit = this.edits[i];\n\t\t\t\tif (a[0] == OpRetain || a[0] == OpInsert || a[0] == OpSet)\n\t\t\t\t\tlen += a[1];\n\t\t\t}\n\t\t\treturn len;\n\t\t}\n\n\tapply(aValue: any): any\n\t\t{\n\t\t\tif (aValue == null)\n\t\t\t\taValue = this.editor.raw.empty();\n\t\t\tlet pos: number = 0;\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet a: OTSingleArrayEdit = this.edits[i];\n\n\t\t\t\tswitch (a[0])\n\t\t\t\t{\n\t\t\t\t\tcase OpRetain:\n\t\t\t\t\t\tpos += a[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpCursor:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpDelete:\n\t\t\t\t\t\taValue = this.editor.raw.delete(aValue, pos, a[1]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpInsert:\n\t\t\t\t\t\taValue = this.editor.raw.insert(aValue, pos, a[2]);\n\t\t\t\t\t\tpos += a[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpSet:\n\t\t\t\t\t\taValue = this.editor.raw.set(aValue, pos, a[2]);\n\t\t\t\t\t\tpos += a[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn aValue;\n\t\t}\n\n\tcoalesce(bDeleteCursor: boolean = false): void\n\t\t{\n\t\t\tif (this.length == 0)\n\t\t\t\treturn;\n\n\t\t\t// coalesce adjoining actions and delete no-ops\n\t\t\tlet newA: OTEdits = [];\n\t\t\tlet aLast: OTSingleArrayEdit;\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet aNext: OTSingleArrayEdit = this.edits[i];\n\t\t\t\tif (this.editor.isNoOp(aNext) || (bDeleteCursor && aNext[0] == OpCursor))\n\t\t\t\t\tcontinue;\n\n\t\t\t\tif (newA.length > 0 && aNext[0] == aLast[0])\n\t\t\t\t{\n\t\t\t\t\tif (aNext[0] == OpInsert || aNext[0] == OpSet)\n\t\t\t\t\t\tthis.editor.appendValue(aLast, aNext[2]);\n\t\t\t\t\telse\n\t\t\t\t\t\taLast[1] += aNext[1];\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tnewA.push(aNext);\n\t\t\t\t\taLast = aNext;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.edits = newA;\n\t\t}\n\n\t// Function: fullyCoalesce\n\t//\n\t// Description:\n\t//\tHeavier duty version of coalesce that fully normalizes so that two actions that result in same\n\t//\tfinal edit are exactly the same. This normalizes order of insert/deletes and deletes OpCursor,\n\t//\tand then does coalesce.\n\t//\n\tfullyCoalesce(): void\n\t\t{\n\t\t\t// TODO\n\t\t\tthis.coalesce(true);\n\t\t}\n\n\t// Function: Invert\n\t//\n\t// Description:\n\t//\tGiven an action, convert it to its inverse (action + inverse) = identity (retain(n)).\n\t//\n\t//\tNote that in order to compute the inverse, you need the input state (e.g. because in order to invert\n\t//\tOpDelete, you need to know the deleted characters.\n\t//\n\tinvert(sInput: any): void\n\t\t{\n\t\t\tlet pos: number = 0;\t// Tracks position in input string.\n\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet a: OTSingleArrayEdit = this.edits[i];\n\n\t\t\t\tswitch (a[0])\n\t\t\t\t{\n\t\t\t\t\tcase OpCursor:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpRetain:\n\t\t\t\t\t\tpos += a[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpInsert:\n\t\t\t\t\t\ta[2] = '';\n\t\t\t\t\t\ta[0] = OpDelete;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpDelete:\n\t\t\t\t\t\ta[2] = this.editor.copyWithSubstr(sInput, pos, a[1]);\n\t\t\t\t\t\ta[0] = OpInsert;\n\t\t\t\t\t\tpos += a[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpSet:\n\t\t\t\t\t\ta[2] = this.editor.copyWithSubstr(sInput, pos, a[1]);\n\t\t\t\t\t\tpos += a[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t// Function: alignEdges\n\t//\n\t// Description:\n\t//\tSlice up this action sequence so its edges align with the action sequence I am going to\n\t//\tprocess it with. The processing (compose or transform) determines which actions Slice\n\t//\ttakes into account when moving the parallel counters forward. When processing for\n\t//\tcompose, deletes in rhs can be ignored. When processing for transform, inserts in both\n\t//\tlhs and rhs can be ignored.\n\t//\t\n\n\talignEdges(rhs: OTArrayLikeResource, st: OTalignEdgesType): void\n\t\t{\n\t\t\tlet posR: number = 0;\n\t\t\tlet posL: number = 0;\n\t\t\tlet iL: number = 0;\n\t\t\tlet newA: OTEdits = [];\n\t\t\tlet aAfter: OTSingleArrayEdit = undefined;\n\t\t\tlet aL: OTSingleArrayEdit = undefined;\n\n\t\t\tfor (let iR: number = 0; iR < rhs.length; iR++)\n\t\t\t{\n\t\t\t\tlet aR: OTSingleArrayEdit = rhs.edits[iR];\n\n\t\t\t\tswitch (aR[0])\n\t\t\t\t{\n\t\t\t\t\tcase OpCursor:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpInsert:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpDelete:\n\t\t\t\t\t\tposR += aR[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpSet:\n\t\t\t\t\t\tposR += aR[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpRetain:\n\t\t\t\t\t\tposR += aR[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// Advance iL/posL to equal to posR\n\t\t\t\twhile (posL < posR && (aAfter != undefined || iL < this.length))\n\t\t\t\t{\n\t\t\t\t\tif (aAfter == undefined)\n\t\t\t\t\t{\n\t\t\t\t\t\taL = this.edits[iL];\n\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\tiL++;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\taL = aAfter;\n\t\t\t\t\t}\n\n\t\t\t\t\tswitch (aL[0])\n\t\t\t\t\t{\n\t\t\t\t\t\tcase OpCursor:\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase OpInsert:\n\t\t\t\t\t\t\tif (st == OTalignEdgesType.AlignForCompose) posL += aL[1];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase OpDelete:\n\t\t\t\t\t\t\tif (st == OTalignEdgesType.AlignForTransform) posL += aL[1];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase OpSet:\n\t\t\t\t\t\t\tposL += aL[1];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase OpRetain:\n\t\t\t\t\t\t\tposL += aL[1];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Split this one if it spans boundary\n\t\t\t\t\tif (posL > posR)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet nRight: number = posL - posR;\n\t\t\t\t\t\tlet nLeft: number = aL[1] - nRight;\n\n\t\t\t\t\t\taAfter = this.editor.copyWithSubstr(aL, nLeft, nRight);\n\t\t\t\t\t\tthis.editor.substr(aL, 0, nLeft);\n\t\t\t\t\t\tnewA.push(aAfter);\n\t\t\t\t\t\tposL = posR;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\taAfter = undefined;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Append any we missed\n\t\t\tthis.moveEdits(newA, iL);\n\n\t\t\tthis.edits = newA;\n\t\t}\n\t\n\tgetCursorCache(): any\n\t\t{\n\t\t\tlet cursorCache: any = { };\n\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet a: OTSingleArrayEdit = this.edits[i];\n\n\t\t\t\tif (a[0] == OpCursor && a[2] != null)\n\t\t\t\t\tcursorCache[a[2]] = '';\n\t\t\t}\n\t\t\treturn cursorCache;\n\t\t}\n\n\t// Function: compose\n\t//\n\t// Description:\n\t//\tcompose the current action with the action passed in. This alters the current action.\n\t//\n\t//\tBasic structure is to walk through the RHS list of actions, processing each one in turn.\n\t//\tThat then drives the walk through the left hand side and the necessary edits. I use\n\t//\t\"posR\" and \"posL\" to work through equivalent positions in the two strings being edited.\n\t//\tDeletions in the LHS don't effect posL because they don't show up in the input string to RHS.\n\t//\tSimilarly, insertions in the RHS don't effect posR since they have no equivalent string location\n\t//\tin the LHS.\t(Note transform follows similar structure but different logic for how posR and posL\n\t//\ttrack each other since in that case they are effectively referencing the same input string.)\n\t//\n\tcompose(rhs: OTArrayLikeResource): void\n\t\t{\n\t\t\tlet cursorCache: any = rhs.getCursorCache();\n\n\t\t\tif (this.length == 0)\n\t\t\t{\n\t\t\t\tthis.edits = rhs.edits.map(this.editor.copy, this.editor);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse if (rhs.edits.length == 0)\n\t\t\t\treturn;\n\n\t\t\tif (this.finalLength() != rhs.originalLength())\n\t\t\t{\n\t\t\t\tconsole.log(\"Logic Failure: compose: Bases Inconsistent.\");\n\t\t\t\tthrow(\"Logic Failure: compose: Bases Inconsistent.\");\n\t\t\t}\n\n\t\t\t// Break overlapping segments before start to simplify logic below.\n\t\t\tthis.alignEdges(rhs, OTalignEdgesType.AlignForCompose);\n\n\t\t\t// Iterate with parallel position markers in two arrays\n\t\t\tlet posR: number = 0;\n\t\t\tlet posL: number = 0;\n\t\t\tlet iL: number = 0;\n\t\t\tlet bDone: boolean;\n\t\t\tlet newA: OTSingleArrayEdit[] = [];\n\n\t\t\tfor (let iR: number = 0; iR < rhs.length; iR++)\n\t\t\t{\n\t\t\t\tlet aR: OTSingleArrayEdit = rhs.edits[iR];\n\n\t\t\t\tswitch (aR[0])\n\t\t\t\t{\n\t\t\t\t\tcase OpRetain:\n\t\t\t\t\t\tposR += aR[1];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase OpSet:\n\t\t\t\t\tcase OpDelete:\n\t\t\t\t\tcase OpInsert:\n\t\t\t\t\tcase OpCursor:\n\t\t\t\t\t\t// Advance to cursor location\n\t\t\t\t\t\tbDone = false;\n\t\t\t\t\t\twhile (!bDone && iL < this.length)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlet aL: OTSingleArrayEdit = this.edits[iL];\n\n\t\t\t\t\t\t\tswitch (aL[0])\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcase OpCursor:\n\t\t\t\t\t\t\t\t\t// Only copy old cursor locations if they aren't empty and aren't duplicated in this rhs.\n\t\t\t\t\t\t\t\t\tif (aL[2] != '' && cursorCache[aL[2]] === undefined)\n\t\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\tiL++;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase OpSet:\n\t\t\t\t\t\t\t\tcase OpRetain:\n\t\t\t\t\t\t\t\tcase OpInsert:\n\t\t\t\t\t\t\t\t\tif (posL == posR)\n\t\t\t\t\t\t\t\t\t\tbDone = true;\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposL += aL[1];\n\t\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\t\tiL++;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase OpDelete:\n\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\tiL++;\t// Move past since deletes are not referenced by RHS\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (aR[0] == OpDelete)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// Remove sequence of cursor, insert, retains, sets, replaced by delete.\n\t\t\t\t\t\t\t// Note that insert/delete cancel each other out, so there is a bit of complexity there.\n\t\t\t\t\t\t\tlet nChange: number = aR[1];\n\t\t\t\t\t\t\tlet nRemain: number = aR[1];\n\t\t\t\t\t\t\tfor (; nChange > 0 && iL < this.length; iL++)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlet aL: OTSingleArrayEdit = this.edits[iL];\n\n\t\t\t\t\t\t\t\tswitch (aL[0])\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tcase OpCursor:\n\t\t\t\t\t\t\t\t\t\t// Only copy old cursor locations if they aren't empty and aren't duplicated in this rhs.\n\t\t\t\t\t\t\t\t\t\tif (aL[2] != '' && cursorCache[aL[2]] === undefined)\n\t\t\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase OpDelete:\n\t\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase OpSet:\n\t\t\t\t\t\t\t\t\tcase OpRetain:\n\t\t\t\t\t\t\t\t\tcase OpInsert:\n\t\t\t\t\t\t\t\t\t\tnRemain -= aL[0] == OpInsert ? aL[1] : 0;\n\t\t\t\t\t\t\t\t\t\tnChange -= aL[1];\n\t\t\t\t\t\t\t\t\t\t// Don't copy into new array\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Now add in the delete\n\t\t\t\t\t\t\tif (nRemain > 0)\n\t\t\t\t\t\t\t\tnewA.push([ OpDelete, nRemain, '' ]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (aR[0] == OpSet)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// Process sequence of cursor, insert, retains, sets\n\t\t\t\t\t\t\tlet nChange: number = aR[1];\n\t\t\t\t\t\t\tfor (; nChange > 0 && iL < this.length; iL++)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlet aL: OTSingleArrayEdit = this.edits[iL];\n\t\t\t\t\t\t\t\tlet opL: number = OpInsert;\n\n\t\t\t\t\t\t\t\tswitch (aL[0])\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tcase OpCursor:\n\t\t\t\t\t\t\t\t\t\t// Only copy old cursor locations if they aren't empty and aren't duplicated in this rhs.\n\t\t\t\t\t\t\t\t\t\tif (aL[2] != '' && cursorCache[aL[2]] === undefined)\n\t\t\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase OpDelete:\n\t\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase OpSet:\n\t\t\t\t\t\t\t\t\tcase OpRetain:\n\t\t\t\t\t\t\t\t\t\topL = OpSet;\n\t\t\t\t\t\t\t\t\t\t// fallthrough\n\t\t\t\t\t\t\t\t\tcase OpInsert:\n\t\t\t\t\t\t\t\t\t\t// A Set composed with Insert becomes Insert of Set content\n\t\t\t\t\t\t\t\t\t\tthis.editor.substrFromRaw(aL, aR[1]-nChange, aL[1], aR[2]);\n\t\t\t\t\t\t\t\t\t\taL[0] = opL;\n\t\t\t\t\t\t\t\t\t\tnChange -= aL[1];\n\t\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse // cursor, insert\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// Add in the RHS operation at proper location\n\t\t\t\t\t\t\tnewA.push(this.editor.copy(aR));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// copy any remaining actions, excluding cursors duplicated in rhs\n\t\t\tthis.moveEdits(newA, iL, this.length-1,\n\t\t\t\tfunction (e: OTSingleArrayEdit)\n\t\t\t\t\t{ return (e[0] != OpCursor) || (e[2] != '' && cursorCache[e[2]] === undefined) } );\n\n\t\t\tthis.edits = newA;\n\n\t\t\tthis.coalesce();\n\t\t}\n\n\ttryCompose(rhs: OTArrayLikeResource): boolean\n\t\t{\n\t\t\tif (this.length == 0)\n return true;\n\t\t\telse if (rhs.edits.length == 0)\n\t\t\t\treturn true;\n\n\t\t\treturn this.finalLength() == rhs.originalLength();\n }\n\n\tperformTransformReorder(bForceRetainBeforeInsert: boolean, newA: OTEdits, iBegin: number, iEnd: number): void\n\t\t{\n\t\t\tif (iBegin < 0 || iBegin > iEnd) return;\n\t\t\tif (bForceRetainBeforeInsert)\n\t\t\t{\n\t\t\t\tthis.moveEdits(newA, iBegin, iEnd, this.editor.isTmpRetainOrDelete);\n\t\t\t\tthis.moveEdits(newA, iBegin, iEnd, this.editor.isNotTmpRetainOrDelete);\t// Is Insert or Cursor\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.moveEdits(newA, iBegin, iEnd, this.editor.isNotTmpRetainOrDelete);\t// Is Insert or Cursor\n\t\t\t\tthis.moveEdits(newA, iBegin, iEnd, this.editor.isTmpRetainOrDelete);\n\t\t\t}\n\t\t}\n\n\t// Function: normalizeNewRetainsAfterTransform\n\t//\n\t// Description:\n\t//\tHelper function for transform() that does a post-processing pass to ensure that all\n\t//\tRetains are properly ordered with respect to Inserts that occur at the same location\n\t//\t(either before or after, depending on whether we are transforming based on server or client side).\n\t//\tThis ensures that the transform process is not sensitive to precise ordering of Inserts and\n\t//\tRetains (since that ordering doesn't actually change the semantics of the edit performed and\n\t//\ttherefore should not result in a difference in processing here). And yes, it's a subtle issue\n\t//\tthat may not actually occur in real edits produced by some particular editor but does arise when\n\t//\ttesting against randomly generated edit streams.\n\t//\n\t//\tA side consequence is also normalizing the ordering of inserts and deletes which also doesn't\n\t//\tchange the semantics of the edit but ensures we properly detect conflicting insertions.\n\t//\n\t//\tThe way to think of this algorithm is that Set's and Retains (pre-existing, not new TmpRetains) form\n\t//\thard boundaries in the ordering. The series of Cursor/TmpRetain/Insert/Deletes between Sets and Retains\n\t//\tare re-ordered by this algorithm. TmpRetain's get pushed to the front or the back depending on the bForce\n\t//\tflag passed in (which reflects which operation had precedence).\n\t//\n\tnormalizeNewRetainsAfterTransform(bForceRetainBeforeInsert: boolean): void\n\t\t{\n\t\t\tif (this.length == 0)\n\t\t\t\treturn;\n\n\t\t\tlet i: number = 0;\n\t\t\tlet newA: OTSingleArrayEdit[] = [];\n\t\t\tlet iLastEdge: number = 0;\n\n\t\t\t// Normalize ordering for newly insert retains so they are properly ordered\n\t\t\t// with respect to inserts occurring at the same location.\n\t\t\tfor (i = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet a: OTSingleArrayEdit = this.edits[i];\n\t\t\t\tif (a[0] == OpSet || a[0] == OpRetain)\n\t\t\t\t{\n\t\t\t\t\tthis.performTransformReorder(bForceRetainBeforeInsert, newA, iLastEdge, i-1);\n\t\t\t\t\tnewA.push(a);\n\t\t\t\t\tiLastEdge = i+1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.performTransformReorder(bForceRetainBeforeInsert, newA, iLastEdge, this.length-1);\n\n\t\t\t// One last time to switch TmpRetain to Retain\n\t\t\tfor (i = 0; i < newA.length; i++)\n\t\t\t\tif ((newA[i])[0] == OpTmpRetain)\n\t\t\t\t\t(newA[i])[0] = OpRetain;\n\t\t\tthis.edits = newA;\n\t\t}\n\n tryTransform(prior: OTArrayLikeResource, bPriorIsService: boolean): boolean\n {\n\t\t\tif (this.length == 0 || prior.length == 0)\n\t\t\t\treturn true;\n\n\t\t\treturn this.originalLength() == prior.originalLength();\n }\n\n\ttransform(prior: OTArrayLikeResource, bPriorIsService: boolean): void\n\t\t{\n\t\t\tif (this.length == 0 || prior.length == 0)\n\t\t\t\treturn;\n\n\t\t\t// Validate\n\t\t\tthis.basesConsistent(prior);\n\n\t\t\t// Break overlapping segments before start to simplify logic below.\n\t\t\tthis.alignEdges(prior, OTalignEdgesType.AlignForTransform);\n\n\t\t\tlet posR: number = 0; // These walk in parallel across the consistent base strings (only retains, sets and deletes count)\n\t\t\tlet posL: number = 0;\n\t\t\tlet iL: number = 0;\n\t\t\tlet bDone: boolean;\n\t\t\tlet newA: OTEdits = [];\n\n\t\t\tfor (let iR: number = 0; iR < prior.length; iR++)\n\t\t\t{\n\t\t\t\tlet aR: OTSingleArrayEdit = prior.edits[iR];\n\n\t\t\t\tswitch (aR[0])\n\t\t\t\t{\n\t\t\t\t\tcase OpCursor:\n\t\t\t\t\t\t// No-op\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpInsert:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t// Converts to a retain.\n\t\t\t\t\t\t// Need to find spot to insert retain. After loop, iL will contain location\n\t\t\t\t\t\tfor (; iL < this.length; iL++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (posR == posL)\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tlet aL: OTSingleArrayEdit = this.edits[iL];\n\t\t\t\t\t\t\tif (this.editor.isIgnore(aL))\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\tif (aL[0] != OpCursor && aL[0] != OpInsert)\n\t\t\t\t\t\t\t\tposL += aL[1];\n\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet nRetain: number = aR[1];\n\t\t\t\t\t\tnewA.push([ OpTmpRetain, nRetain, '' ]);\n\t\t\t\t\t\tposR += nRetain;\n\t\t\t\t\t\tposL += nRetain;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpSet:\n\t\t\t\t\t\t// Somewhat unintuitively, if prior is *not* service, then it will actually get applied *after*\n\t\t\t\t\t\t// the service instance of OpSet and so should take precedence. Therefore if prior is not service,\n\t\t\t\t\t\t// we need to go through and convert \"OpSets\" that overlap to be this content. If prior is service,\n\t\t\t\t\t\t// we can just treat them as \"retains\" since they have no effect on our operations.\n\t\t\t\t\t\tif (bPriorIsService)\n\t\t\t\t\t\t\tposR += aR[1];\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlet nRemaining: number = aR[1];\n\t\t\t\t\t\t\twhile (nRemaining > 0 && iL < this.length)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlet aL: OTSingleArrayEdit = this.edits[iL];\n\t\t\t\t\t\t\t\tif (this.editor.isIgnore(aL))\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tiL++;\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tlet valL: number = aL[1];\n\n\t\t\t\t\t\t\t\tif (aL[0] == OpCursor || aL[0] == OpInsert)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tiL++;\n\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tif (posR >= posL+valL)\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t// Not there yet\n\t\t\t\t\t\t\t\t\t\tposL += valL;\n\t\t\t\t\t\t\t\t\t\tiL++;\n\t\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tif (aL[0] == OpDelete || aL[0] == OpRetain)\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tif (valL <= nRemaining)\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tposR += valL;\n\t\t\t\t\t\t\t\t\t\t\t\tposL += valL;\n\t\t\t\t\t\t\t\t\t\t\t\tnRemaining -= valL;\n\t\t\t\t\t\t\t\t\t\t\t\tiL++;\n\t\t\t\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t// Not subsumed, but means that I didn't encounter an OpSet\n\t\t\t\t\t\t\t\t\t\t\t\tposR += nRemaining;\n\t\t\t\t\t\t\t\t\t\t\t\tnRemaining = 0;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse // OpSet\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tif (aL[1] <= nRemaining)\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tposR += valL;\n\t\t\t\t\t\t\t\t\t\t\t\tposL += valL;\n\t\t\t\t\t\t\t\t\t\t\t\tthis.editor.substrFromRaw(aL, aR[1] - nRemaining, valL, aR[2]);\n\t\t\t\t\t\t\t\t\t\t\t\tnRemaining -= valL;\n\t\t\t\t\t\t\t\t\t\t\t\tiL++;\n\t\t\t\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t// don't advance posL or iL because we will re-process the left over\n\t\t\t\t\t\t\t\t\t\t\t\t// part for the next action. Simply edit the data in place.\n\t\t\t\t\t\t\t\t\t\t\t\t// Set [0, nRemaining] of aL.Data to [aR[1]-nRemaining, nRemaining]\n\t\t\t\t\t\t\t\t\t\t\t\t//aL.Data.delete(0, nRemaining);\n\t\t\t\t\t\t\t\t\t\t\t\t//aL.Data.InsertValue(0, aR.Data, aR[1]-nRemaining, nRemaining);\n\t\t\t\t\t\t\t\t\t\t\t\taL[2] = aR[2].substr(aR[1] - nRemaining) + aL[2].substr(nRemaining);\n\t\t\t\t\t\t\t\t\t\t\t\tposR += nRemaining;\n\t\t\t\t\t\t\t\t\t\t\t\tnRemaining = 0;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpDelete:\n\t\t\t\t\t\t{\n\t\t\t\t\t\tlet nRemaining: number = aR[1];\n\t\t\t\t\t\tlet nDelay: number = 0;\n\t\t\t\t\t\tlet iDelay: number;\n\n\t\t\t\t\t\t// Retains, sets and deletes are subsumed by prior deletes\n\t\t\t\t\t\tfor (; nRemaining > 0 && iL < this.length; iL++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlet aL: OTSingleArrayEdit = this.edits[iL];\n\t\t\t\t\t\t\tif (this.editor.isIgnore(aL))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (nDelay > 0)\n\t\t\t\t\t\t\t\t\tnDelay++;\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (aL[0] == OpCursor || aL[0] == OpInsert)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (nDelay == 0)\n\t\t\t\t\t\t\t\t\tiDelay = iL;\n\t\t\t\t\t\t\t\tnDelay++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (posR >= posL+aL[1])\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t// Go ahead and push any delayed actions\n\t\t\t\t\t\t\t\t\tfor (let j: number = iDelay; nDelay > 0; nDelay--, j++)\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tlet aD: OTSingleArrayEdit = this.edits[j];\n\t\t\t\t\t\t\t\t\t\tif (! this.editor.isIgnore(aD))\n\t\t\t\t\t\t\t\t\t\t\tnewA.push(aD);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Prior to the deleted content\n\t\t\t\t\t\t\t\t\tposL += aL[1];\n\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t// Retain/set/delete is fully subsumed.\n\t\t\t\t\t\t\t\t\tposR += aL[1];\n\t\t\t\t\t\t\t\t\tposL += aL[1];\n\t\t\t\t\t\t\t\t\tnRemaining -= aL[1];\n\t\t\t\t\t\t\t\t\tthis.editor.setIgnore(aL);\n\t\t\t\t\t\t\t\t\tif (nDelay > 0)\n\t\t\t\t\t\t\t\t\t\tnDelay++;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// We want to reprocess any trailing insert/cursors so we recognize conflicting inserts even when\n\t\t\t\t\t\t// deletes intervene.\n\t\t\t\t\t\tif (nDelay > 0)\n\t\t\t\t\t\t\tiL = iDelay;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpRetain:\n\t\t\t\t\t\t// Just advance cursor\n\t\t\t\t\t\tposR += aR[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.moveEdits(newA, iL);\n\t\t\tthis.edits = newA;\n\t\t\tthis.normalizeNewRetainsAfterTransform(bPriorIsService);\n\t\t\tthis.coalesce();\n\t\t}\n\n\t//\n\t// Function: generateRandom\n\t//\n\t// Description:\n\t//\tGenerate action containing a sequence of retain, insert, delete, cursor with the initial\n\t//\tstate of the string being nInitial. Make sure I always generate at least one insert or delete.\n\t//\tAlways operate in units of 4 (.123).\n\t//\n\tgenerateRandom(nInitial: number, clientID: string): void\n\t\t{\n\t\t\t// Ensure clean start\n\t\t\tthis.empty();\n\n\t\t\t// Setup randomizer\n\t\t\tlet nOps: number = 0;\n\t\t\tlet nLen: number;\n\t\t\tlet nBound: number;\n\t\t\tlet s: any;\n\n\t\t\twhile (nInitial > 0 || nOps == 0)\n\t\t\t{\n\t\t\t\tlet op: number = randomWithinRange(0, 4);\n\n\t\t\t\tnBound = nInitial / TestUnitSize;\n\t\t\t\tif (nInitial == 0 && (op == OpDelete || op == OpRetain || op == OpSet))\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (op)\n\t\t\t\t{\n\t\t\t\t\tcase OpInsert:\n\t\t\t\t\t\tnOps++;\n\t\t\t\t\t\tnLen = randomWithinRange(1, 5);\n\t\t\t\t\t\ts = this.editor.raw.empty();\n\t\t\t\t\t\tfor (let i: number = 0; i < nLen; i++)\n\t\t\t\t\t\t\ts = this.editor.raw.append(s, counterValue(this.editor.raw, TestCounter++));\n\t\t\t\t\t\tnLen *= TestUnitSize;\n\t\t\t\t\t\tthis.edits.push([ OpInsert, nLen, s ]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpDelete:\n\t\t\t\t\t\tnOps++;\n\t\t\t\t\t\tnLen = randomWithinRange(1, nBound > 3 ? nBound / 3 : nBound);\n\t\t\t\t\t\tnLen *= TestUnitSize;\n\t\t\t\t\t\tnInitial -= nLen;\n\t\t\t\t\t\tthis.edits.push([ OpDelete, nLen, this.editor.raw.empty() ]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpCursor:\n\t\t\t\t\t\tthis.edits.push([ OpCursor, 0, clientID ]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpRetain:\n\t\t\t\t\t\tnLen = randomWithinRange(1, nBound);\n\t\t\t\t\t\tnLen *= TestUnitSize;\n\t\t\t\t\t\tnInitial -= nLen;\n\t\t\t\t\t\tthis.edits.push([ OpRetain, nLen, this.editor.raw.empty() ]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpSet:\n\t\t\t\t\t\tnLen = 1;\n\t\t\t\t\t\ts = this.editor.raw.empty();\n\t\t\t\t\t\tfor (let i: number = 0; i < nLen; i++)\n\t\t\t\t\t\t\tthis.editor.raw.append(s, counterValue(this.editor.raw, TestCounter++));\n\t\t\t\t\t\tnLen *= TestUnitSize;\n\t\t\t\t\t\tnInitial -= nLen;\n\t\t\t\t\t\tthis.edits.push([ OpSet, nLen, s ]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Most importantly ensures canonical ordering of inserts and deletes.\n\t\t\tthis.coalesce();\n\t\t}\n}\n\nexport class OTStringResource extends OTArrayLikeResource\n{\n\tstatic _editor: OTSingleArrayEditor = new OTSingleArrayEditor(new OTStringOperations());\n\tconstructor(rname: string)\n\t\t{\n\t\t\tsuper(OTStringResource._editor, rname);\n\t\t}\n\tstatic factory(rname: string): OTStringResource { return new OTStringResource(rname); }\n\tcopy(): OTStringResource\n\t\t{\n\t\t\tlet copy: OTStringResource = new OTStringResource(this.resourceName);\n\t\t\tcopy.edits = this.edits.map(copy.editor.copy, copy.editor);\n\t\t\treturn copy;\n\t\t}\n}\n\nexport class OTArrayResource extends OTArrayLikeResource\n{\n\tstatic _editor: OTSingleArrayEditor = new OTSingleArrayEditor(new OTArrayOperations());\n\tconstructor(rname: string)\n\t\t{\n\t\t\tsuper(OTArrayResource._editor, rname);\n\t\t}\n\tstatic factory(rname: string): OTArrayResource { return new OTArrayResource(rname); }\n\n\tcopy(): OTArrayResource\n\t\t{\n\t\t\tlet copy: OTArrayResource = new OTArrayResource(this.resourceName);\n\t\t\tcopy.edits = this.edits.map(copy.editor.copy, copy.editor);\n\t\t\treturn copy;\n\t\t}\n}\n\nfunction randomWithinRange(nMin: number, nMax: number): number\n{\n\treturn nMin + Math.floor(Math.random() * (nMax - nMin + 1));\n}\n\nfunction counterValue(ops: IOTArrayLikeOperations, c: number): any\n{\n\tswitch (ops.underlyingTypeName())\n\t{\n\t\tcase 'string':\n\t\t\t{\n\t\t\t\tlet a: string[] = new Array(TestUnitSize);\n\t\t\t\ta[0] = '.';\n\t\t\t\tfor (let j: number = 1; j < TestUnitSize; j++, c = Math.floor(c / 10))\n\t\t\t\t\ta[TestUnitSize - j] = \"\" + (c % 10);\n\t\t\t\treturn a.join('');\n\t\t\t}\n\t\tcase 'array':\n\t\t\t{\n\t\t\t\tlet a: number[] = new Array(TestUnitSize);\n\t\t\t\tfor (let i: number = 0; i < TestUnitSize; i++, c += 0.1)\n\t\t\t\t\ta[i] = c;\n\t\t\t\treturn a;\n\t\t\t}\n\t\tdefault:\n\t\t\tthrow \"counterValue: Unexpected underlying array-like type.\"\n\t}\n}\n","// Shared libraries\nimport * as LogAbstract from \"../logabstract/all\";\n\nimport * as OT from \"./ottypes\";\nimport * as OTC from \"./otcomposite\";\nimport * as OTE from \"./otengine\";\n\nexport class OTClientEngine extends OTE.OTEngine\n{\n\t// Data members\n\tclientID: string;\n\tresourceID: string;\n\tisNeedAck: boolean;\n\tisNeedResend: boolean;\n bReadOnly: boolean;\n\tclientSequenceNo: number;\n\tstateServer: OTC.OTCompositeResource;\n\tstateLocal: OTC.OTCompositeResource;\n valCache: any;\n prefailCache: any;\n\n\tactionAllClient: OTC.OTCompositeResource;\n\tactionAllPendingClient: OTC.OTCompositeResource;\n\tactionSentClient: OTC.OTCompositeResource;\n\tactionSentClientOriginal: OTC.OTCompositeResource;\n\tactionServerInterposedSentClient: OTC.OTCompositeResource;\n\n\t// Constructor\n\tconstructor(ilog: LogAbstract.ILog, rid: string, cid: string)\n\t\t{\n super(ilog);\n\n\t\t\tthis.resourceID = rid;\n\t\t\tthis.clientID = cid;\n\t\t\tthis.initialize();\n this.bReadOnly = false;\n this.valCache = {};\n\t\t}\n\n\tinitialize(): void\n\t\t{\n if (this.prefailCache === undefined && this.clientSequenceNo > 0)\n this.prefailCache = this.valCache;\n\t\t\tthis.clientSequenceNo = 0;\n\t\t\tthis.isNeedAck = false;\n\t\t\tthis.isNeedResend = false;\n\t\t\tthis.actionAllClient = new OTC.OTCompositeResource(this.resourceID, this.clientID);\n\t\t\tthis.actionAllPendingClient = new OTC.OTCompositeResource(this.resourceID, this.clientID);\n\t\t\tthis.actionSentClient = new OTC.OTCompositeResource(this.resourceID, this.clientID);\n\t\t\tthis.actionSentClientOriginal = new OTC.OTCompositeResource(this.resourceID, this.clientID);\n\t\t\tthis.actionServerInterposedSentClient = new OTC.OTCompositeResource(this.resourceID, this.clientID);\n\t\t\tthis.stateServer = new OTC.OTCompositeResource(this.resourceID, this.clientID);\n\t\t\tthis.stateLocal = new OTC.OTCompositeResource(this.resourceID, this.clientID);\n\t\t}\n\n\t// Members\n\tserverClock(): number\n\t\t{\n\t\t\treturn this.stateServer.clock;\n\t\t}\n\n rid(): string\n {\n return this.resourceID;\n }\n\n cid(): string\n {\n return this.resourceID;\n }\n\n toPartialValue(resourceName: string): any\n {\n return this.valCache[resourceName];\n }\n\n\ttoValue(): any\n\t\t{\n\t\t\treturn this.valCache;\n\t\t}\n\n toPrefailValue(): any\n {\n return this.prefailCache;\n }\n\n clearPrefail(): void\n {\n delete this.prefailCache;\n }\n\n setReadOnly(b: boolean): void\n {\n if (b != this.bReadOnly)\n {\n this.bReadOnly = b;\n //No longer necessary - especially since we want to allow local edits to be applied for temporary work.\n //if (this.bReadOnly)\n // this.failbackToServerState();\n }\n }\n\n startLocalEdit(): OTC.OTCompositeResource\n {\n return new OTC.OTCompositeResource(this.resourceID, this.clientID);\n }\n\n\tisPending(): boolean\n\t\t{\n\t\t\treturn this.isNeedResend || !this.actionAllPendingClient.isEmpty();\n\t\t}\n\n\tgetPending(): OTC.OTCompositeResource\n\t\t{\n\t\t\tif (!this.isNeedResend && this.actionAllPendingClient.isEmpty())\n\t\t\t\treturn null;\n\t\t\telse\n\t\t\t{\n\t\t\t\t// If \"isNeedResend\" I need to send the exact same event (instead of aggregating all pending)\n\t\t\t\t// because the server might have actually received and processed the event and I just didn't\n\t\t\t\t// receive acknowledgement. If I merge that event into others I'll lose ability to distinguish\n\t\t\t\t// that. Eventually when I re-establish communication with server I will get that event response\n\t\t\t\t// and can then move on.\n\t\t\t\tif (! this.isNeedResend)\n\t\t\t\t{\n\t\t\t\t\tthis.actionSentClient = this.actionAllPendingClient.copy();\n //console.log(`ClientEngine:getPending: bump sequence count from ${this.clientSequenceNo}`);\n\t\t\t\t\tthis.actionSentClient.clientSequenceNo = this.clientSequenceNo++;\n\t\t\t\t\tthis.actionAllPendingClient.empty();\n\t\t\t\t}\n\t\t\t\tthis.actionSentClient.clock = this.stateServer.clock;\n\t\t\t\tthis.actionSentClientOriginal = this.actionSentClient.copy();\n\t\t\t\tthis.actionServerInterposedSentClient.empty();\n\t\t\t\tthis.isNeedAck = true;\n\t\t\t\tthis.isNeedResend = false;\n\t\t\t\treturn this.actionSentClient.copy();\n\t\t\t}\n\t\t}\n\n\t// When I fail to send, I need to reset to resend the event again\n\tresetPending(): void\n\t\t{\n\t\t\tif (this.isNeedAck)\n\t\t\t{\n\t\t\t\tthis.isNeedAck = false;\n\t\t\t\tthis.isNeedResend = true;\n //console.log('otclientengine: resetPending');\n\t\t\t}\n //else\n // console.log('otclientengine: resetPending ignored because isNeedAck false');\n\t\t}\n\n\t// When I don't accurately have server state - will then refresh from server\n\tfailbackToInitialState(): void\n\t\t{\n console.log('otclientengine: failbackToInitialState');\n if (this.prefailCache === undefined)\n this.prefailCache = this.valCache;\n\t\t\tthis.initialize();\n\t\t}\n\n\t// When I have server state but my state got mixed up\n\tfailbackToServerState(): void\n\t\t{\n console.log('otclientengine: failbackToServerState');\n if (this.prefailCache === undefined)\n this.prefailCache = this.valCache;\n\t\t\tthis.stateLocal = this.stateServer.copy();\n\t\t\tthis.isNeedAck = false;\n\t\t\tthis.actionSentClient.empty();\n\t\t\tthis.actionSentClientOriginal.empty();\n\t\t\tthis.actionServerInterposedSentClient.empty();\n\t\t\tthis.actionAllPendingClient.empty();\n\t\t\tthis.actionAllClient.empty();\n this.valCache = this.stateLocal.toValue();\n this.emit('state');\n\t\t}\n\n\t//\n\t// Function: OTClientEngine.addRemote\n\t//\n\t// Description:\n\t//\tThis function is really where the action is in managing the dynamic logic of applying OT. This is run\n\t//\ton each end point and handles the events received from the server. This includes server acknowledgements\n\t//\t(both success and failure) of locally generated events as well as all the events generated from other\n\t//\tclients.\n\t//\n\t//\tThe key things that happen here are:\n\t//\t\t1. Track server state.\n\t//\t\t2. Respond to server acknowledgement of locally generated events. This also includes validation\n\t//\t\t\t(with failback code) in case where server transformed my event in a way that was inconsistent\n\t//\t\t\twith what I expected (due to insert collision that arose due to multiple independent events).\n\t//\t\t3. Transform the incoming event (by local events) so it can be applied to local state.\n\t//\t\t4. Transform pending local events so they can be dispatched to the service once the service\n\t//\t\t\tis ready for another event.\n\t//\n\n\taddRemote(orig: OTC.OTCompositeResource): void\n\t\t{\n\t\t\t// Reset if server forces restart\n\t\t\tif (orig.clock == OTC.clockInitialValue)\n\t\t\t{\n\t\t\t\tthis.failbackToInitialState();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Reset if server restarted and we don't sync up\n\t\t\tif (orig.clock < 0)\n\t\t\t{\n\t\t\t\t// If server didn't lose anything I can just keep going...\n\t\t\t\tif (this.stateServer.clock+1 == -orig.clock)\n\t\t\t\t\torig.clock = - orig.clock\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.failbackToInitialState();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Ignore if I've seen this event already\n\t\t\tif (orig.clock <= this.serverClock())\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet bMine: boolean = orig.clientID == this.clientID;\n\t\t\tlet bResend: boolean = bMine && orig.clock == OTC.clockFailureValue;\n\t\t\tlet a: OTC.OTCompositeResource = orig.copy();\n\n\t\t\tif (bResend)\n\t\t\t{\n\t\t\t\t// Service failed my request. Retry with currently outstanding content.\n\t\t\t\tthis.resetPending();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttry\n\t\t\t{\n\t\t\t\t// Track server state and clock\n\t\t\t\tthis.stateServer.compose(a);\n\n\t\t\t\tif (bMine)\n\t\t\t\t{\n\t\t\t\t\t// Validate that I didn't run into unresolvable conflict\n\t\t\t\t\tif (! this.actionServerInterposedSentClient.isEmpty())\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.actionSentClientOriginal.transform(this.actionServerInterposedSentClient, true);\n\t\t\t\t\t\tif (! this.actionSentClient.effectivelyEqual(this.actionSentClientOriginal))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.failbackToServerState();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// I don't need to apply to local state since it has already been applied - this is just an ack.\n\t\t\t\t\tthis.isNeedAck = false;\n\t\t\t\t\tthis.actionSentClient.empty();\n\t\t\t\t\tthis.actionSentClientOriginal.empty();\n\t\t\t\t\tthis.actionServerInterposedSentClient.empty();\n\t\t\t\t\tthis.actionAllClient = this.actionAllPendingClient.copy();\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// Transform server action to apply locally by transforming by all pending client actions\n\t\t\t\t\ta.transform(this.actionAllClient, false);\n\n\t\t\t\t\t// And then compose with local state\n\t\t\t\t\tthis.stateLocal.compose(a);\n\n\t\t\t\t\t// Transform pending client by server action so it is rooted off the server state.\n\t\t\t\t\t// This ensures that I can convert the next server action I receive.\n\t\t\t\t\tthis.actionAllClient.transform(orig, true);\n\n\t\t\t\t\t// Transform server action to be after previously sent client action and then\n\t\t\t\t\t// transform the unsent actions so they are ready to be sent.\n\t\t\t\t\tlet aServerTransformed: OTC.OTCompositeResource = orig.copy();\n\t\t\t\t\taServerTransformed.transform(this.actionSentClient, false);\n\t\t\t\t\tthis.actionAllPendingClient.transform(aServerTransformed, true);\n\n\t\t\t\t\t// And then transform the sent client action so ready to be used for transforming next server event\n\t\t\t\t\tthis.actionSentClient.transform(orig, true);\n\n\t\t\t\t\t// Track server operations interposed between a sent action\n\t\t\t\t\tif (this.isNeedAck)\n\t\t\t\t\t\tthis.actionServerInterposedSentClient.compose(orig);\n\n // Let clients know\n this.valCache = this.stateLocal.toValue();\n this.emit('state');\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (err)\n\t\t\t{\n this.ilog.error(\"OTClientEngine.addRemote: unexpected exception: \" + err);\n\t\t\t\tthis.failbackToInitialState();\n\t\t\t}\n\t\t}\n\n\t//\n\t// Function: addLocalEdit\n\t//\n\t// Description:\n\t//\tThis is the logic for adding an action to the local state. The logic is straight-forward\n\t//\tas we need to track:\n\t//\t\t1. The composed set of unacknowledged locally generated events.\n\t//\t\t2. The composed set of unsent locally generated events (queued until sent event is acknowledged).\n\t//\t\t3. The local state.\n\t//\t\t4. An undo operation.\n\t//\n\taddLocalEdit(orig: OTC.OTCompositeResource): void\n\t\t{\n //Comment out bReadOnly test to now allow changes to be locally applied for readonly sessions, for playing around.\n //Server still prevents any edits from actually being applied. And clientsession changes\n //Don't actually send edits as well.\n //if (! this.bReadOnly)\n {\n try\n {\n this.actionAllClient.compose(orig);\n this.actionAllPendingClient.compose(orig);\n this.stateLocal.compose(orig);\n this.valCache = this.stateLocal.toValue();\n this.emit('state');\n }\n catch (err)\n {\n this.ilog.error(\"OTClientEngine.addLocalEdit: unexpected exception: \" + err);\n this.failbackToInitialState();\n }\n }\n\t\t}\n};\n","import * as OT from \"./ottypes\";\nimport * as OTA from \"./otarray\";\nimport * as OTM from \"./otmap\";\nimport * as OTC from \"./otcounter\";\n\nexport const clockInitialValue: number = -1;\t\t// Initial value\nexport const clockTerminateValue: number = -2;\t\t// Terminal action from client.\nexport const clockRandomizeValue: number = -3;\t\t// Fill in with random data.\nexport const clockFailureValue: number = -4;\t\t// Server failed to apply\nexport const clockInitializeValue: number = -5;\t\t// Used to initialize client to a specific string value.\nexport const clockUndoValue: number = -6;\t\t\t// Used to indicate we should generate an undo event.\nexport const clockSeenValue: number = -7;\t\t\t// Server has already seen this event\n\nexport class OTCompositeResource extends OT.OTResourceBase\n{\n\tresourceID: string;\n\tclientID: string;\n\tclock: number;\n\tclientSequenceNo: number;\n\tstatic typeRegistry: any;\n\n\tconstructor(rid: string, cid: string)\n\t\t{\n\t\t\tsuper('root', 'composite');\n\t\t\tthis.resourceID = rid;\n\t\t\tthis.clientID = cid;\n\t\t\tthis.clock = clockInitialValue;\n\t\t\tthis.clientSequenceNo = 0;\n\t\t}\n\n\tstatic registerType(underlyingType: string, factory: (resourceName: string) => OT.OTResourceBase): void\n\t\t{\n\t\t\tif (OTCompositeResource.typeRegistry == null)\n\t\t\t\tOTCompositeResource.typeRegistry = { };\n\t\t\tOTCompositeResource.typeRegistry[underlyingType] = factory;\n\t\t}\n\n\tfindResource(rname: string, utype: string = '', bConstruct: boolean = false): OT.IOTResource\n\t\t{\n\t\t\tfor (let i: number = this.length-1; i >= 0; i--)\n\t\t\t\tif (this.edits[i].resourceName === rname)\n\t\t\t\t\treturn this.edits[i];\n\t\t\tif (bConstruct)\n\t\t\t{\n\t\t\t\tlet edit: OT.IOTResource = OTCompositeResource.constructResource(rname, utype);\n\t\t\t\tthis.edits.push(edit);\n\t\t\t\treturn edit;\n\t\t\t}\n\t\t\telse\n\t\t\t\treturn null;\n\t\t}\n\n map(rid: string): OTM.OTMapResource\n {\n return this.findResource(rid, 'map', true) as OTM.OTMapResource;\n }\n\n array(rid: string): OTA.OTArrayResource\n {\n return this.findResource(rid, 'array', true) as OTA.OTArrayResource;\n }\n\n counter(rid: string): OTC.OTCounterResource\n {\n return this.findResource(rid, 'counter', true) as OTC.OTCounterResource;\n }\n\n\tgarbageCollect(map: any): boolean\n\t\t{\n\t\t\tif (map)\n\t\t\t{\n\t\t\t\tlet bDirty: boolean = false;\n\t\t\t\tfor (let i: number = this.length-1; i >= 0; i--)\n\t\t\t\t{\n\t\t\t\t\tif (map[this.edits[i].resourceName] === undefined)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.edits.splice(i, 1);\n\t\t\t\t\t\tbDirty = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn bDirty;\n\t\t\t}\n\t\t\telse\n\t\t\t\treturn false;\t// If no resource map, we don't garbage collect\n\t\t}\n\n\tisEmpty(): boolean\n\t\t{\n\t\t\t// Canonical empty is an empty edits array, but an array of empty edits is always considered empty\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t\tif (! this.edits[i].isEmpty())\n\t\t\t\t\treturn false;\n\t\t\treturn true;\n\t\t}\n\n\t// Copy an instance\n\tcopy(): OTCompositeResource\n\t\t{\n\t\t\tlet c: OTCompositeResource = new OTCompositeResource(this.resourceID, this.clientID);\n\t\t\tc.clock = this.clock;\n\t\t\tc.clientSequenceNo = this.clientSequenceNo;\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t\tc.edits.push(this.edits[i].copy());\n\t\t\treturn c;\n\t\t}\n\n\t// Test whether two operations are effectively equivalent\n\teffectivelyEqual(rhs: OTCompositeResource): boolean\n\t\t{\n\t\t\t// This should really be a structural error\n\t\t\tif (this.length != rhs.length)\n\t\t\t\treturn false;\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet lhsEdit: OT.IOTResource = this.edits[i];\n\t\t\t\tlet rhsEdit: OT.IOTResource = rhs.findResource(lhsEdit.resourceName);\n\n\t\t\t\tif ((rhsEdit == null && !lhsEdit.isEmpty()) || ! lhsEdit.effectivelyEqual(rhsEdit))\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t// Core OT algorithm for this type\n\ttransform(rhs: OTCompositeResource, bPriorIsService: boolean): void\n\t\t{\n\t\t\tfor (let i: number = 0; i < rhs.length; i++)\n\t\t\t{\n\t\t\t\tlet rhsEdit: OT.IOTResource = rhs.edits[i];\n\t\t\t\tlet lhsEdit: OT.IOTResource = this.findResource(rhsEdit.resourceName, rhsEdit.underlyingType, false);\n\t\t\t\tif (lhsEdit)\n\t\t\t\t\tlhsEdit.transform(rhsEdit, bPriorIsService);\n\t\t\t}\n\t\t}\n\n\ttryTransform(rhs: OTCompositeResource, bPriorIsService: boolean): boolean\n\t\t{\n let bSucceed = true;\n\n\t\t\tfor (let i: number = 0; bSucceed && i < rhs.length; i++)\n\t\t\t{\n\t\t\t\tlet rhsEdit: OT.IOTResource = rhs.edits[i];\n\t\t\t\tlet lhsEdit: OT.IOTResource = this.findResource(rhsEdit.resourceName, rhsEdit.underlyingType, false);\n\t\t\t\tif (lhsEdit)\n\t\t\t\t\tbSucceed = lhsEdit.tryTransform(rhsEdit, bPriorIsService);\n\t\t\t}\n\n return bSucceed;\n\t\t}\n\n\t// compose two edit actions\n\tcompose(rhs: OTCompositeResource): void \t\t\t// throws on error\n\t\t{\n\t\t\tfor (let i: number = 0; i < rhs.length; i++)\n\t\t\t{\n\t\t\t\tlet rhsEdit: OT.IOTResource = rhs.edits[i];\n\n\t\t\t\tlet lhsEdit: OT.IOTResource = this.findResource(rhsEdit.resourceName, rhsEdit.underlyingType, !rhsEdit.isEmpty());\n\t\t\t\tif (lhsEdit)\n\t\t\t\t\tlhsEdit.compose(rhsEdit);\n\t\t\t}\n\n\t\t\tthis.clock = rhs.clock;\n\t\t\tthis.clientSequenceNo = rhs.clientSequenceNo;\n\t\t}\n\n\ttryCompose(rhs: OTCompositeResource): boolean\n\t\t{\n let bSucceed = true;\n\t\t\tfor (let i: number = 0; bSucceed && i < rhs.length; i++)\n\t\t\t{\n\t\t\t\tlet rhsEdit: OT.IOTResource = rhs.edits[i];\n\n\t\t\t\tlet lhsEdit: OT.IOTResource = this.findResource(rhsEdit.resourceName, rhsEdit.underlyingType, !rhsEdit.isEmpty());\n\t\t\t\tif (lhsEdit)\n\t\t\t\t\tbSucceed = lhsEdit.tryCompose(rhsEdit);\n\t\t\t}\n\n return bSucceed;\n\t\t}\n\n\t// apply this edit to an existing value, returning new value (if underlying type is mutable, may modify input)\n\t// For composite, takes array of values, returns array of results, one for each underlying resource.\n\tapply(runningValue: any): any\n\t\t{\n\t\t\tif (runningValue == null)\n\t\t\t\trunningValue = { };\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet e: OT.IOTResource = this.edits[i];\n\t\t\t\trunningValue[e.resourceName] = e.apply(runningValue[e.resourceName]);\n\t\t\t}\n\t\t\treturn runningValue;\n\t\t}\n\n toPartialValue(resourceName: string): any\n {\n let e = this.edits.find(e => e.resourceName === resourceName);\n return e ? e.apply(null) : null;\n }\n\n\ttoValue(): any\n\t\t{\n\t\t\treturn this.apply(null);\n\t\t}\n\n\tminimize(): void\n\t\t{\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t\tthis.edits[i].minimize();\n\t\t}\n\n\tstatic constructResource(rname: string, utype: string): OT.IOTResource\n\t\t{\n\t\t\tif (OTCompositeResource.typeRegistry == null)\n\t\t\t{\n\t\t\t\t//throw \"OTCompositeResource.constructResource: no registered factories\";\n\t\t\t\t// This is only place where Composite type knows of other types - could hoist to outer level\n\t\t\t\tOTCompositeResource.registerType('string', OTA.OTStringResource.factory);\n\t\t\t\tOTCompositeResource.registerType('array', OTA.OTArrayResource.factory);\n\t\t\t\tOTCompositeResource.registerType('map', OTM.OTMapResource.factory);\n\t\t\t\tOTCompositeResource.registerType('counter', OTC.OTCounterResource.factory);\n\t\t\t}\n\n\t\t\tlet factory: (resourceName: string) => OT.OTResourceBase = OTCompositeResource.typeRegistry[utype];\n\t\t\tif (factory == null)\n\t\t\t\tthrow \"OTCompositeResource.constructResource: no registered factory for \" + utype;\n\t\t\treturn factory(rname);\n\t\t}\n\n\t// Deserialization\n\tstatic constructFromObject(o: any): OTCompositeResource\n\t\t{\n\t\t\tlet cedit: OTCompositeResource = new OTCompositeResource(\"\", \"\");\n\t\t\tif (o['resourceID'] !== undefined)\n\t\t\t\tcedit.resourceID = o['resourceID'];\n\t\t\tif (o['clientID'] !== undefined)\n\t\t\t\tcedit.clientID = o['clientID'];\n\t\t\tif (o['clock'] !== undefined)\n\t\t\t\tcedit.clock = Number(o['clock']);\n\t\t\tif (o['clientSequenceNo'] !== undefined)\n\t\t\t\tcedit.clientSequenceNo = Number(o['clientSequenceNo']);\n\t\t\tif (o['edits'] !== undefined)\n\t\t\t{\n\t\t\t\tlet arrEdits: any = o['edits'];\n\t\t\t\tfor (let i: number = 0; i < arrEdits.length; i++)\n\t\t\t\t{\n\t\t\t\t\tlet a: any = arrEdits[i];\n\t\t\t\t\tlet rname: string = a['resourceName'];\n\t\t\t\t\tlet utype: string = a['underlyingType'];\n\t\t\t\t\tlet edit: OT.IOTResource = this.constructResource(rname, utype);\n\t\t\t\t\tedit.edits = a['edits'];\n\t\t\t\t\tcedit.edits.push(edit);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cedit;\n\t\t}\n\n\t// Serialization\n\ttoJSON(): any\n\t\t{\n\t\t\tlet o: any = {\n\t\t\t\t\"resourceID\": this.resourceID,\n\t\t\t\t\"clientID\": this.clientID,\n\t\t\t\t\"clock\": this.clock,\n\t\t\t\t\"clientSequenceNo\": this.clientSequenceNo,\n\t\t\t\t\"edits\": [] };\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet edit: OT.IOTResource = this.edits[i];\n\t\t\t\tlet oEdit: any = { \"resourceName\": edit.resourceName, \"underlyingType\": edit.underlyingType, \"edits\": edit.edits };\n\t\t\t\to[\"edits\"].push(oEdit);\n\t\t\t}\n\t\t\treturn o;\n\t\t}\n\n}\n","import * as OT from \"./ottypes\";\n\n// This implements OT for a simple map of counters. Instead of a new value replacing the \n// keyed value, values are added together. This allows a simple accumulating counter.\n// Possible future additions:\n//\tAdd additional semantics for how the values accumulate. Examples from DropBox's datastore API\n//\tincluded \"min\" and \"max\" as alternate rules to \"sum\".\n//\n\nexport const OpCounterAdd = 1;\nexport const OpCounterDel = 2;\nexport type CounterEdit = [ number, string, any ];\t// Op, Key, Value\n\nexport class OTCounterResource extends OT.OTResourceBase\n{\n\tconstructor(rid: string)\n\t\t{\n\t\t\tsuper(rid, 'counter');\n\t\t}\n\tstatic factory(rid: string): OTCounterResource { return new OTCounterResource(rid); }\n\n\t// copy an instance\n\tcopy(): OTCounterResource\n\t\t{\n\t\t\tlet c: OTCounterResource = new OTCounterResource(this.resourceName);\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet e: CounterEdit = this.edits[i];\n\t\t\t\tc.edits.push([ e[0], e[1], e[2] ]);\n\t\t\t}\n\t\t\treturn c;\n\t\t}\n\n\t// Test whether two operations are effectively equivalent\n\teffectivelyEqual(rhs: OTCounterResource): boolean\n\t\t{\n\t\t\t// This should really be a structural error\n\t\t\tif (this.length != rhs.length)\n\t\t\t\treturn false;\n\n\t\t\t// This checks for exact structural equivalency. Really the ordering shouldn't matter for Counter so\n\t\t\t// an improvement to this algorithm would be to be more robust to ordering differences.\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet e1: CounterEdit = this.edits[i];\n\t\t\t\tlet e2: CounterEdit = rhs.edits[i];\n\t\t\t\tif (e1[0] != e2[0] || e1[1] != e2[1] || e1[2] != e2[2])\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t// Core OT algorithm for this type\n\ttransform(prior: OTCounterResource, bPriorIsService: boolean): void\n\t\t{\n\t\t\t// Last wins - if I'm last, my adds and deletes are all preserved\n\t\t\tif (bPriorIsService)\n\t\t\t\treturn;\n\n\t\t\t// Deletes in prior will delete mine. Implement by loading up properties rather than\n\t\t\t// using N^2 lookup through Edits array.\n\t\t\tlet myEdits: any = this.toObject();\n\t\t\tlet bEdited: boolean = false;\n\n\t\t\t// Now delete any that are deleted by prior.\n\t\t\tfor (let i: number = 0; i < prior.length; i++)\n\t\t\t{\n\t\t\t\tlet eP: CounterEdit = prior.edits[i];\n\t\t\t\tif (eP[0] == OpCounterDel)\n\t\t\t\t{\n\t\t\t\t\tdelete myEdits[eP[1]];\n\t\t\t\t\tbEdited = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Now restore edit array from edited object\n\t\t\tif (bEdited)\n\t\t\t\tthis.fromObject(myEdits);\n\t\t}\n\n\t// compose two edit actions\n\tcompose(rhs: OTCounterResource): void \t\t\t// throws on error\n\t\t{\n\t\t\tlet lhsKeys: any = this.toObject();\n\t\t\tlet rhsKeys: any = rhs.toObject();\n\t\t\tfor (let i: number = 0; i < rhs.length; i++)\n\t\t\t{\n\t\t\t\tlet eR: CounterEdit = rhs.edits[i];\n\t\t\t\tlet eL: CounterEdit = lhsKeys[eR[1]];\n\t\t\t\tif (eL === undefined)\n\t\t\t\t\tlhsKeys[eR[1]] = [ eR[0], eR[1], eR[2] ];\n\t\t\t\telse\n\t\t\t\t\teL[2] += eR[2];\n\t\t\t}\n\t\t\tthis.fromObject(lhsKeys);\n\t\t}\n\n\tapply(startValue: any): any\n\t\t{\n\t\t\tif (startValue == null)\n\t\t\t\tstartValue = { };\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet e: CounterEdit = this.edits[i];\n\t\t\t\tswitch (e[0])\n\t\t\t\t{\n\t\t\t\t\tcase OpCounterAdd:\n\t\t\t\t\t\tif (startValue[e[1]] === undefined)\n\t\t\t\t\t\t\tstartValue[e[1]] = e[2];\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tstartValue[e[1]] += e[2];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpCounterDel:\n\t\t\t\t\t\tdelete startValue[e[1]];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn startValue;\n\t\t}\n\n\tminimize(): any\n\t\t{\n\t\t\t// No-op\n\t\t}\n\n\tloadObject(o: any): any\n\t\t{\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t\to[(this.edits[i])[1]] = this.edits[i];\n\t\t\treturn o;\n\t\t}\n\n\ttoObject(): any\n\t\t{\n\t\t\treturn this.loadObject({ });\n\t\t}\n\n\tfromObject(o: any): void\n\t\t{\n\t\t\tthis.edits = [];\n\t\t\tfor (var p in o)\n\t\t\t\tif (o.hasOwnProperty(p))\n\t\t\t\t\tthis.edits.push(o[p]);\n\t\t}\n}\n","import * as LogAbstract from \"../logabstract/all\";\n\nimport * as OT from \"./ottypes\";\nimport * as OTC from \"./otcomposite\";\n\nexport interface IOTEngine\n{\n cid(): string;\n rid(): string;\n\n toPartialValue(resourceName: string): any;\n\n startLocalEdit(): OTC.OTCompositeResource;\n addLocalEdit(e: OTC.OTCompositeResource): void;\n}\n\nexport class OTEngine implements IOTEngine\n{\n ilog: LogAbstract.ILog;\n onList: any;\n\n\t// Constructor\n\tconstructor(ilog: LogAbstract.ILog)\n\t\t{\n this.ilog = ilog;\n this.onList = {};\n\t\t}\n\n on(eventName: string, cb: any): void\n {\n let aCB: any = this.onList[eventName];\n if (aCB === undefined)\n {\n aCB = [];\n this.onList[eventName] = aCB;\n }\n aCB.push(cb);\n }\n\n off(eventName: string, cb: any): void\n {\n let aCB: any = this.onList[eventName];\n if (aCB !== undefined)\n {\n for (let i: number = 0; i < aCB.length; i++)\n {\n if (aCB[i] === cb)\n {\n aCB.splice(i, 1);\n break;\n }\n }\n }\n }\n\n emit(eventName: string): void\n {\n let aCB: any[] = this.onList[eventName];\n if (aCB !== undefined)\n for (let i: number = 0; i < aCB.length; i++)\n (aCB[i])();\n }\n\n cid(): string { return ''; }\n rid(): string { return ''; }\n\n toPartialValue(resourceName: string): any { return null; }\n\n startLocalEdit(): OTC.OTCompositeResource { return null; }\n addLocalEdit(e: OTC.OTCompositeResource): void { }\n}\n","import * as Util from '../util/all';\n\nimport * as OT from './ottypes';\n\n// This implements OT for a dictionary of objects. OT is pretty trivial for maps - last wins.\n\nexport const OpMapSet = 1;\nexport const OpMapDel = 2;\nexport type MapEdit = [ number, string, any ];\t// Op, Key, Value\n\nexport class OTMapResource extends OT.OTResourceBase\n{\n\tconstructor(rid: string)\n\t\t{\n\t\t\tsuper(rid, 'map');\n\t\t}\n\tstatic factory(rid: string): OTMapResource { return new OTMapResource(rid); }\n\n // Set a property\n set(p: string, a: any): OTMapResource\n {\n this.edits.push([ OpMapSet, p, a ]);\n return this;\n }\n\n // Delete a property\n del(p: string): OTMapResource\n {\n this.edits.push([ OpMapDel, p, 0 ]);\n return this;\n }\n\n\t// copy an instance\n\tcopy(): OTMapResource\n\t\t{\n\t\t\tlet c: OTMapResource = new OTMapResource(this.resourceName);\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet e: MapEdit = this.edits[i];\n\t\t\t\tc.edits.push([ e[0], e[1], e[2] ]);\n\t\t\t}\n\t\t\treturn c;\n\t\t}\n\n\t// Test whether two operations are effectively equivalent\n\teffectivelyEqual(rhs: OTMapResource): boolean\n\t\t{\n\t\t\t// This should really be a structural error\n\t\t\tif (this.length != rhs.length)\n\t\t\t\treturn false;\n\n\t\t\t// This checks for exact structural equivalency. Really the ordering shouldn't matter for Map so\n\t\t\t// an improvement to this algorithm would be to be more robust to ordering differences.\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet e1: MapEdit = this.edits[i];\n\t\t\t\tlet e2: MapEdit = rhs.edits[i];\n\t\t\t\tif (e1[0] != e2[0] || e1[1] != e2[1] || !Util.deepEqual(e1[2], e2[2]))\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t// Core OT algorithm for this type\n\ttransform(prior: OTMapResource, bPriorIsService: boolean): void\n\t\t{\n\t\t\t// Last wins - if I'm last, my sets and deletes are all preserved\n\t\t\tif (bPriorIsService)\n\t\t\t\treturn;\n\n\t\t\t// OK, remove any operations (either sets or deletes), that conflict with me\n\t\t\t// First load in my properties\n\t\t\tlet myEdits: any = this.toObject();\n\n\t\t\t// Now delete any that are overridden\n\t\t\tfor (let i: number = 0; i < prior.length; i++)\n\t\t\t\tdelete myEdits[(prior.edits[i])[1]];\n\n\t\t\t// Now restore edit array from edited object\n\t\t\tthis.fromObject(myEdits);\n\t\t}\n\n\t// compose two edit actions\n\tcompose(rhs: OTMapResource): void \t\t\t// throws on error\n\t\t{\n\t\t\tlet o: any = this.toObject();\n\t\t\tfor (let i: number = 0; i < rhs.length; i++)\n\t\t\t{\n\t\t\t\tlet eR: MapEdit = rhs.edits[i];\n\t\t\t\to[eR[1]] = [ eR[0], eR[1], eR[2] ];\t\t// Note this overwrites any existing operation on this key, set or del\n\t\t\t}\n\t\t\tthis.fromObject(o);\n\t\t}\n\n\tapply(startValue: any): any\n\t\t{\n\t\t\tif (startValue == null)\n\t\t\t\tstartValue = { };\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet e: MapEdit = this.edits[i];\n\t\t\t\tswitch (e[0])\n\t\t\t\t{\n\t\t\t\t\tcase OpMapSet:\n\t\t\t\t\t\tstartValue[e[1]] = e[2];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpMapDel:\n\t\t\t\t\t\tdelete startValue[e[1]];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn startValue;\n\t\t}\n\n\tminimize(): any\n\t\t{\n\t\t\t// Effectively removes OpMapDel\n\t\t\tlet o: any = this.apply({});\n\t\t\tthis.edits = [];\n\t\t\tfor (var p in o)\n\t\t\t\tif (o.hasOwnProperty(p))\n\t\t\t\t\tthis.edits.push([ OpMapSet, p, o[p] ]);\n\t\t}\n\n\tloadObject(o: any): any\n\t\t{\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t\to[(this.edits[i])[1]] = this.edits[i];\n\t\t\treturn o;\n\t\t}\n\n\ttoObject(): any\n\t\t{\n\t\t\treturn this.loadObject({ });\n\t\t}\n\n\tfromObject(o: any): void\n\t\t{\n\t\t\tthis.edits = [];\n\t\t\tfor (var p in o)\n\t\t\t\tif (o.hasOwnProperty(p))\n\t\t\t\t\tthis.edits.push(o[p]);\n\t\t}\n}\n","// Shared libraries\nimport * as LogAbstract from '../logabstract/all';\n\n// Local libraries\nimport * as OT from \"./ottypes\";\nimport * as OTC from \"./otcomposite\";\nimport * as OTS from \"./otsession\";\nimport * as OTE from \"./otengine\";\n\nexport const ClientIDForServer: string = '-Server-';\n\nexport class OTServerEngine extends OTE.OTEngine\n{\n // Data members\n stateServer: OTC.OTCompositeResource;\n logServer: OTC.OTCompositeResource[];\n valCache: any;\n fullCache: any;\n highSequence: any;\n clientSequenceNo: number;\n\n // Constructor\n constructor(ilog: LogAbstract.ILog, rid: string)\n {\n super(ilog);\n\n this.stateServer = new OTC.OTCompositeResource(rid, \"\");\n this.logServer = [];\n this.highSequence = {};\n this.clientSequenceNo = 0;\n this.valCache = {};\n this.fullCache = null;\n }\n\n serverClock(): number\n {\n return this.stateServer.clock;\n }\n\n rid(): string\n {\n return this.stateServer.resourceName;\n }\n\n cid(): string\n {\n return ClientIDForServer;\n }\n\n startLocalEdit(): OTC.OTCompositeResource\n {\n return new OTC.OTCompositeResource(this.rid(), this.cid());\n }\n\n resetCaches(): void\n {\n this.valCache = {};\n this.fullCache = null;\n }\n\n toPartialValue(resourceName: string): any\n {\n if (this.valCache[resourceName] === undefined)\n this.valCache[resourceName] = this.stateServer.toPartialValue(resourceName);\n return this.valCache[resourceName];\n }\n\n toValue(): any\n {\n // In general, server does not require this but maybe for testing purposes\n if (this.fullCache == null)\n this.fullCache = this.stateServer.toValue();\n return this.fullCache;\n }\n\n getProp(s: string): any\n {\n let o = this.toPartialValue('WellKnownName_meta');\n return o == null ? '' : o[s];\n }\n\n getName(): string\n {\n return this.getProp('name');\n }\n\n getType(): string\n {\n return this.getProp('type');\n }\n\n getDescription(): string\n {\n return this.getProp('description');\n }\n\n getCreatedBy(): string\n {\n return this.getProp('createdby');\n }\n\n getCreateTime(): string\n {\n return this.getProp('createtime');\n }\n\n getCreatedByName(): string\n {\n let s: string = this.getCreatedBy();\n if (s != '')\n {\n let users: any = this.toPartialValue('WellKnownName_users');\n if (users && users[s] && users[s]['name'])\n return users[s]['name'];\n }\n\n return '';\n }\n\n hasSeenEvent(orig: OTC.OTCompositeResource): boolean\n {\n let clientSequenceNo: any = this.highSequence[orig.clientID];\n let bSeen = (clientSequenceNo !== undefined && Number(clientSequenceNo) >= orig.clientSequenceNo);\n return bSeen;\n }\n\n isNextEvent(orig: OTC.OTCompositeResource): boolean\n {\n let nSeen: any = this.highSequence[orig.clientID];\n let bNext = (nSeen === undefined && orig.clientSequenceNo == 0)\n || (Number(nSeen)+1 == orig.clientSequenceNo);\n if (! bNext)\n {\n if (nSeen === undefined)\n this.ilog.event( { event: 'OT anomaly: non-zero client seqNo for new client', sessionid: this.stateServer.resourceID } );\n else\n this.ilog.event( { event: 'OT anomaly: unexpected client seqNo', sessionid: this.stateServer.resourceID } );\n }\n return bNext;\n }\n\n rememberSeenEvent(orig: OTC.OTCompositeResource): void\n {\n this.highSequence[orig.clientID] = orig.clientSequenceNo;\n }\n\n forgetEvents(orig: OTC.OTCompositeResource): void\n {\n delete this.highSequence[orig.clientID];\n }\n \n clientHighSequence(cid: string): number\n {\n let clientSequenceNo: any = this.highSequence[cid];\n\n return clientSequenceNo === undefined ? 0 : Number(clientSequenceNo);\n }\n\n garbageCollect(): void\n {\n let resources = this.toPartialValue('WellKnownName_resource');\n if (this.stateServer.garbageCollect(resources))\n {\n this.resetCaches();\n this.emit('state');\n }\n\n // TODO: Also remove entries from log to minimize memory use.\n }\n\n // Function: addServer\n //\n // Description:\n // This is the server state update processing upon receiving an event from an endpoint.\n // The received event is transformed (if possible) and added to the server state.\n // The logic here is straight-forward - transform the incoming event so it is relative to\n // the current state and then apply.\n\n addServer(orig: OTC.OTCompositeResource): number\n {\n try\n {\n // First transform, then add to log\n let i: number;\n let a: OTC.OTCompositeResource = orig.copy();\n\n for (i = this.logServer.length; i > 0; i--)\n {\n let aService: OTC.OTCompositeResource = this.logServer[i-1];\n\n if (aService.clock == a.clock)\n break;\n }\n\n // Handle if we've seen it already (client did not receive ack, probably communication error on response)\n if (this.hasSeenEvent(orig))\n {\n // Treat this as success if we still have event in log - the client did not receive an\n // ack but is now re-connected and will get resynced correctly.\n if (i > 0)\n {\n this.ilog.event({ sessionid: this.stateServer.resourceID, event: `addServer: duplicate event: no problem` });\n //console.log('addServer: seen event - handling cleanly');\n return OTS.ESuccess;\n }\n else\n {\n //console.log('addServer: seen event - resetting client');\n this.ilog.event({ sessionid: this.stateServer.resourceID, event: `addServer: duplicate event: resetting client` });\n this.forgetEvents(orig); // we are now resetting client in this case, so forget this client\n return OTS.EClockSeen;\n }\n }\n\n // If this isn't next in sequence, I lost one (probably because I went \"back in time\"\n // due to server restart). In that case client is forced to re-initialize (losing local\n // edits). I also need to re-initialize sequence numbering.\n if (! this.isNextEvent(orig))\n {\n //console.log('addServer: received out-of-order (future) event');\n this.ilog.event({ sessionid: this.stateServer.resourceID, event: `addServer: received out-of-order event` });\n this.forgetEvents(orig);\n return OTS.EClockAnomaly;\n }\n\n // Fail if we have discarded that old state\n if (a.clock >= 0 && i == 0)\n {\n this.ilog.event({ sessionid: this.stateServer.resourceID, event: `addServer: received old event` });\n\n // This should really be ClockFailure which would force the client to resend with a newer\n // clock value. But there appears to be a bug when session is reloaded that results in\n // client never getting synced up. So for now force a reset (which might result in some\n // client edits being discarded).\n this.forgetEvents(orig);\n return OTS.EClockReset;\n //return OTS.EClockFailure;\n }\n\n // OK, all good, transform and apply\n if (i < this.logServer.length)\n {\n let aPrior: OTC.OTCompositeResource = this.logServer[i].copy();\n\n for (i++; i < this.logServer.length; i++)\n aPrior.compose(this.logServer[i]);\n\n if (! a.tryTransform(aPrior, true))\n {\n console.log('otserverengine: rejecting event on transform failure');\n this.forgetEvents(orig);\n return OTS.EClockReset;\n }\n\n a.transform(aPrior, true);\n }\n\n let bFail = ! this.stateServer.tryCompose(a);\n if (bFail)\n {\n console.log('otserverengine: rejecting event on compose failure');\n if (this.logServer.length)\n {\n let newState = this.logServer[0].copy();\n for (let i = 1; i < this.logServer.length; i++)\n newState.compose(this.logServer[i]);\n if (newState.tryCompose(a))\n {\n console.log('otserverengine: actually... rejected event would succeed on composed log, so patching');\n this.stateServer = newState;\n bFail = false;\n }\n else\n console.log('otserverengine: and... rejected event also fails on composed log');\n }\n else\n console.log('otserverengine: and... no log to try to patch state with');\n\n if (bFail)\n {\n this.forgetEvents(orig);\n return OTS.EClockReset;\n }\n }\n\n a.clock = this.stateServer.clock + 1;\n this.stateServer.compose(a);\n\n this.resetCaches();\n this.emit('state');\n this.logServer.push(a.copy());\n\n this.rememberSeenEvent(orig);\n return OTS.ESuccess;\n }\n catch (err)\n {\n this.ilog.error('addServer: unexpected exception');\n this.forgetEvents(orig);\n return OTS.EClockReset;\n //return OTS.EClockFailure;\n }\n }\n\n addLocalEdit(orig: OTC.OTCompositeResource): void\n {\n orig.clock = this.serverClock();\n orig.clientSequenceNo = this.clientSequenceNo++;\n let errno: number = this.addServer(orig);\n }\n\n toJSON(): any\n {\n let log: any[] = [];\n for (let i: number = 0; i < this.logServer.length; i++)\n log.push(this.logServer[i].toJSON());\n return { state: this.stateServer.toJSON(), highSequence: this.highSequence, log: log };\n }\n\n validateLog(): void\n {\n // Yikes, invalid log created by bad revision reverting - validate on load and truncate if necessary\n try\n {\n if (this.logServer.length > 0)\n {\n let aPrior: OTC.OTCompositeResource = this.logServer[0].copy();\n\n for (let i: number = 1; i < this.logServer.length; i++)\n aPrior.compose(this.logServer[i]);\n }\n }\n catch (err)\n {\n this.ilog.event({ sessionid: this.stateServer.resourceID, event: `OTServer: corrupted log truncated` });\n this.logServer = [];\n this.logServer.push(this.stateServer.copy());\n }\n }\n\n loadFromObject(o: any): void\n {\n if (o.state !== undefined)\n {\n this.stateServer = OTC.OTCompositeResource.constructFromObject(o.state);\n this.logServer = [];\n this.resetCaches();\n this.emit('state');\n }\n if (o.log !== undefined)\n {\n for (let i: number = 0; i < o.log.length; i++)\n this.logServer.push(OTC.OTCompositeResource.constructFromObject(o.log[i]));\n this.validateLog();\n }\n else\n {\n this.logServer = [];\n this.logServer.push(this.stateServer.copy());\n }\n if (o.highSequence !== undefined)\n this.highSequence = o.highSequence;\n this.clientSequenceNo = this.clientHighSequence(ClientIDForServer) + 1;\n }\n}\n","// Errors\nexport const ESuccess: number = 0; // Generic success\nexport const EFail: number = 1; // Generic failure\nexport const EFull: number = 2; // Too many clients attached to this session; try later\nexport const ERetry: number = 3; // Try request again\nexport const ENoSession: number = 4;\t\t// No record of such session\nexport const EClockSeen: number = 5;\nexport const EClockFailure: number = 6;\nexport const EClockReset: number = 7;\nexport const ENoUser: number = 8; // No user specified (internal error since all authorized reqs have user)\nexport const EBadRequest: number = 9; // Badly formed request\nexport const ELoadFailed: number = 10; // Session exists in index, but load of state failed ((temp?) internal error)\nexport const ENoPerm: number = 11; // No permissions (readonly)\nexport const ENoAccess: number = 12; // No access (no read)\nexport const EMaintenance: number = 13; // Server under maintenance\nexport const EClockAnomaly: number = 14; // Typically server restart and client is ahead\n\n// Filters\nexport const FilterMyMaps: number = 0;\nexport const FilterSharedWithMe: number = 1;\nexport const FilterMyPublic: number = 2;\nexport const FilterRecent: number = 3;\nexport const FilterTrash: number = 4;\nexport const FilterPublic: number = 5;\nexport const FilterOfficial: number = 6;\nexport const FilterCOI: number = 7;\nexport const FilterMyGroupMaps: number = 8;\nexport const FilterMyGroups: number = 9;\nexport const FilterMyDatasets: number = 10;\nexport const FilterPublicDatasets: number = 11;\nexport const FilterMyGroupDatasets: number = 12;\nexport const FilterCount: number = 13;\nexport type Filter = number;\n\n// Permissions\nexport const PermNone: number = 0; // No permissions\nexport const PermRead: number = 1; // Can view\nexport const PermWrite: number = 2; // Can modify\nexport const PermOwner: number = 4; // Can change deleted, published, access permissions\nexport const PermAdmin: number = 8; // Can administer site\nexport const PermVersion: number = 16; // Can view a specific version\nexport const PermEdit: number = (PermWrite|PermOwner);\nexport const PermAll: number = (PermRead|PermWrite|PermOwner|PermAdmin);\nexport type Permission = number;\n\n// Server State\nexport const ServerStateRunning: number = 0;\nexport const ServerStateMaintenance: number = 1;\nexport type ServerState = number;\n\n// Maps Access Tokens (IDs) to SessionID\nexport interface AccessSessionMap\n{\n [key: string]: string;\n}\n\n// Maps Access ID to { list of users, permission } (stored with session)\nexport interface AccessMap\n{\n [key: string]: Access;\n}\n\nexport interface Access\n{\n userIDs: string[]; // empty implies \"anyone\"\n perm: Permission;\n}\n\nexport interface Revision\n{\n id: string;\n modifyTime: any; // JSON date\n label?: string; // optional label\n editcache?: string; // optional editcache key\n}\n\nexport type RevisionList = Revision[];\n\nexport interface SessionUser\n{\n\tid: string;\n\tname: string;\n twitterhandle: string;\n}\n\nexport interface ActiveUser\n{\n\tid: string;\n\tname: string;\n twitterhandle: string;\n\tactive: number;\n}\n\nexport interface SessionUserIndex\n{\n\t[key: string]: SessionUser;\n}\n\nexport interface SessionUserList\n{\n\t[key: string]: number;\n}\n\nexport interface SessionProps\n{\n id: string;\n baseid?: string; // For owner, actual sid if id is frozen version\n rid?: string; // Revision ID for frozen version\n name: string;\n type: string;\n description: string;\n labels: string[];\n createdBy: string;\n lastActive: any;\t\t// JSON date (should be string)\n createTime: any; // JSON date (should be string)\n modifyTime: any; // JSON date (should be string)\n clientCount: number;\n maxClients: number;\n requestCount: number;\n deleted: boolean;\n published?: string;\n locked?: boolean;\n official: boolean;\n\tloadFailed: boolean;\n accessMap: AccessMap;\n revisions: RevisionList;\n expunged?: boolean;\n expungeDate?: string;\n xprops?: { [prop: string]: string };\n groups: any; // DT.GroupsMapIndex\n xid?: string; // external ID\n colors?: string; // cached district colors (specific to OT for redistricting)\n}\n\n// True to add, False to remove\nexport type LabelUpdate = { [name: string]: boolean|null }\n\nexport interface SessionUpdateProps\n{\n\tid?: string;\n xid?: string;\n ids?: string[];\n\tdeleted?: boolean;\n\tpublished?: boolean;\n\tofficial?: boolean;\n locked?: boolean;\n name?: string;\n description?: string;\n labelupdate?: LabelUpdate;\n access?: Access;\n accessUpdate?: AccessMap;\n restore?: string; // Revision ID\n revision?: Revision; // If ID is empty, snap a new revision, otherwise label it.\n colors?: string; // cached district colors (specific to OT for redistricting)\n}\n\nexport interface SessionsIndex\n{\n\t[key: string]: SessionProps;\n}\n\n// The semantics here are:\n// if aid is provided, only look through that access token.\n// if aid is missing, look for that user in any access token (but ignore anonymous tokens).\n// in either case, return the full set of permissions a user has.\n//\nexport function accessFindUser(a: Access, uid: string): Permission\n{\n if (a === undefined) return PermNone;\n if (a.userIDs.length == 0)\n return a.perm;\n for (let i: number = 0; i < a.userIDs.length; i++)\n if (a.userIDs[i] === uid) return a.perm;\n return PermNone;\n}\n\nexport function accessMapFindUser(accessMap: AccessMap, uid: string, aid?: string): Permission\n{\n if (aid !== undefined)\n return accessFindUser(accessMap[aid], uid);\n else\n {\n let perm: Permission = PermNone;\n for (var aid1 in accessMap) if (accessMap.hasOwnProperty(aid1))\n {\n let a = accessMap[aid1];\n for (let i: number = 0; i < a.userIDs.length; i++)\n if (a.userIDs[i] === uid)\n {\n perm |= a.perm;\n break;\n }\n }\n return perm;\n }\n}\n\nexport function SessionFilterFunction(p: SessionProps, uid: string, f: number): boolean\n{\n\tif (f === FilterPublic) return p.published !== undefined;\n\n\tif (f === FilterSharedWithMe)\n\t{\n\t\tif (p.createdBy === uid) return false;\n return true;\n\t}\n\n\t// All other filters require ownership of this session\n\tif (p.createdBy !== uid) return false;\n\n\tif (f === FilterTrash) return p.deleted;\n\n if (f === FilterRecent && !p.deleted && p.modifyTime)\n {\n let d = new Date();\n let interval = d.getTime() - new Date(p.modifyTime).getTime();\n return interval < (1000 * 60 * 60 * 24 * 7); // one week\n }\n\n\treturn !p.deleted;\n}\n","\n// Resource data type that supports basic OT inteface.\nexport interface IOTResource\n{\n\tresourceName: string;\n\tunderlyingType: string;\n\tedits: any[];\n\n\t// Normally defined by base class\n\tlength: number;\n\tempty(): void;\n\tisEmpty(): boolean;\n\n\t// Copy an instance\n\tcopy(): IOTResource;\n\n\t// Test whether two operations are effectively equivalent\n\teffectivelyEqual(rhs: IOTResource): boolean;\n\n\t// Core OT algorithm for this type\n\ttransform(rhs: IOTResource, bPriorIsService: boolean): void;\t\t\t// throws on error\n\n tryTransform(rhs: IOTResource, bPriorIsService: boolean): boolean;\n\n\t// compose two edit actions\n\tcompose(rhs: IOTResource): void; \t\t\t// throws on error\n\n // tests if compose would succeed, false on failure to prevent throwing during compose and leaving in partial state\n tryCompose(rhs: IOTResource): boolean\n\n\t// apply this edit to an existing value, returning new value (if underlying type is mutable, may modify input)\n\tapply(startValue: any): any;\n\n\t// return a collapsed, minimal version of the operation, suitable for constructing from scratch from empty initial value\n\tminimize(): void;\n}\n\n// Useful base class\nexport class OTResourceBase implements IOTResource\n{\n\tresourceName: string;\n\tunderlyingType: string;\n\tedits: any[];\n\n\tconstructor(rname: string, utype: string)\n\t\t{\n\t\t\tthis.resourceName = rname;\n\t\t\tthis.underlyingType = utype;\n\t\t\tthis.edits = [];\n\t\t}\n\n\tget length(): number\n\t\t{\n\t\t\treturn this.edits.length;\n\t\t}\n\n\t// Set an existing instance of the operation to be empty\n\tempty(): void\n\t\t{\n\t\t\tthis.edits = [];\n\t\t}\n\n\t// Test\n\tisEmpty(): boolean\n\t\t{\n\t\t\treturn this.edits.length == 0;\n\t\t}\n\n\t// Copy an instance\n\tcopy(): OTResourceBase\n\t\t{\n\t\t\tthrow \"OTResourceBase.copy must be overridden in subclass\";\n\t\t}\n\n\t// Test whether two operations are effectively equivalent\n\teffectivelyEqual(rhs: OTResourceBase): boolean\n\t\t{\n\t\t\tthrow \"OTResourceBase.effectivelyEqual must be overridden in subclass\";\n\t\t}\n\n\t// Core OT algorithm for this type\n\ttransform(rhs: OTResourceBase, bPriorIsService: boolean): void\n\t\t{\n\t\t\tthrow \"OTResourceBase.transform must be overridden in subclass\";\n\t\t}\n\n // Test if transform would succeed, false on failure\n tryTransform(rhs: OTResourceBase, bPriorIsServer: boolean): boolean\n {\n return true;\n }\n\n\t// compose two edit actions\n\tcompose(rhs: OTResourceBase): void\n\t\t{\n\t\t\tthrow \"OTResourceBase.compose must be overridden in subclass\";\n\t\t}\n\n // test compose\n tryCompose(rhs: OTResourceBase): boolean\n {\n return true;\n }\n\n\t// apply this edit to an existing value, returning new value (if underlying type is mutable, may modify input)\n\tapply(startValue: any): any\n\t\t{\n\t\t\tthrow \"OTResourceBase.apply must be overridden in subclass\";\n\t\t}\n\n\tminimize(): void\n\t\t{\n\t\t\t// Default implementation does nothing.\n\t\t}\n}\n","export * from './poly';\nexport * from './union';\nexport * from './quad';\nexport * from './polylabel';\nexport * from './polysimplify';\nexport * from './polypack';\nexport * from './polybin';\nexport * from './boundbox';\nexport * from './blend';\nexport * from './cartesian';\nexport * from './minbound';\nexport * from './polyround';\nexport * from './topo';\nexport * from './selfintersect';\nexport * from './shamos';\nexport * from './pointinpoly';\nexport * from './mapto';\nexport * from './featurecleanholes';\n","import * as Util from '../util/all';\nimport * as PP from './polypack';\n\n// Takes array of polygon or multi-polygon coordinate structures and returns a single multi-polygon\n// structure. The coordinates may be passed in using packed format.\n\nexport function blend(polys: any[]): any\n{\n if (polys == null || polys.length == 0) return null;\n\n let result: any[] = [];\n\n for (let i: number = 0; i < polys.length; i++)\n {\n let p = PP.polyUnpack(polys[i]);\n let d = Util.depthof(p);\n if (d === 4)\n result.push(p);\n else if (d === 5)\n for (let j: number = 0; j < p.length; j++)\n result.push(p[j]);\n else if (p.length === undefined || p.length > 0)\n throw new Error('blend expects polygon or multi-polygon coordinates');\n }\n\n return result;\n}\n","import * as Util from '../util/all';\n\nimport * as P from './poly';\nimport * as PP from './polypack';\n\n// Note, in Geo format so top > bottom\nexport interface BoundBox\n{\n left?: number;\n top?: number;\n right?: number;\n bottom?: number;\n}\n\nexport function boundboxWidth(bb: BoundBox): number { return Math.abs(bb.right - bb.left); }\nexport function boundboxHeight(bb: BoundBox): number { return Math.abs(bb.bottom - bb.top); }\n\nexport function boundboxCX(bb: BoundBox): number { return bb.left + (bb.right - bb.left) / 2; }\nexport function boundboxCY(bb: BoundBox): number { return bb.top + (bb.bottom - bb.top) / 2; }\n\nexport function clipLon(lon: number): number { return lon <= 0 ? lon : -179; }\n\nexport function boundboxExtend(bbox: BoundBox, x: number, y: number): void\n{\n x = clipLon(x);\n if (bbox.left === undefined || x < bbox.left)\n bbox.left = x;\n if (bbox.right === undefined || x > bbox.right)\n bbox.right = x;\n if (bbox.top === undefined || y > bbox.top)\n bbox.top = y;\n if (bbox.bottom === undefined || y < bbox.bottom)\n bbox.bottom = y;\n}\n\nfunction boundboxExtendPacked(pp: PP.PolyPack, bbox: BoundBox): void\n{\n let buffer = pp.buffer as Float64Array;\n let offset = pp.buffer[pp.offset+1] + pp.offset;\n let end = pp.offset + pp.length;\n for (; offset < end; offset += 2)\n boundboxExtend(bbox, buffer[offset], buffer[offset+1]);\n}\n\nexport function boundbox(poly: any, bbox?: BoundBox): BoundBox\n{\n let i: number;\n\n if (bbox === undefined)\n bbox = { };\n\n if (poly)\n {\n // Collection\n if (poly.features)\n {\n for (i = 0; i < poly.features.length; i++)\n boundbox(poly.features[i], bbox);\n }\n\n // feature\n else if (poly.geometry)\n {\n if (poly.geometry.packed)\n boundboxExtendPacked(poly.geometry.packed as PP.PolyPack, bbox);\n else if (poly.geometry.coordinates)\n boundbox(poly.geometry.coordinates, bbox);\n }\n\n // raw packed buffer\n else if (poly.offset !== undefined)\n boundboxExtendPacked(poly as PP.PolyPack, bbox);\n\n // array of other things (like raw coordinates, or other aggregates)\n else if (Array.isArray(poly) && typeof poly[0] !== 'number')\n {\n for (i = 0; i < poly.length; i++)\n boundbox(poly[i], bbox);\n }\n\n // single point\n else if (Array.isArray(poly) && poly.length >= 2)\n boundboxExtend(bbox, poly[0], poly[1]);\n }\n\n return bbox;\n}\n\nexport function boundboxPoly(bb: BoundBox): any\n{\n return [ [ [bb.left, bb.top], [bb.left, bb.bottom], [bb.right, bb.bottom], [bb.right, bb.top], [bb.left, bb.top] ] ];\n}\n\nexport function boundboxEmpty(bb: BoundBox): boolean\n{\n return !bb || bb.left === undefined || P.polyArea(boundboxPoly(bb)) == 0;\n}\n\nexport function boundboxArea(poly: any): number\n{\n return P.polyArea(boundboxPoly(boundbox(poly)));\n}\n\nexport function boundboxIntersects(bb1: BoundBox, bb2: BoundBox): boolean\n{\n return !(bb1.left > bb2.right || bb1.right < bb2.left || bb1.top < bb2.bottom || bb1.bottom > bb2.top);\n}\n\nexport function boundboxContains(bb: BoundBox, x: number, y: number): boolean\n{\n return !(bb.left >= x || bb.right < x || bb.top <= y || bb.bottom > y);\n}\n","//\n// GEO-FEATURES UTILITIES\n//\n\nimport * as GeoJSON from 'geojson';\nimport * as P from './poly';\nimport * as PP from './polypack';\n\n\n// HELPER\n\nfunction bufferToRing(b: Float64Array, s: number, nPoints: number): any\n{\n let r: any = [];\n let e = s + nPoints * 2;\n for (; s < e; s += 2)\n r.push([ b[s], b[s+1] ]);\n return r;\n}\n\nexport function polyParts(poly: any): GeoJSON.FeatureCollection\n{\n let pp = P.polyNormalize(poly);\n\n let parts: GeoJSON.FeatureCollection = { type: 'FeatureCollection', features: [] };\n let af: any = parts.features;\n let f: any;\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n let r = bufferToRing(b, iOffset, nPoints);\n if (iRing == 0)\n {\n f = { type: 'Feature',\n properties: { id: String(iPoly+1) },\n geometry: { type: 'Polygon', coordinates: [ r ] } };\n af.push(f);\n }\n else\n f.geometry.coordinates.push(r);\n });\n return parts;\n}\n\n// CARTESIAN (\"FLAT\") AREA, PERIMETER, AND DIAMETER\n\nexport function polyAreaFlat(poly: any): number\n{\n let pp = P.polyNormalize(poly);\n\n let a: number = 0;\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n a += polySimpleAreaFlat(b, iOffset, nPoints) * (iRing == 0 ? 1 : -1);\n });\n return a;\n}\n\n// Algorithm for the area of a simple/single planar polygon:\n// https://algorithmtutor.com/Computational-Geometry/Area-of-a-polygon-given-a-set-of-points/\n// https://mathopenref.com/coordpolygonarea2.html\n//\n// function polygonArea(X, Y, numPoints) \n// { \n// area = 0; // Accumulates area in the loop\n// j = numPoints-1; // The last vertex is the 'previous' one to the first\n\n// for (i=0; i<numPoints; i++)\n// { area = area + (X[j]+X[i]) * (Y[j]-Y[i]); \n// j = i; //j is previous vertex to i\n// }\n// return area/2;\n// }\n\n// Reimplemented to use polygons vs. X & Y vectors\nfunction polySimpleAreaFlat(b: Float64Array, i: number, nPoints: number): number\n{\n let a = 0;\n let e = i + nPoints * 2;\n let j = e - 2; // The last vertex is the 'previous' one to the first\n\n for (; i < e; i += 2)\n {\n a += (b[j] + b[i]) * (b[j+1] - b[i+1]);\n j = i;\n }\n return Math.abs(a / 2);\n}\n\n// You would need to divide by Poly.EARTH_RADIUS to go from the returned units of meters to Lat/Lon “units.”\n// NOTE - No conversion of degrees to radians!\n\nexport function polyPerimeterFlat(poly: any): number\n{\n let pp = P.polyNormalize(poly);\n\n let perimeter: number = 0;\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n // Ignore holes so only look at first ring\n if (iRing == 0)\n {\n let s = iOffset;\n let e = s + (nPoints-1) * 2; // index *at* last point since we look at next point in each iteration\n for (; s < e; s += 2)\n perimeter += _distance(b[s], b[s+1], b[s+2], b[s+3]);\n s = iOffset;\n if (nPoints > 2 && (b[s] != b[e] || b[s+1] != b[e+1]))\n perimeter += _distance(b[s], b[s+1], b[e], b[e+1]);\n }\n });\n\n return perimeter;\n}\n\nfunction _distance(x1: number, y1: number, x2: number, y2: number): number\n{\n const dLat = y2 - y1;\n const dLon = x2 - x1;\n let d: number;\n\n d = Math.sqrt((dLat * dLat) + (dLon * dLon));\n\n return d;\n}\n\n// The polyCircle code is already just treating the coordinate system as Cartesian.\n// So just compute circle and return diameter.\n\nexport function polyDiameterFlat(poly: any): number\n{\n let circle = P.polyToCircle(poly);\n return circle ? circle.r * 2 : 0;\n}\n","import { polyIntersects } from './union';\nimport { polyArea, polyDescribe } from './poly';\n\nfunction flattenMultiPoly(polys: any): any\n{\n let c: any[] = [];\n polys.forEach((poly: any) => {\n poly.forEach((ring: any) => {\n c.push([ring]);\n });\n });\n return c;\n}\n\n// Handed a multipolygon that may not have been properly structured as outer rings and inner holes, fix it up.\n// This is relatively expensive since we compute intersection areas to test for holes.\n//\nexport function featureCleanHoles(f: any): any\n{\n if (!f\n || f.type !== 'Feature'\n || !f.geometry\n || f.geometry.type !== 'MultiPolygon'\n || !Array.isArray(f.geometry.coordinates))\n return f;\n\n // Bail out if excessive computation cost (and complex poly likely already correct, heuristically)\n let d = polyDescribe(f);\n if (d.npoly + d.nhole > 10)\n {\n //console.log(`featureCleanHoles: bailing out on polygon with ${d.npoly} polygons and ${d.nhole} holes`);\n return f;\n }\n\n // Normalize to flattened polygon\n f.geometry.coordinates = flattenMultiPoly(f.geometry.coordinates);\n\n let polys = f.geometry.coordinates;\n let areas: number[] = polys.map(polyArea);\n // Compute 'top triangle' of overlap grid, then reflect\n let overlaps: boolean[][] = polys.map((p1: any, i: number) => {\n return polys.map((p2: any, j: number) => { return j <= i ? false : polyIntersects(p1, p2) });\n });\n // Now reflect\n let n = polys.length;\n for (let i = 0; i < n-1; i++)\n for (let j = i+1; j < n; j++)\n overlaps[j][i] = overlaps[i][j];\n\n // The outer polygon is one that\n // 1. Overlaps with this one\n // 2. Has a larger area than this one\n // 3. Has the smallest area of any that overlap\n // 4. There are an odd number of polygons that satisfy 1 and 2. (This allows nesting of polygons inside holes.)\n //\n function findOuter(i: number): number\n {\n let jOuter = -1;\n let aOuter = 0;\n let nOverlap = 0;\n\n for (let j = 0; j < n; j++)\n if (overlaps[i][j] && areas[j] > areas[i])\n {\n nOverlap++;\n if (jOuter < 0 || areas[j] < aOuter)\n {\n jOuter = j;\n aOuter = areas[j];\n }\n }\n return (nOverlap % 2) == 1 ? jOuter : -1;\n }\n\n // Walk through and match up holes with their containers\n for (let i = 0; i < n; i++)\n {\n let j = findOuter(i);\n if (j >= 0)\n {\n polys[j].push(polys[i][0]);\n polys[i] = [];\n }\n }\n\n // Delete outer shell of hole rings that were moved\n f.geometry.coordinates = polys.filter((p: any[]) => p.length > 0);\n\n // Degenerate multi-polygon\n if (f.geometry.coordinates.length == 1)\n {\n f.geometry.type = 'Polygon';\n f.geometry.coordinates = f.geometry.coordinates[0];\n }\n\n return f;\n}\n","//\n// CONVEX HULL USING GRAHAM SCAN ALGORITHM\n//\n/* Resources:\n * https://en.wikipedia.org/wiki/Graham_scan\n * https://www.tutorialspoint.com/Graham-Scan-Algorithm <<< pseudo code\n * http://brian3kb.github.io/graham_scan_js/ <<< basis for this implementation\n */\n\nimport {polyNormalize, PolyOptions} from './poly';\nimport * as PP from './polypack';\n\ntype SimplePoint = [number, number];\n\n\nexport function makeConvexHullGrahamScan(poly: any, options?: PolyOptions): any\n{\n let points = getExteriorPoints(poly);\n if (points == null) return null;\n\n let scanner = new GrahamScanner();\n\n for (let pt of points) {\n scanner.addPoint(pt);\n }\n\n const ch: SimplePoint[] = scanner.getHull();\n\n return [ ch ];\n}\n\n// NOTE - This finds the exterior points of a polygon in standard form and returns\n// it as an array if [x, y] points, in contrast to polyToExteriorPoints() which\n// uses the packed format and the poly.ts-private point form.\nfunction getExteriorPoints(poly: any): SimplePoint[]\n{\n let pp = polyNormalize(poly);\n if (pp == null) return null;\n\n let points: SimplePoint[] = [];\n\n PP.polyPackEachPoint(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number) => {\n if (iRing > 0) return; // skip holes\n points.push([b[iOffset], b[iOffset+1]]);\n });\n\n return points.length > 0 ? points : null;\n}\n\nconst X = 0, Y = 1;\n\nclass GrahamScanner\n{\n anchorPoint: SimplePoint | undefined;\n reverse: boolean;\n points: SimplePoint[];\n\n constructor()\n {\n this.anchorPoint = undefined;\n this.reverse = false;\n this.points = [];\n }\n _findPolarAngle(a: SimplePoint, b: SimplePoint): number\n {\n const ONE_RADIAN = 57.295779513082;\n let deltaX, deltaY;\n\n // If the points are undefined, return a zero difference angle.\n if (!a || !b) return 0;\n\n deltaX = (b[X] - a[X]);\n deltaY = (b[Y] - a[Y]);\n\n if (deltaX == 0 && deltaY == 0) {\n return 0;\n }\n\n let angle = Math.atan2(deltaY, deltaX) * ONE_RADIAN;\n\n if (this.reverse) {\n if (angle <= 0) {\n angle += 360;\n }\n }\n else\n {\n if (angle >= 0) {\n angle += 360;\n }\n }\n\n return angle;\n }\n addPoint(pt: SimplePoint): void\n {\n // Check for a new anchor\n const newAnchor =\n ( this.anchorPoint === undefined ) ||\n ( this.anchorPoint[Y] > pt[Y] ) ||\n ( this.anchorPoint[Y] === pt[Y] && this.anchorPoint[X] > pt[X] );\n\n if ( newAnchor ) {\n if ( this.anchorPoint !== undefined ) {\n this.points.push(pt);\n }\n this.anchorPoint = pt;\n }\n else\n {\n this.points.push(pt);\n }\n }\n _sortPoints(): SimplePoint[] \n {\n var self = this;\n\n return this.points.sort(function(a: SimplePoint, b: SimplePoint) \n {\n const polarA = self._findPolarAngle(self.anchorPoint as SimplePoint, a);\n const polarB = self._findPolarAngle(self.anchorPoint as SimplePoint, b);\n \n if (polarA < polarB) {\n return -1;\n }\n if (polarA > polarB) {\n return 1;\n }\n \n return 0;\n });\n }\n _checkPoints(p0: SimplePoint, p1: SimplePoint, p2: SimplePoint): boolean \n {\n let difAngle;\n const cwAngle = this._findPolarAngle(p0, p1);\n const ccwAngle = this._findPolarAngle(p0, p2);\n\n if (cwAngle > ccwAngle) {\n difAngle = cwAngle - ccwAngle;\n\n return !(difAngle > 180);\n }\n else if (cwAngle < ccwAngle)\n {\n difAngle = ccwAngle - cwAngle;\n\n return (difAngle > 180);\n }\n\n return true;\n }\n getHull(): SimplePoint[] \n {\n let hullPoints: SimplePoint[] = [];\n let points: SimplePoint[];\n let pointsLength: number;\n\n this.reverse = this.points.every(\n function (point)\n {\n return (point[X] < 0 && point[Y] < 0);\n }\n );\n\n points = this._sortPoints();\n pointsLength = points.length;\n\n // If there are less than 3 points, joining these points creates a correct hull.\n if (pointsLength < 3) {\n points.unshift(this.anchorPoint as SimplePoint);\n return points;\n }\n\n // Move first two points to output array\n const first: SimplePoint = points.shift() as SimplePoint;\n const second: SimplePoint = points.shift() as SimplePoint;\n hullPoints.push(first, second);\n\n // Scan is repeated until no concave points are present.\n while (true) {\n let p0: SimplePoint;\n let p1: SimplePoint;\n let p2: SimplePoint;\n\n hullPoints.push(points.shift() as SimplePoint);\n\n p0 = hullPoints[hullPoints.length - 3];\n p1 = hullPoints[hullPoints.length - 2];\n p2 = hullPoints[hullPoints.length - 1];\n\n if (this._checkPoints(p0, p1, p2)) {\n hullPoints.splice(hullPoints.length - 2, 1);\n }\n\n if (points.length == 0) \n {\n if (pointsLength == hullPoints.length) \n {\n // Check for duplicate anchorPoint edge-case, if not found, add the anchorpoint as the first item.\n const ap: SimplePoint = this.anchorPoint as SimplePoint;\n // Remove any udefined elements in the hullPoints array.\n hullPoints = hullPoints.filter(function(p) { return !!p; });\n if (!hullPoints.some(function(p){\n return(p[X] == ap[X] && p[Y] == ap[Y]);\n })) {\n hullPoints.unshift(this.anchorPoint as SimplePoint);\n }\n return hullPoints;\n }\n points = hullPoints;\n pointsLength = points.length;\n hullPoints = [];\n const first: SimplePoint = points.shift() as SimplePoint;\n const second: SimplePoint = points.shift() as SimplePoint;\n hullPoints.push(first, second);\n }\n }\n }\n}\n\n/**\n * Graham's Scan Convex Hull Algorithm\n * @desc An implementation of the Graham's Scan Convex Hull algorithm in JavaScript.\n * @author Brian Barnett, brian@3kb.co.uk, http://brianbar.net/ || http://3kb.co.uk/\n * @version 1.0.5\n */\n\n/*\nfunction ConvexHullGrahamScan() {\n this.anchorPoint = undefined;\n this.reverse = false;\n this.points = [];\n}\n\nConvexHullGrahamScan.prototype = {\n\n constructor: ConvexHullGrahamScan,\n\n Point: function (x, y) {\n this.x = x;\n this.y = y;\n },\n\n _findPolarAngle: function (a, b) {\n var ONE_RADIAN = 57.295779513082;\n var deltaX, deltaY;\n\n //if the points are undefined, return a zero difference angle.\n if (!a || !b) return 0;\n\n deltaX = (b.x - a.x);\n deltaY = (b.y - a.y);\n\n if (deltaX == 0 && deltaY == 0) {\n return 0;\n }\n\n var angle = Math.atan2(deltaY, deltaX) * ONE_RADIAN;\n\n if (this.reverse){\n if (angle <= 0) {\n angle += 360;\n }\n }else{\n if (angle >= 0) {\n angle += 360;\n }\n }\n\n return angle;\n },\n\n addPoint: function (x, y) {\n //Check for a new anchor\n var newAnchor =\n (this.anchorPoint === undefined) ||\n ( this.anchorPoint.y > y ) ||\n ( this.anchorPoint.y === y && this.anchorPoint.x > x );\n\n if ( newAnchor ) {\n if ( this.anchorPoint !== undefined ) {\n this.points.push(new this.Point(this.anchorPoint.x, this.anchorPoint.y));\n }\n this.anchorPoint = new this.Point(x, y);\n } else {\n this.points.push(new this.Point(x, y));\n }\n },\n\n _sortPoints: function () {\n var self = this;\n\n return this.points.sort(function (a, b) {\n var polarA = self._findPolarAngle(self.anchorPoint, a);\n var polarB = self._findPolarAngle(self.anchorPoint, b);\n\n if (polarA < polarB) {\n return -1;\n }\n if (polarA > polarB) {\n return 1;\n }\n\n return 0;\n });\n },\n\n _checkPoints: function (p0, p1, p2) {\n var difAngle;\n var cwAngle = this._findPolarAngle(p0, p1);\n var ccwAngle = this._findPolarAngle(p0, p2);\n\n if (cwAngle > ccwAngle) {\n\n difAngle = cwAngle - ccwAngle;\n\n return !(difAngle > 180);\n\n } else if (cwAngle < ccwAngle) {\n\n difAngle = ccwAngle - cwAngle;\n\n return (difAngle > 180);\n\n }\n\n return true;\n },\n\n getHull: function () {\n var hullPoints = [],\n points,\n pointsLength;\n\n this.reverse = this.points.every(function(point){\n return (point.x < 0 && point.y < 0);\n });\n\n points = this._sortPoints();\n pointsLength = points.length;\n\n //If there are less than 3 points, joining these points creates a correct hull.\n if (pointsLength < 3) {\n points.unshift(this.anchorPoint);\n return points;\n }\n\n //move first two points to output array\n hullPoints.push(points.shift(), points.shift());\n\n //scan is repeated until no concave points are present.\n while (true) {\n var p0,\n p1,\n p2;\n\n hullPoints.push(points.shift());\n\n p0 = hullPoints[hullPoints.length - 3];\n p1 = hullPoints[hullPoints.length - 2];\n p2 = hullPoints[hullPoints.length - 1];\n\n if (this._checkPoints(p0, p1, p2)) {\n hullPoints.splice(hullPoints.length - 2, 1);\n }\n\n if (points.length == 0) {\n if (pointsLength == hullPoints.length) {\n //check for duplicate anchorPoint edge-case, if not found, add the anchorpoint as the first item.\n var ap = this.anchorPoint;\n //remove any udefined elements in the hullPoints array.\n hullPoints = hullPoints.filter(function(p) { return !!p; });\n if (!hullPoints.some(function(p){\n return(p.x == ap.x && p.y == ap.y);\n })) {\n hullPoints.unshift(this.anchorPoint);\n }\n return hullPoints;\n }\n points = hullPoints;\n pointsLength = points.length;\n hullPoints = [];\n hullPoints.push(points.shift(), points.shift());\n }\n }\n }\n};\n\n// EXPORTS\n\nif (typeof define === 'function' && define.amd) {\n define(function() {\n return ConvexHullGrahamScan;\n });\n}\nif (typeof module !== 'undefined') {\n module.exports = ConvexHullGrahamScan;\n}\n\n*/\n","import * as G from '../geo/all';\nimport * as P from './poly';\nimport * as PP from './polypack';\nimport * as PL from './polylabel';\nimport * as BB from './boundbox';\nimport { polyContainsPoint } from './pointinpoly';\nimport { Control } from '../control/all';\n\nfunction setLabels(c: G.GeoFeatureCollection): void\n{\n c.features.forEach(f => {\n if (f.properties.labelx === undefined)\n {\n let {x,y} = PL.polyLabel(f);\n f.properties.labelx = x;\n f.properties.labely = y;\n }\n });\n}\n\n// polyMapTo:\n//\n// Given a set of underlying blocks (or precincts), map them to the district (or any other feature)\n// they are contained in.\n//\n// If a block maps to multiple districts or no district, it is left out of the result.\n//\n// Note that the algorithm is to see where the centroid of the block overlaps. So a block\n// could potentially overlap multiple districts and this would return only the one containing\n// the centroid.\n//\n// The thinking is that if you want fine granularity, use real blocks as the base collection.\n// If you provide precincts, you will get a result on precinct granularity.\n//\n// The return value is an object that maps the block feature ids to the district feature id.\n//\nexport function polyMapToByCentroid(districts: G.GeoFeatureCollection, centroids: G.GeoCentroidMap, control?: Control): any\n{\n let map: any = {};\n\n // Cache district boundboxes for quick containment exclusion\n let fs: G.GeoFeature[] = districts.features;\n let bbDistricts: BB.BoundBox[] = fs.map(f => BB.boundbox(f));\n let aDistricts: number[] = fs.map(f => P.polyArea(f));\n\n // Walk over blocks, mapping centroid to district\n let canceled = false;\n let keys = Object.keys(centroids);\n keys.forEach((blockid: string, k: number) => {\n canceled = canceled || control?.isCanceled();\n if (canceled) return;\n let x = centroids[blockid].x;\n let y = centroids[blockid].y;\n\n let fIn: number[] = [];\n fs.forEach((fDistrict: G.GeoFeature, i: number) => {\n if (BB.boundboxContains(bbDistricts[i], x, y))\n if (polyContainsPoint(fDistrict, x, y))\n fIn.push(i);\n });\n\n if (fIn.length == 1)\n map[blockid] = fs[fIn[0]].properties.id;\n else if (fIn.length > 1)\n {\n // Pick district with smallest area since some times we get malformed content that doesn't\n // reflect holes in districts when one is nested in another. So theory is smaller district\n // is a hole in containing larger one(s).\n let iLow = fIn[0];\n for (let i = 1; i < fIn.length; i++)\n if (aDistricts[fIn[i]] < aDistricts[iLow])\n iLow = fIn[i];\n map[blockid] = fs[iLow].properties.id;\n }\n\n if (control) control.statusUpdate(k, keys.length);\n });\n\n return canceled ? undefined : map;\n}\n\nexport function polyMapTo(districts: G.GeoFeatureCollection, blocks: G.GeoFeatureCollection, control?: Control): any\n{\n // Cache labelx, labely if necessary\n setLabels(blocks);\n\n let centroids: G.GeoCentroidMap = {};\n blocks.features.forEach(f => {\n centroids[f.properties.id] = { x: f.properties.labelx, y: f.properties.labely }\n });\n\n return polyMapToByCentroid(districts, centroids, control);\n}\n","//\n// SOME BASIC MATRIX OPERATIONS FOR MBR\n//\n\n/* \n\nThese custom functions are used by minimumBoundingRectangle(), instead of the\nsame-named mathjs versions. They are tailored specifically for that routine and\nare NOT intended for general use.\n\nexport declare function matrix(x: Matrix): Matrix;\n\nexport declare function multiply(a: Matrix, b: Matrix): Matrix;\n\nexport declare function transpose(a: Matrix, b: Matrix): Matrix;\n\nexport declare function apply((a: Matrix, over: Dim, cb: applyCB): Vector;\n\nexport declare function min(a: Vector): number;\n\nexport declare function max(a: Vector): number;\n\nexport declare function concat(a: Matrix, b: Matrix, by: Dim): Matrix;\n\nexport declare function row(a: Matrix, i: number): Vector;\n\nexport declare function subtract(a: Vector, b: Vector): Vector;\n\nexport declare function dotMultiply(a: Vector, b: Vector): Vector;\n\nexport declare function index(a: Range, b: Range): Index;\n\nexport declare function range(start: number, end: number, includeEnd: boolean = false): Vector;\n\nexport declare function subset(a: Matrix, select: Index): Matrix;\n\n*/\n\n\nexport type Matrix = number[][];\nexport type Vector = number[]; // A general vector or a row or a column\nexport type Range = number[];\nexport type Index = number[][];\nexport type applyCB = (v: Vector) => number;\n\nexport const enum Dim\n{\n Rows,\n Columns\n}\n\nexport function matrix(a: Matrix): Matrix\n{\n return a;\n}\n\nexport function multiply(a: Matrix, b: Matrix): Matrix\n{\n protect((nRows(a) > 0), \"In multiply, input matrix 'a' has no rows. \");\n protect((nCols(a) > 0), \"In multiply, input matrix 'a' has no columns. \");\n protect((nRows(b) > 0), \"In multiply, input matrix 'b' has no rows. \");\n protect((nCols(b) > 0), \"In multiply, input matrix 'b' has no columns. \");\n\n const m = nRows(a);\n const n = nCols(a);\n const p = nRows(b);\n const q = nCols(b);\n\n protect((p == n), \"In multiply, the # rows in matrix 'b' doesn't match the number of columns in matrix 'a'.\");\n\n let c: Matrix = initialize(m, n);\n\n for (let i = 0; i < m; i++)\n {\n for (let j = 0; j < q; j++)\n {\n const aRow = row(a, i);\n const bCol = column(b, j);\n\n c[i][j] = dotProduct(aRow, bCol);\n }\n }\n\n return c;\n}\n\nexport function transpose(a: Matrix): Matrix\n{\n protect((nRows(a) > 0), \"In transpose, input matrix has no rows. \");\n protect((nCols(a) > 0), \"In transpose, input matrix has no columns. \");\n\n const j = nRows(a);\n const i = nCols(a);\n\n let b: Matrix = initialize(i, j);\n\n for (let m = 0; m < j; m++)\n {\n for (let n = 0; n < i; n++)\n {\n b[n][m] = a[m][n];\n }\n }\n\n return b;\n}\n\nexport function apply(a: Matrix, over: Dim, cb: applyCB): Vector\n{\n protect((nRows(a) > 0), \"In apply, input matrix has no rows. \");\n protect((nCols(a) > 0), \"In apply, input matrix has no columns. \");\n\n let m = nRows(a);\n let n = nCols(a);\n\n let result: Vector = [];\n\n const iEnd = (over == Dim.Rows) ? m : n;\n const extractFn = (over == Dim.Rows) ? row : column;\n\n for (let i = 0; i < iEnd; i++)\n {\n const v: Vector = extractFn(a, i);\n result.push(cb(v));\n }\n\n return result;\n}\n\nexport function min(v: Vector): number\n{\n return Math.min(...v);\n}\n\nexport function max(v: Vector): number\n{\n return Math.max(...v);\n}\n\nexport function concat(a: Matrix, b: Matrix, by: Dim): Matrix\n{\n protect((nRows(a) > 0), \"In concat, input matrix 'a' has no rows. \");\n protect((nCols(a) > 0), \"In concat, input matrix 'a' has no columns. \");\n protect((nRows(b) > 0), \"In concat, input matrix 'b' has no rows. \");\n protect((nCols(b) > 0), \"In concat, input matrix 'b' has no columns. \");\n\n let m = nRows(a);\n let n = nCols(a);\n const p = nRows(b);\n const q = nCols(b);\n\n const {i, j} = (by == Dim.Columns) ? {i: m, j: n + q} : {i: m + p, j: n};\n let c: Matrix = initialize(i, j);\n\n if (by == Dim.Rows)\n protect((n == q), \"In concat, concatenating rows but the # of columns don't match. \");\n else // (by == Dim.Columns)\n protect((m == p), \"In concat, concatenating columns but the # of rows don't match. \");\n\n // Copy the first array\n for (let i = 0; i < m; i++)\n {\n for (let j = 0; j < n; j++)\n {\n c[i][j] = a[i][j];\n }\n }\n\n m = (by == Dim.Rows) ? m : 0;\n n = (by == Dim.Columns) ? n : 0;\n\n // Copy the second array to the right (by columns) or below (by rows)\n for (let i = 0; i < p; i++)\n {\n for (let j = 0; j < q; j++)\n {\n c[i+m][j+n] = b[i][j];\n }\n }\n\n return c;\n}\n\nexport function row(a: Matrix, i: number): Vector\n{\n protect((nRows(a) > 0), \"In row, input matrix has no rows. \");\n protect((nCols(a) > 0), \"In row, input matrix has no columns. \");\n protect((i >= 0), \"In row, invalid row index.\");\n\n return a[i];\n}\n\nexport function column(a: Matrix, j: number): Vector\n{\n protect((nRows(a) > 0), \"In column, input matrix has no rows. \");\n protect((nCols(a) > 0), \"In column, input matrix has no columns. \");\n protect((j >= 0), \"In row, invalid column index.\");\n\n let v: any = [];\n\n for (let i = 0; i < nRows(a); i++)\n {\n v.push(a[i][j]);\n }\n\n return v;\n}\n\nexport function subtract(a: Vector, b: Vector): Vector\n{\n protect((a.length == b.length), \"In subtract, the input vectors have different lengths.\");\n\n let c: Vector = [];\n\n for (let i = 0; i < a.length; i++)\n {\n c.push(a[i] - b[i]);\n }\n\n return c;\n}\n\nexport function dotMultiply(a: Vector, b: Vector): Vector\n{\n protect((a.length > 0) && (a.length == b.length), \"In dotMultiply, the vectors aren't the same length. \");\n\n let c: Vector = [];\n\n for (let i = 0; i < a.length; i++)\n {\n c.push(a[i] * b[i]);\n }\n\n return c;\n}\n\nexport function index(a: Range, b: Range): Index\n{\n return [a, b];\n}\n\nexport function range(start: number, end: number, includeEnd: boolean = false): Vector\n{\n let r: Vector = [];\n\n end += includeEnd ? 1 : 0;\n for (let i = start; i < end; i++)\n {\n r.push(i);\n }\n \n return r;\n}\n\nexport function subset(a: Matrix, select: Index): Matrix\n{\n protect((nRows(a) > 0), \"In subset, input matrix has no rows. \");\n protect((nCols(a) > 0), \"In subset, input matrix has no columns. \");\n\n protect((nRows(select) > 0), \"In subset, input matrix has no rows. \");\n protect((nCols(select) > 0), \"In subset, input matrix has no columns. \");\n\n const m = nRows(a);\n const n = nCols(a);\n\n const rowRange = row(select, 0) as Range;\n const colRange = row(select, 1) as Range;\n const p = rowRange.length;\n const q = colRange.length;\n\n let b: Matrix = initialize(p, q);\n\n for (let i = 0; i < p; i++)\n {\n for (let j = 0; j < q; j++)\n {\n b[i][j] = a[rowRange[i]][colRange[j]];\n }\n }\n\n return b;\n}\n\n\n// HELPERS\n\nfunction initialize(rows: number, cols: number): Matrix\n{\n protect(((rows > 0) || (cols > 0)), \"In initialize, the # of rows or columns is not positive. \");\n\n return [...Array(rows)].fill(0).map(() => [...Array(cols)].fill(0));\n};\n\nconst nRows = (a: Matrix | Index) => a.length;\nconst nCols = (a: Matrix | Index) => (a.length > 0) ? a[0].length : 0;\n\nexport function dotProduct(a: Vector, b: Vector): number\n{\n protect((a.length > 0) && (a.length == b.length), \"In dotProduct, the vectors aren't the same length. \");\n\n return a.map((value, i) => value * b[i]).reduce((acc, val) => acc + val, 0);\n};\n\n\nfunction protect(condition: boolean, message: string): void\n{\n if (!condition)\n throw new Error(message);\n}\n","//\n// MINIMUM BOUNDING RECTANGLE - aka minimum area rectangle -or- smallest enclosing rectangle\n//\n\n//\n// WHUBER'S ELEGANT, TRIG-FREE SOLUTION IN R\n//\n// https://gis.stackexchange.com/questions/22895/finding-minimum-area-rectangle-for-given-points\n//\n\n/*\n\nMBR <- function(p) {\n # Analyze the convex hull edges \n a <- chull(p) # Indexes of extremal points\n a <- c(a, a[1]) # Close the loop\n e <- p[a[-1],] - p[a[-length(a)], ] # Edge directions\n norms <- sqrt(rowSums(e^2)) # Edge lengths\n v <- e / norms # Unit edge directions\n w <- cbind(-v[,2], v[,1]) # Normal directions to the edges\n\n # Find the MBR\n vertices <- p[a, ] # Convex hull vertices\n x <- apply(vertices %*% t(v), 2, range) # Extremes along edges\n y <- apply(vertices %*% t(w), 2, range) # Extremes normal to edges\n areas <- (y[1,]-y[2,])*(x[1,]-x[2,]) # Areas\n k <- which.min(areas) # Index of the best edge (smallest area)\n\n # Form a rectangle from the extremes of the best edge\n cbind(x[c(1,2,2,1,1),k], y[c(1,1,2,2,1),k]) %*% rbind(v[k,], w[k,])\n}\n\n*/\n\n\n//\n// THIS RE-IMPLEMENTS THE R IN TYPESCRIPT, USING CUSTOM MATRIX OPERATIONS\n//\n\nimport { polyConvexHull } from './poly';\nimport * as M from './matrix';\n\ntype Point = [number, number];\n\n// For point addressing\nconst X = 0, Y = 1;\n\nexport function minimumBoundingRectangle(poly: any): any\n{\n // Get the convex hull polygon in standard form\n const ch = polyConvexHull(poly); \n\n // Select the exterior points (outer ring = 0)\n let chExt: Point[] = ch[0];\n\n // Close the loop (ring)\n chExt.push(chExt[0]);\n\n // Edge directions - Note the implict offset array indexing\n const e: Point[] = chExt.slice(1).map((pt, i) => [(pt[X] - chExt[i][X]), (pt[Y] - chExt[i][Y])]);\n\n // Edge lengths\n const norms: number[] = e.map(pt => Math.sqrt((pt[X] ** 2) + (pt[Y] ** 2)));\n\n // Unit edge directions\n const v: Point[] = e.map((pt, i) => [(pt[X] / norms[i]), (pt[Y] / norms[i])]);\n\n // Normal directions to the edges\n const w: Point[] = v.map(pt => [-pt[Y], pt[X]]);\n\n // FIND THE MBR - Switch to matrix operations\n\n // Convex hull vertices\n const vertices = M.matrix(chExt);\n\n const vT = M.transpose(M.matrix(v));\n const wT = M.transpose(M.matrix(w));\n\n // Extremes along edges\n const temp1 = M.matrix([M.apply(M.multiply(vertices, vT), M.Dim.Columns, M.min)]);\n const temp2 = M.matrix([M.apply(M.multiply(vertices, vT), M.Dim.Columns, M.max)]);\n const x = M.concat(temp1, temp2, M.Dim.Rows);\n\n // Extremes normal to edges\n const temp3 = M.matrix([M.apply(M.multiply(vertices, wT), M.Dim.Columns, M.min)]);\n const temp4 = M.matrix([M.apply(M.multiply(vertices, wT), M.Dim.Columns, M.max)]);\n const y = M.concat(temp3, temp4, M.Dim.Rows);\n\n // Areas\n const temp5 = M.subtract(M.row(y, 0), M.row(y, 1));\n const temp6 = M.subtract(M.row(x, 0), M.row(x, 1));\n const areas = M.dotMultiply(temp5, temp6);\n\n // Index of the best edge (smallest area)\n const smallestArea = Math.min(...areas);\n const k = [ areas.indexOf(smallestArea) ];\n\n // Form a rectangle from the extremes of the best edge\n const temp7 = M.subset(x, M.index([0, 1, 1, 0, 0], k));\n const temp8 = M.subset(y, M.index([0, 0, 1, 1, 0], k));\n const temp9 = M.subset(v, M.index(k, M.range(0, 1, true)));\n const temp10 = M.subset(w, M.index(k, M.range(0, 1, true)));\n const temp11 = M.concat(temp7, temp8, M.Dim.Columns);\n const temp12 = M.concat(temp9, temp10, M.Dim.Rows);\n\n const rect = M.multiply(temp11, temp12);\n\n // Revert back to standard TypeScript arrays\n const points = rect.slice(0, -1); // Remove the closing point\n\n // Convert to standard polygon form\n return [ points ];\n}\n\n\n//\n// THIS RE-IMPLEMENTS THE R IN TYPESCRIPT, USING MATHJS FOR MATRIX OPERATIONS\n//\n\n/*\n\nconst {\n matrix,\n multiply,\n transpose,\n apply,\n min,\n max,\n concat,\n row,\n subtract,\n dotMultiply,\n index,\n range,\n subset\n} = require('mathjs');\n\ntype SimplePoint = [number, number];\n\n// For point addressing\nconst X = 0, Y = 1;\nconst COLUMNS = 0, ROWS = 1;\n\nexport function minimumBoundingRectangle(poly: any): any\n{\n // Get the convex hull polygon in standard form\n const ch = polyConvexHull(poly); \n\n // Select the exterior points\n let chExt: SimplePoint[] = ch[0];\n\n // Close the loop (ring)\n chExt.push(chExt[0]);\n\n // Edge directions - Note the implict offset array indexing\n const e: SimplePoint[] = chExt.slice(1).map((pt, i) => [(pt[X] - chExt[i][X]), (pt[Y] - chExt[i][Y])]);\n\n // Edge lengths\n const norms: number[] = e.map(pt => Math.sqrt((pt[X] ** 2) + (pt[Y] ** 2)));\n\n // Unit edge directions\n const v: SimplePoint[] = e.map((pt, i) => [(pt[X] / norms[i]), (pt[Y] / norms[i])]);\n\n // Normal directions to the edges\n const w: SimplePoint[] = v.map(pt => [-pt[Y], pt[X]]);\n\n // FIND THE MBR\n\n // Switch to MathJS matrices for matrix operations\n\n // Convex hull vertices\n const vertices = matrix(chExt);\n\n const vT = transpose(matrix(v));\n const wT = transpose(matrix(w));\n\n // Extremes along edges\n const temp1 = matrix([apply(multiply(vertices, vT), COLUMNS, min)]);\n const temp2 = matrix([apply(multiply(vertices, vT), COLUMNS, max)]);\n const x = concat(temp1, temp2, COLUMNS);\n\n // Extremes normal to edges\n const temp3 = matrix([apply(multiply(vertices, wT), COLUMNS, min)]);\n const temp4 = matrix([apply(multiply(vertices, wT), COLUMNS, max)]);\n const y = concat(temp3, temp4, COLUMNS);\n\n // Areas\n const temp5 = subtract(row(y, 0), row(y, 1));\n const temp6 = subtract(row(x, 0), row(x, 1));\n const areas = dotMultiply(temp5, temp6);\n\n // Index of the best edge (smallest area)\n const areasArr = areas.valueOf()[0]; // Make the 2D matrix a 1D array\n const smallestArea = Math.min( ...areasArr );\n const k = areasArr.indexOf(smallestArea);\n\n // Form a rectangle from the extremes of the best edge\n const temp7 = subset(x, index([0, 1, 1, 0, 0], k));\n const temp8 = subset(y, index([0, 0, 1, 1, 0], k));\n const temp9 = subset(v, index(k, range(0, 1, true)));\n const temp10 = subset(w, index(k, range(0, 1, true)));\n const rect = multiply(concat(temp7, temp8), concat(temp9, temp10, COLUMNS));\n\n // Revert back to standard TypeScript arrays\n const points = rect.valueOf().slice(0, -1); // Remove the closing point\n\n // Convert to standard polygon form\n return [ points ];\n}\n\n*/\n","import * as PP from './polypack';\n\nexport function polyContainsPoint(poly: any, x: number, y: number): boolean\n{\n let pp = PP.polyPack(poly);\n if (pp == null) return false;\n let bInside = false;\n let iCurPoly = -1;\n let bCurInside = false;\n\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n if (iRing == 0)\n {\n if (iCurPoly >= 0 && bCurInside)\n bInside = true;\n iCurPoly = iPoly;\n bCurInside = false;\n }\n let inside = false;\n let iEnd = iOffset + (nPoints - 1) * 2;\n for (let i = iOffset, j = iEnd; i <= iEnd; j = i, i += 2)\n {\n let xi = b[i], yi = b[i+1];\n let xj = b[j], yj = b[j+1];\n let intersect = ((yi > y) !== (yj > y))\n && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\n if (intersect) inside = !inside;\n }\n if (inside)\n bCurInside = iRing == 0; // not inside if inside a hole\n });\n if (iCurPoly >= 0 && bCurInside)\n bInside = true;\n return bInside;\n}\n","import * as Util from '../util/all';\n\nimport * as PP from './polypack';\nimport { makeConvexHullGrahamScan } from './graham-scan';\nimport { polyIntersects } from './union';\nimport { featureCleanHoles } from './featurecleanholes';\n\n// For incremental poly interface\nexport interface TickOptions\n{\n maxLeafCount?: number;\n maxDepth?: number;\n tickStep?: number;\n}\n\nexport const DefaultTickOptions = { maxLeafCount: 256, maxDepth: 20, tickStep: 1 };\n\n\n// Internal utilities\n\nexport const EARTH_RADIUS = 6371000; // Radius of earth in meters\n\nexport interface PolyOptions\n{\n noLatitudeCorrection?: boolean;\n}\nexport const DefaultOptions: PolyOptions = { };\n\n// Return geographic polygon area in meters^2\nexport function polySimpleArea(b: Float64Array, iOffset: number, n: number): number\n{\n let p1x: number;\n let p1y: number;\n let p2x: number;\n let p2y: number;\n let p3x: number;\n let p3y: number;\n let dx: number;\n let l: number;\n let m: number;\n let u: number;\n let i: number;\n let total: number = 0;\n if (n > 2)\n {\n for (i = 0; i < n; i++)\n {\n if (i === n - 2)\n {\n l = n - 2;\n m = n - 1;\n u = 0;\n }\n else if (i === n - 1)\n {\n l = n - 1;\n m = 0;\n u = 1;\n }\n else {\n l = i;\n m = i + 1;\n u = i + 2;\n }\n p1x = b[iOffset+l*2];\n p1y = b[iOffset+l*2+1];\n p2x = b[iOffset+m*2];\n p2y = b[iOffset+m*2+1];\n p3x = b[iOffset+u*2];\n p3y = b[iOffset+u*2+1];\n dx = (Util.deg2rad(p3x) - Util.deg2rad(p1x));\n dx *= Math.sin(Util.deg2rad(p2y));\n total += dx;\n }\n total *= EARTH_RADIUS * EARTH_RADIUS / 2;\n }\n return Math.abs(total);\n}\n\n// Allow bare polygon coordinates array or GeoJSON feature.\n// Normalize to multipolygon points array.\n\nexport function polyNormalize(poly: any): PP.PolyPack\n{\n return PP.polyPack(poly);\n}\n\nexport function polyNull(poly: any): boolean\n{\n let pp = PP.polyPack(poly);\n return pp == null || pp.length == 2;\n}\n\n// Area of geodesic polygon\nexport function polyArea(poly: any): number\n{\n let pp = polyNormalize(poly);\n let a: number = 0;\n\n // MultiPolygon is a set of polygons\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n a += polySimpleArea(b, iOffset, nPoints) * (iRing == 0 ? 1 : -1);\n });\n\n return a;\n}\n\n// NOTE - COMPACTNESS: Added the diameter of the geodesic polygon in meters\nexport function polyDiameter(poly: any, options?: PolyOptions): number\n{\n if (options === undefined) options = DefaultOptions;\n\n const ch: any = polyConvexHull(poly);\n const chCircle: Circle = polyToCircle(ch);\n\n const lon: number = chCircle.x;\n const lat: number = chCircle.y;\n const r: number = chCircle.r;\n\n const lonDistance: number = haversine(lon - r, lat, lon + r, lat, options);\n const latDistance: number = haversine(lon, lat - r, lon, lat + r, options);\n\n const diameter: number = Math.max(lonDistance, latDistance);\n \n return diameter;\n}\n\n// Return distance in meters given two lat/lon points\nfunction haversine(x1: number, y1: number, x2: number, y2: number, options: PolyOptions): number\n{\n let dLat = Util.deg2rad(y2 - y1);\n let dLon = Util.deg2rad(x2 - x1);\n let c: number;\n\n // Short circuit for using simple cartesian algorithm instead of haversine\n if (options.noLatitudeCorrection)\n c = Math.sqrt((dLat*dLat)+(dLon*dLon));\n else\n {\n let lat1 = Util.deg2rad(y1);\n let lat2 = Util.deg2rad(y2);\n\n let a = Math.sin(dLat/2) * Math.sin(dLat/2) +\n Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2)\n c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a))\n }\n\n return EARTH_RADIUS * c;\n}\n\n// The perimeter of geodesic polygon in meters\nexport function polyPerimeter(poly: any, options?: PolyOptions): number\n{\n if (options === undefined) options = DefaultOptions;\n\n let pp = polyNormalize(poly);\n let perimeter: number = 0;\n\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n if (iRing > 0) return; // skip holes\n let iStart = iOffset;\n let iEnd = (iOffset + nPoints * 2) - 2; // index to last point, not past last point\n for (; iOffset < iEnd; iOffset += 2)\n perimeter += haversine(b[iOffset], b[iOffset+1], b[iOffset+2], b[iOffset+3], options);\n\n // Close ring if necessary\n if (nPoints > 2 && (b[iStart] != b[iEnd] || b[iStart+1] != b[iEnd+1]))\n perimeter += haversine(b[iStart], b[iStart+1], b[iEnd], b[iEnd+1], options);\n });\n\n return perimeter;\n}\n\nclass Point {\n\tpublic constructor(\n\t\tpublic x: number,\n\t\tpublic y: number) {}\n}\n\nexport class Circle {\n\tpublic constructor(\n\t\tpublic x: number,\n\t\tpublic y: number,\n\t\tpublic r: number) {}\n}\n\n//\n// Returns the smallest circle that encloses the given polygon.\n// Runs in expected O(n) time, randomized.\n// Note: If 0 points are given, null is returned.\n// If 1 point is given, a circle of radius 0 is returned.\n//\n\nexport function polyToCircle(poly: any): Circle|null\n{\n return makeCircle(polyToExteriorPoints(poly));\n}\n\n//\n// Returns the circle whose perimeter is equal to the perimeter of the bounding perimeter\n// of the polygon. Use binary search to find an approximation.\n//\n\nexport function polyToPolsbyPopperCircle(poly: any, options?: PolyOptions): Circle|null\n{\n let pp = polyNormalize(poly);\n\n let c = polyToCircle(poly);\n if (c == null) return c;\n let p: number = polyPerimeter(poly, options);\n c.r = (p / (2 * Math.PI)) / 111139;\n return c;\n}\n\nfunction makeCircle(points: Array<Point>): Circle|null\n{\n if (points == null) return null;\n\n\t// Clone list to preserve the caller's data, do Durstenfeld shuffle\n\tlet shuffled: Array<Point> = points.slice();\n\tfor (let i = points.length - 1; i >= 0; i--) {\n\t\tlet j = Math.floor(Math.random() * (i + 1));\n\t\tj = Math.max(Math.min(j, i), 0);\n\t\tconst temp: Point = shuffled[i];\n\t\tshuffled[i] = shuffled[j];\n\t\tshuffled[j] = temp;\n\t}\n\n\t// Progressively add points to circle or recompute circle\n\tlet c: Circle|null = null;\n\tshuffled.forEach((p: Point, i: number) => {\n\t\tif (c === null || !isInCircle(c, p))\n\t\t\tc = makeCircleOnePoint(shuffled.slice(0, i + 1), p);\n\t});\n\treturn c;\n}\n\n// One boundary point known\nfunction makeCircleOnePoint(points: Array<Point>, p: Point): Circle\n{\n\tlet c: Circle = new Circle(p.x, p.y, 0);\n\tpoints.forEach((q: Point, i: number) => {\n\t\tif (!isInCircle(c, q)) {\n\t\t\tif (c.r == 0)\n\t\t\t\tc = makeDiameter(p, q);\n\t\t\telse\n\t\t\t\tc = makeCircleTwoPoints(points.slice(0, i + 1), p, q);\n\t\t}\n\t});\n\treturn c;\n}\n\n// Two boundary points known\nfunction makeCircleTwoPoints(points: Array<Point>, p: Point, q: Point): Circle\n{\n\tconst circ: Circle = makeDiameter(p, q);\n\tlet left : Circle|null = null;\n\tlet right: Circle|null = null;\n\n\t// For each point not in the two-point circle\n\tfor (const r of points) {\n\t\tif (isInCircle(circ, r))\n\t\t\tcontinue;\n\n\t\t// Form a circumcircle and classify it on left or right side\n\t\tconst cross: number = crossProduct(p.x, p.y, q.x, q.y, r.x, r.y);\n\t\tconst c: Circle|null = makeCircumcircle(p, q, r);\n\t\tif (c === null)\n\t\t\tcontinue;\n\t\telse if (cross > 0 && (left === null || crossProduct(p.x, p.y, q.x, q.y, c.x, c.y) > crossProduct(p.x, p.y, q.x, q.y, left.x, left.y)))\n\t\t\tleft = c;\n\t\telse if (cross < 0 && (right === null || crossProduct(p.x, p.y, q.x, q.y, c.x, c.y) < crossProduct(p.x, p.y, q.x, q.y, right.x, right.y)))\n\t\t\tright = c;\n\t}\n\n\t// Select which circle to return\n\tif (left === null && right === null)\n\t\treturn circ;\n\telse if (left === null && right !== null)\n\t\treturn right;\n\telse if (left !== null && right === null)\n\t\treturn left;\n\telse if (left !== null && right !== null)\n\t\treturn left.r <= right.r ? left : right;\n\telse\n\t\tthrow \"Assertion error\";\n}\n\nfunction makeDiameter(a: Point, b: Point): Circle\n{\n\tconst cx: number = (a.x + b.x) / 2;\n\tconst cy: number = (a.y + b.y) / 2;\n\tconst r0: number = Util.distance(cx, cy, a.x, a.y);\n\tconst r1: number = Util.distance(cx, cy, b.x, b.y);\n\treturn new Circle(cx, cy, Math.max(r0, r1));\n}\n\nfunction makeCircumcircle(a: Point, b: Point, c: Point): Circle|null\n{\n\t// Mathematical algorithm from Wikipedia: Circumscribed circle\n\tconst ox: number = (Math.min(a.x, b.x, c.x) + Math.max(a.x, b.x, c.x)) / 2;\n\tconst oy: number = (Math.min(a.y, b.y, c.y) + Math.max(a.y, b.y, c.y)) / 2;\n\tconst ax: number = a.x - ox; const ay: number = a.y - oy;\n\tconst bx: number = b.x - ox; const by: number = b.y - oy;\n\tconst cx: number = c.x - ox; const cy: number = c.y - oy;\n\tconst d: number = (ax * (by - cy) + bx * (cy - ay) + cx * (ay - by)) * 2;\n\tif (d == 0)\n\t\treturn null;\n\tconst x: number = ox + ((ax*ax + ay*ay) * (by - cy) + (bx*bx + by*by) * (cy - ay) + (cx*cx + cy*cy) * (ay - by)) / d;\n\tconst y: number = oy + ((ax*ax + ay*ay) * (cx - bx) + (bx*bx + by*by) * (ax - cx) + (cx*cx + cy*cy) * (bx - ax)) / d;\n\tconst ra: number = Util.distance(x, y, a.x, a.y);\n\tconst rb: number = Util.distance(x, y, b.x, b.y);\n\tconst rc: number = Util.distance(x, y, c.x, c.y);\n\treturn new Circle(x, y, Math.max(ra, rb, rc));\n}\n\n/* Simple mathematical functions */\n\nconst MULTIPLICATIVE_EPSILON: number = 1 + 1e-14;\n\nfunction isInCircle(c: Circle|null, p: Point): boolean\n{\n\treturn c !== null && Util.distance(p.x, p.y, c.x, c.y) <= c.r * MULTIPLICATIVE_EPSILON;\n}\n\n// Returns twice the signed area of the triangle defined by (x0, y0), (x1, y1), (x2, y2).\nfunction crossProduct(x0: number, y0: number, x1: number, y1: number, x2: number, y2: number): number\n{\n\treturn (x1 - x0) * (y2 - y0) - (y1 - y0) * (x2 - x0);\n}\n\n// cache x,y circle offsets for one quadrant indexed by number of segments\nlet circleOffsets: any = {};\n\nfunction getCircleOffsets(n: number): any\n{\n if (circleOffsets[n] === undefined)\n {\n let a: number[] = [];\n let incr = (Math.PI / 2) / n;\n let theta: number = 0;\n let i: number, j: number;\n\n // Compute NE quadrant\n for (i = 0; i < n; i++, theta += incr)\n {\n a.push(Math.sin(theta));\n a.push(Math.cos(theta));\n }\n // Add top of circle\n a.push(0);\n a.push(1);\n // Now flip X and replicate to NW quadrant\n for (i = 0; i < n; i++)\n {\n j = (n-i)*2;\n a.push(- a[j-1]);\n a.push(a[j-2]);\n }\n // Now flip X and Y and replicate to SW quadrant\n for (i = 0; i < n; i++)\n {\n j = (n-i)*2;\n a.push(- a[j-1]);\n a.push(- a[j-2]);\n }\n // Add bottom of circle\n a.push(0);\n a.push(-1);\n // Now flip Y and replicate to SE quadrant\n for (i = 0; i < n; i++)\n {\n j = (n-i)*2;\n a.push(a[j-1]);\n a.push(- a[j-2]);\n }\n // Duplicate final point per GeoJSON spec\n a.push(a[0]);\n a.push(a[1]);\n\n circleOffsets[n] = a;\n }\n\n return circleOffsets[n];\n}\n\n// Note that this is essentially an inversion of polyToCircle which computes a mathematical\n// circle given the point values, ignoring latitude correction. This inversion also\n// ignores that correction which means when plotted on a 2D map looks circular but the edge of\n// the circle is not a fixed distance (in physical units, e.g. meters) from the center.\n//\n\nexport function polyFromCircle(c: Circle, nSegments?: number): any\n{\n if (c === null || c.r == 0) return null;\n if (!nSegments || nSegments < 8) nSegments = 8;\n let poly: any = [];\n\n let offsets: any = getCircleOffsets(nSegments);\n const n: number = offsets.length;\n\n for (let i: number = 0; i < n; i += 2)\n poly.push([ c.x + (c.r * offsets[i]), c.y + (c.r * offsets[i+1]) ]);\n\n // return multi-polygon\n return [ [ poly ] ];\n}\n\n// isLeft(): tests if a point is Left|On|Right of an infinite line.\n// Input: three points P0, P1, and P2\n// Return: >0 for P2 left of the line through P0 and P1\n// =0 for P2 on the line\n// <0 for P2 right of the line\n\nfunction sortPointX(a: Point, b: Point): number { return a.x - b.x; }\nfunction sortPointY(a: Point, b: Point): number { return a.y - b.y; }\nfunction sortPoint(a: Point, b: Point): number { return a.x === b.x ? a.y - b.y : a.x - b.x; }\nfunction isLeft(p0: Point, p1: Point, p2: Point): number { return (p1.x - p0.x) * (p2.y - p0.y) - (p2.x - p0.x) * (p1.y - p0.y); }\n\nfunction pointsToPoly(points: Point[]): any\n{\n let p: any = [];\n\n for (let i: number = 0; i < points.length; i++)\n p.push( [ points[i].x, points[i].y ] );\n \n return [ p ];\n}\n\nexport function polyToExteriorPoints(poly: any): any\n{\n let pp = polyNormalize(poly);\n if (pp == null) return null;\n\n let points: Point[] = [];\n\n PP.polyPackEachPoint(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number) => {\n if (iRing > 0) return; // skip holes\n points.push(new Point(b[iOffset], b[iOffset+1]));\n });\n\n return points.length > 0 ? points : null;\n}\n\n//\n// polyConvexHull() - Two algorithms:\n// * Gram Scan (default) - in graham-scan.ts\n// * A.M.Andrew's monotone chain 2D convex hull algorithm - below\n//\n\nexport function polyConvexHull(poly: any, altAlgorithm?: any): any\n{\n if (altAlgorithm !== undefined)\n return makeConvexHullMonotoneChain2D(poly);\n \n return makeConvexHullGrahamScan(poly);\n}\n\nexport function makeConvexHullMonotoneChain2D(poly: any): any\n{\n // Normalize input\n let points = polyToExteriorPoints(poly);\n if (points == null) return null;\n\n points.sort(sortPoint);\n\n let H: Point[] = [];\n\n // the output array H[] will be used as the stack\n let n: number = points.length;\n let i: number;\n let bot: number = 0;\n let top: number = -1; // indices for bottom and top of the stack\n\n // Get the indices of points with min x-coord and min|max y-coord\n let minmin: number = 0, minmax: number;\n\n let xmin = points[0].x;\n for (i = 1; i < n; i++)\n if (points[i].x != xmin)\n break;\n\n minmax = i - 1;\n if (minmax == n - 1) // degenerate case: all x-coords == xmin\n {\n H[++top] = points[minmin];\n if (points[minmax].y != points[minmin].y) // a nontrivial segment\n H[++top] = points[minmax];\n H[++top] = points[minmin]; // add polygon endpoint\n return pointsToPoly(H);\n }\n\n // Get the indices of points with max x-coord and min|max y-coord\n let maxmin: number, maxmax: number = n - 1;\n let xmax: number = points[n - 1].x;\n for (i = n - 2; i >= 0; i--)\n if (points[i].x != xmax)\n break;\n maxmin = i + 1;\n\n // Compute the lower hull on the stack H\n H[++top] = points[minmin]; // push minmin point onto stack\n i = minmax;\n while (++i <= maxmin)\n {\n // the lower line joins points[minmin] with points[maxmin]\n if (isLeft(points[minmin], points[maxmin], points[i]) >= 0 && i < maxmin)\n continue; // ignore points[i] above or on the lower line\n\n while (top > 0) // there are at least 2 points on the stack\n {\n // test if points[i] is left of the line at the stack top\n if (isLeft(H[top - 1], H[top], points[i]) > 0)\n break; // points[i] is a new hull vertex\n else\n top--; // pop top point off stack\n }\n\n H[++top] = points[i]; // push points[i] onto stack\n }\n\n // Next, compute the upper hull on the stack H above the bottom hull\n if (maxmax != maxmin) // if distinct xmax points\n H[++top] = points[maxmax]; // push maxmax point onto stack\n\n bot = top; // the bottom point of the upper hull stack\n i = maxmin;\n while (--i >= minmax)\n {\n // the upper line joins points[maxmax] with points[minmax]\n if (isLeft(points[maxmax], points[minmax], points[i]) >= 0 && i > minmax)\n continue; // ignore points[i] below or on the upper line\n\n while (top > bot) // at least 2 points on the upper stack\n {\n // test if points[i] is left of the line at the stack top\n if (isLeft(H[top - 1], H[top], points[i]) > 0)\n break; // points[i] is a new hull vertex\n else\n top--; // pop top point off stack\n }\n\n if (points[i].x == H[0].x && points[i].y == H[0].y)\n return pointsToPoly(H); // special case (mgomes)\n\n H[++top] = points[i]; // push points[i] onto stack\n }\n\n if (minmax != minmin)\n H[++top] = points[minmin]; // push joining endpoint onto stack\n\n return pointsToPoly(H);\n}\n\n// NOTE - COMPACTNESS: Removed all the compactness notes.\n\n// TODO - COMPACTNESS: Ultimately remove this interface & polyCompactness(),\n// when dra-client no longer uses them.\nexport interface CompactnessDescription\n{\n value: number,\n reock: number,\n polsby_popper: number,\n convex_hull: number,\n schwartzberg: number,\n}\n\nexport function polyCompactness(poly: any, options?: PolyOptions): CompactnessDescription\n{\n if (options === undefined) options = DefaultOptions;\n\n let pp = polyNormalize(poly);\n\n let area: number = polyArea(pp);\n let perimeter: number = polyPerimeter(pp, options);\n\n let circle: Circle = polyToCircle(pp);\n let circleArea: number = polyArea(polyFromCircle(circle));\n let ppcircleArea: number = polyArea(polyFromCircle(polyToPolsbyPopperCircle(poly)));\n let hullArea: number = polyArea(polyConvexHull(pp));\n\n let result: CompactnessDescription = { value: 0, reock: 0, polsby_popper: 0, convex_hull: 0, schwartzberg: 0 };\n if (area == 0 || circle == null || circle.r == 0) return result;\n\n result.reock = area / circleArea;\n result.polsby_popper = area / ppcircleArea;\n result.convex_hull = area / hullArea;\n result.schwartzberg = ((2 * Math.PI) * Math.sqrt(area / Math.PI)) / perimeter;\n\n // Weight Reock and Polsby-Popper equally, normalize in 0-100 range\n result.value = Math.trunc(((result.reock + result.polsby_popper) / 2) * 100);\n return result;\n}\n\n\nexport interface PolyDescription\n{\n npoly: number,\n nhole: number,\n npoint: number\n}\n\nconst EmptyPolyDescription = { npoly: 0, nhole: 0, npoint: 0 };\n\nexport function polyDescribe(poly: any): PolyDescription\n{\n let pp = polyNormalize(poly);\n let d = Util.shallowCopy(EmptyPolyDescription);\n\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n d.npoint += nPoints;\n if (iRing == 0)\n d.npoly++;\n else\n d.nhole++;\n });\n\n return d;\n}\n\nexport function npoints(poly: any): number\n{\n let d = polyDescribe(poly);\n return d.npoint;\n}\n\n// \n// polyTransform: transform each point. Called for all polygons and all rings.\n// point, by point. Returns a packed structure.\n//\nexport function polyTransform(poly: any, transformFn: any): any\n{\n // Get all the points -- DON'T skip holes -- and transform them.\n // Don't alter input structure so copy if polyNormalize did not.\n let pp = polyNormalize(poly);\n if (! PP.polyPacked(poly))\n pp = PP.polyPackCopy(pp);\n\n PP.polyPackEachPoint(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number) =>\n {\n const [newX, newY] = transformFn([b[iOffset], b[iOffset+1]]);\n b[iOffset] = newX;\n b[iOffset+1] = newY;\n });\n\n return pp;\n}\n\nfunction identityTransform(pt: number[]): number[]\n{\n return [pt[0], pt[1]];\n}\n\nfunction closeRing(ring: any): any\n{\n if (ring.length > 1)\n {\n let p1 = ring[0];\n let p2 = ring[ring.length-1];\n if (p1[0] !== p2[0] || p1[1] !== p2[1])\n ring.push(p1);\n }\n return ring;\n}\n\nfunction closePoly(poly: any): any\n{\n poly.forEach(closeRing);\n return poly;\n}\n\nfunction featureClose(f: any): void\n{\n let d = Util.depthof(f.geometry.coordinates);\n if (d === 4) closePoly(f.geometry.coordinates);\n if (d === 5) f.geometry.coordinates.forEach(closePoly);\n}\n\nexport interface RewindOptions\n{\n validateHoles?: boolean,\n validateClose?: boolean,\n canonical?: boolean,\n}\n\nfunction canonicalPoint(f: any, options: RewindOptions): any\n{\n if (options.canonical)\n if (f && f.geometry && f.geometry.type === 'Point' && f.geometry.coordinates)\n while (Array.isArray(f.geometry.coordinates[0]))\n f.geometry.coordinates = f.geometry.coordinates[0];\n return f;\n}\n\n//\n// polyRingWindings: Return depth-first array of winding of each ring in the feature.\n// value < 0: CW\n// value > 0: CCW\n//\n\ninterface Winding { iPoly: number, iRing: number, direction: number };\n\nfunction misWound(w: Winding): boolean\n{\n return (((w.iRing == 0) && (w.direction > 0)) || ((w.iRing > 0) && (w.direction < 0)));\n}\n\nexport function polyRingWindings(poly: any): Winding[]\n{\n let windings: Winding[] = [];\n\n let pp = polyNormalize(poly);\n if (pp == null || pp.buffer == null) return windings;\n\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) =>\n {\n const iStart = iOffset;\n const iEnd = iStart + (nPoints * 2) - 2;\n\n // Determine the winding order of the ring\n let direction = 0;\n\n // Start at the second point\n iOffset += 2;\n for (; iOffset <= iEnd; iOffset += 2)\n {\n // The previous point\n let jOffset = iOffset - 2;\n\n // Sum over the edges\n direction += twoTimesArea(b[iOffset], b[jOffset], b[iOffset+1], b[jOffset+1]);\n }\n \n // Implicitly close the ring, if necessary\n if (nPoints > 2 && (b[iStart] != b[iEnd] || b[iStart + 1] != b[iEnd + 1]))\n direction += twoTimesArea(b[iStart], b[iEnd], b[iStart + 1], b[iEnd + 1]);\n\n windings.push({ iPoly: iPoly, iRing: iRing, direction: direction });\n });\n return windings;\n}\n\nfunction flattenMultiPoly(polys: any): any\n{\n let c: any[] = [];\n polys.forEach((poly: any) => {\n poly.forEach((ring: any) => {\n c.push([ring]);\n });\n });\n return c;\n}\n\n// This mutates the passed in feature to ensure it is correctly wound\n// For convenience, passed back the value provided.\n//\nexport function featureRewind(f: any, options?: RewindOptions): any\n{\n options = Util.shallowAssignImmutable({ validateHoles: true, validateClose: true, canonical: true }, options);\n\n if (!f) return null;\n\n // Has to be an unpacked feature\n if (f.type !== 'Feature') return f;\n if (!f.geometry || f.geometry.packed) return f;\n\n // Non polygons are simpler\n if (f.geometry.type !== 'Polygon' && f.geometry.type !== 'MultiPolygon') return canonicalPoint(f, options);\n\n // Make sure polygon is closed (first === last)\n if (options.validateClose)\n featureClose(f);\n\n // Check if multi-polygon is really polygon with holes\n if (options.validateHoles)\n featureCleanHoles(f);\n\n // OK, now go through each ring\n let polys = f.geometry.coordinates;\n let d = Util.depthof(f.geometry.coordinates);\n if (d == 4) polys = [polys];\n let windings = polyRingWindings(f);\n windings.forEach((w: Winding) => {\n let good = !misWound(w);\n if (!good)\n {\n let ring = polys[w.iPoly][w.iRing];\n let iFront = 0;\n let iBack = ring.length-1;\n for (; iFront < iBack; iFront++, iBack--)\n {\n let tmp = ring[iFront];\n ring[iFront] = ring[iBack];\n ring[iBack] = tmp;\n }\n }\n });\n\n return f;\n}\n\n//\n// polyRewindRings: Check the winding order of the polygon's ring. Rewind them,\n// if necessary. Return a packed polygon.\n//\nexport function polyRewindRings(pp: any, bLog: boolean = false): any\n{\n if (pp == null || pp.buffer == null) return;\n\n if (pp.offset === undefined) throw 'oops: not a PolyPack';\n\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) =>\n {\n const iStart = iOffset;\n const iEnd = iStart + (nPoints * 2) - 2;\n\n // Determine the winding order of the ring\n let direction = 0;\n\n // Start at the second point\n iOffset += 2;\n for (; iOffset <= iEnd; iOffset += 2)\n {\n // The previous point\n let jOffset = iOffset - 2;\n\n // Sum over the edges\n direction += twoTimesArea(b[iOffset], b[jOffset], b[iOffset+1], b[jOffset+1]);\n }\n \n // Implicitly close the ring, if necessary\n if (nPoints > 2 && (b[iStart] != b[iEnd] || b[iStart + 1] != b[iEnd + 1]))\n {\n if (bLog) console.log(`Implicitly closing polygon ${iPoly}, ring ${iRing}.`);\n\n direction += twoTimesArea(b[iStart], b[iEnd], b[iStart + 1], b[iEnd + 1]);\n }\n\n // If the winding order is wrong, reverse it\n if (((iRing == 0) && (direction > 0)) || ((iRing > 0) && (direction < 0)))\n {\n if (bLog) console.log(`Rewinding polygon ${iPoly}, ring ${iRing}.`);\n\n let iFront = iStart;\n let iBack = iEnd;\n for (; iFront < iBack; iFront += 2, iBack -= 2)\n {\n let tmpX = b[iFront];\n let tmpY = b[iFront+1];\n b[iFront] = b[iBack];\n b[iFront+1] = b[iBack+1];\n b[iBack] = tmpX;\n b[iBack+1] = tmpY;\n }\n }\n });\n\n return pp;\n}\n\n//\n// To figure out which way a ring is wound:\n//\n// Sum over the edges, (x2 − x1) (y2 + y1). If the result is positive the curve\n// is clockwise, if it's negative the curve is counterclockwise. (The result is \n// twice the enclosed area, with a + /- convention.)\n//\n// Source: https://stackoverflow.com/questions/1165647/how-to-determine-if-a-list-of-polygon-points-are-in-clockwise-order#1165943\n//\nfunction twoTimesArea(x2: number, x1: number, y2: number, y1: number): number\n{\n return (x2 - x1) * (y2 + y1);\n}\n\nfunction badCoord(c: number): boolean\n{\n return isNaN(c) || c > 360 || c < -360;\n}\n\nexport function polyBadCoordinates(f: any): boolean\n{\n if (f.type === 'FeatureCollection' && f.features)\n {\n for (let i = 0; i < f.features.length; i++)\n if (polyBadCoordinates(f.features[i])) return true;\n return false;\n }\n\n let pp = polyNormalize(f);\n let bad = false;\n if (pp)\n {\n PP.polyPackEachPoint(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number) => {\n if (bad) return;\n bad = badCoord(b[iOffset]) || badCoord(b[iOffset+1]);\n });\n }\n return bad;\n}\n","import * as Util from '../util/all';\nimport * as PP from './polypack';\nimport * as T from './topo';\n\n// Packed Buffer format:\n//\n// (strings are packed as UTF8 bytes, padded to 4 byte boundary)\n//\n// { 4 byte size (byte offset to packed coordinate buffer) }\n// { 4 byte length: property name,\n// 4 byte length: json string }*\n// { 4 byte length: 'features' }\n// { 4 byte length: length of 'features' array }\n// { 4 byte length: property name,\n// 4 byte length: json string }*\n// { padding to 8 byte boundary }\n// { packed buffer coordinates in polypack format (indexed by geometry.packed above) }\n//\n\nconst MagicInt = 17;\nconst MagicFloat = 17.17;\n\nfunction pad(n: number, pad: number): number\n{\n let mod = n % pad;\n return mod ? pad - mod : 0;\n}\n\nfunction sizeOfString(coder: Util.Coder, s: string): number\n{\n let s8 = Util.s2u8(coder, s);\n return 4 + s8.length + pad(s8.length, 4);\n}\n\nfunction packString(coder: Util.Coder, buf8: Uint8Array, buf32: Int32Array, offset: number, s: string): number\n{\n let s8 = Util.s2u8(coder, s);\n buf32[offset >> 2] = s8.length;\n offset += 4;\n let i: number;\n for (i = 0; i < s8.length; i++) buf8[offset++] = s8[i];\n offset += pad(offset, 4);\n return offset;\n}\n\nfunction unpackString(coder: Util.Coder, buf8: Uint8Array, buf32: Int32Array, offset: number): string\n{\n let size = buf32[offset >> 2];\n let s = Util.u82s(coder, buf8, offset+4, size);\n return s;\n}\n\nexport function packCollection(coder: Util.Coder, col: any): ArrayBuffer\n{\n // Compute size\n let pp = PP.featurePack(col) as PP.PolyPack;\n let f: any = col.features.find((f: any) => { return f.geometry.packed ? f.geometry.packed.buffer : null });\n let buffer: any = f ? f.geometry.packed.buffer : null;\n let size = 16; // int endiness, offset to coordinates, float endiness\n col.features.forEach((f: any) => { if (f.geometry.packed) delete f.geometry.packed.buffer; }); // reconstructed when unpacking\n let j = JSON.stringify(col);\n size += sizeOfString(coder, j);\n size += pad(size, 8);\n let fullsize = size + pp.length * 8; // add space for coordinates\n\n // Now pack it\n let ab = new ArrayBuffer(fullsize);\n let buf8 = new Uint8Array(ab);\n let buf32 = new Int32Array(ab);\n let buf64 = new Float64Array(ab);\n let offset = 0;\n buf32[0] = MagicInt;\n offset += 4;\n buf32[1] = size;\n offset += 4;\n buf64[1] = MagicFloat; // Note that buf64[0] has the two ints stored above\n offset += 8;\n offset = packString(coder, buf8, buf32, offset, j);\n offset += pad(offset, 8);\n if (offset != size)\n throw 'Oops, packing error.';\n let foff = offset >> 3;\n let buf = pp.buffer as Float64Array;\n for (let i: number = 0; i < pp.length; i++)\n buf64[foff++] = buf[i];\n\n // Now restore\n col.features.forEach((f: any) => { if (f.geometry.packed) f.geometry.packed.buffer = buffer; });\n PP.featureUnpack(col);\n\n return ab;\n}\n\nfunction reverse(buf8: Uint8Array, s: number, n: number): void\n{\n let e = s + n - 1;\n while (s < e)\n {\n let t = buf8[s];\n buf8[s] = buf8[e];\n buf8[e] = t;\n s++, e--;\n }\n}\n\nfunction enforceEndianness(ab: ArrayBuffer): void\n{\n let buf8 = new Uint8Array(ab);\n let buf32 = new Int32Array(ab);\n let buf64 = new Float64Array(ab);\n let reverseInts = false;\n if (buf32[0] != MagicInt)\n {\n reverseInts = true;\n reverse(buf8, 0, 4);\n if (buf32[0] != MagicInt) throw 'unpackCollection: badly formatted buffer';\n reverse(buf8, 4, 4); // size of non-floats\n }\n let reverseFloats = false;\n if (buf64[1] != MagicFloat)\n {\n reverseFloats = true;\n reverse(buf8, 8, 8);\n if (buf64[1] != MagicFloat) throw 'unpackCollection: badly formatted buffer';\n }\n if (reverseInts)\n reverse(buf8, 16, 4); // JSON string length\n if (reverseFloats)\n {\n let s = buf32[1]; // Offset to floats\n let e = ab.byteLength;\n for (; s < e; s += 8)\n reverse(buf8, s, 8);\n }\n}\n\nexport function unpackCollection(coder: Util.Coder, ab: ArrayBuffer): any\n{\n enforceEndianness(ab);\n let col: any = {};\n let buf8 = new Uint8Array(ab);\n let buf32 = new Int32Array(ab);\n let size = buf32[1];\n let buf64 = new Float64Array(ab, size); // offset to start of packed coordinates\n let offset = 16;\n let j = unpackString(coder, buf8, buf32, offset);\n col = JSON.parse(j);\n col.features.forEach((f: any) => { if (f.geometry.packed) f.geometry.packed.buffer = buf64 });\n return col;\n}\n\n// Format of packed buffer:\n// [Size of JSON string] [4 bytes]\n// [Size of packedarcs] [4 bytes]\n// [Size of packedarcindices] [4 bytes]\n// [padding] [4 bytes]\n// [JSON string]\n// [pad to 8]\n// [packedarcs]\n// [packedarcindices]\n\nconst HeaderSize = 16; // 4 Int32's \n\nexport function topoToBuffer(coder: Util.Coder, topo: any): ArrayBuffer\n{\n // Make sure we're packed\n T.topoPack(topo);\n let savepack = topo.packed;\n delete topo.packed;\n let json = JSON.stringify(topo);\n let byteLength = HeaderSize; // 3 lengths + padding\n let stringLength = sizeOfString(coder, json);\n stringLength += pad(stringLength, 8);\n byteLength += stringLength;\n byteLength += savepack.arcs.byteLength;\n byteLength += savepack.arcindices.byteLength;\n let ab = new ArrayBuffer(byteLength);\n let buf8 = new Uint8Array(ab);\n let buf32 = new Int32Array(ab);\n let buf64 = new Float64Array(ab, HeaderSize + stringLength, savepack.arcs.length);\n\n buf32[0] = stringLength;\n buf32[1] = savepack.arcs.byteLength;\n buf32[2] = savepack.arcindices.byteLength;\n buf32[3] = 0;\n packString(coder, buf8, buf32, HeaderSize, json); json = null;\n let af = savepack.arcs as Float64Array;\n let n = af.length;\n let i = 0;\n let j = 0;\n while (i < n)\n buf64[j++] = af[i++];\n let ai = savepack.arcindices as Int32Array;\n n = ai.length;\n i = 0;\n j = (HeaderSize + stringLength + savepack.arcs.byteLength) / 4;\n while (i < n)\n buf32[j++] = ai[i++];\n\n // restore\n topo.packed = savepack;\n\n return ab;\n}\n\nexport function topoFromBuffer(coder: Util.Coder, ab: ArrayBuffer): any\n{\n let buf8 = new Uint8Array(ab);\n let buf32 = new Int32Array(ab);\n let stringLength = buf32[0];\n let arcsByteLength = buf32[1];\n let arcindicesByteLength = buf32[2];\n let json = unpackString(coder, buf8, buf32, HeaderSize);\n let topo = JSON.parse(json);\n topo.packed = {};\n topo.packed.arcs = new Float64Array(ab, stringLength + HeaderSize, arcsByteLength / 8);\n topo.packed.arcindices = new Int32Array(ab, stringLength + HeaderSize + arcsByteLength, arcindicesByteLength / 4);\n return topo;\n}\n","import TinyQueue from 'tinyqueue';\nimport * as Util from '../util/all';\nimport * as P from './poly';\nimport * as PP from './polypack';\nimport * as BB from './boundbox';\n\ninterface PolyLabelResult\n{\n x: number;\n y: number;\n d: number;\n}\n\n//\n// polyDistance: return (smallest) distance to polygon edge.\n// Positive value indicates point is in poly, negative indicates point is outside.\n//\n\nexport function polyDistance(poly: any, x: number, y: number): number\n{\n let pp = P.polyNormalize(poly);\n if (pp == null) return 0;\n\n // First find if it is contained in one of the outer polygons, or outside all outer polygons\n let iContaining = -1;\n let maxOutside = - Infinity;\n let minInside = Infinity;\n let noholes = true;\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n // If we have determined we are inside this polygon, keep track of whether it has holes\n if (iContaining == iPoly && iRing > 0)\n noholes = false;\n // Don't process rings\n if (iRing > 0) return;\n // OK, get distance\n let forEachPointPair = (iter: any) => {\n PP.polyPackEachRing(pp, (b: Float64Array, iInteriorPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n if (iRing || iInteriorPoly != iPoly) return;\n let iFirst = iOffset;\n let iLast = iOffset + nPoints * 2;\n let iSecond = iLast - 2;\n for (; iFirst < iLast; iSecond = iFirst, iFirst += 2)\n iter(b[iFirst], b[iFirst+1], b[iSecond], b[iSecond+1]);\n });\n };\n let dist = pointToPolygonDist(x, y, forEachPointPair);\n // If inside, is it closest inside (deal with multipolygons that self-contain - think filled donut)\n if (dist > 0 && dist < minInside)\n {\n iContaining = iPoly;\n minInside = dist;\n noholes = true;\n }\n else if (dist < 0)\n maxOutside = Math.max(maxOutside, dist);\n });\n if (iContaining < 0)\n return maxOutside;\n if (noholes)\n return minInside;\n\n // OK, now need to worry about holes in the polygon it is contained in\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n // Only want to look at the holes for the containing polygon\n if (iPoly != iContaining || iRing == 0) return;\n // Compute distance to those holes\n let forEachPointPair = (iter: any) => {\n PP.polyPackEachRing(pp, (b: Float64Array, iInteriorPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n if (iInteriorPoly != iContaining || iRing == 0) return;\n let iFirst = iOffset;\n let iLast = iOffset + nPoints * 2;\n let iSecond = iLast - 2;\n for (; iFirst < iLast; iSecond = iFirst, iFirst += 2)\n iter(b[iFirst], b[iFirst+1], b[iSecond], b[iSecond+1]);\n });\n };\n // Negate distance since dealing with holes\n let dist = - pointToPolygonDist(x, y, forEachPointPair);\n // We take the min to either get a negative value (inside hole) or a smaller positive value\n // (outside hole but close to hole boundary).\n minInside = Math.min(minInside, dist);\n });\n return minInside;\n}\n\n//\n// polyLabel: given polygon, return contained point furthest from any edge, and that distance\n//\n\nexport function polyLabel(poly: any, precision?: number, debug?: boolean): PolyLabelResult\n{\n let pp = P.polyNormalize(poly);\n if (pp == null) return { x: 0, y: 0, d: 0 };\n\n // For multi-polygon, pick largest polygon\n let iLargest: number;\n let nLargestArea: number;\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n if (iRing) return;\n let nArea = P.polySimpleArea(b, iOffset, nPoints);\n if (iLargest === undefined || nArea > nLargestArea) { iLargest = iPoly, nLargestArea = nArea }\n });\n\n if (iLargest === undefined)\n return { x: 0, y: 0, d: 0 };\n\n precision = precision || 0.00001;\n\n let forEachPoint = (iter: any) => {\n PP.polyPackEachPoint(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number) => {\n if (iPoly != iLargest || iRing) return;\n iter(b[iOffset], b[iOffset+1]);\n });\n };\n let forEachPointPair = (iter: any) => {\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly, iRing: number, iOffset: number, nPoints: number) => {\n if (iPoly != iLargest || iRing) return;\n let iFirst = iOffset;\n let iLast = iOffset + nPoints * 2;\n let iSecond = iLast - 2;\n for (; iFirst < iLast; iSecond = iFirst, iFirst += 2)\n iter(b[iFirst], b[iFirst+1], b[iSecond], b[iSecond+1]);\n });\n };\n\n // find the bounding box of the outer ring\n let minX: number, minY: number, maxX: number, maxY: number;\n forEachPoint((x: number, y: number) => {\n if (minX === undefined || x < minX) minX = x;\n if (minY === undefined || y < minY) minY = y;\n if (maxX === undefined || x > maxX) maxX = x;\n if (maxY === undefined || y > maxY) maxY = y;\n });\n\n let width: number = maxX - minX;\n let height: number = maxY - minY;\n let cellSize: number = Math.min(width, height);\n let h: number = cellSize / 2;\n\n if (cellSize === 0) return { x: minX, y: minY, d: 0 };\n\n // a priority queue of cells in order of their \"potential\" (max distance to polygon)\n let cellQueue = new TinyQueue<Cell>(undefined, compareMax);\n\n // cover polygon with initial cells\n for (let x: number = minX; x < maxX; x += cellSize)\n {\n for (let y: number = minY; y < maxY; y += cellSize)\n cellQueue.push(new Cell(x + h, y + h, h, forEachPointPair));\n }\n\n // take centroid as the first best guess\n let bestCell: any = getCentroidCell(forEachPointPair);\n\n // special case for rectangular polygons\n let bboxCell: Cell = new Cell(minX + width / 2, minY + height / 2, 0, forEachPointPair);\n if (bboxCell.d > bestCell.d) bestCell = bboxCell;\n\n let numProbes = cellQueue.length;\n\n while (cellQueue.length)\n {\n // pick the most promising cell from the queue\n let cell = cellQueue.pop();\n\n // update the best cell if we found a better one\n if (cell.d > bestCell.d)\n {\n bestCell = cell;\n if (debug) console.log('found best %d after %d probes', Math.round(1e4 * cell.d) / 1e4, numProbes);\n }\n\n // do not drill down further if there's no chance of a better solution\n if (cell.max - bestCell.d <= precision) continue;\n\n // split the cell into four cells\n h = cell.h / 2;\n cellQueue.push(new Cell(cell.x - h, cell.y - h, h, forEachPointPair));\n cellQueue.push(new Cell(cell.x + h, cell.y - h, h, forEachPointPair));\n cellQueue.push(new Cell(cell.x - h, cell.y + h, h, forEachPointPair));\n cellQueue.push(new Cell(cell.x + h, cell.y + h, h, forEachPointPair));\n numProbes += 4;\n }\n\n if (debug)\n {\n console.log('num probes: ' + numProbes);\n console.log('best distance: ' + bestCell.d);\n }\n\n return { x: bestCell.x, y: bestCell.y, d: bestCell.d };\n}\n\nfunction compareMax(a: Cell, b: Cell) { return b.max - a.max; }\n\nclass Cell\n{\n x: number;\n y: number;\n h: number;\n d: number;\n max: number;\n\n constructor(x: number, y: number, h: number, forEachPointPair: any)\n {\n this.x = x; // cell center x\n this.y = y; // cell center y\n this.h = h; // half the cell size\n this.d = pointToPolygonDist(x, y, forEachPointPair); // distance from cell center to polygon\n this.max = this.d + this.h * Math.SQRT2; // max distance to polygon within a cell\n }\n}\n\n// signed distance from point to polygon outline (negative if point is outside)\nfunction pointToPolygonDist(x: number, y: number, forEachPointPair: any): number\n{\n let inside = false;\n let minDistSq = Infinity;\n\n forEachPointPair((ax: number, ay: number, bx: number, by: number) => {\n if ((ay > y !== by > y) && (x < (bx - ax) * (y - ay) / (by - ay) + ax))\n inside = !inside;\n\n minDistSq = Math.min(minDistSq, getSegDistSq(x, y, ax, ay, bx, by));\n });\n\n return (inside ? 1 : -1) * Math.sqrt(minDistSq);\n}\n\n// get polygon centroid\nfunction getCentroidCell(forEachPointPair: any): Cell\n{\n let area = 0;\n let x = 0;\n let y = 0;\n let fx: number;\n let fy: number;\n\n forEachPointPair((ax: number, ay: number, bx: number, by: number) => {\n if (fx === undefined) fx = ax, fy = ay;\n let f: number = ax * by - bx * ay;\n x += (ax + bx) * f;\n y += (ay + by) * f;\n area += f * 3;\n });\n if (area === 0) return new Cell(fx, fy, 0, forEachPointPair);\n return new Cell(x / area, y / area, 0, forEachPointPair);\n}\n\n// get squared distance from a point to a segment\nfunction getSegDistSq(px: number, py: number, ax: number, ay: number, bx: number, by: number): number\n{\n let dx = bx - ax;\n let dy = by - ay;\n\n if (dx !== 0 || dy !== 0)\n {\n let t: number = ((px - ax) * dx + (py - ay) * dy) / (dx * dx + dy * dy);\n\n if (t > 1)\n {\n ax = bx;\n ay = by;\n }\n else if (t > 0)\n {\n ax += dx * t;\n ay += dy * t;\n }\n }\n\n dx = px - ax;\n dy = py - ay;\n\n return dx * dx + dy * dy;\n}\n","// Shared libraries\nimport * as Util from '../util/all';\n\n// Format for efficient packing of multipolygon coordinates\n//\n// [n] number of polygons\n// [n polygon headers]...\n// [n] number of rings\n// [n]... number of coordinates in ring\n// followed by [x,y]... for all the coordinates\n\nexport interface PolyPack\n{\n offset: number;\n length: number;\n buffer: any;\n}\n\nexport function polyPackSize(coords: any): number\n{\n // Null feature?\n if (coords == null || (coords.length !== undefined && coords.length == 0)) return 0;\n\n if (! Array.isArray(coords)) return 0;\n let depth = Util.depthof(coords);\n if (depth == 3) coords = [[ coords ]];\n else if (depth == 4) coords = [ coords ]; // normalize to multipolygon\n let nFloats: number = 2; // for number of polygons and size of header block\n let i: number, j: number;\n let p: any, r: any;\n for (i = 0; i < coords.length; i++)\n {\n p = coords[i];\n nFloats++; // For number of rings in this polygon\n for (j = 0; j < p.length; j++)\n {\n nFloats++; // For number of coordinates in this ring\n r = p[j];\n nFloats += r.length * 2; // for each x, y pair\n }\n }\n return nFloats;\n}\n\ntype EachRingCB = (buffer: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => void;\ntype EachPointCB = (buffer: Float64Array, iPoly: number, iRing: number, iOffset: number) => void;\n\nexport function polyPackEachRing(pack: PolyPack, cb: EachRingCB): void\n{\n if (pack == null || pack.buffer == null) return;\n\n if (pack.offset === undefined) throw 'oops: not a PolyPack';\n\n let b = pack.buffer;\n let iRing: number;\n let iOffset: number = pack.offset;\n let cOffset: number = b[iOffset+1] + pack.offset;\n\n // Grab number of polygons\n let nPoly: number = b[iOffset++];\n // Move past header length\n iOffset++;\n for (let iPoly: number = 0; iPoly < nPoly; iPoly++)\n {\n // Grab number of rings in this polygon\n let nRing: number = b[iOffset++];\n for (let iRing: number = 0; iRing < nRing; iRing++)\n {\n // Grab number of points in this ring\n let nPoints: number = b[iOffset++];\n cb(b, iPoly, iRing, cOffset, nPoints);\n cOffset += nPoints * 2;\n }\n }\n}\n\nexport function polyPackEachPoint(pack: PolyPack, cb: EachPointCB): void\n{\n polyPackEachRing(pack, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n let iEnd: number = iOffset + (nPoints * 2);\n for (; iOffset < iEnd; iOffset += 2)\n cb(b, iPoly, iRing, iOffset);\n });\n}\n\nexport function polyPackCountPoints(pack: PolyPack): number\n{\n let n = 0;\n polyPackEachRing(pack, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => { n += nPoints });\n return n;\n}\n\nexport function polyPacked(f: any): boolean\n{\n if (f == null) return false;\n if (f.offset !== undefined) return true;\n if (f.geometry !== undefined) return f.geometry.packed !== undefined;\n if (f.type === 'FeatureCollection' && f.features !== undefined && f.features.length > 0)\n return polyPacked(f.features[0]);\n return false;\n}\n\n// Convert to multi-polygon format if necessary\nexport function normalizeArcs(arcs: any): any\n{\n let d = Util.depthof(arcs);\n while (d < 4) { arcs = [arcs], d++ } // note that depth is n-1 compared to coords because leaf is just number, not [x,y]\n return arcs;\n}\n\nexport function countArcPolygons(arcs: any): number\n{\n arcs = normalizeArcs(arcs);\n return arcs.length;\n}\n\nexport function countArcRings(arcs: any, iPoly?: number): number\n{\n arcs = normalizeArcs(arcs);\n let r = 0;\n arcs.forEach((a: any, ip: number) => { if (iPoly === undefined || iPoly === ip) r += a.length })\n return r;\n}\n\nexport function countOneArcPoints(topo: any, ring: any): number\n{\n // for each ring\n let n = 0;\n ring.forEach((i: number, index: number) => {\n // for each arc\n let a = topo.arcs[i < 0 ? ~i : i];\n if (index > 0) n--;\n n += a.length;\n });\n if (n < 4) n = 4;\n return n;\n}\n\nexport function countArcPoints(topo: any, arcs: any, iPoly?: number): number\n{\n arcs = normalizeArcs(arcs);\n let npoints = 0;\n arcs.forEach((polygon: any, ip: number) => {\n if (iPoly === undefined || iPoly === ip)\n polygon.forEach((ring: any) => { npoints += countOneArcPoints(topo, ring) })\n });\n return npoints;\n}\n\n// This packs the TopoJSON arc format into a PolyPack. Basics:\n// 1) Negative indices indicate arc should be traversed backward.\n// 2) First and last point of sequential arcs are duplicated, so only include one instance. Easiest way\n// of implementing this (to match topojson implementation) is first delete last point.\n// 3) If total number of points < 4, duplicate the first point until you get 4 to meet GeoJSON standard.\n// 4) Can also request to pack just a single polygon of a multi-polygon\n//\nexport function polyPackTopoArcs(topo: any, arcs: any, iPoly?: number): PolyPack\n{\n if (topo == null || arcs == null || arcs.length == 0) return null;\n arcs = normalizeArcs(arcs);\n let nPoints = countArcPoints(topo, arcs, iPoly);\n if (nPoints == 0) return null;\n let nFloats = 2 + (2 * countArcRings(arcs, iPoly)) + (2 * nPoints);\n let ab = new ArrayBuffer(nFloats * 8);\n let prepack: PolyPack = { offset: 0, length: nFloats, buffer: new Float64Array(ab) };\n let af = prepack.buffer as Float64Array;\n let z = 0;\n af[z++] = iPoly === undefined ? countArcPolygons(arcs) : 1;\n z++; // spot for header size\n\n // Fill in header - number of rings in each polygon and number of points in each ring\n arcs.forEach((polygon: any, ip: number) => {\n if (iPoly === undefined || iPoly === ip)\n {\n af[z++] = polygon.length;\n polygon.forEach((ring: any) => af[z++] = countOneArcPoints(topo, ring));\n }\n });\n\n // go back and fill in header size\n af[1] = z;\n\n // now copy in the points\n arcs.forEach((polygon: any, ip: number) => {\n if (iPoly === undefined || iPoly === ip)\n polygon.forEach((ring: any) => {\n let b = z;\n ring.forEach((i: number, index: number) => {\n let a = topo.arcs[i < 0 ? ~i : i];\n if (index > 0) z -= 2;\n let n = a.length;\n let j;\n if (i < 0)\n for (j = n-1; j >= 0; j--) { let pt: any = a[j]; af[z++] = pt[0], af[z++] = pt[1] }\n else\n for (j = 0; j < n; j++) { let pt: any = a[j]; af[z++] = pt[0], af[z++] = pt[1] }\n });\n // need at least 4 points in each ring\n if (z != b)\n while (z < b+8) { af[z++] = af[b], af[z++] = af[b+1] }\n });\n });\n\n return prepack;\n}\n\nexport function polyPack(coords: any, prepack?: PolyPack): PolyPack\n{\n // Null feature?\n if (coords == null || (coords.length !== undefined && coords.length == 0)) return null;\n\n // Null geometry?\n if (coords && coords.type === 'Feature' && coords.geometry == null) return null;\n\n // Actually already a PolyPack?\n if (coords.offset !== undefined) return coords as PolyPack;\n\n // Packed feature?\n if (coords && coords.geometry && coords.geometry.packed !== undefined)\n return coords.geometry.packed as PolyPack;\n\n // Unpacked feature, grab the coordinates array\n if (coords && coords.geometry)\n coords = coords.geometry.coordinates;\n\n // Transparently handle polygon or multi-polygon\n if (! Array.isArray(coords)) return null;\n\n let depth = Util.depthof(coords);\n if (depth == 2) coords = [ [ [ coords ] ] ];\n else if (depth == 3) coords = [ [ coords ] ];\n else if (depth == 4) coords = [ coords ];\n\n let nFloats = polyPackSize(coords);\n let i: number, j: number, k: number;\n let p: any, r: any;\n\n // Allocate typed buffer if not passed in\n if (prepack === undefined)\n {\n let ab = new ArrayBuffer(nFloats * 8);\n prepack = { offset: 0, length: nFloats, buffer: new Float64Array(ab) };\n }\n else\n {\n prepack = Util.shallowCopy(prepack);\n prepack.length = nFloats;\n }\n\n let af: Float64Array = prepack.buffer as Float64Array;\n\n // Fill in header\n let z: number = prepack.offset;\n af[z++] = coords.length;\n z++; // spot for header size\n for (i = 0; i < coords.length; i++)\n {\n p = coords[i];\n af[z++] = p.length;\n for (j = 0; j < p.length; j++)\n af[z++] = p[j].length;\n }\n\n // set header size back in header\n af[prepack.offset+1] = z - prepack.offset;\n\n // Fill in coords\n for (i = 0; i < coords.length; i++)\n {\n p = coords[i];\n for (j = 0; j < p.length; j++)\n {\n r = p[j];\n for (k = 0; k < r.length; k++)\n {\n af[z++] = r[k][0];\n af[z++] = r[k][1];\n }\n }\n }\n\n return prepack;\n}\n\nexport function polyPackCopy(coords: any): PolyPack\n{\n let pp = polyPack(coords);\n\n if (pp == null) return null;\n\n let copy: PolyPack = { offset: 0, length: pp.length, buffer: null };\n let ab = new ArrayBuffer(pp.length * 8);\n let afDst = new Float64Array(ab);\n copy.buffer = afDst;\n let afSrc = pp.buffer as Float64Array;\n for (let i = 0; i < pp.length; i++)\n afDst[i] = afSrc[i+pp.offset];\n return copy;\n}\n\nexport function polyUnpack(prepack: any): any\n{\n // Check if not packed\n if (prepack == null) return [];\n if (prepack.offset === undefined) return prepack;\n\n let i: number, j: number, k: number;\n let nPolys: number, nRings: number, nCoords: number;\n let p: any, r: any;\n let af: Float64Array = prepack.buffer as Float64Array;\n let coords: any = [];\n let h: number = prepack.offset as number;\n nPolys = af[h++];\n let z = af[h++] + prepack.offset; // start of coordinates\n for (i = 0; i < nPolys; i++)\n {\n p = [];\n coords[i] = p;\n nRings = af[h++];\n for (j = 0; j < nRings; j++)\n {\n r = [];\n p[j] = r;\n nCoords = af[h++];\n for (k = 0; k < nCoords; k++)\n r[k] = [ af[z++], af[z++] ];\n }\n }\n\n return coords.length > 1 ? coords : coords[0];\n}\n\nexport function featurePackSize(f: any): number\n{\n if (f && f.geometry && f.geometry.coordinates && f.geometry.type !== 'Point')\n return polyPackSize(f.geometry.coordinates);\n return 0;\n}\n\nexport function featurePack(f: any, prepack?: PolyPack): any\n{\n if (f && f.type === 'Feature')\n {\n if (f.geometry && f.geometry.type === 'Point')\n return prepack ? { offset: prepack.offset, length: 0, buffer: prepack.buffer } : { offset: 0, length: 0, buffer: null };\n else if (f.geometry && f.geometry.coordinates)\n {\n f.geometry.packed = polyPack(f.geometry.coordinates, prepack);\n delete f.geometry.coordinates;\n }\n else if (f.geometry === undefined)\n {\n f.geometry = {}\n f.geometry.packed = prepack ? { offset: prepack.offset, length: 0, buffer: prepack.buffer } : { offset: 0, length: 0, buffer: null };\n }\n return f.geometry.packed;\n }\n else if (f && f.type === 'FeatureCollection' && f.features)\n {\n // Empty?\n if (f.features.length == 0) return f;\n\n // Already packed or packed incorrectly?\n let ff: any = f.features[0];\n if (ff && ff.geometry && ff.geometry.packed)\n {\n // Already packed\n if (ArrayBuffer.isView(ff.geometry.packed.buffer))\n return f;\n // Improperly packed (buffer converted to object - convert back to buffer\n let o: any = ff.geometry.packed.buffer;\n let b = new Float64Array(Util.countKeys(o));\n for (const i in o) b[Number(i)] = o[i];\n f.features.forEach((ff: any) => ff.geometry.packed.buffer = b);\n return f;\n }\n\n // Allocate one large buffer\n let nFloats: number = 0;\n let i: number;\n for (i = 0; i < f.features.length; i++)\n nFloats += featurePackSize(f.features[i]);\n let ab = new ArrayBuffer(nFloats * 8);\n prepack = { offset: 0, length: nFloats, buffer: new Float64Array(ab) };\n\n // Now pack\n for (i = 0; i < f.features.length; i++)\n {\n let postpack = featurePack(f.features[i], prepack);\n prepack.offset += postpack ? postpack.length : 0;\n }\n if (prepack.offset != nFloats)\n throw 'oops, packing bug';\n return prepack;\n }\n return null;\n}\n\nexport function featureUnpack(f: any): any\n{\n if (f && f.geometry && f.geometry.packed !== undefined)\n {\n f.geometry.coordinates = polyUnpack(f.geometry.packed);\n let depth = Util.depthof(f.geometry.coordinates);\n // Check for oops, optimized away the multipolygon in polyUnpack\n if (f.geometry.type === 'MultiPolygon' && depth === 4)\n f.geometry.coordinates = [ f.geometry.coordinates ];\n else if (f.geometry.type === 'Point' && depth != 2)\n {\n while (depth > 2)\n {\n f.geometry.coordinates = f.geometry.coordinates[0];\n depth = Util.depthof(f.geometry.coordinates);\n }\n }\n delete f.geometry.packed;\n }\n else if (f.type && f.type === 'FeatureCollection' && f.features)\n {\n for (let i: number = 0; i < f.features.length; i++)\n featureUnpack(f.features[i]);\n }\n return f;\n}\n\nexport type SavePack = WeakMap<any,any>;\n\nexport function featureUnpackTemporarily(f: any, save?: SavePack): SavePack\n{\n if (save === undefined) save = new WeakMap<any,any>();\n\n if (f && f.type === 'Feature')\n {\n if (f.geometry && f.geometry.packed)\n {\n save.set(f, f.geometry.packed);\n featureUnpack(f);\n }\n }\n else if (f.type && f.type === 'FeatureCollection' && f.features)\n {\n f.features.forEach((ff: any) => {\n if (ff.geometry && ff.geometry.packed)\n save.set(ff, ff.geometry.packed);\n });\n featureUnpack(f);\n }\n return save;\n}\n\nexport function featureRepack(f: any, save: SavePack): any\n{\n if (f && f.type === 'Feature')\n {\n if (f.geometry)\n {\n let packed = save.get(f);\n if (packed)\n {\n f.geometry.packed = packed;\n delete f.geometry.coordinates;\n }\n }\n }\n else if (f.type && f.type === 'FeatureCollection' && f.features)\n {\n f.features.forEach((ff: any) => featureRepack(ff, save));\n }\n return f;\n}\n\nexport function featurePackString(f: any): string\n{\n let packed = f.offset ? f : (f.geometry.packed ? f.geometry.packed : polyPack(f.geometry.coordinates));\n let af = packed.buffer as Float64Array;\n let a: string[] = [];\n for (let i: number = 0; i < packed.length; i++)\n a.push(String(af[i]));\n return a.join(' ');\n}\n\nexport function featureUnpackString(s: string): any\n{\n let a = s.split(' ');\n let ab = new ArrayBuffer(a.length * 8);\n let af = new Float64Array(ab);\n let i: number = 0;\n a.forEach((n: string) => { af[i++] = Number(n) });\n let f: any = { type: 'Feature', geometry: {type: 'Polygon', packed: { offset: 0, length: a.length, buffer: af } } };\n f = featureUnpack(f);\n if (Util.depthof(f.geometry.coordinates) === 5)\n f.geometry.type = 'MultiPolygon';\n return f;\n}\n","import * as Util from '../util/all';\nimport * as PP from './polypack';\n\n// Round feature geometry to 6 decimal precision\nexport function polyRound(o: any): any\n{\n if (o)\n {\n if (Array.isArray(o))\n {\n if (o.length && typeof o[0] === 'number')\n {\n for (let i = 0; i < o.length; i++)\n o[i] = Util.precisionRound(o[i], 6);\n }\n else\n o.forEach((e: any) => { polyRound(e) });\n }\n else if (o.features !== undefined && Array.isArray(o.features))\n o.features.forEach((f: any) => { polyRound(f) });\n else if (o.geometry !== undefined && o.geometry.coordinates !== undefined)\n polyRound(o.geometry.coordinates);\n else if (o.geometry !== undefined && o.geometry.packed !== undefined)\n PP.polyPackEachPoint(o.geometry.packed, (b: Float64Array, iPoly: number, iRing: number, iOffset: number) => {\n b[iOffset] = Util.precisionRound(b[iOffset], 6);\n b[iOffset+1] = Util.precisionRound(b[iOffset+1], 6);\n });\n }\n return o;\n}\n","import * as Util from '../util/all';\n\nimport { simplify } from './simplify';\n\nexport function polySimplify(poly: any, tolerance: number = 0.0001): void\n{\n if (poly == null) return;\n if (poly.geometry && poly.geometry.coordinates) poly = poly.geometry.coordinates;\n let depth = Util.depthof(poly);\n if (depth == 4)\n poly = [ poly ];\n else if (depth != 5)\n return;\n\n // Poly is multi-polygon, array of polygons\n for (let i: number = 0; i < poly.length; i++)\n {\n // p is polygon, array of rings, each ring is array of points which is what gets fed to underlying simplify routine.\n let p = poly[i];\n\n for (let j: number = 0; j < p.length; j++)\n p[j] = simplify(p[j], tolerance, true);\n }\n}\n","// Public libraries\nimport * as PC from 'polygon-clipping';\n\n// Shared libraries\nimport * as Util from '../util/all';\nimport * as FSM from '../fsm/all';\n\n// Local libraries\nimport * as Poly from './poly';\nimport * as PP from './polypack';\nimport * as BB from './boundbox';\nimport * as PR from './polyround';\nimport { polyContainsPoint } from './pointinpoly';\n\nlet _union: any = undefined;\nlet anyPC: any = PC;\nif (anyPC.union) _union = anyPC.union;\nif (anyPC.default && anyPC.default.union) _union = anyPC.default.union;\nif (_union === undefined) throw 'Unable to load union function from polygon-clipping';\n\nexport interface WrappedPoly { f: any, box: BB.BoundBox, p: any };\n\nexport interface WorkDone\n{\n nUnion: number,\n nDifference: number,\n ms: number,\n}\n\nfunction featureCoords(feature: any): any\n{\n if (feature.geometry !== undefined)\n {\n if (feature.geometry.packed !== undefined)\n return feature.geometry.packed;\n else\n return feature.geometry.coordinates;\n }\n else\n return feature;\n}\n\n// This function takes an array of packed or unpacked polygon/multipolygons and\n// returns an unpacked polygon/multipolygon coordinate array. Returns null if\n// handed an empty array.\n\nexport function unionPolys(polys: any[]): any\n{\n if (polys == null) return null;\n\n let cleanPolys: any[] = polys.filter((f: any) => f != null);\n if (cleanPolys.length == 0) return null;\n if (cleanPolys.length == 1) return PP.polyUnpack(cleanPolys[0]);\n cleanPolys = cleanPolys.map( (f: any) => PP.polyUnpack(f) );\n\n let poly: any = cleanPolys.pop();\n return PR.polyRound(_union(poly, ...cleanPolys));\n}\n\nexport interface QuadOptions\n{\n maxLeafCount?: number;\n maxDepth?: number;\n tickStep?: number;\n}\nexport const DefaultQuadOptions: QuadOptions = { maxLeafCount: 20, maxDepth: 20, tickStep: 1 };\n\nexport interface TickCounter { ticks: number };\n\n// Use geo orientation for t/b (that is, t > b)\nclass QuadLevel\n{\n options: QuadOptions;\n level: number;\n children: QuadLevel[];\n features: WrappedPoly[];\n box: BB.BoundBox;\n asyncUnion: any;\n\n constructor(options: QuadOptions, level: number, box: BB.BoundBox, features: WrappedPoly[])\n {\n this.options = options;\n this.level = level;\n this.box = box;\n if (features.length <= options.maxLeafCount || this.level >= options.maxDepth)\n {\n if (this.level >= options.maxDepth)\n throw `QuadTree: maximum depth of ${options.maxDepth} exceeded`;\n this.features = features;\n this.children = null;\n }\n else\n {\n this.features = null;\n let cx = BB.boundboxCX(box);\n let cy = BB.boundboxCY(box);\n\n let tl: BB.BoundBox = { left: box.left, top: box.top, right: cx, bottom: cy };\n let tr: BB.BoundBox = { left: cx, top: box.top, right: box.right, bottom: cy };\n let bl: BB.BoundBox = { left: box.left, top: cy, right: cx, bottom: box.bottom };\n let br: BB.BoundBox = { left: cx, top: cy, right: box.right, bottom: box.bottom };\n let tlFeatures = [];\n let trFeatures = [];\n let blFeatures = [];\n let brFeatures = [];\n\n for (let i: number = 0; i < features.length; i++)\n {\n let f = features[i];\n\n if (this.featureInBox(tl, f))\n tlFeatures.push(f);\n else if (this.featureInBox(tr, f))\n trFeatures.push(f);\n else if (this.featureInBox(bl, f))\n blFeatures.push(f);\n else if (this.featureInBox(br, f))\n brFeatures.push(f);\n }\n this.children = [];\n this.children.push(new QuadLevel(options, level+1, tl, tlFeatures));\n this.children.push(new QuadLevel(options, level+1, tr, trFeatures));\n this.children.push(new QuadLevel(options, level+1, bl, blFeatures));\n this.children.push(new QuadLevel(options, level+1, br, brFeatures));\n this.asyncUnion = null;\n }\n }\n\n private featureInBox(box: BB.BoundBox, f: WrappedPoly): boolean\n {\n return BB.boundboxIntersects(box, f.box);\n }\n\n featureUnderCoord(coord: [ number, number ]): any\n {\n if (! BB.boundboxContains(this.box, coord[0], coord[1]))\n return null;\n if (this.features)\n {\n let wp = this.features.find(wp => polyContainsPoint(wp.p, coord[0], coord[1]));\n return wp ? wp.f : null;\n }\n else\n {\n for (let i = 0; i < this.children.length; i++)\n {\n let f = this.children[i].featureUnderCoord(coord);\n if (f)\n return f;\n }\n return null;\n }\n }\n\n union(): any\n {\n if (this.asyncUnion == null)\n {\n if (this.children == null)\n this.asyncUnion = unionPolys(this.features.map(f => f.p));\n else\n this.asyncUnion = unionPolys(this.children.map((q: QuadLevel) => q.union()));\n }\n return this.asyncUnion;\n }\n\n get isempty(): boolean\n {\n return this.children == null && this.features.length == 0;\n }\n\n tickUnion(tickCounter: TickCounter): void\n {\n if (!this.isempty && this.asyncUnion == null)\n {\n if (this.children == null)\n {\n if (tickCounter.ticks != 0)\n {\n this.union();\n tickCounter.ticks--;\n }\n }\n else\n {\n for (let i: number = 0; i < this.children.length && tickCounter.ticks != 0; i++)\n this.children[i].tickUnion(tickCounter);\n\n // If tickCounter hasn't gone to zero, we fully computed children, go ahead and compute union here.\n if (tickCounter.ticks != 0)\n {\n this.union();\n tickCounter.ticks--;\n }\n }\n }\n }\n}\n\nexport class FsmQuadTree extends FSM.Fsm\n{\n quad: QuadLevel;\n asyncUnion: any;\n isempty: boolean;\n options: Poly.TickOptions;\n work: WorkDone;\n\n constructor(env: FSM.FsmEnvironment, options?: Poly.TickOptions, col?: any)\n {\n super(env);\n this.options = Util.shallowAssignImmutable(Poly.DefaultTickOptions, options);\n this.work = { nUnion: 0, nDifference: 0, ms: 0 };\n this.initialize(col);\n }\n\n initialize(col: any): void\n {\n this.quad = null;\n this.asyncUnion = undefined;\n this.isempty = true;\n\n if (col != null)\n {\n let features: any = col.features ? col.features : col;\n this.work.nUnion = features.length;\n this.isempty = features.length == 0;\n\n // Compute BoundBox for each feature\n let wrapped: WrappedPoly[] = features.map((f: any) => { return { f: f, box: BB.boundbox(f), p: featureCoords(f) } });\n\n let box = BB.boundbox(col);\n this.quad = new QuadLevel(this.options, 0, box, wrapped);\n }\n\n this.setState(this.isempty ? FSM.FSM_DONE : FSM.FSM_STARTING);\n }\n\n cancel(): any\n {\n this.quad = null;\n this.asyncUnion = undefined;\n this.isempty = true;\n this.setState(FSM.FSM_DONE);\n }\n\n get result(): any\n {\n if (this.asyncUnion === undefined && this.quad)\n this.asyncUnion = this.quad.union();\n return this.asyncUnion;\n }\n\n tick(): void\n {\n if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n this.setState(FSM.FSM_PENDING);\n break;\n\n case FSM.FSM_PENDING:\n let tickCounter: TickCounter = { ticks: this.options.tickStep }\n let elapsed = new Util.Elapsed();\n if (!this.isempty && this.asyncUnion === undefined)\n {\n this.quad.tickUnion(tickCounter);\n if (tickCounter.ticks != 0)\n this.result;\n }\n this.work.ms += elapsed.ms();\n if (this.asyncUnion !== undefined)\n this.setState(FSM.FSM_DONE);\n else\n this.setState(FSM.FSM_PENDING);\n break;\n }\n }\n }\n}\n","import * as Util from '../util/all';\n\nimport * as P from './poly';\nimport * as PP from './polypack';\n\n// Given three colinear points p, q, r, the function checks if\n// point q lies on line segment 'pr'\nfunction onSegment(px: number, py: number, qx: number, qy: number, rx: number, ry: number): boolean\n{\n if (qx <= Math.max(px, rx) && qx >= Math.min(px, rx) &&\n qy <= Math.max(py, ry) && qy >= Math.min(py, ry))\n return true;\n\n return false;\n}\n\n// To find orientation of ordered triplet (p, q, r).\n// The function returns following values\n// 0 --> p, q and r are colinear\n// 1 --> Clockwise\n// 2 --> Counterclockwise\nfunction orientation(px: number, py: number, qx: number, qy: number, rx: number, ry: number): number\n{\n // See https://www.geeksforgeeks.org/orientation-3-ordered-points/\n // for details of below formula.\n let val: number = (qy - py) * (rx - qx) -\n (qx - px) * (ry - qy);\n\n if (val == 0) return 0; // colinear\n\n return (val > 0)? 1: 2; // clock or counterclock wise\n}\n\n// The main function that returns true if line segment 'p1q1'\n// and 'p2q2' intersect.\nfunction doIntersect(p1x: number, p1y: number, q1x: number, q1y: number, p2x: number, p2y: number, q2x: number, q2y: number): boolean\n{\n // closing segment is not intersection\n if (p1x - q2x + p1y - q2y === 0) return false;\n\n // Find the four orientations needed for general and\n // special cases\n let o1 = orientation(p1x, p1y, q1x, q1y, p2x, p2y);\n let o2 = orientation(p1x, p1y, q1x, q1y, q2x, q2y);\n let o3 = orientation(p2x, p2y, q2x, q2y, p1x, p1y);\n let o4 = orientation(p2x, p2y, q2x, q2y, q1x, q1y);\n\n // General case\n if (o1 != o2 && o3 != o4)\n return true;\n\n // Special Cases\n // p1, q1 and p2 are colinear and p2 lies on segment p1q1\n if (o1 == 0 && onSegment(p1x, p1y, p2x, p2y, q1x, q1y)) return true;\n\n // p1, q1 and q2 are colinear and q2 lies on segment p1q1\n if (o2 == 0 && onSegment(p1x, p1y, q2x, q2y, q1x, q1y)) return true;\n\n // p2, q2 and p1 are colinear and p1 lies on segment p2q2\n if (o3 == 0 && onSegment(p2x, p2y, p1x, p1y, q2x, q2y)) return true;\n\n // p2, q2 and q1 are colinear and q1 lies on segment p2q2\n if (o4 == 0 && onSegment(p2x, p2y, q1x, q1y, q2x, q2y)) return true;\n\n return false; // Doesn't fall in any of the above cases\n}\n\n// no extra storage, but brute-force O(N^2) in number of segments. See selfIntersectFast for better approach.\nexport function selfIntersect(poly: any): boolean\n{\n let pp = P.polyNormalize(poly);\n if (pp == null) return false;\n let bIntersect = false;\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n if (bIntersect) return;\n let iEnd = iOffset + ((nPoints-2) * 2);\n let jEnd = iOffset + ((nPoints-1) * 2);\n for (let i = iOffset; i < iEnd; i += 2)\n for (let j = i + 4; j < jEnd; j += 2)\n if (doIntersect(b[i], b[i+1], b[i+2], b[i+3], b[j], b[j+1], b[j+2], b[j+3]))\n {\n bIntersect = true;\n return;\n }\n });\n return bIntersect;\n}\n","import * as Util from '../util/all';\n\nimport * as P from './poly';\nimport * as PP from './polypack';\n\n// Adapted from rowanwins/shamos-hoey \n/*\nMIT License\n\nCopyright (c) 2019 Rowan Winsemius\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n\n// External libraries\nimport TinyQueue from 'tinyqueue'\nimport SplayTree from 'splaytree'\n\nclass Event\n{\n x: number;\n y: number;\n otherEvent: Event;\n isLeftEndpoint: boolean | null;\n segment: Segment;\n\n constructor(x: number, y: number)\n {\n this.x = x\n this.y = y\n\n this.otherEvent = null\n this.isLeftEndpoint = null\n this.segment = null\n }\n\n isOtherEndOfSegment(eventToCheck: Event): boolean\n {\n return this === eventToCheck.otherEvent\n }\n\n isSamePoint(eventToCheck: Event): boolean\n {\n return this.x === eventToCheck.x && this.y === eventToCheck.y\n }\n\n isBelow(p: Event): boolean\n {\n return this.isLeftEndpoint ?\n signedArea(this, this.otherEvent, p) > 0 :\n signedArea(this.otherEvent, p, this) > 0\n }\n\n isAbove(p: Event): boolean\n {\n return !this.isBelow(p)\n }\n}\n\nclass EventQueue\n{\n tiny: TinyQueue<Event>;\n\n constructor()\n {\n this.tiny = new TinyQueue<Event>([], checkWhichEventIsLeft)\n }\n\n push(event: Event): void { this.tiny.push(event) }\n pop(): Event { return this.tiny.pop() as Event }\n get length(): number { return this.tiny.length }\n}\n\nclass Segment\n{\n leftSweepEvent: Event;\n rightSweepEvent: Event;\n segmentAbove: Segment;\n segmentBelow: Segment;\n\n constructor(event: Event)\n {\n this.leftSweepEvent = event\n this.rightSweepEvent = event.otherEvent\n this.segmentAbove = null\n this.segmentBelow = null\n\n event.segment = this\n event.otherEvent.segment = this\n }\n}\n\nclass SweepLine\n{\n tree: SplayTree<Segment>;\n\n constructor()\n {\n this.tree = new SplayTree<Segment>(compareSegments)\n }\n\n addSegment(event: Event): Segment\n {\n const seg = new Segment(event)\n const node: any = this.tree.insert(seg)\n const nextNode: any = this.tree.next(node)\n const prevNode: any = this.tree.prev(node)\n if (nextNode !== null)\n {\n seg.segmentAbove = nextNode.key\n seg.segmentAbove.segmentBelow = seg\n }\n if (prevNode !== null)\n {\n seg.segmentBelow = prevNode.key\n seg.segmentBelow.segmentAbove = seg\n }\n return node.key\n }\n\n findSegment(seg: Segment): Segment\n {\n const node: any = this.tree.find(seg)\n if (node === null) return null\n return node.key\n }\n\n removeSegmentFromSweepline(seg: Segment): void\n {\n const node: any = this.tree.find(seg)\n if (node === null) return\n const nextNode: any = this.tree.next(node)\n const prevNode: any = this.tree.prev(node)\n\n if (nextNode !== null)\n {\n const nextSeg = nextNode.key\n nextSeg.segmentBelow = seg.segmentBelow\n }\n if (prevNode !== null)\n {\n const prevSeg = prevNode.key\n prevSeg.segmentAbove = seg.segmentAbove\n }\n this.tree.remove(seg)\n }\n\n testIntersect(seg1: Segment, seg2: Segment): boolean\n {\n if (seg1 === null || seg2 === null) return false\n\n if (seg1.rightSweepEvent.isSamePoint(seg2.leftSweepEvent) ||\n seg1.rightSweepEvent.isSamePoint(seg2.rightSweepEvent) ||\n seg1.leftSweepEvent.isSamePoint(seg2.leftSweepEvent) ||\n seg1.leftSweepEvent.isSamePoint(seg2.rightSweepEvent)) return false\n\n const x1 = seg1.leftSweepEvent.x\n const y1 = seg1.leftSweepEvent.y\n const x2 = seg1.rightSweepEvent.x\n const y2 = seg1.rightSweepEvent.y\n const x3 = seg2.leftSweepEvent.x\n const y3 = seg2.leftSweepEvent.y\n const x4 = seg2.rightSweepEvent.x\n const y4 = seg2.rightSweepEvent.y\n\n const denom = ((y4 - y3) * (x2 - x1)) - ((x4 - x3) * (y2 - y1))\n const numeA = ((x4 - x3) * (y1 - y3)) - ((y4 - y3) * (x1 - x3))\n const numeB = ((x2 - x1) * (y1 - y3)) - ((y2 - y1) * (x1 - x3))\n\n if (denom === 0)\n {\n if (numeA === 0 && numeB === 0) return false\n return false\n }\n\n const uA = numeA / denom\n const uB = numeB / denom\n\n return (uA >= 0 && uA <= 1 && uB >= 0 && uB <= 1)\n }\n}\n\nfunction checkWhichEventIsLeft(e1: Event, e2: Event): number\n{\n if (e1.x > e2.x) return 1\n if (e1.x < e2.x) return -1\n\n if (e1.y !== e2.y) return e1.y > e2.y ? 1 : -1\n return 1\n}\n\nfunction compareSegments(seg1: Segment, seg2: Segment): number\n{\n if (seg1 === seg2) return 0\n\n if (signedArea(seg1.leftSweepEvent, seg1.rightSweepEvent, seg2.leftSweepEvent) !== 0 ||\n signedArea(seg1.leftSweepEvent, seg1.rightSweepEvent, seg2.rightSweepEvent) !== 0)\n {\n // If the segments share their left endpoints\n // use the right endpoint to sort\n if (seg1.leftSweepEvent.isSamePoint(seg2.leftSweepEvent)) return seg1.leftSweepEvent.isBelow(seg2.rightSweepEvent) ? -1 : 1\n\n // If the segments have different left endpoints\n // use the left endpoint to sort\n if (seg1.leftSweepEvent.x === seg2.leftSweepEvent.x) return seg1.leftSweepEvent.y < seg2.leftSweepEvent.y ? -1 : 1\n\n // If the line segment associated to e1 been inserted\n // into S after the line segment associated to e2 ?\n if (checkWhichEventIsLeft(seg1.leftSweepEvent, seg2.leftSweepEvent) === 1) return seg2.leftSweepEvent.isAbove(seg1.leftSweepEvent) ? -1 : 1\n\n // The line segment associated to e2 has been inserted\n // into S after the line segment associated to e1\n return seg1.leftSweepEvent.isBelow(seg2.leftSweepEvent) ? -1 : 1\n }\n\n return checkWhichEventIsLeft(seg1.leftSweepEvent, seg2.leftSweepEvent) === 1 ? 1 : -1\n}\n\nfunction runCheck(eventQueue: EventQueue): boolean\n{\n const sweepLine = new SweepLine()\n let currentSegment = null\n while (eventQueue.length)\n {\n const event = eventQueue.pop()\n\n if (event.isLeftEndpoint)\n {\n currentSegment = sweepLine.addSegment(event)\n if (sweepLine.testIntersect(currentSegment, currentSegment.segmentAbove)) return true\n if (sweepLine.testIntersect(currentSegment, currentSegment.segmentBelow)) return true\n }\n else\n {\n if (!event.segment) continue\n if (sweepLine.testIntersect(event.segment.segmentAbove, event.segment.segmentBelow)) return true\n sweepLine.removeSegmentFromSweepline(event.segment)\n }\n }\n return false\n}\n\nfunction signedArea(p0: any, p1: any, p2: any): number\n{\n return (p0.x - p2.x) * (p1.y - p2.y) - (p1.x - p2.x) * (p0.y - p2.y)\n}\n\nexport function selfIntersectFast(poly: any): boolean\n{\n let pp = P.polyNormalize(poly);\n if (pp == null) return false;\n\n // Fill queue\n let eventQueue = new EventQueue();\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n let iEnd = iOffset + (nPoints - 1) * 2; // iterating over segments so right before last point\n for (; iOffset < iEnd; iOffset += 2)\n {\n const e1 = new Event(b[iOffset], b[iOffset+1]);\n const e2 = new Event(b[iOffset+2], b[iOffset+3]);\n\n e1.otherEvent = e2\n e2.otherEvent = e1\n\n if (checkWhichEventIsLeft(e1, e2) > 0)\n {\n e2.isLeftEndpoint = true\n e1.isLeftEndpoint = false\n }\n else\n {\n e1.isLeftEndpoint = true\n e2.isLeftEndpoint = false\n }\n eventQueue.push(e1)\n eventQueue.push(e2)\n }\n });\n\n return runCheck(eventQueue)\n}\n","/*\n Adapted from:\n (c) 2017, Vladimir Agafonkin\n Simplify.js, a high-performance JS polyline simplification library\n mourner.github.io/simplify-js\n*/\n\nexport type Point = [ number, number];\n\n// square distance between 2 points\nfunction getSqDist(p1: Point, p2: Point): number\n{\n var dx = p1[0] - p2[0],\n dy = p1[1] - p2[1];\n\n return dx * dx + dy * dy;\n}\n\n// square distance from a point to a segment\nfunction getSqSegDist(p: Point, p1: Point, p2: Point): number\n{\n var x = p1[0],\n y = p1[1],\n dx = p2[0] - x,\n dy = p2[1] - y;\n\n if (dx !== 0 || dy !== 0) {\n\n var t = ((p[0] - x) * dx + (p[1] - y) * dy) / (dx * dx + dy * dy);\n\n if (t > 1) {\n x = p2[0];\n y = p2[1];\n\n } else if (t > 0) {\n x += dx * t;\n y += dy * t;\n }\n }\n\n dx = p[0] - x;\n dy = p[1] - y;\n\n return dx * dx + dy * dy;\n}\n\n\n// rest of the code doesn't care about point format\n\n// basic distance-based simplification\nfunction simplifyRadialDist(points: Point[], sqTolerance: number): Point[]\n{\n let prevPoint: Point = points[0],\n newPoints: Point[] = [prevPoint],\n point: Point;\n\n for (let i = 1, len = points.length; i < len; i++) {\n point = points[i];\n\n if (getSqDist(point, prevPoint) > sqTolerance) {\n newPoints.push(point);\n prevPoint = point;\n }\n }\n\n if (prevPoint !== point) newPoints.push(point);\n\n return newPoints;\n}\n\nfunction simplifyDPStep(points: Point[], first: number, last: number, sqTolerance: number, simplified: Point[]): void\n{\n let maxSqDist: number = sqTolerance,\n index: number;\n\n for (let i = first + 1; i < last; i++)\n {\n let sqDist = getSqSegDist(points[i], points[first], points[last]);\n\n if (sqDist > maxSqDist)\n {\n index = i;\n maxSqDist = sqDist;\n }\n }\n\n if (maxSqDist > sqTolerance)\n {\n if (index - first > 1) simplifyDPStep(points, first, index, sqTolerance, simplified);\n simplified.push(points[index]);\n if (last - index > 1) simplifyDPStep(points, index, last, sqTolerance, simplified);\n }\n}\n\n// simplification using Ramer-Douglas-Peucker algorithm\nfunction simplifyDouglasPeucker(points: Point[], sqTolerance: number): Point[]\n{\n let last: number = points.length - 1;\n\n let simplified: Point[] = [points[0]];\n simplifyDPStep(points, 0, last, sqTolerance, simplified);\n simplified.push(points[last]);\n\n return simplified;\n}\n\n// both algorithms combined for awesome performance\nexport function simplify(points: Point[], tolerance: number = 1, highestQuality: boolean = false): Point[]\n{\n if (tolerance == 0 || points.length <= 2)\n return points;\n\n let sqTolerance: number = tolerance * tolerance;\n\n points = highestQuality ? points : simplifyRadialDist(points, sqTolerance);\n points = simplifyDouglasPeucker(points, sqTolerance);\n\n return points;\n}\n","\n// Forked version that supports packing\nimport * as TopoClient from '@dra2020/topojson-client';\n// Forked version that fixes self-looping hole problem\nimport * as TopoServer from '@dra2020/topojson-server';\n// Forked version that fixes performance problem\nimport * as TopoSimplify from '@dra2020/topojson-simplify';\n\nimport * as Util from '../util/all';\nimport * as FSM from '../fsm/all';\nimport * as G from '../geo/all';\n\nimport * as P from './poly';\nimport * as Q from './quad';\nimport * as PP from './polypack';\nimport * as PL from './polylabel';\nimport { selfIntersectFast } from './shamos';\nimport { polyContainsPoint } from './pointinpoly';\n\nexport type Topo = any;\n\nfunction getGEOID(f: any): string\n{\n if (f.features && f.features.length)\n f = f.features[0];\n else if (Array.isArray(f))\n f = f[0];\n else\n return '';\n if (f.properties.id !== undefined) return 'id';\n if (f.properties.GEOID !== undefined) return 'GEOID';\n if (f.properties.GEOID10 !== undefined) return 'GEOID10';\n return '';\n}\n\nexport function topoFromCollection(col: any): Topo\n{\n if (col == null) return null;\n let save = PP.featureUnpackTemporarily(col);\n let prop = getGEOID(col);\n let objects: any = {};\n col.features.forEach((f: any) => objects[f.properties[prop]] = f);\n let topo: any;\n if (Util.isEmpty(objects))\n topo = { objects: objects }\n else\n topo = TopoServer.topology(objects);\n PP.featureRepack(col, save);\n if (col.datasets)\n topo.datasets = col.datasets;\n return topo;\n}\n\nfunction ringsCancel(outerPoly: any, innerRing: any): boolean\n{\n if (outerPoly.length != 1) return false;\n let outerRing = outerPoly[0];\n if (outerRing.length !== innerRing.length) return false;\n let n = outerRing.length-1;\n let i = 0;\n for (; i <= n; i++, n--)\n if (! Util.shallowEqual(outerRing[i], innerRing[n]))\n return false;\n return true;\n}\n\nfunction correctGeometry(f: any): any\n{\n return P.featureRewind(f, { validateHoles: false } );\n}\n\nexport function topoContiguity(topo: Topo): any\n{\n let objects: any[] = Object.values(topo.objects);\n let geoid = getGEOID(objects);\n objects.forEach((o: any) => { o.properties.id = o.properties[geoid] });\n let neighbors = TopoClient.neighbors(topo, objects, true);\n let result: any = {};\n result['OUT_OF_STATE'] = [];\n objects.forEach((o: any, i: number) => {\n result[o.properties.id] = neighbors[i].map((j: any) => {\n if (j >= 0)\n return objects[j].properties.id;\n else\n {\n result['OUT_OF_STATE'].push(o.properties.id);\n return 'OUT_OF_STATE';\n }\n });\n });\n return result;\n}\n\nexport function topoToFeature(topo: Topo, geoid: string): any\n{\n return correctGeometry(TopoClient.feature(topo, topo.objects[geoid]));\n}\n\nexport type TopoSpliceEntry = { topology: Topo, filterout?: any };\n\nexport function topoSplice(topoarray: TopoSpliceEntry[]): Topo\n{\n if (topoarray) topoarray.forEach(e => topoPack(e.topology));\n return TopoClient.splice(topoarray);\n}\n\nexport function topoToCollection(topo: Topo): any\n{\n let col: any = { type: 'FeatureCollection', features: [] };\n if (topo)\n Object.keys(topo.objects).forEach((geoid: string) => {\n col.features.push(topoToFeature(topo, geoid));\n });\n if (topo && topo.datasets) col.datasets = topo.datasets;\n return col;\n}\n\nfunction keepArcs(topo: any, arcs: any, keepweight: number): void\n{\n arcs.forEach((a: any) => {\n if (Array.isArray(a))\n keepArcs(topo, a, keepweight);\n else\n {\n let arc = topo.arcs[a < 0 ? ~a : a];\n arc.forEach((pt: any) => {\n if (pt[2] >= keepweight)\n pt[2] = Infinity;\n });\n }\n });\n}\n\nfunction fullFidelity(topo: any, arcs: any): boolean\n{\n let bFull = true;\n\n arcs.forEach((a: any) => {\n if (Array.isArray(a))\n bFull = bFull && fullFidelity(topo, a);\n else\n {\n let arc = topo.arcs[a < 0 ? ~a : a];\n arc.forEach((pt: any) => {\n if (bFull && pt[2] !== Infinity)\n bFull = false;\n });\n }\n });\n return bFull;\n}\n\nfunction misMatchPoly(p1: any, p2: any): boolean\n{\n if (p1 == null || p2 == null || p1.length != p2.length) return true;\n for (let i = 0; i < p1.length; i++)\n if (p1[i] == null || p2[i] == null) return true;\n return false;\n}\n\nfunction misMatchMulti(m1: any, m2: any): boolean\n{\n if (m1 == null || m2 == null || m1.length != m2.length) return true;\n for (let i = 0; i < m1.length; i++)\n if (misMatchPoly(m1[i], m2[i])) return true;\n return false;\n}\n\nfunction misMatchObject(o1: any, o2: any): boolean\n{\n if (o1 == null || o2 == null || o1.type !== o2.type) return true;\n return (o1.type === 'MultiPolygon') ? misMatchMulti(o1.arcs, o2.arcs) : misMatchPoly(o1.arcs, o2.arcs);\n}\n\nconst MAX_TRIES = 30;\n\nfunction bigTimeString(ms: number): string\n{\n let seconds = Math.trunc(ms / 1000);\n let minutes = Math.trunc(seconds / 60);\n seconds -= minutes * 60;\n return `${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;\n}\n\nfunction intpt(f: any): { x: number, y: number }\n{\n let x = 0, y = 0;\n for (let p of ['INTPTLON20','INTPTLON10','INTPTLON','labelx'])\n if (f.properties[p] && !isNaN(Number(f.properties[p])))\n {\n x = Number(f.properties[p]);\n break;\n }\n for (let p of ['INTPTLAT20','INTPTLAT10','INTPTLAT','labely'])\n if (f.properties[p] && !isNaN(Number(f.properties[p])))\n {\n y = Number(f.properties[p]);\n break;\n }\n return {x: x, y: y};\n}\n\nexport interface SimplifyOptions\n{\n minArea?: number,\n log?: boolean,\n}\n\nconst DefaultSimplifyOptions: SimplifyOptions = { minArea: 500 };\n\nfunction log(emitlog: boolean, s: string): void\n{\n if (emitlog) console.log(s);\n}\n\n//\n// topoSimplifyCollection:\n// This implements our simplification strategy for block/precinct level shapes. The basic idea is to\n// ensure that all shapes generated at the block level have non-zero area and do not introduce self-crossing\n// edges. Since topological simplification happens at the edge level, self-crossing is a risk when opposite\n// edges make simplification decisions that cause the edges to cross. Crossing edges result in visual anomalies.\n// In addition, our basic strategy is that if we have well-formed block shapes, all other shape processing\n// (virtual features, precincts, counties, districts) can be done by fast merges that generate well-formed\n// shapes without holes, overlaps or crossing edges.\n// The strategy here is to first just do topological simplification at the default simplification level. We then\n// scan for problematic shapes (zero area, too thin and narrow or self-crossing) and keep additional points on\n// the edges (arcs) for those shapes, adding additional points on each iteration step until we have a good set.\n// For tiny shapes (zero area or short and thin) we just immediately say keep all points since these are mostly \n// shapes with a small number of points anyway.\n//\n\nexport function topoSimplifyCollection(col: any, options?: SimplifyOptions): any\n{\n options = Util.shallowAssignImmutable(DefaultSimplifyOptions, options);\n\n if (col == null) return null;\n let elapsedTotal = new Util.Elapsed();\n let elapsed = new Util.Elapsed();\n let topo = topoFromCollection(col);\n log(options.log, `topoSimplifyCollection: fromCollection: ${Math.round(elapsed.ms())}ms`);\n elapsed.start();\n topo = TopoSimplify.presimplify(topo, TopoSimplify['sphericalTriangleArea']);\n log(options.log, `topoSimplifyCollection: presimplify: ${Math.round(elapsed.ms())}ms`);\n elapsed.start();\n\n // Keep iterating on removing simplification from degenerate shapes\n let nTries = 1;\n let nBadLast = Number.MAX_VALUE;\n let keepweight = 1E-11;\n let nLabelTolerance = 1E-4;\n let minArea = options.minArea;\n let keepTiny = new WeakMap<any, any>();\n while (true)\n {\n let testtopo = TopoSimplify.simplify(topo, 1E-10);\n elapsed.start();\n let nBad = 0;\n let nTiny = 0;\n col.features.forEach((f: any) => {\n let oOld: any = topo.objects[f.properties.id];\n let oNew: any = testtopo.objects[f.properties.id];\n\n // Ignore points\n if (f.geometry && f.geometry.type === 'Point')\n keepTiny.set(f, f);\n\n if (! keepTiny.has(f))\n {\n // Walk through each polygon of a multipolygon separately since I may have a large non-degenerate\n // shape combined with degenerate smaller shapes that I want to identify. I do not examine holes\n // separately under the assumption that holes will have matching polygons that would be identified\n // and would cause those shared edges (between the hole and the filling polygon) to be preserved if necessary.\n //\n // I do make a final pass of testing for self-intersection that looks at both polygon and hole edges.\n //\n let arcs = PP.normalizeArcs(oNew.arcs);\n let npoly = PP.countArcPolygons(arcs);\n let bDecided = false;\n let iPoly = 0;\n for (; !bDecided && iPoly < npoly; iPoly++)\n {\n let pp = PP.polyPackTopoArcs(testtopo, arcs, iPoly);\n P.polyRewindRings(pp);\n let a = P.polyArea(pp);\n if (a <= 0)\n {\n keepTiny.set(f, f);\n keepArcs(topo, oOld.arcs, 0); // keeps all points to avoid reprocessing these tiny shapes\n nBad++, nTiny++, bDecided = true;\n }\n else if (a < minArea)\n {\n let d = PL.polyLabel(pp);\n if (d.d < nLabelTolerance)\n {\n keepTiny.set(f, f);\n keepArcs(topo, oOld.arcs, 0); // keeps all points to avoid reprocessing these tiny shapes\n nBad++, nTiny++, bDecided = true;\n }\n }\n }\n if (! bDecided)\n {\n let pp = PP.polyPackTopoArcs(testtopo, arcs);\n P.polyRewindRings(pp);\n if (selfIntersectFast(pp))\n {\n keepArcs(topo, oOld.arcs, keepweight);\n nBad++;\n }\n else\n {\n let {x,y} = intpt(f);\n let d = PL.polyDistance(pp, x, y);\n if (d < 0.00001) // d is negative if outside the polygon, so that qualifies here\n {\n keepTiny.set(f, f);\n keepArcs(topo, oOld.arcs, 0); // keeps all points to avoid reprocessing these tiny shapes\n nBad++, nTiny++;\n log(options.log, `topoSimplifyCollection: ${f.properties.id}: increasing feature fidelity because intpt dist is ${d}`);\n }\n }\n }\n }\n });\n log(options.log, `topoSimplifyCollection: pass ${nTries}: ${nBad} (${nTiny} tiny) of ${col.features.length} features are degenerate`);\n\n // If not making progress, keep more points\n if (nBad >= nBadLast)\n {\n keepweight /= 10;\n log(options.log, `topoSimplifyCollection: pass ${nTries}: reducing weight limit to ${keepweight}`);\n }\n nBadLast = nBad;\n\n if (nBad && nTries > MAX_TRIES)\n console.error(`topoSimplifyCollection: failed to finalize simplify down to zero degenerate features`);\n // If no bad block shapes, or finished trying, just return result\n if (nBad == 0 || nTries > MAX_TRIES)\n {\n col = topoToCollection(testtopo);\n break;\n }\n\n nTries++;\n }\n\n log(options.log, `topoSimplifyCollection: total elapsed time: ${bigTimeString(elapsedTotal.ms())}`);\n\n return col;\n}\n\nexport function topoMerge(topo: Topo, geoids: string[]): any\n{\n if (geoids == null || geoids.length == 0) return null;\n let objects: any[] = [];\n geoids.forEach((geoid) => objects.push(topo.objects[geoid]));\n return correctGeometry({ type: 'Feature', properties: {}, geometry: TopoClient.merge(topo, objects) });\n}\n\nexport function topoMergeFeatures(topo: Topo, features: any[]): any\n{\n if (features == null || features.length == 0) return null;\n let prop = getGEOID(features);\n return topoMerge(topo, features.map(f => f.properties[prop]));\n}\n\nlet UniqueState = FSM.FSM_CUSTOM1;\nlet FSM_COMPUTING = UniqueState++;\n\nclass FsmIncrementalUnion extends FSM.Fsm\n{\n options: P.TickOptions;\n key: number;\n multi: G.GeoMultiCollection;\n map: any; // { [geoid: string]: Feature }\n result: any;\n work: Q.WorkDone;\n\n constructor(env: FSM.FsmEnvironment, options: P.TickOptions, multi: G.GeoMultiCollection, key: number, map?: any)\n {\n super(env);\n this.options = options;\n this.multi = multi;\n this.key = key;\n this.result = null;\n this.map = null;\n if (map) this.recompute(map);\n }\n\n recompute(map: any): void\n {\n if (this.map != null && map != null && Util.shallowEqual(map, this.map))\n {\n this.work = { nUnion: 0, nDifference: 0, ms: 0 };\n }\n else if (map == null || Util.isEmpty(map))\n {\n this.work = { nUnion: 0, nDifference: 0, ms: 0 };\n this.result = null;\n this.map = map;\n }\n else\n {\n let values = Object.values(map);\n this.work = { nUnion: values.length, nDifference: 0, ms: 0 };\n let elapsed = new Util.Elapsed();\n this.result = topoMergeFeatures(this.multi.allTopo(), values);\n this.work.ms = elapsed.ms();\n this.map = map;\n }\n this.setState(FSM.FSM_DONE);\n }\n\n cancel(): void\n {\n this.result = null;\n this.map = null;\n this.setState(FSM.FSM_DONE);\n }\n\n tick(): void\n {\n if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n // never initialized to do work (see recompute())\n this.setState(FSM.FSM_DONE);\n break;\n }\n }\n }\n}\n\nexport interface TopoUnionResult\n{\n key: number;\n poly: any;\n work: Q.WorkDone;\n}\n\nexport class FsmTopoUnion extends FSM.Fsm\n{\n options: P.TickOptions;\n unions: { [index: number]: FsmIncrementalUnion };\n work: Q.WorkDone;\n\n constructor(env: FSM.FsmEnvironment, options?: P.TickOptions)\n {\n super(env);\n this.options = Util.shallowAssignImmutable(P.DefaultTickOptions, options);\n this.unions = {};\n this.work = { nUnion: 0, nDifference: 0, ms: 0 };\n }\n\n get result(): TopoUnionResult[]\n {\n if (Util.countKeys(this.unions) > 0 && this.state === FSM.FSM_DONE)\n return Object.values(this.unions).map((i: FsmIncrementalUnion) => ({ key: i.key, poly: i.result, work: i.work }) );\n else\n return null;\n }\n\n cancel(): void\n {\n Object.values(this.unions).forEach((i: FsmIncrementalUnion) => {\n i.cancel();\n });\n this.unions = {};\n this.setState(FSM.FSM_DONE);\n }\n\n cancelOne(key: number): void\n {\n let u = this.unions[key];\n if (u) u.cancel();\n }\n\n recompute(multi: G.GeoMultiCollection, key: number, map: any): void\n {\n let fsm = this.unions[key];\n if (fsm == null || fsm.multi !== multi)\n {\n fsm = new FsmIncrementalUnion(this.env, this.options, multi, key, map);\n this.unions[key] = fsm;\n }\n else\n fsm.recompute(map);\n this.work = { nUnion: 0, nDifference: 0, ms: 0 };\n this.waitOn(fsm);\n this.setState(FSM_COMPUTING);\n }\n\n tick(): void\n {\n if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n case FSM_COMPUTING:\n this.work = { nUnion: 0, nDifference: 0, ms: 0 };\n if (this.unions) Object.values(this.unions).forEach((i: FsmIncrementalUnion) => {\n this.work.ms += i.work.ms;\n this.work.nUnion += i.work.nUnion;\n this.work.nDifference += i.work.nDifference;\n });\n this.setState(FSM.FSM_DONE);\n break;\n }\n }\n }\n}\n\nexport function topoPacked(topo: any): boolean\n{\n return topo.packed !== undefined;\n}\n\nexport function topoPack(topo: any): any\n{\n let tc = TopoClient;\n TopoClient.packArcs(topo);\n TopoClient.packArcIndices(topo);\n return topo;\n}\n\nexport function topoUnpack(topo: any): any\n{\n TopoClient.unpackArcs(topo);\n TopoClient.unpackArcIndices(topo);\n return topo;\n}\n","import * as PC from 'polygon-clipping';\n\nimport * as Util from '../util/all';\nimport * as FSM from '../fsm/all';\n\nimport * as Poly from './poly';\nimport * as Q from './quad';\nimport * as PP from './polypack';\nimport * as PR from './polyround';\n\n// Confusion on how polygon-clipping exposes its interface - be flexible\nlet _union: any = undefined;\nlet _difference: any = undefined;\nlet _intersection: any = undefined;\nlet anyPC: any = PC;\nif (anyPC.union) _union = anyPC.union;\nelse if (anyPC.default && anyPC.default.union) _union = anyPC.default.union;\nif (_union === undefined) throw 'Unable to load union function from polygon-clipping';\nif (anyPC.difference) _difference = anyPC.difference;\nelse if (anyPC.default && anyPC.default.difference) _difference = anyPC.default.difference;\nif (_difference === undefined) throw 'Unable to load difference function from polygon-clipping';\nif (anyPC.intersection) _intersection = anyPC.intersection;\nelse if (anyPC.default && anyPC.default.intersection) _intersection = anyPC.default.intersection;\nif (_intersection === undefined) throw 'Unable to load intersection function from polygon-clipping';\n\nconst FSM_COMPUTING = FSM.FSM_CUSTOM1;\n\nfunction unpackCoords(buffer: Float64Array, offset: number, nPoints: number): any\n{\n let c: any[] = [];\n\n let end = offset + nPoints*2;\n for (; offset < end; offset += 2)\n c.push([buffer[offset], buffer[offset+1]]);\n return [ c ];\n}\n\nexport function polyIntersects(p1: any, p2: any): boolean\n{\n let pp1 = Poly.polyNormalize(p1);\n let pp2 = Poly.polyNormalize(p2);\n let bIntersects: boolean = false;\n\n PP.polyPackEachRing(pp1, (buffer1: Float64Array, iPoly1: number, iRing1: number, iOffset1: number, nPoints1: number) => {\n if (iRing1 == 0)\n {\n let c1 = unpackCoords(buffer1, iOffset1, nPoints1);\n PP.polyPackEachRing(pp2, (buffer2: Float64Array, iPoly2: number, iRing2: number, iOffset2: number, nPoints2: number) => {\n if (iRing2 == 0)\n {\n let c2 = unpackCoords(buffer2, iOffset2, nPoints2);\n try\n {\n let result = _intersection(c1, c2);\n if (result && result.length > 0)\n bIntersects = true; \n }\n catch (err)\n {\n // Ignore, treat badly formed as non-intersecting\n }\n }\n });\n }\n });\n return bIntersects;\n}\n\nexport function polyIntersectArea(p1: any, p2: any): number\n{\n let pp1 = Poly.polyNormalize(p1);\n let pp2 = Poly.polyNormalize(p2);\n let area: number = 0;\n\n PP.polyPackEachRing(pp1, (buffer1: Float64Array, iPoly1: number, iRing1: number, iOffset1: number, nPoints1: number) => {\n let c1 = unpackCoords(buffer1, iOffset1, nPoints1);\n PP.polyPackEachRing(pp2, (buffer2: Float64Array, iPoly2: number, iRing2: number, iOffset2: number, nPoints2: number) => {\n let c2 = unpackCoords(buffer2, iOffset2, nPoints2);\n try\n {\n let result = _intersection(c1, c2);\n if (result && result.length > 0)\n area += Poly.polyArea(result) * ((!iRing1 == !iRing2) ? 1 : -1);\n }\n catch (err)\n {\n }\n });\n });\n return area;\n}\n\nexport function polyDifference(main: any, parts: any[]): any\n{\n main = PP.polyUnpack(coords(main));\n\n // need to explode multipolygon so that \"exploded\" is a valid multipolygon input to underlying difference routine\n let exploded: any[] = [];\n parts.forEach((p: any) => {\n p = PP.polyUnpack(coords(p));\n if (Util.depthof(p) == 5)\n p.forEach((poly: any) => { exploded.push(poly) });\n else\n exploded.push(p);\n });\n\n return PR.polyRound(_difference(main, exploded));\n}\n\nclass FsmDifference extends FSM.Fsm\n{\n accum: any;\n polys: any[];\n work: Q.WorkDone;\n\n constructor(env: FSM.FsmEnvironment, accum?: any, polys?: any[])\n {\n super(env);\n this.work = { nUnion: 0, nDifference: 0, ms: 0 };\n this.initialize(accum, polys);\n }\n\n initialize(accum: any, polys: any[])\n {\n this.accum = accum;\n this.polys = polys;\n if (polys == null || polys.length == 0)\n this.setState(FSM.FSM_DONE);\n else\n {\n this.work.nDifference = polys.length;\n this.setState(FSM.FSM_STARTING);\n }\n }\n\n cancel(): void\n {\n this.accum = null;\n this.polys = null;\n this.setState(FSM.FSM_DONE);\n }\n\n get result(): any\n {\n return this.accum;\n }\n\n tick(): void\n {\n if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n if (this.polys == null)\n this.setState(FSM.FSM_DONE);\n else\n this.setState(FSM_COMPUTING);\n break;\n\n case FSM_COMPUTING:\n let elapsed = new Util.Elapsed();\n this.accum = PR.polyRound(_difference(this.accum, this.polys));\n this.work.ms = elapsed.ms();\n this.polys = null;\n this.setState(FSM.FSM_DONE);\n break;\n }\n }\n }\n}\n\nconst FSM_UNION = FSM.FSM_CUSTOM1;\nconst FSM_DIFFERENCE = FSM.FSM_CUSTOM2;\n\nfunction coords(f: any): any\n{\n return (f.geometry !== undefined) ? (f.geometry.packed !== undefined ? f.geometry.packed : f.geometry.coordinates) : f;\n}\n\nclass FsmIncrementalUnion extends FSM.Fsm\n{\n options: Poly.TickOptions;\n key: any;\n map: any; // { [geoid: string]: Feature }\n result: any;\n lastCompleteMap: any;\n lastCompleteResult: any;\n toSub: any[];\n fsmUnion: Q.FsmQuadTree;\n fsmDifference: FsmDifference;\n work: Q.WorkDone;\n\n constructor(env: FSM.FsmEnvironment, options: Poly.TickOptions, key: any, map?: any)\n {\n super(env);\n this.options = options;\n this.key = key;\n this.result = null;\n this.map = null;\n this.lastCompleteResult = null;\n this.lastCompleteMap = null;\n this.toSub = null;\n this.fsmUnion = null;\n this.fsmDifference = null;\n if (map) this.recompute(map);\n }\n\n matches(key: any): boolean\n {\n return Util.shallowEqual(this.key, key);\n }\n\n recompute(map: any): void\n {\n // If a computation is in progress, just cancel and restart\n if (this.fsmUnion)\n {\n this.fsmUnion.cancel();\n this.fsmUnion = null;\n this.result = this.lastCompleteResult;\n this.map = this.lastCompleteMap;\n }\n if (this.fsmDifference)\n {\n this.fsmDifference.cancel();\n this.fsmDifference = null;\n this.result = this.lastCompleteResult;\n this.map = this.lastCompleteMap;\n }\n\n let polys: any[] = [];\n if (this.result == null || Util.isEmpty(map))\n {\n // Starting from scratch\n this.toSub = null;\n for (let id in map) if (map.hasOwnProperty(id))\n polys.push(coords(map[id]));\n }\n else\n {\n // We have the result of a previous computation - compute a difference since we assume\n // that is cheaper (often only one or two polygons added or removed).\n let id: string;\n\n // To add (polygons in new map did not occur in old map)\n polys.push(this.result);\n this.result = null;\n for (id in map) if (map.hasOwnProperty(id) && this.map[id] === undefined)\n polys.push(coords(map[id]));\n\n // To sub\n this.toSub = [];\n for (id in this.map) if (this.map.hasOwnProperty(id) && map[id] === undefined)\n {\n let c = PP.polyUnpack(coords(this.map[id]));\n if (Util.depthof(c) === 5)\n for (let i: number = 0; i < c.length; i++)\n this.toSub.push(c[i]);\n else\n this.toSub.push(c);\n }\n if (this.toSub.length == 0)\n this.toSub = null;\n }\n\n // Short-circuit when no work to be done\n if (polys.length == 1 && this.toSub == null && this.lastCompleteResult)\n {\n this.work = { nUnion: 0, nDifference: 0, ms: 0 };\n this.result = this.lastCompleteResult;\n this.map = this.lastCompleteMap;\n this.setState(FSM.FSM_DONE);\n }\n else\n {\n this.work = { nUnion: polys.length - 1, nDifference: this.toSub ? this.toSub.length : 0, ms: 0 };\n this.fsmUnion = new Q.FsmQuadTree(this.env, this.options, polys);\n this.waitOn(this.fsmUnion);\n this.setState(FSM_UNION);\n this.map = map;\n }\n }\n\n cancel(): void\n {\n if (this.fsmUnion)\n {\n this.fsmUnion.cancel();\n this.fsmUnion = null;\n }\n if (this.fsmDifference)\n {\n this.fsmDifference.cancel();\n this.fsmDifference = null;\n }\n this.result = null;\n this.map = null;\n this.lastCompleteResult = null;\n this.lastCompleteMap = null;\n this.setState(FSM.FSM_DONE);\n }\n\n tick(): void\n {\n if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n // never initialized to do work (see recompute())\n this.setState(FSM.FSM_DONE);\n break;\n\n case FSM_UNION:\n if (this.fsmUnion)\n this.work.ms += this.fsmUnion.work.ms;\n this.fsmDifference = new FsmDifference(this.env, this.fsmUnion.result, this.toSub);\n this.waitOn(this.fsmDifference);\n this.toSub = null;\n this.fsmUnion = null;\n this.setState(FSM_DIFFERENCE);\n break;\n\n case FSM_DIFFERENCE:\n this.result = this.fsmDifference.result;\n this.work.ms += this.fsmDifference.work.ms;\n this.lastCompleteResult = this.result;\n this.lastCompleteMap = this.map;\n this.fsmDifference = null;\n this.setState(FSM.FSM_DONE);\n break;\n }\n }\n }\n}\n\nexport interface UnionResult\n{\n key: any;\n poly: any;\n work: Q.WorkDone;\n}\n\nexport class FsmUnion extends FSM.Fsm\n{\n options: Poly.TickOptions;\n unions: FsmIncrementalUnion[];\n work: Q.WorkDone;\n\n constructor(env: FSM.FsmEnvironment, options?: Poly.TickOptions)\n {\n super(env);\n this.options = Util.shallowAssignImmutable(Poly.DefaultTickOptions, options);\n this.unions = [];\n this.work = { nUnion: 0, nDifference: 0, ms: 0 };\n }\n\n get result(): UnionResult[]\n {\n if (this.unions.length > 0 && this.state === FSM.FSM_DONE)\n return this.unions.map((i: FsmIncrementalUnion) => ({ key: i.key, poly: i.result, work: i.work }) );\n else\n return null;\n }\n\n cancel(): void\n {\n this.unions.forEach((i: FsmIncrementalUnion) => {\n i.cancel();\n });\n this.unions = [];\n this.setState(FSM.FSM_DONE);\n }\n\n cancelOne(key: any): void\n {\n for (let i = 0; i < this.unions.length; i++)\n {\n let u = this.unions[i];\n if (u.matches(key))\n {\n u.cancel();\n return;\n }\n }\n }\n\n recompute(key: any, map: any): void\n {\n let fsm: FsmIncrementalUnion = this.unions.find((i: FsmIncrementalUnion) => i.matches(key));\n if (fsm == null)\n {\n fsm = new FsmIncrementalUnion(this.env, this.options, key, map);\n this.unions.push(fsm);\n }\n else\n fsm.recompute(map);\n this.work = { nUnion: 0, nDifference: 0, ms: 0 };\n this.unions.forEach((u) => { this.work.nUnion += u.work.nUnion; this.work.nDifference += u.work.nDifference });\n this.waitOn(fsm);\n this.setState(FSM_COMPUTING);\n }\n\n tick(): void\n {\n if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n case FSM_COMPUTING:\n if (this.unions) this.unions.forEach((u) => { this.work.ms += u.work.ms });\n this.setState(FSM.FSM_DONE);\n break;\n }\n }\n }\n}\n","export * from './util';\nexport * from './countedhash';\nexport * from './indexedarray';\nexport * from './gradient';\nexport * from './bintrie';\nexport * from './bitset';\n","import * as U from './util';\n\n//\n// Packed format Trie for mapping string to string\n// Assumptions:\n// 1. Lots of duplicate prefix strings in keys (so branching in trie happens late).\n// 2. Lots of duplicate prefix strings in values.\n// 3. Lots of keys with duplicate prefix map to the same string value.\n// Especially good for something like our blockmapping.json file since both the keys (blockIDs)\n// and values (precinct IDs) have a ton of redundancy and ~250 avg keys (blockID) map to same\n// precinctID.\n// The packed structure is just read directly into memory and walked in packed format.\n\n// The structure is divided into two pieces, a node \"tree\" (flat n-ary trie with offsets\n// to next nodes) and a value table. A value is a pair of string fragment offsets.\n//\n// Main header is:\n// value table offset (32 bit value)\n// [ node table ]\n// [ value table ]\n\n// A tree node is:\n// node length / value - (length of byte and node offset table)\n// [ bytes ]* (padded to 4)\n// [ node or value offset ]* (32 bit signed values, negative values are value table refs)\n//\n// We just do a linear scan through the bytes since we assume many will only have a single child,\n// max ~15.\n// The byte array contains the next byte to match, the node offset is the respective next node.\n// A negative node offset is the actual value.\n//\n// A value is an entry in the value table. It is:\n// fragment offset 1 (from start of value table) (offset zero means null, not a legal offset)\n// fragment offset 2 (from start of value table)\n//\n// where a fragment is:\n// length (byte)\n// [ bytes ]*\n//\n// value table is:\n// number of pairs (32 bit value)\n// [ fragment offset pairs ]*\n// [ fragment values ]*\n\nexport interface Coder\n{\n encoder: { encode: (s: string) => Uint8Array };\n decoder: { decode: (u8: Uint8Array) => string };\n}\n\n/*\n-- For Node\nimport * as u from 'util';\nUtil.setCoder({ encoder: new u.TextEncoder(), decoder: new u.TextDecoder('utf-8') });\n\n-- For Browser\nUtil.setCoder({ encoder: new TextEncoder(), decoder: new TextDecoder('utf-8') });\n*/\n\nconst MaxKeyLength = 128;\n\nexport function s2u8(coder: Coder, s: string): Uint8Array\n{\n return coder.encoder.encode(s);\n}\n\nexport function u82s(coder: Coder, u8: Uint8Array, offset: number, n: number): string\n{\n return coder.decoder.decode(u8.subarray(offset, offset+n));\n}\n\n// String table algorithm:\n// For each string, divide into fragments of n to 3 bytes\n// Allocate an occurence for each fragment.\n// Sort the fragments by number of occurrences.\n// For each string, pick fragmentation that maximizes occurrence count and mark\n// fragmentation as \"in use\"\n\ninterface Fragment\n{\n count: number;\n used: number;\n offset: number;\n s: string;\n u8?: Uint8Array;\n}\n\ntype FragmentTable = { [frag: string]: Fragment };\ntype FragmentPair = { f1: Fragment, f2: Fragment, offset?: number };\nconst NullFragment = { count: 0, used: 0, offset: 0, s: '' };\n\nfunction sortBestPair(p1: FragmentPair, p2: FragmentPair): number\n{\n let d = (p1.f1.count+p1.f2.count) - (p2.f1.count+p2.f2.count);\n if (d) return d;\n d = (p1.f1.used + p1.f2.used) - (p2.f1.used+p2.f2.used);\n return d;\n}\n\nfunction unique(a: string[]): string[]\n{\n a = a.slice().sort();\n return a.filter((s: string, i: number) => { return i == 0 || s !== a[i-1] });\n}\n\nclass ValueTable\n{\n coder: Coder;\n ab: ArrayBuffer;\n u8: Uint8Array;\n u32: Uint32Array;\n\n constructor(coder: Coder) { this.coder = coder }\n\n static fromBuffer(coder: Coder, ab: ArrayBuffer, offset: number, length: number): ValueTable\n {\n let vt = new ValueTable(coder);\n vt.ab = ab;\n vt.u8 = new Uint8Array(ab, offset, length);\n let u32 = new Uint32Array(ab, offset, 1);\n let n = u32[0];\n vt.u32 = new Uint32Array(ab, offset, 1+2*n);\n return vt;\n }\n\n // Returns string given offset into value table\n fromOffset(offset: number): string\n {\n let o1 = this.u32[offset];\n let o2 = this.u32[offset+1];\n let n = 0;\n if (o1) n += this.u8[o1];\n if (o2) n += this.u8[o2];\n let ab = new ArrayBuffer(n);\n let u8 = new Uint8Array(ab);\n n = this.u8[o1];\n let j = 0;\n while (j < n) u8[j++] = this.u8[++o1];\n n = this.u8[o2];\n let k = 0;\n while (k < n) k++, u8[j++] = this.u8[++o2];\n return u82s(this.coder, u8, 0, j);\n }\n}\n\nclass ValueTableBuilder\n{\n coder: Coder;\n values: string[];\n fragments: FragmentTable;\n pairs: { [value: string]: FragmentPair };\n ab: ArrayBuffer;\n u8: Uint8Array;\n u32: Uint32Array;\n\n constructor(coder: Coder) { this.coder = coder }\n\n // Building\n static fromStrings(coder: Coder, values: string[]): ValueTableBuilder\n {\n let nc = 0;\n values.forEach(s => nc += s.length);\n //console.log(`bintrie: ValueTable: ${values.length} initial values, ${nc} initial char count`);\n values = unique(values);\n //console.log(`bintrie: ValueTable: ${values.length} unique values`);\n let vtb = new ValueTableBuilder(coder);\n vtb.values = values;\n vtb.fragments = {};\n vtb.pairs = {};\n values.forEach(s => vtb.extractFragments(s));\n values.forEach(s => vtb.pickFragments(s));\n //console.log(`bintrie: ValueTable: ${Object.keys(vtb.fragments).length} initial fragments`);\n Object.keys(vtb.fragments).forEach(s => { if (! vtb.fragments[s].used) delete vtb.fragments[s] });\n //console.log(`bintrie: ValueTable: ${Object.keys(vtb.fragments).length} final fragments`);\n vtb.toBinary();\n vtb.validateStrings(values);\n //console.log(`bintrie: ValueTable: ${vtb.u8.length} final byte length`);\n return vtb;\n }\n\n // Validation\n validateStrings(values: string[]): void\n {\n let vt = ValueTable.fromBuffer(this.coder, this.ab, 0, this.ab.byteLength);\n let orig = values.slice().sort();\n let here: string[] = [];\n let n = this.u32[0];\n for (let i = 0; i < n; i++)\n here.push(vt.fromOffset(i*2+1));\n here.sort();\n for (let i = 0; i < here.length; i++)\n if (orig[i] !== here[i])\n {\n console.error('ValueTable: content mismatch');\n break;\n }\n }\n\n // Building\n addFragment(s: string): void\n {\n let f = this.fragments[s];\n if (f === undefined)\n f = { count: 0, used: 0, s: s, offset: 0, u8: s2u8(this.coder, s) }, this.fragments[s] = f;\n f.count++;\n }\n\n // Building\n extractFragments(s: string): void\n {\n let n = s.length;\n if (n < 6)\n this.addFragment(s);\n else\n for (let j = 3; j < n-2; j++)\n {\n this.addFragment(s.substring(0, j));\n this.addFragment(s.substring(j));\n }\n }\n\n // Building\n pickFragments(s: string): void\n {\n let a: { f1: Fragment, f2: Fragment }[] = [];\n let n = s.length;\n if (n < 6)\n a.push({ f1: this.fragments[s], f2: NullFragment });\n else\n for (let j = 3; j < n-2; j++)\n a.push({ f1: this.fragments[s.substring(0, j)], f2: this.fragments[s.substring(j)] });\n a.sort(sortBestPair);\n let p = a[0];\n p.f1.used = 1;\n p.f2.used = 1;\n this.pairs[s] = p;\n }\n\n // Building\n toOffset(s: string): number\n {\n return this.pairs[s].offset;\n }\n\n // Building\n toBinary(): void\n {\n let byteLength = 0;\n byteLength += (this.values.length * 2 * 4) + 4;\n let keys = Object.keys(this.fragments);\n keys.forEach(s => {\n let f = this.fragments[s];\n f.offset = byteLength;\n byteLength += f.u8.byteLength + 1;\n });\n this.ab = new ArrayBuffer(byteLength);\n this.u8 = new Uint8Array(this.ab);\n this.u32 = new Uint32Array(this.ab, 0, this.values.length*2+1);\n let pOffset = 0;\n this.u32[pOffset++] = this.values.length;\n this.values.forEach(s => {\n let p = this.pairs[s];\n p.offset = pOffset;\n this.u32[pOffset++] = p.f1.offset;\n this.u32[pOffset++] = p.f2.offset;\n });\n let fOffset = (this.values.length * 2 * 4) + 4;\n keys.forEach(s => {\n let f = this.fragments[s];\n this.u8[fOffset++] = f.u8.length;\n for (let i = 0; i < f.u8.length; i++)\n this.u8[fOffset++] = f.u8[i];\n });\n }\n}\n\nexport type StringMap = { [key: string]: string };\n\n// Building\ninterface UnpackedNode\n{\n // This for leaf node\n suffix: Uint8Array;\n value: number;\n\n // This for internal node\n bytes: number[] | null;\n nodes: UnpackedNode[] | null;\n}\n\nfunction pad(n: number, pad: number): number { let mod = n % pad; return mod ? pad - mod : 0; }\nfunction pad4(n: number): number { return pad(n, 4) }\n\nexport class BinTrie\n{\n coder: Coder;\n ab: ArrayBuffer;\n vt: ValueTable;\n u8: Uint8Array;\n i32: Int32Array;\n\n constructor(coder: Coder)\n {\n this.coder = coder;\n }\n\n static fromBuffer(coder: Coder, ab: ArrayBuffer): BinTrie\n {\n let bt = new BinTrie(coder);\n bt.ab = ab;\n bt.u8 = new Uint8Array(bt.ab);\n let i32 = new Int32Array(bt.ab, 0, 1);\n let valueOffset = i32[0];\n bt.i32 = new Int32Array(bt.ab, 0, valueOffset >> 2);\n bt.vt = ValueTable.fromBuffer(coder, bt.ab, valueOffset, bt.u8.length - valueOffset);\n return bt;\n }\n\n get(key: string): string\n {\n let u8 = s2u8(this.coder, key);\n let byteOffset = 4;\n for (let i = 0; i <= u8.length; i++)\n {\n let iOffset = byteOffset >> 2;\n let n = this.i32[iOffset];\n if (i == u8.length)\n return undefined;\n let b = u8[i];\n byteOffset += 4;\n let j: number;\n for (j = 0; j < n; j++)\n if (this.u8[byteOffset+j] === b)\n {\n byteOffset += n + pad4(n); // move past byte table\n iOffset = byteOffset >> 2; // convert ioffset to that location\n iOffset += j; // index intoo node offset table\n byteOffset = this.i32[iOffset]; // and move to child node\n if (byteOffset < 0)\n return this.vt.fromOffset(-byteOffset);\n break;\n }\n if (j === n)\n return undefined;\n }\n return undefined;\n }\n\n forEach(cb: (k: string, v: string) => void)\n {\n let keybuf = new Uint8Array(MaxKeyLength);\n let keylen = 0;\n\n let processNode = (len: number, byteOffset: number) => {\n let iOffset = byteOffset >> 2;\n let n = this.i32[iOffset];\n byteOffset += 4;\n for (let j = 0; j < n; j++)\n {\n keybuf[keylen++] = this.u8[byteOffset+j];\n }\n };\n processNode(0, 4);\n }\n}\n\nexport interface BinTrieOptions\n{\n dedup?: boolean,\n verbose?: boolean,\n}\nlet DefaultOptions: BinTrieOptions = { dedup: true, verbose: false };\n\nexport class BinTrieBuilder\n{\n options: BinTrieOptions;\n coder: Coder;\n root: UnpackedNode;\n vtb: ValueTableBuilder;\n vt: ValueTable;\n ab: ArrayBuffer;\n u8: Uint8Array;\n i32: Int32Array;\n\n constructor(coder: Coder, options?: BinTrieOptions)\n {\n this.coder = coder;\n this.options = U.shallowAssignImmutable(DefaultOptions, options);\n }\n\n // Building\n nodeCount(node: UnpackedNode): number\n {\n let n = 1;\n if (node.nodes)\n node.nodes.forEach(child => n += this.nodeCount(child))\n return n;\n }\n\n // Validation\n nodeBranching(node: UnpackedNode, counts: number[]): number\n {\n let n = node.nodes ? node.nodes.length : 0;\n counts[n] = counts[n] === undefined ? 1 : counts[n]+1;\n if (node.nodes)\n node.nodes.forEach(child => n += this.nodeBranching(child, counts))\n return n;\n }\n\n // Validation\n nodeValueCount(node: UnpackedNode): number\n {\n let n = node.value ? 1 : 0;\n if (node.nodes)\n node.nodes.forEach(child => n += this.nodeValueCount(child))\n return n;\n }\n\n // Building\n nodeByteLength(node: UnpackedNode): number\n {\n let byteLength = 0; // length of child arrays\n if (node.nodes)\n {\n byteLength += 4; // length of child arrays\n byteLength += node.bytes.length + pad4(node.bytes.length);\n byteLength += node.nodes.length * 4;\n node.nodes.forEach(n => { byteLength += this.nodeByteLength(n) });\n }\n return byteLength;\n }\n\n // Building\n addString(s: string, value: number): void\n {\n let u8 = s2u8(this.coder, s);\n if (this.root == null)\n this.root = { suffix: u8, value: value, bytes: null, nodes: null };\n else\n {\n let node = this.root;\n let n = u8.length;\n let j = 0;\n while (j < n)\n {\n // If at leaf node, need to split it\n if (node.bytes == null)\n {\n node.bytes = [ node.suffix[0] ];\n node.nodes = [ { suffix: node.suffix.subarray(1), value: node.value, bytes: null, nodes: null } ];\n node.suffix = null;\n node.value = 0;\n }\n\n let k: number;\n for (k = 0; k < node.bytes.length; k++)\n if (node.bytes[k] == u8[j])\n break;\n \n if (k < node.bytes.length)\n {\n node = node.nodes[k];\n j++;\n }\n else\n {\n node.bytes.push(u8[j++]);\n let nNew: UnpackedNode = { suffix: u8.subarray(j), value: value, bytes: null, nodes: null };\n node.nodes.push(nNew);\n node = nNew;\n }\n }\n }\n }\n\n // Building\n dedup(node: UnpackedNode): void\n {\n // If all subnodes point to the same value, we can just turn this node into a value node\n if (node.nodes)\n {\n node.nodes.forEach(n => this.dedup(n));\n let value = node.nodes[0].value;\n if (value)\n {\n node.nodes.forEach(n => { if (n.value != value) value = 0 });\n if (value)\n {\n node.value = value;\n delete node.nodes;\n delete node.bytes;\n }\n }\n }\n }\n\n // Validation\n getUnpacked(key: string): string\n {\n function getFromNode(vt: ValueTable, node: UnpackedNode, u8: Uint8Array, offset: number): string\n {\n if (node.value)\n return vt.fromOffset(node.value);\n else\n {\n if (offset >= u8.length)\n {\n console.error('bintrie: failure during lookup in unpacked format');\n return 'undefined';\n }\n let j = node.bytes.findIndex(e => e === u8[offset]);\n if (j === undefined)\n {\n console.error('bintrie: failure during lookup in unpacked format');\n return 'undefined';\n }\n return getFromNode(vt, node.nodes[j], u8, offset+1);\n }\n }\n\n return getFromNode(this.vt, this.root, s2u8(this.coder, key), 0);\n }\n\n // Building\n packNode(node: UnpackedNode, byteOffset: number): number\n {\n if (node.nodes)\n {\n let i;\n let iOffset = byteOffset >> 2;\n this.i32[iOffset] = node.nodes.length;\n byteOffset += 4;\n for (i = 0; i < node.bytes.length; i++)\n this.u8[byteOffset++] = node.bytes[i];\n byteOffset += pad4(byteOffset);\n iOffset = byteOffset >> 2;\n byteOffset += node.nodes.length * 4;\n for (i = 0; i < node.nodes.length; i++)\n {\n let n = node.nodes[i];\n if (n.value)\n this.i32[iOffset++] = - n.value;\n else\n {\n this.i32[iOffset++] = byteOffset;\n byteOffset = this.packNode(n, byteOffset);\n }\n }\n }\n return byteOffset;\n }\n\n // Building\n toBinary(): void\n {\n let byteLength = 4 + this.nodeByteLength(this.root);\n let valueOffset = byteLength;\n byteLength += this.vtb.u8.length;\n this.ab = new ArrayBuffer(byteLength);\n this.u8 = new Uint8Array(this.ab);\n this.i32 = new Int32Array(this.ab, 0, valueOffset >> 2);\n this.i32[0] = valueOffset;\n let byteOffset = this.packNode(this.root, 4);\n if (byteOffset != valueOffset)\n throw 'unexpected result from packNode';\n\n // Now copy in ValueTable\n let u8 = this.vtb.u8;\n let n = u8.length;\n for (let j = 0, k = valueOffset; j < n; j++, k++)\n this.u8[k] = u8[j];\n }\n\n // Building\n static fromMap(coder: Coder, o: StringMap, options?: BinTrieOptions): BinTrie\n {\n let btb = new BinTrieBuilder(coder, options);\n btb.vtb = ValueTableBuilder.fromStrings(coder, Object.values(o));\n btb.vt = ValueTable.fromBuffer(coder, btb.vtb.ab, 0, btb.vtb.ab.byteLength);\n let keys = Object.keys(o);\n keys.forEach(s => btb.addString(s, btb.vtb.toOffset(o[s])));\n\n //console.log(`bintrie: initial node count: ${btb.nodeCount(btb.root)}`);\n\n // validate\n let good = true;\n keys.forEach(k => {\n if (good && btb.getUnpacked(k) !== o[k])\n {\n //console.error('bintrie: missing key in unpacked, un-deduped tree');\n good = false;\n }\n });\n\n // dedup (collapse branches pointing to same value)\n if (btb.options.dedup)\n btb.dedup(btb.root);\n\n // validate\n keys.forEach(k => {\n if (good && btb.getUnpacked(k) !== o[k])\n {\n //console.error('bintrie: missing key in unpacked, deduped tree');\n good = false;\n }\n });\n\n //console.log(`bintrie: final node count after dedup: ${btb.nodeCount(btb.root)}`);\n //console.log(`bintrie: value nodes after dedup: ${btb.nodeValueCount(btb.root)}`);\n let counts: number[] = [];\n //console.log(`bintrie: singleton nodes after dedup: ${btb.nodeBranching(btb.root, counts)}`);\n counts.forEach((count: number, i: number) => {\n //if (count !== undefined)\n //console.log(`bintrie: branch factor: ${i}, count: ${count}`);\n });\n\n btb.toBinary();\n\n let bt = BinTrie.fromBuffer(coder, btb.ab);\n\n // validate\n keys.forEach((k: string, i: number) => {\n if (good && bt.get(k) !== o[k])\n {\n console.error(`bintrie: missing key (${i}th) in packed structure`);\n good = false;\n }\n });\n\n if (btb.options.verbose)\n console.log(`bintrie: total size: ${btb.u8.length}, value table size: ${btb.vtb.u8.length}`);\n\n return bt;\n }\n}\n","const BitLookup = [ 1, 2, 4, 8, 16, 32, 64, 128 ];\n\nexport interface Converter\n{\n atob?: (s: string) => string;\n btoa?: (s: string) => string;\n}\n\n// In NodeJS:\n\n// {\n// btoa: (s: string) => { return Buffer.from(s, 'binary').toString('base64') },\n// atob: (s: string) => { return Buffer.from(s, 'base64').toString('binary') },\n// }\n\n// In Browser:\n\n// {\n// btoa: window.btoa,\n// atob: window.atob,\n// }\n\nexport class ListToBitset\n{\n list: string[];\n index: { [s: string]: number };\n size: number;\n converter: Converter;\n\n constructor(list: string[], converter?: Converter)\n {\n this.list = list;\n this.converter = converter;\n }\n\n toBits(l: string[]): Uint8Array\n {\n if (! this.index)\n {\n this.size = Math.floor((this.list.length+7)/8);\n this.index = {};\n this.list.forEach((s: string, i: number) => { this.index[s] = i });\n }\n let ab = new ArrayBuffer(this.size);\n let u8 = new Uint8Array(ab);\n if (l) l.forEach(s => {\n let n = this.index[s];\n let i = Math.floor(n/8);\n u8[i] |= BitLookup[n % 8];\n });\n return u8;\n }\n\n toList(u8: Uint8Array): string[]\n {\n let list: string[] = [];\n for (let i = 0; i < u8.length; i++)\n {\n let u = u8[i];\n if (u)\n {\n if (u & 1) list.push(this.list[i*8+0]);\n if (u & 2) list.push(this.list[i*8+1]);\n if (u & 4) list.push(this.list[i*8+2]);\n if (u & 8) list.push(this.list[i*8+3]);\n if (u & 16) list.push(this.list[i*8+4]);\n if (u & 32) list.push(this.list[i*8+5]);\n if (u & 64) list.push(this.list[i*8+6]);\n if (u & 128) list.push(this.list[i*8+7]);\n }\n }\n return list;\n }\n\n base64tou8(base64: string): Uint8Array\n {\n let raw = this.converter.atob(base64);\n let rawLength = raw.length;\n let u8 = new Uint8Array(new ArrayBuffer(rawLength));\n for (let i = 0; i < rawLength; i++)\n u8[i] = raw.charCodeAt(i);\n return u8;\n }\n\n u8ToBase64(u8: Uint8Array): string\n {\n let binary: string[] = [];\n let len = u8.byteLength;\n for (let i = 0; i < len; i++) {\n binary.push(String.fromCharCode(u8[i]));\n }\n return this.converter.btoa(binary.join(''));\n}\n\n fromBitString(base64: string): string[]\n {\n return this.toList(this.base64tou8(base64));\n }\n\n toBitString(l: string[]): string\n {\n // Note: On server, Buffer.from(this.toBits(l)).toString('base64') probably faster\n return this.u8ToBase64(this.toBits(l));\n }\n}\n","export class CountedHash\n{\n n: number;\n val: { [id: string]: true|null }; // true === isset, null === indeterminant\n\n constructor()\n {\n this.n = 0;\n this.val = {};\n }\n\n get length(): number { return this.n; }\n\n indeterminate(id: string): boolean\n {\n return id != '' && this.val[id] === null;\n }\n\n test(id: string): boolean\n {\n return id != '' && this.val[id] !== undefined;\n }\n\n set(id: string, val: true|null = true): void\n {\n if (id != '')\n {\n if (! this.test(id))\n this.n++;\n this.val[id] = val;\n }\n }\n\n clear(id: string): void\n {\n if (this.test(id))\n {\n this.n--;\n delete this.val[id];\n }\n }\n\n apply(vals: { [id: string]: boolean|null }): void\n {\n this.empty();\n\n if (vals)\n Object.keys(vals).forEach((id) => {\n if (vals[id] !== false)\n this.set(id, vals[id] === true ? true : null);\n });\n }\n\n empty(): void\n {\n this.n = 0;\n this.val = {};\n }\n\n asArray(): string[]\n {\n let a: string[] = [];\n\n this.forEach(id => { a.push(id) });\n\n return a;\n }\n\n // This really only useful when length === 0|1\n asString(): string\n {\n for (var id in this.val) if (this.val.hasOwnProperty(id))\n return id;\n\n return '';\n }\n\n forEach(f: (id: string) => void): void\n {\n for (var id in this.val) if (this.val.hasOwnProperty(id))\n f(id);\n }\n}\n","interface RGB\n{\n r: number,\n g: number,\n b: number,\n}\n\nexport interface Stop\n{\n color: string,\n stop: number,\n rgb?: RGB;\n}\n\nexport type GradientStops = Stop[];\n\nfunction parseStops(stops: GradientStops): void\n{\n if (stops[0].rgb) return;\n\n stops.forEach((s) => {\n if (s.rgb === undefined)\n {\n let r = parseInt(s.color.substr(1, 2), 16);\n let g = parseInt(s.color.substr(3, 2), 16);\n let b = parseInt(s.color.substr(5, 2), 16);\n s.rgb = { r: r, g: g, b: b };\n }\n });\n stops.sort();\n}\n\nfunction asHex(v: number): string\n{\n return v.toString(16).padStart(2, '0');\n}\n\nfunction toHexColor(r: number, g: number, b: number): string\n{\n return `#${asHex(r)}${asHex(g)}${asHex(b)}`;\n}\n\nexport function execGradient(stops: GradientStops, value: number): string\n{\n parseStops(stops);\n let r = stops[stops.length-1].rgb.r;\n let g = stops[stops.length-1].rgb.g;\n let b = stops[stops.length-1].rgb.b;\n for (let i = 1; i < stops.length; i++)\n {\n let e = stops[i];\n if (value < e.stop)\n {\n let s = stops[i-1];\n r = s.rgb.r + Math.floor(((e.rgb.r - s.rgb.r) * (value - s.stop) / (e.stop - s.stop)));\n g = s.rgb.g + Math.floor(((e.rgb.g - s.rgb.g) * (value - s.stop) / (e.stop - s.stop)));\n b = s.rgb.b + Math.floor(((e.rgb.b - s.rgb.b) * (value - s.stop) / (e.stop - s.stop)));\n break;\n }\n }\n return toHexColor(r, g, b);\n}\n\nexport function parseGradient(sStops: string): GradientStops\n{\n let stops: GradientStops = [];\n let re = / ?([^ ]+) ([^ ,]+%?),?(.*)/;\n\n if (sStops == null || sStops == '' ) return stops;\n\n // Strip off leading CSS form if present\n if (sStops.indexOf('linear-gradient') == 0)\n {\n let rePre = /^[^,]*, (.*)\\)$/;\n let a = rePre.exec(sStops);\n if (a)\n sStops = a[1];\n }\n\n while (sStops && sStops != '')\n {\n let a = re.exec(sStops);\n if (a == null)\n break;\n let stop = a[2];\n sStops = a[3];\n if (a[2].indexOf('%') >= 0)\n {\n stop = stop.substr(0, stop.length-1);\n stop = String(Number(stop) * 0.01);\n }\n \n stops.push({ color: a[1], stop: Number(stop) });\n }\n return stops;\n}\n\nexport function asCSSGradient(stops: GradientStops): string\n{\n parseStops(stops);\n\n let a: string[] = [];\n stops.forEach((s) => {\n let stop = s.stop >= 0.0 && s.stop <= 1.0 ? `${Math.round(s.stop*100)}%` : String(s.stop);\n a.push(`${toHexColor(s.rgb.r, s.rgb.g, s.rgb.b)} ${stop}`);\n });\n return `linear-gradient(to right, ${a.join(', ')})`;\n}\n","export class IndexedArray\n{\n o: any;\n a: any[];\n\n constructor()\n {\n this.o = {};\n this.a = null;\n }\n\n ensure(): void\n {\n if (this.a === null)\n {\n this.a = [];\n for (let p in this.o) if (this.o.hasOwnProperty(p))\n this.a.push(p);\n this.a.sort((a: string, b: string) => { a = a.toUpperCase(); b = b.toUpperCase(); return a < b ? -1 : (a > b ? 1 : 0); });\n }\n }\n\n asArray(): any[]\n {\n this.ensure();\n return this.a;\n }\n\n get length(): number { this.ensure(); return this.a.length; }\n\n test(s: string): boolean\n {\n return !!s && this.o[s] !== undefined;\n }\n\n set(s: string): void\n {\n if (!!s && !this.test(s))\n {\n this.o[s] = true;\n this.a = null;\n }\n }\n\n setAll(a: string[]): void\n {\n if (a && a.length)\n for (let i: number = 0; i < a.length; i++)\n this.set(a[i]);\n }\n\n clear(s: string): void\n {\n if (this.test(s))\n {\n delete this.o[s];\n this.a = null;\n }\n }\n\n at(i: number): string\n {\n this.ensure();\n if (i < 0 || i >= this.a.length)\n return undefined;\n return this.a[i];\n }\n\n empty(): void\n {\n this.o = {};\n this.a = null;\n }\n\n forEach(f: (s: string) => void): void\n {\n for (var s in this.o) if (this.o.hasOwnProperty(s))\n f(s);\n }\n}\n","export type DateString = string;\nexport function Now(): DateString { return (new Date()).toJSON(); }\n\n// polyfill\nlet hrtime: any = global && global.process && global.process.hrtime ? global.process.hrtime : null;\n\nexport class Elapsed\n{\n tStart: any;\n tDur: any;\n\n constructor(bStart: boolean = true)\n {\n this.tStart = undefined;\n this.tDur = undefined;\n if (bStart) this.start();\n }\n\n start(): void\n {\n if (hrtime)\n this.tStart = hrtime();\n else\n this.tStart = performance.now();\n if (this.tDur) this.tDur = undefined;\n }\n\n restart(): void\n {\n if (this.tStart === undefined) this.start();\n delete this.tDur;\n }\n\n end(): void\n {\n if (this.tStart === undefined) this.start();\n if (hrtime)\n this.tDur = hrtime(this.tStart);\n else\n this.tDur = performance.now() - this.tStart;\n }\n\n ms(): number\n {\n if (this.tDur === undefined) this.end();\n if (hrtime)\n return Math.round((this.tDur[0]*1000) + (this.tDur[1]/1000000));\n else\n return this.tDur;\n }\n\n mscur(): number\n {\n let ms = this.ms();\n this.restart();\n return ms;\n }\n\n nano(): number\n {\n if (this.tDur === undefined) this.end();\n if (hrtime)\n return (this.tDur[0]*1000000000) + this.tDur[1];\n else\n return this.tDur * 1000000;\n }\n\n nanocur(): number\n {\n let nano = this.nano();\n this.restart();\n return nano;\n }\n}\n\nexport class MultiTimer\n{\n _overall: Elapsed;\n _segment: Elapsed;\n _msAggregate: number;\n\n constructor(bStart: boolean = true)\n {\n this._overall = new Elapsed(bStart);\n this._segment = new Elapsed(bStart);\n this._msAggregate = 0;\n }\n\n start(): void\n {\n this._overall.start();\n this._segment = new Elapsed();\n this._msAggregate = 0;\n }\n\n end(): number\n {\n this._overall.end();\n this.segend();\n return this._overall.ms();\n }\n\n segstart(): void\n {\n this._segment = new Elapsed();\n }\n\n segend(): number\n {\n let ms = 0;\n if (this._segment)\n {\n ms = this._segment.ms();\n this._msAggregate += ms;\n this._segment = null;\n }\n return ms;\n }\n\n get overall(): number { return this._overall.ms() }\n get aggregate(): number { return this._msAggregate }\n}\n\nexport class Deadline\n{\n msDelta: number;\n elapsed: Elapsed;\n\n constructor(msDelta: number)\n {\n this.msDelta = msDelta;\n this.elapsed = new Elapsed();\n }\n\n start(): void\n {\n this.elapsed.start();\n }\n\n done(): boolean\n {\n this.elapsed.end();\n return this.elapsed.ms() > this.msDelta;\n }\n}\n\nexport function createGuid(): string\n{\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random()*16|0, v = c === 'x' ? r : (r&0x3|0x8);\n return v.toString(16);\n });\n}\n\nconst reGuid = /.*-.*-.*-.*-/;\n\nexport function isGuid(s: string): boolean\n{\n return reGuid.test(s) && s.length >= 36\n}\n\nexport function createKeyedGuid(key: string): string\n{\n return `xxxxxxxx-xxxx-${key}xxx-yxxx-xxxxxxxxxxxx`.replace(/[xy]/g, function(c) {\n var r = Math.random()*16|0, v = c === 'x' ? r : (r&0x3|0x8);\n return v.toString(16);\n });\n}\n\nexport function guidKey(guid: string): string\n{\n return guid.substr(14, 1); // See above\n}\n\ntype LoopTest = WeakMap<any,boolean>;\n\nfunction _sizeof(a: any, loops: LoopTest): number\n{\n if (a === null || a === undefined) return 0;\n\n switch (typeof a)\n {\n default: return 0;\n case 'number': return 8;\n case 'boolean': return 4;\n case 'string': return a.length * 2;\n\n case 'object':\n {\n if (loops.has(a))\n return 0;\n else\n loops.set(a, true);\n\n let t: number = 0;\n if (Array.isArray(a))\n {\n for (let i: number = 0; i < a.length; i++)\n t += _sizeof(a[i], loops);\n t += 8; // length\n }\n else if (Buffer && Buffer.isBuffer(a))\n {\n t = a.length;\n }\n else if (a.hasOwnProperty === undefined)\n return t;\n else\n {\n for (var key in a) if (a.hasOwnProperty && a.hasOwnProperty(key))\n {\n t += _sizeof(key, loops); // this is a good estimate of download size, but poor estimate of internal size\n // because of JS object templating vs. naive hashtables\n t += _sizeof(a[key], loops);\n }\n }\n return t;\n }\n }\n}\n\nexport function sizeof(a: any): number\n{\n let loops: LoopTest = new WeakMap();\n let n: number = _sizeof(a, loops);\n return n;\n}\n\nexport function depthof(a: any): number\n{\n if (a === null || a === undefined) return 1;\n\n switch (typeof a)\n {\n default: return 1;\n case 'number': return 1;\n case 'boolean': return 1;\n case 'string': return 1;\n\n case 'object':\n {\n let d: number = 0;\n if (Array.isArray(a))\n return a.length > 0 ? (1 + depthof(a[0])) : 2; // still return 2 for empty array\n else if (Buffer && Buffer.isBuffer(a))\n return 2;\n else if (a.hasOwnProperty === undefined)\n return 1;\n else\n {\n for (var key in a) if (a.hasOwnProperty(key))\n return 1 + depthof(a[key]);\n return 2; // or 2 for empty object\n }\n }\n }\n}\nexport function isEmpty(o: any): boolean\n{\n if (o === null || o === undefined) return true;\n for (var p in o) if (o.hasOwnProperty(p)) return false;\n return true;\n}\n\nexport function countKeys(o: any): number\n{\n if (o === undefined || typeof o !== 'object') return -1;\n\n let count: number = 0;\n for (let p in o) if (o.hasOwnProperty(p))\n count++;\n return count;\n}\n\nexport function nthProperty(o: any, n: number = 0): any\n{\n for (let p in o) if (o.hasOwnProperty(p))\n {\n if (n <= 0) return o[p];\n n--;\n }\n return undefined;\n}\n\nexport function nthKey(o: any, n: number = 0): any\n{\n for (let p in o) if (o.hasOwnProperty(p))\n {\n if (n <= 0) return p;\n n--;\n }\n return undefined;\n}\n\nexport function partialEqual(o: any, subset: any): boolean\n{\n for (let p in subset) if (subset.hasOwnProperty(p))\n if (o[p] !== subset[p])\n return false;\n return true;\n}\n\nexport interface EqOptions\n{\n omitKey?: { [key: string]: boolean },\n unorderedArrays?: boolean,\n emptyStringIsNull?: boolean,\n epsilon?: number,\n}\n\nfunction exactEqual(o1: any, o2: any, options?: EqOptions): boolean\n{\n if (o1 === o2) return true;\n if (options && options.epsilon && typeof o1 === 'number' && typeof o2 === 'number' && Math.abs(o1-o2) < options.epsilon) return true;\n if (options && options.emptyStringIsNull)\n if ((o1 == null && o2 == '') || (o2 == null && o1 == ''))\n return true;\n return false;\n}\n\nexport function deepEqual(o1: any, o2: any, options?: EqOptions): boolean\n{\n // fast exit\n if (exactEqual(o1, o2, options)) return true;\n\n // must be same types\n if (typeof o1 !== typeof o2) return false;\n\n // Already tested for exact primitive equality so if not objects, not equal\n if (typeof o1 !== 'object' || o1 == null) return false;\n if (typeof o2 !== 'object' || o2 == null) return false;\n\n // Special case Set\n if (o1 instanceof Set && o2 instanceof Set)\n {\n if (o1.size !== o2.size) return false;\n let eq = true;\n o1.forEach((k: any) => { if (! o2.has(k)) eq = false });\n return eq;\n }\n\n // Special case Map\n if (o1 instanceof Map && o2 instanceof Map)\n {\n if (o1.size !== o2.size) return false;\n let eq = true;\n o1.forEach((v1: any, k1: any) => {\n if (eq)\n {\n if (! o2.has(k1))\n eq = false;\n else\n {\n let v2 = o2.get(k1);\n eq = deepEqual(v1, v2, options);\n }\n }\n });\n return eq;\n }\n\n // Special case array\n if (Array.isArray(o1))\n {\n if (! Array.isArray(o2)) return false;\n if (o1.length != o2.length) return false;\n if (options && options.unorderedArrays)\n {\n o1 = o1.sort();\n o2 = o2.sort();\n }\n for (let i: number = 0; i < o1.length; i++)\n if (! deepEqual(o1[i], o2[i], options))\n return false;\n return true;\n }\n\n // Special case object\n if (o1.hasOwnProperty === undefined || o2.hasOwnProperty === undefined)\n return exactEqual(o1, o2, options);\n\n for (let p in o1) if (o1.hasOwnProperty(p))\n {\n if (options && options.omitKey && options.omitKey[p])\n continue;\n if (o2[p] === undefined && o1[p] !== undefined)\n return false;\n if (! deepEqual(o1[p], o2[p], options))\n return false;\n }\n // If any properties in o2 aren't in o1, not equal\n for (let p in o2) if (o2.hasOwnProperty(p))\n {\n if (options && options.omitKey && options.omitKey[p])\n continue;\n if (o1[p] === undefined && o2[p] !== undefined)\n return false;\n }\n\n return true;\n}\n\nconst Months = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ];\n\nexport function prettyDate(d: Date): string\n{\n if (d == null) return 'unknown';\n\n let mmm = Months[d.getMonth()];\n let dd = d.getDate();\n let yyyy = d.getFullYear();\n let hh = d.getHours();\n let m = d.getMinutes();\n let mm = m < 10 ? `0${m}` : String(m);\n let ampm = hh >= 12 ? 'PM' : 'AM';\n if (hh > 12) hh -= 12;\n\n return `${mmm} ${dd}, ${yyyy} at ${hh}:${mm} ${ampm}`;\n}\n\nexport function relativeDate(d: Date): string\n{\n if (d == null) return 'unknown';\n let now = new Date();\n let yyyyNow = now.getFullYear();\n let mmmNow = Months[now.getMonth()];\n let ddNow = now.getDate();\n\n let mmm = Months[d.getMonth()];\n let dd = d.getDate();\n let yyyy = d.getFullYear();\n let hh = d.getHours();\n let m = d.getMinutes();\n let mm = m < 10 ? `0${m}` : String(m);\n let ampm = hh >= 12 ? 'PM' : 'AM';\n if (hh > 12) hh -= 12;\n\n if (yyyyNow === yyyy && mmmNow === mmm && ddNow === dd)\n return `Today at ${hh}:${mm} ${ampm}`;\n else if (yyyyNow === yyyy)\n return `${mmm} ${dd}`;\n else\n return `${mmm} ${dd}, ${yyyy}`;\n}\n\nconst OneMinute = 1000 * 60;\nconst OneHour = OneMinute * 60;\nconst OneDay = OneHour * 24;\n\nexport function recentDate(d: Date): string\n{\n if (d == null) return 'u';\n let now = new Date();\n let msNow = now.getTime();\n let msThen = d.getTime();\n let msDelta = msNow - msThen;\n\n // Within the hour, display in minutes\n if (msDelta < OneHour)\n return `${Math.round(msDelta/OneMinute)+1}m`;\n\n // Within the day, display in hours\n else if (msDelta < OneDay)\n return `${Math.round(msDelta/OneHour)+1}h`;\n\n // Otherwise, display using relativeDate\n else\n return relativeDate(d);\n}\n\nexport function textToHtml(sText: string): string\n{\n let lines: string[] = sText.split('\\n');\n let aHtml: string[] = [];\n let inTable: boolean = false;\n aHtml.push('<body>');\n for (let i: number = 0; i < lines.length; i++)\n {\n let line = lines[i];\n let isRow: boolean = line.indexOf('|') === 0;\n if (inTable && !isRow)\n {\n aHtml.push('</tbody></table>');\n inTable = false;\n }\n if (isRow && !inTable)\n {\n inTable = true;\n aHtml.push('<table border=\"1\" cellspacing=\"0\" cellpadding=\"2\"><tbody>');\n }\n if (isRow)\n {\n let cells = line.split('|');\n if (cells.length > 2)\n {\n aHtml.push('<tr>');\n for (let j: number = 1; j < cells.length-1; j++)\n aHtml.push(`<td>${cells[j]}</td>`);\n aHtml.push('</tr>');\n }\n }\n else\n aHtml.push(`<div>${line} </div>`);\n }\n if (inTable)\n aHtml.push('</tbody></table>');\n aHtml.push('</body>');\n return aHtml.join('');\n}\n\nexport function shallowCopy(src: any): any\n{\n if (src === null || src === undefined) return src;\n\n switch (typeof src)\n {\n case 'boolean':\n case 'number':\n case 'string':\n case 'symbol':\n case 'function':\n default:\n return src;\n\n case 'object':\n if (Array.isArray(src))\n return src.slice();\n else\n {\n let copy: any = {};\n\n for (var p in src) if (src.hasOwnProperty(p))\n copy[p] = src[p];\n return copy;\n }\n }\n}\n\nexport function shallowAssign(o1: any, o2: any): any\n{\n if (o1 === null || o1 === undefined) o1 = {};\n if (o2 === null || o2 === undefined) return o1;\n if (typeof o2 !== 'object' || typeof o1 !== 'object') return o1;\n\n for (var p in o2) if (o2.hasOwnProperty(p))\n o1[p] = o2[p];\n return o1;\n}\n\nexport function shallowDelete(o1: any, o2: any): any\n{\n if (o1 == null || o2 == null) return o1;\n if (typeof o2 !== 'object' || typeof o1 !== 'object') return o1;\n\n for (var p in o2) if (o2.hasOwnProperty(p))\n delete o1[p];\n return o1;\n}\n\nexport function shallowAssignImmutable(o1: any, o2: any): any\n{\n if (o1 === null || o1 === undefined) o1 = {};\n if (o2 === null || o2 === undefined) return o1;\n if (typeof o2 !== 'object' || typeof o1 !== 'object') return o1;\n\n // First determine whether o2 changes any properties, if it has, make new instance\n let oNew: any = o1;\n for (let p in o2) if (o2.hasOwnProperty(p))\n {\n if (o1[p] != o2[p])\n {\n oNew = shallowCopy(o1);\n break;\n }\n }\n if (oNew !== o1)\n shallowAssign(oNew, o2);\n return oNew;\n}\n\nexport function shallowEqual(o1: any, o2: any): boolean\n{\n if (o1 === undefined || o2 === undefined || typeof o1 !== 'object' || typeof o2 !== 'object')\n return o1 === o2;\n\n if (Array.isArray(o1) && Array.isArray(o2))\n {\n if (o1.length != o2.length) return false;\n for (let i: number = 0; i < o1.length; i++)\n if (o1[i] !== o2[i]) return false;\n return true;\n }\n else\n {\n let p: any;\n\n for (p in o1) if (o1.hasOwnProperty(p))\n if (o1[p] !== o2[p]) return false;\n for (p in o2) if (o2.hasOwnProperty(p))\n if (o1[p] === undefined) return false;\n return true;\n }\n}\n\nexport function deepCopy(src: any): any\n{\n // Beware typeof oddities\n if (src === null || src === undefined) return src;\n\n if (typeof src === 'object')\n {\n if (src instanceof Set)\n {\n let dst = new Set<any>();\n src.forEach((i: any) => { dst.add(deepCopy(i)) });\n return dst;\n }\n else if (src instanceof Map)\n {\n let dst = new Map<any, any>();\n src.forEach((v: any, k: any) => { dst.set(deepCopy(k), deepCopy(v)) });\n return dst;\n }\n else if (Array.isArray(src))\n {\n let dst: any[] = [];\n\n for (let i: number = 0; i < src.length; i++)\n dst.push(deepCopy(src[i]));\n return dst;\n }\n else\n {\n if (src.hasOwnProperty === undefined)\n return src;\n\n let dst: any = {};\n for (var p in src) if (src.hasOwnProperty(p))\n dst[p] = deepCopy(src[p]);\n return dst;\n }\n }\n else\n return src;\n}\n\nexport function deepAccum(accum: any, o: any): any\n{\n if (accum == null) accum = {};\n if (o == null) return accum;\n for (let p in o) if (o.hasOwnProperty(p))\n {\n let vs: any = o[p];\n let vd: any = accum[p];\n let ts = typeof vs;\n if (ts === 'number')\n {\n if (vd !== undefined && typeof vd !== 'number')\n throw 'deepAccum: unexpected type mismatch';\n if (p === 'min')\n accum[p] = vd === undefined ? vs : Math.min(vd, vs);\n else if (p === 'max')\n accum[p] = vd === undefined ? vs : Math.max(vd, vs);\n else\n accum[p] = (vd === undefined ? 0 : vd) + vs;\n }\n else if (vs == null || ts === 'string' || ts === 'boolean')\n accum[p] = vs;\n else if (ts === 'object')\n {\n if (vd === undefined)\n {\n vd = {};\n accum[p] = vd;\n }\n else if (typeof vd !== 'object')\n throw 'deepAccum: unexpected type mismatch';\n deepAccum(vd, vs);\n }\n }\n return accum;\n}\n\nexport function precisionRound(n: number, p: number): number\n{\n let f: number = Math.pow(10, p);\n return Math.round(n * f) / f;\n}\n\nexport function percentString(num: number, den: number, precision: number = 0): string\n{\n if (den == 0)\n return '(-)';\n\n let p: number = precisionRound((num/den) * 100, precision);\n\n return String(p) + '%';\n}\n\nexport function hash(s: string): number\n{\n let hash: number = 5381;\n let i: number = s.length;\n\n while (i)\n hash = (hash * 33) ^ s.charCodeAt(--i);\n\n /* JavaScript does bitwise operations (like XOR, above) on 32-bit signed\n * integers. Since we want the results to be always positive, convert the\n * signed int to an unsigned by doing an unsigned bitshift. */\n return hash >>> 0;\n}\n\nexport function hashObject(o: any): number\n{\n return hash(o ? JSON.stringify(o) : '');\n}\n\nconst HexTable: string[] = [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' ];\nexport function toHex(n: number): string\n{\n if (n < 0 || n > 255) throw('only 0 to 255 supported now');\n n = Math.floor(n);\n return HexTable[n >> 4] + HexTable[n & 15];\n}\n\nexport function toRGBA(color: string, alpha: number): string\n{\n // Allow passing rgba in rather than only '#ffffff' form\n if (color.indexOf('rgba') === 0)\n return color;\n\n let r: number;\n let g: number;\n let b: number;\n\n switch (color)\n {\n case 'white':\n r = 255; g = 255; b = 255;\n break;\n\n case 'black':\n r = 0; g = 0; b = 0;\n break;\n\n default:\n r = parseInt(color.substr(1, 2), 16);\n g = parseInt(color.substr(3, 2), 16);\n b = parseInt(color.substr(5, 2), 16);\n break;\n }\n\n return `rgba(${String(r)}, ${String(g)}, ${String(b)}, ${String(alpha)})`;\n}\n\nexport function toRGBAIntensity(color: string, intensity: number, alpha: number): string\n{\n // for now assume color is black\n let g: number = precisionRound(255 * intensity, 0);\n return `rgba(${String(g)}, ${String(g)}, ${String(g)}, ${String(alpha)})`;\n}\n\n// Geo functions\nexport function distance(x0: number, y0: number, x1: number, y1: number): number\n{\n return Math.hypot(x0 - x1, y0 - y1);\n}\n\nexport function deg2rad(num: number): number { return num * Math.PI / 180; }\nexport function rad2deg(num: number): number { return num / Math.PI * 180; }\n\n// Restricts lon to range [-180..180]\nexport function wrapLon(lon: number): number\n{\n let worlds = Math.floor((lon + 180) / 360);\n return lon - (worlds * 360);\n}\n\nlet reNumber = /^\\s*-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?\\s*$/;\nexport function isNumber(s: string): boolean { return !!s && reNumber.test(s) }\nexport function toNumber(a: any): number\n{\n if (typeof a === 'number') return a;\n if (typeof a === 'string' && !isNumber(a as string)) return NaN;\n return Number(a);\n}\nexport function toSafeNumber(a: any): number\n{\n let n = toNumber(a);\n return (isNaN(n) || typeof n !== 'number') ? 0 : n;\n}\n","module.exports = require(\"@dra2020/topojson-client\");","module.exports = require(\"@dra2020/topojson-server\");","module.exports = require(\"@dra2020/topojson-simplify\");","module.exports = require(\"diff-match-patch\");","module.exports = require(\"polygon-clipping\");","module.exports = require(\"splaytree\");","module.exports = require(\"tinyqueue\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./lib/all/all.ts\");\n",""],"names":[],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"baseclient.js","mappings":"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EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,CAAC;IACt+C,MAAM,EAAE,CAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,CAAC;IACr+C,SAAS,EAAE,CAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,CAAC;IACx+C,KAAK,EAAE,CAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,CAAC;IACp+C,OAAO,EAAE,CAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,CAAC;IACt+C,QAAQ,EAAE,CAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,CAAC;IACv+C,OAAO,EAAE,CAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,CAAC;IACt+C,SAAS,EAAE,CAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,CAAC;IACx+C,QAAQ,EAAE,CAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,CAAC;IAC3F,OAAO,EAAE,CAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,CAAC;IAC1F,QAAQ,EAAE,CAAC,SAAS,EAAC,SAAS,EA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","sources":["webpack://baseclient/webpack/universalModuleDefinition","webpack://baseclient/./lib/all/all.ts","webpack://baseclient/./lib/colors/colors.ts","webpack://baseclient/./lib/colors/colortable.ts","webpack://baseclient/./lib/context/all.ts","webpack://baseclient/./lib/context/context.ts","webpack://baseclient/./lib/control/all.ts","webpack://baseclient/./lib/control/control.ts","webpack://baseclient/./lib/csv/all.ts","webpack://baseclient/./lib/csv/csv.ts","webpack://baseclient/./lib/csv/csvparseline.ts","webpack://baseclient/./lib/dataflow/all.ts","webpack://baseclient/./lib/dataflow/dataflow.ts","webpack://baseclient/./lib/detail/all.ts","webpack://baseclient/./lib/detail/detail.ts","webpack://baseclient/./lib/emit/all.ts","webpack://baseclient/./lib/emit/emit.ts","webpack://baseclient/./lib/filterexpr/all.ts","webpack://baseclient/./lib/filterexpr/filterexpr.ts","webpack://baseclient/./lib/fsm/all.ts","webpack://baseclient/./lib/fsm/fsm.ts","webpack://baseclient/./lib/geo/all.ts","webpack://baseclient/./lib/geo/ensurecentroid.ts","webpack://baseclient/./lib/geo/flexname.ts","webpack://baseclient/./lib/geo/geo.ts","webpack://baseclient/./lib/geo/multiblockmapping.ts","webpack://baseclient/./lib/geo/vfeature.ts","webpack://baseclient/./lib/logabstract/all.ts","webpack://baseclient/./lib/logabstract/log.ts","webpack://baseclient/./lib/logclient/all.ts","webpack://baseclient/./lib/logclient/log.ts","webpack://baseclient/./lib/ot-editutil/all.ts","webpack://baseclient/./lib/ot-editutil/oteditutil.ts","webpack://baseclient/./lib/ot-editutil/otmaputil.ts","webpack://baseclient/./lib/ot-js/all.ts","webpack://baseclient/./lib/ot-js/otarray.ts","webpack://baseclient/./lib/ot-js/otclientengine.ts","webpack://baseclient/./lib/ot-js/otcomposite.ts","webpack://baseclient/./lib/ot-js/otcounter.ts","webpack://baseclient/./lib/ot-js/otengine.ts","webpack://baseclient/./lib/ot-js/otmap.ts","webpack://baseclient/./lib/ot-js/otserverengine.ts","webpack://baseclient/./lib/ot-js/otsession.ts","webpack://baseclient/./lib/ot-js/ottypes.ts","webpack://baseclient/./lib/poly/all.ts","webpack://baseclient/./lib/poly/blend.ts","webpack://baseclient/./lib/poly/boundbox.ts","webpack://baseclient/./lib/poly/cartesian.ts","webpack://baseclient/./lib/poly/featurecleanholes.ts","webpack://baseclient/./lib/poly/graham-scan.ts","webpack://baseclient/./lib/poly/mapto.ts","webpack://baseclient/./lib/poly/matrix.ts","webpack://baseclient/./lib/poly/minbound.ts","webpack://baseclient/./lib/poly/pointinpoly.ts","webpack://baseclient/./lib/poly/poly.ts","webpack://baseclient/./lib/poly/polybin.ts","webpack://baseclient/./lib/poly/polyhash.ts","webpack://baseclient/./lib/poly/polylabel.ts","webpack://baseclient/./lib/poly/polypack.ts","webpack://baseclient/./lib/poly/polyround.ts","webpack://baseclient/./lib/poly/polysimplify.ts","webpack://baseclient/./lib/poly/quad.ts","webpack://baseclient/./lib/poly/selfintersect.ts","webpack://baseclient/./lib/poly/shamos.ts","webpack://baseclient/./lib/poly/simplify.ts","webpack://baseclient/./lib/poly/topo.ts","webpack://baseclient/./lib/poly/union.ts","webpack://baseclient/./lib/util/all.ts","webpack://baseclient/./lib/util/bintrie.ts","webpack://baseclient/./lib/util/bitset.ts","webpack://baseclient/./lib/util/countedhash.ts","webpack://baseclient/./lib/util/gradient.ts","webpack://baseclient/./lib/util/indexedarray.ts","webpack://baseclient/./lib/util/util.ts","webpack://baseclient/external commonjs \"@dra2020/topojson-client\"","webpack://baseclient/external commonjs \"@dra2020/topojson-server\"","webpack://baseclient/external commonjs \"@dra2020/topojson-simplify\"","webpack://baseclient/external commonjs \"diff-match-patch\"","webpack://baseclient/external commonjs \"polygon-clipping\"","webpack://baseclient/external commonjs \"splaytree\"","webpack://baseclient/external commonjs \"tinyqueue\"","webpack://baseclient/webpack/bootstrap","webpack://baseclient/webpack/before-startup","webpack://baseclient/webpack/startup","webpack://baseclient/webpack/after-startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"baseclient\"] = factory();\n\telse\n\t\troot[\"baseclient\"] = factory();\n})(global, () => {\nreturn ","// Client and Server\nimport * as Util from '../util/all';\nexport { Util };\nimport * as Context from '../context/all';\nexport { Context };\nimport * as FSM from '../fsm/all';\nexport { FSM };\nimport * as Poly from '../poly/all';\nexport { Poly };\nimport * as LogAbstract from '../logabstract/all';\nexport { LogAbstract };\nimport * as LogClient from '../logclient/all';\nexport { LogClient };\nimport * as OT from '../ot-js/all';\nexport { OT };\nimport * as OTE from '../ot-editutil/all';\nexport { OTE };\nimport { FilterExpr } from '../filterexpr/all';\nexport { FilterExpr }\nimport * as G from '../geo/all';\nexport { G };\nimport * as Emit from '../emit/all';\nexport { Emit };\nimport * as CSV from '../csv/all';\nexport { CSV };\nimport * as Colors from '../colors/colors';\nexport { Colors };\nimport * as DataFlow from '../dataflow/all';\nexport { DataFlow }\nimport * as Detail from '../detail/all';\nexport { Detail }\nimport * as Control from '../control/all';\nexport { Control }\n","\n// ColorTable is now generated by make_colortable.py; formerly we used './jscolormapsdata';\n// ColorTable includes \"Big palletes\" (jet, turbo, inferno, viridis, magma, plasma, greys, bone), whose reverses are generated as needed\n// and Color Brewer palettes (Accent, Blues, BrBG, BuGn, BuPu, CMRmap, Dark2, GnBu, Greens, Greys, OrRd, Oranges, PRGn, Paired, Pastel1,\n// Pastel2, PiYG, PuBu, PuBuGn, PuOr, PuRd, Purples, RdBu, RdGy, RdPu, RdYlBu, RdYlGn, Reds, Set1, Set2, Set3, Spectral,\n// Wistia, YlGn, YlGnBu, YlOrBr, YlOrRd)\nimport { ColorTable, ColorBrewerSchemeNames } from './colortable';\nexport { ColorTable, ColorBrewerSchemeNames };\n\nexport const MaxOrderedColors: number = 50;\nexport const MaxColors: number = MaxOrderedColors * 3; // Tied to orderedColors()\nexport const MaxClassicColors: number = 55;\n\nexport const DefaultColorNames: string[] = [\n 'GhostWhite',\n 'Blue',\n 'Green',\n 'DarkMagenta',\n 'Red',\n 'Gold',\n 'Teal',\n 'Chocolate', //'DarkGray', // \n 'SlateBlue',\n 'Cyan',\n 'DeepPink',\n 'Chartreuse',\n 'CornflowerBlue',\n 'DarkSalmon',\n 'Olive',\n 'DarkOrange',\n 'Lime',\n 'DarkSlateBlue',\n 'Yellow',\n 'YellowGreen',\n 'Pink',\n 'Maroon',\n 'Sienna',\n 'Aquamarine',\n 'Indigo',\n 'PaleVioletRed',\n 'Navy', // 'Gray', // \n 'SpringGreen',\n 'Plum',\n 'DarkSeaGreen',\n 'LightCoral',\n 'Khaki',\n 'OrangeRed',\n 'RoyalBlue',\n 'LimeGreen',\n 'DarkOrchid',\n 'Orange',\n 'DodgerBlue',\n 'MediumAquamarine',\n 'Moccasin',\n 'Firebrick',\n 'LightSteelBlue',\n 'LawnGreen',\n 'Magenta',\n 'MediumVioletRed',\n 'Turquoise',\n 'Tomato',\n 'Thistle',\n 'SandyBrown',\n 'IndianRed',\n 'PowderBlue',\n 'SaddleBrown',\n 'OliveDrab',\n 'Fuchsia', // 'Gainsboro', //\n 'PeachPuff',\n 'RosyBrown',\n];\n\nexport interface ColorLookup\n{\n [key: string]: string;\n}\n\nexport const ColorValues: ColorLookup =\n{\n 'AliceBlue': '#F0F8FF',\n 'AntiqueWhite': '#FAEBD7',\n 'Aqua': '#00FFFF',\n 'Aquamarine': '#7FFFD4',\n 'Azure': '#F0FFFF',\n 'Beige': '#F5F5DC',\n 'Bisque': '#FFE4C4',\n 'Black': '#000000',\n 'BlanchedAlmond': '#FFEBCD',\n 'Blue': '#0000FF',\n 'BlueViolet': '#8A2BE2',\n 'Brown': '#A52A2A',\n 'BurlyWood': '#DEB887',\n 'CadetBlue': '#5F9EA0',\n 'Chartreuse': '#7FFF00',\n 'Chocolate': '#D2691E',\n 'Coral': '#FF7F50',\n 'CornflowerBlue': '#6495ED',\n 'Cornsilk': '#FFF8DC',\n 'Crimson': '#DC143C',\n 'Cyan': '#00FFFF',\n 'DarkBlue': '#00008B',\n 'DarkCyan': '#008B8B',\n 'DarkGoldenrod': '#B8860B',\n 'DarkGray': '#A9A9A9',\n 'DarkGreen': '#006400',\n 'DarkKhaki': '#BDB76B',\n 'DarkMagenta': '#8B008B',\n 'DarkOliveGreen': '#556B2F',\n 'DarkOrange': '#FF8C00',\n 'DarkOrchid': '#9932CC',\n 'DarkRed': '#8B0000',\n 'DarkSalmon': '#E9967A',\n 'DarkSeaGreen': '#8FBC8F',\n 'DarkSlateBlue': '#483D8B',\n 'DarkSlateGray': '#2F4F4F',\n 'DarkTurquoise': '#00CED1',\n 'DarkViolet': '#9400D3',\n 'DeepPink': '#FF1493',\n 'DeepSkyBlue': '#00BFFF',\n 'DimGray': '#696969',\n 'DodgerBlue': '#1E90FF',\n 'Firebrick': '#B22222',\n 'FloralWhite': '#FFFAF0',\n 'ForestGreen': '#228B22',\n 'Fuchsia': '#FF00FF',\n 'Gainsboro': '#DCDCDC',\n 'GhostWhite': '#F8F8FF',\n 'Gold': '#FFD700',\n 'Goldenrod': '#DAA520',\n 'Gray': '#808080',\n 'Green': '#008000',\n 'GreenYellow': '#ADFF2F',\n 'Honeydew': '#F0FFF0',\n 'HotPink': '#FF69B4',\n 'IndianRed': '#CD5C5C',\n 'Indigo': '#4B0082',\n 'Ivory': '#FFFFF0',\n 'Khaki': '#F0E68C',\n 'Lavender': '#E6E6FA',\n 'LavenderBlush': '#FFF0F5',\n 'LawnGreen': '#7CFC00',\n 'LemonChiffon': '#FFFACD',\n 'LightBlue': '#ADD8E6',\n 'LightCoral': '#F08080',\n 'LightCyan': '#E0FFFF',\n 'LightGoldenrodYellow': '#FAFAD2',\n 'LightGray': '#D3D3D3',\n 'LightGreen': '#90EE90',\n 'LightPink': '#FFB6C1',\n 'LightSalmon': '#FFA07A',\n 'LightSeaGreen': '#20B2AA',\n 'LightSkyBlue': '#87CEFA',\n 'LightSlateGray': '#778899',\n 'LightSteelBlue': '#B0C4DE',\n 'LightYellow': '#FFFFE0',\n 'Lime': '#00FF00',\n 'LimeGreen': '#32CD32',\n 'Linen': '#FAF0E6',\n 'Magenta': '#FF00FF',\n 'Maroon': '#800000',\n 'MediumAquamarine': '#66CDAA',\n 'MediumBlue': '#0000CD',\n 'MediumOrchid': '#BA55D3',\n 'MediumPurple': '#9370DB',\n 'MediumSeaGreen': '#3CB371',\n 'MediumSlateBlue': '#7B68EE',\n 'MediumSpringGreen': '#00FA9A',\n 'MediumTurquoise': '#48D1CC',\n 'MediumVioletRed': '#C71585',\n 'MidnightBlue': '#191970',\n 'MintCream': '#F5FFFA',\n 'MistyRose': '#FFE4E1',\n 'Moccasin': '#FFE4B5',\n 'NavajoWhite': '#FFDEAD',\n 'Navy': '#000080',\n 'OldLace': '#FDF5E6',\n 'Olive': '#808000',\n 'OliveDrab': '#6B8E23',\n 'Orange': '#FFA500',\n 'OrangeRed': '#FF4500',\n 'Orchid': '#DA70D6',\n 'PaleGoldenrod': '#EEE8AA',\n 'PaleGreen': '#98FB98',\n 'PaleTurquoise': '#AFEEEE',\n 'PaleVioletRed': '#DB7093',\n 'PapayaWhip': '#FFEFD5',\n 'PeachPuff': '#FFDAB9',\n 'Peru': '#CD853F',\n 'Pink': '#FFC0CB',\n 'Plum': '#DDA0DD',\n 'PowderBlue': '#B0E0E6',\n 'Purple': '#800080',\n 'Red': '#FF0000',\n 'RosyBrown': '#BC8F8F',\n 'RoyalBlue': '#4169E1',\n 'SaddleBrown': '#8B4513',\n 'Salmon': '#FA8072',\n 'SandyBrown': '#F4A460',\n 'SeaGreen': '#2E8B57',\n 'SeaShell': '#FFF5EE',\n 'Sienna': '#A0522D',\n 'Silver': '#C0C0C0',\n 'SkyBlue': '#87CEEB',\n 'SlateBlue': '#6A5ACD',\n 'SlateGray': '#708090',\n 'Snow': '#FFFAFA',\n 'SpringGreen': '#00FF7F',\n 'SteelBlue': '#4682B4',\n 'Tan': '#D2B48C',\n 'Teal': '#008080',\n 'Thistle': '#D8BFD8',\n 'Tomato': '#FF6347',\n 'Turquoise': '#40E0D0',\n 'Violet': '#EE82EE',\n 'Wheat': '#F5DEB3',\n 'White': '#FFFFFF',\n 'WhiteSmoke': '#F5F5F5',\n 'Yellow': '#FFFF00',\n 'YellowGreen': '#9ACD32',\n};\n\n// For Demographics scale (4 colors)\nexport const EthnicFewClassicColors = [\n '#fafafa', // \n '#aaaaaa', // \n '#666666', //\n '#111111', // \n];\n\n// For Partisan Precinct Scale (12 colors)\nexport const PartisanPrecinctClassicColors = [\n '#960018', // Carmine\n '#FF2020', // \n '#FF6060', // \n '#FFA0A0', // \n '#FFC0C0', //\n '#FFDEDE', // pale red\n '#DEDEFF', // pale blue\n '#C0C0FF', // \n '#A0A0FF', // \n '#6060FF', // \n '#2020FF', // \n '#00008B', // Dark blue\n];\n\n// For Partisan District Scale (12 stops)\nexport let PartisanDistrictClassicColors = [\n '#960018', // Carmine\n '#960018', // .00 <= .40\n '#FF2020', // \n '#FF2020', // .40 <= .45\n '#FF6060', //\n '#FFDEDE', // .45 <= .50\n '#DEDEFF', // \n '#6060FF', // .50 <= .55\n '#2020FF', // \n '#2020FF', // .55 <= .60\n '#00008B', // \n '#00008B', // .60 <= 1.0\n];\n\n// All Groups Mosaic 16 colors\nexport const EthnicBackgroundColor: string[] = [\n '#c0392b', // solid white\n '#3498db', // solid black\n '#2ecc71', // solid hispanic\n '#9b59b6', // solid asian\n '#d98880', // mostly white\n '#aed6f1', // mostly black\n '#abebc6', // mostly hispanic\n '#bb8fce', // mostly asian\n '#f1c40f', // mostly native\n '#aab7b8', // mix\n '#d5f5e3', // hispanic / white\n '#d6eaf8', // black / white\n '#186a3b', // hispanic / black\n '#e8daef', // asian / white\n '#45b39d', // asian / hispanic\n '#4a235a', // black / asian\n];\n\nexport const defaultDistrictsPalette = 'jet_r';\n\nexport const BigPalettes: string[] = [\n 'jet_r','turbo_r','inferno_r','viridis_r','magma_r','plasma_r','Greys','bone_r',\n 'jet','turbo','inferno','viridis','magma','plasma','bone'\n];\n\n// OrderedColorTable is lazily populated\nlet OrderedColorTable: {[key: string]: string[]} = {};\n\nexport function genColor(i: number, useFirstColor: boolean, palette: string): string\n{\n // i is district number, 0 => District[0] (unassigned), so subtract 1 to access ColorTable\n if (i == 0)\n return ColorValues[DefaultColorNames[0]];\n\n if (!useFirstColor || !palette || palette === 'draclassic')\n return genDRAColor(i, useFirstColor); \n\n const colors: string[] = orderedColors(palette);\n if (colors.length >= MaxOrderedColors)\n return colors[(i - 1) % MaxOrderedColors];\n\n if (BigPalettes.indexOf(palette) < 0) // not a big palette\n return colors[(i - 1) % colors.length];\n\n // Unexpected to get here, but something in case of an error\n return genDRAColor(i, useFirstColor);\n}\n\n// DRA classic color palette\nfunction genDRAColor(i: number, useFirstColor: boolean): string\n{\n // i is district number, 0 => District[0] (unassigned), so subtract 1 to access ColorTable\n function gen_table(): void\n {\n ColorTable['draclassic'] = [];\n for (let i: number = 0; i < MaxClassicColors; i++)\n {\n // A little funky math below to skip the first (white) color\n let j = (i % (DefaultColorNames.length - 1)) + 1;\n ColorTable['draclassic'].push(ColorValues[DefaultColorNames[j]]);\n }\n }\n\n if (!ColorTable['draclassic'])\n gen_table();\n \n if (i == 0)\n return ColorValues[DefaultColorNames[0]];\n return ColorTable['draclassic'][((i - 1) + (useFirstColor ? 0 : 1)) % MaxClassicColors];\n}\n\nconst DistrictsColorOrder: number[] =\n [0, 49, 24, 36, 12, 42, 6, 30, 18, 45, 3, 27, 9, 33, 15, 46, 21, 39, 4, 28, 10, 34, 16, 48, 22, 40, 5, 29, 11, 35, 17, 1, 23, 41,\n 7, 31, 13, 37, 19, 47, 25, 43, 8, 32, 14, 38, 2, 20, 26, 44];\n\nexport function orderedColors(palette: string): string[]\n{\n const colors = getPalette(palette);\n\n // Color Brewer palettes typically have only 8 colors; other palettes have MaxColors (except draclassic, which has 50 and does not call here)\n if (!OrderedColorTable[palette])\n {\n if (BigPalettes.indexOf(palette) < 0) // not a big palette\n OrderedColorTable[palette] = colors;\n else\n {\n OrderedColorTable[palette] = [];\n for (let i: number = 0; i < colors.length; i++)\n {\n if (palette === 'jet_r' || palette === 'turbo_r')\n OrderedColorTable[palette].push(colors[Math.floor(DistrictsColorOrder[i] * 2.5) + 12]);\n else\n OrderedColorTable[palette].push(colors[DistrictsColorOrder[i] * 3]);\n }\n }\n }\n return OrderedColorTable[palette];\n}\n\nexport function getPalette(palette: string): string[]\n{\n if (palette === 'draclassic')\n {\n // return draclassic palette with only 50 colors\n let colors: string[] = [];\n for (let i = 1; i < MaxOrderedColors; i++)\n colors.push(genDRAColor(i, true));\n return colors;\n }\n\n return getColorTable(palette);\n}\n\n// Generate table for palette\nfunction getColorTable(palette: string): string[]\n{\n // Classic palettes are referenced directly in some places, so we define them separately and add a reference to ColorTable for each of them\n if (palette === 'demographicsclassic')\n {\n if (!ColorTable[palette])\n ColorTable[palette] = EthnicFewClassicColors;\n return ColorTable[palette];\n }\n else if (palette === 'partisanclassic')\n {\n if (!ColorTable[palette])\n ColorTable[palette] = PartisanPrecinctClassicColors;\n return ColorTable[palette];\n }\n else if (palette === 'partisandistrictsclassic')\n {\n if (!ColorTable[palette])\n ColorTable[palette] = PartisanDistrictClassicColors;\n return ColorTable[palette];\n }\n else if (palette === 'allgroupsclassic')\n {\n if (!ColorTable[palette])\n ColorTable[palette] = EthnicBackgroundColor;\n return ColorTable[palette];\n }\n\n if (ColorTable[palette])\n return ColorTable[palette];\n\n if (palette.endsWith('_r'))\n {\n // Reverse palettes are not pre-generated into ColorTable; reverse the pre-generated one and cache it in ColorTable\n const basePalette = palette.substring(0, palette.length - 2);\n if (ColorTable[basePalette])\n {\n ColorTable[palette] = [...ColorTable[basePalette]].reverse();\n return ColorTable[palette];\n }\n }\n\n console.log(`colors.ts: palette not found: ${palette}`);\n return ['#ffffff'];\n}\n\n// Helpers\n/**** These helpers are now in data_tools/make_colortable.py which generates colortable.ts (9/15/2025) ****\nfunction toHexColor(r: number, g: number, b: number): string\n{\n return `#${Util.toHex(r)}${Util.toHex(g)}${Util.toHex(b)}`;\n}\n\nfunction jscolormap(name: string, shades: number): string[]\n{\n let result: string[] = [];\n for (let i = 0; i < shades; i++)\n {\n const rgb: number[] = partial(name)((i + 0.5) / shades);\n result.push(toHexColor(rgb[0], rgb[1], rgb[2]));\n }\n return result;\n}\n\nfunction evaluate_cmap(x: number, name: string, reverse: boolean) {\n /**\n * Evaluate colormap `name` at some value `x`.\n * @param {number} x - The value (between 0 and 1) at which to evaluate the colormap.\n * @param {string} name - The name of the colormap (see matplotlib documentation).\n * @reverse {boolean} reverse - Whether or not to reverse the colormap.\n * @return {list} - A 3-tuple (R, G, B) containing the color assigned to `x`.\n *//*\n\n // Ensure that the value of `x` is valid (i.e., 0 <= x <= 1)\n if (!(0 <= x && x <= 1)) {\n alert('Illegal value for x! Must be in [0, 1].')\n }\n\n // Ensure that `name` is a valid colormap\n if (!(name in JsColorMapsData.data)) {\n alert('Colormap ' + name + 'does not exist!');\n }\n\n // We can get the reverse colormap by evaluating colormap(1-x)\n if (reverse === true) {\n x = 1 - x;\n }\n\n // Get the colors and whether or not we need to interpolate\n let colors = JsColorMapsData.data[name]['colors'];\n let interpolate = JsColorMapsData.data[name]['interpolate'];\n\n if (interpolate === true) {\n return interpolated(x, colors);\n } else {\n return qualitative(x, colors);\n }\n}\n\nfunction interpolated(x: number, colors: any[]) {\n let lo = Math.floor(x * (colors.length - 1));\n let hi = Math.ceil(x * (colors.length - 1));\n let r = Math.round((colors[lo][0] + colors[hi][0]) / 2 * 255);\n let g = Math.round((colors[lo][1] + colors[hi][1]) / 2 * 255);\n let b = Math.round((colors[lo][2] + colors[hi][2]) / 2 * 255);\n return [r, g, b];\n}\n\nfunction qualitative(x: number, colors: any[]) {\n let idx = 0;\n while (x > (idx + 1) / (colors.length - 0) ) { idx++; }\n let r = Math.round(colors[idx][0] * 255);\n let g = Math.round(colors[idx][1] * 255);\n let b = Math.round(colors[idx][2] * 255);\n return [r, g, b];\n}\n\nfunction partial(name: string) {\n if (name.endsWith('_r')) {\n return function(x: number) { return evaluate_cmap(x, name.substring(0, name.length - 2), true) };\n } else {\n return function(x: number) { return evaluate_cmap(x, name, false) };\n }\n\n} */\n\n// End of js-colormaps\n// *********************************************************\n","export const ColorBrewerSchemeNames: string[] =\n [\"Accent\",\"Dark2\",\"Paired\",\"Pastel1\",\"Pastel2\",\"Set1\",\"Set2\",\"Set3\",\"Blues\",\"Greens\",\"Oranges\",\"Reds\",\"Purples\",\"Greys1\",\"BuGn\",\"BuPu\",\"GnBu\",\"OrRd\",\"PuBuGn\",\"YlGn\",\"Spectral\",\"RdYlBu\",\"PiYG\",\"PRGn\",\"RdYlGn\",\"RdGy\",\"RdBu\",\"BrBG\",\"PuOr\"];\nexport var ColorTable: {[key: string]: string[]} = {\n \"Greys\": [\"#ffffff\",\"#fefefe\",\"#fdfdfd\",\"#fcfcfc\",\"#fbfbfb\",\"#fbfbfb\",\"#fafafa\",\"#f9f9f9\",\"#f8f8f8\",\"#f7f7f7\",\"#f7f7f7\",\"#f6f6f6\",\"#f5f5f5\",\"#f4f4f4\",\"#f3f3f3\",\"#f3f3f3\",\"#f2f2f2\",\"#f1f1f1\",\"#f0f0f0\",\"#efefef\",\"#eeeeee\",\"#ededed\",\"#ebebeb\",\"#eaeaea\",\"#e9e9e9\",\"#e8e8e8\",\"#e6e6e6\",\"#e5e5e5\",\"#e4e4e4\",\"#e3e3e3\",\"#e2e2e2\",\"#e0e0e0\",\"#dfdfdf\",\"#dedede\",\"#dddddd\",\"#dbdbdb\",\"#dadada\",\"#d9d9d9\",\"#d7d7d7\",\"#d6d6d6\",\"#d5d5d5\",\"#d3d3d3\",\"#d1d1d1\",\"#d0d0d0\",\"#cfcfcf\",\"#cdcdcd\",\"#cbcbcb\",\"#cacaca\",\"#c9c9c9\",\"#c7c7c7\",\"#c6c6c6\",\"#c4c4c4\",\"#c2c2c2\",\"#c2c2c2\",\"#c0c0c0\",\"#bebebe\",\"#bcbcbc\",\"#bbbbbb\",\"#b8b8b8\",\"#b6b6b6\",\"#b5b5b5\",\"#b2b2b2\",\"#b0b0b0\",\"#aeaeae\",\"#acacac\",\"#aaaaaa\",\"#a7a7a7\",\"#a6a6a6\",\"#a3a3a3\",\"#a1a1a1\",\"#a0a0a0\",\"#9d9d9d\",\"#9b9b9b\",\"#9a9a9a\",\"#979797\",\"#959595\",\"#939393\",\"#929292\",\"#8f8f8f\",\"#8d8d8d\",\"#8c8c8c\",\"#8a8a8a\",\"#888888\",\"#878787\",\"#848484\",\"#828282\",\"#808080\",\"#7f7f7f\",\"#7d7d7d\",\"#7b7b7b\",\"#797979\",\"#777777\",\"#757575\",\"#747474\",\"#727272\",\"#707070\",\"#6e6e6e\",\"#6d6d6d\",\"#6b6b6b\",\"#696969\",\"#676767\",\"#656565\",\"#636363\",\"#626262\",\"#606060\",\"#5e5e5e\",\"#5c5c5c\",\"#5b5b5b\",\"#595959\",\"#575757\",\"#565656\",\"#545454\",\"#525252\",\"#505050\",\"#4d4d4d\",\"#4b4b4b\",\"#484848\",\"#464646\",\"#444444\",\"#414141\",\"#3f3f3f\",\"#3c3c3c\",\"#3a3a3a\",\"#383838\",\"#353535\",\"#333333\",\"#303030\",\"#2e2e2e\",\"#2c2c2c\",\"#292929\",\"#272727\",\"#252525\",\"#222222\",\"#212121\",\"#1f1f1f\",\"#1c1c1c\",\"#1a1a1a\",\"#191919\",\"#171717\",\"#141414\",\"#131313\",\"#111111\",\"#0f0f0f\",\"#0d0d0d\",\"#0b0b0b\",\"#090909\",\"#060606\",\"#050505\",\"#030303\",\"#010101\"],\n \"bone\": [\"#000001\",\"#020203\",\"#040405\",\"#050507\",\"#070709\",\"#08080c\",\"#0a0a0e\",\"#0b0b0f\",\"#0d0d12\",\"#0e0e14\",\"#0f0f15\",\"#111118\",\"#13131a\",\"#14141b\",\"#15151e\",\"#171720\",\"#191923\",\"#1a1a24\",\"#1c1c26\",\"#1d1d29\",\"#1e1e2a\",\"#20202c\",\"#22222f\",\"#232330\",\"#242433\",\"#262635\",\"#282837\",\"#292939\",\"#2a2a3b\",\"#2c2c3d\",\"#2d2d3f\",\"#2f2f41\",\"#313144\",\"#313145\",\"#333347\",\"#35354a\",\"#37374c\",\"#38384d\",\"#393950\",\"#3b3b52\",\"#3c3c53\",\"#3e3e56\",\"#3f3f58\",\"#404059\",\"#42425c\",\"#44445e\",\"#464661\",\"#464662\",\"#484864\",\"#4a4a67\",\"#4b4b68\",\"#4d4d6b\",\"#4e4e6d\",\"#4f4f6e\",\"#515171\",\"#535373\",\"#545674\",\"#555775\",\"#575977\",\"#595c79\",\"#5a5d7a\",\"#5b5f7b\",\"#5d627d\",\"#5e637e\",\"#606580\",\"#626881\",\"#636a83\",\"#646b84\",\"#666e86\",\"#687088\",\"#697188\",\"#6a748a\",\"#6c768c\",\"#6d778d\",\"#6f7a8f\",\"#707c90\",\"#727e92\",\"#738093\",\"#758295\",\"#778496\",\"#778697\",\"#798899\",\"#7b8a9b\",\"#7c8c9c\",\"#7e8e9d\",\"#7f919f\",\"#8193a1\",\"#8294a2\",\"#8497a4\",\"#8599a5\",\"#869aa6\",\"#889da8\",\"#8a9faa\",\"#8ba0ab\",\"#8ca3ac\",\"#8ea5ae\",\"#90a7b0\",\"#91a9b1\",\"#93abb2\",\"#94adb4\",\"#95afb5\",\"#97b1b7\",\"#99b3b9\",\"#9ab5b9\",\"#9bb7bb\",\"#9db9bd\",\"#9fbcbf\",\"#a0bdc0\",\"#a1bfc1\",\"#a3c2c3\",\"#a4c3c4\",\"#a6c5c6\",\"#a8c7c7\",\"#aac8c8\",\"#accaca\",\"#afcccc\",\"#b2cece\",\"#b3cece\",\"#b6d0d0\",\"#b9d2d2\",\"#bad3d3\",\"#bdd5d5\",\"#bfd6d6\",\"#c1d7d7\",\"#c4d9d9\",\"#c6dbdb\",\"#c9dcdc\",\"#cadddd\",\"#cddfdf\",\"#d0e1e1\",\"#d1e2e2\",\"#d4e3e3\",\"#d7e5e5\",\"#d8e6e6\",\"#dbe8e8\",\"#deeaea\",\"#e0ebeb\",\"#e2ecec\",\"#e4eeee\",\"#e7f0f0\",\"#e8f1f1\",\"#ebf2f2\",\"#eef4f4\",\"#eff5f5\",\"#f2f7f7\",\"#f5f8f8\",\"#f7fafa\",\"#f9fbfb\",\"#fcfdfd\",\"#feffff\"],\n \"inferno\": [\"#000004\",\"#010107\",\"#02010b\",\"#02020d\",\"#030311\",\"#050416\",\"#06051a\",\"#07051c\",\"#090621\",\"#0b0725\",\"#0d0827\",\"#0f092c\",\"#120a31\",\"#130a33\",\"#160b38\",\"#180c3d\",\"#1b0c42\",\"#1d0c44\",\"#200c49\",\"#230c4e\",\"#250c50\",\"#290b54\",\"#2c0b58\",\"#2e0a5a\",\"#310a5d\",\"#350a60\",\"#380962\",\"#3a0964\",\"#3e0966\",\"#410a67\",\"#430a68\",\"#460b69\",\"#490b6a\",\"#4b0c6b\",\"#4e0d6c\",\"#510e6d\",\"#550f6d\",\"#56106d\",\"#59116e\",\"#5d126e\",\"#5e136e\",\"#61146e\",\"#65156e\",\"#66166e\",\"#69176e\",\"#6d186e\",\"#70196e\",\"#711a6e\",\"#741b6e\",\"#781c6d\",\"#791c6d\",\"#7c1e6d\",\"#801f6c\",\"#811f6c\",\"#84206b\",\"#88226a\",\"#8b236a\",\"#8c2369\",\"#902468\",\"#932567\",\"#942667\",\"#972766\",\"#9b2865\",\"#9c2964\",\"#9f2a63\",\"#a22b62\",\"#a62d60\",\"#a72d5f\",\"#aa2f5e\",\"#ad305c\",\"#af315c\",\"#b2325a\",\"#b53458\",\"#b63457\",\"#b93656\",\"#bc3754\",\"#bf3952\",\"#c13a51\",\"#c43c4f\",\"#c63e4d\",\"#c83f4c\",\"#ca404a\",\"#cd4248\",\"#ce4447\",\"#d14644\",\"#d44842\",\"#d64a40\",\"#d74b3f\",\"#da4e3d\",\"#dc503a\",\"#dd5139\",\"#df5437\",\"#e15734\",\"#e35833\",\"#e55b31\",\"#e65e2e\",\"#e8612c\",\"#e9622b\",\"#eb6528\",\"#ed6826\",\"#ed6a24\",\"#ef6d22\",\"#f0701f\",\"#f1721e\",\"#f2751b\",\"#f47819\",\"#f57c16\",\"#f57d15\",\"#f68112\",\"#f78410\",\"#f8860e\",\"#f98a0c\",\"#f98d09\",\"#fa8f08\",\"#fa9307\",\"#fb9706\",\"#fb9a06\",\"#fb9c06\",\"#fca007\",\"#fca40a\",\"#fca60b\",\"#fca90e\",\"#fcad12\",\"#fcaf13\",\"#fcb317\",\"#fbb71c\",\"#fbbb20\",\"#fbbd22\",\"#fac127\",\"#fac52c\",\"#f9c62e\",\"#f9ca33\",\"#f8ce39\",\"#f8d03b\",\"#f7d441\",\"#f6d847\",\"#f5dc4e\",\"#f4de51\",\"#f3e258\",\"#f2e55f\",\"#f2e763\",\"#f2eb6b\",\"#f1ee73\",\"#f1f077\",\"#f2f37f\",\"#f3f688\",\"#f5f890\",\"#f6f994\",\"#f8fc9b\",\"#fbfea3\"],\n \"jet\": [\"#000082\",\"#00008b\",\"#000094\",\"#000099\",\"#0000a2\",\"#0000ab\",\"#0000b4\",\"#0000b8\",\"#0000c1\",\"#0000ca\",\"#0000cf\",\"#0000d8\",\"#0000e1\",\"#0000e6\",\"#0000ef\",\"#0000f8\",\"#0000ff\",\"#0000ff\",\"#0000ff\",\"#0006ff\",\"#000aff\",\"#0013ff\",\"#001bff\",\"#001fff\",\"#0026ff\",\"#002eff\",\"#0037ff\",\"#003bff\",\"#0042ff\",\"#004aff\",\"#004fff\",\"#0057ff\",\"#005eff\",\"#0062ff\",\"#006bff\",\"#0073ff\",\"#007aff\",\"#007eff\",\"#0086ff\",\"#008fff\",\"#0093ff\",\"#009aff\",\"#00a2ff\",\"#00a7ff\",\"#00afff\",\"#00b6ff\",\"#00beff\",\"#00c3ff\",\"#00cbff\",\"#00d2ff\",\"#00d6ff\",\"#00dffc\",\"#01e7f6\",\"#04ebf3\",\"#0af2ec\",\"#11fae6\",\"#17ffdf\",\"#1bffdc\",\"#21ffd6\",\"#28ffcf\",\"#2bffcc\",\"#31ffc6\",\"#38ffbf\",\"#3bffbc\",\"#41ffb5\",\"#48ffaf\",\"#4effa9\",\"#51ffa5\",\"#58ff9f\",\"#5eff98\",\"#62ff95\",\"#68ff8f\",\"#6eff88\",\"#72ff85\",\"#78ff7f\",\"#7fff78\",\"#85ff72\",\"#88ff6e\",\"#8fff68\",\"#95ff62\",\"#98ff5e\",\"#9fff58\",\"#a5ff51\",\"#a9ff4e\",\"#afff48\",\"#b5ff41\",\"#bcff3b\",\"#bfff38\",\"#c6ff31\",\"#ccff2b\",\"#cfff28\",\"#d6ff21\",\"#dcff1b\",\"#dfff17\",\"#e6ff11\",\"#ecff0a\",\"#f3fa04\",\"#f6f601\",\"#fcef00\",\"#ffe800\",\"#ffe400\",\"#ffdd00\",\"#ffd500\",\"#ffd100\",\"#ffca00\",\"#ffc300\",\"#ffbb00\",\"#ffb800\",\"#ffb000\",\"#ffa900\",\"#ffa500\",\"#ff9e00\",\"#ff9600\",\"#ff9200\",\"#ff8b00\",\"#ff8400\",\"#ff7c00\",\"#ff7900\",\"#ff7100\",\"#ff6a00\",\"#ff6600\",\"#ff5f00\",\"#ff5700\",\"#ff5400\",\"#ff4c00\",\"#ff4500\",\"#ff3d00\",\"#ff3a00\",\"#ff3200\",\"#ff2b00\",\"#ff2700\",\"#ff2000\",\"#ff1800\",\"#ff1500\",\"#f80d00\",\"#ef0600\",\"#e60000\",\"#e10000\",\"#d80000\",\"#cf0000\",\"#ca0000\",\"#c10000\",\"#b80000\",\"#b40000\",\"#ab0000\",\"#a20000\",\"#990000\",\"#940000\",\"#8b0000\",\"#820000\"],\n \"magma\": [\"#000004\",\"#010107\",\"#02010a\",\"#02020c\",\"#030311\",\"#040415\",\"#060519\",\"#07061b\",\"#09071f\",\"#0b0823\",\"#0c0925\",\"#0e0a2a\",\"#100c2e\",\"#110c30\",\"#140e35\",\"#160f39\",\"#180f3e\",\"#1a1041\",\"#1c1145\",\"#1f114a\",\"#20114d\",\"#231152\",\"#261256\",\"#281159\",\"#2b115d\",\"#2e1162\",\"#321066\",\"#331068\",\"#37106c\",\"#3a0f6f\",\"#3c0f70\",\"#3f0f73\",\"#430f75\",\"#450f76\",\"#481078\",\"#4b117a\",\"#4e127b\",\"#50127b\",\"#53137d\",\"#56147d\",\"#58157e\",\"#5b167f\",\"#5e177f\",\"#60187f\",\"#631980\",\"#661b80\",\"#691c81\",\"#6b1c81\",\"#6e1e81\",\"#711f81\",\"#722081\",\"#752181\",\"#792282\",\"#7a2382\",\"#7d2482\",\"#802582\",\"#842681\",\"#852781\",\"#882881\",\"#8c2981\",\"#8d2981\",\"#902a81\",\"#942b80\",\"#952c80\",\"#982d80\",\"#9c2e7f\",\"#9f2f7f\",\"#a1307e\",\"#a4317e\",\"#a7327d\",\"#a9327d\",\"#ac337c\",\"#af347b\",\"#b1357b\",\"#b4367a\",\"#b73779\",\"#bb3878\",\"#bc3977\",\"#c03a76\",\"#c33b75\",\"#c43c74\",\"#c83d73\",\"#cb3f72\",\"#cc3f71\",\"#d04170\",\"#d3426e\",\"#d6446d\",\"#d7456c\",\"#da476a\",\"#dd4969\",\"#de4a68\",\"#e14c66\",\"#e44e65\",\"#e55064\",\"#e75263\",\"#e95561\",\"#ec5860\",\"#ed595f\",\"#ef5c5e\",\"#f05f5d\",\"#f1615d\",\"#f3655c\",\"#f4685c\",\"#f56a5c\",\"#f66d5c\",\"#f7715c\",\"#f8755c\",\"#f8775c\",\"#f97a5d\",\"#fa7e5e\",\"#fa805f\",\"#fb8460\",\"#fb8861\",\"#fc8a62\",\"#fc8d63\",\"#fd9165\",\"#fd9567\",\"#fd9768\",\"#fd9b6a\",\"#fe9e6c\",\"#fea06e\",\"#fea470\",\"#fea872\",\"#fea974\",\"#fead76\",\"#feb179\",\"#feb57c\",\"#feb67d\",\"#feba80\",\"#febe83\",\"#fec085\",\"#fec388\",\"#fec78b\",\"#fec98c\",\"#fecc90\",\"#fed093\",\"#fed496\",\"#fed698\",\"#fdd99b\",\"#fddd9f\",\"#fddfa1\",\"#fde2a4\",\"#fde6a8\",\"#fde8aa\",\"#fdecad\",\"#fcefb1\",\"#fcf3b5\",\"#fcf5b7\",\"#fcf8ba\",\"#fcfcbe\"],\n \"plasma\": [\"#0f0787\",\"#15078a\",\"#1a068c\",\"#1c068d\",\"#21068f\",\"#250591\",\"#290593\",\"#2b0594\",\"#2f0595\",\"#320597\",\"#340598\",\"#380499\",\"#3b049b\",\"#3d049b\",\"#40049d\",\"#43039e\",\"#47039f\",\"#4803a0\",\"#4c03a1\",\"#4f02a2\",\"#5102a2\",\"#5402a3\",\"#5701a4\",\"#5801a5\",\"#5c01a5\",\"#5f01a6\",\"#6200a7\",\"#6400a7\",\"#6700a7\",\"#6a00a8\",\"#6b00a8\",\"#6e00a8\",\"#7100a8\",\"#7301a8\",\"#7601a8\",\"#7902a8\",\"#7c02a8\",\"#7d03a8\",\"#8004a7\",\"#8305a7\",\"#8506a7\",\"#8808a6\",\"#8b09a5\",\"#8c0aa5\",\"#8f0da4\",\"#920fa3\",\"#9411a2\",\"#9612a1\",\"#9814a0\",\"#9b169e\",\"#9c189e\",\"#9f1a9c\",\"#a21c9b\",\"#a31d9a\",\"#a51f98\",\"#a82297\",\"#aa2495\",\"#ab2594\",\"#ae2792\",\"#b02a90\",\"#b12b8f\",\"#b42d8e\",\"#b62f8c\",\"#b7308b\",\"#b93389\",\"#bb3587\",\"#bd3785\",\"#be3884\",\"#c03a82\",\"#c23d81\",\"#c33e80\",\"#c5407e\",\"#c7427c\",\"#c8437b\",\"#ca4679\",\"#cc4877\",\"#ce4a75\",\"#cf4b75\",\"#d14e73\",\"#d25071\",\"#d35170\",\"#d5536e\",\"#d7566d\",\"#d8576c\",\"#d9596a\",\"#db5b68\",\"#dc5e66\",\"#dd5f66\",\"#df6164\",\"#e06462\",\"#e16561\",\"#e36760\",\"#e4695e\",\"#e56b5d\",\"#e66d5b\",\"#e86f5a\",\"#e97258\",\"#ea7357\",\"#eb7655\",\"#ec7854\",\"#ed7953\",\"#ee7c51\",\"#ef7e4f\",\"#f0804e\",\"#f1824d\",\"#f2854b\",\"#f38749\",\"#f48948\",\"#f58b47\",\"#f68e45\",\"#f68f44\",\"#f79242\",\"#f89541\",\"#f89640\",\"#f9993e\",\"#fa9c3c\",\"#fb9e3b\",\"#fba03a\",\"#fba338\",\"#fca636\",\"#fca735\",\"#fdaa34\",\"#fdad32\",\"#fdae31\",\"#fdb130\",\"#fdb42e\",\"#feb82d\",\"#feb92c\",\"#febc2b\",\"#febf29\",\"#fdc129\",\"#fdc428\",\"#fdc727\",\"#fdc926\",\"#fccc26\",\"#fccf25\",\"#fbd325\",\"#fbd424\",\"#fad724\",\"#fadb24\",\"#f9dc24\",\"#f8e025\",\"#f7e325\",\"#f7e526\",\"#f6e826\",\"#f4ec27\",\"#f3ef27\",\"#f2f127\",\"#f1f426\",\"#f0f823\"],\n \"turbo\": [\"#31143f\",\"#331a4e\",\"#36205c\",\"#372263\",\"#392870\",\"#3b2e7c\",\"#3d3489\",\"#3d378e\",\"#3f3c9a\",\"#4042a4\",\"#4145a9\",\"#424ab3\",\"#434fbc\",\"#4452c1\",\"#4558c9\",\"#455dd1\",\"#4662d8\",\"#4665db\",\"#466ae2\",\"#476fe8\",\"#4772ea\",\"#4777ef\",\"#467cf3\",\"#467ff5\",\"#4684f9\",\"#4589fc\",\"#448dfe\",\"#4390fe\",\"#4195ff\",\"#3f9afe\",\"#3e9dfe\",\"#3ba2fd\",\"#37a7fa\",\"#36a9f9\",\"#32aef6\",\"#2fb3f3\",\"#2bb8ef\",\"#29baec\",\"#26bfe8\",\"#23c4e3\",\"#21c6e1\",\"#1ecadb\",\"#1cced6\",\"#1bd1d4\",\"#19d5ce\",\"#18d8c9\",\"#18dcc4\",\"#18dec1\",\"#18e1bc\",\"#1ae4b7\",\"#1be5b5\",\"#1ee8b0\",\"#21eaab\",\"#24eca8\",\"#28eea2\",\"#2ef09c\",\"#34f396\",\"#37f493\",\"#3ef58c\",\"#45f785\",\"#48f882\",\"#50f97b\",\"#57fb74\",\"#5bfb71\",\"#63fc6a\",\"#6bfd64\",\"#73fe5e\",\"#77fe5b\",\"#7fff55\",\"#86ff4f\",\"#8aff4d\",\"#91ff48\",\"#97fe43\",\"#9afe41\",\"#a0fd3e\",\"#a5fc3b\",\"#abfb39\",\"#adfa38\",\"#b3f836\",\"#b8f735\",\"#baf534\",\"#c0f334\",\"#c5f134\",\"#c7ef34\",\"#ccec34\",\"#d1e935\",\"#d5e635\",\"#d8e536\",\"#dce136\",\"#e0de37\",\"#e2dc38\",\"#e6d838\",\"#ead439\",\"#ebd239\",\"#efce3a\",\"#f2ca3a\",\"#f4c63a\",\"#f6c43a\",\"#f8c03a\",\"#f9bb39\",\"#fab938\",\"#fcb537\",\"#fdb035\",\"#fdad34\",\"#fea832\",\"#fea330\",\"#fe9d2e\",\"#fe9a2d\",\"#fe942a\",\"#fd8e28\",\"#fd8b27\",\"#fc8524\",\"#fb7f21\",\"#fa7c20\",\"#f9761d\",\"#f8701b\",\"#f66a18\",\"#f56717\",\"#f36215\",\"#f05c12\",\"#ef5911\",\"#ed540f\",\"#ea4f0e\",\"#e94d0d\",\"#e6480b\",\"#e3440a\",\"#e04009\",\"#de3e08\",\"#db3a07\",\"#d73606\",\"#d53406\",\"#d13005\",\"#cd2c04\",\"#cb2b04\",\"#c62703\",\"#c22403\",\"#bd2102\",\"#bb1f02\",\"#b61c02\",\"#b01901\",\"#ae1801\",\"#a81501\",\"#a21201\",\"#9f1101\",\"#990e01\",\"#930c01\",\"#8d0a02\",\"#8a0902\",\"#830702\",\"#7c0503\"],\n \"viridis\": [\"#440255\",\"#450458\",\"#46075b\",\"#46095c\",\"#470c5f\",\"#470f62\",\"#471265\",\"#481366\",\"#481669\",\"#48196b\",\"#481a6c\",\"#481d6f\",\"#481f71\",\"#482172\",\"#482374\",\"#482676\",\"#482878\",\"#482a79\",\"#472c7b\",\"#472f7d\",\"#47307d\",\"#46327f\",\"#453580\",\"#453681\",\"#453882\",\"#443b83\",\"#433d85\",\"#433e85\",\"#424186\",\"#414387\",\"#414487\",\"#404788\",\"#3f4989\",\"#3e4a89\",\"#3d4c8a\",\"#3c4e8a\",\"#3b518b\",\"#3b528b\",\"#3a548b\",\"#39568c\",\"#38578c\",\"#37598c\",\"#365b8d\",\"#365c8d\",\"#355e8d\",\"#34608d\",\"#33628d\",\"#33638d\",\"#32658e\",\"#31678e\",\"#30688e\",\"#306a8e\",\"#2f6c8e\",\"#2e6d8e\",\"#2d6f8e\",\"#2d718e\",\"#2c738e\",\"#2b748e\",\"#2b768e\",\"#2a788e\",\"#2a798e\",\"#297a8e\",\"#287c8e\",\"#287d8e\",\"#277f8e\",\"#26818e\",\"#25838e\",\"#25848e\",\"#24868e\",\"#24888e\",\"#23898e\",\"#238a8d\",\"#228c8d\",\"#228d8d\",\"#218f8d\",\"#20918c\",\"#20938c\",\"#20948c\",\"#1f968b\",\"#1f988b\",\"#1f998a\",\"#1e9a8a\",\"#1e9c89\",\"#1e9d89\",\"#1f9f88\",\"#1fa187\",\"#20a387\",\"#20a486\",\"#21a685\",\"#22a784\",\"#23a884\",\"#24aa83\",\"#26ac81\",\"#27ad81\",\"#29af80\",\"#2bb17e\",\"#2db27d\",\"#2fb37c\",\"#31b57b\",\"#34b779\",\"#36b878\",\"#39b976\",\"#3cbb75\",\"#3ebc74\",\"#41be72\",\"#45bf70\",\"#49c16e\",\"#4bc26d\",\"#4fc36b\",\"#53c568\",\"#55c667\",\"#59c765\",\"#5dc962\",\"#5fca61\",\"#64cb5e\",\"#68cc5c\",\"#6dce59\",\"#6fce58\",\"#74d055\",\"#79d152\",\"#7bd250\",\"#80d34d\",\"#85d44a\",\"#87d549\",\"#8cd645\",\"#91d742\",\"#97d83f\",\"#99d93d\",\"#9eda3a\",\"#a4db36\",\"#a6db35\",\"#acdc31\",\"#b1dd2e\",\"#b4dd2c\",\"#b9de29\",\"#bedf25\",\"#c4e022\",\"#c6e021\",\"#cce11e\",\"#d1e11c\",\"#d4e21b\",\"#d9e219\",\"#dee318\",\"#e1e318\",\"#e6e419\",\"#ebe51a\",\"#f0e51c\",\"#f2e61d\",\"#f7e620\",\"#fce724\"],\n \"Accent\": [\"#7fc97f\",\"#beaed4\",\"#fdc086\",\"#ffff99\",\"#386cb0\",\"#f0027f\",\"#bf5b17\",\"#666666\"],\n \"Dark2\": [\"#1b9e77\",\"#d95f02\",\"#7570b3\",\"#e7298a\",\"#66a61e\",\"#e6ab02\",\"#a6761d\",\"#666666\"],\n \"Paired\": [\"#a6cee3\",\"#1f78b4\",\"#b2df8a\",\"#33a02c\",\"#fb9a99\",\"#e31a1c\",\"#fdbf6f\",\"#ff7f00\"],\n \"Pastel1\": [\"#fbb4ae\",\"#b3cde3\",\"#ccebc5\",\"#decbe4\",\"#fed9a6\",\"#ffffcc\",\"#e5d8bd\",\"#fddaec\"],\n \"Pastel2\": [\"#b3e2cd\",\"#fdcdac\",\"#cbd5e8\",\"#f4cae4\",\"#e6f5c9\",\"#fff2ae\",\"#f1e2cc\",\"#cccccc\"],\n \"Set1\": [\"#e41a1c\",\"#377eb8\",\"#4daf4a\",\"#984ea3\",\"#ff7f00\",\"#ffff33\",\"#a65628\",\"#f781bf\"],\n \"Set2\": [\"#66c2a5\",\"#fc8d62\",\"#8da0cb\",\"#e78ac3\",\"#a6d854\",\"#ffd92f\",\"#e5c494\",\"#b3b3b3\"],\n \"Set3\": [\"#8dd3c7\",\"#ffffb3\",\"#bebada\",\"#fb8072\",\"#80b1d3\",\"#fdb462\",\"#b3de69\",\"#fccde5\"],\n \"Blues\": [\"#f7fbff\",\"#deebf7\",\"#c6dbef\",\"#9ecae1\",\"#6baed6\",\"#4292c6\",\"#2171b5\",\"#084594\"],\n \"Greens\": [\"#f7fcf5\",\"#e5f5e0\",\"#c7e9c0\",\"#a1d99b\",\"#74c476\",\"#41ab5d\",\"#238b45\",\"#005a32\"],\n \"Oranges\": [\"#fff5eb\",\"#fee6ce\",\"#fdd0a2\",\"#fdae6b\",\"#fd8d3c\",\"#f16913\",\"#d94801\",\"#8c2d04\"],\n \"Reds\": [\"#fff5f0\",\"#fee0d2\",\"#fcbba1\",\"#fc9272\",\"#fb6a4a\",\"#ef3b2c\",\"#cb181d\",\"#99000d\"],\n \"Purples\": [\"#fcfbfd\",\"#efedf5\",\"#dadaeb\",\"#bcbddc\",\"#9e9ac8\",\"#807dba\",\"#6a51a3\",\"#4a1486\"],\n \"Greys1\": [\"#ffffff\",\"#f0f0f0\",\"#d9d9d9\",\"#bdbdbd\",\"#969696\",\"#737373\",\"#525252\",\"#252525\"],\n \"BuGn\": [\"#f7fcfd\",\"#e5f5f9\",\"#ccece6\",\"#99d8c9\",\"#66c2a4\",\"#41ae76\",\"#238b45\",\"#005824\"],\n \"BuPu\": [\"#f7fcfd\",\"#e0ecf4\",\"#bfd3e6\",\"#9ebcda\",\"#8c96c6\",\"#8c6bb1\",\"#88419d\",\"#6e016b\"],\n \"GnBu\": [\"#f7fcf0\",\"#e0f3db\",\"#ccebc5\",\"#a8ddb5\",\"#7bccc4\",\"#4eb3d3\",\"#2b8cbe\",\"#08589e\"],\n \"OrRd\": [\"#fff7ec\",\"#fee8c8\",\"#fdd49e\",\"#fdbb84\",\"#fc8d59\",\"#ef6548\",\"#d7301f\",\"#990000\"],\n \"PuBuGn\": [\"#fff7fb\",\"#ece2f0\",\"#d0d1e6\",\"#a6bddb\",\"#67a9cf\",\"#3690c0\",\"#02818a\",\"#016450\"],\n \"YlGn\": [\"#ffffe5\",\"#f7fcb9\",\"#d9f0a3\",\"#addd8e\",\"#78c679\",\"#41ab5d\",\"#238443\",\"#005a32\"],\n \"Spectral\": [\"#d53e4f\",\"#f46d43\",\"#fdae61\",\"#fee08b\",\"#e6f598\",\"#abdda4\",\"#66c2a5\",\"#3288bd\"],\n \"RdYlBu\": [\"#d73027\",\"#f46d43\",\"#fdae61\",\"#fee090\",\"#e0f3f8\",\"#abd9e9\",\"#74add1\",\"#4575b4\"],\n \"PiYG\": [\"#c51b7d\",\"#de77ae\",\"#f1b6da\",\"#fde0ef\",\"#e6f5d0\",\"#b8e186\",\"#7fbc41\",\"#4d9221\"],\n \"PRGn\": [\"#762a83\",\"#9970ab\",\"#c2a5cf\",\"#e7d4e8\",\"#d9f0d3\",\"#a6dba0\",\"#5aae61\",\"#1b7837\"],\n \"RdYlGn\": [\"#d73027\",\"#f46d43\",\"#fdae61\",\"#fee08b\",\"#d9ef8b\",\"#a6d96a\",\"#66bd63\",\"#1a9850\"],\n \"RdGy\": [\"#b2182b\",\"#d6604d\",\"#f4a582\",\"#fddbc7\",\"#e0e0e0\",\"#bababa\",\"#878787\",\"#4d4d4d\"],\n \"RdBu\": [\"#b2182b\",\"#d6604d\",\"#f4a582\",\"#fddbc7\",\"#d1e5f0\",\"#92c5de\",\"#4393c3\",\"#2166ac\"],\n \"BrBG\": [\"#8c510a\",\"#bf812d\",\"#dfc27d\",\"#f6e8c3\",\"#c7eae5\",\"#80cdc1\",\"#35978f\",\"#01665e\"],\n \"PuOr\": [\"#b35806\",\"#e08214\",\"#fdb863\",\"#fee0b6\",\"#d8daeb\",\"#b2abd2\",\"#8073ac\",\"#542788\"]\n};\n","export * from './context';\n","import * as Util from '../util/all';\n\nexport type ContextValues = { [key: string]: any };\nexport interface IContext\n{\n setDefaults: (o: ContextValues) => void\n setValues: (o: ContextValues) => void\n xvalue: (prop: string) => any\n xset: (prop: string) => boolean\n xflag: (prop: string) => boolean\n xnumber: (prop: string) => number\n xstring: (prop: string) => string\n}\n\nclass Context implements IContext\n{\n private values: ContextValues;\n private defaults: ContextValues;\n\n constructor()\n {\n this.values = {};\n this.defaults = {};\n }\n\n setValues(o: ContextValues): void\n {\n this.values = Util.shallowAssignImmutable(this.values, o);\n }\n\n setDefaults(o: ContextValues): void\n {\n this.defaults = Util.shallowAssignImmutable(this.defaults, o);\n }\n\n xvalue(prop: string): any\n {\n let v: any = this.values[prop];\n if (v === undefined && process && process.env)\n v = process.env[prop.toUpperCase()];\n if (v === undefined)\n v = this.defaults[prop];\n return v;\n }\n\n xset(prop: string): boolean\n {\n let v: any = this.values[prop];\n if (v === undefined && process && process.env)\n v = process.env[prop.toUpperCase()];\n return v !== undefined;\n }\n\n xflag(prop: string): boolean\n {\n let v: any = this.xvalue(prop);\n if (v === undefined || v === null)\n return false;\n return Number(v) != 0;\n }\n\n xnumber(prop: string): number\n {\n let v: any = this.xvalue(prop);\n if (v === undefined || v === null)\n return 0;\n return Number(v);\n }\n\n xstring(prop: string): string\n {\n let v: any = this.xvalue(prop);\n if (v === undefined || v === null)\n return null;\n return String(v);\n }\n}\n\nexport function create(): IContext\n{\n return new Context();\n}\n","export * from './control';\n","export interface Control {\n isCanceled: () => boolean,\n statusUpdate: (complete: number, total: number) => void,\n}\n","export * from './csv';\nexport * from './csvparseline';\n","import * as Util from '../util/all';\n\n// Parse CSV. \n// Fields are separated by commas or pipe symbol (census uses pipe separators.\n// Quoted fields may contain commas or pipes.\n// Either single quotes or double quotes may be used to surround field value.\n// Spaces at the beginning and end of fields are ignored.\n// Quotes must be the first non-space character in the field (otherwise they are part of the field value).\n//\n\nconst Space = 32;\nconst Tab = 9;\nconst Newline = 10;\nconst CR = 13;\nconst Comma = 44;\nconst SingleQuote = 39;\nconst DoubleQuote = 34;\nconst BackSlash = 92;\nconst Pipe = 124;\n\nfunction isWhite(c: number): boolean\n{\n return c === Space || c === Newline || c === Tab || c == CR;\n}\n\n// Keep calling next() to retrieve next parsed line. Returns false when done. Empty lines are ignored.\n\nexport class ParseMany\n{\n buf: Uint8Array;\n n: number;\n one: ParseOne;\n\n constructor(coder: Util.Coder, buf: Uint8Array)\n {\n this.buf = buf;\n this.n = 0;\n this.one = new ParseOne(coder);\n }\n\n get length(): number { return this.one.length }\n get fields(): string[] { return this.one.fields }\n\n next(): boolean\n {\n // Move past any leading CRLF\n while (this.n < this.buf.length)\n {\n let c = this.buf[this.n];\n if (c == CR || c == Newline)\n this.n++;\n else\n break;\n }\n\n let s = this.n;\n while (this.n < this.buf.length)\n {\n let c = this.buf[this.n];\n if (c == CR || c == Newline)\n break;\n else\n this.n++;\n }\n\n if (s != this.n)\n {\n this.one.setBuf(this.buf.subarray(s, this.n));\n return true;\n }\n else\n return false;\n }\n}\n\nexport class ParseOne\n{\n coder: Util.Coder;\n fields: string[]; // output\n buf: Uint8Array;\n n: number;\n tok: Uint8Array;\n toklen: number;\n infield: boolean;\n quote: number;\n nwhite: number;\n force: boolean;\n\n constructor(coder: Util.Coder, line?: string)\n {\n this.coder = coder;\n if (line)\n this.set(line);\n else\n this.fields = [];\n }\n\n set(line: string): void\n {\n this.setBuf(Util.s2u8(this.coder, line));\n }\n\n setBuf(buf: Uint8Array): void\n {\n this.buf = buf;\n this.fields = [];\n if (!this.tok || this.tok.length < this.buf.length)\n this.tok = new Uint8Array(new ArrayBuffer(this.buf.length));\n this.n = 0;\n this.toklen = 0;\n this.infield = false;\n this.nwhite = 0;\n this.quote = 0;\n this.force = false;\n this.parse();\n }\n\n get length(): number { return this.fields.length }\n\n pushtok(): void\n {\n // Trim trailing whitespace\n this.toklen -= this.nwhite;\n\n if (this.toklen || this.force)\n {\n this.fields.push(Util.u82s(this.coder, this.tok, 0, this.toklen));\n this.toklen = 0;\n }\n this.infield = false;\n this.nwhite = 0;\n this.quote = 0;\n this.force = false;\n }\n\n parse(): void\n {\n while (this.n < this.buf.length)\n {\n let c: number = this.buf[this.n++];\n if (this.quote && c === this.quote)\n {\n this.quote = 0;\n this.nwhite = 0;\n }\n else if (this.quote)\n {\n this.tok[this.toklen++] = c;\n }\n else if (c === Comma || c === Pipe)\n {\n this.force = true;\n this.pushtok();\n this.force = true;\n }\n else if (this.infield)\n {\n this.tok[this.toklen++] = c;\n if (!this.quote && isWhite(c))\n this.nwhite++;\n else\n this.nwhite = 0;\n }\n else if (isWhite(c))\n continue;\n else if (c === SingleQuote || c === DoubleQuote)\n {\n this.quote = c;\n this.infield = true;\n this.force = true;\n }\n else\n {\n this.infield = true;\n this.tok[this.toklen++] = c;\n this.force = true;\n }\n }\n this.pushtok();\n }\n}\n","const reField = /^\\s*(\"([^\"]*(?:\"\"[^\"]*)*)\"|[^,|]*)\\s*[|,]?/;\nconst reQuote = /^\"/;\nconst reAddOne = /[|,]$/;\n\nexport function csvParseLine(s: string): string[]\n{\n let fields: string[] = [];\n\n s = s.trim();\n let addOne = reAddOne.test(s);\n while (s)\n {\n const match = reField.exec(s);\n if (match)\n {\n let field = match[1];\n if (reQuote.test(field))\n {\n // if quoted string, convert quoted double-quotes to single quote\n field = field.slice(1, -1).replace(/\"\"/g, '\"');\n // and remove optional start and end double quote\n field = field.replace(/^[\"]?/, '').replace(/[\"]?$/, '');\n }\n fields.push(field);\n s = s.substring(match[0].length);\n }\n else\n s = null;\n }\n // Handle trailing separator\n if (addOne)\n fields.push('');\n return fields;\n}\n\n","export * from './dataflow';\n","//\n// DataFlow: mechanism for setting up a data-flow dependency graph that gets computed on demand.\n//\n// Semantics are these:\n// 1. The simplest \"atomic\" DataFlow object just has an id(). The id() is used to check for exact\n// equivalence when determining if any dependents need to be recomputed.\n// 2. A DataFlow object can record that it \"uses\" another DataFlow object. If it does, it can use a set of helper\n// routines to track the state of its dependents. When its dependents are \"stale\" (have changed) the computation\n// needs to be run.\n//\n//\n\nexport interface IDataFlow\n{\n dfid: () => any;\n}\n\ninterface UseItem\n{\n name?: string;\n df: IDataFlow,\n id?: any,\n wasfresh?: boolean,\n}\n\nexport class DataFlow\n{\n usesList: UseItem[];\n inCompute: boolean;\n\n constructor()\n {\n this.usesList = [];\n this.inCompute = false;\n }\n\n // override in subclass\n destroy(): void\n {\n this._destroy();\n }\n\n _destroy(): void\n {\n // Premise is that the 'id' value may contain significant storage\n this.usesList.forEach(ui => { delete ui.id });\n }\n\n // override in subclass\n dfid(): any { return null }\n\n // override in subclass\n compute(): void\n {\n }\n\n uses(df: IDataFlow, name?: string): void\n {\n this.usesList.push({ name: name, df: df });\n }\n\n stale(): boolean\n {\n let isstale = false;\n this.usesList.forEach(ui => {\n ui.wasfresh = ui.id !== ui.df.dfid();\n if (ui.wasfresh) isstale = true;\n });\n return isstale;\n }\n\n wasFresh(name: string): boolean\n {\n let ui: UseItem = this.usesList.find((ui: UseItem) => ui.name === name);\n return ui != null && ui.wasfresh;\n }\n\n remember(): void\n {\n this.usesList.forEach(ui => { ui.id = ui.df.dfid() });\n }\n\n ifcompute(): void\n {\n if (this.stale())\n {\n if (this.inCompute)\n console.log(`DataFlow compute reentrancy: ${this.constructor?.name}`);\n this.inCompute = true;\n this.remember();\n this.compute();\n this.inCompute = false;\n }\n }\n}\n\n// Takes callback that, eventually, returns non-null. The return value is both the value and the id.\n// Once the value returns non-null, the callback is never called again.\nexport class DataFlowCallback extends DataFlow\n{\n _value: any;\n _cb: () => any;\n\n constructor(cb: () => any)\n {\n super();\n this._cb = cb;\n }\n\n dfid(): any { if (!this._value) this._value = this._cb(); return this._value }\n}\n\n// Simple helper that maintains a simple monotonically increasing stamp\nexport class DataFlowStamp extends DataFlow\n{\n _stamp: number;\n\n constructor()\n {\n super();\n this._stamp = 0;\n }\n\n dfid(): any { return this._stamp }\n\n stamp(): void { this._stamp++ }\n}\n","export * from './detail';\n","//\n// FormatDetail will take an expression that specifies a format detail lines.\n// Given an object with a set of integer properties, it will evaluate the expression and produce\n// a result { k: string, n: number, v: string } results for displaying the contents of the object.\n//\n// The formatting string is a statement of the form:\n// =expr\n// Expr can be an arithmetic expression using +-/*()?: as operators and variables are the field\n// names of properties on the object passed in. The special field name Tot represents the\n// total of all properties. The expression may also include double-quoted strings that are\n// passed through (e.g. for use as labels = area\" sqm\")\n//\n\nimport * as Util from '../util/all';\n//import { Util } from '@dra2020/baseclient';\n\nconst reIdentifierOrStringOrNumber = /([a-zA-Z0-9_$][a-zA-Z0-9_$]*)|(['\"])(?:(?=(\\\\?))\\3.)*?\\2/g;\nconst reNumber = /[0-9][0-9]*/;\nconst reParam = /^__\\d+$/;\nconst reString = /^['\"]/;\n\n// Number format: (locale|general|integer|currency).precision\n\nfunction formatNumber(n: number, format: string): string\n{\n if (!format) format = 'locale.0';\n if (isNaN(n)) n = 0;\n let parts = format.split('.');\n let fmt = parts[0];\n let precision = Number(parts[1] || '0');\n // Only have implementation for 'locale'\n return n.toLocaleString(undefined, { maximumFractionDigits: precision, minimumFractionDigits: precision } );\n}\n\nexport interface DetailOptions\n{\n numberFormat?: string,\n}\n\nconst DefaultDetailOptions: DetailOptions = { numberFormat: 'locale.0' };\n\nclass Evaluator\n{\n options: DetailOptions;\n expr: string;\n _error: boolean;\n\n constructor(expr: string, options?: DetailOptions)\n {\n this.options = Util.shallowAssignImmutable(DefaultDetailOptions, options);\n this.expr = expr;\n this._error = false;\n }\n\n get error(): boolean { return this._error }\n\n eval(o: any): any\n {\n this._error = false;\n try\n {\n // Convert property names to valid Javascript to ensure expression safety\n o = Util.shallowCopy(o);\n let namemap: any = {};\n Object.keys(o).forEach((n: string, i: number) => {\n namemap[n] = `__${i}`;\n });\n\n // Extract variable names and values from the object\n let names = Object.keys(o);\n let values = Object.values(o);\n let safeexpr = this.expr;\n let safenames = names.map(n => namemap[n]);\n\n // Replace valid identifiers with safe version\n safeexpr = safeexpr.replace(reIdentifierOrStringOrNumber,\n (match) => {\n if (namemap[match])\n return namemap[match];\n else if (reNumber.test(match))\n return match;\n else if (match === '__format' || reString.test(match))\n return match;\n else\n {\n this._error = true;\n return 'invalid';\n }\n });\n\n // Remove any identifiers that aren't the simple parameters to prevent out-of-sandbox execution\n safeexpr = safeexpr.replace(reIdentifierOrStringOrNumber,\n (match) => {\n let valid = reParam.test(match)\n || match === '__format'\n || reString.test(match)\n || reNumber.test(match);\n if (valid)\n return match;\n else\n {\n this._error = true;\n return 'invalid';\n }\n });\n let __format = (n: number) => { return formatNumber(n, this.options.numberFormat) };\n safenames.push('__format');\n values.push(__format);\n\n // Create a new function that accepts the variables as parameters\n // and evaluates the expression\n const func = new Function(...safenames, `return ${safeexpr};`);\n\n // Call the function with the variable values\n let r = func(...values);\n return typeof r === 'string' ? r : ((typeof r !== 'number' || isNaN(r)) ? 0 : r);\n }\n catch (err)\n {\n this._error = true;\n return 0;\n }\n }\n}\n\ninterface DetailItem\n{\n expr?: string,\n text?: string,\n}\n\nexport interface DetailResult\n{\n n: number, // value before formatting\n v: string, // value\n}\n\nconst reInvalidChars = /[\\[\\]\\\\]/;\nconst reExpr = /^=(.*)$/\n\nexport class FormatDetail\n{\n pattern: string;\n items: DetailItem[];\n _error: boolean;\n options: DetailOptions;\n\n constructor(pattern: string, options?: DetailOptions)\n {\n this.options = Util.shallowAssignImmutable(DefaultDetailOptions, options);\n this._error = false;\n this.pattern = pattern.trim();\n let a = reExpr.exec(pattern);\n if (a && a.length == 2)\n {\n const expr = a[1];\n this.items = [ { expr } ];\n }\n else\n {\n this._error = true;\n this.items = [ { text: 'invalid' } ];\n }\n }\n\n get error(): boolean { return this._error }\n\n static prepare(o: any): any\n {\n if (o && o.Tot === undefined && o.Total === undefined)\n {\n // Add a total field\n let t = 0;\n Object.keys(o).forEach((k: string) => {\n let v: any = o[k];\n if (!isNaN(v) && typeof v === 'number')\n t += v;\n });\n\n o = Util.deepCopy(o);\n o.Tot = t;\n o.Total = t;\n }\n return o;\n }\n\n format(o: any): DetailResult\n {\n if (!o)\n {\n this._error = true;\n return { n: 0, v: '' };\n }\n let n: any = 0;\n let av = this.items.map(di => {\n if (di.text)\n return di.text;\n else\n {\n let e = new Evaluator(di.expr, this.options);\n n = e.eval(o);\n if (! this._error)\n this._error = e.error;\n if (typeof n === 'string')\n return n;\n else\n return formatNumber(n, this.options.numberFormat);\n }\n });\n return { n, v: av.join('') }\n }\n}\n","export * from './emit';\n","export class Emit\n{\n onList: any;\n\n constructor()\n {\n this.onList = {};\n }\n\n on(eventName: string, cb: any): void\n {\n let aCB: any = this.onList[eventName];\n if (aCB === undefined)\n {\n aCB = [];\n this.onList[eventName] = aCB;\n }\n aCB.push(cb);\n }\n\n emit(eventName: string, arg1?: any, arg2?: any, arg3?: any): void\n {\n let aCB: any[] = this.onList[eventName];\n if (aCB !== undefined)\n for (let i: number = 0; i < aCB.length; i++)\n (aCB[i])(arg1, arg2, arg3);\n }\n\n off(eventName: string, cb: any): void\n {\n let aCB: any = this.onList[eventName];\n if (aCB !== undefined)\n for (let i: number = 0; i < aCB.length; i++)\n if (aCB[i] === cb)\n {\n aCB.splice(i, 1);\n break;\n }\n }\n}\n","export * from './filterexpr';\n","import * as Util from '../util/all';\n\nconst Space = 32;\nconst Tab = 9;\nconst Newline = 10;\nconst CR = 13;\nconst OpenParen = 40;\nconst CloseParen = 41;\nconst Colon = 58;\nconst SingleQuote = 39;\nconst DoubleQuote = 34;\nconst BackSlash = 92;\nconst Exclamation = 33;\nconst LessThan = 60;\nconst Equal = 61;\nconst GreaterThan = 62;\nconst LowerA = 97;\nconst UpperA = 65;\nconst LowerN = 110;\nconst UpperN = 78;\nconst LowerD = 100;\nconst UpperD = 68;\nconst LowerO = 111;\nconst UpperO = 79;\nconst LowerT = 97;\nconst UpperT = 65;\nconst LowerR = 114;\nconst UpperR = 82;\n\nfunction isWhite(c: number): boolean\n{\n return c === Space || c === Newline || c === Tab || c == CR;\n}\n\nfunction toString(a: any): string\n{\n if (typeof a === 'object' && a && typeof a.value === 'string')\n return a.value;\n return String(a);\n}\n\nenum TokType\n{\n Text,\n OpenParen,\n CloseParen,\n Not,\n And,\n Or,\n Colon,\n GreaterThan,\n GreaterThanEqual,\n Equal,\n LessThan,\n LessThanEqual,\n NotEqual,\n}\n\nfunction tokToText(tt: TokType): string\n{\n switch (tt)\n {\n case TokType.Text: return 'text';\n case TokType.OpenParen: return '(';\n case TokType.CloseParen: return ')';\n case TokType.Not: return 'not';\n case TokType.And: return 'and';\n case TokType.Or: return 'or';\n case TokType.Colon: return ':';\n case TokType.GreaterThan: return '>';\n case TokType.GreaterThanEqual: return '>=';\n case TokType.Equal: return '=';\n case TokType.LessThan: return '<';\n case TokType.LessThanEqual: return '<=';\n case TokType.NotEqual: return '!=';\n }\n}\n\nfunction tokIsUnary(tt: TokType): boolean\n{\n switch (tt)\n {\n case TokType.Text: return false;\n case TokType.OpenParen: return false;\n case TokType.CloseParen: return false;\n case TokType.Not: return true;\n case TokType.And: return false;\n case TokType.Or: return false;\n case TokType.Colon: return false;\n case TokType.GreaterThan: return false;\n case TokType.GreaterThanEqual: return false;\n case TokType.Equal: return false;\n case TokType.LessThan: return false;\n case TokType.LessThanEqual: return false;\n case TokType.NotEqual: return false;\n }\n}\n\nfunction tokIsArithmetic(tt: TokType): boolean\n{\n switch (tt)\n {\n case TokType.Text: return false;\n case TokType.OpenParen: return false;\n case TokType.CloseParen: return false;\n case TokType.Not: return false;\n case TokType.And: return false;\n case TokType.Or: return false;\n case TokType.Colon: return false;\n // Nominally binary, but written as \"prop: < 3\" so appears as unary operator where test is comparative to prop value\n case TokType.GreaterThan: return true;\n case TokType.GreaterThanEqual: return true;\n case TokType.Equal: return true;\n case TokType.LessThan: return true;\n case TokType.LessThanEqual: return true;\n case TokType.NotEqual: return true;\n }\n}\n\nfunction tokIsBinary(tt: TokType): boolean\n{\n switch (tt)\n {\n case TokType.Text: return false;\n case TokType.OpenParen: return false;\n case TokType.CloseParen: return false;\n case TokType.Not: return false;\n case TokType.And: return true;\n case TokType.Or: return true;\n case TokType.Colon: return true;\n // Nominally binary, but written as \"prop: < 3\" so appears as unary operator where test is comparative to prop value\n case TokType.GreaterThan: return false;\n case TokType.GreaterThanEqual: return false;\n case TokType.Equal: return false;\n case TokType.LessThan: return false;\n case TokType.LessThanEqual: return false;\n case TokType.NotEqual: return false;\n }\n}\n\ninterface Token\n{\n tt: TokType;\n text?: string;\n}\n\ninterface Clause\n{\n op: Token;\n operand1?: Clause;\n operand2?: Clause;\n}\n\nenum ParseState\n{\n Start,\n InString,\n Ended\n}\n\nclass Lexer\n{\n coder: Util.Coder;\n tokens: Token[];\n buf: Uint8Array;\n tok: Uint8Array;\n toklen: number;\n n: number;\n\n constructor(coder: Util.Coder, expr?: string)\n {\n this.coder = coder;\n if (expr)\n this.set(expr);\n }\n\n set(expr: string): void\n {\n this.tokens = [];\n this.buf = Util.s2u8(this.coder, expr);\n this.tok = new Uint8Array(new ArrayBuffer(this.buf.length));\n this.toklen = 0;\n this.n = 0;\n this.lex();\n }\n\n pushString(s: string): void\n {\n this.tokens.push({ tt: TokType.Text, text: s });\n }\n\n pushText(bForce: boolean = false): void\n {\n if (this.toklen > 0)\n {\n let text = Util.u82s(this.coder, this.tok, 0, this.toklen).toLowerCase();\n this.toklen = 0;\n if (!bForce && text === 'or')\n this.tokens.push({ tt: TokType.Or });\n else if (!bForce && text === 'and')\n this.tokens.push({ tt: TokType.And });\n else if (!bForce && text === 'not')\n this.tokens.push({ tt: TokType.Not });\n else\n this.pushString(text);\n }\n }\n\n pushSpecial(tt: TokType): void\n {\n this.pushText();\n this.tokens.push({ tt: tt });\n }\n\n lex(): void\n {\n while (this.n < this.buf.length)\n {\n let c: number = this.buf[this.n++];\n if (c == Colon)\n this.pushSpecial(TokType.Colon);\n else if (c == OpenParen)\n this.pushSpecial(TokType.OpenParen);\n else if (c == CloseParen)\n this.pushSpecial(TokType.CloseParen);\n else if (c == SingleQuote || c == DoubleQuote)\n {\n this.pushText();\n while (this.n < this.buf.length)\n {\n let cc = this.buf[this.n++];\n if (cc === c)\n break;\n else\n this.tok[this.toklen++] = cc;\n }\n this.pushText(true);\n }\n else if (isWhite(c))\n this.pushText();\n else if (c === GreaterThan)\n {\n if (this.n < this.buf.length && this.buf[this.n] === Equal)\n {\n this.n++;\n this.pushSpecial(TokType.GreaterThanEqual)\n }\n else\n this.pushSpecial(TokType.GreaterThan)\n }\n else if (c === LessThan)\n {\n if (this.n < this.buf.length && this.buf[this.n] === Equal)\n {\n this.n++;\n this.pushSpecial(TokType.LessThanEqual)\n }\n else\n this.pushSpecial(TokType.LessThan)\n }\n else if (c === Equal)\n this.pushSpecial(TokType.Equal)\n else if (c === Exclamation)\n {\n if (this.n < this.buf.length && this.buf[this.n] === Equal)\n {\n this.n++;\n this.pushSpecial(TokType.NotEqual)\n }\n else\n this.tok[this.toklen++] = c;\n }\n else\n this.tok[this.toklen++] = c;\n }\n this.pushText();\n }\n\n}\n\nclass Parser\n{\n clauses: Clause[];\n\n constructor() { }\n\n get clause(): Clause { return this.clauses && this.clauses.length == 1 ? this.clauses[0] : undefined }\n\n initFromTokens(tokens: Token[])\n {\n this.clausesFromTokens(tokens);\n }\n\n initFromClauses(clauses: Clause[])\n {\n this.clauses = clauses;\n this.combineParenthetical();\n this.convertOpToText();\n this.combineArithmetic();\n this.convertOpToText();\n this.combineBinary(TokType.Colon);\n this.convertOpToText();\n this.combineUnary();\n this.convertOpToText();\n this.combineBinary(TokType.And);\n this.convertOpToText();\n this.combineBinary(TokType.Or);\n this.convertOpToText();\n this.combineImplicitAnd();\n }\n\n convertOpToText(): void\n {\n // walk through and convert naked ops to simple text matches (so \"state: or\" matches oregon rather than being invalid)\n this.clauses.forEach((c, i) => {\n let bad = false;\n switch (c.op.tt)\n {\n case TokType.And:\n case TokType.Or:\n case TokType.Colon:\n if (c.operand1 == null)\n {\n if (i == 0 || i == this.clauses.length-1)\n bad = true;\n else\n {\n let cBefore = this.clauses[i-1];\n if (cBefore.operand1 == null && tokIsBinary(cBefore.op.tt))\n bad = true;\n }\n }\n break;\n case TokType.Not:\n case TokType.GreaterThan:\n case TokType.LessThan:\n case TokType.GreaterThanEqual:\n case TokType.LessThanEqual:\n case TokType.Equal:\n case TokType.NotEqual:\n if (c.operand1 == null && i == this.clauses.length-1)\n bad = true;\n break;\n }\n if (bad)\n c.op = { tt: TokType.Text, text: tokToText(c.op.tt) };\n });\n }\n\n combineParenthetical(): void\n {\n for (let i: number = 0; i < this.clauses.length; i++)\n {\n let c = this.clauses[i];\n if (c.op.tt === TokType.OpenParen)\n {\n let depth = 1;\n let j = i+1;\n for (; j < this.clauses.length; j++)\n {\n let c1 = this.clauses[j];\n if (c1.op.tt === TokType.OpenParen)\n depth++;\n else if (c1.op.tt === TokType.CloseParen)\n depth--;\n if (depth == 0)\n break;\n }\n // Pull out stuff inside parens\n let clauses = this.clauses.splice(i+1, j-(i+1));\n // Parse it\n let parser = new Parser();\n parser.initFromClauses(clauses);\n // Insert it back, deleting parens along the way\n if (parser.clause)\n this.clauses.splice(i, 2, parser.clause);\n else\n this.clauses.splice(i, 2);\n }\n else if (c.op.tt === TokType.CloseParen) // malformed - extra paren\n {\n this.clauses.splice(i, 1);\n i--;\n }\n }\n }\n\n combineArithmetic(): void\n {\n // go backwards to handle not not\n for (let i: number = this.clauses.length-1; i >= 0; i--)\n {\n let c = this.clauses[i];\n if (tokIsArithmetic(c.op.tt))\n {\n let argclause = (i < this.clauses.length-1) ? { op: c.op, operand1: this.clauses[i+1] } : undefined;\n if (argclause)\n this.clauses.splice(i, 2, argclause);\n else\n this.clauses.splice(i, 1);\n }\n }\n }\n\n combineUnary(): void\n {\n // go backwards to handle not not\n for (let i: number = this.clauses.length-1; i >= 0; i--)\n {\n let c = this.clauses[i];\n if (tokIsUnary(c.op.tt))\n {\n let notclause = (i < this.clauses.length-1) ? { op: c.op, operand1: this.clauses[i+1] } : undefined;\n if (notclause)\n this.clauses.splice(i, 2, notclause);\n else\n this.clauses.splice(i, 1);\n }\n }\n }\n\n combineColon(): void\n {\n for (let i: number = 0; i < this.clauses.length; i++)\n {\n let c = this.clauses[i];\n\n if (c.op.tt === TokType.Colon && c.operand1 == null)\n {\n if (i === 0) // malformed, but ignore\n this.clauses.splice(i, 1);\n else\n {\n c = { op: c.op, operand1: this.clauses[i-1], operand2: null };\n this.clauses.splice(i-1, 2, c);\n i--;\n }\n }\n }\n }\n\n combineBinary(tt: TokType): void\n {\n for (let i: number = 0; i < this.clauses.length; i++)\n {\n let c = this.clauses[i];\n\n if (c.op.tt === tt)\n if (c.operand1 == null)\n {\n if (i === 0 || i === this.clauses.length-1) // malformed, but ignore\n this.clauses.splice(i, 1);\n else\n {\n c = { op: c.op, operand1: this.clauses[i-1], operand2: this.clauses[i+1] };\n this.clauses.splice(i-1, 3, c);\n i--;\n }\n }\n else if (c.operand2 == null) // just colon where name binds earlier in combineColon\n {\n if (i === this.clauses.length-1) // malformed, but ignore\n this.clauses.splice(i, 1);\n else\n {\n c.operand2 = this.clauses[i+1];\n this.clauses.splice(i+1, 1);\n }\n }\n }\n }\n\n combineImplicitAnd(): void\n {\n while (this.clauses.length > 1)\n {\n let c: Clause = { op: { tt: TokType.And }, operand1: this.clauses[0], operand2: this.clauses[1] };\n this.clauses.splice(0, 2, c);\n }\n }\n\n clausesFromTokens(tokens: Token[]): void\n {\n let clauses: Clause[] = [];\n // combine sequential text tokens into AND clauses, push rest as distinct clauses\n for (let i: number = 0; i < tokens.length; i++)\n {\n let t = tokens[i];\n if (t.tt === TokType.Text)\n {\n let c: Clause = { op: t };\n let j = i+1;\n for (; j < tokens.length; j++)\n {\n let jt = tokens[j];\n if (jt.tt === TokType.Text)\n c = { op: { tt: TokType.And }, operand1: c, operand2: { op: jt } };\n else\n break;\n }\n clauses.push(c);\n i = j-1;\n }\n else\n clauses.push({ op: t });\n }\n this.initFromClauses(clauses);\n }\n}\n\nfunction wordyDate(s: string): string\n{\n let d = new Date(s);\n let now = new Date();\n let yyyyNow = now.getFullYear();\n let mmmNow = now.getMonth();\n let ddNow = now.getDate();\n\n let mmm = d.getMonth();\n let dd = d.getDate();\n let yyyy = d.getFullYear();\n\n s = Util.prettyDate(d);\n if (yyyyNow === yyyy && mmmNow === mmm && ddNow === dd)\n s = 'today ' + s;\n\n // If I get ambitious, could add \"yesterday\", \"this week\", \"last week\", \"this month\", \"last month\", \"this year\"\n // But this is close enough to match what gets displayed by \"prettyDate\" while also letting selection by month year\n\n return s;\n}\n\nfunction clauseEqual(c1: Clause, c2: Clause): boolean\n{\n if (c1 == null && c2 == null) return true;\n if (c1 == null || c2 == null) return false;\n if (c1.op.tt === c2.op.tt)\n {\n if (c1.op.tt === TokType.Text)\n return c1.op.text === c2.op.text;\n else\n return clauseEqual(c1.operand1, c2.operand1) && clauseEqual(c1.operand2, c2.operand2);\n }\n else\n return false;\n}\n\nfunction containsClause(c: Clause, s: Clause): boolean\n{\n if (clauseEqual(c, s))\n return true;\n if (c == null || s == null) return false;\n return containsClause(c.operand1, s) || containsClause(c.operand2, s);\n}\n\nfunction removeClause(c: Clause, s: Clause): Clause\n{\n if (c == null || (c.op.tt === TokType.Text && c.op.tt !== s.op.tt))\n return c;\n else if (clauseEqual(c, s))\n return null;\n else\n {\n c.operand1 = removeClause(c.operand1, s);\n c.operand2 = removeClause(c.operand2, s);\n if ((c.op.tt === TokType.And || c.op.tt === TokType.Or) && (c.operand1 == null || c.operand2 == null))\n return c.operand1 || c.operand2;\n return c;\n }\n}\n\nexport class FilterExpr\n{\n lexer: Lexer;\n parser: Parser;\n\n constructor(coder: Util.Coder, expr?: string)\n {\n this.lexer = new Lexer(coder);\n this.parser = new Parser;\n if (expr) this.set(expr);\n }\n\n set(expr: string): void\n {\n this.lexer.set(expr);\n this.parser.initFromTokens(this.lexer.tokens);\n }\n\n test(o: any, types?: any): boolean\n {\n return this.testClause(o, types, this.parser.clause);\n }\n\n asString(): string\n {\n return this.asStringClause(this.parser.clause);\n }\n\n containsClause(expr: string): boolean\n {\n let sub = new FilterExpr(this.lexer.coder, expr);\n return containsClause(this.parser.clause, sub.parser.clause);\n }\n\n addClause(expr: string): void\n {\n let sub = new FilterExpr(this.lexer.coder, expr);\n if (! containsClause(this.parser.clause, sub.parser.clause))\n {\n if (this.parser.clause)\n this.parser.clauses = [ { op: { tt: TokType.And }, operand1: this.parser.clause, operand2: sub.parser.clause } ];\n else\n this.parser.clauses = [ sub.parser.clause ];\n }\n }\n\n removeClause(expr: string): void\n {\n if (this.containsClause(expr))\n {\n let sub = new FilterExpr(this.lexer.coder, expr);\n this.parser.clauses = [ removeClause(this.parser.clause, sub.parser.clause) ];\n }\n }\n\n asStringClause(clause: Clause): string\n {\n if (clause == null) return '';\n if (clause.op.tt == TokType.Text)\n {\n this.lexer.set(clause.op.text);\n if (this.lexer.tokens.length == 1 && this.lexer.tokens[0].tt === TokType.Text)\n return clause.op.text;\n else\n return `'${clause.op.text}'`;\n }\n let a: string[] = [];\n if (clause !== this.parser.clause)\n a.push('(');\n switch (clause.op.tt)\n {\n case TokType.And:\n a.push(this.asStringClause(clause.operand1));\n a.push('and');\n a.push(this.asStringClause(clause.operand2));\n break;\n case TokType.Or:\n a.push(this.asStringClause(clause.operand1));\n a.push('or');\n a.push(this.asStringClause(clause.operand2));\n break;\n case TokType.Not:\n a.push('not');\n a.push(this.asStringClause(clause.operand1));\n break;\n case TokType.Colon:\n a.push(`${this.asStringClause(clause.operand1)}:`);\n a.push(this.asStringClause(clause.operand2));\n break;\n case TokType.Equal:\n case TokType.LessThan:\n case TokType.GreaterThan:\n case TokType.LessThanEqual:\n case TokType.GreaterThanEqual:\n case TokType.NotEqual:\n a.push(tokToText(clause.op.tt));\n a.push(this.asStringClause(clause.operand1));\n break;\n default:\n throw 'Unexpected token in asString';\n }\n if (clause !== this.parser.clause)\n a.push(')');\n return a.join(' ');\n }\n\n testClause(o: any, types: any, clause: Clause, prop?: string, relation?: TokType): boolean\n {\n if (clause == null) return true;\n switch (clause.op.tt)\n {\n case TokType.Text:\n for (let p in o) if (o.hasOwnProperty(p) && (prop == null || p.toLowerCase() === prop))\n {\n let s = toString(o[p]);\n if (s)\n {\n let t = types ? types[p] : undefined;\n if (t === 'skip')\n continue;\n if (t && t === 'date')\n s = wordyDate(s);\n s = s.toLowerCase();\n if (relation === undefined)\n {\n if (s.indexOf(clause.op.text) >= 0)\n return true;\n }\n else\n {\n let op2: any = isNaN(Number(clause.op.text)) ? clause.op.text : Number(clause.op.text);\n let op1: any = typeof op2 === 'number' ? Number(s) : s;\n switch (relation)\n {\n case TokType.Equal: return op1 === op2;\n case TokType.LessThan: return op1 < op2;\n case TokType.LessThanEqual: return op1 <= op2;\n case TokType.GreaterThanEqual: return op1 >= op2;\n case TokType.GreaterThan: return op1 > op2;\n case TokType.NotEqual: return op1 !== op2;\n }\n }\n }\n }\n return false;\n\n case TokType.Colon:\n if (clause.operand1 && clause.operand1.op.tt === TokType.Text)\n prop = clause.operand1.op.text;\n return this.testClause(o, types, clause.operand2, prop);\n \n case TokType.Not:\n return ! this.testClause(o, types, clause.operand1, prop);\n\n case TokType.Equal:\n case TokType.LessThan:\n case TokType.GreaterThan:\n case TokType.LessThanEqual:\n case TokType.GreaterThanEqual:\n case TokType.NotEqual:\n return this.testClause(o, types, clause.operand1, prop, clause.op.tt);\n\n case TokType.And:\n return this.testClause(o, types, clause.operand1, prop) && this.testClause(o, types, clause.operand2, prop);\n\n case TokType.Or:\n return this.testClause(o, types, clause.operand1, prop) || this.testClause(o, types, clause.operand2, prop);\n\n default:\n throw 'Unexpected token in clause';\n }\n // NOTREACHED\n }\n}\n","export * from './fsm';\n","// Shared libraries\nimport * as Util from '../util/all';\n\n// States (note these are no longer bit flags - most uses create custom values incrementally from CUSTOM1)\nexport const FSM_STARTING: number = 0;\nexport const FSM_PENDING: number = 1<<0;\nexport const FSM_DONE: number = 1<<1;\nexport const FSM_ERROR: number = 1<<2;\nexport const FSM_CANCEL: number = 5;\nexport const FSM_RELEASED: number = 1<<3;\nexport const FSM_CUSTOM1: number = 1<<4;\nexport const FSM_CUSTOM2: number = 1<<5;\nexport const FSM_CUSTOM3: number = 1<<6;\nexport const FSM_CUSTOM4: number = 1<<7;\nexport const FSM_CUSTOM5: number = 1<<8;\nexport const FSM_CUSTOM6: number = 1<<9;\nexport const FSM_CUSTOM7: number = 1<<10;\nexport const FSM_CUSTOM8: number = 1<<11;\nexport const FSM_CUSTOM9: number = 1<<12;\n\n// polyfill\nlet doLater: any = global && global.setImmediate ? setImmediate : (cb: any) => { setTimeout(cb, 0) };\n\nfunction FsmDone(s: number): boolean\n{\n return (s === FSM_DONE || s === FSM_ERROR || s === FSM_RELEASED || s === FSM_CANCEL);\n}\n\nfunction FsmStateToString(state: number): string\n{\n let a: string[] = [];\n\n if (state === FSM_STARTING)\n return 'starting';\n else\n {\n if (state === FSM_PENDING) a.push('pending');\n if (state === FSM_DONE) a.push('done');\n if (state === FSM_ERROR) a.push('error');\n if (state === FSM_RELEASED) a.push('released');\n if (state === FSM_CUSTOM1) a.push('custom1');\n if (state === FSM_CUSTOM2) a.push('custom2');\n if (state === FSM_CUSTOM3) a.push('custom3');\n if (state === FSM_CUSTOM4) a.push('custom4');\n if (state === FSM_CUSTOM5) a.push('custom5');\n if (state === FSM_CUSTOM6) a.push('custom6');\n if (state === FSM_CUSTOM7) a.push('custom7');\n if (state === FSM_CUSTOM8) a.push('custom8');\n if (state === FSM_CUSTOM9) a.push('custom9');\n return a.join('|');\n }\n}\n\nexport type FsmIndex = Set<Fsm>;\n\nexport class FsmManager\n{\n theId: number;\n theEpoch: number;\n bTickSet: boolean;\n theTickList: FsmIndex;\n theBusyLoopCount: number;\n\n constructor()\n {\n this.theId = 0;\n this.theEpoch = 0;\n this.bTickSet = false;\n this.theTickList = new Set<Fsm>();\n this.theBusyLoopCount = 0;\n this.doTick = this.doTick.bind(this);\n }\n\n forceTick(fsm: Fsm): void\n {\n this.theTickList.add(fsm);\n if (! this.bTickSet)\n {\n this.bTickSet = true;\n doLater(this.doTick);\n }\n }\n\n doTick(): void\n {\n this.bTickSet = false;\n let nLoops = 0;\n\n while (nLoops < 1 && this.theTickList.size > 0)\n {\n nLoops++;\n let thisTickList = this.theTickList;\n this.theTickList = new Set<Fsm>();\n\n thisTickList.forEach((f: Fsm) => f.tick());\n }\n\n if (this.theTickList.size == 0)\n this.theBusyLoopCount = 0;\n else\n this.theBusyLoopCount++;\n\n this.theEpoch++;\n }\n}\n\nexport interface FsmEnvironment\n{\n fsmManager: FsmManager;\n}\n\nexport class Fsm\n{\n id: number;\n state: number;\n dependentError: boolean;\n epochDone: number;\n _env: FsmEnvironment;\n _waitOn: FsmIndex;\n _waitedOn: FsmIndex;\n\n constructor(env: FsmEnvironment)\n {\n this._env = env;\n this.id = this.manager.theId++;\n this.state = FSM_STARTING;\n this.dependentError = false;\n this.epochDone = -1;\n this._waitOn = new Set<Fsm>();\n this._waitedOn = new Set<Fsm>();\n this.manager.forceTick(this);\n }\n\n get env(): FsmEnvironment { return this._env; }\n get manager(): FsmManager { return this.env.fsmManager; }\n\n get done(): boolean { return FsmDone(this.state) }\n\n get ready(): boolean { return !this.done && this.nWaitOn == 0 }\n\n get iserror(): boolean { return this.state === FSM_ERROR || this.state === FSM_CANCEL }\n\n get isDependentError(): boolean { return this.dependentError }\n\n // Override if you need to do more than marking complete\n cancel(): void { this.setState(FSM_CANCEL) }\n\n setDependentError(): void { this.dependentError = true }\n\n clearDependentError(): void { this.dependentError = false }\n\n get ticked(): boolean { return this.done && this.manager.theEpoch > this.epochDone }\n\n get nWaitOn(): number { return this._waitOn.size }\n\n get nWaitedOn(): number { return this._waitedOn.size }\n\n waitOn(fsm: Fsm | Fsm[]): Fsm\n {\n if (fsm == null)\n return this;\n else if (Array.isArray(fsm))\n {\n fsm.forEach((f: Fsm) => this.waitOn(f));\n }\n else\n {\n if (fsm.done)\n {\n // If dependency is already done, don't add to waitOn list but ensure that\n // this Fsm gets ticked during next epoch. This is because the dependent tick\n // only happens when the dependency state is changed.\n this.manager.forceTick(this);\n if (fsm.iserror)\n this.setDependentError();\n }\n else\n {\n this._waitOn.add(fsm);\n fsm._waitedOn.add(this);\n }\n }\n return this;\n }\n\n setState(state: number): void\n {\n this.state = state;\n if (this.done)\n {\n // Loop because completion might add more to wait list\n while (this.nWaitedOn)\n {\n let waitedOn = this._waitedOn;\n this._waitedOn = new Set<Fsm>();\n waitedOn.forEach((f: Fsm) => { f._completed(this); this.manager.forceTick(f) });\n }\n\n this.epochDone = this.manager.theEpoch;\n }\n this.manager.forceTick(this);\n }\n\n // Can override if need to do more here\n end(state: number = FSM_DONE): void\n {\n this.setState(state);\n }\n\n // Override if subclass needs to respond to individual items completing rather than waiting\n // in tick. Useful to avoid O(n^2) if waiting on lots of items and not wanting to do a linear\n // scan for completed FSMs. Or to not require separate bookkeeping for list of dependents.\n waitOnCompleted(f: Fsm): void { }\n\n _completed(f: Fsm): void\n {\n if (f.iserror) this.setDependentError();\n if (f.done && this._waitOn.has(f))\n {\n this._waitOn.delete(f);\n this.waitOnCompleted(f);\n }\n }\n\n tick(): void\n {\n }\n}\n\n// Launches callback provided when the associated Fsm (or Fsm array) completes.\nexport class FsmOnDone extends Fsm\n{\n cb: any;\n fsm: Fsm | Fsm[];\n\n constructor(env: FsmEnvironment, fsm: Fsm | Fsm[], cb: any)\n {\n super(env);\n this.waitOn(fsm);\n this.fsm = fsm;\n this.cb = cb;\n }\n\n tick(): void\n {\n if (this.ready && this.state == FSM_STARTING)\n {\n this.setState(this.isDependentError ? FSM_ERROR : FSM_DONE);\n this.cb(this.fsm);\n }\n }\n}\n\nexport class FsmSleep extends Fsm\n{\n delay: number;\n timeoutHandle: any;\n\n constructor(env: FsmEnvironment, delay: number)\n {\n super(env);\n this.delay = delay;\n }\n\n tick(): void\n {\n // This allows canceling by simply setting state to done\n if (this.done && this.timeoutHandle !== undefined)\n {\n clearTimeout(this.timeoutHandle);\n delete this.timeoutHandle;\n }\n else if (this.ready && this.state === FSM_STARTING)\n {\n this.setState(FSM_PENDING);\n this.timeoutHandle = setTimeout(() => {\n delete this.timeoutHandle;\n this.setState(FSM_DONE)\n }, this.delay);\n }\n }\n}\n\nexport type SerializerIndex = { [key: string]: Fsm };\n\nexport class FsmSerializer extends Fsm\n{\n index: SerializerIndex;\n\n constructor(env: FsmEnvironment)\n {\n super(env);\n this.index = {};\n }\n\n serialize(id: string, fsm?: Fsm): Fsm\n {\n let prev = this.index[id];\n if (prev && !fsm) return prev;\n if (prev !== undefined)\n fsm.waitOn(prev);\n this.index[id] = fsm;\n if (this.done)\n this.setState(FSM_STARTING);\n this.waitOn(fsm);\n return prev;\n }\n\n tick(): void\n {\n // If fully quiescent, take advantage to clear the waiting cache.\n if (this.ready && this.state == FSM_STARTING)\n {\n this.index = {};\n this.setState(FSM_DONE);\n }\n }\n}\n\n// The FsmTracker class provides a mechanism for serializing a set of finite state\n// machines identified by a consistent unique identifier. A finite state machine is\n// \"tracked\" until completion. If any other finite state machine calls \"maybeWait\"\n// while any other are tracked and pending, that FSM will wait for the others to\n// complete.\n//\n\nclass FsmTrackerWrap extends Fsm\n{\n index: FsmTracker;\n uid: string;\n fsm: Fsm;\n\n constructor(env: FsmEnvironment, index: FsmTracker, uid: string, fsm: Fsm)\n {\n super(env);\n this.index = index;\n this.uid = uid;\n this.fsm = fsm;\n index._track(uid, fsm);\n this.waitOn(fsm);\n }\n\n tick(): void\n {\n if (this.ready && this.state == FSM_STARTING)\n {\n this.index._untrack(this.uid, this.fsm);\n this.setState(FSM_DONE);\n }\n }\n}\n\ntype FsmArrayMap = { [key: string]: Fsm[] };\n\nexport class FsmTracker\n{\n env: FsmEnvironment;\n map: FsmArrayMap;\n\n constructor(env: FsmEnvironment)\n {\n this.env = env;\n this.map = {};\n }\n\n _track(uid: string, fsm: Fsm): void\n {\n let a = this.map[uid];\n if (a === undefined)\n {\n a = [];\n this.map[uid] = a;\n }\n a.push(fsm);\n }\n\n _untrack(uid: string, fsm: Fsm): void\n {\n let a = this.map[uid];\n if (a)\n {\n for (let i: number = 0; i < a.length; i++)\n if (a[i] === fsm)\n {\n if (a.length == 1)\n delete this.map[uid];\n else\n a.splice(i, 1);\n break;\n }\n }\n }\n\n track(uid: string, fsm: Fsm): Fsm\n {\n return new FsmTrackerWrap(this.env, this, uid, fsm);\n }\n\n maybeWait(uid: string, fsm: Fsm): void\n {\n fsm.waitOn(this.map[uid]);\n }\n}\n\n\n// FsmLoop: repeat the Fsm passed in (resetting to STARTING state after finished) at some minimum interval.\n// Assumes that the Fsm can be correctly reset and restarted by setting the state.\n//\n\nexport interface LoopOptions\n{\n minRepeatInterval?: number;\n exitOnError?: boolean;\n}\n\nexport const DefaultLoopOptions = { minRepeatInterval: 0, exitOnError: true };\n\nconst FSM_DELAYING = FSM_CUSTOM1;\n\nexport class FsmLoop extends Fsm\n{\n fsm: Fsm;\n options: LoopOptions;\n elapsed: Util.Elapsed;\n\n constructor(env: FsmEnvironment, fsm: Fsm, options?: LoopOptions)\n {\n super(env);\n this.fsm = fsm;\n this.elapsed = new Util.Elapsed();\n this.options = Util.shallowAssignImmutable(DefaultLoopOptions, options);\n this.waitOn(fsm);\n }\n\n tick(): void\n {\n if (this.ready && this.isDependentError)\n {\n if (this.options.exitOnError)\n this.setState(FSM_ERROR);\n else\n this.clearDependentError();\n // Fall through\n }\n\n if (this.ready)\n {\n switch (this.state)\n {\n case FSM_STARTING:\n let msLeft = this.options.minRepeatInterval - this.elapsed.ms();\n if (msLeft > 0)\n this.waitOn(new FsmSleep(this.env, msLeft));\n this.setState(FSM_DELAYING);\n break;\n\n case FSM_DELAYING:\n this.elapsed.start();\n this.fsm.setState(FSM_STARTING);\n this.waitOn(this.fsm);\n this.setState(FSM_STARTING);\n break;\n }\n }\n }\n}\n\nexport interface ISet\n{\n test: (o: any) => boolean;\n reset: () => void;\n}\n\nexport class FsmArray extends Fsm\n{\n a: any[];\n iset: ISet;\n\n constructor(env: FsmEnvironment, iset?: ISet)\n {\n super(env);\n this.iset = iset;\n this.a = [];\n }\n\n push(o: any): void\n {\n if (this.iset == null || !this.iset.test(o))\n {\n if (! this.done) this.setState(FSM_DONE);\n this.a.push(o);\n }\n }\n\n concat(a: any[]): void\n {\n if (a)\n {\n for (let i: number = 0; i < a.length; i++)\n this.push(a[i]);\n }\n }\n\n splice(i?: number, n?: number): void\n {\n if (i === undefined)\n this.reset();\n else\n {\n this.a.splice(i, n);\n if (this.a.length == 0)\n this.reset();\n }\n }\n\n reset(): void\n {\n this.a = [];\n if (this.iset) this.iset.reset();\n this.setState(FSM_STARTING);\n }\n}\n","export * from './geo';\nexport * from './vfeature';\nexport * from './flexname';\nexport * from './multiblockmapping';\nexport * from './ensurecentroid';\n","import * as geojson from 'geojson';\nimport * as Util from '../util/all'\nimport * as Poly from '../poly/all'\nimport * as G from './geo'\n\nfunction oneNumberOf(f: G.GeoFeature, props: string[]): number\n{\n for (let i = 0; i < props.length; i++)\n if (f.properties[props[i]])\n return Number(f.properties[props[i]]);\n return 0;\n}\n\nexport function ensureCentroidInFeature(f: G.GeoFeature): void\n{\n if (f.geometry && f.properties.labelx === undefined)\n {\n f.properties.labelx = oneNumberOf(f, ['INTPTLON30', 'INTPTLON20','INTPTLON10','INTPTLON']);\n f.properties.labely = oneNumberOf(f, ['INTPTLAT30', 'INTPTLAT20','INTPTLAT10','INTPTLAT']);\n if (f.properties.labelx && f.properties.labely)\n if (! Poly.polyContainsPoint(f, f.properties.labelx, f.properties.labely))\n {\n delete f.properties.labelx;\n delete f.properties.labely;\n }\n\n // If internal point not specified, compute it\n if (!f.properties.labelx || !f.properties.labely)\n {\n let result = Poly.polyLabel(f);\n f.properties.labelx = Util.precisionRound(result.x, 6);\n f.properties.labely = Util.precisionRound(result.y, 6);\n }\n\n delete f.properties.INTPTLAT30;\n delete f.properties.INTPTLON30;\n delete f.properties.INTPTLAT20;\n delete f.properties.INTPTLON20;\n delete f.properties.INTPTLAT10;\n delete f.properties.INTPTLON10;\n delete f.properties.INTPTLAT;\n delete f.properties.INTPTLON;\n }\n}\n\nexport function ensureCentroidInCollection(col: G.GeoFeatureCollection): void\n{\n col.features.forEach(ensureCentroidInFeature);\n}\n","export function flexName(f: any): string\n{\n if (!f || !f.properties) return null;\n\n let oneOf = [ 'name', 'entry_name', 'Name', 'NAME',\n 'NAMELSAD', 'namelsad',\n 'NAME10', 'name10',\n 'NAMELSAD10', 'namelsad10',\n 'NAME20', 'name20',\n 'NAMELSAD20', 'namelsad20',\n 'NAME30', 'name30',\n 'NAMELSAD30', 'namelsad30',\n ];\n\n for (let i = 0; i < oneOf.length; i++)\n if (f.properties[oneOf[i]] !== undefined)\n {\n let name: string = f.properties[oneOf[i]];\n if (name.startsWith('Block Group') && f.properties['GEOID10'] !== undefined)\n return String(f.properties['GEOID10']).substr(2);\n name = name.replace('Voting Districts', '');\n name = name.replace('Precinct', '');\n return name.replace('Voting District', '').trim();\n }\n\n return `${f.properties.id}`;\n}\n","import * as geojson from 'geojson';\nimport * as Util from '../util/all'\nimport * as Poly from '../poly/all'\n\nexport type GeoProperties = geojson.GeoJsonProperties;\nexport type GeoFeature = geojson.Feature;\nexport type GeoFeatureArray = GeoFeature[];\nexport type GeoFeatureCollection = geojson.FeatureCollection;\nexport type GeoCentroidMap = { [geoid: string]: { x: number, y: number } };\nexport type HideMap = { [id: string]: boolean };\n\n// Tracing/debugging aid\nlet metrics: { [action: string]: { count: number, total: number } } = {};\nconst MinRecordTotal = 500;\n\nfunction record(action: string, total: number): void\n{\n if (total > MinRecordTotal)\n {\n if (metrics[action] === undefined)\n metrics[action] = { count: 0, total: 0 };\n metrics[action].count++;\n metrics[action].total += total;\n }\n}\n\nexport function dumpMetrics(): void\n{\n Object.keys(metrics).forEach(action => {\n console.log(`G.${action}: count: ${metrics[action].count}, total: ${metrics[action].total}`);\n });\n metrics = {};\n}\n\nexport function hidemapConcat(...args: HideMap[]): HideMap\n{\n let hm: HideMap = {};\n\n for (let i = 0; i < args.length; i++)\n if (args[i]) Object.keys(args[i]).forEach(id => hm[id] = true);\n return hm;\n}\n\nexport interface NormalizeOptions\n{\n joinPolygons?: boolean,\n checkRewind?: boolean,\n ensureID?: boolean,\n}\nconst NormalizeAll: NormalizeOptions = { joinPolygons: true, checkRewind: true, ensureID: true };\n\nexport function applyCanonicalID(col: GeoFeatureCollection): void\n{\n if (col && Array.isArray(col.features))\n col.features.forEach((f: GeoFeature, n: number) => { f.properties.id = String(n+1) });\n}\n\nexport function isValidId(col: GeoFeatureCollection): boolean\n{\n if (! col || ! Array.isArray(col.features)) return true;\n\n let set = new Set<string>();\n for (let i = 0; i < col.features.length; i++)\n {\n let f = col.features[i];\n if (typeof f.properties.id === 'number') f.properties.id = String(f.properties.id); // Fix old 2016_BG collections\n if (typeof f.properties.id !== 'string') return false; // id must be string\n if (set.has(f.properties.id)) return false; // id must be unique\n set.add(f.properties.id);\n }\n return true;\n}\n\n// set the canonical 'id' property from the best property value.\n// if joinPolygons is true, we do not enforce uniqueness.\n//\n\nexport function geoEnsureID(col: GeoFeatureCollection, options?: NormalizeOptions): void\n{\n options = Util.shallowAssignImmutable({}, options);\n\n let prop: string;\n const props = [ 'id', 'GEOID', 'GEOID10', 'GEOID20', 'GEOID30', 'DISTRICT', 'DISTRICTNO', 'DISTRICTNAME' ];\n\n if (col && col.features && col.features.length > 0)\n {\n let f = col.features[0];\n props.forEach(p => {\n if (prop === undefined)\n if (f.properties[p] !== undefined)\n prop = p;\n else\n {\n p = p.toLowerCase();\n if (f.properties[p] !== undefined)\n prop = p\n }\n });\n if (prop)\n {\n col.features.forEach(f => { f.properties.id = f.properties[prop] });\n if (! isValidId(col))\n applyCanonicalID(col);\n }\n else\n applyCanonicalID(col);\n }\n}\n\nexport function geoNormalizeFeature(f: any, options?: NormalizeOptions): GeoFeature\n{\n options = Util.shallowAssignImmutable({}, options);\n\n if (options.checkRewind)\n Poly.featureRewind(f);\n\n return f;\n}\n\nfunction onlyPolygons(col: GeoFeatureCollection): boolean\n{\n if (col && Array.isArray(col.features))\n for (let i = 0; i < col.features.length; i++)\n {\n let f = col.features[i];\n if (f.geometry && f.geometry.type === 'MultiPolygon')\n return false;\n }\n\n return true;\n}\n\nfunction mergePolygon(f1: any, f2: any): any\n{\n if (!f1) return f2;\n if (!f2) return f1;\n if (f1.geometry.type !== 'Polygon' && f1.geometry.type !== 'MultiPolygon')\n return f1;\n if (f2.geometry.type !== 'Polygon' && f2.geometry.type !== 'MultiPolygon')\n return f2;\n if (f1.geometry.type === 'Polygon')\n {\n f1.geometry.type = 'MultiPolygon';\n if (f2.geometry.type === 'Polygon')\n f1.geometry.coordinates = [ f1.geometry.coordinates, f2.geometry.coordinates ];\n else\n f1.geometry.coordinates = [ f1.geometry.coordinates, ...f2.geometry.coordinates ];\n }\n else\n {\n if (f2.geometry.type === 'Polygon')\n f1.geometry.coordinates.push(f2.geometry.coordinates);\n else\n f1.geometry.coordinates = [...f1.geometry.coordinates, ...f2.geometry.coordinates];\n }\n return f1;\n}\n\nexport function geoNormalizeCollection(col: GeoFeatureCollection, options?: NormalizeOptions): GeoFeatureCollection\n{\n options = Util.shallowAssignImmutable(NormalizeAll, options);\n\n // Normalize individual features\n if (col && Array.isArray(col.features))\n col.features = col.features.filter((f: any) => f.properties && f.geometry && f.geometry.coordinates);\n if (col && Array.isArray(col.features))\n col.features.forEach((f: GeoFeature) => geoNormalizeFeature(f, options));\n\n // Ensure ID\n if (options.ensureID)\n geoEnsureID(col, options);\n\n // Merge polygons into multi-polygons based on id?\n if (options.ensureID && options.joinPolygons && onlyPolygons(col))\n {\n let map: GeoFeatureMap = {};\n col.features.forEach(f => { let id = f.properties.id; map[id] = mergePolygon(map[id], f) });\n col.features = Object.values(map);\n }\n return col;\n}\n\nexport function geoCollectionToMap(col: GeoFeatureCollection): GeoFeatureMap\n{\n if (col == null) return null;\n let map: GeoFeatureMap = {};\n col.features.forEach((f: GeoFeature) => { map[String(f.properties.id)] = f; });\n return map;\n}\n\nexport function geoMapToCollection(map: GeoFeatureMap): GeoFeatureCollection\n{\n if (Util.countKeys(map) == 0) return null;\n return geoMapToCollectionNonNull(map);\n}\n\nexport function geoMapToCollectionNonNull(map: GeoFeatureMap): GeoFeatureCollection\n{\n if (map == null) return null;\n let col: GeoFeatureCollection = { type: 'FeatureCollection', features: [] };\n Object.keys(map).forEach((geoid: string) => { col.features.push(map[geoid]) });\n return col;\n}\n\nexport function geoCollectionToTopo(col: GeoFeatureCollection): Poly.Topo\n{\n let topo = Poly.topoFromCollection(col);\n Poly.topoPack(topo);\n record('coltotopo', col.features.length);\n if ((col as any).datasets) (topo as any).datasets = (col as any).datasets;\n return topo;\n}\n\nexport function geoCollectionToTopoNonNull(col: GeoFeatureCollection): Poly.Topo\n{\n return geoCollectionToTopo(col);\n}\n\nexport function geoTopoToCollection(topo: Poly.Topo): GeoFeatureCollection\n{\n let col = Poly.topoToCollection(topo);\n Poly.featurePack(col);\n record('topotocol', col.features.length);\n if ((topo as any).datasets) (col as any).datasets = (topo as any).datasets;\n return col;\n}\n\nexport function geoTopoToCollectionNonNull(topo: Poly.Topo): GeoFeatureCollection\n{\n return geoTopoToCollection(topo);\n}\n\nexport interface GeoFeatureMap\n{\n [id: string]: GeoFeature; // Maps id to GeoFeature\n}\n\nexport type FeatureFunc = (f: GeoFeature) => void;\n\ninterface GeoEntry\n{\n tag: string;\n col?: GeoFeatureCollection;\n map?: GeoFeatureMap;\n topo?: Poly.Topo;\n}\ntype GeoEntryMap = { [tag: string]: GeoEntry };\n\nexport function geoEqual(m1: GeoMultiCollection, m2: GeoMultiCollection): boolean\n{\n let n1 = m1 ? m1.length : 0;\n let n2 = m2 ? m2.length : 0;\n \n if (n1 != n2) return false;\n if (n1 == 0) return true;\n\n let n = 0;\n let eq = true;\n m1.forEach(f => { if (eq && !m2.find(f.properties.id)) eq = false });\n return eq;\n}\n\nexport function geoMapEqual(m1: GeoFeatureMap, m2: GeoFeatureMap): boolean\n{\n if (m1 == null) return Util.isEmpty(m2);\n if (m2 == null) return Util.isEmpty(m1);\n let p: string;\n for (p in m1) if (m1.hasOwnProperty(p))\n if (m1[p] !== m2[p])\n return false;\n for (p in m2) if (m2.hasOwnProperty(p))\n if (m1[p] === undefined)\n return false;\n return true;\n}\n\nexport class GeoMultiCollection\n{\n entries: GeoEntryMap;\n all: GeoEntry;\n hidden: HideMap;\n stamp: number;\n\n constructor(tag?: string, topo?: Poly.Topo, col?: GeoFeatureCollection, map?: GeoFeatureMap)\n {\n this.stamp = Math.trunc(Math.random() * Number.MAX_SAFE_INTEGER / 2);\n this.empty();\n if (tag)\n this.add(tag, topo, col, map);\n }\n\n empty()\n {\n this.all = { tag: 'all' };\n this.entries = {};\n this.hidden = {};\n this._onChange();\n }\n\n get nEntries(): number { return Util.countKeys(this.entries) }\n\n nthEntry(n: number): GeoEntry\n {\n return Util.nthProperty(this.entries, n) as GeoEntry;\n }\n\n add(tag: string, topo: Poly.Topo, col: GeoFeatureCollection, map: GeoFeatureMap): void\n {\n let entry = this.entries[tag];\n if (entry === undefined) entry = { tag: tag }, this.entries[tag] = entry;\n if ((topo && entry.topo !== topo) || (col && entry.col !== col) || (map && entry.map !== map))\n {\n entry.topo = topo;\n entry.col = col;\n entry.map = map;\n this._onChange();\n }\n else if (topo == null && col == null && map == null)\n this.remove(tag);\n }\n\n addMulti(multi: GeoMultiCollection): void\n {\n multi.forEachEntry(e => {\n this.add(e.tag, e.topo, e.col, e.map);\n });\n for (let p in multi.hidden) if (multi.hidden.hasOwnProperty(p))\n {\n this.hidden[p] = true;\n this._onChange();\n }\n }\n\n // Add the \"all\" collection from the passed in multi, but do not force compute of any things not computed yet.\n addAll(tag: string, multi: GeoMultiCollection): void\n {\n if (multi == null || Util.isEmpty(multi.entries))\n this.remove(tag);\n else\n {\n let nEntries = Util.countKeys(multi.entries);\n if (nEntries)\n {\n // Make sure all collection is created\n if (!multi.all.topo && !multi.all.col && !multi.all.map)\n {\n // Create cheapest one (collection if I need to create, otherwise copy from single entry)\n if (nEntries > 1)\n multi.allCol();\n else\n {\n let e = multi.nthEntry(0);\n multi.all.topo = e.topo;\n multi.all.col = e.col;\n multi.all.map = e.map;\n }\n }\n this.add(tag, multi.all.topo, multi.all.col, multi.all.map);\n }\n }\n }\n\n remove(tag: string): void\n {\n let entry = this.entries[tag];\n if (entry)\n {\n if (entry.topo || entry.col || entry.map)\n this._onChange();\n delete this.entries[tag];\n }\n }\n\n _onChange(): void\n {\n if (this.all.topo || this.all.col || this.all.map)\n this.all = { tag: 'all' };\n this.stamp++;\n }\n\n _col(e: GeoEntry): GeoFeatureCollection\n {\n if (e == null) return null;\n if (! e.col)\n {\n if (e.map)\n e.col = geoMapToCollectionNonNull(e.map);\n else if (e.topo)\n e.col = geoTopoToCollectionNonNull(e.topo);\n }\n return e.col;\n }\n\n _map(e: GeoEntry): GeoFeatureMap\n {\n if (e == null) return null;\n if (! e.map)\n {\n if (e.col)\n e.map = geoCollectionToMap(e.col);\n else if (e.topo)\n {\n e.col = geoTopoToCollectionNonNull(e.topo);\n e.map = geoCollectionToMap(e.col);\n }\n }\n return e.map;\n }\n\n _topo(e: GeoEntry): Poly.Topo\n {\n if (e == null) return null;\n if (! e.topo)\n {\n if (e.col)\n e.topo = geoCollectionToTopoNonNull(e.col);\n else if (e.map)\n {\n e.col = geoMapToCollectionNonNull(e.map);\n e.topo = geoCollectionToTopoNonNull(e.col);\n }\n }\n return e.topo;\n }\n\n _length(e: GeoEntry): number\n {\n if (e == null) return 0;\n return e.col ? e.col.features.length\n : e.map ? Util.countKeys(e.map)\n : e.topo ? Util.countKeys(e.topo.objects)\n : 0;\n }\n\n colOf(tag: string): GeoFeatureCollection { return this._col(this.entries[tag]); }\n mapOf(tag: string): GeoFeatureMap { return this._map(this.entries[tag]); }\n topoOf(tag: string): Poly.Topo { return this._topo(this.entries[tag]); }\n\n forEachEntry(cb: (e: GeoEntry) => void): void\n {\n Object.values(this.entries).forEach(cb);\n }\n\n allCol(): GeoFeatureCollection\n {\n if (this.nEntries == 0) return null;\n if (! this.all.col)\n {\n // optimise case where one entry\n let n = this.nEntries;\n if (n == 1)\n {\n let e = this.nthEntry(0);\n this.all.col = this._col(e);\n this.all.topo = this.all.topo || e.topo;\n this.all.map = this.all.map || e.map;\n }\n else\n {\n // Going from map to collection guarantees that any duplicates are removed\n this.all.col = geoMapToCollectionNonNull(this.allMap());\n this.forEachEntry(e => {\n if (e.col && (e.col as any).datasets)\n (this.all.col as any).datasets = (e.col as any).datasets;\n if (e.topo && (e.topo as any).datasets)\n (this.all.col as any).datasets = (e.topo as any).datasets;\n });\n }\n }\n return this.all.col;\n }\n\n allMap(): GeoFeatureMap\n {\n if (this.nEntries == 0) return null;\n if (! this.all.map)\n {\n // optimise case where one entry\n let n = this.nEntries;\n if (n == 1)\n {\n let e = this.nthEntry(0);\n this.all.map = this._map(e);\n this.all.topo = this.all.topo || e.topo;\n this.all.col = this.all.col || e.col;\n }\n else\n {\n let map: GeoFeatureMap = {};\n this.all.map = map;\n this.forEachEntry(e => {\n let col = this._col(e); // convert feature geometry from topo to polygon\n col.features.forEach(f => {\n let id = f.properties.id;\n if (! this.hidden[id])\n map[id] = f;\n });\n });\n }\n }\n return this.all.map;\n }\n\n allTopo(): Poly.Topo\n {\n // Note that you can't actually switch between allNewTopo and allOldTopo\n // without calling _onChange between the calls to reset the 'all' tag.\n return this.allNewTopo();\n }\n\n allOldTopo(): Poly.Topo\n {\n if (this.nEntries == 0) return null;\n if (! this.all.topo)\n {\n // optimise case where one entry\n let n = this.nEntries;\n if (n == 1)\n {\n let e = this.nthEntry(0);\n this.all.topo = this._topo(e);\n this.all.col = this.all.col || e.col;\n this.all.map = this.all.map || e.map;\n }\n else\n {\n // Old-style, goes through map (to filter hidden) and then collection\n this.all.topo = geoCollectionToTopoNonNull(this.allCol());\n }\n }\n return this.all.topo;\n }\n\n allNewTopo(): Poly.Topo\n {\n if (this.nEntries == 0) return null;\n if (! this.all.topo)\n {\n // optimise case where one entry\n let n = this.nEntries;\n let e = this.nthEntry(0);\n if (n == 1)\n {\n // Note that this is potentially invalid shortcut when some features are hidden from base geometry.\n // Could test overall count of objects vs. this count to check.\n this.all.topo = this._topo(e);\n this.all.col = this.all.col || e.col;\n this.all.map = this.all.map || e.map;\n }\n else if (e.topo)\n {\n // Old-style, goes through map (to filter hidden) and then collection\n // this.all.topo = geoCollectionToTopoNonNull(this.allCol());\n // New style, use splice on packed topologies\n let filterout = Util.isEmpty(this.hidden) ? null : this.hidden; // splice function requires NULL for empty\n let topoarray = Object.values(this.entries).filter((e: GeoEntry) => this._length(e) > 0)\n .map((e: GeoEntry) => { return { topology: this._topo(e), filterout } });\n this.all.topo = topoarray.length == 0 ? null : topoarray.length == 1 ? topoarray[0].topology : Poly.topoSplice(topoarray);\n }\n else\n // Old-style, goes through map (to filter hidden) and then collection\n this.all.topo = geoCollectionToTopoNonNull(this.allCol());\n }\n return this.all.topo;\n }\n\n hideSetAll(hm: HideMap): void\n {\n // Prevents onChange when resetting to same value\n if (! Util.shallowEqual(this.hidden, hm))\n {\n this.showAll();\n this.hide(hm);\n }\n }\n\n hide(id: any): void\n {\n if (id)\n {\n if (typeof id === 'string')\n {\n if (! this.hidden[id])\n {\n this.hidden[id] = true;\n this._onChange();\n }\n }\n else if (Array.isArray(id))\n id.forEach((i: any) => this.hide(i));\n else if (typeof id === 'object')\n for (let p in id) if (id.hasOwnProperty(p)) this.hide(p);\n }\n }\n\n show(id: any): void\n {\n if (id)\n {\n if (typeof id === 'string')\n {\n if (this.hidden[id])\n {\n delete this.hidden[id];\n this._onChange();\n }\n }\n else if (Array.isArray(id))\n id.forEach((i: any) => this.show(i))\n else if (typeof id === 'object')\n for (let p in id) if (id.hasOwnProperty(p)) this.show(p);\n }\n }\n\n showAll(): void\n {\n if (! Util.isEmpty(this.hidden))\n {\n this.hidden = {};\n this._onChange();\n }\n }\n\n get length(): number\n {\n let n = 0;\n this.forEachEntry(e => n += this._length(e));\n return n;\n }\n\n // Use forEach in preference to iteration using this function\n nthFeature(n: number): GeoFeature\n {\n let found: GeoFeature;\n\n if (n >= 0)\n this.forEachEntry(e => {\n if (found) return;\n let col = this._col(e);\n if (col)\n if (n > col.features.length)\n n -= col.features.length;\n else\n found = col.features[n];\n });\n return found;\n }\n\n nthFilteredFeature(n: number, cb: (f: GeoFeature) => boolean)\n {\n let found: GeoFeature;\n\n this.forEachEntry(e => {\n if (found) return;\n let col = this._col(e);\n if (col)\n for (let i = 0; !found && i < col.features.length; i++)\n {\n let f = col.features[i];\n if (this.hidden[f.properties.id] === undefined && cb(f))\n {\n if (n === 0)\n {\n found = f;\n break;\n }\n n--;\n }\n }\n });\n return found;\n }\n\n forEach(cb: FeatureFunc): void\n {\n this.forEachEntry(e => {\n if (e.col)\n e.col.features.forEach(f => { if (! this.hidden[f.properties.id]) cb(f) })\n else if (e.topo)\n Object.values(e.topo.objects).forEach((f: GeoFeature) => { if (! this.hidden[f.properties.id]) cb(f) });\n else if (e.map)\n Object.values(e.map).forEach(f => { if (! this.hidden[f.properties.id]) cb(f) });\n });\n }\n\n map(cb: (f: GeoFeature) => GeoFeature): GeoFeature[]\n {\n let features: GeoFeature[] = [];\n this.forEach((f: GeoFeature) => { features.push(cb(f)) });\n return features;\n }\n\n isHidden(id: string): boolean\n {\n return this.hidden[id] !== undefined;\n }\n\n findNoHide(id: string): GeoFeature\n {\n let entries = Object.values(this.entries);\n for (let i = 0; i < entries.length; i++)\n {\n let map = this._map(entries[i]);\n if (map[id])\n return map[id];\n }\n return undefined;\n }\n\n find(id: string): GeoFeature\n {\n if (this.hidden[id] !== undefined)\n return undefined;\n\n return this.findNoHide(id);\n }\n\n filter(test: (f: GeoFeature) => boolean): GeoMultiCollection\n {\n let m = new GeoMultiCollection();\n this.forEachEntry(e => {\n let col = this._col(e);\n let features = col ? col.features.filter(test) : null;\n if (features && features.length)\n m.add(e.tag, null, { type: 'FeatureCollection', features: features }, null);\n });\n return m;\n }\n}\n\nexport enum geoIntersectOptions { Intersects, Bounds, BoundsCenter };\n\nfunction geoBoxIntersect(x1: Poly.BoundBox, x2: Poly.BoundBox, opt: geoIntersectOptions): boolean\n{\n if (x1.left === undefined || x2.left === undefined) return false;\n\n let l1 = x1.left;\n let l2 = x2.left;\n let r1 = x1.right;\n let r2 = x2.right;\n let b1 = x1.top; // flip\n let b2 = x2.top; // flip\n let t1 = x1.bottom; // flip\n let t2 = x2.bottom; // flip\n let cx2 = l2 + (r2 - l2) / 2;\n let cy2 = t2 + (b2 - t2) / 2;\n\n // Note I flipped top and bottom above when extracting,\n // in order to make below logic work for normal y axis alignment (0 at top).\n switch (opt)\n {\n case geoIntersectOptions.Intersects:\n return !(l2 > r1 || r2 < l1 || t2 > b1 || b2 < t1);\n case geoIntersectOptions.Bounds:\n return l1 <= l2 && t1 <= t2 && r1 >= r2 && b1 >= b2;\n case geoIntersectOptions.BoundsCenter:\n return l1 <= cx2 && t1 <= cy2 && r1 >= cx2 && b1 >= cy2;\n }\n}\n\nexport function geoIntersect(multi: GeoMultiCollection, bbox: Poly.BoundBox, opt: geoIntersectOptions): GeoMultiCollection\n{\n let m: GeoFeatureMap = {};\n let bboxPoly = Poly.boundboxPoly(bbox);\n\n multi.forEach((f: GeoFeature) => {\n let box = Poly.boundbox(f);\n if (geoBoxIntersect(bbox, box, opt))\n {\n if (opt !== geoIntersectOptions.Intersects || Poly.polyIntersects(bboxPoly, f))\n m[f.properties.id] = f;\n }\n });\n\n let result = new GeoMultiCollection();\n result.add('result', null, null, m);\n return result;\n}\n","export type BlockMapping = { [blockid: string]: string };\nexport type ReverseBlockMapping = { [geoid: string]: string[] };\n\ninterface Entry\n{\n tag: string,\n bm: BlockMapping,\n rbm?: ReverseBlockMapping,\n}\n\nexport function reverseBlockMapping(bm: BlockMapping): ReverseBlockMapping\n{\n let rev: ReverseBlockMapping = {};\n\n if (bm) Object.keys(bm).forEach(blockid => {\n let geoid = bm[blockid];\n if (! rev[geoid]) rev[geoid] = [];\n rev[geoid].push(blockid);\n });\n Object.values(rev).forEach((a: string[]) => a.sort());\n return rev;\n}\n\nexport class MultiBlockMapping\n{\n entries: Entry[];\n stamp: number;\n\n constructor(tag?: string, bm?: BlockMapping)\n {\n this.entries = [];\n this.stamp = Math.trunc(Math.random() * Number.MAX_SAFE_INTEGER / 2);\n if (tag && bm)\n this.entries.push({ tag, bm });\n }\n\n add(tag: string, bm: BlockMapping): void\n {\n this.entries.forEach(e => { if (e.tag === tag) { e.bm = bm; delete e.rbm; bm = null } });\n if (bm)\n this.entries.push({ tag, bm });\n this.stamp++;\n }\n\n remove(tag: string): void\n {\n for (let i = this.entries.length-1; i >= 0; i--)\n if (this.entries[i].tag === tag)\n {\n this.stamp++;\n this.entries.splice(i, 1);\n }\n }\n\n map(blockid: string): string\n {\n // Walk backwards to pick up overrides first\n for (let i = this.entries.length-1; i >= 0; i--)\n {\n let e = this.entries[i];\n if (e.bm[blockid])\n return e.bm[blockid];\n }\n return undefined;\n }\n\n multimap(blockid: string): string[]\n {\n let a: string[] = [];\n this.entries.forEach(e => { if (e.bm[blockid]) a.push(e.bm[blockid]) });\n return a;\n }\n\n bmOf(tag: string): BlockMapping\n {\n let e = this.entries.find(e => e.tag === tag);\n return e ? e.bm : null;\n }\n\n mapmain(blockid: string): string\n {\n return this.entries.length ? this.entries[0].bm[blockid] : undefined;\n }\n\n rev(geoid: string): string[]\n {\n for (let i = this.entries.length-1; i >= 0; i--)\n {\n let e = this.entries[i];\n if (! e.rbm)\n e.rbm = reverseBlockMapping(e.bm);\n if (e.rbm[geoid])\n return e.rbm[geoid];\n }\n return undefined;\n }\n\n // Just walks first map\n forEach(cb: (blockid: string) => void): void\n {\n if (this.entries.length)\n Object.keys(this.entries[0].bm).forEach(blockid => cb(blockid));\n }\n\n // Walk maps in reverse order, careful to not invoke on same geoid\n forEachRev(cb: (geoidid: string, blocks: string[]) => void): void\n {\n let seen = new Set<string>();\n for (let i = this.entries.length-1; i >= 0; i--)\n {\n let e = this.entries[i];\n if (! e.rbm) e.rbm = reverseBlockMapping(e.bm);\n Object.keys(e.rbm).forEach(geoid => {\n if (! seen.has(geoid))\n {\n seen.add(geoid);\n cb(geoid, e.rbm[geoid]);\n }\n });\n }\n }\n}\n","import * as geojson from 'geojson';\nimport * as Util from '../util/all'\nimport * as Poly from '../poly/all'\nimport * as G from './geo';\n\n// Given the topology for a precinct, the bintrie mapping and the list of blocks, construct the\n// feature data for the virtual feature.\n//\n\nexport function computeVFeature(topoPrecinct: Poly.Topo, bintrie: Util.BinTrie, blocks: string[]): G.GeoFeature\n{\n let contiguity = new Util.IndexedArray();\n let block_contiguity = new Util.IndexedArray();\n let f = Poly.topoMerge(topoPrecinct, blocks);\n f.properties.datasets = {};\n blocks.forEach(blockid => {\n let b = topoPrecinct.objects[blockid];\n if (b.properties.datasets)\n Util.deepAccum(f.properties.datasets, b.properties.datasets);\n if (b.properties.contiguity)\n {\n b.properties.contiguity.forEach((id: string) => {\n contiguity.set(id === 'OUT_OF_STATE' ? id : bintrie.get(id));\n });\n b.properties.contiguity.forEach((id: string) => {\n block_contiguity.set(id);\n });\n }\n });\n f.properties.contiguity = contiguity.asArray();\n f.properties.block_contiguity = block_contiguity.asArray();\n f.properties.blocks = blocks;\n return f;\n}\n","export * from './log';\n","import * as Util from '../util/all';\nimport * as FSM from '../fsm/all';\n\nexport interface ILog\n{\n dump: () => FSM.Fsm;\n stamp: (o: any) => void;\n log: (o: any, verbosity?: number) => void;\n event: (o: any, verbosity?: number) => void;\n error: (o: any) => void;\n value: (o: any, verbosity?: number) => void;\n chatter: (s: string) => void;\n chatters: () => string[];\n}\n\nexport class Timer\n{\n ilog: ILog;\n o: any;\n verbosity: number;\n elapsed: Util.Elapsed;\n\n constructor(ilog: ILog, kind: string, o: any, verbosity: number = 0)\n {\n this.ilog = ilog;\n if (typeof o === 'string') o = { event: o };\n this.o = o;\n this.o.kind = kind;\n this.verbosity = verbosity;\n this.elapsed = new Util.Elapsed();\n }\n\n log(): void\n {\n this.elapsed.end();\n this.o.ms = this.elapsed.ms();\n this.ilog.log(this.o, this.verbosity);\n }\n}\n\nexport class AsyncTimer extends Timer\n{\n constructor(ilog: ILog, o: any, verbosity: number = 0)\n {\n super(ilog, 'async', o, verbosity);\n }\n}\n\nexport class SyncTimer extends Timer\n{\n constructor(ilog: ILog, o: any, verbosity: number = 0)\n {\n super(ilog, 'sync', o, verbosity);\n }\n}\n","export * from './log';\n","import * as Context from '../context/all';\nimport * as LogAbstract from '../logabstract/all';\nimport * as Util from '../util/all';\nimport * as FSM from '../fsm/all';\n\nexport interface LogEnvironment\n{\n context: Context.IContext;\n}\n\nclass LogManager implements LogAbstract.ILog\n{\n env: LogEnvironment;\n count: number;\n\n constructor(env: LogEnvironment)\n {\n this.env = env;\n this.count = 0;\n }\n\n dump(): FSM.Fsm { return null; }\n\n print(o: any): void\n {\n let sa: string[] = [];\n\n if (o._count !== undefined)\n sa.push(String(o._count));\n if (o.kind === 'error')\n {\n sa.push('error');\n sa.push(o.event);\n }\n else if (o.kind !== 'value')\n {\n sa.push('info');\n sa.push(o.event);\n }\n else\n {\n sa.push('value');\n sa.push(o.event);\n sa.push(String(o.value));\n }\n if (o.detail !== undefined)\n sa.push(o.detail);\n console.log(sa.join(': '));\n }\n\n stamp(o: any): void\n {\n this.log(o);\n }\n\n log(o: any, verbosity: number = 0): void\n {\n // Show some restraint\n if (verbosity > this.env.context.xnumber('verbosity'))\n return;\n\n // Inject some standard properties\n o._time = Util.Now();\n o._count = this.count++;\n if (o.kind === undefined)\n o.kind = 'misc';\n this.print(o);\n }\n\n\n event(o: any, verbosity: number = 0): void\n {\n if (typeof o === 'string') o = { event: o };\n o.kind = 'event';\n this.log(o, verbosity);\n }\n\n error(o: any): void\n {\n if (typeof o === 'string') o = { event: o };\n o.kind = 'error';\n this.log(o);\n }\n\n value(o: any, verbosity: number = 0): void\n {\n o.kind = 'value';\n this.log(o, verbosity);\n }\n\n chatter(s: string): void\n {\n console.log(s);\n }\n\n chatters(): string[]\n {\n return null;\n }\n}\n\nexport function create(env: LogEnvironment): LogAbstract.ILog\n{\n return new LogManager(env);\n}\n","export * from \"./oteditutil\";\nexport * from \"./otmaputil\";\n","import * as LogAbstract from '../logabstract/all';\nimport * as OT from '../ot-js/all';\n\nimport * as DMP from \"diff-match-patch\";\nlet DiffMatchPatch = new DMP.diff_match_patch();\nlet DIFF_DELETE = DMP.DIFF_DELETE;\nlet DIFF_INSERT = DMP.DIFF_INSERT;\nlet DIFF_EQUAL = DMP.DIFF_EQUAL;\n\nexport class OTEditUtil\n{\n\t// Data members\n\tilog: LogAbstract.ILog;\n\tresourceID: string;\n\tresourceName: string;\n\tclientID: string;\n\n\t// Constructor\n\tconstructor(ilog: LogAbstract.ILog, rid: string, cid: string, name: string)\n\t\t{\n\t\t\tthis.ilog = ilog;\n\t\t\tthis.resourceID = rid;\n\t\t\tthis.clientID = cid;\n\t\t\tthis.resourceName = name;\n\t\t}\n\n\t//\n\t// Function: insertAtStart\n\t//\n\t// Description:\n\t//\tGenerate an OTCompositeResource to insert a string at the start of a buffer of the given size.\n\t//\n\n\tinsertAtStart(s: any, nCurrentLen: number): OT.OTCompositeResource\n\t\t{\n\t\t\tlet edit = new OT.OTCompositeResource(this.resourceID, this.clientID);\n\t\t\tlet sEdit = new OT.OTStringResource(this.resourceName);\n\t\t\tsEdit.edits.push([ OT.OpInsert, s.length, s ]);\n\t\t\tsEdit.edits.push([ OT.OpCursor, 0, '' ]);\n\t\t\tsEdit.edits.push([ OT.OpRetain, nCurrentLen, '' ]);\n\t\t\tedit.edits.push(sEdit);\n\t\t\treturn edit;\n\t\t}\n\n\t//\n\t// Function: insertAtEnd\n\t//\n\t// Description:\n\t//\tGenerate an OTCompositeResource to insert a string at the end of a buffer of the given size.\n\t//\n\n\tinsertAtEnd(s: any, nCurrentLen: number): OT.OTCompositeResource\n\t\t{\n\t\t\tlet edit = new OT.OTCompositeResource(this.resourceID, this.clientID);\n\t\t\tlet sEdit = new OT.OTStringResource(this.resourceName);\n\t\t\tsEdit.edits.push([ OT.OpRetain, nCurrentLen, '' ]);\n\t\t\tsEdit.edits.push([ OT.OpInsert, s.length, s ]);\n\t\t\tsEdit.edits.push([ OT.OpCursor, 0, '' ]);\n\t\t\tedit.edits.push(sEdit);\n\t\t\treturn edit;\n\t\t}\n\n\t//\n\t// Function: injectCursor\n\t//\n\t// Inject start/end cursor positions into an existing string resource.\n\t//\n\n\tinjectCursor(edit: OT.OTCompositeResource, start: number, end?: number): void\n\t\t{\n\t\t\tif (start === undefined) return;\n\t\t\tif (end === undefined) end = start;\n\n\t\t\tlet sEdit: OT.OTStringResource = edit.findResource(this.resourceName) as OT.OTStringResource;\n\t\t\tif (sEdit == null)\n\t\t\t\treturn;\n\t\t\tlet cEdit: OT.OTStringResource = new OT.OTStringResource(this.resourceName);\n\t\t\tif (start != 0)\n\t\t\t\tcEdit.edits.push( [ OT.OpRetain, start, '' ] );\n\t\t\tcEdit.edits.push( [ OT.OpCursor, 0, this.clientID ] );\n\t\t\tif (end != start)\n\t\t\t{\n\t\t\t\tcEdit.edits.push( [ OT.OpRetain, end-start, '' ] );\n\t\t\t\tcEdit.edits.push( [ OT.OpCursor, 1, this.clientID ] );\n\t\t\t}\n\t\t\tlet nFinal: number = sEdit.finalLength();\n\t\t\tif (end != nFinal)\n\t\t\t\tcEdit.edits.push( [ OT.OpRetain, nFinal-end, '' ] );\n\t\t\tsEdit.compose(cEdit);\n\t\t}\n\n\t//\n\t// Function: extractCursor\n\t//\n\t// Extract cursor information by client. Returns an object indexed by clientID with an object with\n\t// properties startSelection, endSelection.\n\t//\n\n\textractCursor(edit: OT.OTCompositeResource): any\n\t\t{\n\t\t\tlet cursors: any = { };\n\t\t\tlet sEdit: OT.OTStringResource = edit.findResource(this.resourceName) as OT.OTStringResource;\n\t\t\tif (sEdit == null)\n\t\t\t\treturn cursors;\n\t\t\tlet pos: number = 0;\n\t\t\tfor (let i: number = 0; i < sEdit.length; i++)\n\t\t\t{\n\t\t\t\tlet a: OT.OTSingleArrayEdit = sEdit.edits[i];\n\t\t\t\tswitch (a[0])\n\t\t\t\t{\n\t\t\t\t\tcase OT.OpInsert:\n\t\t\t\t\t\tpos += a[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OT.OpDelete:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OT.OpRetain:\n\t\t\t\t\t\tpos += a[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OT.OpCursor:\n\t\t\t\t\t\tif (a[2] != '')\t// should have clientID...\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlet sel: any = cursors[a[2]];\t// a[2] is clientID\n\t\t\t\t\t\t\tif (sel === undefined) { sel = { }; cursors[a[2]] = sel; }\n\t\t\t\t\t\t\tif (a[1] == 0)\n\t\t\t\t\t\t\t\tsel['selectionStart'] = pos;\t// 0 is selectionStart\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tsel['selectionEnd'] = pos;\t\t// 1 is selectionEnd\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OT.OpSet:\n\t\t\t\t\t\tpos += a[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cursors;\n\t\t}\n\n\t//\n\t// Function: computeEdit\n\t//\n\t// Description:\n\t//\tGiven an old and new string, generate the (minimal) edits list necessary to convert the old\n\t//\tstring into the new string.\n\t//\n\t// \tThis is useful if you're not actually tracking the specfic edit operations happening to the\n\t//\tunderlying string but rather just examining old and new values and trying to transmit\n\t//\tminimal diffs.\n\t//\n\t//\tThere are various good algorithms for computing the \"edit distance\" between two strings.\n\t//\tHere I've used the google DiffMatchPatch algorithm.\n\t//\n\n\tcomputeEdit(sOld: string, sNew: string): OT.OTCompositeResource\n\t\t{\n\t\t\tlet edit = new OT.OTCompositeResource(this.resourceID, this.clientID);\n\t\t\tlet sEdit = new OT.OTStringResource(this.resourceName);\n\t\t\tlet diffs: DMP.Diff[] = DiffMatchPatch.diff_main(sOld, sNew);\n\t\t\tif (diffs)\n\t\t\t\tfor (let i: number = 0; i < diffs.length; i++)\n\t\t\t\t{\n\t\t\t\t\tlet diff: DMP.Diff = diffs[i];\n\t\t\t\t\tlet s = diff[1];\n\t\t\t\t\tswitch (diff[0])\n\t\t\t\t\t{\n\t\t\t\t\t\tcase DIFF_DELETE:\n\t\t\t\t\t\t\tsEdit.edits.push([ OT.OpDelete, s.length, '' ]);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase DIFF_INSERT:\n\t\t\t\t\t\t\tsEdit.edits.push([ OT.OpInsert, s.length, s ]);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase DIFF_EQUAL:\n\t\t\t\t\t\t\tsEdit.edits.push([ OT.OpRetain, s.length, '' ]);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tedit.edits.push(sEdit);\n\t\t\treturn edit;\n\t\t}\n}\n","import * as OT from '../ot-js/all';\nimport * as Util from '../util/all';\n\nexport const MERGE: number = 0;\nexport const REPLACE: number = 1;\n\nexport class Editor\n{\n private engine: OT.OTEngine;\n private root: OT.OTCompositeResource;\n private stamps: OT.OTCounterResource;\n\n constructor(engine: OT.OTEngine)\n {\n this.engine = engine;\n this.root = null;\n this.stamps = null;\n }\n\n startLocalEdit(): void\n {\n if (this.root == null)\n this.root = this.engine.startLocalEdit();\n }\n\n stamp(rid: string, prop: string): void\n {\n if (this.stamps == null)\n {\n this.startLocalEdit();\n this.stamps = new OT.OTCounterResource(rid);\n this.root.edits.push(this.stamps);\n }\n this.stamps.edits.push([ OT.OpCounterAdd, prop, 1 ]);\n }\n\n set(rid: string, p: string, v: any): Editor\n {\n this.rawObject(rid).set(p, v);\n return this;\n }\n\n del(rid: string, p: string): Editor\n {\n this.rawObject(rid).del(p);\n return this;\n }\n\n rawObject(rid: string): OT.OTMapResource\n {\n this.startLocalEdit();\n return this.root.map(rid);\n }\n\n rawArray(rid: string): OT.OTArrayResource\n {\n this.startLocalEdit();\n return this.root.array(rid);\n }\n\n editCounter(rid: string, oNew: any, mode: number = MERGE): void\n {\n let oOld = this.engine.toPartialValue(rid);\n let aDiff: string[] = keyDiff(oOld, oNew);\n \n let mEdit = new OT.OTCounterResource(rid);\n\n // Propagate sets\n for (let i: number = 0; i < aDiff.length; i++)\n mEdit.edits.push([ OT.OpCounterAdd, aDiff[i], oNew[aDiff[i]] ]);\n\n // Also propagate deletes if REPLACE mode\n if (mode == REPLACE)\n {\n for (var p in oOld) if (oOld.hasOwnProperty(p))\n if (oNew[p] === undefined)\n mEdit.edits.push([ OT.OpCounterDel, p, 0 ]);\n }\n\n if (mEdit.edits.length)\n {\n this.startLocalEdit();\n this.root.edits.push(mEdit);\n }\n }\n\n editObject(rid: string, oNew: any, mode: number = MERGE): void\n {\n if (rid === 'stamps')\n {\n this.editCounter(rid, oNew, mode);\n return;\n }\n\n let oOld = this.engine.toPartialValue(rid);\n let aDiff: string[] = keyDiff(oOld, oNew);\n \n let mEdit = new OT.OTMapResource(rid);\n\n // Propagate sets\n for (let i: number = 0; i < aDiff.length; i++)\n mEdit.edits.push([ OT.OpMapSet, aDiff[i], oNew[aDiff[i]] ]);\n\n // Also propagate deletes if REPLACE mode\n if (mode == REPLACE)\n {\n for (var p in oOld) if (oOld.hasOwnProperty(p))\n if (oNew[p] === undefined)\n mEdit.edits.push([ OT.OpMapDel, p, 0 ]);\n }\n\n if (mEdit.edits.length)\n {\n this.startLocalEdit();\n this.root.edits.push(mEdit);\n }\n }\n\n editArray(rid: string, aNew: any[]): void\n {\n let aOld = this.engine.toPartialValue(rid);\n if (aOld == null) aOld = [];\n if (Util.deepEqual(aNew, aOld))\n return;\n\n let aEdit = new OT.OTArrayResource(rid);\n\n let i: number = 0;\n let iRetain: number = 0;\n for (; i < aNew.length && i < aOld.length; i++)\n if (Util.deepEqual(aNew[i], aOld[i]))\n iRetain++;\n else\n {\n if (iRetain > 0)\n {\n aEdit.edits.push([ OT.OpRetain, iRetain, [] ] );\n iRetain = 0;\n }\n aEdit.edits.push([ OT.OpSet, 1, [ aNew[i] ] ]);\n }\n // Preserve equal ones at end\n if (iRetain > 0)\n aEdit.edits.push([ OT.OpRetain, iRetain, [] ] );\n // Add new ones\n if (aNew.length > i)\n aEdit.edits.push([ OT.OpInsert, aNew.length - i, aNew.slice(i) ]);\n // Or delete old ones\n else if (aOld.length > i)\n aEdit.edits.push([ OT.OpDelete, aOld.length - i, [] ]);\n\n if (aEdit.edits.length)\n {\n this.startLocalEdit();\n this.root.edits.push(aEdit);\n }\n }\n\n edit(oNew: any): boolean\n {\n for (var p in oNew) if (oNew.hasOwnProperty(p))\n if (Array.isArray(oNew[p]))\n this.editArray(p, oNew[p]);\n else\n this.editObject(p, oNew[p]);\n return this.commit();\n }\n\n get length(): number\n {\n return this.root && this.root.edits ? this.root.edits.length : 0;\n }\n\n commit(): boolean\n {\n if (this.root)\n {\n try\n {\n if (this.root.edits.length)\n this.engine.addLocalEdit(this.root);\n this.root = null;\n this.stamps = null;\n return true;\n }\n catch (err)\n {\n // Really would like to log this, but effectively this is a programming error of mismatched bases.\n return false;\n }\n }\n }\n}\n\nfunction keyDiff(oOld: any, oNew: any): string[]\n\t{\n\t\tif (oNew == null)\n\t\t\treturn [];\n\n\t\tlet aDiff: string[] = [];\n\t\tfor (var p in oNew) if (oNew.hasOwnProperty(p))\n\t\t\t{\n\t\t\t\tif (oOld == null || oOld[p] === undefined)\n\t\t\t\t\taDiff.push(p)\n\t\t\t\telse if (! Util.deepEqual(oNew[p], oOld[p]))\n\t\t\t\t\taDiff.push(p);\n\t\t\t}\n\t\treturn aDiff;\n\t}\n","export * from \"./otarray\";\nexport * from \"./otengine\";\nexport * from \"./otclientengine\";\nexport * from \"./otcomposite\";\nexport * from \"./otmap\";\nexport * from \"./otcounter\";\nexport * from \"./otserverengine\";\nexport * from \"./ottypes\";\nexport * from \"./otsession\";\n","import * as OT from \"./ottypes\";\n\nconst TestUnitSize: number = 4;\nlet TestCounter: number = 0;\n\n// Array Ops\nexport const OpInsert: number = 1;\nexport const OpDelete: number = 2;\nexport const OpRetain: number = 3;\nexport const OpCursor: number = 4;\t// 2nd arg is 0/1 for start/end of region, 3rd arg is clientID\nexport const OpSet: number = 5;\nexport const OpTmpRetain: number = 6;\n\n// Op, Len, Data\nexport type OTSingleArrayEdit = [number, number, any];\nexport type OTEdits = OTSingleArrayEdit[];\n\nenum OTalignEdgesType { AlignForCompose, AlignForTransform };\n\n// Set of interfaces that operates on the underlying array-like value type.\n// If more efficient, can modify the initial argument and simply return it.\n// Alternatively, can create new instance and return it (string works this way since\n// underlying type is immutable).\n// This is used for the array-like specialization of IOTInterface\nexport interface IOTArrayLikeOperations\n{\n\tunderlyingTypeName(): string;\n\n\t// Return empty instance\n\tempty(): any;\n\n\t// Insert new instance at position specified\n\tinsert(t: any, pos: number, tInsert: any): any;\t\t\t\t// Can modify input\n\n\t// Delete part of instance\n\tdelete(t: any, pos: number, len: number): any;\t\t\t\t// Can modify input\n\n\t// Set value of part of instance\n\tset(t: any, pos: number, tSet: any): any;\t\t\t\t\t// Can modify input\n\n\t// append to instance (insert at end)\n\tappend(t: any, tAppend: any): any;\t\t\t\t\t\t\t// Can modify input\n\n\t// Take substring of instance\n\tsubstr(t: any, pos: number, len: number): any;\t\t\t\t// Can modify input\n\n\t// Take substring of provided base value type and set\n\tsubstrOf(t: any, pos: number, len: number, tsub: any): any;\t// Cannot modify input\n\n\t// Construct an instance N long\n\tconstructN(n: number): any;\n\n\t// Test for equality\n\tequal(t1: any, t2: any): boolean;\n\n\t// copy an instance\n\tcopy(t: any): any;\t\t\t\t\t\t\t\t\t\t\t// Need to do deep copy if T is mutable.\n\n\t// Return length of instance\n\tlength(t: any): number;\n};\n\n// Operates on a single \"OTSingleArrayEdit\", parameterized by an object that manipulates the underlying\n// array-like value stored as the third property of the 3-element edit object.\nexport class OTSingleArrayEditor\n{\n\traw: IOTArrayLikeOperations;\n\n\tconstructor(raw: IOTArrayLikeOperations)\n\t\t{\n\t\t\tthis.raw = raw;\n\t\t}\n\n\tcopy(a: OTSingleArrayEdit): OTSingleArrayEdit \t\t// If a[2] is mutable, need to override and do deep copy\n\t\t{ return [ a[0], a[1], this.raw.copy(a[2]) ]; }\n\n\t// Static Predicates for MoveAction\n\tisDelete(a: OTSingleArrayEdit): boolean { return a[0] == OpDelete; }\n\tisNotDelete(a: OTSingleArrayEdit): boolean { return a[0] != OpDelete; }\n\tisCursor(a: OTSingleArrayEdit): boolean { return a[0] == OpCursor; }\n\tisNotCursor(a: OTSingleArrayEdit): boolean { return a[0] != OpCursor; }\n\tisTmpRetain(a: OTSingleArrayEdit): boolean { return a[0] == OpTmpRetain; }\n\tisNotTmpRetainOrDelete(a: OTSingleArrayEdit): boolean { return (a[0] != OpTmpRetain && a[0] != OpDelete); }\n\tisTmpRetainOrDelete(a: OTSingleArrayEdit): boolean { return (a[0] == OpTmpRetain || a[0] == OpDelete); }\n\n\t// Other static predicates\n\tisIgnore(a: OTSingleArrayEdit): boolean { return a[0] < 0; }\n\tisNoOp(a: OTSingleArrayEdit): boolean { return a[1] === 0 && a[0] != OpCursor; }\n\tisEqual(a1: OTSingleArrayEdit, a2: OTSingleArrayEdit) { return a1[0] == a2[0] && a1[1] == a2[1] && this.raw.equal(a1[2], a2[2]); }\n\n\t// Helpers\n\tappendValue(a: OTSingleArrayEdit, s: any): void\n\t\t{ a[2] = this.raw.append(a[2], s); a[1] = a[1] + this.raw.length(s); }\n\tempty(a: OTSingleArrayEdit): void { a[0] = OpCursor; a[1] = 0; a[2] = this.raw.empty(); }\n\tsetIgnore(a: OTSingleArrayEdit): void { if (a[0] > 0) a[0] = - a[0]; }\n\tsubstr(aIn: OTSingleArrayEdit, pos: number, len: number): void\n\t\t{\n\t\t\tlet sSource: any = aIn[2];\n\t\t\tif (len > 0 && pos+len <= this.raw.length(sSource))\n\t\t\t\taIn[2] = this.raw.substr(sSource, pos, len);\n\t\t\taIn[1] = len;\n\t\t}\n\tsubstrFromRaw(aIn: OTSingleArrayEdit, pos: number, len: number, s: any): void\n\t\t{\n\t\t\tlet sSource: any = s;\n\t\t\tif (len > 0 && pos+len <= this.raw.length(sSource))\n\t\t\t\taIn[2] = this.raw.substr(sSource, pos, len);\n\t\t\taIn[1] = len;\n\t\t}\n\tcopyWithSubstr(aIn: OTSingleArrayEdit, pos: number, len: number): OTSingleArrayEdit\n\t\t{\n\t\t\tlet aOut: OTSingleArrayEdit = this.copy(aIn);\n\t\t\tthis.substr(aOut, pos, len);\n\t\t\treturn aOut;\n\t\t}\n};\n\nexport class OTStringOperations implements IOTArrayLikeOperations\n{\n\tunderlyingTypeName(): string { return 'string'; }\n\tempty(): any { return ''; }\n\tinsert(a: any, pos: number, aInsert: any): any\n\t\t{\n\t\t\tlet s: string = a as string;\n\t\t\tlet sInsert: string = aInsert as string;\n\t\t\treturn s.substr(0, pos) + sInsert + s.substr(pos);\n\t\t}\n\tdelete(a: any, pos: number, len: number): any\n\t\t{\n\t\t\tlet s: string = a as string;\n\t\t\treturn s.substr(0, pos) + s.substr(pos+len);\n\t\t}\n\tset(a: any, pos: number, aSet: any): any\n\t\t{\n\t\t\tlet s: string = a as string;\n\t\t\tlet sSet: string = aSet as string;\n\t\t\treturn s.substr(0, pos) + sSet + s.substr(pos+sSet.length);\n\t\t}\n\tappend(a: any, aAppend: any): any\n\t\t{\n\t\t\tlet s: string = a as string;\n\t\t\tlet sAppend: string = aAppend as string;\n\t\t\treturn s + sAppend;\n\t\t}\n\tsubstr(a: any, pos: number, len: number): any\t\t\t\t\t// Can modify source\n\t\t{\n\t\t\tlet s: string = a as string;\n\t\t\treturn s.substr(pos, len);\n\t\t}\n\tsubstrOf(a: any, pos: number, len: number, aSub: any): any\t\t\t// Copies from tsub argument\n\t\t{\n\t\t\t// a unused if not updated with return value contents\n\t\t\tlet sSub: string = aSub as string;\n\t\t\treturn sSub.substr(pos, len);\n\t\t}\n\tconstructN(n: number): any\n\t\t{\n\t\t\tlet x = ' ';\n\t\t\tlet s = '';\n\t\t\tfor (;;)\n\t\t\t{\n\t\t\t\tif (n & 1)\n\t\t\t\t\ts += x;\n\t\t\t\tn >>= 1;\n\t\t\t\tif (n)\n\t\t\t\t\tx += x;\n\t\t\t\telse\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn s;\n\t\t}\n\tequal(a1: any, a2: any): boolean\n\t\t{\n\t\t\tlet s1: string = a1 as string;\n\t\t\tlet s2: string = a2 as string;\n\t\t\treturn s1 === s2;\n\t\t}\n\tcopy(a: any): any { return a; }\n\tlength(a: any): number { return a.length; }\n};\n\nexport class OTArrayOperations implements IOTArrayLikeOperations\n{\n\tunderlyingTypeName(): string { return 'array'; }\n\tempty(): any { return []; }\n\tinsert(a: any, pos: number, aInsert: any): any\n\t\t{\n\t\t\tlet arr: Array<any> = a as Array<any>;\n\t\t\tlet arrInsert: Array<any> = aInsert as Array<any>;\n\t\t\tlet arrReturn = Array(arr.length + arrInsert.length);\n\t\t\tlet i: number, j: number;\n\t\t\tfor (i = 0; i < pos; i++)\n\t\t\t\tarrReturn[i] = arr[i];\n\t\t\tfor (j = 0; j < arrInsert.length; j++)\n\t\t\t\tarrReturn[i+j] = arrInsert[j];\n\t\t\tfor (i = pos; i < arr.length; i++)\n\t\t\t\tarrReturn[i+j] = arr[i];\n\t\t\treturn arrReturn;\n\t\t}\n\tdelete(a: any, pos: number, len: number): any\n\t\t{\n\t\t\tlet arr: Array<any> = a as Array<any>;\n\t\t\tarr.splice(pos, len);\n\t\t\treturn arr;\n\t\t}\n\tset(a: any, pos: number, aSet: any): any\n\t\t{\n\t\t\tlet arr: Array<any> = a as Array<any>;\n\t\t\tlet arrSet: Array<any> = aSet as Array<any>;\n\t\t\tfor (let i: number = 0; i < arrSet.length; i++)\n\t\t\t\tarr[i+pos] = arrSet[i];\n\t\t\treturn arr;\n\t\t}\n\tappend(a: any, aAppend: any): any\n\t\t{\n\t\t\tlet arr: Array<any> = a as Array<any>;\n\t\t\tlet arrAppend: Array<any> = aAppend as Array<any>;\n\t\t\treturn arr.concat(arrAppend);\n\t\t}\n\tsubstr(a: any, pos: number, len: number): any\t\t\t\t\t// Can modify source\n\t\t{\n\t\t\tlet arr: Array<any> = a as Array<any>;\n\t\t\treturn arr.slice(pos, pos+len);\n\t\t}\n\tsubstrOf(a: any, pos: number, len: number, aSub: any): any\t\t\t// Copies from tsub argument\n\t\t{\n\t\t\t// a unused if not updated with return value contents\n\t\t\tlet arrSub: Array<any> = aSub as Array<any>;\n\t\t\treturn arrSub.slice(pos, pos+len);\n\t\t}\n\tconstructN(n: number): any\n\t\t{\n\t\t\treturn new Array(n);\n\t\t}\n\tequal(a1: any, a2: any): boolean\n\t\t{\n\t\t\tlet arr1: Array<any> = a1 as Array<any>;\n\t\t\tlet arr2: Array<any> = a2 as Array<any>;\n\t\t\tif (arr1.length != arr2.length)\n\t\t\t\treturn false;\n\t\t\tfor (let i: number = 0; i < arr1.length; i++)\n\t\t\t\tif (arr1[i] !== arr2[i])\n\t\t\t\t\treturn false;\n\t\t\treturn true;\n\t\t}\n\tcopy(a: any): any\n\t\t{\n\t\t\tlet arr: Array<any> = a as Array<any>;\n\t\t\tlet arrRet = new Array(arr.length);\n\t\t\tfor (let i: number = 0; i < arr.length; i++)\n\t\t\t\tarrRet[i] = arr[i];\n\t\t\treturn arrRet;\n\t\t}\n\tlength(a: any): number\n\t\t{\n\t\t\treturn a.length;\n\t\t}\n};\n\nexport class OTArrayLikeResource extends OT.OTResourceBase\n{\n\teditor: OTSingleArrayEditor;\n\n\tconstructor(ed: OTSingleArrayEditor, rname: string)\n\t\t{\n\t\t\tsuper(rname, ed.raw.underlyingTypeName());\n\t\t\tthis.editor = ed;\n\t\t}\n\n\tcopy(): OTArrayLikeResource\n\t\t{\n\t\t\treturn null;\t// Needs to be overridden\n\t\t}\n\n\tmoveEdits(newA: OTEdits, iStart: number, iEnd?: number, pred?: (a: OTSingleArrayEdit) => boolean)\n\t\t{\n\t\t\tif (iEnd == undefined)\n\t\t\t\tiEnd = this.edits.length - 1;\n\n\t\t\tfor (; iStart <= iEnd; iStart++)\n\t\t\t{\n\t\t\t\tlet a: OTSingleArrayEdit = this.edits[iStart];\n\t\t\t\tif (!this.editor.isIgnore(a) && (pred == undefined || pred(a)))\n\t\t\t\t\tnewA.push(a);\n\t\t\t}\n\t\t}\n\n\tequal(rhs: OTArrayLikeResource): boolean\n\t\t{\n\t\t\tif (this.length != rhs.length)\n\t\t\t\treturn false;\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t\tif (! this.editor.isEqual(this.edits[i], rhs.edits[i]))\n\t\t\t\t\treturn false;\n\t\t\treturn true;\n\t\t}\n\n\t// Function: OTArrayLikeResource::effectivelyEqual\n\t//\n\t// Description:\n\t//\tA looser definition than operator==. Returns true if two actions would result in the\n\t//\tsame final string. This ignores no-ops like OpCursor and allows different orderings of\n\t//\tinserts and deletes at the same location.\n\t//\n\t// Played around with different algorithms, but the simplest is probably just to apply\n\t//\tthe two actions and see if I get the same final string. Came up with an interesting\n\t//\talgorithm of walking through comparing hashes, but that was not robust to operations\n\t//\tbeing split into fragments and interposed with alternate ops (OpCursor or interleaving of Ins/Del)\n\t//\tthat still leave the string the same. If unhappy with this approach (which scales with size\n\t//\tof string to edit rather than complexity of the edit), the other approach would be to canonicalize\n\t//\tthe edit operations (including removing cursor operations and normalizing order of deletes).\n\t//\t(Added that version of the algorithm under #ifdef). Could also dynamically choose approach based\n\t//\ton relative size of arrays.\n\t//\n\teffectivelyEqual(rhs: OTArrayLikeResource): boolean\n\t\t{\n\t\t\t// Exactly equal is always effectively equal\n\t\t\tif (this.equal(rhs))\n\t\t\t\treturn true;\n\n\t\t\tif (this.originalLength() != rhs.originalLength())\n\t\t\t\treturn false;\n\n\t\t\t// Preferred algorithm\n\t\t\tlet s: any = this.editor.raw.constructN(this.originalLength());\n\n\t\t\tlet sL: any = this.apply(s);\n\t\t\tlet sR: any = rhs.apply(s);\n\t\t\treturn sL === sR;\n\n\t\t\t// Alternate algorithm (see above)\n\t\t\t//let aL: OTArrayLikeResource = this.copy();\n\t\t\t//let aR: OTArrayLikeResource = rhs.copy();\n\n\t\t\t//aL.fullyCoalesce();\n\t\t\t//aR.fullyCoalesce();\n\t\t\t//return aL.equal(aR);\n\t\t}\n\n\tbasesConsistent(rhs: OTArrayLikeResource): void\n\t\t{\n\t\t\tif (this.originalLength() != rhs.originalLength())\n\t\t\t{\n\t\t\t\tconsole.log(\"Logic Failure: transform: Bases Inconsistent.\");\n\t\t\t\tthrow(\"Logic Failure: transform: Bases Inconsistent.\");\n\t\t\t}\n\t\t}\n\n\toriginalLength(): number\n\t\t{\n\t\t\tlet len: number = 0;\n\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet a: OTSingleArrayEdit = this.edits[i];\n\t\t\t\tif (a[0] == OpRetain || a[0] == OpDelete || a[0] == OpSet)\n\t\t\t\t\tlen += a[1];\n\t\t\t}\n\t\t\treturn len;\n\t\t}\n\n\tfinalLength(): number\n\t\t{\n\t\t\tlet len: number = 0;\n\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet a: OTSingleArrayEdit = this.edits[i];\n\t\t\t\tif (a[0] == OpRetain || a[0] == OpInsert || a[0] == OpSet)\n\t\t\t\t\tlen += a[1];\n\t\t\t}\n\t\t\treturn len;\n\t\t}\n\n\tapply(aValue: any): any\n\t\t{\n\t\t\tif (aValue == null)\n\t\t\t\taValue = this.editor.raw.empty();\n\t\t\tlet pos: number = 0;\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet a: OTSingleArrayEdit = this.edits[i];\n\n\t\t\t\tswitch (a[0])\n\t\t\t\t{\n\t\t\t\t\tcase OpRetain:\n\t\t\t\t\t\tpos += a[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpCursor:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpDelete:\n\t\t\t\t\t\taValue = this.editor.raw.delete(aValue, pos, a[1]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpInsert:\n\t\t\t\t\t\taValue = this.editor.raw.insert(aValue, pos, a[2]);\n\t\t\t\t\t\tpos += a[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpSet:\n\t\t\t\t\t\taValue = this.editor.raw.set(aValue, pos, a[2]);\n\t\t\t\t\t\tpos += a[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn aValue;\n\t\t}\n\n\tcoalesce(bDeleteCursor: boolean = false): void\n\t\t{\n\t\t\tif (this.length == 0)\n\t\t\t\treturn;\n\n\t\t\t// coalesce adjoining actions and delete no-ops\n\t\t\tlet newA: OTEdits = [];\n\t\t\tlet aLast: OTSingleArrayEdit;\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet aNext: OTSingleArrayEdit = this.edits[i];\n\t\t\t\tif (this.editor.isNoOp(aNext) || (bDeleteCursor && aNext[0] == OpCursor))\n\t\t\t\t\tcontinue;\n\n\t\t\t\tif (newA.length > 0 && aNext[0] == aLast[0])\n\t\t\t\t{\n\t\t\t\t\tif (aNext[0] == OpInsert || aNext[0] == OpSet)\n\t\t\t\t\t\tthis.editor.appendValue(aLast, aNext[2]);\n\t\t\t\t\telse\n\t\t\t\t\t\taLast[1] += aNext[1];\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tnewA.push(aNext);\n\t\t\t\t\taLast = aNext;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.edits = newA;\n\t\t}\n\n\t// Function: fullyCoalesce\n\t//\n\t// Description:\n\t//\tHeavier duty version of coalesce that fully normalizes so that two actions that result in same\n\t//\tfinal edit are exactly the same. This normalizes order of insert/deletes and deletes OpCursor,\n\t//\tand then does coalesce.\n\t//\n\tfullyCoalesce(): void\n\t\t{\n\t\t\t// TODO\n\t\t\tthis.coalesce(true);\n\t\t}\n\n\t// Function: Invert\n\t//\n\t// Description:\n\t//\tGiven an action, convert it to its inverse (action + inverse) = identity (retain(n)).\n\t//\n\t//\tNote that in order to compute the inverse, you need the input state (e.g. because in order to invert\n\t//\tOpDelete, you need to know the deleted characters.\n\t//\n\tinvert(sInput: any): void\n\t\t{\n\t\t\tlet pos: number = 0;\t// Tracks position in input string.\n\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet a: OTSingleArrayEdit = this.edits[i];\n\n\t\t\t\tswitch (a[0])\n\t\t\t\t{\n\t\t\t\t\tcase OpCursor:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpRetain:\n\t\t\t\t\t\tpos += a[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpInsert:\n\t\t\t\t\t\ta[2] = '';\n\t\t\t\t\t\ta[0] = OpDelete;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpDelete:\n\t\t\t\t\t\ta[2] = this.editor.copyWithSubstr(sInput, pos, a[1]);\n\t\t\t\t\t\ta[0] = OpInsert;\n\t\t\t\t\t\tpos += a[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpSet:\n\t\t\t\t\t\ta[2] = this.editor.copyWithSubstr(sInput, pos, a[1]);\n\t\t\t\t\t\tpos += a[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t// Function: alignEdges\n\t//\n\t// Description:\n\t//\tSlice up this action sequence so its edges align with the action sequence I am going to\n\t//\tprocess it with. The processing (compose or transform) determines which actions Slice\n\t//\ttakes into account when moving the parallel counters forward. When processing for\n\t//\tcompose, deletes in rhs can be ignored. When processing for transform, inserts in both\n\t//\tlhs and rhs can be ignored.\n\t//\t\n\n\talignEdges(rhs: OTArrayLikeResource, st: OTalignEdgesType): void\n\t\t{\n\t\t\tlet posR: number = 0;\n\t\t\tlet posL: number = 0;\n\t\t\tlet iL: number = 0;\n\t\t\tlet newA: OTEdits = [];\n\t\t\tlet aAfter: OTSingleArrayEdit = undefined;\n\t\t\tlet aL: OTSingleArrayEdit = undefined;\n\n\t\t\tfor (let iR: number = 0; iR < rhs.length; iR++)\n\t\t\t{\n\t\t\t\tlet aR: OTSingleArrayEdit = rhs.edits[iR];\n\n\t\t\t\tswitch (aR[0])\n\t\t\t\t{\n\t\t\t\t\tcase OpCursor:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpInsert:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpDelete:\n\t\t\t\t\t\tposR += aR[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpSet:\n\t\t\t\t\t\tposR += aR[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpRetain:\n\t\t\t\t\t\tposR += aR[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// Advance iL/posL to equal to posR\n\t\t\t\twhile (posL < posR && (aAfter != undefined || iL < this.length))\n\t\t\t\t{\n\t\t\t\t\tif (aAfter == undefined)\n\t\t\t\t\t{\n\t\t\t\t\t\taL = this.edits[iL];\n\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\tiL++;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\taL = aAfter;\n\t\t\t\t\t}\n\n\t\t\t\t\tswitch (aL[0])\n\t\t\t\t\t{\n\t\t\t\t\t\tcase OpCursor:\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase OpInsert:\n\t\t\t\t\t\t\tif (st == OTalignEdgesType.AlignForCompose) posL += aL[1];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase OpDelete:\n\t\t\t\t\t\t\tif (st == OTalignEdgesType.AlignForTransform) posL += aL[1];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase OpSet:\n\t\t\t\t\t\t\tposL += aL[1];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase OpRetain:\n\t\t\t\t\t\t\tposL += aL[1];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Split this one if it spans boundary\n\t\t\t\t\tif (posL > posR)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet nRight: number = posL - posR;\n\t\t\t\t\t\tlet nLeft: number = aL[1] - nRight;\n\n\t\t\t\t\t\taAfter = this.editor.copyWithSubstr(aL, nLeft, nRight);\n\t\t\t\t\t\tthis.editor.substr(aL, 0, nLeft);\n\t\t\t\t\t\tnewA.push(aAfter);\n\t\t\t\t\t\tposL = posR;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\taAfter = undefined;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Append any we missed\n\t\t\tthis.moveEdits(newA, iL);\n\n\t\t\tthis.edits = newA;\n\t\t}\n\t\n\tgetCursorCache(): any\n\t\t{\n\t\t\tlet cursorCache: any = { };\n\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet a: OTSingleArrayEdit = this.edits[i];\n\n\t\t\t\tif (a[0] == OpCursor && a[2] != null)\n\t\t\t\t\tcursorCache[a[2]] = '';\n\t\t\t}\n\t\t\treturn cursorCache;\n\t\t}\n\n\t// Function: compose\n\t//\n\t// Description:\n\t//\tcompose the current action with the action passed in. This alters the current action.\n\t//\n\t//\tBasic structure is to walk through the RHS list of actions, processing each one in turn.\n\t//\tThat then drives the walk through the left hand side and the necessary edits. I use\n\t//\t\"posR\" and \"posL\" to work through equivalent positions in the two strings being edited.\n\t//\tDeletions in the LHS don't effect posL because they don't show up in the input string to RHS.\n\t//\tSimilarly, insertions in the RHS don't effect posR since they have no equivalent string location\n\t//\tin the LHS.\t(Note transform follows similar structure but different logic for how posR and posL\n\t//\ttrack each other since in that case they are effectively referencing the same input string.)\n\t//\n\tcompose(rhs: OTArrayLikeResource): void\n\t\t{\n\t\t\tlet cursorCache: any = rhs.getCursorCache();\n\n\t\t\tif (this.length == 0)\n\t\t\t{\n\t\t\t\tthis.edits = rhs.edits.map(this.editor.copy, this.editor);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse if (rhs.edits.length == 0)\n\t\t\t\treturn;\n\n\t\t\tif (this.finalLength() != rhs.originalLength())\n\t\t\t{\n\t\t\t\tconsole.log(\"Logic Failure: compose: Bases Inconsistent.\");\n\t\t\t\tthrow(\"Logic Failure: compose: Bases Inconsistent.\");\n\t\t\t}\n\n\t\t\t// Break overlapping segments before start to simplify logic below.\n\t\t\tthis.alignEdges(rhs, OTalignEdgesType.AlignForCompose);\n\n\t\t\t// Iterate with parallel position markers in two arrays\n\t\t\tlet posR: number = 0;\n\t\t\tlet posL: number = 0;\n\t\t\tlet iL: number = 0;\n\t\t\tlet bDone: boolean;\n\t\t\tlet newA: OTSingleArrayEdit[] = [];\n\n\t\t\tfor (let iR: number = 0; iR < rhs.length; iR++)\n\t\t\t{\n\t\t\t\tlet aR: OTSingleArrayEdit = rhs.edits[iR];\n\n\t\t\t\tswitch (aR[0])\n\t\t\t\t{\n\t\t\t\t\tcase OpRetain:\n\t\t\t\t\t\tposR += aR[1];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase OpSet:\n\t\t\t\t\tcase OpDelete:\n\t\t\t\t\tcase OpInsert:\n\t\t\t\t\tcase OpCursor:\n\t\t\t\t\t\t// Advance to cursor location\n\t\t\t\t\t\tbDone = false;\n\t\t\t\t\t\twhile (!bDone && iL < this.length)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlet aL: OTSingleArrayEdit = this.edits[iL];\n\n\t\t\t\t\t\t\tswitch (aL[0])\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcase OpCursor:\n\t\t\t\t\t\t\t\t\t// Only copy old cursor locations if they aren't empty and aren't duplicated in this rhs.\n\t\t\t\t\t\t\t\t\tif (aL[2] != '' && cursorCache[aL[2]] === undefined)\n\t\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\tiL++;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase OpSet:\n\t\t\t\t\t\t\t\tcase OpRetain:\n\t\t\t\t\t\t\t\tcase OpInsert:\n\t\t\t\t\t\t\t\t\tif (posL == posR)\n\t\t\t\t\t\t\t\t\t\tbDone = true;\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposL += aL[1];\n\t\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\t\tiL++;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase OpDelete:\n\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\tiL++;\t// Move past since deletes are not referenced by RHS\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (aR[0] == OpDelete)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// Remove sequence of cursor, insert, retains, sets, replaced by delete.\n\t\t\t\t\t\t\t// Note that insert/delete cancel each other out, so there is a bit of complexity there.\n\t\t\t\t\t\t\tlet nChange: number = aR[1];\n\t\t\t\t\t\t\tlet nRemain: number = aR[1];\n\t\t\t\t\t\t\tfor (; nChange > 0 && iL < this.length; iL++)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlet aL: OTSingleArrayEdit = this.edits[iL];\n\n\t\t\t\t\t\t\t\tswitch (aL[0])\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tcase OpCursor:\n\t\t\t\t\t\t\t\t\t\t// Only copy old cursor locations if they aren't empty and aren't duplicated in this rhs.\n\t\t\t\t\t\t\t\t\t\tif (aL[2] != '' && cursorCache[aL[2]] === undefined)\n\t\t\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase OpDelete:\n\t\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase OpSet:\n\t\t\t\t\t\t\t\t\tcase OpRetain:\n\t\t\t\t\t\t\t\t\tcase OpInsert:\n\t\t\t\t\t\t\t\t\t\tnRemain -= aL[0] == OpInsert ? aL[1] : 0;\n\t\t\t\t\t\t\t\t\t\tnChange -= aL[1];\n\t\t\t\t\t\t\t\t\t\t// Don't copy into new array\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Now add in the delete\n\t\t\t\t\t\t\tif (nRemain > 0)\n\t\t\t\t\t\t\t\tnewA.push([ OpDelete, nRemain, '' ]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (aR[0] == OpSet)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// Process sequence of cursor, insert, retains, sets\n\t\t\t\t\t\t\tlet nChange: number = aR[1];\n\t\t\t\t\t\t\tfor (; nChange > 0 && iL < this.length; iL++)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlet aL: OTSingleArrayEdit = this.edits[iL];\n\t\t\t\t\t\t\t\tlet opL: number = OpInsert;\n\n\t\t\t\t\t\t\t\tswitch (aL[0])\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tcase OpCursor:\n\t\t\t\t\t\t\t\t\t\t// Only copy old cursor locations if they aren't empty and aren't duplicated in this rhs.\n\t\t\t\t\t\t\t\t\t\tif (aL[2] != '' && cursorCache[aL[2]] === undefined)\n\t\t\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase OpDelete:\n\t\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase OpSet:\n\t\t\t\t\t\t\t\t\tcase OpRetain:\n\t\t\t\t\t\t\t\t\t\topL = OpSet;\n\t\t\t\t\t\t\t\t\t\t// fallthrough\n\t\t\t\t\t\t\t\t\tcase OpInsert:\n\t\t\t\t\t\t\t\t\t\t// A Set composed with Insert becomes Insert of Set content\n\t\t\t\t\t\t\t\t\t\tthis.editor.substrFromRaw(aL, aR[1]-nChange, aL[1], aR[2]);\n\t\t\t\t\t\t\t\t\t\taL[0] = opL;\n\t\t\t\t\t\t\t\t\t\tnChange -= aL[1];\n\t\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse // cursor, insert\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// Add in the RHS operation at proper location\n\t\t\t\t\t\t\tnewA.push(this.editor.copy(aR));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// copy any remaining actions, excluding cursors duplicated in rhs\n\t\t\tthis.moveEdits(newA, iL, this.length-1,\n\t\t\t\tfunction (e: OTSingleArrayEdit)\n\t\t\t\t\t{ return (e[0] != OpCursor) || (e[2] != '' && cursorCache[e[2]] === undefined) } );\n\n\t\t\tthis.edits = newA;\n\n\t\t\tthis.coalesce();\n\t\t}\n\n\ttryCompose(rhs: OTArrayLikeResource): boolean\n\t\t{\n\t\t\tif (this.length == 0)\n return true;\n\t\t\telse if (rhs.edits.length == 0)\n\t\t\t\treturn true;\n\n\t\t\treturn this.finalLength() == rhs.originalLength();\n }\n\n\tperformTransformReorder(bForceRetainBeforeInsert: boolean, newA: OTEdits, iBegin: number, iEnd: number): void\n\t\t{\n\t\t\tif (iBegin < 0 || iBegin > iEnd) return;\n\t\t\tif (bForceRetainBeforeInsert)\n\t\t\t{\n\t\t\t\tthis.moveEdits(newA, iBegin, iEnd, this.editor.isTmpRetainOrDelete);\n\t\t\t\tthis.moveEdits(newA, iBegin, iEnd, this.editor.isNotTmpRetainOrDelete);\t// Is Insert or Cursor\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.moveEdits(newA, iBegin, iEnd, this.editor.isNotTmpRetainOrDelete);\t// Is Insert or Cursor\n\t\t\t\tthis.moveEdits(newA, iBegin, iEnd, this.editor.isTmpRetainOrDelete);\n\t\t\t}\n\t\t}\n\n\t// Function: normalizeNewRetainsAfterTransform\n\t//\n\t// Description:\n\t//\tHelper function for transform() that does a post-processing pass to ensure that all\n\t//\tRetains are properly ordered with respect to Inserts that occur at the same location\n\t//\t(either before or after, depending on whether we are transforming based on server or client side).\n\t//\tThis ensures that the transform process is not sensitive to precise ordering of Inserts and\n\t//\tRetains (since that ordering doesn't actually change the semantics of the edit performed and\n\t//\ttherefore should not result in a difference in processing here). And yes, it's a subtle issue\n\t//\tthat may not actually occur in real edits produced by some particular editor but does arise when\n\t//\ttesting against randomly generated edit streams.\n\t//\n\t//\tA side consequence is also normalizing the ordering of inserts and deletes which also doesn't\n\t//\tchange the semantics of the edit but ensures we properly detect conflicting insertions.\n\t//\n\t//\tThe way to think of this algorithm is that Set's and Retains (pre-existing, not new TmpRetains) form\n\t//\thard boundaries in the ordering. The series of Cursor/TmpRetain/Insert/Deletes between Sets and Retains\n\t//\tare re-ordered by this algorithm. TmpRetain's get pushed to the front or the back depending on the bForce\n\t//\tflag passed in (which reflects which operation had precedence).\n\t//\n\tnormalizeNewRetainsAfterTransform(bForceRetainBeforeInsert: boolean): void\n\t\t{\n\t\t\tif (this.length == 0)\n\t\t\t\treturn;\n\n\t\t\tlet i: number = 0;\n\t\t\tlet newA: OTSingleArrayEdit[] = [];\n\t\t\tlet iLastEdge: number = 0;\n\n\t\t\t// Normalize ordering for newly insert retains so they are properly ordered\n\t\t\t// with respect to inserts occurring at the same location.\n\t\t\tfor (i = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet a: OTSingleArrayEdit = this.edits[i];\n\t\t\t\tif (a[0] == OpSet || a[0] == OpRetain)\n\t\t\t\t{\n\t\t\t\t\tthis.performTransformReorder(bForceRetainBeforeInsert, newA, iLastEdge, i-1);\n\t\t\t\t\tnewA.push(a);\n\t\t\t\t\tiLastEdge = i+1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.performTransformReorder(bForceRetainBeforeInsert, newA, iLastEdge, this.length-1);\n\n\t\t\t// One last time to switch TmpRetain to Retain\n\t\t\tfor (i = 0; i < newA.length; i++)\n\t\t\t\tif ((newA[i])[0] == OpTmpRetain)\n\t\t\t\t\t(newA[i])[0] = OpRetain;\n\t\t\tthis.edits = newA;\n\t\t}\n\n tryTransform(prior: OTArrayLikeResource, bPriorIsService: boolean): boolean\n {\n\t\t\tif (this.length == 0 || prior.length == 0)\n\t\t\t\treturn true;\n\n\t\t\treturn this.originalLength() == prior.originalLength();\n }\n\n\ttransform(prior: OTArrayLikeResource, bPriorIsService: boolean): void\n\t\t{\n\t\t\tif (this.length == 0 || prior.length == 0)\n\t\t\t\treturn;\n\n\t\t\t// Validate\n\t\t\tthis.basesConsistent(prior);\n\n\t\t\t// Break overlapping segments before start to simplify logic below.\n\t\t\tthis.alignEdges(prior, OTalignEdgesType.AlignForTransform);\n\n\t\t\tlet posR: number = 0; // These walk in parallel across the consistent base strings (only retains, sets and deletes count)\n\t\t\tlet posL: number = 0;\n\t\t\tlet iL: number = 0;\n\t\t\tlet bDone: boolean;\n\t\t\tlet newA: OTEdits = [];\n\n\t\t\tfor (let iR: number = 0; iR < prior.length; iR++)\n\t\t\t{\n\t\t\t\tlet aR: OTSingleArrayEdit = prior.edits[iR];\n\n\t\t\t\tswitch (aR[0])\n\t\t\t\t{\n\t\t\t\t\tcase OpCursor:\n\t\t\t\t\t\t// No-op\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpInsert:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t// Converts to a retain.\n\t\t\t\t\t\t// Need to find spot to insert retain. After loop, iL will contain location\n\t\t\t\t\t\tfor (; iL < this.length; iL++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (posR == posL)\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tlet aL: OTSingleArrayEdit = this.edits[iL];\n\t\t\t\t\t\t\tif (this.editor.isIgnore(aL))\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\tif (aL[0] != OpCursor && aL[0] != OpInsert)\n\t\t\t\t\t\t\t\tposL += aL[1];\n\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet nRetain: number = aR[1];\n\t\t\t\t\t\tnewA.push([ OpTmpRetain, nRetain, '' ]);\n\t\t\t\t\t\tposR += nRetain;\n\t\t\t\t\t\tposL += nRetain;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpSet:\n\t\t\t\t\t\t// Somewhat unintuitively, if prior is *not* service, then it will actually get applied *after*\n\t\t\t\t\t\t// the service instance of OpSet and so should take precedence. Therefore if prior is not service,\n\t\t\t\t\t\t// we need to go through and convert \"OpSets\" that overlap to be this content. If prior is service,\n\t\t\t\t\t\t// we can just treat them as \"retains\" since they have no effect on our operations.\n\t\t\t\t\t\tif (bPriorIsService)\n\t\t\t\t\t\t\tposR += aR[1];\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlet nRemaining: number = aR[1];\n\t\t\t\t\t\t\twhile (nRemaining > 0 && iL < this.length)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlet aL: OTSingleArrayEdit = this.edits[iL];\n\t\t\t\t\t\t\t\tif (this.editor.isIgnore(aL))\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tiL++;\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tlet valL: number = aL[1];\n\n\t\t\t\t\t\t\t\tif (aL[0] == OpCursor || aL[0] == OpInsert)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tiL++;\n\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tif (posR >= posL+valL)\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t// Not there yet\n\t\t\t\t\t\t\t\t\t\tposL += valL;\n\t\t\t\t\t\t\t\t\t\tiL++;\n\t\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tif (aL[0] == OpDelete || aL[0] == OpRetain)\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tif (valL <= nRemaining)\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tposR += valL;\n\t\t\t\t\t\t\t\t\t\t\t\tposL += valL;\n\t\t\t\t\t\t\t\t\t\t\t\tnRemaining -= valL;\n\t\t\t\t\t\t\t\t\t\t\t\tiL++;\n\t\t\t\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t// Not subsumed, but means that I didn't encounter an OpSet\n\t\t\t\t\t\t\t\t\t\t\t\tposR += nRemaining;\n\t\t\t\t\t\t\t\t\t\t\t\tnRemaining = 0;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse // OpSet\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tif (aL[1] <= nRemaining)\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tposR += valL;\n\t\t\t\t\t\t\t\t\t\t\t\tposL += valL;\n\t\t\t\t\t\t\t\t\t\t\t\tthis.editor.substrFromRaw(aL, aR[1] - nRemaining, valL, aR[2]);\n\t\t\t\t\t\t\t\t\t\t\t\tnRemaining -= valL;\n\t\t\t\t\t\t\t\t\t\t\t\tiL++;\n\t\t\t\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t// don't advance posL or iL because we will re-process the left over\n\t\t\t\t\t\t\t\t\t\t\t\t// part for the next action. Simply edit the data in place.\n\t\t\t\t\t\t\t\t\t\t\t\t// Set [0, nRemaining] of aL.Data to [aR[1]-nRemaining, nRemaining]\n\t\t\t\t\t\t\t\t\t\t\t\t//aL.Data.delete(0, nRemaining);\n\t\t\t\t\t\t\t\t\t\t\t\t//aL.Data.InsertValue(0, aR.Data, aR[1]-nRemaining, nRemaining);\n\t\t\t\t\t\t\t\t\t\t\t\taL[2] = aR[2].substr(aR[1] - nRemaining) + aL[2].substr(nRemaining);\n\t\t\t\t\t\t\t\t\t\t\t\tposR += nRemaining;\n\t\t\t\t\t\t\t\t\t\t\t\tnRemaining = 0;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpDelete:\n\t\t\t\t\t\t{\n\t\t\t\t\t\tlet nRemaining: number = aR[1];\n\t\t\t\t\t\tlet nDelay: number = 0;\n\t\t\t\t\t\tlet iDelay: number;\n\n\t\t\t\t\t\t// Retains, sets and deletes are subsumed by prior deletes\n\t\t\t\t\t\tfor (; nRemaining > 0 && iL < this.length; iL++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlet aL: OTSingleArrayEdit = this.edits[iL];\n\t\t\t\t\t\t\tif (this.editor.isIgnore(aL))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (nDelay > 0)\n\t\t\t\t\t\t\t\t\tnDelay++;\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (aL[0] == OpCursor || aL[0] == OpInsert)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (nDelay == 0)\n\t\t\t\t\t\t\t\t\tiDelay = iL;\n\t\t\t\t\t\t\t\tnDelay++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (posR >= posL+aL[1])\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t// Go ahead and push any delayed actions\n\t\t\t\t\t\t\t\t\tfor (let j: number = iDelay; nDelay > 0; nDelay--, j++)\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tlet aD: OTSingleArrayEdit = this.edits[j];\n\t\t\t\t\t\t\t\t\t\tif (! this.editor.isIgnore(aD))\n\t\t\t\t\t\t\t\t\t\t\tnewA.push(aD);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Prior to the deleted content\n\t\t\t\t\t\t\t\t\tposL += aL[1];\n\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t// Retain/set/delete is fully subsumed.\n\t\t\t\t\t\t\t\t\tposR += aL[1];\n\t\t\t\t\t\t\t\t\tposL += aL[1];\n\t\t\t\t\t\t\t\t\tnRemaining -= aL[1];\n\t\t\t\t\t\t\t\t\tthis.editor.setIgnore(aL);\n\t\t\t\t\t\t\t\t\tif (nDelay > 0)\n\t\t\t\t\t\t\t\t\t\tnDelay++;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// We want to reprocess any trailing insert/cursors so we recognize conflicting inserts even when\n\t\t\t\t\t\t// deletes intervene.\n\t\t\t\t\t\tif (nDelay > 0)\n\t\t\t\t\t\t\tiL = iDelay;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpRetain:\n\t\t\t\t\t\t// Just advance cursor\n\t\t\t\t\t\tposR += aR[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.moveEdits(newA, iL);\n\t\t\tthis.edits = newA;\n\t\t\tthis.normalizeNewRetainsAfterTransform(bPriorIsService);\n\t\t\tthis.coalesce();\n\t\t}\n\n\t//\n\t// Function: generateRandom\n\t//\n\t// Description:\n\t//\tGenerate action containing a sequence of retain, insert, delete, cursor with the initial\n\t//\tstate of the string being nInitial. Make sure I always generate at least one insert or delete.\n\t//\tAlways operate in units of 4 (.123).\n\t//\n\tgenerateRandom(nInitial: number, clientID: string): void\n\t\t{\n\t\t\t// Ensure clean start\n\t\t\tthis.empty();\n\n\t\t\t// Setup randomizer\n\t\t\tlet nOps: number = 0;\n\t\t\tlet nLen: number;\n\t\t\tlet nBound: number;\n\t\t\tlet s: any;\n\n\t\t\twhile (nInitial > 0 || nOps == 0)\n\t\t\t{\n\t\t\t\tlet op: number = randomWithinRange(0, 4);\n\n\t\t\t\tnBound = nInitial / TestUnitSize;\n\t\t\t\tif (nInitial == 0 && (op == OpDelete || op == OpRetain || op == OpSet))\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (op)\n\t\t\t\t{\n\t\t\t\t\tcase OpInsert:\n\t\t\t\t\t\tnOps++;\n\t\t\t\t\t\tnLen = randomWithinRange(1, 5);\n\t\t\t\t\t\ts = this.editor.raw.empty();\n\t\t\t\t\t\tfor (let i: number = 0; i < nLen; i++)\n\t\t\t\t\t\t\ts = this.editor.raw.append(s, counterValue(this.editor.raw, TestCounter++));\n\t\t\t\t\t\tnLen *= TestUnitSize;\n\t\t\t\t\t\tthis.edits.push([ OpInsert, nLen, s ]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpDelete:\n\t\t\t\t\t\tnOps++;\n\t\t\t\t\t\tnLen = randomWithinRange(1, nBound > 3 ? nBound / 3 : nBound);\n\t\t\t\t\t\tnLen *= TestUnitSize;\n\t\t\t\t\t\tnInitial -= nLen;\n\t\t\t\t\t\tthis.edits.push([ OpDelete, nLen, this.editor.raw.empty() ]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpCursor:\n\t\t\t\t\t\tthis.edits.push([ OpCursor, 0, clientID ]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpRetain:\n\t\t\t\t\t\tnLen = randomWithinRange(1, nBound);\n\t\t\t\t\t\tnLen *= TestUnitSize;\n\t\t\t\t\t\tnInitial -= nLen;\n\t\t\t\t\t\tthis.edits.push([ OpRetain, nLen, this.editor.raw.empty() ]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpSet:\n\t\t\t\t\t\tnLen = 1;\n\t\t\t\t\t\ts = this.editor.raw.empty();\n\t\t\t\t\t\tfor (let i: number = 0; i < nLen; i++)\n\t\t\t\t\t\t\tthis.editor.raw.append(s, counterValue(this.editor.raw, TestCounter++));\n\t\t\t\t\t\tnLen *= TestUnitSize;\n\t\t\t\t\t\tnInitial -= nLen;\n\t\t\t\t\t\tthis.edits.push([ OpSet, nLen, s ]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Most importantly ensures canonical ordering of inserts and deletes.\n\t\t\tthis.coalesce();\n\t\t}\n}\n\nexport class OTStringResource extends OTArrayLikeResource\n{\n\tstatic _editor: OTSingleArrayEditor = new OTSingleArrayEditor(new OTStringOperations());\n\tconstructor(rname: string)\n\t\t{\n\t\t\tsuper(OTStringResource._editor, rname);\n\t\t}\n\tstatic factory(rname: string): OTStringResource { return new OTStringResource(rname); }\n\tcopy(): OTStringResource\n\t\t{\n\t\t\tlet copy: OTStringResource = new OTStringResource(this.resourceName);\n\t\t\tcopy.edits = this.edits.map(copy.editor.copy, copy.editor);\n\t\t\treturn copy;\n\t\t}\n}\n\nexport class OTArrayResource extends OTArrayLikeResource\n{\n\tstatic _editor: OTSingleArrayEditor = new OTSingleArrayEditor(new OTArrayOperations());\n\tconstructor(rname: string)\n\t\t{\n\t\t\tsuper(OTArrayResource._editor, rname);\n\t\t}\n\tstatic factory(rname: string): OTArrayResource { return new OTArrayResource(rname); }\n\n\tcopy(): OTArrayResource\n\t\t{\n\t\t\tlet copy: OTArrayResource = new OTArrayResource(this.resourceName);\n\t\t\tcopy.edits = this.edits.map(copy.editor.copy, copy.editor);\n\t\t\treturn copy;\n\t\t}\n}\n\nfunction randomWithinRange(nMin: number, nMax: number): number\n{\n\treturn nMin + Math.floor(Math.random() * (nMax - nMin + 1));\n}\n\nfunction counterValue(ops: IOTArrayLikeOperations, c: number): any\n{\n\tswitch (ops.underlyingTypeName())\n\t{\n\t\tcase 'string':\n\t\t\t{\n\t\t\t\tlet a: string[] = new Array(TestUnitSize);\n\t\t\t\ta[0] = '.';\n\t\t\t\tfor (let j: number = 1; j < TestUnitSize; j++, c = Math.floor(c / 10))\n\t\t\t\t\ta[TestUnitSize - j] = \"\" + (c % 10);\n\t\t\t\treturn a.join('');\n\t\t\t}\n\t\tcase 'array':\n\t\t\t{\n\t\t\t\tlet a: number[] = new Array(TestUnitSize);\n\t\t\t\tfor (let i: number = 0; i < TestUnitSize; i++, c += 0.1)\n\t\t\t\t\ta[i] = c;\n\t\t\t\treturn a;\n\t\t\t}\n\t\tdefault:\n\t\t\tthrow \"counterValue: Unexpected underlying array-like type.\"\n\t}\n}\n","// Shared libraries\nimport * as LogAbstract from \"../logabstract/all\";\n\nimport * as OT from \"./ottypes\";\nimport * as OTC from \"./otcomposite\";\nimport * as OTE from \"./otengine\";\n\nexport class OTClientEngine extends OTE.OTEngine\n{\n\t// Data members\n\tclientID: string;\n\tresourceID: string;\n\tisNeedAck: boolean;\n\tisNeedResend: boolean;\n bReadOnly: boolean;\n\tclientSequenceNo: number;\n\tstateServer: OTC.OTCompositeResource;\n\tstateLocal: OTC.OTCompositeResource;\n valCache: any;\n prefailCache: any;\n\n\tactionAllClient: OTC.OTCompositeResource;\n\tactionAllPendingClient: OTC.OTCompositeResource;\n\tactionSentClient: OTC.OTCompositeResource;\n\tactionSentClientOriginal: OTC.OTCompositeResource;\n\tactionServerInterposedSentClient: OTC.OTCompositeResource;\n\n\t// Constructor\n\tconstructor(ilog: LogAbstract.ILog, rid: string, cid: string)\n\t\t{\n super(ilog);\n\n\t\t\tthis.resourceID = rid;\n\t\t\tthis.clientID = cid;\n\t\t\tthis.initialize();\n this.bReadOnly = false;\n this.valCache = {};\n\t\t}\n\n\tinitialize(): void\n\t\t{\n if (this.prefailCache === undefined && this.clientSequenceNo > 0)\n this.prefailCache = this.valCache;\n\t\t\tthis.clientSequenceNo = 0;\n\t\t\tthis.isNeedAck = false;\n\t\t\tthis.isNeedResend = false;\n\t\t\tthis.actionAllClient = new OTC.OTCompositeResource(this.resourceID, this.clientID);\n\t\t\tthis.actionAllPendingClient = new OTC.OTCompositeResource(this.resourceID, this.clientID);\n\t\t\tthis.actionSentClient = new OTC.OTCompositeResource(this.resourceID, this.clientID);\n\t\t\tthis.actionSentClientOriginal = new OTC.OTCompositeResource(this.resourceID, this.clientID);\n\t\t\tthis.actionServerInterposedSentClient = new OTC.OTCompositeResource(this.resourceID, this.clientID);\n\t\t\tthis.stateServer = new OTC.OTCompositeResource(this.resourceID, this.clientID);\n\t\t\tthis.stateLocal = new OTC.OTCompositeResource(this.resourceID, this.clientID);\n\t\t}\n\n\t// Members\n\tserverClock(): number\n\t\t{\n\t\t\treturn this.stateServer.clock;\n\t\t}\n\n rid(): string\n {\n return this.resourceID;\n }\n\n cid(): string\n {\n return this.resourceID;\n }\n\n toPartialValue(resourceName: string): any\n {\n return this.valCache[resourceName];\n }\n\n\ttoValue(): any\n\t\t{\n\t\t\treturn this.valCache;\n\t\t}\n\n toPrefailValue(): any\n {\n return this.prefailCache;\n }\n\n clearPrefail(): void\n {\n delete this.prefailCache;\n }\n\n setReadOnly(b: boolean): void\n {\n if (b != this.bReadOnly)\n {\n this.bReadOnly = b;\n //No longer necessary - especially since we want to allow local edits to be applied for temporary work.\n //if (this.bReadOnly)\n // this.failbackToServerState();\n }\n }\n\n startLocalEdit(): OTC.OTCompositeResource\n {\n return new OTC.OTCompositeResource(this.resourceID, this.clientID);\n }\n\n\tisPending(): boolean\n\t\t{\n\t\t\treturn this.isNeedResend || !this.actionAllPendingClient.isEmpty();\n\t\t}\n\n\tgetPending(): OTC.OTCompositeResource\n\t\t{\n\t\t\tif (!this.isNeedResend && this.actionAllPendingClient.isEmpty())\n\t\t\t\treturn null;\n\t\t\telse\n\t\t\t{\n\t\t\t\t// If \"isNeedResend\" I need to send the exact same event (instead of aggregating all pending)\n\t\t\t\t// because the server might have actually received and processed the event and I just didn't\n\t\t\t\t// receive acknowledgement. If I merge that event into others I'll lose ability to distinguish\n\t\t\t\t// that. Eventually when I re-establish communication with server I will get that event response\n\t\t\t\t// and can then move on.\n\t\t\t\tif (! this.isNeedResend)\n\t\t\t\t{\n\t\t\t\t\tthis.actionSentClient = this.actionAllPendingClient.copy();\n //console.log(`ClientEngine:getPending: bump sequence count from ${this.clientSequenceNo}`);\n\t\t\t\t\tthis.actionSentClient.clientSequenceNo = this.clientSequenceNo++;\n\t\t\t\t\tthis.actionAllPendingClient.empty();\n\t\t\t\t}\n\t\t\t\tthis.actionSentClient.clock = this.stateServer.clock;\n\t\t\t\tthis.actionSentClientOriginal = this.actionSentClient.copy();\n\t\t\t\tthis.actionServerInterposedSentClient.empty();\n\t\t\t\tthis.isNeedAck = true;\n\t\t\t\tthis.isNeedResend = false;\n\t\t\t\treturn this.actionSentClient.copy();\n\t\t\t}\n\t\t}\n\n\t// When I fail to send, I need to reset to resend the event again\n\tresetPending(): void\n\t\t{\n\t\t\tif (this.isNeedAck)\n\t\t\t{\n\t\t\t\tthis.isNeedAck = false;\n\t\t\t\tthis.isNeedResend = true;\n //console.log('otclientengine: resetPending');\n\t\t\t}\n //else\n // console.log('otclientengine: resetPending ignored because isNeedAck false');\n\t\t}\n\n\t// When I don't accurately have server state - will then refresh from server\n\tfailbackToInitialState(): void\n\t\t{\n console.log('otclientengine: failbackToInitialState');\n if (this.prefailCache === undefined)\n this.prefailCache = this.valCache;\n\t\t\tthis.initialize();\n\t\t}\n\n\t// When I have server state but my state got mixed up\n\tfailbackToServerState(): void\n\t\t{\n console.log('otclientengine: failbackToServerState');\n if (this.prefailCache === undefined)\n this.prefailCache = this.valCache;\n\t\t\tthis.stateLocal = this.stateServer.copy();\n\t\t\tthis.isNeedAck = false;\n\t\t\tthis.actionSentClient.empty();\n\t\t\tthis.actionSentClientOriginal.empty();\n\t\t\tthis.actionServerInterposedSentClient.empty();\n\t\t\tthis.actionAllPendingClient.empty();\n\t\t\tthis.actionAllClient.empty();\n this.valCache = this.stateLocal.toValue();\n this.emit('state');\n\t\t}\n\n\t//\n\t// Function: OTClientEngine.addRemote\n\t//\n\t// Description:\n\t//\tThis function is really where the action is in managing the dynamic logic of applying OT. This is run\n\t//\ton each end point and handles the events received from the server. This includes server acknowledgements\n\t//\t(both success and failure) of locally generated events as well as all the events generated from other\n\t//\tclients.\n\t//\n\t//\tThe key things that happen here are:\n\t//\t\t1. Track server state.\n\t//\t\t2. Respond to server acknowledgement of locally generated events. This also includes validation\n\t//\t\t\t(with failback code) in case where server transformed my event in a way that was inconsistent\n\t//\t\t\twith what I expected (due to insert collision that arose due to multiple independent events).\n\t//\t\t3. Transform the incoming event (by local events) so it can be applied to local state.\n\t//\t\t4. Transform pending local events so they can be dispatched to the service once the service\n\t//\t\t\tis ready for another event.\n\t//\n\n\taddRemote(orig: OTC.OTCompositeResource): void\n\t\t{\n\t\t\t// Reset if server forces restart\n\t\t\tif (orig.clock == OTC.clockInitialValue)\n\t\t\t{\n\t\t\t\tthis.failbackToInitialState();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Reset if server restarted and we don't sync up\n\t\t\tif (orig.clock < 0)\n\t\t\t{\n\t\t\t\t// If server didn't lose anything I can just keep going...\n\t\t\t\tif (this.stateServer.clock+1 == -orig.clock)\n\t\t\t\t\torig.clock = - orig.clock\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.failbackToInitialState();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Ignore if I've seen this event already\n\t\t\tif (orig.clock <= this.serverClock())\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet bMine: boolean = orig.clientID == this.clientID;\n\t\t\tlet bResend: boolean = bMine && orig.clock == OTC.clockFailureValue;\n\t\t\tlet a: OTC.OTCompositeResource = orig.copy();\n\n\t\t\tif (bResend)\n\t\t\t{\n\t\t\t\t// Service failed my request. Retry with currently outstanding content.\n\t\t\t\tthis.resetPending();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttry\n\t\t\t{\n\t\t\t\t// Track server state and clock\n\t\t\t\tthis.stateServer.compose(a);\n\n\t\t\t\tif (bMine)\n\t\t\t\t{\n\t\t\t\t\t// Validate that I didn't run into unresolvable conflict\n\t\t\t\t\tif (! this.actionServerInterposedSentClient.isEmpty())\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.actionSentClientOriginal.transform(this.actionServerInterposedSentClient, true);\n\t\t\t\t\t\tif (! this.actionSentClient.effectivelyEqual(this.actionSentClientOriginal))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.failbackToServerState();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// I don't need to apply to local state since it has already been applied - this is just an ack.\n\t\t\t\t\tthis.isNeedAck = false;\n\t\t\t\t\tthis.actionSentClient.empty();\n\t\t\t\t\tthis.actionSentClientOriginal.empty();\n\t\t\t\t\tthis.actionServerInterposedSentClient.empty();\n\t\t\t\t\tthis.actionAllClient = this.actionAllPendingClient.copy();\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// Transform server action to apply locally by transforming by all pending client actions\n\t\t\t\t\ta.transform(this.actionAllClient, false);\n\n\t\t\t\t\t// And then compose with local state\n\t\t\t\t\tthis.stateLocal.compose(a);\n\n\t\t\t\t\t// Transform pending client by server action so it is rooted off the server state.\n\t\t\t\t\t// This ensures that I can convert the next server action I receive.\n\t\t\t\t\tthis.actionAllClient.transform(orig, true);\n\n\t\t\t\t\t// Transform server action to be after previously sent client action and then\n\t\t\t\t\t// transform the unsent actions so they are ready to be sent.\n\t\t\t\t\tlet aServerTransformed: OTC.OTCompositeResource = orig.copy();\n\t\t\t\t\taServerTransformed.transform(this.actionSentClient, false);\n\t\t\t\t\tthis.actionAllPendingClient.transform(aServerTransformed, true);\n\n\t\t\t\t\t// And then transform the sent client action so ready to be used for transforming next server event\n\t\t\t\t\tthis.actionSentClient.transform(orig, true);\n\n\t\t\t\t\t// Track server operations interposed between a sent action\n\t\t\t\t\tif (this.isNeedAck)\n\t\t\t\t\t\tthis.actionServerInterposedSentClient.compose(orig);\n\n // Let clients know\n this.valCache = this.stateLocal.toValue();\n this.emit('state');\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (err)\n\t\t\t{\n this.ilog.error(\"OTClientEngine.addRemote: unexpected exception: \" + err);\n\t\t\t\tthis.failbackToInitialState();\n\t\t\t}\n\t\t}\n\n\t//\n\t// Function: addLocalEdit\n\t//\n\t// Description:\n\t//\tThis is the logic for adding an action to the local state. The logic is straight-forward\n\t//\tas we need to track:\n\t//\t\t1. The composed set of unacknowledged locally generated events.\n\t//\t\t2. The composed set of unsent locally generated events (queued until sent event is acknowledged).\n\t//\t\t3. The local state.\n\t//\t\t4. An undo operation.\n\t//\n\taddLocalEdit(orig: OTC.OTCompositeResource): void\n\t\t{\n //Comment out bReadOnly test to now allow changes to be locally applied for readonly sessions, for playing around.\n //Server still prevents any edits from actually being applied. And clientsession changes\n //Don't actually send edits as well.\n //if (! this.bReadOnly)\n {\n try\n {\n this.actionAllClient.compose(orig);\n this.actionAllPendingClient.compose(orig);\n this.stateLocal.compose(orig);\n this.valCache = this.stateLocal.toValue();\n this.emit('state');\n }\n catch (err)\n {\n this.ilog.error(\"OTClientEngine.addLocalEdit: unexpected exception: \" + err);\n this.failbackToInitialState();\n }\n }\n\t\t}\n};\n","import * as OT from \"./ottypes\";\nimport * as OTA from \"./otarray\";\nimport * as OTM from \"./otmap\";\nimport * as OTC from \"./otcounter\";\n\nexport const clockInitialValue: number = -1;\t\t// Initial value\nexport const clockTerminateValue: number = -2;\t\t// Terminal action from client.\nexport const clockRandomizeValue: number = -3;\t\t// Fill in with random data.\nexport const clockFailureValue: number = -4;\t\t// Server failed to apply\nexport const clockInitializeValue: number = -5;\t\t// Used to initialize client to a specific string value.\nexport const clockUndoValue: number = -6;\t\t\t// Used to indicate we should generate an undo event.\nexport const clockSeenValue: number = -7;\t\t\t// Server has already seen this event\n\nexport class OTCompositeResource extends OT.OTResourceBase\n{\n\tresourceID: string;\n\tclientID: string;\n\tclock: number;\n\tclientSequenceNo: number;\n\tstatic typeRegistry: any;\n\n\tconstructor(rid: string, cid: string)\n\t\t{\n\t\t\tsuper('root', 'composite');\n\t\t\tthis.resourceID = rid;\n\t\t\tthis.clientID = cid;\n\t\t\tthis.clock = clockInitialValue;\n\t\t\tthis.clientSequenceNo = 0;\n\t\t}\n\n\tstatic registerType(underlyingType: string, factory: (resourceName: string) => OT.OTResourceBase): void\n\t\t{\n\t\t\tif (OTCompositeResource.typeRegistry == null)\n\t\t\t\tOTCompositeResource.typeRegistry = { };\n\t\t\tOTCompositeResource.typeRegistry[underlyingType] = factory;\n\t\t}\n\n\tfindResource(rname: string, utype: string = '', bConstruct: boolean = false): OT.IOTResource\n\t\t{\n\t\t\tfor (let i: number = this.length-1; i >= 0; i--)\n\t\t\t\tif (this.edits[i].resourceName === rname)\n\t\t\t\t\treturn this.edits[i];\n\t\t\tif (bConstruct)\n\t\t\t{\n\t\t\t\tlet edit: OT.IOTResource = OTCompositeResource.constructResource(rname, utype);\n\t\t\t\tthis.edits.push(edit);\n\t\t\t\treturn edit;\n\t\t\t}\n\t\t\telse\n\t\t\t\treturn null;\n\t\t}\n\n map(rid: string): OTM.OTMapResource\n {\n return this.findResource(rid, 'map', true) as OTM.OTMapResource;\n }\n\n array(rid: string): OTA.OTArrayResource\n {\n return this.findResource(rid, 'array', true) as OTA.OTArrayResource;\n }\n\n counter(rid: string): OTC.OTCounterResource\n {\n return this.findResource(rid, 'counter', true) as OTC.OTCounterResource;\n }\n\n\tgarbageCollect(map: any): boolean\n\t\t{\n\t\t\tif (map)\n\t\t\t{\n\t\t\t\tlet bDirty: boolean = false;\n\t\t\t\tfor (let i: number = this.length-1; i >= 0; i--)\n\t\t\t\t{\n\t\t\t\t\tif (map[this.edits[i].resourceName] === undefined)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.edits.splice(i, 1);\n\t\t\t\t\t\tbDirty = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn bDirty;\n\t\t\t}\n\t\t\telse\n\t\t\t\treturn false;\t// If no resource map, we don't garbage collect\n\t\t}\n\n\tisEmpty(): boolean\n\t\t{\n\t\t\t// Canonical empty is an empty edits array, but an array of empty edits is always considered empty\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t\tif (! this.edits[i].isEmpty())\n\t\t\t\t\treturn false;\n\t\t\treturn true;\n\t\t}\n\n\t// Copy an instance\n\tcopy(): OTCompositeResource\n\t\t{\n\t\t\tlet c: OTCompositeResource = new OTCompositeResource(this.resourceID, this.clientID);\n\t\t\tc.clock = this.clock;\n\t\t\tc.clientSequenceNo = this.clientSequenceNo;\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t\tc.edits.push(this.edits[i].copy());\n\t\t\treturn c;\n\t\t}\n\n\t// Test whether two operations are effectively equivalent\n\teffectivelyEqual(rhs: OTCompositeResource): boolean\n\t\t{\n\t\t\t// This should really be a structural error\n\t\t\tif (this.length != rhs.length)\n\t\t\t\treturn false;\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet lhsEdit: OT.IOTResource = this.edits[i];\n\t\t\t\tlet rhsEdit: OT.IOTResource = rhs.findResource(lhsEdit.resourceName);\n\n\t\t\t\tif ((rhsEdit == null && !lhsEdit.isEmpty()) || ! lhsEdit.effectivelyEqual(rhsEdit))\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t// Core OT algorithm for this type\n\ttransform(rhs: OTCompositeResource, bPriorIsService: boolean): void\n\t\t{\n\t\t\tfor (let i: number = 0; i < rhs.length; i++)\n\t\t\t{\n\t\t\t\tlet rhsEdit: OT.IOTResource = rhs.edits[i];\n\t\t\t\tlet lhsEdit: OT.IOTResource = this.findResource(rhsEdit.resourceName, rhsEdit.underlyingType, false);\n\t\t\t\tif (lhsEdit)\n\t\t\t\t\tlhsEdit.transform(rhsEdit, bPriorIsService);\n\t\t\t}\n\t\t}\n\n\ttryTransform(rhs: OTCompositeResource, bPriorIsService: boolean): boolean\n\t\t{\n let bSucceed = true;\n\n\t\t\tfor (let i: number = 0; bSucceed && i < rhs.length; i++)\n\t\t\t{\n\t\t\t\tlet rhsEdit: OT.IOTResource = rhs.edits[i];\n\t\t\t\tlet lhsEdit: OT.IOTResource = this.findResource(rhsEdit.resourceName, rhsEdit.underlyingType, false);\n\t\t\t\tif (lhsEdit)\n\t\t\t\t\tbSucceed = lhsEdit.tryTransform(rhsEdit, bPriorIsService);\n\t\t\t}\n\n return bSucceed;\n\t\t}\n\n\t// compose two edit actions\n\tcompose(rhs: OTCompositeResource): void \t\t\t// throws on error\n\t\t{\n\t\t\tfor (let i: number = 0; i < rhs.length; i++)\n\t\t\t{\n\t\t\t\tlet rhsEdit: OT.IOTResource = rhs.edits[i];\n\n\t\t\t\tlet lhsEdit: OT.IOTResource = this.findResource(rhsEdit.resourceName, rhsEdit.underlyingType, !rhsEdit.isEmpty());\n\t\t\t\tif (lhsEdit)\n\t\t\t\t\tlhsEdit.compose(rhsEdit);\n\t\t\t}\n\n\t\t\tthis.clock = rhs.clock;\n\t\t\tthis.clientSequenceNo = rhs.clientSequenceNo;\n\t\t}\n\n\ttryCompose(rhs: OTCompositeResource): boolean\n\t\t{\n let bSucceed = true;\n\t\t\tfor (let i: number = 0; bSucceed && i < rhs.length; i++)\n\t\t\t{\n\t\t\t\tlet rhsEdit: OT.IOTResource = rhs.edits[i];\n\n\t\t\t\tlet lhsEdit: OT.IOTResource = this.findResource(rhsEdit.resourceName, rhsEdit.underlyingType, !rhsEdit.isEmpty());\n\t\t\t\tif (lhsEdit)\n\t\t\t\t\tbSucceed = lhsEdit.tryCompose(rhsEdit);\n\t\t\t}\n\n return bSucceed;\n\t\t}\n\n\t// apply this edit to an existing value, returning new value (if underlying type is mutable, may modify input)\n\t// For composite, takes array of values, returns array of results, one for each underlying resource.\n\tapply(runningValue: any): any\n\t\t{\n\t\t\tif (runningValue == null)\n\t\t\t\trunningValue = { };\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet e: OT.IOTResource = this.edits[i];\n\t\t\t\trunningValue[e.resourceName] = e.apply(runningValue[e.resourceName]);\n\t\t\t}\n\t\t\treturn runningValue;\n\t\t}\n\n toPartialValue(resourceName: string): any\n {\n let e = this.edits.find(e => e.resourceName === resourceName);\n return e ? e.apply(null) : null;\n }\n\n\ttoValue(): any\n\t\t{\n\t\t\treturn this.apply(null);\n\t\t}\n\n\tminimize(): void\n\t\t{\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t\tthis.edits[i].minimize();\n\t\t}\n\n\tstatic constructResource(rname: string, utype: string): OT.IOTResource\n\t\t{\n\t\t\tif (OTCompositeResource.typeRegistry == null)\n\t\t\t{\n\t\t\t\t//throw \"OTCompositeResource.constructResource: no registered factories\";\n\t\t\t\t// This is only place where Composite type knows of other types - could hoist to outer level\n\t\t\t\tOTCompositeResource.registerType('string', OTA.OTStringResource.factory);\n\t\t\t\tOTCompositeResource.registerType('array', OTA.OTArrayResource.factory);\n\t\t\t\tOTCompositeResource.registerType('map', OTM.OTMapResource.factory);\n\t\t\t\tOTCompositeResource.registerType('counter', OTC.OTCounterResource.factory);\n\t\t\t}\n\n\t\t\tlet factory: (resourceName: string) => OT.OTResourceBase = OTCompositeResource.typeRegistry[utype];\n\t\t\tif (factory == null)\n\t\t\t\tthrow \"OTCompositeResource.constructResource: no registered factory for \" + utype;\n\t\t\treturn factory(rname);\n\t\t}\n\n\t// Deserialization\n\tstatic constructFromObject(o: any): OTCompositeResource\n\t\t{\n\t\t\tlet cedit: OTCompositeResource = new OTCompositeResource(\"\", \"\");\n\t\t\tif (o['resourceID'] !== undefined)\n\t\t\t\tcedit.resourceID = o['resourceID'];\n\t\t\tif (o['clientID'] !== undefined)\n\t\t\t\tcedit.clientID = o['clientID'];\n\t\t\tif (o['clock'] !== undefined)\n\t\t\t\tcedit.clock = Number(o['clock']);\n\t\t\tif (o['clientSequenceNo'] !== undefined)\n\t\t\t\tcedit.clientSequenceNo = Number(o['clientSequenceNo']);\n\t\t\tif (o['edits'] !== undefined)\n\t\t\t{\n\t\t\t\tlet arrEdits: any = o['edits'];\n\t\t\t\tfor (let i: number = 0; i < arrEdits.length; i++)\n\t\t\t\t{\n\t\t\t\t\tlet a: any = arrEdits[i];\n\t\t\t\t\tlet rname: string = a['resourceName'];\n\t\t\t\t\tlet utype: string = a['underlyingType'];\n\t\t\t\t\tlet edit: OT.IOTResource = this.constructResource(rname, utype);\n\t\t\t\t\tedit.edits = a['edits'];\n\t\t\t\t\tcedit.edits.push(edit);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cedit;\n\t\t}\n\n\t// Serialization\n\ttoJSON(): any\n\t\t{\n\t\t\tlet o: any = {\n\t\t\t\t\"resourceID\": this.resourceID,\n\t\t\t\t\"clientID\": this.clientID,\n\t\t\t\t\"clock\": this.clock,\n\t\t\t\t\"clientSequenceNo\": this.clientSequenceNo,\n\t\t\t\t\"edits\": [] };\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet edit: OT.IOTResource = this.edits[i];\n\t\t\t\tlet oEdit: any = { \"resourceName\": edit.resourceName, \"underlyingType\": edit.underlyingType, \"edits\": edit.edits };\n\t\t\t\to[\"edits\"].push(oEdit);\n\t\t\t}\n\t\t\treturn o;\n\t\t}\n\n}\n","import * as OT from \"./ottypes\";\n\n// This implements OT for a simple map of counters. Instead of a new value replacing the \n// keyed value, values are added together. This allows a simple accumulating counter.\n// Possible future additions:\n//\tAdd additional semantics for how the values accumulate. Examples from DropBox's datastore API\n//\tincluded \"min\" and \"max\" as alternate rules to \"sum\".\n//\n\nexport const OpCounterAdd = 1;\nexport const OpCounterDel = 2;\nexport type CounterEdit = [ number, string, any ];\t// Op, Key, Value\n\nexport class OTCounterResource extends OT.OTResourceBase\n{\n\tconstructor(rid: string)\n\t\t{\n\t\t\tsuper(rid, 'counter');\n\t\t}\n\tstatic factory(rid: string): OTCounterResource { return new OTCounterResource(rid); }\n\n\t// copy an instance\n\tcopy(): OTCounterResource\n\t\t{\n\t\t\tlet c: OTCounterResource = new OTCounterResource(this.resourceName);\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet e: CounterEdit = this.edits[i];\n\t\t\t\tc.edits.push([ e[0], e[1], e[2] ]);\n\t\t\t}\n\t\t\treturn c;\n\t\t}\n\n\t// Test whether two operations are effectively equivalent\n\teffectivelyEqual(rhs: OTCounterResource): boolean\n\t\t{\n\t\t\t// This should really be a structural error\n\t\t\tif (this.length != rhs.length)\n\t\t\t\treturn false;\n\n\t\t\t// This checks for exact structural equivalency. Really the ordering shouldn't matter for Counter so\n\t\t\t// an improvement to this algorithm would be to be more robust to ordering differences.\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet e1: CounterEdit = this.edits[i];\n\t\t\t\tlet e2: CounterEdit = rhs.edits[i];\n\t\t\t\tif (e1[0] != e2[0] || e1[1] != e2[1] || e1[2] != e2[2])\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t// Core OT algorithm for this type\n\ttransform(prior: OTCounterResource, bPriorIsService: boolean): void\n\t\t{\n\t\t\t// Last wins - if I'm last, my adds and deletes are all preserved\n\t\t\tif (bPriorIsService)\n\t\t\t\treturn;\n\n\t\t\t// Deletes in prior will delete mine. Implement by loading up properties rather than\n\t\t\t// using N^2 lookup through Edits array.\n\t\t\tlet myEdits: any = this.toObject();\n\t\t\tlet bEdited: boolean = false;\n\n\t\t\t// Now delete any that are deleted by prior.\n\t\t\tfor (let i: number = 0; i < prior.length; i++)\n\t\t\t{\n\t\t\t\tlet eP: CounterEdit = prior.edits[i];\n\t\t\t\tif (eP[0] == OpCounterDel)\n\t\t\t\t{\n\t\t\t\t\tdelete myEdits[eP[1]];\n\t\t\t\t\tbEdited = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Now restore edit array from edited object\n\t\t\tif (bEdited)\n\t\t\t\tthis.fromObject(myEdits);\n\t\t}\n\n\t// compose two edit actions\n\tcompose(rhs: OTCounterResource): void \t\t\t// throws on error\n\t\t{\n\t\t\tlet lhsKeys: any = this.toObject();\n\t\t\tlet rhsKeys: any = rhs.toObject();\n\t\t\tfor (let i: number = 0; i < rhs.length; i++)\n\t\t\t{\n\t\t\t\tlet eR: CounterEdit = rhs.edits[i];\n\t\t\t\tlet eL: CounterEdit = lhsKeys[eR[1]];\n\t\t\t\tif (eL === undefined)\n\t\t\t\t\tlhsKeys[eR[1]] = [ eR[0], eR[1], eR[2] ];\n\t\t\t\telse\n\t\t\t\t\teL[2] += eR[2];\n\t\t\t}\n\t\t\tthis.fromObject(lhsKeys);\n\t\t}\n\n\tapply(startValue: any): any\n\t\t{\n\t\t\tif (startValue == null)\n\t\t\t\tstartValue = { };\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet e: CounterEdit = this.edits[i];\n\t\t\t\tswitch (e[0])\n\t\t\t\t{\n\t\t\t\t\tcase OpCounterAdd:\n\t\t\t\t\t\tif (startValue[e[1]] === undefined)\n\t\t\t\t\t\t\tstartValue[e[1]] = e[2];\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tstartValue[e[1]] += e[2];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpCounterDel:\n\t\t\t\t\t\tdelete startValue[e[1]];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn startValue;\n\t\t}\n\n\tminimize(): any\n\t\t{\n\t\t\t// No-op\n\t\t}\n\n\tloadObject(o: any): any\n\t\t{\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t\to[(this.edits[i])[1]] = this.edits[i];\n\t\t\treturn o;\n\t\t}\n\n\ttoObject(): any\n\t\t{\n\t\t\treturn this.loadObject({ });\n\t\t}\n\n\tfromObject(o: any): void\n\t\t{\n\t\t\tthis.edits = [];\n\t\t\tfor (var p in o)\n\t\t\t\tif (o.hasOwnProperty(p))\n\t\t\t\t\tthis.edits.push(o[p]);\n\t\t}\n}\n","import * as LogAbstract from \"../logabstract/all\";\n\nimport * as OT from \"./ottypes\";\nimport * as OTC from \"./otcomposite\";\n\nexport interface IOTEngine\n{\n cid(): string;\n rid(): string;\n\n toPartialValue(resourceName: string): any;\n\n startLocalEdit(): OTC.OTCompositeResource;\n addLocalEdit(e: OTC.OTCompositeResource): void;\n}\n\nexport class OTEngine implements IOTEngine\n{\n ilog: LogAbstract.ILog;\n onList: any;\n\n\t// Constructor\n\tconstructor(ilog: LogAbstract.ILog)\n\t\t{\n this.ilog = ilog;\n this.onList = {};\n\t\t}\n\n on(eventName: string, cb: any): void\n {\n let aCB: any = this.onList[eventName];\n if (aCB === undefined)\n {\n aCB = [];\n this.onList[eventName] = aCB;\n }\n aCB.push(cb);\n }\n\n off(eventName: string, cb: any): void\n {\n let aCB: any = this.onList[eventName];\n if (aCB !== undefined)\n {\n for (let i: number = 0; i < aCB.length; i++)\n {\n if (aCB[i] === cb)\n {\n aCB.splice(i, 1);\n break;\n }\n }\n }\n }\n\n emit(eventName: string): void\n {\n let aCB: any[] = this.onList[eventName];\n if (aCB !== undefined)\n for (let i: number = 0; i < aCB.length; i++)\n (aCB[i])();\n }\n\n cid(): string { return ''; }\n rid(): string { return ''; }\n\n toPartialValue(resourceName: string): any { return null; }\n\n startLocalEdit(): OTC.OTCompositeResource { return null; }\n addLocalEdit(e: OTC.OTCompositeResource): void { }\n}\n","import * as Util from '../util/all';\n\nimport * as OT from './ottypes';\n\n// This implements OT for a dictionary of objects. OT is pretty trivial for maps - last wins.\n\nexport const OpMapSet = 1;\nexport const OpMapDel = 2;\nexport type MapEdit = [ number, string, any ];\t// Op, Key, Value\n\nexport class OTMapResource extends OT.OTResourceBase\n{\n\tconstructor(rid: string)\n\t\t{\n\t\t\tsuper(rid, 'map');\n\t\t}\n\tstatic factory(rid: string): OTMapResource { return new OTMapResource(rid); }\n\n // Set a property\n set(p: string, a: any): OTMapResource\n {\n this.edits.push([ OpMapSet, p, a ]);\n return this;\n }\n\n // Delete a property\n del(p: string): OTMapResource\n {\n this.edits.push([ OpMapDel, p, 0 ]);\n return this;\n }\n\n\t// copy an instance\n\tcopy(): OTMapResource\n\t\t{\n\t\t\tlet c: OTMapResource = new OTMapResource(this.resourceName);\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet e: MapEdit = this.edits[i];\n\t\t\t\tc.edits.push([ e[0], e[1], e[2] ]);\n\t\t\t}\n\t\t\treturn c;\n\t\t}\n\n\t// Test whether two operations are effectively equivalent\n\teffectivelyEqual(rhs: OTMapResource): boolean\n\t\t{\n\t\t\t// This should really be a structural error\n\t\t\tif (this.length != rhs.length)\n\t\t\t\treturn false;\n\n\t\t\t// This checks for exact structural equivalency. Really the ordering shouldn't matter for Map so\n\t\t\t// an improvement to this algorithm would be to be more robust to ordering differences.\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet e1: MapEdit = this.edits[i];\n\t\t\t\tlet e2: MapEdit = rhs.edits[i];\n\t\t\t\tif (e1[0] != e2[0] || e1[1] != e2[1] || !Util.deepEqual(e1[2], e2[2]))\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t// Core OT algorithm for this type\n\ttransform(prior: OTMapResource, bPriorIsService: boolean): void\n\t\t{\n\t\t\t// Last wins - if I'm last, my sets and deletes are all preserved\n\t\t\tif (bPriorIsService)\n\t\t\t\treturn;\n\n\t\t\t// OK, remove any operations (either sets or deletes), that conflict with me\n\t\t\t// First load in my properties\n\t\t\tlet myEdits: any = this.toObject();\n\n\t\t\t// Now delete any that are overridden\n\t\t\tfor (let i: number = 0; i < prior.length; i++)\n\t\t\t\tdelete myEdits[(prior.edits[i])[1]];\n\n\t\t\t// Now restore edit array from edited object\n\t\t\tthis.fromObject(myEdits);\n\t\t}\n\n\t// compose two edit actions\n\tcompose(rhs: OTMapResource): void \t\t\t// throws on error\n\t\t{\n\t\t\tlet o: any = this.toObject();\n\t\t\tfor (let i: number = 0; i < rhs.length; i++)\n\t\t\t{\n\t\t\t\tlet eR: MapEdit = rhs.edits[i];\n\t\t\t\to[eR[1]] = [ eR[0], eR[1], eR[2] ];\t\t// Note this overwrites any existing operation on this key, set or del\n\t\t\t}\n\t\t\tthis.fromObject(o);\n\t\t}\n\n\tapply(startValue: any): any\n\t\t{\n\t\t\tif (startValue == null)\n\t\t\t\tstartValue = { };\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet e: MapEdit = this.edits[i];\n\t\t\t\tswitch (e[0])\n\t\t\t\t{\n\t\t\t\t\tcase OpMapSet:\n\t\t\t\t\t\tstartValue[e[1]] = e[2];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpMapDel:\n\t\t\t\t\t\tdelete startValue[e[1]];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn startValue;\n\t\t}\n\n\tminimize(): any\n\t\t{\n\t\t\t// Effectively removes OpMapDel\n\t\t\tlet o: any = this.apply({});\n\t\t\tthis.edits = [];\n\t\t\tfor (var p in o)\n\t\t\t\tif (o.hasOwnProperty(p))\n\t\t\t\t\tthis.edits.push([ OpMapSet, p, o[p] ]);\n\t\t}\n\n\tloadObject(o: any): any\n\t\t{\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t\to[(this.edits[i])[1]] = this.edits[i];\n\t\t\treturn o;\n\t\t}\n\n\ttoObject(): any\n\t\t{\n\t\t\treturn this.loadObject({ });\n\t\t}\n\n\tfromObject(o: any): void\n\t\t{\n\t\t\tthis.edits = [];\n\t\t\tfor (var p in o)\n\t\t\t\tif (o.hasOwnProperty(p))\n\t\t\t\t\tthis.edits.push(o[p]);\n\t\t}\n}\n","// Shared libraries\nimport * as LogAbstract from '../logabstract/all';\n\n// Local libraries\nimport * as OT from \"./ottypes\";\nimport * as OTC from \"./otcomposite\";\nimport * as OTS from \"./otsession\";\nimport * as OTE from \"./otengine\";\n\nexport const ClientIDForServer: string = '-Server-';\n\nexport class OTServerEngine extends OTE.OTEngine\n{\n // Data members\n stateServer: OTC.OTCompositeResource;\n logServer: OTC.OTCompositeResource[];\n valCache: any;\n fullCache: any;\n highSequence: any;\n clientSequenceNo: number;\n\n // Constructor\n constructor(ilog: LogAbstract.ILog, rid: string)\n {\n super(ilog);\n\n this.stateServer = new OTC.OTCompositeResource(rid, \"\");\n this.logServer = [];\n this.highSequence = {};\n this.clientSequenceNo = 0;\n this.valCache = {};\n this.fullCache = null;\n }\n\n serverClock(): number\n {\n return this.stateServer.clock;\n }\n\n rid(): string\n {\n return this.stateServer.resourceName;\n }\n\n cid(): string\n {\n return ClientIDForServer;\n }\n\n startLocalEdit(): OTC.OTCompositeResource\n {\n return new OTC.OTCompositeResource(this.rid(), this.cid());\n }\n\n resetCaches(): void\n {\n this.valCache = {};\n this.fullCache = null;\n }\n\n toPartialValue(resourceName: string): any\n {\n if (this.valCache[resourceName] === undefined)\n this.valCache[resourceName] = this.stateServer.toPartialValue(resourceName);\n return this.valCache[resourceName];\n }\n\n toValue(): any\n {\n // In general, server does not require this but maybe for testing purposes\n if (this.fullCache == null)\n this.fullCache = this.stateServer.toValue();\n return this.fullCache;\n }\n\n getProp(s: string): any\n {\n let o = this.toPartialValue('WellKnownName_meta');\n return o == null ? '' : o[s];\n }\n\n getName(): string\n {\n return this.getProp('name');\n }\n\n getType(): string\n {\n return this.getProp('type');\n }\n\n getDescription(): string\n {\n return this.getProp('description');\n }\n\n getCreatedBy(): string\n {\n return this.getProp('createdby');\n }\n\n getCreateTime(): string\n {\n return this.getProp('createtime');\n }\n\n getCreatedByName(): string\n {\n let s: string = this.getCreatedBy();\n if (s != '')\n {\n let users: any = this.toPartialValue('WellKnownName_users');\n if (users && users[s] && users[s]['name'])\n return users[s]['name'];\n }\n\n return '';\n }\n\n hasSeenEvent(orig: OTC.OTCompositeResource): boolean\n {\n let clientSequenceNo: any = this.highSequence[orig.clientID];\n let bSeen = (clientSequenceNo !== undefined && Number(clientSequenceNo) >= orig.clientSequenceNo);\n return bSeen;\n }\n\n isNextEvent(orig: OTC.OTCompositeResource): boolean\n {\n let nSeen: any = this.highSequence[orig.clientID];\n let bNext = (nSeen === undefined && orig.clientSequenceNo == 0)\n || (Number(nSeen)+1 == orig.clientSequenceNo);\n if (! bNext)\n {\n if (nSeen === undefined)\n this.ilog.event( { event: 'OT anomaly: non-zero client seqNo for new client', sessionid: this.stateServer.resourceID } );\n else\n this.ilog.event( { event: 'OT anomaly: unexpected client seqNo', sessionid: this.stateServer.resourceID } );\n }\n return bNext;\n }\n\n rememberSeenEvent(orig: OTC.OTCompositeResource): void\n {\n this.highSequence[orig.clientID] = orig.clientSequenceNo;\n }\n\n forgetEvents(orig: OTC.OTCompositeResource): void\n {\n delete this.highSequence[orig.clientID];\n }\n \n clientHighSequence(cid: string): number\n {\n let clientSequenceNo: any = this.highSequence[cid];\n\n return clientSequenceNo === undefined ? 0 : Number(clientSequenceNo);\n }\n\n garbageCollect(): void\n {\n let resources = this.toPartialValue('WellKnownName_resource');\n if (this.stateServer.garbageCollect(resources))\n {\n this.resetCaches();\n this.emit('state');\n }\n\n // TODO: Also remove entries from log to minimize memory use.\n }\n\n // Function: addServer\n //\n // Description:\n // This is the server state update processing upon receiving an event from an endpoint.\n // The received event is transformed (if possible) and added to the server state.\n // The logic here is straight-forward - transform the incoming event so it is relative to\n // the current state and then apply.\n\n addServer(orig: OTC.OTCompositeResource): number\n {\n try\n {\n // First transform, then add to log\n let i: number;\n let a: OTC.OTCompositeResource = orig.copy();\n\n for (i = this.logServer.length; i > 0; i--)\n {\n let aService: OTC.OTCompositeResource = this.logServer[i-1];\n\n if (aService.clock == a.clock)\n break;\n }\n\n // Handle if we've seen it already (client did not receive ack, probably communication error on response)\n if (this.hasSeenEvent(orig))\n {\n // Treat this as success if we still have event in log - the client did not receive an\n // ack but is now re-connected and will get resynced correctly.\n if (i > 0)\n {\n this.ilog.event({ sessionid: this.stateServer.resourceID, event: `addServer: duplicate event: no problem` });\n //console.log('addServer: seen event - handling cleanly');\n return OTS.ESuccess;\n }\n else\n {\n //console.log('addServer: seen event - resetting client');\n this.ilog.event({ sessionid: this.stateServer.resourceID, event: `addServer: duplicate event: resetting client` });\n this.forgetEvents(orig); // we are now resetting client in this case, so forget this client\n return OTS.EClockSeen;\n }\n }\n\n // If this isn't next in sequence, I lost one (probably because I went \"back in time\"\n // due to server restart). In that case client is forced to re-initialize (losing local\n // edits). I also need to re-initialize sequence numbering.\n if (! this.isNextEvent(orig))\n {\n //console.log('addServer: received out-of-order (future) event');\n this.ilog.event({ sessionid: this.stateServer.resourceID, event: `addServer: received out-of-order event` });\n this.forgetEvents(orig);\n return OTS.EClockAnomaly;\n }\n\n // Fail if we have discarded that old state\n if (a.clock >= 0 && i == 0)\n {\n this.ilog.event({ sessionid: this.stateServer.resourceID, event: `addServer: received old event` });\n\n // This should really be ClockFailure which would force the client to resend with a newer\n // clock value. But there appears to be a bug when session is reloaded that results in\n // client never getting synced up. So for now force a reset (which might result in some\n // client edits being discarded).\n this.forgetEvents(orig);\n return OTS.EClockReset;\n //return OTS.EClockFailure;\n }\n\n // OK, all good, transform and apply\n if (i < this.logServer.length)\n {\n let aPrior: OTC.OTCompositeResource = this.logServer[i].copy();\n\n for (i++; i < this.logServer.length; i++)\n aPrior.compose(this.logServer[i]);\n\n if (! a.tryTransform(aPrior, true))\n {\n console.log('otserverengine: rejecting event on transform failure');\n this.forgetEvents(orig);\n return OTS.EClockReset;\n }\n\n a.transform(aPrior, true);\n }\n\n let bFail = ! this.stateServer.tryCompose(a);\n if (bFail)\n {\n console.log('otserverengine: rejecting event on compose failure');\n if (this.logServer.length)\n {\n let newState = this.logServer[0].copy();\n for (let i = 1; i < this.logServer.length; i++)\n newState.compose(this.logServer[i]);\n if (newState.tryCompose(a))\n {\n console.log('otserverengine: actually... rejected event would succeed on composed log, so patching');\n this.stateServer = newState;\n bFail = false;\n }\n else\n console.log('otserverengine: and... rejected event also fails on composed log');\n }\n else\n console.log('otserverengine: and... no log to try to patch state with');\n\n if (bFail)\n {\n this.forgetEvents(orig);\n return OTS.EClockReset;\n }\n }\n\n a.clock = this.stateServer.clock + 1;\n this.stateServer.compose(a);\n\n this.resetCaches();\n this.emit('state');\n this.logServer.push(a.copy());\n\n this.rememberSeenEvent(orig);\n return OTS.ESuccess;\n }\n catch (err)\n {\n this.ilog.error('addServer: unexpected exception');\n this.forgetEvents(orig);\n return OTS.EClockReset;\n //return OTS.EClockFailure;\n }\n }\n\n addLocalEdit(orig: OTC.OTCompositeResource): void\n {\n orig.clock = this.serverClock();\n orig.clientSequenceNo = this.clientSequenceNo++;\n let errno: number = this.addServer(orig);\n }\n\n toJSON(): any\n {\n let log: any[] = [];\n for (let i: number = 0; i < this.logServer.length; i++)\n log.push(this.logServer[i].toJSON());\n return { state: this.stateServer.toJSON(), highSequence: this.highSequence, log: log };\n }\n\n validateLog(): void\n {\n // Yikes, invalid log created by bad revision reverting - validate on load and truncate if necessary\n try\n {\n if (this.logServer.length > 0)\n {\n let aPrior: OTC.OTCompositeResource = this.logServer[0].copy();\n\n for (let i: number = 1; i < this.logServer.length; i++)\n aPrior.compose(this.logServer[i]);\n }\n }\n catch (err)\n {\n this.ilog.event({ sessionid: this.stateServer.resourceID, event: `OTServer: corrupted log truncated` });\n this.logServer = [];\n this.logServer.push(this.stateServer.copy());\n }\n }\n\n loadFromObject(o: any): void\n {\n if (o.state !== undefined)\n {\n this.stateServer = OTC.OTCompositeResource.constructFromObject(o.state);\n this.logServer = [];\n this.resetCaches();\n this.emit('state');\n }\n if (o.log !== undefined)\n {\n for (let i: number = 0; i < o.log.length; i++)\n this.logServer.push(OTC.OTCompositeResource.constructFromObject(o.log[i]));\n this.validateLog();\n }\n else\n {\n this.logServer = [];\n this.logServer.push(this.stateServer.copy());\n }\n if (o.highSequence !== undefined)\n this.highSequence = o.highSequence;\n this.clientSequenceNo = this.clientHighSequence(ClientIDForServer) + 1;\n }\n}\n","// Errors\nexport const ESuccess: number = 0; // Generic success\nexport const EFail: number = 1; // Generic failure\nexport const EFull: number = 2; // Too many clients attached to this session; try later\nexport const ERetry: number = 3; // Try request again\nexport const ENoSession: number = 4;\t\t// No record of such session\nexport const EClockSeen: number = 5;\nexport const EClockFailure: number = 6;\nexport const EClockReset: number = 7;\nexport const ENoUser: number = 8; // No user specified (internal error since all authorized reqs have user)\nexport const EBadRequest: number = 9; // Badly formed request\nexport const ELoadFailed: number = 10; // Session exists in index, but load of state failed ((temp?) internal error)\nexport const ENoPerm: number = 11; // No permissions (readonly)\nexport const ENoAccess: number = 12; // No access (no read)\nexport const EMaintenance: number = 13; // Server under maintenance\nexport const EClockAnomaly: number = 14; // Typically server restart and client is ahead\n\n// Filters\nexport const FilterMyMaps: number = 0;\nexport const FilterSharedWithMe: number = 1;\nexport const FilterMyPublic: number = 2;\nexport const FilterRecent: number = 3;\nexport const FilterTrash: number = 4;\nexport const FilterPublic: number = 5;\nexport const FilterOfficial: number = 6;\nexport const FilterCOI: number = 7;\nexport const FilterMyGroupMaps: number = 8;\nexport const FilterMyGroups: number = 9;\nexport const FilterMyDatasets: number = 10;\nexport const FilterPublicDatasets: number = 11;\nexport const FilterMyGroupDatasets: number = 12;\nexport const FilterCount: number = 13;\nexport type Filter = number;\n\n// Permissions\nexport const PermNone: number = 0; // No permissions\nexport const PermRead: number = 1; // Can view\nexport const PermWrite: number = 2; // Can modify\nexport const PermOwner: number = 4; // Can change deleted, published, access permissions\nexport const PermAdmin: number = 8; // Can administer site\nexport const PermVersion: number = 16; // Can view a specific version\nexport const PermEdit: number = (PermWrite|PermOwner);\nexport const PermAll: number = (PermRead|PermWrite|PermOwner|PermAdmin);\nexport type Permission = number;\n\n// Server State\nexport const ServerStateRunning: number = 0;\nexport const ServerStateMaintenance: number = 1;\nexport type ServerState = number;\n\n// Maps Access Tokens (IDs) to SessionID\nexport interface AccessSessionMap\n{\n [key: string]: string;\n}\n\n// Maps Access ID to { list of users, permission } (stored with session)\nexport interface AccessMap\n{\n [key: string]: Access;\n}\n\nexport interface Access\n{\n userIDs: string[]; // empty implies \"anyone\"\n perm: Permission;\n}\n\nexport interface Revision\n{\n id: string;\n modifyTime: any; // JSON date\n label?: string; // optional label\n editcache?: string; // optional editcache key\n}\n\nexport type RevisionList = Revision[];\n\nexport interface SessionUser\n{\n\tid: string;\n\tname: string;\n twitterhandle: string;\n}\n\nexport interface ActiveUser\n{\n\tid: string;\n\tname: string;\n twitterhandle: string;\n\tactive: number;\n}\n\nexport interface SessionUserIndex\n{\n\t[key: string]: SessionUser;\n}\n\nexport interface SessionUserList\n{\n\t[key: string]: number;\n}\n\nexport interface SessionProps\n{\n id: string;\n baseid?: string; // For owner, actual sid if id is frozen version\n rid?: string; // Revision ID for frozen version\n name: string;\n type: string;\n description: string;\n labels: string[];\n createdBy: string;\n lastActive: any;\t\t// JSON date (should be string)\n createTime: any; // JSON date (should be string)\n modifyTime: any; // JSON date (should be string)\n clientCount: number;\n maxClients: number;\n requestCount: number;\n deleted: boolean;\n published?: string;\n locked?: boolean;\n official: boolean;\n\tloadFailed: boolean;\n accessMap: AccessMap;\n revisions: RevisionList;\n expunged?: boolean;\n expungeDate?: string;\n xprops?: { [prop: string]: string };\n groups: any; // DT.GroupsMapIndex\n xid?: string; // external ID\n colors?: string; // cached district colors (specific to OT for redistricting)\n}\n\n// True to add, False to remove\nexport type LabelUpdate = { [name: string]: boolean|null }\n\nexport interface SessionUpdateProps\n{\n\tid?: string;\n xid?: string;\n ids?: string[];\n\tdeleted?: boolean;\n\tpublished?: boolean;\n\tofficial?: boolean;\n locked?: boolean;\n name?: string;\n description?: string;\n labelupdate?: LabelUpdate;\n access?: Access;\n accessUpdate?: AccessMap;\n restore?: string; // Revision ID\n revision?: Revision; // If ID is empty, snap a new revision, otherwise label it.\n colors?: string; // cached district colors (specific to OT for redistricting)\n}\n\nexport interface SessionsIndex\n{\n\t[key: string]: SessionProps;\n}\n\n// The semantics here are:\n// if aid is provided, only look through that access token.\n// if aid is missing, look for that user in any access token (but ignore anonymous tokens).\n// in either case, return the full set of permissions a user has.\n//\nexport function accessFindUser(a: Access, uid: string): Permission\n{\n if (a === undefined) return PermNone;\n if (a.userIDs.length == 0)\n return a.perm;\n for (let i: number = 0; i < a.userIDs.length; i++)\n if (a.userIDs[i] === uid) return a.perm;\n return PermNone;\n}\n\nexport function accessMapFindUser(accessMap: AccessMap, uid: string, aid?: string): Permission\n{\n if (aid !== undefined)\n return accessFindUser(accessMap[aid], uid);\n else\n {\n let perm: Permission = PermNone;\n for (var aid1 in accessMap) if (accessMap.hasOwnProperty(aid1))\n {\n let a = accessMap[aid1];\n for (let i: number = 0; i < a.userIDs.length; i++)\n if (a.userIDs[i] === uid)\n {\n perm |= a.perm;\n break;\n }\n }\n return perm;\n }\n}\n\nexport function SessionFilterFunction(p: SessionProps, uid: string, f: number): boolean\n{\n\tif (f === FilterPublic) return p.published !== undefined;\n\n\tif (f === FilterSharedWithMe)\n\t{\n\t\tif (p.createdBy === uid) return false;\n return true;\n\t}\n\n\t// All other filters require ownership of this session\n\tif (p.createdBy !== uid) return false;\n\n\tif (f === FilterTrash) return p.deleted;\n\n if (f === FilterRecent && !p.deleted && p.modifyTime)\n {\n let d = new Date();\n let interval = d.getTime() - new Date(p.modifyTime).getTime();\n return interval < (1000 * 60 * 60 * 24 * 7); // one week\n }\n\n\treturn !p.deleted;\n}\n","\n// Resource data type that supports basic OT inteface.\nexport interface IOTResource\n{\n\tresourceName: string;\n\tunderlyingType: string;\n\tedits: any[];\n\n\t// Normally defined by base class\n\tlength: number;\n\tempty(): void;\n\tisEmpty(): boolean;\n\n\t// Copy an instance\n\tcopy(): IOTResource;\n\n\t// Test whether two operations are effectively equivalent\n\teffectivelyEqual(rhs: IOTResource): boolean;\n\n\t// Core OT algorithm for this type\n\ttransform(rhs: IOTResource, bPriorIsService: boolean): void;\t\t\t// throws on error\n\n tryTransform(rhs: IOTResource, bPriorIsService: boolean): boolean;\n\n\t// compose two edit actions\n\tcompose(rhs: IOTResource): void; \t\t\t// throws on error\n\n // tests if compose would succeed, false on failure to prevent throwing during compose and leaving in partial state\n tryCompose(rhs: IOTResource): boolean\n\n\t// apply this edit to an existing value, returning new value (if underlying type is mutable, may modify input)\n\tapply(startValue: any): any;\n\n\t// return a collapsed, minimal version of the operation, suitable for constructing from scratch from empty initial value\n\tminimize(): void;\n}\n\n// Useful base class\nexport class OTResourceBase implements IOTResource\n{\n\tresourceName: string;\n\tunderlyingType: string;\n\tedits: any[];\n\n\tconstructor(rname: string, utype: string)\n\t\t{\n\t\t\tthis.resourceName = rname;\n\t\t\tthis.underlyingType = utype;\n\t\t\tthis.edits = [];\n\t\t}\n\n\tget length(): number\n\t\t{\n\t\t\treturn this.edits.length;\n\t\t}\n\n\t// Set an existing instance of the operation to be empty\n\tempty(): void\n\t\t{\n\t\t\tthis.edits = [];\n\t\t}\n\n\t// Test\n\tisEmpty(): boolean\n\t\t{\n\t\t\treturn this.edits.length == 0;\n\t\t}\n\n\t// Copy an instance\n\tcopy(): OTResourceBase\n\t\t{\n\t\t\tthrow \"OTResourceBase.copy must be overridden in subclass\";\n\t\t}\n\n\t// Test whether two operations are effectively equivalent\n\teffectivelyEqual(rhs: OTResourceBase): boolean\n\t\t{\n\t\t\tthrow \"OTResourceBase.effectivelyEqual must be overridden in subclass\";\n\t\t}\n\n\t// Core OT algorithm for this type\n\ttransform(rhs: OTResourceBase, bPriorIsService: boolean): void\n\t\t{\n\t\t\tthrow \"OTResourceBase.transform must be overridden in subclass\";\n\t\t}\n\n // Test if transform would succeed, false on failure\n tryTransform(rhs: OTResourceBase, bPriorIsServer: boolean): boolean\n {\n return true;\n }\n\n\t// compose two edit actions\n\tcompose(rhs: OTResourceBase): void\n\t\t{\n\t\t\tthrow \"OTResourceBase.compose must be overridden in subclass\";\n\t\t}\n\n // test compose\n tryCompose(rhs: OTResourceBase): boolean\n {\n return true;\n }\n\n\t// apply this edit to an existing value, returning new value (if underlying type is mutable, may modify input)\n\tapply(startValue: any): any\n\t\t{\n\t\t\tthrow \"OTResourceBase.apply must be overridden in subclass\";\n\t\t}\n\n\tminimize(): void\n\t\t{\n\t\t\t// Default implementation does nothing.\n\t\t}\n}\n","export * from './poly';\nexport * from './union';\nexport * from './quad';\nexport * from './polylabel';\nexport * from './polysimplify';\nexport * from './polypack';\nexport * from './polybin';\nexport * from './boundbox';\nexport * from './blend';\nexport * from './cartesian';\nexport * from './minbound';\nexport * from './polyround';\nexport * from './topo';\nexport * from './selfintersect';\nexport * from './shamos';\nexport * from './pointinpoly';\nexport * from './mapto';\nexport * from './featurecleanholes';\nexport * from './polyhash';\n","import * as Util from '../util/all';\nimport * as PP from './polypack';\n\n// Takes array of polygon or multi-polygon coordinate structures and returns a single multi-polygon\n// structure. The coordinates may be passed in using packed format.\n\nexport function blend(polys: any[]): any\n{\n if (polys == null || polys.length == 0) return null;\n\n let result: any[] = [];\n\n for (let i: number = 0; i < polys.length; i++)\n {\n let p = PP.polyUnpack(polys[i]);\n let d = Util.depthof(p);\n if (d === 4)\n result.push(p);\n else if (d === 5)\n for (let j: number = 0; j < p.length; j++)\n result.push(p[j]);\n else if (p.length === undefined || p.length > 0)\n throw new Error('blend expects polygon or multi-polygon coordinates');\n }\n\n return result;\n}\n","import * as Util from '../util/all';\n\nimport * as P from './poly';\nimport * as PP from './polypack';\n\n// Note, in Geo format so top > bottom\nexport interface BoundBox\n{\n left?: number;\n top?: number;\n right?: number;\n bottom?: number;\n}\n\nexport function boundboxWidth(bb: BoundBox): number { return Math.abs(bb.right - bb.left); }\nexport function boundboxHeight(bb: BoundBox): number { return Math.abs(bb.bottom - bb.top); }\n\nexport function boundboxCX(bb: BoundBox): number { return bb.left + (bb.right - bb.left) / 2; }\nexport function boundboxCY(bb: BoundBox): number { return bb.top + (bb.bottom - bb.top) / 2; }\n\nexport function clipLon(lon: number): number { return lon <= 0 ? lon : -179; }\n\nexport function boundboxExtend(bbox: BoundBox, x: number, y: number): void\n{\n x = clipLon(x);\n if (bbox.left === undefined || x < bbox.left)\n bbox.left = x;\n if (bbox.right === undefined || x > bbox.right)\n bbox.right = x;\n if (bbox.top === undefined || y > bbox.top)\n bbox.top = y;\n if (bbox.bottom === undefined || y < bbox.bottom)\n bbox.bottom = y;\n}\n\nfunction boundboxExtendPacked(pp: PP.PolyPack, bbox: BoundBox): void\n{\n let buffer = pp.buffer as Float64Array;\n let offset = pp.buffer[pp.offset+1] + pp.offset;\n let end = pp.offset + pp.length;\n for (; offset < end; offset += 2)\n boundboxExtend(bbox, buffer[offset], buffer[offset+1]);\n}\n\nexport function boundbox(poly: any, bbox?: BoundBox): BoundBox\n{\n let i: number;\n\n if (bbox === undefined)\n bbox = { };\n\n if (poly)\n {\n // Collection\n if (poly.features)\n {\n for (i = 0; i < poly.features.length; i++)\n boundbox(poly.features[i], bbox);\n }\n\n // feature\n else if (poly.geometry)\n {\n if (poly.geometry.packed)\n boundboxExtendPacked(poly.geometry.packed as PP.PolyPack, bbox);\n else if (poly.geometry.coordinates)\n boundbox(poly.geometry.coordinates, bbox);\n }\n\n // raw packed buffer\n else if (poly.offset !== undefined)\n boundboxExtendPacked(poly as PP.PolyPack, bbox);\n\n // array of other things (like raw coordinates, or other aggregates)\n else if (Array.isArray(poly) && typeof poly[0] !== 'number')\n {\n for (i = 0; i < poly.length; i++)\n boundbox(poly[i], bbox);\n }\n\n // single point\n else if (Array.isArray(poly) && poly.length >= 2)\n boundboxExtend(bbox, poly[0], poly[1]);\n }\n\n return bbox;\n}\n\nexport function boundboxPoly(bb: BoundBox): any\n{\n return [ [ [bb.left, bb.top], [bb.left, bb.bottom], [bb.right, bb.bottom], [bb.right, bb.top], [bb.left, bb.top] ] ];\n}\n\nexport function boundboxEmpty(bb: BoundBox): boolean\n{\n return !bb || bb.left === undefined || P.polyArea(boundboxPoly(bb)) == 0;\n}\n\nexport function boundboxArea(poly: any): number\n{\n return P.polyArea(boundboxPoly(boundbox(poly)));\n}\n\nexport function boundboxIntersects(bb1: BoundBox, bb2: BoundBox): boolean\n{\n return !(bb1.left > bb2.right || bb1.right < bb2.left || bb1.top < bb2.bottom || bb1.bottom > bb2.top);\n}\n\nexport function boundboxContains(bb: BoundBox, x: number, y: number): boolean\n{\n return !(bb.left >= x || bb.right < x || bb.top <= y || bb.bottom > y);\n}\n","//\n// GEO-FEATURES UTILITIES\n//\n\nimport * as GeoJSON from 'geojson';\nimport * as P from './poly';\nimport * as PP from './polypack';\n\n\n// HELPER\n\nfunction bufferToRing(b: Float64Array, s: number, nPoints: number): any\n{\n let r: any = [];\n let e = s + nPoints * 2;\n for (; s < e; s += 2)\n r.push([ b[s], b[s+1] ]);\n return r;\n}\n\nexport function polyParts(poly: any): GeoJSON.FeatureCollection\n{\n let pp = P.polyNormalize(poly);\n\n let parts: GeoJSON.FeatureCollection = { type: 'FeatureCollection', features: [] };\n let af: any = parts.features;\n let f: any;\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n let r = bufferToRing(b, iOffset, nPoints);\n if (iRing == 0)\n {\n f = { type: 'Feature',\n properties: { id: String(iPoly+1) },\n geometry: { type: 'Polygon', coordinates: [ r ] } };\n af.push(f);\n }\n else\n f.geometry.coordinates.push(r);\n });\n return parts;\n}\n\n// CARTESIAN (\"FLAT\") AREA, PERIMETER, AND DIAMETER\n\nexport function polyAreaFlat(poly: any): number\n{\n let pp = P.polyNormalize(poly);\n\n let a: number = 0;\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n a += polySimpleAreaFlat(b, iOffset, nPoints) * (iRing == 0 ? 1 : -1);\n });\n return a;\n}\n\n// Algorithm for the area of a simple/single planar polygon:\n// https://algorithmtutor.com/Computational-Geometry/Area-of-a-polygon-given-a-set-of-points/\n// https://mathopenref.com/coordpolygonarea2.html\n//\n// function polygonArea(X, Y, numPoints) \n// { \n// area = 0; // Accumulates area in the loop\n// j = numPoints-1; // The last vertex is the 'previous' one to the first\n\n// for (i=0; i<numPoints; i++)\n// { area = area + (X[j]+X[i]) * (Y[j]-Y[i]); \n// j = i; //j is previous vertex to i\n// }\n// return area/2;\n// }\n\n// Reimplemented to use polygons vs. X & Y vectors\nfunction polySimpleAreaFlat(b: Float64Array, i: number, nPoints: number): number\n{\n let a = 0;\n let e = i + nPoints * 2;\n let j = e - 2; // The last vertex is the 'previous' one to the first\n\n for (; i < e; i += 2)\n {\n a += (b[j] + b[i]) * (b[j+1] - b[i+1]);\n j = i;\n }\n return Math.abs(a / 2);\n}\n\n// You would need to divide by Poly.EARTH_RADIUS to go from the returned units of meters to Lat/Lon “units.”\n// NOTE - No conversion of degrees to radians!\n\nexport function polyPerimeterFlat(poly: any): number\n{\n let pp = P.polyNormalize(poly);\n\n let perimeter: number = 0;\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n // Ignore holes so only look at first ring\n if (iRing == 0)\n {\n let s = iOffset;\n let e = s + (nPoints-1) * 2; // index *at* last point since we look at next point in each iteration\n for (; s < e; s += 2)\n perimeter += _distance(b[s], b[s+1], b[s+2], b[s+3]);\n s = iOffset;\n if (nPoints > 2 && (b[s] != b[e] || b[s+1] != b[e+1]))\n perimeter += _distance(b[s], b[s+1], b[e], b[e+1]);\n }\n });\n\n return perimeter;\n}\n\nfunction _distance(x1: number, y1: number, x2: number, y2: number): number\n{\n const dLat = y2 - y1;\n const dLon = x2 - x1;\n let d: number;\n\n d = Math.sqrt((dLat * dLat) + (dLon * dLon));\n\n return d;\n}\n\n// The polyCircle code is already just treating the coordinate system as Cartesian.\n// So just compute circle and return diameter.\n\nexport function polyDiameterFlat(poly: any): number\n{\n let circle = P.polyToCircle(poly);\n return circle ? circle.r * 2 : 0;\n}\n","import { polyIntersects } from './union';\nimport { polyArea, polyDescribe } from './poly';\n\nfunction flattenMultiPoly(polys: any): any\n{\n let c: any[] = [];\n polys.forEach((poly: any) => {\n poly.forEach((ring: any) => {\n c.push([ring]);\n });\n });\n return c;\n}\n\n// Handed a multipolygon that may not have been properly structured as outer rings and inner holes, fix it up.\n// This is relatively expensive since we compute intersection areas to test for holes.\n//\nexport function featureCleanHoles(f: any): any\n{\n if (!f\n || f.type !== 'Feature'\n || !f.geometry\n || f.geometry.type !== 'MultiPolygon'\n || !Array.isArray(f.geometry.coordinates))\n return f;\n\n // Bail out if excessive computation cost (and complex poly likely already correct, heuristically)\n let d = polyDescribe(f);\n if (d.npoly + d.nhole > 10)\n {\n //console.log(`featureCleanHoles: bailing out on polygon with ${d.npoly} polygons and ${d.nhole} holes`);\n return f;\n }\n\n // Normalize to flattened polygon\n f.geometry.coordinates = flattenMultiPoly(f.geometry.coordinates);\n\n let polys = f.geometry.coordinates;\n let areas: number[] = polys.map(polyArea);\n // Compute 'top triangle' of overlap grid, then reflect\n let overlaps: boolean[][] = polys.map((p1: any, i: number) => {\n return polys.map((p2: any, j: number) => { return j <= i ? false : polyIntersects(p1, p2) });\n });\n // Now reflect\n let n = polys.length;\n for (let i = 0; i < n-1; i++)\n for (let j = i+1; j < n; j++)\n overlaps[j][i] = overlaps[i][j];\n\n // The outer polygon is one that\n // 1. Overlaps with this one\n // 2. Has a larger area than this one\n // 3. Has the smallest area of any that overlap\n // 4. There are an odd number of polygons that satisfy 1 and 2. (This allows nesting of polygons inside holes.)\n //\n function findOuter(i: number): number\n {\n let jOuter = -1;\n let aOuter = 0;\n let nOverlap = 0;\n\n for (let j = 0; j < n; j++)\n if (overlaps[i][j] && areas[j] > areas[i])\n {\n nOverlap++;\n if (jOuter < 0 || areas[j] < aOuter)\n {\n jOuter = j;\n aOuter = areas[j];\n }\n }\n return (nOverlap % 2) == 1 ? jOuter : -1;\n }\n\n // Walk through and match up holes with their containers\n for (let i = 0; i < n; i++)\n {\n let j = findOuter(i);\n if (j >= 0)\n {\n polys[j].push(polys[i][0]);\n polys[i] = [];\n }\n }\n\n // Delete outer shell of hole rings that were moved\n f.geometry.coordinates = polys.filter((p: any[]) => p.length > 0);\n\n // Degenerate multi-polygon\n if (f.geometry.coordinates.length == 1)\n {\n f.geometry.type = 'Polygon';\n f.geometry.coordinates = f.geometry.coordinates[0];\n }\n\n return f;\n}\n","//\n// CONVEX HULL USING GRAHAM SCAN ALGORITHM\n//\n/* Resources:\n * https://en.wikipedia.org/wiki/Graham_scan\n * https://www.tutorialspoint.com/Graham-Scan-Algorithm <<< pseudo code\n * http://brian3kb.github.io/graham_scan_js/ <<< basis for this implementation\n */\n\nimport {polyNormalize, PolyOptions} from './poly';\nimport * as PP from './polypack';\n\ntype SimplePoint = [number, number];\n\n\nexport function makeConvexHullGrahamScan(poly: any, options?: PolyOptions): any\n{\n let points = getExteriorPoints(poly);\n if (points == null) return null;\n\n let scanner = new GrahamScanner();\n\n for (let pt of points) {\n scanner.addPoint(pt);\n }\n\n const ch: SimplePoint[] = scanner.getHull();\n\n return [ ch ];\n}\n\n// NOTE - This finds the exterior points of a polygon in standard form and returns\n// it as an array if [x, y] points, in contrast to polyToExteriorPoints() which\n// uses the packed format and the poly.ts-private point form.\nfunction getExteriorPoints(poly: any): SimplePoint[]\n{\n let pp = polyNormalize(poly);\n if (pp == null) return null;\n\n let points: SimplePoint[] = [];\n\n PP.polyPackEachPoint(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number) => {\n if (iRing > 0) return; // skip holes\n points.push([b[iOffset], b[iOffset+1]]);\n });\n\n return points.length > 0 ? points : null;\n}\n\nconst X = 0, Y = 1;\n\nclass GrahamScanner\n{\n anchorPoint: SimplePoint | undefined;\n reverse: boolean;\n points: SimplePoint[];\n\n constructor()\n {\n this.anchorPoint = undefined;\n this.reverse = false;\n this.points = [];\n }\n _findPolarAngle(a: SimplePoint, b: SimplePoint): number\n {\n const ONE_RADIAN = 57.295779513082;\n let deltaX, deltaY;\n\n // If the points are undefined, return a zero difference angle.\n if (!a || !b) return 0;\n\n deltaX = (b[X] - a[X]);\n deltaY = (b[Y] - a[Y]);\n\n if (deltaX == 0 && deltaY == 0) {\n return 0;\n }\n\n let angle = Math.atan2(deltaY, deltaX) * ONE_RADIAN;\n\n if (this.reverse) {\n if (angle <= 0) {\n angle += 360;\n }\n }\n else\n {\n if (angle >= 0) {\n angle += 360;\n }\n }\n\n return angle;\n }\n addPoint(pt: SimplePoint): void\n {\n // Check for a new anchor\n const newAnchor =\n ( this.anchorPoint === undefined ) ||\n ( this.anchorPoint[Y] > pt[Y] ) ||\n ( this.anchorPoint[Y] === pt[Y] && this.anchorPoint[X] > pt[X] );\n\n if ( newAnchor ) {\n if ( this.anchorPoint !== undefined ) {\n this.points.push(pt);\n }\n this.anchorPoint = pt;\n }\n else\n {\n this.points.push(pt);\n }\n }\n _sortPoints(): SimplePoint[] \n {\n var self = this;\n\n return this.points.sort(function(a: SimplePoint, b: SimplePoint) \n {\n const polarA = self._findPolarAngle(self.anchorPoint as SimplePoint, a);\n const polarB = self._findPolarAngle(self.anchorPoint as SimplePoint, b);\n \n if (polarA < polarB) {\n return -1;\n }\n if (polarA > polarB) {\n return 1;\n }\n \n return 0;\n });\n }\n _checkPoints(p0: SimplePoint, p1: SimplePoint, p2: SimplePoint): boolean \n {\n let difAngle;\n const cwAngle = this._findPolarAngle(p0, p1);\n const ccwAngle = this._findPolarAngle(p0, p2);\n\n if (cwAngle > ccwAngle) {\n difAngle = cwAngle - ccwAngle;\n\n return !(difAngle > 180);\n }\n else if (cwAngle < ccwAngle)\n {\n difAngle = ccwAngle - cwAngle;\n\n return (difAngle > 180);\n }\n\n return true;\n }\n getHull(): SimplePoint[] \n {\n let hullPoints: SimplePoint[] = [];\n let points: SimplePoint[];\n let pointsLength: number;\n\n this.reverse = this.points.every(\n function (point)\n {\n return (point[X] < 0 && point[Y] < 0);\n }\n );\n\n points = this._sortPoints();\n pointsLength = points.length;\n\n // If there are less than 3 points, joining these points creates a correct hull.\n if (pointsLength < 3) {\n points.unshift(this.anchorPoint as SimplePoint);\n return points;\n }\n\n // Move first two points to output array\n const first: SimplePoint = points.shift() as SimplePoint;\n const second: SimplePoint = points.shift() as SimplePoint;\n hullPoints.push(first, second);\n\n // Scan is repeated until no concave points are present.\n while (true) {\n let p0: SimplePoint;\n let p1: SimplePoint;\n let p2: SimplePoint;\n\n hullPoints.push(points.shift() as SimplePoint);\n\n p0 = hullPoints[hullPoints.length - 3];\n p1 = hullPoints[hullPoints.length - 2];\n p2 = hullPoints[hullPoints.length - 1];\n\n if (this._checkPoints(p0, p1, p2)) {\n hullPoints.splice(hullPoints.length - 2, 1);\n }\n\n if (points.length == 0) \n {\n if (pointsLength == hullPoints.length) \n {\n // Check for duplicate anchorPoint edge-case, if not found, add the anchorpoint as the first item.\n const ap: SimplePoint = this.anchorPoint as SimplePoint;\n // Remove any udefined elements in the hullPoints array.\n hullPoints = hullPoints.filter(function(p) { return !!p; });\n if (!hullPoints.some(function(p){\n return(p[X] == ap[X] && p[Y] == ap[Y]);\n })) {\n hullPoints.unshift(this.anchorPoint as SimplePoint);\n }\n return hullPoints;\n }\n points = hullPoints;\n pointsLength = points.length;\n hullPoints = [];\n const first: SimplePoint = points.shift() as SimplePoint;\n const second: SimplePoint = points.shift() as SimplePoint;\n hullPoints.push(first, second);\n }\n }\n }\n}\n\n/**\n * Graham's Scan Convex Hull Algorithm\n * @desc An implementation of the Graham's Scan Convex Hull algorithm in JavaScript.\n * @author Brian Barnett, brian@3kb.co.uk, http://brianbar.net/ || http://3kb.co.uk/\n * @version 1.0.5\n */\n\n/*\nfunction ConvexHullGrahamScan() {\n this.anchorPoint = undefined;\n this.reverse = false;\n this.points = [];\n}\n\nConvexHullGrahamScan.prototype = {\n\n constructor: ConvexHullGrahamScan,\n\n Point: function (x, y) {\n this.x = x;\n this.y = y;\n },\n\n _findPolarAngle: function (a, b) {\n var ONE_RADIAN = 57.295779513082;\n var deltaX, deltaY;\n\n //if the points are undefined, return a zero difference angle.\n if (!a || !b) return 0;\n\n deltaX = (b.x - a.x);\n deltaY = (b.y - a.y);\n\n if (deltaX == 0 && deltaY == 0) {\n return 0;\n }\n\n var angle = Math.atan2(deltaY, deltaX) * ONE_RADIAN;\n\n if (this.reverse){\n if (angle <= 0) {\n angle += 360;\n }\n }else{\n if (angle >= 0) {\n angle += 360;\n }\n }\n\n return angle;\n },\n\n addPoint: function (x, y) {\n //Check for a new anchor\n var newAnchor =\n (this.anchorPoint === undefined) ||\n ( this.anchorPoint.y > y ) ||\n ( this.anchorPoint.y === y && this.anchorPoint.x > x );\n\n if ( newAnchor ) {\n if ( this.anchorPoint !== undefined ) {\n this.points.push(new this.Point(this.anchorPoint.x, this.anchorPoint.y));\n }\n this.anchorPoint = new this.Point(x, y);\n } else {\n this.points.push(new this.Point(x, y));\n }\n },\n\n _sortPoints: function () {\n var self = this;\n\n return this.points.sort(function (a, b) {\n var polarA = self._findPolarAngle(self.anchorPoint, a);\n var polarB = self._findPolarAngle(self.anchorPoint, b);\n\n if (polarA < polarB) {\n return -1;\n }\n if (polarA > polarB) {\n return 1;\n }\n\n return 0;\n });\n },\n\n _checkPoints: function (p0, p1, p2) {\n var difAngle;\n var cwAngle = this._findPolarAngle(p0, p1);\n var ccwAngle = this._findPolarAngle(p0, p2);\n\n if (cwAngle > ccwAngle) {\n\n difAngle = cwAngle - ccwAngle;\n\n return !(difAngle > 180);\n\n } else if (cwAngle < ccwAngle) {\n\n difAngle = ccwAngle - cwAngle;\n\n return (difAngle > 180);\n\n }\n\n return true;\n },\n\n getHull: function () {\n var hullPoints = [],\n points,\n pointsLength;\n\n this.reverse = this.points.every(function(point){\n return (point.x < 0 && point.y < 0);\n });\n\n points = this._sortPoints();\n pointsLength = points.length;\n\n //If there are less than 3 points, joining these points creates a correct hull.\n if (pointsLength < 3) {\n points.unshift(this.anchorPoint);\n return points;\n }\n\n //move first two points to output array\n hullPoints.push(points.shift(), points.shift());\n\n //scan is repeated until no concave points are present.\n while (true) {\n var p0,\n p1,\n p2;\n\n hullPoints.push(points.shift());\n\n p0 = hullPoints[hullPoints.length - 3];\n p1 = hullPoints[hullPoints.length - 2];\n p2 = hullPoints[hullPoints.length - 1];\n\n if (this._checkPoints(p0, p1, p2)) {\n hullPoints.splice(hullPoints.length - 2, 1);\n }\n\n if (points.length == 0) {\n if (pointsLength == hullPoints.length) {\n //check for duplicate anchorPoint edge-case, if not found, add the anchorpoint as the first item.\n var ap = this.anchorPoint;\n //remove any udefined elements in the hullPoints array.\n hullPoints = hullPoints.filter(function(p) { return !!p; });\n if (!hullPoints.some(function(p){\n return(p.x == ap.x && p.y == ap.y);\n })) {\n hullPoints.unshift(this.anchorPoint);\n }\n return hullPoints;\n }\n points = hullPoints;\n pointsLength = points.length;\n hullPoints = [];\n hullPoints.push(points.shift(), points.shift());\n }\n }\n }\n};\n\n// EXPORTS\n\nif (typeof define === 'function' && define.amd) {\n define(function() {\n return ConvexHullGrahamScan;\n });\n}\nif (typeof module !== 'undefined') {\n module.exports = ConvexHullGrahamScan;\n}\n\n*/\n","import * as G from '../geo/all';\nimport * as P from './poly';\nimport * as PP from './polypack';\nimport * as PL from './polylabel';\nimport * as BB from './boundbox';\nimport { polyContainsPoint } from './pointinpoly';\nimport { Control } from '../control/all';\n\nfunction setLabels(c: G.GeoFeatureCollection): void\n{\n c.features.forEach(f => {\n if (f.properties.labelx === undefined)\n {\n let {x,y} = PL.polyLabel(f);\n f.properties.labelx = x;\n f.properties.labely = y;\n }\n });\n}\n\n// polyMapTo:\n//\n// Given a set of underlying blocks (or precincts), map them to the district (or any other feature)\n// they are contained in.\n//\n// If a block maps to multiple districts or no district, it is left out of the result.\n//\n// Note that the algorithm is to see where the centroid of the block overlaps. So a block\n// could potentially overlap multiple districts and this would return only the one containing\n// the centroid.\n//\n// The thinking is that if you want fine granularity, use real blocks as the base collection.\n// If you provide precincts, you will get a result on precinct granularity.\n//\n// The return value is an object that maps the block feature ids to the district feature id.\n//\nexport function polyMapToByCentroid(districts: G.GeoFeatureCollection, centroids: G.GeoCentroidMap, control?: Control): any\n{\n let map: any = {};\n\n // Cache district boundboxes for quick containment exclusion\n let fs: G.GeoFeature[] = districts.features;\n let bbDistricts: BB.BoundBox[] = fs.map(f => BB.boundbox(f));\n let aDistricts: number[] = fs.map(f => P.polyArea(f));\n\n // Walk over blocks, mapping centroid to district\n let canceled = false;\n let keys = Object.keys(centroids);\n keys.forEach((blockid: string, k: number) => {\n canceled = canceled || control?.isCanceled();\n if (canceled) return;\n let x = centroids[blockid].x;\n let y = centroids[blockid].y;\n\n let fIn: number[] = [];\n fs.forEach((fDistrict: G.GeoFeature, i: number) => {\n if (BB.boundboxContains(bbDistricts[i], x, y))\n if (polyContainsPoint(fDistrict, x, y))\n fIn.push(i);\n });\n\n if (fIn.length == 1)\n map[blockid] = fs[fIn[0]].properties.id;\n else if (fIn.length > 1)\n {\n // Pick district with smallest area since some times we get malformed content that doesn't\n // reflect holes in districts when one is nested in another. So theory is smaller district\n // is a hole in containing larger one(s).\n let iLow = fIn[0];\n for (let i = 1; i < fIn.length; i++)\n if (aDistricts[fIn[i]] < aDistricts[iLow])\n iLow = fIn[i];\n map[blockid] = fs[iLow].properties.id;\n }\n\n if (control) control.statusUpdate(k, keys.length);\n });\n\n return canceled ? undefined : map;\n}\n\nexport function polyMapTo(districts: G.GeoFeatureCollection, blocks: G.GeoFeatureCollection, control?: Control): any\n{\n // Cache labelx, labely if necessary\n setLabels(blocks);\n\n let centroids: G.GeoCentroidMap = {};\n blocks.features.forEach(f => {\n centroids[f.properties.id] = { x: f.properties.labelx, y: f.properties.labely }\n });\n\n return polyMapToByCentroid(districts, centroids, control);\n}\n","//\n// SOME BASIC MATRIX OPERATIONS FOR MBR\n//\n\n/* \n\nThese custom functions are used by minimumBoundingRectangle(), instead of the\nsame-named mathjs versions. They are tailored specifically for that routine and\nare NOT intended for general use.\n\nexport declare function matrix(x: Matrix): Matrix;\n\nexport declare function multiply(a: Matrix, b: Matrix): Matrix;\n\nexport declare function transpose(a: Matrix, b: Matrix): Matrix;\n\nexport declare function apply((a: Matrix, over: Dim, cb: applyCB): Vector;\n\nexport declare function min(a: Vector): number;\n\nexport declare function max(a: Vector): number;\n\nexport declare function concat(a: Matrix, b: Matrix, by: Dim): Matrix;\n\nexport declare function row(a: Matrix, i: number): Vector;\n\nexport declare function subtract(a: Vector, b: Vector): Vector;\n\nexport declare function dotMultiply(a: Vector, b: Vector): Vector;\n\nexport declare function index(a: Range, b: Range): Index;\n\nexport declare function range(start: number, end: number, includeEnd: boolean = false): Vector;\n\nexport declare function subset(a: Matrix, select: Index): Matrix;\n\n*/\n\n\nexport type Matrix = number[][];\nexport type Vector = number[]; // A general vector or a row or a column\nexport type Range = number[];\nexport type Index = number[][];\nexport type applyCB = (v: Vector) => number;\n\nexport const enum Dim\n{\n Rows,\n Columns\n}\n\nexport function matrix(a: Matrix): Matrix\n{\n return a;\n}\n\nexport function multiply(a: Matrix, b: Matrix): Matrix\n{\n protect((nRows(a) > 0), \"In multiply, input matrix 'a' has no rows. \");\n protect((nCols(a) > 0), \"In multiply, input matrix 'a' has no columns. \");\n protect((nRows(b) > 0), \"In multiply, input matrix 'b' has no rows. \");\n protect((nCols(b) > 0), \"In multiply, input matrix 'b' has no columns. \");\n\n const m = nRows(a);\n const n = nCols(a);\n const p = nRows(b);\n const q = nCols(b);\n\n protect((p == n), \"In multiply, the # rows in matrix 'b' doesn't match the number of columns in matrix 'a'.\");\n\n let c: Matrix = initialize(m, n);\n\n for (let i = 0; i < m; i++)\n {\n for (let j = 0; j < q; j++)\n {\n const aRow = row(a, i);\n const bCol = column(b, j);\n\n c[i][j] = dotProduct(aRow, bCol);\n }\n }\n\n return c;\n}\n\nexport function transpose(a: Matrix): Matrix\n{\n protect((nRows(a) > 0), \"In transpose, input matrix has no rows. \");\n protect((nCols(a) > 0), \"In transpose, input matrix has no columns. \");\n\n const j = nRows(a);\n const i = nCols(a);\n\n let b: Matrix = initialize(i, j);\n\n for (let m = 0; m < j; m++)\n {\n for (let n = 0; n < i; n++)\n {\n b[n][m] = a[m][n];\n }\n }\n\n return b;\n}\n\nexport function apply(a: Matrix, over: Dim, cb: applyCB): Vector\n{\n protect((nRows(a) > 0), \"In apply, input matrix has no rows. \");\n protect((nCols(a) > 0), \"In apply, input matrix has no columns. \");\n\n let m = nRows(a);\n let n = nCols(a);\n\n let result: Vector = [];\n\n const iEnd = (over == Dim.Rows) ? m : n;\n const extractFn = (over == Dim.Rows) ? row : column;\n\n for (let i = 0; i < iEnd; i++)\n {\n const v: Vector = extractFn(a, i);\n result.push(cb(v));\n }\n\n return result;\n}\n\nexport function min(v: Vector): number\n{\n return Math.min(...v);\n}\n\nexport function max(v: Vector): number\n{\n return Math.max(...v);\n}\n\nexport function concat(a: Matrix, b: Matrix, by: Dim): Matrix\n{\n protect((nRows(a) > 0), \"In concat, input matrix 'a' has no rows. \");\n protect((nCols(a) > 0), \"In concat, input matrix 'a' has no columns. \");\n protect((nRows(b) > 0), \"In concat, input matrix 'b' has no rows. \");\n protect((nCols(b) > 0), \"In concat, input matrix 'b' has no columns. \");\n\n let m = nRows(a);\n let n = nCols(a);\n const p = nRows(b);\n const q = nCols(b);\n\n const {i, j} = (by == Dim.Columns) ? {i: m, j: n + q} : {i: m + p, j: n};\n let c: Matrix = initialize(i, j);\n\n if (by == Dim.Rows)\n protect((n == q), \"In concat, concatenating rows but the # of columns don't match. \");\n else // (by == Dim.Columns)\n protect((m == p), \"In concat, concatenating columns but the # of rows don't match. \");\n\n // Copy the first array\n for (let i = 0; i < m; i++)\n {\n for (let j = 0; j < n; j++)\n {\n c[i][j] = a[i][j];\n }\n }\n\n m = (by == Dim.Rows) ? m : 0;\n n = (by == Dim.Columns) ? n : 0;\n\n // Copy the second array to the right (by columns) or below (by rows)\n for (let i = 0; i < p; i++)\n {\n for (let j = 0; j < q; j++)\n {\n c[i+m][j+n] = b[i][j];\n }\n }\n\n return c;\n}\n\nexport function row(a: Matrix, i: number): Vector\n{\n protect((nRows(a) > 0), \"In row, input matrix has no rows. \");\n protect((nCols(a) > 0), \"In row, input matrix has no columns. \");\n protect((i >= 0), \"In row, invalid row index.\");\n\n return a[i];\n}\n\nexport function column(a: Matrix, j: number): Vector\n{\n protect((nRows(a) > 0), \"In column, input matrix has no rows. \");\n protect((nCols(a) > 0), \"In column, input matrix has no columns. \");\n protect((j >= 0), \"In row, invalid column index.\");\n\n let v: any = [];\n\n for (let i = 0; i < nRows(a); i++)\n {\n v.push(a[i][j]);\n }\n\n return v;\n}\n\nexport function subtract(a: Vector, b: Vector): Vector\n{\n protect((a.length == b.length), \"In subtract, the input vectors have different lengths.\");\n\n let c: Vector = [];\n\n for (let i = 0; i < a.length; i++)\n {\n c.push(a[i] - b[i]);\n }\n\n return c;\n}\n\nexport function dotMultiply(a: Vector, b: Vector): Vector\n{\n protect((a.length > 0) && (a.length == b.length), \"In dotMultiply, the vectors aren't the same length. \");\n\n let c: Vector = [];\n\n for (let i = 0; i < a.length; i++)\n {\n c.push(a[i] * b[i]);\n }\n\n return c;\n}\n\nexport function index(a: Range, b: Range): Index\n{\n return [a, b];\n}\n\nexport function range(start: number, end: number, includeEnd: boolean = false): Vector\n{\n let r: Vector = [];\n\n end += includeEnd ? 1 : 0;\n for (let i = start; i < end; i++)\n {\n r.push(i);\n }\n \n return r;\n}\n\nexport function subset(a: Matrix, select: Index): Matrix\n{\n protect((nRows(a) > 0), \"In subset, input matrix has no rows. \");\n protect((nCols(a) > 0), \"In subset, input matrix has no columns. \");\n\n protect((nRows(select) > 0), \"In subset, input matrix has no rows. \");\n protect((nCols(select) > 0), \"In subset, input matrix has no columns. \");\n\n const m = nRows(a);\n const n = nCols(a);\n\n const rowRange = row(select, 0) as Range;\n const colRange = row(select, 1) as Range;\n const p = rowRange.length;\n const q = colRange.length;\n\n let b: Matrix = initialize(p, q);\n\n for (let i = 0; i < p; i++)\n {\n for (let j = 0; j < q; j++)\n {\n b[i][j] = a[rowRange[i]][colRange[j]];\n }\n }\n\n return b;\n}\n\n\n// HELPERS\n\nfunction initialize(rows: number, cols: number): Matrix\n{\n protect(((rows > 0) || (cols > 0)), \"In initialize, the # of rows or columns is not positive. \");\n\n return [...Array(rows)].fill(0).map(() => [...Array(cols)].fill(0));\n};\n\nconst nRows = (a: Matrix | Index) => a.length;\nconst nCols = (a: Matrix | Index) => (a.length > 0) ? a[0].length : 0;\n\nexport function dotProduct(a: Vector, b: Vector): number\n{\n protect((a.length > 0) && (a.length == b.length), \"In dotProduct, the vectors aren't the same length. \");\n\n return a.map((value, i) => value * b[i]).reduce((acc, val) => acc + val, 0);\n};\n\n\nfunction protect(condition: boolean, message: string): void\n{\n if (!condition)\n throw new Error(message);\n}\n","//\n// MINIMUM BOUNDING RECTANGLE - aka minimum area rectangle -or- smallest enclosing rectangle\n//\n\n//\n// WHUBER'S ELEGANT, TRIG-FREE SOLUTION IN R\n//\n// https://gis.stackexchange.com/questions/22895/finding-minimum-area-rectangle-for-given-points\n//\n\n/*\n\nMBR <- function(p) {\n # Analyze the convex hull edges \n a <- chull(p) # Indexes of extremal points\n a <- c(a, a[1]) # Close the loop\n e <- p[a[-1],] - p[a[-length(a)], ] # Edge directions\n norms <- sqrt(rowSums(e^2)) # Edge lengths\n v <- e / norms # Unit edge directions\n w <- cbind(-v[,2], v[,1]) # Normal directions to the edges\n\n # Find the MBR\n vertices <- p[a, ] # Convex hull vertices\n x <- apply(vertices %*% t(v), 2, range) # Extremes along edges\n y <- apply(vertices %*% t(w), 2, range) # Extremes normal to edges\n areas <- (y[1,]-y[2,])*(x[1,]-x[2,]) # Areas\n k <- which.min(areas) # Index of the best edge (smallest area)\n\n # Form a rectangle from the extremes of the best edge\n cbind(x[c(1,2,2,1,1),k], y[c(1,1,2,2,1),k]) %*% rbind(v[k,], w[k,])\n}\n\n*/\n\n\n//\n// THIS RE-IMPLEMENTS THE R IN TYPESCRIPT, USING CUSTOM MATRIX OPERATIONS\n//\n\nimport { polyConvexHull } from './poly';\nimport * as M from './matrix';\n\ntype Point = [number, number];\n\n// For point addressing\nconst X = 0, Y = 1;\n\nexport function minimumBoundingRectangle(poly: any): any\n{\n // Get the convex hull polygon in standard form\n const ch = polyConvexHull(poly); \n\n // Select the exterior points (outer ring = 0)\n let chExt: Point[] = ch[0];\n\n // Close the loop (ring)\n chExt.push(chExt[0]);\n\n // Edge directions - Note the implict offset array indexing\n const e: Point[] = chExt.slice(1).map((pt, i) => [(pt[X] - chExt[i][X]), (pt[Y] - chExt[i][Y])]);\n\n // Edge lengths\n const norms: number[] = e.map(pt => Math.sqrt((pt[X] ** 2) + (pt[Y] ** 2)));\n\n // Unit edge directions\n const v: Point[] = e.map((pt, i) => [(pt[X] / norms[i]), (pt[Y] / norms[i])]);\n\n // Normal directions to the edges\n const w: Point[] = v.map(pt => [-pt[Y], pt[X]]);\n\n // FIND THE MBR - Switch to matrix operations\n\n // Convex hull vertices\n const vertices = M.matrix(chExt);\n\n const vT = M.transpose(M.matrix(v));\n const wT = M.transpose(M.matrix(w));\n\n // Extremes along edges\n const temp1 = M.matrix([M.apply(M.multiply(vertices, vT), M.Dim.Columns, M.min)]);\n const temp2 = M.matrix([M.apply(M.multiply(vertices, vT), M.Dim.Columns, M.max)]);\n const x = M.concat(temp1, temp2, M.Dim.Rows);\n\n // Extremes normal to edges\n const temp3 = M.matrix([M.apply(M.multiply(vertices, wT), M.Dim.Columns, M.min)]);\n const temp4 = M.matrix([M.apply(M.multiply(vertices, wT), M.Dim.Columns, M.max)]);\n const y = M.concat(temp3, temp4, M.Dim.Rows);\n\n // Areas\n const temp5 = M.subtract(M.row(y, 0), M.row(y, 1));\n const temp6 = M.subtract(M.row(x, 0), M.row(x, 1));\n const areas = M.dotMultiply(temp5, temp6);\n\n // Index of the best edge (smallest area)\n const smallestArea = Math.min(...areas);\n const k = [ areas.indexOf(smallestArea) ];\n\n // Form a rectangle from the extremes of the best edge\n const temp7 = M.subset(x, M.index([0, 1, 1, 0, 0], k));\n const temp8 = M.subset(y, M.index([0, 0, 1, 1, 0], k));\n const temp9 = M.subset(v, M.index(k, M.range(0, 1, true)));\n const temp10 = M.subset(w, M.index(k, M.range(0, 1, true)));\n const temp11 = M.concat(temp7, temp8, M.Dim.Columns);\n const temp12 = M.concat(temp9, temp10, M.Dim.Rows);\n\n const rect = M.multiply(temp11, temp12);\n\n // Revert back to standard TypeScript arrays\n const points = rect.slice(0, -1); // Remove the closing point\n\n // Convert to standard polygon form\n return [ points ];\n}\n\n\n//\n// THIS RE-IMPLEMENTS THE R IN TYPESCRIPT, USING MATHJS FOR MATRIX OPERATIONS\n//\n\n/*\n\nconst {\n matrix,\n multiply,\n transpose,\n apply,\n min,\n max,\n concat,\n row,\n subtract,\n dotMultiply,\n index,\n range,\n subset\n} = require('mathjs');\n\ntype SimplePoint = [number, number];\n\n// For point addressing\nconst X = 0, Y = 1;\nconst COLUMNS = 0, ROWS = 1;\n\nexport function minimumBoundingRectangle(poly: any): any\n{\n // Get the convex hull polygon in standard form\n const ch = polyConvexHull(poly); \n\n // Select the exterior points\n let chExt: SimplePoint[] = ch[0];\n\n // Close the loop (ring)\n chExt.push(chExt[0]);\n\n // Edge directions - Note the implict offset array indexing\n const e: SimplePoint[] = chExt.slice(1).map((pt, i) => [(pt[X] - chExt[i][X]), (pt[Y] - chExt[i][Y])]);\n\n // Edge lengths\n const norms: number[] = e.map(pt => Math.sqrt((pt[X] ** 2) + (pt[Y] ** 2)));\n\n // Unit edge directions\n const v: SimplePoint[] = e.map((pt, i) => [(pt[X] / norms[i]), (pt[Y] / norms[i])]);\n\n // Normal directions to the edges\n const w: SimplePoint[] = v.map(pt => [-pt[Y], pt[X]]);\n\n // FIND THE MBR\n\n // Switch to MathJS matrices for matrix operations\n\n // Convex hull vertices\n const vertices = matrix(chExt);\n\n const vT = transpose(matrix(v));\n const wT = transpose(matrix(w));\n\n // Extremes along edges\n const temp1 = matrix([apply(multiply(vertices, vT), COLUMNS, min)]);\n const temp2 = matrix([apply(multiply(vertices, vT), COLUMNS, max)]);\n const x = concat(temp1, temp2, COLUMNS);\n\n // Extremes normal to edges\n const temp3 = matrix([apply(multiply(vertices, wT), COLUMNS, min)]);\n const temp4 = matrix([apply(multiply(vertices, wT), COLUMNS, max)]);\n const y = concat(temp3, temp4, COLUMNS);\n\n // Areas\n const temp5 = subtract(row(y, 0), row(y, 1));\n const temp6 = subtract(row(x, 0), row(x, 1));\n const areas = dotMultiply(temp5, temp6);\n\n // Index of the best edge (smallest area)\n const areasArr = areas.valueOf()[0]; // Make the 2D matrix a 1D array\n const smallestArea = Math.min( ...areasArr );\n const k = areasArr.indexOf(smallestArea);\n\n // Form a rectangle from the extremes of the best edge\n const temp7 = subset(x, index([0, 1, 1, 0, 0], k));\n const temp8 = subset(y, index([0, 0, 1, 1, 0], k));\n const temp9 = subset(v, index(k, range(0, 1, true)));\n const temp10 = subset(w, index(k, range(0, 1, true)));\n const rect = multiply(concat(temp7, temp8), concat(temp9, temp10, COLUMNS));\n\n // Revert back to standard TypeScript arrays\n const points = rect.valueOf().slice(0, -1); // Remove the closing point\n\n // Convert to standard polygon form\n return [ points ];\n}\n\n*/\n","import * as PP from './polypack';\n\nexport function polyContainsPoint(poly: any, x: number, y: number): boolean\n{\n let pp = PP.polyPack(poly);\n if (pp == null) return false;\n let bInside = false;\n let iCurPoly = -1;\n let bCurInside = false;\n\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n if (iRing == 0)\n {\n if (iCurPoly >= 0 && bCurInside)\n bInside = true;\n iCurPoly = iPoly;\n bCurInside = false;\n }\n let inside = false;\n let iEnd = iOffset + (nPoints - 1) * 2;\n for (let i = iOffset, j = iEnd; i <= iEnd; j = i, i += 2)\n {\n let xi = b[i], yi = b[i+1];\n let xj = b[j], yj = b[j+1];\n let intersect = ((yi > y) !== (yj > y))\n && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\n if (intersect) inside = !inside;\n }\n if (inside)\n bCurInside = iRing == 0; // not inside if inside a hole\n });\n if (iCurPoly >= 0 && bCurInside)\n bInside = true;\n return bInside;\n}\n","import * as Util from '../util/all';\n\nimport * as PP from './polypack';\nimport { makeConvexHullGrahamScan } from './graham-scan';\nimport { polyIntersects } from './union';\nimport { featureCleanHoles } from './featurecleanholes';\n\n// For incremental poly interface\nexport interface TickOptions\n{\n maxLeafCount?: number;\n maxDepth?: number;\n tickStep?: number;\n}\n\nexport const DefaultTickOptions = { maxLeafCount: 256, maxDepth: 20, tickStep: 1 };\n\n\n// Internal utilities\n\nexport const EARTH_RADIUS = 6371000; // Radius of earth in meters\n\nexport interface PolyOptions\n{\n noLatitudeCorrection?: boolean;\n}\nexport const DefaultOptions: PolyOptions = { };\n\n// Return geographic polygon area in meters^2\nexport function polySimpleArea(b: Float64Array, iOffset: number, n: number): number\n{\n let p1x: number;\n let p1y: number;\n let p2x: number;\n let p2y: number;\n let p3x: number;\n let p3y: number;\n let dx: number;\n let l: number;\n let m: number;\n let u: number;\n let i: number;\n let total: number = 0;\n if (n > 2)\n {\n for (i = 0; i < n; i++)\n {\n if (i === n - 2)\n {\n l = n - 2;\n m = n - 1;\n u = 0;\n }\n else if (i === n - 1)\n {\n l = n - 1;\n m = 0;\n u = 1;\n }\n else {\n l = i;\n m = i + 1;\n u = i + 2;\n }\n p1x = b[iOffset+l*2];\n p1y = b[iOffset+l*2+1];\n p2x = b[iOffset+m*2];\n p2y = b[iOffset+m*2+1];\n p3x = b[iOffset+u*2];\n p3y = b[iOffset+u*2+1];\n dx = (Util.deg2rad(p3x) - Util.deg2rad(p1x));\n dx *= Math.sin(Util.deg2rad(p2y));\n total += dx;\n }\n total *= EARTH_RADIUS * EARTH_RADIUS / 2;\n }\n return Math.abs(total);\n}\n\n// Allow bare polygon coordinates array or GeoJSON feature.\n// Normalize to multipolygon points array.\n\nexport function polyNormalize(poly: any): PP.PolyPack\n{\n return PP.polyPack(poly);\n}\n\nexport function polyNull(poly: any): boolean\n{\n let pp = PP.polyPack(poly);\n return pp == null || pp.length == 2;\n}\n\n// Area of geodesic polygon\nexport function polyArea(poly: any): number\n{\n let pp = polyNormalize(poly);\n let a: number = 0;\n\n // MultiPolygon is a set of polygons\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n a += polySimpleArea(b, iOffset, nPoints) * (iRing == 0 ? 1 : -1);\n });\n\n return a;\n}\n\n// NOTE - COMPACTNESS: Added the diameter of the geodesic polygon in meters\nexport function polyDiameter(poly: any, options?: PolyOptions): number\n{\n if (options === undefined) options = DefaultOptions;\n\n const ch: any = polyConvexHull(poly);\n const chCircle: Circle = polyToCircle(ch);\n\n const lon: number = chCircle.x;\n const lat: number = chCircle.y;\n const r: number = chCircle.r;\n\n const lonDistance: number = haversine(lon - r, lat, lon + r, lat, options);\n const latDistance: number = haversine(lon, lat - r, lon, lat + r, options);\n\n const diameter: number = Math.max(lonDistance, latDistance);\n \n return diameter;\n}\n\n// Return distance in meters given two lat/lon points\nfunction haversine(x1: number, y1: number, x2: number, y2: number, options: PolyOptions): number\n{\n let dLat = Util.deg2rad(y2 - y1);\n let dLon = Util.deg2rad(x2 - x1);\n let c: number;\n\n // Short circuit for using simple cartesian algorithm instead of haversine\n if (options.noLatitudeCorrection)\n c = Math.sqrt((dLat*dLat)+(dLon*dLon));\n else\n {\n let lat1 = Util.deg2rad(y1);\n let lat2 = Util.deg2rad(y2);\n\n let a = Math.sin(dLat/2) * Math.sin(dLat/2) +\n Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2)\n c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a))\n }\n\n return EARTH_RADIUS * c;\n}\n\n// The perimeter of geodesic polygon in meters\nexport function polyPerimeter(poly: any, options?: PolyOptions): number\n{\n if (options === undefined) options = DefaultOptions;\n\n let pp = polyNormalize(poly);\n let perimeter: number = 0;\n\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n if (iRing > 0) return; // skip holes\n let iStart = iOffset;\n let iEnd = (iOffset + nPoints * 2) - 2; // index to last point, not past last point\n for (; iOffset < iEnd; iOffset += 2)\n perimeter += haversine(b[iOffset], b[iOffset+1], b[iOffset+2], b[iOffset+3], options);\n\n // Close ring if necessary\n if (nPoints > 2 && (b[iStart] != b[iEnd] || b[iStart+1] != b[iEnd+1]))\n perimeter += haversine(b[iStart], b[iStart+1], b[iEnd], b[iEnd+1], options);\n });\n\n return perimeter;\n}\n\nclass Point {\n\tpublic constructor(\n\t\tpublic x: number,\n\t\tpublic y: number) {}\n}\n\nexport class Circle {\n\tpublic constructor(\n\t\tpublic x: number,\n\t\tpublic y: number,\n\t\tpublic r: number) {}\n}\n\n//\n// Returns the smallest circle that encloses the given polygon.\n// Runs in expected O(n) time, randomized.\n// Note: If 0 points are given, null is returned.\n// If 1 point is given, a circle of radius 0 is returned.\n//\n\nexport function polyToCircle(poly: any): Circle|null\n{\n return makeCircle(polyToExteriorPoints(poly));\n}\n\n//\n// Returns the circle whose perimeter is equal to the perimeter of the bounding perimeter\n// of the polygon. Use binary search to find an approximation.\n//\n\nexport function polyToPolsbyPopperCircle(poly: any, options?: PolyOptions): Circle|null\n{\n let pp = polyNormalize(poly);\n\n let c = polyToCircle(poly);\n if (c == null) return c;\n let p: number = polyPerimeter(poly, options);\n c.r = (p / (2 * Math.PI)) / 111139;\n return c;\n}\n\nfunction makeCircle(points: Array<Point>): Circle|null\n{\n if (points == null) return null;\n\n\t// Clone list to preserve the caller's data, do Durstenfeld shuffle\n\tlet shuffled: Array<Point> = points.slice();\n\tfor (let i = points.length - 1; i >= 0; i--) {\n\t\tlet j = Math.floor(Math.random() * (i + 1));\n\t\tj = Math.max(Math.min(j, i), 0);\n\t\tconst temp: Point = shuffled[i];\n\t\tshuffled[i] = shuffled[j];\n\t\tshuffled[j] = temp;\n\t}\n\n\t// Progressively add points to circle or recompute circle\n\tlet c: Circle|null = null;\n\tshuffled.forEach((p: Point, i: number) => {\n\t\tif (c === null || !isInCircle(c, p))\n\t\t\tc = makeCircleOnePoint(shuffled.slice(0, i + 1), p);\n\t});\n\treturn c;\n}\n\n// One boundary point known\nfunction makeCircleOnePoint(points: Array<Point>, p: Point): Circle\n{\n\tlet c: Circle = new Circle(p.x, p.y, 0);\n\tpoints.forEach((q: Point, i: number) => {\n\t\tif (!isInCircle(c, q)) {\n\t\t\tif (c.r == 0)\n\t\t\t\tc = makeDiameter(p, q);\n\t\t\telse\n\t\t\t\tc = makeCircleTwoPoints(points.slice(0, i + 1), p, q);\n\t\t}\n\t});\n\treturn c;\n}\n\n// Two boundary points known\nfunction makeCircleTwoPoints(points: Array<Point>, p: Point, q: Point): Circle\n{\n\tconst circ: Circle = makeDiameter(p, q);\n\tlet left : Circle|null = null;\n\tlet right: Circle|null = null;\n\n\t// For each point not in the two-point circle\n\tfor (const r of points) {\n\t\tif (isInCircle(circ, r))\n\t\t\tcontinue;\n\n\t\t// Form a circumcircle and classify it on left or right side\n\t\tconst cross: number = crossProduct(p.x, p.y, q.x, q.y, r.x, r.y);\n\t\tconst c: Circle|null = makeCircumcircle(p, q, r);\n\t\tif (c === null)\n\t\t\tcontinue;\n\t\telse if (cross > 0 && (left === null || crossProduct(p.x, p.y, q.x, q.y, c.x, c.y) > crossProduct(p.x, p.y, q.x, q.y, left.x, left.y)))\n\t\t\tleft = c;\n\t\telse if (cross < 0 && (right === null || crossProduct(p.x, p.y, q.x, q.y, c.x, c.y) < crossProduct(p.x, p.y, q.x, q.y, right.x, right.y)))\n\t\t\tright = c;\n\t}\n\n\t// Select which circle to return\n\tif (left === null && right === null)\n\t\treturn circ;\n\telse if (left === null && right !== null)\n\t\treturn right;\n\telse if (left !== null && right === null)\n\t\treturn left;\n\telse if (left !== null && right !== null)\n\t\treturn left.r <= right.r ? left : right;\n\telse\n\t\tthrow \"Assertion error\";\n}\n\nfunction makeDiameter(a: Point, b: Point): Circle\n{\n\tconst cx: number = (a.x + b.x) / 2;\n\tconst cy: number = (a.y + b.y) / 2;\n\tconst r0: number = Util.distance(cx, cy, a.x, a.y);\n\tconst r1: number = Util.distance(cx, cy, b.x, b.y);\n\treturn new Circle(cx, cy, Math.max(r0, r1));\n}\n\nfunction makeCircumcircle(a: Point, b: Point, c: Point): Circle|null\n{\n\t// Mathematical algorithm from Wikipedia: Circumscribed circle\n\tconst ox: number = (Math.min(a.x, b.x, c.x) + Math.max(a.x, b.x, c.x)) / 2;\n\tconst oy: number = (Math.min(a.y, b.y, c.y) + Math.max(a.y, b.y, c.y)) / 2;\n\tconst ax: number = a.x - ox; const ay: number = a.y - oy;\n\tconst bx: number = b.x - ox; const by: number = b.y - oy;\n\tconst cx: number = c.x - ox; const cy: number = c.y - oy;\n\tconst d: number = (ax * (by - cy) + bx * (cy - ay) + cx * (ay - by)) * 2;\n\tif (d == 0)\n\t\treturn null;\n\tconst x: number = ox + ((ax*ax + ay*ay) * (by - cy) + (bx*bx + by*by) * (cy - ay) + (cx*cx + cy*cy) * (ay - by)) / d;\n\tconst y: number = oy + ((ax*ax + ay*ay) * (cx - bx) + (bx*bx + by*by) * (ax - cx) + (cx*cx + cy*cy) * (bx - ax)) / d;\n\tconst ra: number = Util.distance(x, y, a.x, a.y);\n\tconst rb: number = Util.distance(x, y, b.x, b.y);\n\tconst rc: number = Util.distance(x, y, c.x, c.y);\n\treturn new Circle(x, y, Math.max(ra, rb, rc));\n}\n\n/* Simple mathematical functions */\n\nconst MULTIPLICATIVE_EPSILON: number = 1 + 1e-14;\n\nfunction isInCircle(c: Circle|null, p: Point): boolean\n{\n\treturn c !== null && Util.distance(p.x, p.y, c.x, c.y) <= c.r * MULTIPLICATIVE_EPSILON;\n}\n\n// Returns twice the signed area of the triangle defined by (x0, y0), (x1, y1), (x2, y2).\nfunction crossProduct(x0: number, y0: number, x1: number, y1: number, x2: number, y2: number): number\n{\n\treturn (x1 - x0) * (y2 - y0) - (y1 - y0) * (x2 - x0);\n}\n\n// cache x,y circle offsets for one quadrant indexed by number of segments\nlet circleOffsets: any = {};\n\nfunction getCircleOffsets(n: number): any\n{\n if (circleOffsets[n] === undefined)\n {\n let a: number[] = [];\n let incr = (Math.PI / 2) / n;\n let theta: number = 0;\n let i: number, j: number;\n\n // Compute NE quadrant\n for (i = 0; i < n; i++, theta += incr)\n {\n a.push(Math.sin(theta));\n a.push(Math.cos(theta));\n }\n // Add top of circle\n a.push(0);\n a.push(1);\n // Now flip X and replicate to NW quadrant\n for (i = 0; i < n; i++)\n {\n j = (n-i)*2;\n a.push(- a[j-1]);\n a.push(a[j-2]);\n }\n // Now flip X and Y and replicate to SW quadrant\n for (i = 0; i < n; i++)\n {\n j = (n-i)*2;\n a.push(- a[j-1]);\n a.push(- a[j-2]);\n }\n // Add bottom of circle\n a.push(0);\n a.push(-1);\n // Now flip Y and replicate to SE quadrant\n for (i = 0; i < n; i++)\n {\n j = (n-i)*2;\n a.push(a[j-1]);\n a.push(- a[j-2]);\n }\n // Duplicate final point per GeoJSON spec\n a.push(a[0]);\n a.push(a[1]);\n\n circleOffsets[n] = a;\n }\n\n return circleOffsets[n];\n}\n\n// Note that this is essentially an inversion of polyToCircle which computes a mathematical\n// circle given the point values, ignoring latitude correction. This inversion also\n// ignores that correction which means when plotted on a 2D map looks circular but the edge of\n// the circle is not a fixed distance (in physical units, e.g. meters) from the center.\n//\n\nexport function polyFromCircle(c: Circle, nSegments?: number): any\n{\n if (c === null || c.r == 0) return null;\n if (!nSegments || nSegments < 8) nSegments = 8;\n let poly: any = [];\n\n let offsets: any = getCircleOffsets(nSegments);\n const n: number = offsets.length;\n\n for (let i: number = 0; i < n; i += 2)\n poly.push([ c.x + (c.r * offsets[i]), c.y + (c.r * offsets[i+1]) ]);\n\n // return multi-polygon\n return [ [ poly ] ];\n}\n\n// isLeft(): tests if a point is Left|On|Right of an infinite line.\n// Input: three points P0, P1, and P2\n// Return: >0 for P2 left of the line through P0 and P1\n// =0 for P2 on the line\n// <0 for P2 right of the line\n\nfunction sortPointX(a: Point, b: Point): number { return a.x - b.x; }\nfunction sortPointY(a: Point, b: Point): number { return a.y - b.y; }\nfunction sortPoint(a: Point, b: Point): number { return a.x === b.x ? a.y - b.y : a.x - b.x; }\nfunction isLeft(p0: Point, p1: Point, p2: Point): number { return (p1.x - p0.x) * (p2.y - p0.y) - (p2.x - p0.x) * (p1.y - p0.y); }\n\nfunction pointsToPoly(points: Point[]): any\n{\n let p: any = [];\n\n for (let i: number = 0; i < points.length; i++)\n p.push( [ points[i].x, points[i].y ] );\n \n return [ p ];\n}\n\nexport function polyToExteriorPoints(poly: any): any\n{\n let pp = polyNormalize(poly);\n if (pp == null) return null;\n\n let points: Point[] = [];\n\n PP.polyPackEachPoint(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number) => {\n if (iRing > 0) return; // skip holes\n points.push(new Point(b[iOffset], b[iOffset+1]));\n });\n\n return points.length > 0 ? points : null;\n}\n\n//\n// polyConvexHull() - Two algorithms:\n// * Gram Scan (default) - in graham-scan.ts\n// * A.M.Andrew's monotone chain 2D convex hull algorithm - below\n//\n\nexport function polyConvexHull(poly: any, altAlgorithm?: any): any\n{\n if (altAlgorithm !== undefined)\n return makeConvexHullMonotoneChain2D(poly);\n \n return makeConvexHullGrahamScan(poly);\n}\n\nexport function makeConvexHullMonotoneChain2D(poly: any): any\n{\n // Normalize input\n let points = polyToExteriorPoints(poly);\n if (points == null) return null;\n\n points.sort(sortPoint);\n\n let H: Point[] = [];\n\n // the output array H[] will be used as the stack\n let n: number = points.length;\n let i: number;\n let bot: number = 0;\n let top: number = -1; // indices for bottom and top of the stack\n\n // Get the indices of points with min x-coord and min|max y-coord\n let minmin: number = 0, minmax: number;\n\n let xmin = points[0].x;\n for (i = 1; i < n; i++)\n if (points[i].x != xmin)\n break;\n\n minmax = i - 1;\n if (minmax == n - 1) // degenerate case: all x-coords == xmin\n {\n H[++top] = points[minmin];\n if (points[minmax].y != points[minmin].y) // a nontrivial segment\n H[++top] = points[minmax];\n H[++top] = points[minmin]; // add polygon endpoint\n return pointsToPoly(H);\n }\n\n // Get the indices of points with max x-coord and min|max y-coord\n let maxmin: number, maxmax: number = n - 1;\n let xmax: number = points[n - 1].x;\n for (i = n - 2; i >= 0; i--)\n if (points[i].x != xmax)\n break;\n maxmin = i + 1;\n\n // Compute the lower hull on the stack H\n H[++top] = points[minmin]; // push minmin point onto stack\n i = minmax;\n while (++i <= maxmin)\n {\n // the lower line joins points[minmin] with points[maxmin]\n if (isLeft(points[minmin], points[maxmin], points[i]) >= 0 && i < maxmin)\n continue; // ignore points[i] above or on the lower line\n\n while (top > 0) // there are at least 2 points on the stack\n {\n // test if points[i] is left of the line at the stack top\n if (isLeft(H[top - 1], H[top], points[i]) > 0)\n break; // points[i] is a new hull vertex\n else\n top--; // pop top point off stack\n }\n\n H[++top] = points[i]; // push points[i] onto stack\n }\n\n // Next, compute the upper hull on the stack H above the bottom hull\n if (maxmax != maxmin) // if distinct xmax points\n H[++top] = points[maxmax]; // push maxmax point onto stack\n\n bot = top; // the bottom point of the upper hull stack\n i = maxmin;\n while (--i >= minmax)\n {\n // the upper line joins points[maxmax] with points[minmax]\n if (isLeft(points[maxmax], points[minmax], points[i]) >= 0 && i > minmax)\n continue; // ignore points[i] below or on the upper line\n\n while (top > bot) // at least 2 points on the upper stack\n {\n // test if points[i] is left of the line at the stack top\n if (isLeft(H[top - 1], H[top], points[i]) > 0)\n break; // points[i] is a new hull vertex\n else\n top--; // pop top point off stack\n }\n\n if (points[i].x == H[0].x && points[i].y == H[0].y)\n return pointsToPoly(H); // special case (mgomes)\n\n H[++top] = points[i]; // push points[i] onto stack\n }\n\n if (minmax != minmin)\n H[++top] = points[minmin]; // push joining endpoint onto stack\n\n return pointsToPoly(H);\n}\n\n// NOTE - COMPACTNESS: Removed all the compactness notes.\n\n// TODO - COMPACTNESS: Ultimately remove this interface & polyCompactness(),\n// when dra-client no longer uses them.\nexport interface CompactnessDescription\n{\n value: number,\n reock: number,\n polsby_popper: number,\n convex_hull: number,\n schwartzberg: number,\n}\n\nexport function polyCompactness(poly: any, options?: PolyOptions): CompactnessDescription\n{\n if (options === undefined) options = DefaultOptions;\n\n let pp = polyNormalize(poly);\n\n let area: number = polyArea(pp);\n let perimeter: number = polyPerimeter(pp, options);\n\n let circle: Circle = polyToCircle(pp);\n let circleArea: number = polyArea(polyFromCircle(circle));\n let ppcircleArea: number = polyArea(polyFromCircle(polyToPolsbyPopperCircle(poly)));\n let hullArea: number = polyArea(polyConvexHull(pp));\n\n let result: CompactnessDescription = { value: 0, reock: 0, polsby_popper: 0, convex_hull: 0, schwartzberg: 0 };\n if (area == 0 || circle == null || circle.r == 0) return result;\n\n result.reock = area / circleArea;\n result.polsby_popper = area / ppcircleArea;\n result.convex_hull = area / hullArea;\n result.schwartzberg = ((2 * Math.PI) * Math.sqrt(area / Math.PI)) / perimeter;\n\n // Weight Reock and Polsby-Popper equally, normalize in 0-100 range\n result.value = Math.trunc(((result.reock + result.polsby_popper) / 2) * 100);\n return result;\n}\n\n\nexport interface PolyDescription\n{\n npoly: number,\n nhole: number,\n npoint: number\n}\n\nconst EmptyPolyDescription = { npoly: 0, nhole: 0, npoint: 0 };\n\nexport function polyDescribe(poly: any): PolyDescription\n{\n let pp = polyNormalize(poly);\n let d = Util.shallowCopy(EmptyPolyDescription);\n\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n d.npoint += nPoints;\n if (iRing == 0)\n d.npoly++;\n else\n d.nhole++;\n });\n\n return d;\n}\n\nexport function npoints(poly: any): number\n{\n let d = polyDescribe(poly);\n return d.npoint;\n}\n\n// \n// polyTransform: transform each point. Called for all polygons and all rings.\n// point, by point. Returns a packed structure.\n//\nexport function polyTransform(poly: any, transformFn: any): any\n{\n // Get all the points -- DON'T skip holes -- and transform them.\n // Don't alter input structure so copy if polyNormalize did not.\n let pp = polyNormalize(poly);\n if (! PP.polyPacked(poly))\n pp = PP.polyPackCopy(pp);\n\n PP.polyPackEachPoint(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number) =>\n {\n const [newX, newY] = transformFn([b[iOffset], b[iOffset+1]]);\n b[iOffset] = newX;\n b[iOffset+1] = newY;\n });\n\n return pp;\n}\n\nfunction identityTransform(pt: number[]): number[]\n{\n return [pt[0], pt[1]];\n}\n\nfunction closeRing(ring: any): any\n{\n if (ring.length > 1)\n {\n let p1 = ring[0];\n let p2 = ring[ring.length-1];\n if (p1[0] !== p2[0] || p1[1] !== p2[1])\n ring.push(p1);\n }\n return ring;\n}\n\nfunction closePoly(poly: any): any\n{\n poly.forEach(closeRing);\n return poly;\n}\n\nfunction featureClose(f: any): void\n{\n let d = Util.depthof(f.geometry.coordinates);\n if (d === 4) closePoly(f.geometry.coordinates);\n if (d === 5) f.geometry.coordinates.forEach(closePoly);\n}\n\nexport interface RewindOptions\n{\n validateHoles?: boolean,\n validateClose?: boolean,\n canonical?: boolean,\n}\n\nfunction canonicalPoint(f: any, options: RewindOptions): any\n{\n if (options.canonical)\n if (f && f.geometry && f.geometry.type === 'Point' && f.geometry.coordinates)\n while (Array.isArray(f.geometry.coordinates[0]))\n f.geometry.coordinates = f.geometry.coordinates[0];\n return f;\n}\n\n//\n// polyRingWindings: Return depth-first array of winding of each ring in the feature.\n// value < 0: CW\n// value > 0: CCW\n//\n\ninterface Winding { iPoly: number, iRing: number, direction: number };\n\nfunction misWound(w: Winding): boolean\n{\n return (((w.iRing == 0) && (w.direction > 0)) || ((w.iRing > 0) && (w.direction < 0)));\n}\n\nexport function polyRingWindings(poly: any): Winding[]\n{\n let windings: Winding[] = [];\n\n let pp = polyNormalize(poly);\n if (pp == null || pp.buffer == null) return windings;\n\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) =>\n {\n const iStart = iOffset;\n const iEnd = iStart + (nPoints * 2) - 2;\n\n // Determine the winding order of the ring\n let direction = 0;\n\n // Start at the second point\n iOffset += 2;\n for (; iOffset <= iEnd; iOffset += 2)\n {\n // The previous point\n let jOffset = iOffset - 2;\n\n // Sum over the edges\n direction += twoTimesArea(b[iOffset], b[jOffset], b[iOffset+1], b[jOffset+1]);\n }\n \n // Implicitly close the ring, if necessary\n if (nPoints > 2 && (b[iStart] != b[iEnd] || b[iStart + 1] != b[iEnd + 1]))\n direction += twoTimesArea(b[iStart], b[iEnd], b[iStart + 1], b[iEnd + 1]);\n\n windings.push({ iPoly: iPoly, iRing: iRing, direction: direction });\n });\n return windings;\n}\n\nfunction flattenMultiPoly(polys: any): any\n{\n let c: any[] = [];\n polys.forEach((poly: any) => {\n poly.forEach((ring: any) => {\n c.push([ring]);\n });\n });\n return c;\n}\n\n// This mutates the passed in feature to ensure it is correctly wound\n// For convenience, passed back the value provided.\n//\nexport function featureRewind(f: any, options?: RewindOptions): any\n{\n options = Util.shallowAssignImmutable({ validateHoles: true, validateClose: true, canonical: true }, options);\n\n if (!f) return null;\n\n // Has to be an unpacked feature\n if (f.type !== 'Feature') return f;\n if (!f.geometry || f.geometry.packed) return f;\n\n // Non polygons are simpler\n if (f.geometry.type !== 'Polygon' && f.geometry.type !== 'MultiPolygon') return canonicalPoint(f, options);\n\n // Make sure polygon is closed (first === last)\n if (options.validateClose)\n featureClose(f);\n\n // Check if multi-polygon is really polygon with holes\n if (options.validateHoles)\n featureCleanHoles(f);\n\n // OK, now go through each ring\n let polys = f.geometry.coordinates;\n let d = Util.depthof(f.geometry.coordinates);\n if (d == 4) polys = [polys];\n let windings = polyRingWindings(f);\n windings.forEach((w: Winding) => {\n let good = !misWound(w);\n if (!good)\n {\n let ring = polys[w.iPoly][w.iRing];\n let iFront = 0;\n let iBack = ring.length-1;\n for (; iFront < iBack; iFront++, iBack--)\n {\n let tmp = ring[iFront];\n ring[iFront] = ring[iBack];\n ring[iBack] = tmp;\n }\n }\n });\n\n return f;\n}\n\n//\n// polyRewindRings: Check the winding order of the polygon's ring. Rewind them,\n// if necessary. Return a packed polygon.\n//\nexport function polyRewindRings(pp: any, bLog: boolean = false): any\n{\n if (pp == null || pp.buffer == null) return;\n\n if (pp.offset === undefined) throw 'oops: not a PolyPack';\n\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) =>\n {\n const iStart = iOffset;\n const iEnd = iStart + (nPoints * 2) - 2;\n\n // Determine the winding order of the ring\n let direction = 0;\n\n // Start at the second point\n iOffset += 2;\n for (; iOffset <= iEnd; iOffset += 2)\n {\n // The previous point\n let jOffset = iOffset - 2;\n\n // Sum over the edges\n direction += twoTimesArea(b[iOffset], b[jOffset], b[iOffset+1], b[jOffset+1]);\n }\n \n // Implicitly close the ring, if necessary\n if (nPoints > 2 && (b[iStart] != b[iEnd] || b[iStart + 1] != b[iEnd + 1]))\n {\n if (bLog) console.log(`Implicitly closing polygon ${iPoly}, ring ${iRing}.`);\n\n direction += twoTimesArea(b[iStart], b[iEnd], b[iStart + 1], b[iEnd + 1]);\n }\n\n // If the winding order is wrong, reverse it\n if (((iRing == 0) && (direction > 0)) || ((iRing > 0) && (direction < 0)))\n {\n if (bLog) console.log(`Rewinding polygon ${iPoly}, ring ${iRing}.`);\n\n let iFront = iStart;\n let iBack = iEnd;\n for (; iFront < iBack; iFront += 2, iBack -= 2)\n {\n let tmpX = b[iFront];\n let tmpY = b[iFront+1];\n b[iFront] = b[iBack];\n b[iFront+1] = b[iBack+1];\n b[iBack] = tmpX;\n b[iBack+1] = tmpY;\n }\n }\n });\n\n return pp;\n}\n\n//\n// To figure out which way a ring is wound:\n//\n// Sum over the edges, (x2 − x1) (y2 + y1). If the result is positive the curve\n// is clockwise, if it's negative the curve is counterclockwise. (The result is \n// twice the enclosed area, with a + /- convention.)\n//\n// Source: https://stackoverflow.com/questions/1165647/how-to-determine-if-a-list-of-polygon-points-are-in-clockwise-order#1165943\n//\nfunction twoTimesArea(x2: number, x1: number, y2: number, y1: number): number\n{\n return (x2 - x1) * (y2 + y1);\n}\n\nfunction badCoord(c: number): boolean\n{\n return isNaN(c) || c > 360 || c < -360;\n}\n\nexport function polyBadCoordinates(f: any): boolean\n{\n if (f.type === 'FeatureCollection' && f.features)\n {\n for (let i = 0; i < f.features.length; i++)\n if (polyBadCoordinates(f.features[i])) return true;\n return false;\n }\n\n let pp = polyNormalize(f);\n let bad = false;\n if (pp)\n {\n PP.polyPackEachPoint(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number) => {\n if (bad) return;\n bad = badCoord(b[iOffset]) || badCoord(b[iOffset+1]);\n });\n }\n return bad;\n}\n","import * as Util from '../util/all';\nimport * as PP from './polypack';\nimport * as T from './topo';\n\n// Packed Buffer format:\n//\n// (strings are packed as UTF8 bytes, padded to 4 byte boundary)\n//\n// { 4 byte size (byte offset to packed coordinate buffer) }\n// { 4 byte length: property name,\n// 4 byte length: json string }*\n// { 4 byte length: 'features' }\n// { 4 byte length: length of 'features' array }\n// { 4 byte length: property name,\n// 4 byte length: json string }*\n// { padding to 8 byte boundary }\n// { packed buffer coordinates in polypack format (indexed by geometry.packed above) }\n//\n\nconst MagicInt = 17;\nconst MagicFloat = 17.17;\n\nfunction pad(n: number, pad: number): number\n{\n let mod = n % pad;\n return mod ? pad - mod : 0;\n}\n\nfunction sizeOfString(coder: Util.Coder, s: string): number\n{\n let s8 = Util.s2u8(coder, s);\n return 4 + s8.length + pad(s8.length, 4);\n}\n\nfunction packString(coder: Util.Coder, buf8: Uint8Array, buf32: Int32Array, offset: number, s: string): number\n{\n let s8 = Util.s2u8(coder, s);\n buf32[offset >> 2] = s8.length;\n offset += 4;\n let i: number;\n for (i = 0; i < s8.length; i++) buf8[offset++] = s8[i];\n offset += pad(offset, 4);\n return offset;\n}\n\nfunction unpackString(coder: Util.Coder, buf8: Uint8Array, buf32: Int32Array, offset: number): string\n{\n let size = buf32[offset >> 2];\n let s = Util.u82s(coder, buf8, offset+4, size);\n return s;\n}\n\nexport function packCollection(coder: Util.Coder, col: any): ArrayBuffer\n{\n // Compute size\n let pp = PP.featurePack(col) as PP.PolyPack;\n let f: any = col.features.find((f: any) => { return f.geometry.packed ? f.geometry.packed.buffer : null });\n let buffer: any = f ? f.geometry.packed.buffer : null;\n let size = 16; // int endiness, offset to coordinates, float endiness\n col.features.forEach((f: any) => { if (f.geometry.packed) delete f.geometry.packed.buffer; }); // reconstructed when unpacking\n let j = JSON.stringify(col);\n size += sizeOfString(coder, j);\n size += pad(size, 8);\n let fullsize = size + pp.length * 8; // add space for coordinates\n\n // Now pack it\n let ab = new ArrayBuffer(fullsize);\n let buf8 = new Uint8Array(ab);\n let buf32 = new Int32Array(ab);\n let buf64 = new Float64Array(ab);\n let offset = 0;\n buf32[0] = MagicInt;\n offset += 4;\n buf32[1] = size;\n offset += 4;\n buf64[1] = MagicFloat; // Note that buf64[0] has the two ints stored above\n offset += 8;\n offset = packString(coder, buf8, buf32, offset, j);\n offset += pad(offset, 8);\n if (offset != size)\n throw 'Oops, packing error.';\n let foff = offset >> 3;\n let buf = pp.buffer as Float64Array;\n for (let i: number = 0; i < pp.length; i++)\n buf64[foff++] = buf[i];\n\n // Now restore\n col.features.forEach((f: any) => { if (f.geometry.packed) f.geometry.packed.buffer = buffer; });\n PP.featureUnpack(col);\n\n return ab;\n}\n\nfunction reverse(buf8: Uint8Array, s: number, n: number): void\n{\n let e = s + n - 1;\n while (s < e)\n {\n let t = buf8[s];\n buf8[s] = buf8[e];\n buf8[e] = t;\n s++, e--;\n }\n}\n\nfunction enforceEndianness(ab: ArrayBuffer): void\n{\n let buf8 = new Uint8Array(ab);\n let buf32 = new Int32Array(ab);\n let buf64 = new Float64Array(ab);\n let reverseInts = false;\n if (buf32[0] != MagicInt)\n {\n reverseInts = true;\n reverse(buf8, 0, 4);\n if (buf32[0] != MagicInt) throw 'unpackCollection: badly formatted buffer';\n reverse(buf8, 4, 4); // size of non-floats\n }\n let reverseFloats = false;\n if (buf64[1] != MagicFloat)\n {\n reverseFloats = true;\n reverse(buf8, 8, 8);\n if (buf64[1] != MagicFloat) throw 'unpackCollection: badly formatted buffer';\n }\n if (reverseInts)\n reverse(buf8, 16, 4); // JSON string length\n if (reverseFloats)\n {\n let s = buf32[1]; // Offset to floats\n let e = ab.byteLength;\n for (; s < e; s += 8)\n reverse(buf8, s, 8);\n }\n}\n\nexport function unpackCollection(coder: Util.Coder, ab: ArrayBuffer): any\n{\n enforceEndianness(ab);\n let col: any = {};\n let buf8 = new Uint8Array(ab);\n let buf32 = new Int32Array(ab);\n let size = buf32[1];\n let buf64 = new Float64Array(ab, size); // offset to start of packed coordinates\n let offset = 16;\n let j = unpackString(coder, buf8, buf32, offset);\n col = JSON.parse(j);\n col.features.forEach((f: any) => { if (f.geometry.packed) f.geometry.packed.buffer = buf64 });\n return col;\n}\n\n// Format of packed buffer:\n// [Size of JSON string] [4 bytes]\n// [Size of packedarcs] [4 bytes]\n// [Size of packedarcindices] [4 bytes]\n// [padding] [4 bytes]\n// [JSON string]\n// [pad to 8]\n// [packedarcs]\n// [packedarcindices]\n\nconst HeaderSize = 16; // 4 Int32's \n\nexport function topoToBuffer(coder: Util.Coder, topo: any): ArrayBuffer\n{\n // Make sure we're packed\n T.topoPack(topo);\n let savepack = topo.packed;\n delete topo.packed;\n let json = JSON.stringify(topo);\n let byteLength = HeaderSize; // 3 lengths + padding\n let stringLength = sizeOfString(coder, json);\n stringLength += pad(stringLength, 8);\n byteLength += stringLength;\n byteLength += savepack.arcs.byteLength;\n byteLength += savepack.arcindices.byteLength;\n let ab = new ArrayBuffer(byteLength);\n let buf8 = new Uint8Array(ab);\n let buf32 = new Int32Array(ab);\n let buf64 = new Float64Array(ab, HeaderSize + stringLength, savepack.arcs.length);\n\n buf32[0] = stringLength;\n buf32[1] = savepack.arcs.byteLength;\n buf32[2] = savepack.arcindices.byteLength;\n buf32[3] = 0;\n packString(coder, buf8, buf32, HeaderSize, json); json = null;\n let af = savepack.arcs as Float64Array;\n let n = af.length;\n let i = 0;\n let j = 0;\n while (i < n)\n buf64[j++] = af[i++];\n let ai = savepack.arcindices as Int32Array;\n n = ai.length;\n i = 0;\n j = (HeaderSize + stringLength + savepack.arcs.byteLength) / 4;\n while (i < n)\n buf32[j++] = ai[i++];\n\n // restore\n topo.packed = savepack;\n\n return ab;\n}\n\nexport function topoFromBuffer(coder: Util.Coder, ab: ArrayBuffer): any\n{\n let buf8 = new Uint8Array(ab);\n let buf32 = new Int32Array(ab);\n let stringLength = buf32[0];\n let arcsByteLength = buf32[1];\n let arcindicesByteLength = buf32[2];\n let json = unpackString(coder, buf8, buf32, HeaderSize);\n let topo = JSON.parse(json);\n topo.packed = {};\n topo.packed.arcs = new Float64Array(ab, stringLength + HeaderSize, arcsByteLength / 8);\n topo.packed.arcindices = new Int32Array(ab, stringLength + HeaderSize + arcsByteLength, arcindicesByteLength / 4);\n return topo;\n}\n","import * as P from './poly';\nimport * as PP from './polypack';\n\n// Hash coordinates to 32 bit number in order to produce a fast (and a little sloppy) equivalence test.\n// Note that this depends on ordering, so an equivalent polygon with different coordinate ordering would\n// not test as equivalent. As a 32 bit number, you can expect collisions when used for large numbers of\n// polygons (e.g. a 700k block set might expect ~57 collisions - TX at 660K gets 62 collisions, e.g.).\n//\nexport function polyHash32(poly: any, seed = 0): number\n{\n let pp = P.polyNormalize(poly);\n if (!pp) return 0;\n\n let h = (seed | 0) ^ 0x9e3779b9;\n const buf = new ArrayBuffer(8);\n const dv = new DataView(buf);\n\n function mix32(x: number): number\n {\n x ^= x >>> 16; x = Math.imul(x, 0x7feb352d);\n x ^= x >>> 15; x = Math.imul(x, 0x846ca68b);\n x ^= x >>> 16;\n return x | 0;\n }\n\n let l = 0;\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n let iEnd = iOffset + (nPoints*2);\n for (; iOffset < iEnd; iOffset++)\n {\n const x = b[iOffset];\n if (Number.isNaN(x))\n {\n dv.setUint32(0, 0x7ff80001, true);\n dv.setUint32(4, 0, true);\n }\n else\n dv.setFloat64(0, x, true);\n const lo = dv.getUint32(0, true) | 0;\n const hi = dv.getUint32(4, true) | 0;\n\n let z = mix32(lo ^ Math.imul(hi, 0x9e3779b9) ^ Math.imul(l + 1, 0x85ebca6b));\n h ^= z;\n h = mix32(h);\n l++;\n }\n });\n h ^= l | 0;\n h = mix32(h);\n // return as unsigned 32-bit in a JS number\n return h >>> 0;\n}\n","import TinyQueue from 'tinyqueue';\nimport * as Util from '../util/all';\nimport * as P from './poly';\nimport * as PP from './polypack';\nimport * as BB from './boundbox';\n\ninterface PolyLabelResult\n{\n x: number;\n y: number;\n d: number;\n}\n\n//\n// polyDistance: return (smallest) distance to polygon edge.\n// Positive value indicates point is in poly, negative indicates point is outside.\n//\n\nexport function polyDistance(poly: any, x: number, y: number): number\n{\n let pp = P.polyNormalize(poly);\n if (pp == null) return 0;\n\n // First find if it is contained in one of the outer polygons, or outside all outer polygons\n let iContaining = -1;\n let maxOutside = - Infinity;\n let minInside = Infinity;\n let noholes = true;\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n // If we have determined we are inside this polygon, keep track of whether it has holes\n if (iContaining == iPoly && iRing > 0)\n noholes = false;\n // Don't process rings\n if (iRing > 0) return;\n // OK, get distance\n let forEachPointPair = (iter: any) => {\n PP.polyPackEachRing(pp, (b: Float64Array, iInteriorPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n if (iRing || iInteriorPoly != iPoly) return;\n let iFirst = iOffset;\n let iLast = iOffset + nPoints * 2;\n let iSecond = iLast - 2;\n for (; iFirst < iLast; iSecond = iFirst, iFirst += 2)\n iter(b[iFirst], b[iFirst+1], b[iSecond], b[iSecond+1]);\n });\n };\n let dist = pointToPolygonDist(x, y, forEachPointPair);\n // If inside, is it closest inside (deal with multipolygons that self-contain - think filled donut)\n if (dist > 0 && dist < minInside)\n {\n iContaining = iPoly;\n minInside = dist;\n noholes = true;\n }\n else if (dist < 0)\n maxOutside = Math.max(maxOutside, dist);\n });\n if (iContaining < 0)\n return maxOutside;\n if (noholes)\n return minInside;\n\n // OK, now need to worry about holes in the polygon it is contained in\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n // Only want to look at the holes for the containing polygon\n if (iPoly != iContaining || iRing == 0) return;\n // Compute distance to those holes\n let forEachPointPair = (iter: any) => {\n PP.polyPackEachRing(pp, (b: Float64Array, iInteriorPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n if (iInteriorPoly != iContaining || iRing == 0) return;\n let iFirst = iOffset;\n let iLast = iOffset + nPoints * 2;\n let iSecond = iLast - 2;\n for (; iFirst < iLast; iSecond = iFirst, iFirst += 2)\n iter(b[iFirst], b[iFirst+1], b[iSecond], b[iSecond+1]);\n });\n };\n // Negate distance since dealing with holes\n let dist = - pointToPolygonDist(x, y, forEachPointPair);\n // We take the min to either get a negative value (inside hole) or a smaller positive value\n // (outside hole but close to hole boundary).\n minInside = Math.min(minInside, dist);\n });\n return minInside;\n}\n\n//\n// polyLabel: given polygon, return contained point furthest from any edge, and that distance\n//\n\nexport function polyLabel(poly: any, precision?: number, debug?: boolean): PolyLabelResult\n{\n let pp = P.polyNormalize(poly);\n if (pp == null) return { x: 0, y: 0, d: 0 };\n\n // For multi-polygon, pick largest polygon\n let iLargest: number;\n let nLargestArea: number;\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n if (iRing) return;\n let nArea = P.polySimpleArea(b, iOffset, nPoints);\n if (iLargest === undefined || nArea > nLargestArea) { iLargest = iPoly, nLargestArea = nArea }\n });\n\n if (iLargest === undefined)\n return { x: 0, y: 0, d: 0 };\n\n precision = precision || 0.00001;\n\n let forEachPoint = (iter: any) => {\n PP.polyPackEachPoint(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number) => {\n if (iPoly != iLargest || iRing) return;\n iter(b[iOffset], b[iOffset+1]);\n });\n };\n let forEachPointPair = (iter: any) => {\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly, iRing: number, iOffset: number, nPoints: number) => {\n if (iPoly != iLargest || iRing) return;\n let iFirst = iOffset;\n let iLast = iOffset + nPoints * 2;\n let iSecond = iLast - 2;\n for (; iFirst < iLast; iSecond = iFirst, iFirst += 2)\n iter(b[iFirst], b[iFirst+1], b[iSecond], b[iSecond+1]);\n });\n };\n\n // find the bounding box of the outer ring\n let minX: number, minY: number, maxX: number, maxY: number;\n forEachPoint((x: number, y: number) => {\n if (minX === undefined || x < minX) minX = x;\n if (minY === undefined || y < minY) minY = y;\n if (maxX === undefined || x > maxX) maxX = x;\n if (maxY === undefined || y > maxY) maxY = y;\n });\n\n let width: number = maxX - minX;\n let height: number = maxY - minY;\n let cellSize: number = Math.min(width, height);\n let h: number = cellSize / 2;\n\n if (cellSize === 0) return { x: minX, y: minY, d: 0 };\n\n // a priority queue of cells in order of their \"potential\" (max distance to polygon)\n let cellQueue = new TinyQueue<Cell>(undefined, compareMax);\n\n // cover polygon with initial cells\n for (let x: number = minX; x < maxX; x += cellSize)\n {\n for (let y: number = minY; y < maxY; y += cellSize)\n cellQueue.push(new Cell(x + h, y + h, h, forEachPointPair));\n }\n\n // take centroid as the first best guess\n let bestCell: any = getCentroidCell(forEachPointPair);\n\n // special case for rectangular polygons\n let bboxCell: Cell = new Cell(minX + width / 2, minY + height / 2, 0, forEachPointPair);\n if (bboxCell.d > bestCell.d) bestCell = bboxCell;\n\n let numProbes = cellQueue.length;\n\n while (cellQueue.length)\n {\n // pick the most promising cell from the queue\n let cell = cellQueue.pop();\n\n // update the best cell if we found a better one\n if (cell.d > bestCell.d)\n {\n bestCell = cell;\n if (debug) console.log('found best %d after %d probes', Math.round(1e4 * cell.d) / 1e4, numProbes);\n }\n\n // do not drill down further if there's no chance of a better solution\n if (cell.max - bestCell.d <= precision) continue;\n\n // split the cell into four cells\n h = cell.h / 2;\n cellQueue.push(new Cell(cell.x - h, cell.y - h, h, forEachPointPair));\n cellQueue.push(new Cell(cell.x + h, cell.y - h, h, forEachPointPair));\n cellQueue.push(new Cell(cell.x - h, cell.y + h, h, forEachPointPair));\n cellQueue.push(new Cell(cell.x + h, cell.y + h, h, forEachPointPair));\n numProbes += 4;\n }\n\n if (debug)\n {\n console.log('num probes: ' + numProbes);\n console.log('best distance: ' + bestCell.d);\n }\n\n return { x: bestCell.x, y: bestCell.y, d: bestCell.d };\n}\n\nfunction compareMax(a: Cell, b: Cell) { return b.max - a.max; }\n\nclass Cell\n{\n x: number;\n y: number;\n h: number;\n d: number;\n max: number;\n\n constructor(x: number, y: number, h: number, forEachPointPair: any)\n {\n this.x = x; // cell center x\n this.y = y; // cell center y\n this.h = h; // half the cell size\n this.d = pointToPolygonDist(x, y, forEachPointPair); // distance from cell center to polygon\n this.max = this.d + this.h * Math.SQRT2; // max distance to polygon within a cell\n }\n}\n\n// signed distance from point to polygon outline (negative if point is outside)\nfunction pointToPolygonDist(x: number, y: number, forEachPointPair: any): number\n{\n let inside = false;\n let minDistSq = Infinity;\n\n forEachPointPair((ax: number, ay: number, bx: number, by: number) => {\n if ((ay > y !== by > y) && (x < (bx - ax) * (y - ay) / (by - ay) + ax))\n inside = !inside;\n\n minDistSq = Math.min(minDistSq, getSegDistSq(x, y, ax, ay, bx, by));\n });\n\n return (inside ? 1 : -1) * Math.sqrt(minDistSq);\n}\n\n// get polygon centroid\nfunction getCentroidCell(forEachPointPair: any): Cell\n{\n let area = 0;\n let x = 0;\n let y = 0;\n let fx: number;\n let fy: number;\n\n forEachPointPair((ax: number, ay: number, bx: number, by: number) => {\n if (fx === undefined) fx = ax, fy = ay;\n let f: number = ax * by - bx * ay;\n x += (ax + bx) * f;\n y += (ay + by) * f;\n area += f * 3;\n });\n if (area === 0) return new Cell(fx, fy, 0, forEachPointPair);\n return new Cell(x / area, y / area, 0, forEachPointPair);\n}\n\n// get squared distance from a point to a segment\nfunction getSegDistSq(px: number, py: number, ax: number, ay: number, bx: number, by: number): number\n{\n let dx = bx - ax;\n let dy = by - ay;\n\n if (dx !== 0 || dy !== 0)\n {\n let t: number = ((px - ax) * dx + (py - ay) * dy) / (dx * dx + dy * dy);\n\n if (t > 1)\n {\n ax = bx;\n ay = by;\n }\n else if (t > 0)\n {\n ax += dx * t;\n ay += dy * t;\n }\n }\n\n dx = px - ax;\n dy = py - ay;\n\n return dx * dx + dy * dy;\n}\n","// Shared libraries\nimport * as Util from '../util/all';\n\n// Format for efficient packing of multipolygon coordinates\n//\n// [n] number of polygons\n// [n polygon headers]...\n// [n] number of rings\n// [n]... number of coordinates in ring\n// followed by [x,y]... for all the coordinates\n\nexport interface PolyPack\n{\n offset: number;\n length: number;\n buffer: any;\n}\n\nexport function polyPackSize(coords: any): number\n{\n // Null feature?\n if (coords == null || (coords.length !== undefined && coords.length == 0)) return 0;\n\n if (! Array.isArray(coords)) return 0;\n let depth = Util.depthof(coords);\n if (depth == 3) coords = [[ coords ]];\n else if (depth == 4) coords = [ coords ]; // normalize to multipolygon\n let nFloats: number = 2; // for number of polygons and size of header block\n let i: number, j: number;\n let p: any, r: any;\n for (i = 0; i < coords.length; i++)\n {\n p = coords[i];\n nFloats++; // For number of rings in this polygon\n for (j = 0; j < p.length; j++)\n {\n nFloats++; // For number of coordinates in this ring\n r = p[j];\n nFloats += r.length * 2; // for each x, y pair\n }\n }\n return nFloats;\n}\n\ntype EachRingCB = (buffer: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => void;\ntype EachPointCB = (buffer: Float64Array, iPoly: number, iRing: number, iOffset: number) => void;\n\nexport function polyPackEachRing(pack: PolyPack, cb: EachRingCB): void\n{\n if (pack == null || pack.buffer == null) return;\n\n if (pack.offset === undefined) throw 'oops: not a PolyPack';\n\n let b = pack.buffer;\n let iRing: number;\n let iOffset: number = pack.offset;\n let cOffset: number = b[iOffset+1] + pack.offset;\n\n // Grab number of polygons\n let nPoly: number = b[iOffset++];\n // Move past header length\n iOffset++;\n for (let iPoly: number = 0; iPoly < nPoly; iPoly++)\n {\n // Grab number of rings in this polygon\n let nRing: number = b[iOffset++];\n for (let iRing: number = 0; iRing < nRing; iRing++)\n {\n // Grab number of points in this ring\n let nPoints: number = b[iOffset++];\n cb(b, iPoly, iRing, cOffset, nPoints);\n cOffset += nPoints * 2;\n }\n }\n}\n\nexport function polyPackEachPoint(pack: PolyPack, cb: EachPointCB): void\n{\n polyPackEachRing(pack, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n let iEnd: number = iOffset + (nPoints * 2);\n for (; iOffset < iEnd; iOffset += 2)\n cb(b, iPoly, iRing, iOffset);\n });\n}\n\nexport function polyPackCountPoints(pack: PolyPack): number\n{\n let n = 0;\n polyPackEachRing(pack, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => { n += nPoints });\n return n;\n}\n\nexport function polyPacked(f: any): boolean\n{\n if (f == null) return false;\n if (f.offset !== undefined) return true;\n if (f.geometry !== undefined) return f.geometry.packed !== undefined;\n if (f.type === 'FeatureCollection' && f.features !== undefined && f.features.length > 0)\n return polyPacked(f.features[0]);\n return false;\n}\n\n// Convert to multi-polygon format if necessary\nexport function normalizeArcs(arcs: any): any\n{\n let d = Util.depthof(arcs);\n while (d < 4) { arcs = [arcs], d++ } // note that depth is n-1 compared to coords because leaf is just number, not [x,y]\n return arcs;\n}\n\nexport function countArcPolygons(arcs: any): number\n{\n arcs = normalizeArcs(arcs);\n return arcs.length;\n}\n\nexport function countArcRings(arcs: any, iPoly?: number): number\n{\n arcs = normalizeArcs(arcs);\n let r = 0;\n arcs.forEach((a: any, ip: number) => { if (iPoly === undefined || iPoly === ip) r += a.length })\n return r;\n}\n\nexport function countOneArcPoints(topo: any, ring: any): number\n{\n // for each ring\n let n = 0;\n ring.forEach((i: number, index: number) => {\n // for each arc\n let a = topo.arcs[i < 0 ? ~i : i];\n if (index > 0) n--;\n n += a.length;\n });\n if (n < 4) n = 4;\n return n;\n}\n\nexport function countArcPoints(topo: any, arcs: any, iPoly?: number): number\n{\n arcs = normalizeArcs(arcs);\n let npoints = 0;\n arcs.forEach((polygon: any, ip: number) => {\n if (iPoly === undefined || iPoly === ip)\n polygon.forEach((ring: any) => { npoints += countOneArcPoints(topo, ring) })\n });\n return npoints;\n}\n\n// This packs the TopoJSON arc format into a PolyPack. Basics:\n// 1) Negative indices indicate arc should be traversed backward.\n// 2) First and last point of sequential arcs are duplicated, so only include one instance. Easiest way\n// of implementing this (to match topojson implementation) is first delete last point.\n// 3) If total number of points < 4, duplicate the first point until you get 4 to meet GeoJSON standard.\n// 4) Can also request to pack just a single polygon of a multi-polygon\n//\nexport function polyPackTopoArcs(topo: any, arcs: any, iPoly?: number): PolyPack\n{\n if (topo == null || arcs == null || arcs.length == 0) return null;\n arcs = normalizeArcs(arcs);\n let nPoints = countArcPoints(topo, arcs, iPoly);\n if (nPoints == 0) return null;\n let nFloats = 2 + (2 * countArcRings(arcs, iPoly)) + (2 * nPoints);\n let ab = new ArrayBuffer(nFloats * 8);\n let prepack: PolyPack = { offset: 0, length: nFloats, buffer: new Float64Array(ab) };\n let af = prepack.buffer as Float64Array;\n let z = 0;\n af[z++] = iPoly === undefined ? countArcPolygons(arcs) : 1;\n z++; // spot for header size\n\n // Fill in header - number of rings in each polygon and number of points in each ring\n arcs.forEach((polygon: any, ip: number) => {\n if (iPoly === undefined || iPoly === ip)\n {\n af[z++] = polygon.length;\n polygon.forEach((ring: any) => af[z++] = countOneArcPoints(topo, ring));\n }\n });\n\n // go back and fill in header size\n af[1] = z;\n\n // now copy in the points\n arcs.forEach((polygon: any, ip: number) => {\n if (iPoly === undefined || iPoly === ip)\n polygon.forEach((ring: any) => {\n let b = z;\n ring.forEach((i: number, index: number) => {\n let a = topo.arcs[i < 0 ? ~i : i];\n if (index > 0) z -= 2;\n let n = a.length;\n let j;\n if (i < 0)\n for (j = n-1; j >= 0; j--) { let pt: any = a[j]; af[z++] = pt[0], af[z++] = pt[1] }\n else\n for (j = 0; j < n; j++) { let pt: any = a[j]; af[z++] = pt[0], af[z++] = pt[1] }\n });\n // need at least 4 points in each ring\n if (z != b)\n while (z < b+8) { af[z++] = af[b], af[z++] = af[b+1] }\n });\n });\n\n return prepack;\n}\n\nexport function polyPack(coords: any, prepack?: PolyPack): PolyPack\n{\n // Null feature?\n if (coords == null || (coords.length !== undefined && coords.length == 0)) return null;\n\n // Null geometry?\n if (coords && coords.type === 'Feature' && coords.geometry == null) return null;\n\n // Actually already a PolyPack?\n if (coords.offset !== undefined) return coords as PolyPack;\n\n // Packed feature?\n if (coords && coords.geometry && coords.geometry.packed !== undefined)\n return coords.geometry.packed as PolyPack;\n\n // Unpacked feature, grab the coordinates array\n if (coords && coords.geometry)\n coords = coords.geometry.coordinates;\n\n // Transparently handle polygon or multi-polygon\n if (! Array.isArray(coords)) return null;\n\n let depth = Util.depthof(coords);\n if (depth == 2) coords = [ [ [ coords ] ] ];\n else if (depth == 3) coords = [ [ coords ] ];\n else if (depth == 4) coords = [ coords ];\n\n let nFloats = polyPackSize(coords);\n let i: number, j: number, k: number;\n let p: any, r: any;\n\n // Allocate typed buffer if not passed in\n if (prepack === undefined)\n {\n let ab = new ArrayBuffer(nFloats * 8);\n prepack = { offset: 0, length: nFloats, buffer: new Float64Array(ab) };\n }\n else\n {\n prepack = Util.shallowCopy(prepack);\n prepack.length = nFloats;\n }\n\n let af: Float64Array = prepack.buffer as Float64Array;\n\n // Fill in header\n let z: number = prepack.offset;\n af[z++] = coords.length;\n z++; // spot for header size\n for (i = 0; i < coords.length; i++)\n {\n p = coords[i];\n af[z++] = p.length;\n for (j = 0; j < p.length; j++)\n af[z++] = p[j].length;\n }\n\n // set header size back in header\n af[prepack.offset+1] = z - prepack.offset;\n\n // Fill in coords\n for (i = 0; i < coords.length; i++)\n {\n p = coords[i];\n for (j = 0; j < p.length; j++)\n {\n r = p[j];\n for (k = 0; k < r.length; k++)\n {\n af[z++] = r[k][0];\n af[z++] = r[k][1];\n }\n }\n }\n\n return prepack;\n}\n\nexport function polyPackCopy(coords: any): PolyPack\n{\n let pp = polyPack(coords);\n\n if (pp == null) return null;\n\n let copy: PolyPack = { offset: 0, length: pp.length, buffer: null };\n let ab = new ArrayBuffer(pp.length * 8);\n let afDst = new Float64Array(ab);\n copy.buffer = afDst;\n let afSrc = pp.buffer as Float64Array;\n for (let i = 0; i < pp.length; i++)\n afDst[i] = afSrc[i+pp.offset];\n return copy;\n}\n\nexport function polyUnpack(prepack: any): any\n{\n // Check if not packed\n if (prepack == null) return [];\n if (prepack.offset === undefined) return prepack;\n\n let i: number, j: number, k: number;\n let nPolys: number, nRings: number, nCoords: number;\n let p: any, r: any;\n let af: Float64Array = prepack.buffer as Float64Array;\n let coords: any = [];\n let h: number = prepack.offset as number;\n nPolys = af[h++];\n let z = af[h++] + prepack.offset; // start of coordinates\n for (i = 0; i < nPolys; i++)\n {\n p = [];\n coords[i] = p;\n nRings = af[h++];\n for (j = 0; j < nRings; j++)\n {\n r = [];\n p[j] = r;\n nCoords = af[h++];\n for (k = 0; k < nCoords; k++)\n r[k] = [ af[z++], af[z++] ];\n }\n }\n\n return coords.length > 1 ? coords : coords[0];\n}\n\nexport function featurePackSize(f: any): number\n{\n if (f && f.geometry && f.geometry.coordinates && f.geometry.type !== 'Point')\n return polyPackSize(f.geometry.coordinates);\n return 0;\n}\n\nexport function featurePack(f: any, prepack?: PolyPack): any\n{\n if (f && f.type === 'Feature')\n {\n if (f.geometry && f.geometry.type === 'Point')\n return prepack ? { offset: prepack.offset, length: 0, buffer: prepack.buffer } : { offset: 0, length: 0, buffer: null };\n else if (f.geometry && f.geometry.coordinates)\n {\n f.geometry.packed = polyPack(f.geometry.coordinates, prepack);\n delete f.geometry.coordinates;\n }\n else if (f.geometry === undefined)\n {\n f.geometry = {}\n f.geometry.packed = prepack ? { offset: prepack.offset, length: 0, buffer: prepack.buffer } : { offset: 0, length: 0, buffer: null };\n }\n return f.geometry.packed;\n }\n else if (f && f.type === 'FeatureCollection' && f.features)\n {\n // Empty?\n if (f.features.length == 0) return f;\n\n // Already packed or packed incorrectly?\n let ff: any = f.features[0];\n if (ff && ff.geometry && ff.geometry.packed)\n {\n // Already packed\n if (ArrayBuffer.isView(ff.geometry.packed.buffer))\n return f;\n // Improperly packed (buffer converted to object - convert back to buffer\n let o: any = ff.geometry.packed.buffer;\n let b = new Float64Array(Util.countKeys(o));\n for (const i in o) b[Number(i)] = o[i];\n f.features.forEach((ff: any) => ff.geometry.packed.buffer = b);\n return f;\n }\n\n // Allocate one large buffer\n let nFloats: number = 0;\n let i: number;\n for (i = 0; i < f.features.length; i++)\n nFloats += featurePackSize(f.features[i]);\n let ab = new ArrayBuffer(nFloats * 8);\n prepack = { offset: 0, length: nFloats, buffer: new Float64Array(ab) };\n\n // Now pack\n for (i = 0; i < f.features.length; i++)\n {\n let postpack = featurePack(f.features[i], prepack);\n prepack.offset += postpack ? postpack.length : 0;\n }\n if (prepack.offset != nFloats)\n throw 'oops, packing bug';\n return prepack;\n }\n return null;\n}\n\nexport function featureUnpack(f: any): any\n{\n if (f && f.geometry && f.geometry.packed !== undefined)\n {\n f.geometry.coordinates = polyUnpack(f.geometry.packed);\n let depth = Util.depthof(f.geometry.coordinates);\n // Check for oops, optimized away the multipolygon in polyUnpack\n if (f.geometry.type === 'MultiPolygon' && depth === 4)\n f.geometry.coordinates = [ f.geometry.coordinates ];\n else if (f.geometry.type === 'Point' && depth != 2)\n {\n while (depth > 2)\n {\n f.geometry.coordinates = f.geometry.coordinates[0];\n depth = Util.depthof(f.geometry.coordinates);\n }\n }\n delete f.geometry.packed;\n }\n else if (f.type && f.type === 'FeatureCollection' && f.features)\n {\n for (let i: number = 0; i < f.features.length; i++)\n featureUnpack(f.features[i]);\n }\n return f;\n}\n\nexport type SavePack = WeakMap<any,any>;\n\nexport function featureUnpackTemporarily(f: any, save?: SavePack): SavePack\n{\n if (save === undefined) save = new WeakMap<any,any>();\n\n if (f && f.type === 'Feature')\n {\n if (f.geometry && f.geometry.packed)\n {\n save.set(f, f.geometry.packed);\n featureUnpack(f);\n }\n }\n else if (f.type && f.type === 'FeatureCollection' && f.features)\n {\n f.features.forEach((ff: any) => {\n if (ff.geometry && ff.geometry.packed)\n save.set(ff, ff.geometry.packed);\n });\n featureUnpack(f);\n }\n return save;\n}\n\nexport function featureRepack(f: any, save: SavePack): any\n{\n if (f && f.type === 'Feature')\n {\n if (f.geometry)\n {\n let packed = save.get(f);\n if (packed)\n {\n f.geometry.packed = packed;\n delete f.geometry.coordinates;\n }\n }\n }\n else if (f.type && f.type === 'FeatureCollection' && f.features)\n {\n f.features.forEach((ff: any) => featureRepack(ff, save));\n }\n return f;\n}\n\nexport function featurePackString(f: any): string\n{\n let packed = f.offset ? f : (f.geometry.packed ? f.geometry.packed : polyPack(f.geometry.coordinates));\n let af = packed.buffer as Float64Array;\n let a: string[] = [];\n for (let i: number = 0; i < packed.length; i++)\n a.push(String(af[i]));\n return a.join(' ');\n}\n\nexport function featureUnpackString(s: string): any\n{\n let a = s.split(' ');\n let ab = new ArrayBuffer(a.length * 8);\n let af = new Float64Array(ab);\n let i: number = 0;\n a.forEach((n: string) => { af[i++] = Number(n) });\n let f: any = { type: 'Feature', geometry: {type: 'Polygon', packed: { offset: 0, length: a.length, buffer: af } } };\n f = featureUnpack(f);\n if (Util.depthof(f.geometry.coordinates) === 5)\n f.geometry.type = 'MultiPolygon';\n return f;\n}\n","import * as Util from '../util/all';\nimport * as PP from './polypack';\n\n// Round feature geometry to 6 decimal precision\nexport function polyRound(o: any): any\n{\n if (o)\n {\n if (Array.isArray(o))\n {\n if (o.length && typeof o[0] === 'number')\n {\n for (let i = 0; i < o.length; i++)\n o[i] = Util.precisionRound(o[i], 6);\n }\n else\n o.forEach((e: any) => { polyRound(e) });\n }\n else if (o.features !== undefined && Array.isArray(o.features))\n o.features.forEach((f: any) => { polyRound(f) });\n else if (o.geometry !== undefined && o.geometry.coordinates !== undefined)\n polyRound(o.geometry.coordinates);\n else if (o.geometry !== undefined && o.geometry.packed !== undefined)\n PP.polyPackEachPoint(o.geometry.packed, (b: Float64Array, iPoly: number, iRing: number, iOffset: number) => {\n b[iOffset] = Util.precisionRound(b[iOffset], 6);\n b[iOffset+1] = Util.precisionRound(b[iOffset+1], 6);\n });\n }\n return o;\n}\n","import * as Util from '../util/all';\n\nimport { simplify } from './simplify';\n\nexport function polySimplify(poly: any, tolerance: number = 0.0001): void\n{\n if (poly == null) return;\n if (poly.geometry && poly.geometry.coordinates) poly = poly.geometry.coordinates;\n let depth = Util.depthof(poly);\n if (depth == 4)\n poly = [ poly ];\n else if (depth != 5)\n return;\n\n // Poly is multi-polygon, array of polygons\n for (let i: number = 0; i < poly.length; i++)\n {\n // p is polygon, array of rings, each ring is array of points which is what gets fed to underlying simplify routine.\n let p = poly[i];\n\n for (let j: number = 0; j < p.length; j++)\n p[j] = simplify(p[j], tolerance, true);\n }\n}\n","// Public libraries\nimport * as PC from 'polygon-clipping';\n\n// Shared libraries\nimport * as Util from '../util/all';\nimport * as FSM from '../fsm/all';\n\n// Local libraries\nimport * as Poly from './poly';\nimport * as PP from './polypack';\nimport * as BB from './boundbox';\nimport * as PR from './polyround';\nimport { polyContainsPoint } from './pointinpoly';\n\nlet _union: any = undefined;\nlet anyPC: any = PC;\nif (anyPC.union) _union = anyPC.union;\nif (anyPC.default && anyPC.default.union) _union = anyPC.default.union;\nif (_union === undefined) throw 'Unable to load union function from polygon-clipping';\n\nexport interface WrappedPoly { f: any, box: BB.BoundBox, p: any };\n\nexport interface WorkDone\n{\n nUnion: number,\n nDifference: number,\n ms: number,\n}\n\nfunction featureCoords(feature: any): any\n{\n if (feature.geometry !== undefined)\n {\n if (feature.geometry.packed !== undefined)\n return feature.geometry.packed;\n else\n return feature.geometry.coordinates;\n }\n else\n return feature;\n}\n\n// This function takes an array of packed or unpacked polygon/multipolygons and\n// returns an unpacked polygon/multipolygon coordinate array. Returns null if\n// handed an empty array.\n\nexport function unionPolys(polys: any[]): any\n{\n if (polys == null) return null;\n\n let cleanPolys: any[] = polys.filter((f: any) => f != null);\n if (cleanPolys.length == 0) return null;\n if (cleanPolys.length == 1) return PP.polyUnpack(cleanPolys[0]);\n cleanPolys = cleanPolys.map( (f: any) => PP.polyUnpack(f) );\n\n let poly: any = cleanPolys.pop();\n return PR.polyRound(_union(poly, ...cleanPolys));\n}\n\nexport interface QuadOptions\n{\n maxLeafCount?: number;\n maxDepth?: number;\n tickStep?: number;\n}\nexport const DefaultQuadOptions: QuadOptions = { maxLeafCount: 20, maxDepth: 20, tickStep: 1 };\n\nexport interface TickCounter { ticks: number };\n\n// Use geo orientation for t/b (that is, t > b)\nclass QuadLevel\n{\n options: QuadOptions;\n level: number;\n children: QuadLevel[];\n features: WrappedPoly[];\n box: BB.BoundBox;\n asyncUnion: any;\n\n constructor(options: QuadOptions, level: number, box: BB.BoundBox, features: WrappedPoly[])\n {\n this.options = options;\n this.level = level;\n this.box = box;\n if (features.length <= options.maxLeafCount || this.level >= options.maxDepth)\n {\n if (this.level >= options.maxDepth)\n throw `QuadTree: maximum depth of ${options.maxDepth} exceeded`;\n this.features = features;\n this.children = null;\n }\n else\n {\n this.features = null;\n let cx = BB.boundboxCX(box);\n let cy = BB.boundboxCY(box);\n\n let tl: BB.BoundBox = { left: box.left, top: box.top, right: cx, bottom: cy };\n let tr: BB.BoundBox = { left: cx, top: box.top, right: box.right, bottom: cy };\n let bl: BB.BoundBox = { left: box.left, top: cy, right: cx, bottom: box.bottom };\n let br: BB.BoundBox = { left: cx, top: cy, right: box.right, bottom: box.bottom };\n let tlFeatures = [];\n let trFeatures = [];\n let blFeatures = [];\n let brFeatures = [];\n\n for (let i: number = 0; i < features.length; i++)\n {\n let f = features[i];\n\n if (this.featureInBox(tl, f))\n tlFeatures.push(f);\n else if (this.featureInBox(tr, f))\n trFeatures.push(f);\n else if (this.featureInBox(bl, f))\n blFeatures.push(f);\n else if (this.featureInBox(br, f))\n brFeatures.push(f);\n }\n this.children = [];\n this.children.push(new QuadLevel(options, level+1, tl, tlFeatures));\n this.children.push(new QuadLevel(options, level+1, tr, trFeatures));\n this.children.push(new QuadLevel(options, level+1, bl, blFeatures));\n this.children.push(new QuadLevel(options, level+1, br, brFeatures));\n this.asyncUnion = null;\n }\n }\n\n private featureInBox(box: BB.BoundBox, f: WrappedPoly): boolean\n {\n return BB.boundboxIntersects(box, f.box);\n }\n\n featureUnderCoord(coord: [ number, number ]): any\n {\n if (! BB.boundboxContains(this.box, coord[0], coord[1]))\n return null;\n if (this.features)\n {\n let wp = this.features.find(wp => polyContainsPoint(wp.p, coord[0], coord[1]));\n return wp ? wp.f : null;\n }\n else\n {\n for (let i = 0; i < this.children.length; i++)\n {\n let f = this.children[i].featureUnderCoord(coord);\n if (f)\n return f;\n }\n return null;\n }\n }\n\n union(): any\n {\n if (this.asyncUnion == null)\n {\n if (this.children == null)\n this.asyncUnion = unionPolys(this.features.map(f => f.p));\n else\n this.asyncUnion = unionPolys(this.children.map((q: QuadLevel) => q.union()));\n }\n return this.asyncUnion;\n }\n\n get isempty(): boolean\n {\n return this.children == null && this.features.length == 0;\n }\n\n tickUnion(tickCounter: TickCounter): void\n {\n if (!this.isempty && this.asyncUnion == null)\n {\n if (this.children == null)\n {\n if (tickCounter.ticks != 0)\n {\n this.union();\n tickCounter.ticks--;\n }\n }\n else\n {\n for (let i: number = 0; i < this.children.length && tickCounter.ticks != 0; i++)\n this.children[i].tickUnion(tickCounter);\n\n // If tickCounter hasn't gone to zero, we fully computed children, go ahead and compute union here.\n if (tickCounter.ticks != 0)\n {\n this.union();\n tickCounter.ticks--;\n }\n }\n }\n }\n}\n\nexport class FsmQuadTree extends FSM.Fsm\n{\n quad: QuadLevel;\n asyncUnion: any;\n isempty: boolean;\n options: Poly.TickOptions;\n work: WorkDone;\n\n constructor(env: FSM.FsmEnvironment, options?: Poly.TickOptions, col?: any)\n {\n super(env);\n this.options = Util.shallowAssignImmutable(Poly.DefaultTickOptions, options);\n this.work = { nUnion: 0, nDifference: 0, ms: 0 };\n this.initialize(col);\n }\n\n initialize(col: any): void\n {\n this.quad = null;\n this.asyncUnion = undefined;\n this.isempty = true;\n\n if (col != null)\n {\n let features: any = col.features ? col.features : col;\n this.work.nUnion = features.length;\n this.isempty = features.length == 0;\n\n // Compute BoundBox for each feature\n let wrapped: WrappedPoly[] = features.map((f: any) => { return { f: f, box: BB.boundbox(f), p: featureCoords(f) } });\n\n let box = BB.boundbox(col);\n this.quad = new QuadLevel(this.options, 0, box, wrapped);\n }\n\n this.setState(this.isempty ? FSM.FSM_DONE : FSM.FSM_STARTING);\n }\n\n cancel(): any\n {\n this.quad = null;\n this.asyncUnion = undefined;\n this.isempty = true;\n this.setState(FSM.FSM_DONE);\n }\n\n get result(): any\n {\n if (this.asyncUnion === undefined && this.quad)\n this.asyncUnion = this.quad.union();\n return this.asyncUnion;\n }\n\n tick(): void\n {\n if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n this.setState(FSM.FSM_PENDING);\n break;\n\n case FSM.FSM_PENDING:\n let tickCounter: TickCounter = { ticks: this.options.tickStep }\n let elapsed = new Util.Elapsed();\n if (!this.isempty && this.asyncUnion === undefined)\n {\n this.quad.tickUnion(tickCounter);\n if (tickCounter.ticks != 0)\n this.result;\n }\n this.work.ms += elapsed.ms();\n if (this.asyncUnion !== undefined)\n this.setState(FSM.FSM_DONE);\n else\n this.setState(FSM.FSM_PENDING);\n break;\n }\n }\n }\n}\n","import * as Util from '../util/all';\n\nimport * as P from './poly';\nimport * as PP from './polypack';\n\n// Given three colinear points p, q, r, the function checks if\n// point q lies on line segment 'pr'\nfunction onSegment(px: number, py: number, qx: number, qy: number, rx: number, ry: number): boolean\n{\n if (qx <= Math.max(px, rx) && qx >= Math.min(px, rx) &&\n qy <= Math.max(py, ry) && qy >= Math.min(py, ry))\n return true;\n\n return false;\n}\n\n// To find orientation of ordered triplet (p, q, r).\n// The function returns following values\n// 0 --> p, q and r are colinear\n// 1 --> Clockwise\n// 2 --> Counterclockwise\nfunction orientation(px: number, py: number, qx: number, qy: number, rx: number, ry: number): number\n{\n // See https://www.geeksforgeeks.org/orientation-3-ordered-points/\n // for details of below formula.\n let val: number = (qy - py) * (rx - qx) -\n (qx - px) * (ry - qy);\n\n if (val == 0) return 0; // colinear\n\n return (val > 0)? 1: 2; // clock or counterclock wise\n}\n\n// The main function that returns true if line segment 'p1q1'\n// and 'p2q2' intersect.\nfunction doIntersect(p1x: number, p1y: number, q1x: number, q1y: number, p2x: number, p2y: number, q2x: number, q2y: number): boolean\n{\n // closing segment is not intersection\n if (p1x - q2x + p1y - q2y === 0) return false;\n\n // Find the four orientations needed for general and\n // special cases\n let o1 = orientation(p1x, p1y, q1x, q1y, p2x, p2y);\n let o2 = orientation(p1x, p1y, q1x, q1y, q2x, q2y);\n let o3 = orientation(p2x, p2y, q2x, q2y, p1x, p1y);\n let o4 = orientation(p2x, p2y, q2x, q2y, q1x, q1y);\n\n // General case\n if (o1 != o2 && o3 != o4)\n return true;\n\n // Special Cases\n // p1, q1 and p2 are colinear and p2 lies on segment p1q1\n if (o1 == 0 && onSegment(p1x, p1y, p2x, p2y, q1x, q1y)) return true;\n\n // p1, q1 and q2 are colinear and q2 lies on segment p1q1\n if (o2 == 0 && onSegment(p1x, p1y, q2x, q2y, q1x, q1y)) return true;\n\n // p2, q2 and p1 are colinear and p1 lies on segment p2q2\n if (o3 == 0 && onSegment(p2x, p2y, p1x, p1y, q2x, q2y)) return true;\n\n // p2, q2 and q1 are colinear and q1 lies on segment p2q2\n if (o4 == 0 && onSegment(p2x, p2y, q1x, q1y, q2x, q2y)) return true;\n\n return false; // Doesn't fall in any of the above cases\n}\n\n// no extra storage, but brute-force O(N^2) in number of segments. See selfIntersectFast for better approach.\nexport function selfIntersect(poly: any): boolean\n{\n let pp = P.polyNormalize(poly);\n if (pp == null) return false;\n let bIntersect = false;\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n if (bIntersect) return;\n let iEnd = iOffset + ((nPoints-2) * 2);\n let jEnd = iOffset + ((nPoints-1) * 2);\n for (let i = iOffset; i < iEnd; i += 2)\n for (let j = i + 4; j < jEnd; j += 2)\n if (doIntersect(b[i], b[i+1], b[i+2], b[i+3], b[j], b[j+1], b[j+2], b[j+3]))\n {\n bIntersect = true;\n return;\n }\n });\n return bIntersect;\n}\n","import * as Util from '../util/all';\n\nimport * as P from './poly';\nimport * as PP from './polypack';\n\n// Adapted from rowanwins/shamos-hoey \n/*\nMIT License\n\nCopyright (c) 2019 Rowan Winsemius\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n\n// External libraries\nimport TinyQueue from 'tinyqueue'\nimport SplayTree from 'splaytree'\n\nclass Event\n{\n x: number;\n y: number;\n otherEvent: Event;\n isLeftEndpoint: boolean | null;\n segment: Segment;\n\n constructor(x: number, y: number)\n {\n this.x = x\n this.y = y\n\n this.otherEvent = null\n this.isLeftEndpoint = null\n this.segment = null\n }\n\n isOtherEndOfSegment(eventToCheck: Event): boolean\n {\n return this === eventToCheck.otherEvent\n }\n\n isSamePoint(eventToCheck: Event): boolean\n {\n return this.x === eventToCheck.x && this.y === eventToCheck.y\n }\n\n isBelow(p: Event): boolean\n {\n return this.isLeftEndpoint ?\n signedArea(this, this.otherEvent, p) > 0 :\n signedArea(this.otherEvent, p, this) > 0\n }\n\n isAbove(p: Event): boolean\n {\n return !this.isBelow(p)\n }\n}\n\nclass EventQueue\n{\n tiny: TinyQueue<Event>;\n\n constructor()\n {\n this.tiny = new TinyQueue<Event>([], checkWhichEventIsLeft)\n }\n\n push(event: Event): void { this.tiny.push(event) }\n pop(): Event { return this.tiny.pop() as Event }\n get length(): number { return this.tiny.length }\n}\n\nclass Segment\n{\n leftSweepEvent: Event;\n rightSweepEvent: Event;\n segmentAbove: Segment;\n segmentBelow: Segment;\n\n constructor(event: Event)\n {\n this.leftSweepEvent = event\n this.rightSweepEvent = event.otherEvent\n this.segmentAbove = null\n this.segmentBelow = null\n\n event.segment = this\n event.otherEvent.segment = this\n }\n}\n\nclass SweepLine\n{\n tree: SplayTree<Segment>;\n\n constructor()\n {\n this.tree = new SplayTree<Segment>(compareSegments)\n }\n\n addSegment(event: Event): Segment\n {\n const seg = new Segment(event)\n const node: any = this.tree.insert(seg)\n const nextNode: any = this.tree.next(node)\n const prevNode: any = this.tree.prev(node)\n if (nextNode !== null)\n {\n seg.segmentAbove = nextNode.key\n seg.segmentAbove.segmentBelow = seg\n }\n if (prevNode !== null)\n {\n seg.segmentBelow = prevNode.key\n seg.segmentBelow.segmentAbove = seg\n }\n return node.key\n }\n\n findSegment(seg: Segment): Segment\n {\n const node: any = this.tree.find(seg)\n if (node === null) return null\n return node.key\n }\n\n removeSegmentFromSweepline(seg: Segment): void\n {\n const node: any = this.tree.find(seg)\n if (node === null) return\n const nextNode: any = this.tree.next(node)\n const prevNode: any = this.tree.prev(node)\n\n if (nextNode !== null)\n {\n const nextSeg = nextNode.key\n nextSeg.segmentBelow = seg.segmentBelow\n }\n if (prevNode !== null)\n {\n const prevSeg = prevNode.key\n prevSeg.segmentAbove = seg.segmentAbove\n }\n this.tree.remove(seg)\n }\n\n testIntersect(seg1: Segment, seg2: Segment): boolean\n {\n if (seg1 === null || seg2 === null) return false\n\n if (seg1.rightSweepEvent.isSamePoint(seg2.leftSweepEvent) ||\n seg1.rightSweepEvent.isSamePoint(seg2.rightSweepEvent) ||\n seg1.leftSweepEvent.isSamePoint(seg2.leftSweepEvent) ||\n seg1.leftSweepEvent.isSamePoint(seg2.rightSweepEvent)) return false\n\n const x1 = seg1.leftSweepEvent.x\n const y1 = seg1.leftSweepEvent.y\n const x2 = seg1.rightSweepEvent.x\n const y2 = seg1.rightSweepEvent.y\n const x3 = seg2.leftSweepEvent.x\n const y3 = seg2.leftSweepEvent.y\n const x4 = seg2.rightSweepEvent.x\n const y4 = seg2.rightSweepEvent.y\n\n const denom = ((y4 - y3) * (x2 - x1)) - ((x4 - x3) * (y2 - y1))\n const numeA = ((x4 - x3) * (y1 - y3)) - ((y4 - y3) * (x1 - x3))\n const numeB = ((x2 - x1) * (y1 - y3)) - ((y2 - y1) * (x1 - x3))\n\n if (denom === 0)\n {\n if (numeA === 0 && numeB === 0) return false\n return false\n }\n\n const uA = numeA / denom\n const uB = numeB / denom\n\n return (uA >= 0 && uA <= 1 && uB >= 0 && uB <= 1)\n }\n}\n\nfunction checkWhichEventIsLeft(e1: Event, e2: Event): number\n{\n if (e1.x > e2.x) return 1\n if (e1.x < e2.x) return -1\n\n if (e1.y !== e2.y) return e1.y > e2.y ? 1 : -1\n return 1\n}\n\nfunction compareSegments(seg1: Segment, seg2: Segment): number\n{\n if (seg1 === seg2) return 0\n\n if (signedArea(seg1.leftSweepEvent, seg1.rightSweepEvent, seg2.leftSweepEvent) !== 0 ||\n signedArea(seg1.leftSweepEvent, seg1.rightSweepEvent, seg2.rightSweepEvent) !== 0)\n {\n // If the segments share their left endpoints\n // use the right endpoint to sort\n if (seg1.leftSweepEvent.isSamePoint(seg2.leftSweepEvent)) return seg1.leftSweepEvent.isBelow(seg2.rightSweepEvent) ? -1 : 1\n\n // If the segments have different left endpoints\n // use the left endpoint to sort\n if (seg1.leftSweepEvent.x === seg2.leftSweepEvent.x) return seg1.leftSweepEvent.y < seg2.leftSweepEvent.y ? -1 : 1\n\n // If the line segment associated to e1 been inserted\n // into S after the line segment associated to e2 ?\n if (checkWhichEventIsLeft(seg1.leftSweepEvent, seg2.leftSweepEvent) === 1) return seg2.leftSweepEvent.isAbove(seg1.leftSweepEvent) ? -1 : 1\n\n // The line segment associated to e2 has been inserted\n // into S after the line segment associated to e1\n return seg1.leftSweepEvent.isBelow(seg2.leftSweepEvent) ? -1 : 1\n }\n\n return checkWhichEventIsLeft(seg1.leftSweepEvent, seg2.leftSweepEvent) === 1 ? 1 : -1\n}\n\nfunction runCheck(eventQueue: EventQueue): boolean\n{\n const sweepLine = new SweepLine()\n let currentSegment = null\n while (eventQueue.length)\n {\n const event = eventQueue.pop()\n\n if (event.isLeftEndpoint)\n {\n currentSegment = sweepLine.addSegment(event)\n if (sweepLine.testIntersect(currentSegment, currentSegment.segmentAbove)) return true\n if (sweepLine.testIntersect(currentSegment, currentSegment.segmentBelow)) return true\n }\n else\n {\n if (!event.segment) continue\n if (sweepLine.testIntersect(event.segment.segmentAbove, event.segment.segmentBelow)) return true\n sweepLine.removeSegmentFromSweepline(event.segment)\n }\n }\n return false\n}\n\nfunction signedArea(p0: any, p1: any, p2: any): number\n{\n return (p0.x - p2.x) * (p1.y - p2.y) - (p1.x - p2.x) * (p0.y - p2.y)\n}\n\nexport function selfIntersectFast(poly: any): boolean\n{\n let pp = P.polyNormalize(poly);\n if (pp == null) return false;\n\n // Fill queue\n let eventQueue = new EventQueue();\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n let iEnd = iOffset + (nPoints - 1) * 2; // iterating over segments so right before last point\n for (; iOffset < iEnd; iOffset += 2)\n {\n const e1 = new Event(b[iOffset], b[iOffset+1]);\n const e2 = new Event(b[iOffset+2], b[iOffset+3]);\n\n e1.otherEvent = e2\n e2.otherEvent = e1\n\n if (checkWhichEventIsLeft(e1, e2) > 0)\n {\n e2.isLeftEndpoint = true\n e1.isLeftEndpoint = false\n }\n else\n {\n e1.isLeftEndpoint = true\n e2.isLeftEndpoint = false\n }\n eventQueue.push(e1)\n eventQueue.push(e2)\n }\n });\n\n return runCheck(eventQueue)\n}\n","/*\n Adapted from:\n (c) 2017, Vladimir Agafonkin\n Simplify.js, a high-performance JS polyline simplification library\n mourner.github.io/simplify-js\n*/\n\nexport type Point = [ number, number];\n\n// square distance between 2 points\nfunction getSqDist(p1: Point, p2: Point): number\n{\n var dx = p1[0] - p2[0],\n dy = p1[1] - p2[1];\n\n return dx * dx + dy * dy;\n}\n\n// square distance from a point to a segment\nfunction getSqSegDist(p: Point, p1: Point, p2: Point): number\n{\n var x = p1[0],\n y = p1[1],\n dx = p2[0] - x,\n dy = p2[1] - y;\n\n if (dx !== 0 || dy !== 0) {\n\n var t = ((p[0] - x) * dx + (p[1] - y) * dy) / (dx * dx + dy * dy);\n\n if (t > 1) {\n x = p2[0];\n y = p2[1];\n\n } else if (t > 0) {\n x += dx * t;\n y += dy * t;\n }\n }\n\n dx = p[0] - x;\n dy = p[1] - y;\n\n return dx * dx + dy * dy;\n}\n\n\n// rest of the code doesn't care about point format\n\n// basic distance-based simplification\nfunction simplifyRadialDist(points: Point[], sqTolerance: number): Point[]\n{\n let prevPoint: Point = points[0],\n newPoints: Point[] = [prevPoint],\n point: Point;\n\n for (let i = 1, len = points.length; i < len; i++) {\n point = points[i];\n\n if (getSqDist(point, prevPoint) > sqTolerance) {\n newPoints.push(point);\n prevPoint = point;\n }\n }\n\n if (prevPoint !== point) newPoints.push(point);\n\n return newPoints;\n}\n\nfunction simplifyDPStep(points: Point[], first: number, last: number, sqTolerance: number, simplified: Point[]): void\n{\n let maxSqDist: number = sqTolerance,\n index: number;\n\n for (let i = first + 1; i < last; i++)\n {\n let sqDist = getSqSegDist(points[i], points[first], points[last]);\n\n if (sqDist > maxSqDist)\n {\n index = i;\n maxSqDist = sqDist;\n }\n }\n\n if (maxSqDist > sqTolerance)\n {\n if (index - first > 1) simplifyDPStep(points, first, index, sqTolerance, simplified);\n simplified.push(points[index]);\n if (last - index > 1) simplifyDPStep(points, index, last, sqTolerance, simplified);\n }\n}\n\n// simplification using Ramer-Douglas-Peucker algorithm\nfunction simplifyDouglasPeucker(points: Point[], sqTolerance: number): Point[]\n{\n let last: number = points.length - 1;\n\n let simplified: Point[] = [points[0]];\n simplifyDPStep(points, 0, last, sqTolerance, simplified);\n simplified.push(points[last]);\n\n return simplified;\n}\n\n// both algorithms combined for awesome performance\nexport function simplify(points: Point[], tolerance: number = 1, highestQuality: boolean = false): Point[]\n{\n if (tolerance == 0 || points.length <= 2)\n return points;\n\n let sqTolerance: number = tolerance * tolerance;\n\n points = highestQuality ? points : simplifyRadialDist(points, sqTolerance);\n points = simplifyDouglasPeucker(points, sqTolerance);\n\n return points;\n}\n","\n// Forked version that supports packing\nimport * as TopoClient from '@dra2020/topojson-client';\n// Forked version that fixes self-looping hole problem\nimport * as TopoServer from '@dra2020/topojson-server';\n// Forked version that fixes performance problem\nimport * as TopoSimplify from '@dra2020/topojson-simplify';\n\nimport * as Util from '../util/all';\nimport * as FSM from '../fsm/all';\nimport * as G from '../geo/all';\n\nimport * as P from './poly';\nimport * as Q from './quad';\nimport * as PP from './polypack';\nimport * as PL from './polylabel';\nimport { selfIntersectFast } from './shamos';\nimport { polyContainsPoint } from './pointinpoly';\n\nexport type Topo = any;\n\nfunction getGEOID(f: any): string\n{\n if (f.features && f.features.length)\n f = f.features[0];\n else if (Array.isArray(f))\n f = f[0];\n else\n return '';\n if (f.properties.id !== undefined) return 'id';\n if (f.properties.GEOID !== undefined) return 'GEOID';\n if (f.properties.GEOID10 !== undefined) return 'GEOID10';\n return '';\n}\n\nexport function topoFromCollection(col: any): Topo\n{\n if (col == null) return null;\n let save = PP.featureUnpackTemporarily(col);\n let prop = getGEOID(col);\n let objects: any = {};\n col.features.forEach((f: any) => objects[f.properties[prop]] = f);\n let topo: any;\n if (Util.isEmpty(objects))\n topo = { objects: objects }\n else\n topo = TopoServer.topology(objects);\n PP.featureRepack(col, save);\n if (col.datasets)\n topo.datasets = col.datasets;\n return topo;\n}\n\nfunction ringsCancel(outerPoly: any, innerRing: any): boolean\n{\n if (outerPoly.length != 1) return false;\n let outerRing = outerPoly[0];\n if (outerRing.length !== innerRing.length) return false;\n let n = outerRing.length-1;\n let i = 0;\n for (; i <= n; i++, n--)\n if (! Util.shallowEqual(outerRing[i], innerRing[n]))\n return false;\n return true;\n}\n\nfunction correctGeometry(f: any): any\n{\n return P.featureRewind(f, { validateHoles: false } );\n}\n\nexport function topoContiguity(topo: Topo): any\n{\n let objects: any[] = Object.values(topo.objects);\n let geoid = getGEOID(objects);\n objects.forEach((o: any) => { o.properties.id = o.properties[geoid] });\n let neighbors = TopoClient.neighbors(topo, objects, true);\n let result: any = {};\n result['OUT_OF_STATE'] = [];\n objects.forEach((o: any, i: number) => {\n result[o.properties.id] = neighbors[i].map((j: any) => {\n if (j >= 0)\n return objects[j].properties.id;\n else\n {\n result['OUT_OF_STATE'].push(o.properties.id);\n return 'OUT_OF_STATE';\n }\n });\n });\n return result;\n}\n\nexport function topoToFeature(topo: Topo, geoid: string): any\n{\n return correctGeometry(TopoClient.feature(topo, topo.objects[geoid]));\n}\n\nexport type TopoSpliceEntry = { topology: Topo, filterout?: any };\n\nexport function topoSplice(topoarray: TopoSpliceEntry[]): Topo\n{\n if (topoarray) topoarray.forEach(e => topoPack(e.topology));\n return TopoClient.splice(topoarray);\n}\n\nexport function topoToCollection(topo: Topo): any\n{\n let col: any = { type: 'FeatureCollection', features: [] };\n if (topo)\n Object.keys(topo.objects).forEach((geoid: string) => {\n col.features.push(topoToFeature(topo, geoid));\n });\n if (topo && topo.datasets) col.datasets = topo.datasets;\n return col;\n}\n\nfunction keepArcs(topo: any, arcs: any, keepweight: number): void\n{\n arcs.forEach((a: any) => {\n if (Array.isArray(a))\n keepArcs(topo, a, keepweight);\n else\n {\n let arc = topo.arcs[a < 0 ? ~a : a];\n arc.forEach((pt: any) => {\n if (pt[2] >= keepweight)\n pt[2] = Infinity;\n });\n }\n });\n}\n\nfunction fullFidelity(topo: any, arcs: any): boolean\n{\n let bFull = true;\n\n arcs.forEach((a: any) => {\n if (Array.isArray(a))\n bFull = bFull && fullFidelity(topo, a);\n else\n {\n let arc = topo.arcs[a < 0 ? ~a : a];\n arc.forEach((pt: any) => {\n if (bFull && pt[2] !== Infinity)\n bFull = false;\n });\n }\n });\n return bFull;\n}\n\nfunction misMatchPoly(p1: any, p2: any): boolean\n{\n if (p1 == null || p2 == null || p1.length != p2.length) return true;\n for (let i = 0; i < p1.length; i++)\n if (p1[i] == null || p2[i] == null) return true;\n return false;\n}\n\nfunction misMatchMulti(m1: any, m2: any): boolean\n{\n if (m1 == null || m2 == null || m1.length != m2.length) return true;\n for (let i = 0; i < m1.length; i++)\n if (misMatchPoly(m1[i], m2[i])) return true;\n return false;\n}\n\nfunction misMatchObject(o1: any, o2: any): boolean\n{\n if (o1 == null || o2 == null || o1.type !== o2.type) return true;\n return (o1.type === 'MultiPolygon') ? misMatchMulti(o1.arcs, o2.arcs) : misMatchPoly(o1.arcs, o2.arcs);\n}\n\nconst MAX_TRIES = 30;\n\nfunction bigTimeString(ms: number): string\n{\n let seconds = Math.trunc(ms / 1000);\n let minutes = Math.trunc(seconds / 60);\n seconds -= minutes * 60;\n return `${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;\n}\n\nfunction intpt(f: any): { x: number, y: number }\n{\n let x = 0, y = 0;\n for (let p of ['INTPTLON20','INTPTLON10','INTPTLON','labelx'])\n if (f.properties[p] && !isNaN(Number(f.properties[p])))\n {\n x = Number(f.properties[p]);\n break;\n }\n for (let p of ['INTPTLAT20','INTPTLAT10','INTPTLAT','labely'])\n if (f.properties[p] && !isNaN(Number(f.properties[p])))\n {\n y = Number(f.properties[p]);\n break;\n }\n return {x: x, y: y};\n}\n\nexport interface SimplifyOptions\n{\n minArea?: number,\n log?: boolean,\n}\n\nconst DefaultSimplifyOptions: SimplifyOptions = { minArea: 500 };\n\nfunction log(emitlog: boolean, s: string): void\n{\n if (emitlog) console.log(s);\n}\n\n//\n// topoSimplifyCollection:\n// This implements our simplification strategy for block/precinct level shapes. The basic idea is to\n// ensure that all shapes generated at the block level have non-zero area and do not introduce self-crossing\n// edges. Since topological simplification happens at the edge level, self-crossing is a risk when opposite\n// edges make simplification decisions that cause the edges to cross. Crossing edges result in visual anomalies.\n// In addition, our basic strategy is that if we have well-formed block shapes, all other shape processing\n// (virtual features, precincts, counties, districts) can be done by fast merges that generate well-formed\n// shapes without holes, overlaps or crossing edges.\n// The strategy here is to first just do topological simplification at the default simplification level. We then\n// scan for problematic shapes (zero area, too thin and narrow or self-crossing) and keep additional points on\n// the edges (arcs) for those shapes, adding additional points on each iteration step until we have a good set.\n// For tiny shapes (zero area or short and thin) we just immediately say keep all points since these are mostly \n// shapes with a small number of points anyway.\n//\n\nexport function topoSimplifyCollection(col: any, options?: SimplifyOptions): any\n{\n options = Util.shallowAssignImmutable(DefaultSimplifyOptions, options);\n\n if (col == null) return null;\n let elapsedTotal = new Util.Elapsed();\n let elapsed = new Util.Elapsed();\n let topo = topoFromCollection(col);\n log(options.log, `topoSimplifyCollection: fromCollection: ${Math.round(elapsed.ms())}ms`);\n elapsed.start();\n topo = TopoSimplify.presimplify(topo, TopoSimplify['sphericalTriangleArea']);\n log(options.log, `topoSimplifyCollection: presimplify: ${Math.round(elapsed.ms())}ms`);\n elapsed.start();\n\n // Keep iterating on removing simplification from degenerate shapes\n let nTries = 1;\n let nBadLast = Number.MAX_VALUE;\n let keepweight = 1E-11;\n let nLabelTolerance = 1E-4;\n let minArea = options.minArea;\n let keepTiny = new WeakMap<any, any>();\n while (true)\n {\n let testtopo = TopoSimplify.simplify(topo, 1E-10);\n elapsed.start();\n let nBad = 0;\n let nTiny = 0;\n col.features.forEach((f: any) => {\n let oOld: any = topo.objects[f.properties.id];\n let oNew: any = testtopo.objects[f.properties.id];\n\n // Ignore points\n if (f.geometry && f.geometry.type === 'Point')\n keepTiny.set(f, f);\n\n if (! keepTiny.has(f))\n {\n // Walk through each polygon of a multipolygon separately since I may have a large non-degenerate\n // shape combined with degenerate smaller shapes that I want to identify. I do not examine holes\n // separately under the assumption that holes will have matching polygons that would be identified\n // and would cause those shared edges (between the hole and the filling polygon) to be preserved if necessary.\n //\n // I do make a final pass of testing for self-intersection that looks at both polygon and hole edges.\n //\n let arcs = PP.normalizeArcs(oNew.arcs);\n let npoly = PP.countArcPolygons(arcs);\n let bDecided = false;\n let iPoly = 0;\n for (; !bDecided && iPoly < npoly; iPoly++)\n {\n let pp = PP.polyPackTopoArcs(testtopo, arcs, iPoly);\n P.polyRewindRings(pp);\n let a = P.polyArea(pp);\n if (a <= 0)\n {\n keepTiny.set(f, f);\n keepArcs(topo, oOld.arcs, 0); // keeps all points to avoid reprocessing these tiny shapes\n nBad++, nTiny++, bDecided = true;\n }\n else if (a < minArea)\n {\n let d = PL.polyLabel(pp);\n if (d.d < nLabelTolerance)\n {\n keepTiny.set(f, f);\n keepArcs(topo, oOld.arcs, 0); // keeps all points to avoid reprocessing these tiny shapes\n nBad++, nTiny++, bDecided = true;\n }\n }\n }\n if (! bDecided)\n {\n let pp = PP.polyPackTopoArcs(testtopo, arcs);\n P.polyRewindRings(pp);\n if (selfIntersectFast(pp))\n {\n keepArcs(topo, oOld.arcs, keepweight);\n nBad++;\n }\n else\n {\n let {x,y} = intpt(f);\n let d = PL.polyDistance(pp, x, y);\n if (d < 0.00001) // d is negative if outside the polygon, so that qualifies here\n {\n keepTiny.set(f, f);\n keepArcs(topo, oOld.arcs, 0); // keeps all points to avoid reprocessing these tiny shapes\n nBad++, nTiny++;\n log(options.log, `topoSimplifyCollection: ${f.properties.id}: increasing feature fidelity because intpt dist is ${d}`);\n }\n }\n }\n }\n });\n log(options.log, `topoSimplifyCollection: pass ${nTries}: ${nBad} (${nTiny} tiny) of ${col.features.length} features are degenerate`);\n\n // If not making progress, keep more points\n if (nBad >= nBadLast)\n {\n keepweight /= 10;\n log(options.log, `topoSimplifyCollection: pass ${nTries}: reducing weight limit to ${keepweight}`);\n }\n nBadLast = nBad;\n\n if (nBad && nTries > MAX_TRIES)\n console.error(`topoSimplifyCollection: failed to finalize simplify down to zero degenerate features`);\n // If no bad block shapes, or finished trying, just return result\n if (nBad == 0 || nTries > MAX_TRIES)\n {\n col = topoToCollection(testtopo);\n break;\n }\n\n nTries++;\n }\n\n log(options.log, `topoSimplifyCollection: total elapsed time: ${bigTimeString(elapsedTotal.ms())}`);\n\n return col;\n}\n\nexport function topoMerge(topo: Topo, geoids: string[]): any\n{\n if (geoids == null || geoids.length == 0) return null;\n let objects: any[] = [];\n geoids.forEach((geoid) => objects.push(topo.objects[geoid]));\n return correctGeometry({ type: 'Feature', properties: {}, geometry: TopoClient.merge(topo, objects) });\n}\n\nexport function topoMergeFeatures(topo: Topo, features: any[]): any\n{\n if (features == null || features.length == 0) return null;\n let prop = getGEOID(features);\n return topoMerge(topo, features.map(f => f.properties[prop]));\n}\n\nlet UniqueState = FSM.FSM_CUSTOM1;\nlet FSM_COMPUTING = UniqueState++;\n\nclass FsmIncrementalUnion extends FSM.Fsm\n{\n options: P.TickOptions;\n key: number;\n multi: G.GeoMultiCollection;\n map: any; // { [geoid: string]: Feature }\n result: any;\n work: Q.WorkDone;\n\n constructor(env: FSM.FsmEnvironment, options: P.TickOptions, multi: G.GeoMultiCollection, key: number, map?: any)\n {\n super(env);\n this.options = options;\n this.multi = multi;\n this.key = key;\n this.result = null;\n this.map = null;\n if (map) this.recompute(map);\n }\n\n recompute(map: any): void\n {\n if (this.map != null && map != null && Util.shallowEqual(map, this.map))\n {\n this.work = { nUnion: 0, nDifference: 0, ms: 0 };\n }\n else if (map == null || Util.isEmpty(map))\n {\n this.work = { nUnion: 0, nDifference: 0, ms: 0 };\n this.result = null;\n this.map = map;\n }\n else\n {\n let values = Object.values(map);\n this.work = { nUnion: values.length, nDifference: 0, ms: 0 };\n let elapsed = new Util.Elapsed();\n this.result = topoMergeFeatures(this.multi.allTopo(), values);\n this.work.ms = elapsed.ms();\n this.map = map;\n }\n this.setState(FSM.FSM_DONE);\n }\n\n cancel(): void\n {\n this.result = null;\n this.map = null;\n this.setState(FSM.FSM_DONE);\n }\n\n tick(): void\n {\n if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n // never initialized to do work (see recompute())\n this.setState(FSM.FSM_DONE);\n break;\n }\n }\n }\n}\n\nexport interface TopoUnionResult\n{\n key: number;\n poly: any;\n work: Q.WorkDone;\n}\n\nexport class FsmTopoUnion extends FSM.Fsm\n{\n options: P.TickOptions;\n unions: { [index: number]: FsmIncrementalUnion };\n work: Q.WorkDone;\n\n constructor(env: FSM.FsmEnvironment, options?: P.TickOptions)\n {\n super(env);\n this.options = Util.shallowAssignImmutable(P.DefaultTickOptions, options);\n this.unions = {};\n this.work = { nUnion: 0, nDifference: 0, ms: 0 };\n }\n\n get result(): TopoUnionResult[]\n {\n if (Util.countKeys(this.unions) > 0 && this.state === FSM.FSM_DONE)\n return Object.values(this.unions).map((i: FsmIncrementalUnion) => ({ key: i.key, poly: i.result, work: i.work }) );\n else\n return null;\n }\n\n cancel(): void\n {\n Object.values(this.unions).forEach((i: FsmIncrementalUnion) => {\n i.cancel();\n });\n this.unions = {};\n this.setState(FSM.FSM_DONE);\n }\n\n cancelOne(key: number): void\n {\n let u = this.unions[key];\n if (u) u.cancel();\n }\n\n recompute(multi: G.GeoMultiCollection, key: number, map: any): void\n {\n let fsm = this.unions[key];\n if (fsm == null || fsm.multi !== multi)\n {\n fsm = new FsmIncrementalUnion(this.env, this.options, multi, key, map);\n this.unions[key] = fsm;\n }\n else\n fsm.recompute(map);\n this.work = { nUnion: 0, nDifference: 0, ms: 0 };\n this.waitOn(fsm);\n this.setState(FSM_COMPUTING);\n }\n\n tick(): void\n {\n if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n case FSM_COMPUTING:\n this.work = { nUnion: 0, nDifference: 0, ms: 0 };\n if (this.unions) Object.values(this.unions).forEach((i: FsmIncrementalUnion) => {\n this.work.ms += i.work.ms;\n this.work.nUnion += i.work.nUnion;\n this.work.nDifference += i.work.nDifference;\n });\n this.setState(FSM.FSM_DONE);\n break;\n }\n }\n }\n}\n\nexport function topoPacked(topo: any): boolean\n{\n return topo.packed !== undefined;\n}\n\nexport function topoPack(topo: any): any\n{\n let tc = TopoClient;\n TopoClient.packArcs(topo);\n TopoClient.packArcIndices(topo);\n return topo;\n}\n\nexport function topoUnpack(topo: any): any\n{\n TopoClient.unpackArcs(topo);\n TopoClient.unpackArcIndices(topo);\n return topo;\n}\n","import * as PC from 'polygon-clipping';\n\nimport * as Util from '../util/all';\nimport * as FSM from '../fsm/all';\n\nimport * as Poly from './poly';\nimport * as Q from './quad';\nimport * as PP from './polypack';\nimport * as PR from './polyround';\n\n// Confusion on how polygon-clipping exposes its interface - be flexible\nlet _union: any = undefined;\nlet _difference: any = undefined;\nlet _intersection: any = undefined;\nlet anyPC: any = PC;\nif (anyPC.union) _union = anyPC.union;\nelse if (anyPC.default && anyPC.default.union) _union = anyPC.default.union;\nif (_union === undefined) throw 'Unable to load union function from polygon-clipping';\nif (anyPC.difference) _difference = anyPC.difference;\nelse if (anyPC.default && anyPC.default.difference) _difference = anyPC.default.difference;\nif (_difference === undefined) throw 'Unable to load difference function from polygon-clipping';\nif (anyPC.intersection) _intersection = anyPC.intersection;\nelse if (anyPC.default && anyPC.default.intersection) _intersection = anyPC.default.intersection;\nif (_intersection === undefined) throw 'Unable to load intersection function from polygon-clipping';\n\nconst FSM_COMPUTING = FSM.FSM_CUSTOM1;\n\nfunction unpackCoords(buffer: Float64Array, offset: number, nPoints: number): any\n{\n let c: any[] = [];\n\n let end = offset + nPoints*2;\n for (; offset < end; offset += 2)\n c.push([buffer[offset], buffer[offset+1]]);\n return [ c ];\n}\n\nexport function polyIntersects(p1: any, p2: any): boolean\n{\n let pp1 = Poly.polyNormalize(p1);\n let pp2 = Poly.polyNormalize(p2);\n let bIntersects: boolean = false;\n\n PP.polyPackEachRing(pp1, (buffer1: Float64Array, iPoly1: number, iRing1: number, iOffset1: number, nPoints1: number) => {\n if (iRing1 == 0)\n {\n let c1 = unpackCoords(buffer1, iOffset1, nPoints1);\n PP.polyPackEachRing(pp2, (buffer2: Float64Array, iPoly2: number, iRing2: number, iOffset2: number, nPoints2: number) => {\n if (iRing2 == 0)\n {\n let c2 = unpackCoords(buffer2, iOffset2, nPoints2);\n try\n {\n let result = _intersection(c1, c2);\n if (result && result.length > 0)\n bIntersects = true; \n }\n catch (err)\n {\n // Ignore, treat badly formed as non-intersecting\n }\n }\n });\n }\n });\n return bIntersects;\n}\n\nexport function polyIntersectArea(p1: any, p2: any): number\n{\n let pp1 = Poly.polyNormalize(p1);\n let pp2 = Poly.polyNormalize(p2);\n let area: number = 0;\n\n PP.polyPackEachRing(pp1, (buffer1: Float64Array, iPoly1: number, iRing1: number, iOffset1: number, nPoints1: number) => {\n let c1 = unpackCoords(buffer1, iOffset1, nPoints1);\n PP.polyPackEachRing(pp2, (buffer2: Float64Array, iPoly2: number, iRing2: number, iOffset2: number, nPoints2: number) => {\n let c2 = unpackCoords(buffer2, iOffset2, nPoints2);\n try\n {\n let result = _intersection(c1, c2);\n if (result && result.length > 0)\n area += Poly.polyArea(result) * ((!iRing1 == !iRing2) ? 1 : -1);\n }\n catch (err)\n {\n }\n });\n });\n return area;\n}\n\nexport function polyDifference(main: any, parts: any[]): any\n{\n main = PP.polyUnpack(coords(main));\n\n // need to explode multipolygon so that \"exploded\" is a valid multipolygon input to underlying difference routine\n let exploded: any[] = [];\n parts.forEach((p: any) => {\n p = PP.polyUnpack(coords(p));\n if (Util.depthof(p) == 5)\n p.forEach((poly: any) => { exploded.push(poly) });\n else\n exploded.push(p);\n });\n\n return PR.polyRound(_difference(main, exploded));\n}\n\nclass FsmDifference extends FSM.Fsm\n{\n accum: any;\n polys: any[];\n work: Q.WorkDone;\n\n constructor(env: FSM.FsmEnvironment, accum?: any, polys?: any[])\n {\n super(env);\n this.work = { nUnion: 0, nDifference: 0, ms: 0 };\n this.initialize(accum, polys);\n }\n\n initialize(accum: any, polys: any[])\n {\n this.accum = accum;\n this.polys = polys;\n if (polys == null || polys.length == 0)\n this.setState(FSM.FSM_DONE);\n else\n {\n this.work.nDifference = polys.length;\n this.setState(FSM.FSM_STARTING);\n }\n }\n\n cancel(): void\n {\n this.accum = null;\n this.polys = null;\n this.setState(FSM.FSM_DONE);\n }\n\n get result(): any\n {\n return this.accum;\n }\n\n tick(): void\n {\n if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n if (this.polys == null)\n this.setState(FSM.FSM_DONE);\n else\n this.setState(FSM_COMPUTING);\n break;\n\n case FSM_COMPUTING:\n let elapsed = new Util.Elapsed();\n this.accum = PR.polyRound(_difference(this.accum, this.polys));\n this.work.ms = elapsed.ms();\n this.polys = null;\n this.setState(FSM.FSM_DONE);\n break;\n }\n }\n }\n}\n\nconst FSM_UNION = FSM.FSM_CUSTOM1;\nconst FSM_DIFFERENCE = FSM.FSM_CUSTOM2;\n\nfunction coords(f: any): any\n{\n return (f.geometry !== undefined) ? (f.geometry.packed !== undefined ? f.geometry.packed : f.geometry.coordinates) : f;\n}\n\nclass FsmIncrementalUnion extends FSM.Fsm\n{\n options: Poly.TickOptions;\n key: any;\n map: any; // { [geoid: string]: Feature }\n result: any;\n lastCompleteMap: any;\n lastCompleteResult: any;\n toSub: any[];\n fsmUnion: Q.FsmQuadTree;\n fsmDifference: FsmDifference;\n work: Q.WorkDone;\n\n constructor(env: FSM.FsmEnvironment, options: Poly.TickOptions, key: any, map?: any)\n {\n super(env);\n this.options = options;\n this.key = key;\n this.result = null;\n this.map = null;\n this.lastCompleteResult = null;\n this.lastCompleteMap = null;\n this.toSub = null;\n this.fsmUnion = null;\n this.fsmDifference = null;\n if (map) this.recompute(map);\n }\n\n matches(key: any): boolean\n {\n return Util.shallowEqual(this.key, key);\n }\n\n recompute(map: any): void\n {\n // If a computation is in progress, just cancel and restart\n if (this.fsmUnion)\n {\n this.fsmUnion.cancel();\n this.fsmUnion = null;\n this.result = this.lastCompleteResult;\n this.map = this.lastCompleteMap;\n }\n if (this.fsmDifference)\n {\n this.fsmDifference.cancel();\n this.fsmDifference = null;\n this.result = this.lastCompleteResult;\n this.map = this.lastCompleteMap;\n }\n\n let polys: any[] = [];\n if (this.result == null || Util.isEmpty(map))\n {\n // Starting from scratch\n this.toSub = null;\n for (let id in map) if (map.hasOwnProperty(id))\n polys.push(coords(map[id]));\n }\n else\n {\n // We have the result of a previous computation - compute a difference since we assume\n // that is cheaper (often only one or two polygons added or removed).\n let id: string;\n\n // To add (polygons in new map did not occur in old map)\n polys.push(this.result);\n this.result = null;\n for (id in map) if (map.hasOwnProperty(id) && this.map[id] === undefined)\n polys.push(coords(map[id]));\n\n // To sub\n this.toSub = [];\n for (id in this.map) if (this.map.hasOwnProperty(id) && map[id] === undefined)\n {\n let c = PP.polyUnpack(coords(this.map[id]));\n if (Util.depthof(c) === 5)\n for (let i: number = 0; i < c.length; i++)\n this.toSub.push(c[i]);\n else\n this.toSub.push(c);\n }\n if (this.toSub.length == 0)\n this.toSub = null;\n }\n\n // Short-circuit when no work to be done\n if (polys.length == 1 && this.toSub == null && this.lastCompleteResult)\n {\n this.work = { nUnion: 0, nDifference: 0, ms: 0 };\n this.result = this.lastCompleteResult;\n this.map = this.lastCompleteMap;\n this.setState(FSM.FSM_DONE);\n }\n else\n {\n this.work = { nUnion: polys.length - 1, nDifference: this.toSub ? this.toSub.length : 0, ms: 0 };\n this.fsmUnion = new Q.FsmQuadTree(this.env, this.options, polys);\n this.waitOn(this.fsmUnion);\n this.setState(FSM_UNION);\n this.map = map;\n }\n }\n\n cancel(): void\n {\n if (this.fsmUnion)\n {\n this.fsmUnion.cancel();\n this.fsmUnion = null;\n }\n if (this.fsmDifference)\n {\n this.fsmDifference.cancel();\n this.fsmDifference = null;\n }\n this.result = null;\n this.map = null;\n this.lastCompleteResult = null;\n this.lastCompleteMap = null;\n this.setState(FSM.FSM_DONE);\n }\n\n tick(): void\n {\n if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n // never initialized to do work (see recompute())\n this.setState(FSM.FSM_DONE);\n break;\n\n case FSM_UNION:\n if (this.fsmUnion)\n this.work.ms += this.fsmUnion.work.ms;\n this.fsmDifference = new FsmDifference(this.env, this.fsmUnion.result, this.toSub);\n this.waitOn(this.fsmDifference);\n this.toSub = null;\n this.fsmUnion = null;\n this.setState(FSM_DIFFERENCE);\n break;\n\n case FSM_DIFFERENCE:\n this.result = this.fsmDifference.result;\n this.work.ms += this.fsmDifference.work.ms;\n this.lastCompleteResult = this.result;\n this.lastCompleteMap = this.map;\n this.fsmDifference = null;\n this.setState(FSM.FSM_DONE);\n break;\n }\n }\n }\n}\n\nexport interface UnionResult\n{\n key: any;\n poly: any;\n work: Q.WorkDone;\n}\n\nexport class FsmUnion extends FSM.Fsm\n{\n options: Poly.TickOptions;\n unions: FsmIncrementalUnion[];\n work: Q.WorkDone;\n\n constructor(env: FSM.FsmEnvironment, options?: Poly.TickOptions)\n {\n super(env);\n this.options = Util.shallowAssignImmutable(Poly.DefaultTickOptions, options);\n this.unions = [];\n this.work = { nUnion: 0, nDifference: 0, ms: 0 };\n }\n\n get result(): UnionResult[]\n {\n if (this.unions.length > 0 && this.state === FSM.FSM_DONE)\n return this.unions.map((i: FsmIncrementalUnion) => ({ key: i.key, poly: i.result, work: i.work }) );\n else\n return null;\n }\n\n cancel(): void\n {\n this.unions.forEach((i: FsmIncrementalUnion) => {\n i.cancel();\n });\n this.unions = [];\n this.setState(FSM.FSM_DONE);\n }\n\n cancelOne(key: any): void\n {\n for (let i = 0; i < this.unions.length; i++)\n {\n let u = this.unions[i];\n if (u.matches(key))\n {\n u.cancel();\n return;\n }\n }\n }\n\n recompute(key: any, map: any): void\n {\n let fsm: FsmIncrementalUnion = this.unions.find((i: FsmIncrementalUnion) => i.matches(key));\n if (fsm == null)\n {\n fsm = new FsmIncrementalUnion(this.env, this.options, key, map);\n this.unions.push(fsm);\n }\n else\n fsm.recompute(map);\n this.work = { nUnion: 0, nDifference: 0, ms: 0 };\n this.unions.forEach((u) => { this.work.nUnion += u.work.nUnion; this.work.nDifference += u.work.nDifference });\n this.waitOn(fsm);\n this.setState(FSM_COMPUTING);\n }\n\n tick(): void\n {\n if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n case FSM_COMPUTING:\n if (this.unions) this.unions.forEach((u) => { this.work.ms += u.work.ms });\n this.setState(FSM.FSM_DONE);\n break;\n }\n }\n }\n}\n","export * from './util';\nexport * from './countedhash';\nexport * from './indexedarray';\nexport * from './gradient';\nexport * from './bintrie';\nexport * from './bitset';\n","import * as U from './util';\n\n//\n// Packed format Trie for mapping string to string\n// Assumptions:\n// 1. Lots of duplicate prefix strings in keys (so branching in trie happens late).\n// 2. Lots of duplicate prefix strings in values.\n// 3. Lots of keys with duplicate prefix map to the same string value.\n// Especially good for something like our blockmapping.json file since both the keys (blockIDs)\n// and values (precinct IDs) have a ton of redundancy and ~250 avg keys (blockID) map to same\n// precinctID.\n// The packed structure is just read directly into memory and walked in packed format.\n\n// The structure is divided into two pieces, a node \"tree\" (flat n-ary trie with offsets\n// to next nodes) and a value table. A value is a pair of string fragment offsets.\n//\n// Main header is:\n// value table offset (32 bit value)\n// [ node table ]\n// [ value table ]\n\n// A tree node is:\n// node length / value - (length of byte and node offset table)\n// [ bytes ]* (padded to 4)\n// [ node or value offset ]* (32 bit signed values, negative values are value table refs)\n//\n// We just do a linear scan through the bytes since we assume many will only have a single child,\n// max ~15.\n// The byte array contains the next byte to match, the node offset is the respective next node.\n// A negative node offset is the actual value.\n//\n// A value is an entry in the value table. It is:\n// fragment offset 1 (from start of value table) (offset zero means null, not a legal offset)\n// fragment offset 2 (from start of value table)\n//\n// where a fragment is:\n// length (byte)\n// [ bytes ]*\n//\n// value table is:\n// number of pairs (32 bit value)\n// [ fragment offset pairs ]*\n// [ fragment values ]*\n\nexport interface Coder\n{\n encoder: { encode: (s: string) => Uint8Array };\n decoder: { decode: (u8: Uint8Array) => string };\n}\n\n/*\n-- For Node\nimport * as u from 'util';\nUtil.setCoder({ encoder: new u.TextEncoder(), decoder: new u.TextDecoder('utf-8') });\n\n-- For Browser\nUtil.setCoder({ encoder: new TextEncoder(), decoder: new TextDecoder('utf-8') });\n*/\n\nconst MaxKeyLength = 128;\n\nexport function s2u8(coder: Coder, s: string): Uint8Array\n{\n return coder.encoder.encode(s);\n}\n\nexport function u82s(coder: Coder, u8: Uint8Array, offset: number, n: number): string\n{\n return coder.decoder.decode(u8.subarray(offset, offset+n));\n}\n\n// String table algorithm:\n// For each string, divide into fragments of n to 3 bytes\n// Allocate an occurence for each fragment.\n// Sort the fragments by number of occurrences.\n// For each string, pick fragmentation that maximizes occurrence count and mark\n// fragmentation as \"in use\"\n\ninterface Fragment\n{\n count: number;\n used: number;\n offset: number;\n s: string;\n u8?: Uint8Array;\n}\n\ntype FragmentTable = { [frag: string]: Fragment };\ntype FragmentPair = { f1: Fragment, f2: Fragment, offset?: number };\nconst NullFragment = { count: 0, used: 0, offset: 0, s: '' };\n\nfunction sortBestPair(p1: FragmentPair, p2: FragmentPair): number\n{\n let d = (p1.f1.count+p1.f2.count) - (p2.f1.count+p2.f2.count);\n if (d) return d;\n d = (p1.f1.used + p1.f2.used) - (p2.f1.used+p2.f2.used);\n return d;\n}\n\nfunction unique(a: string[]): string[]\n{\n a = a.slice().sort();\n return a.filter((s: string, i: number) => { return i == 0 || s !== a[i-1] });\n}\n\nclass ValueTable\n{\n coder: Coder;\n ab: ArrayBuffer;\n u8: Uint8Array;\n u32: Uint32Array;\n\n constructor(coder: Coder) { this.coder = coder }\n\n static fromBuffer(coder: Coder, ab: ArrayBuffer, offset: number, length: number): ValueTable\n {\n let vt = new ValueTable(coder);\n vt.ab = ab;\n vt.u8 = new Uint8Array(ab, offset, length);\n let u32 = new Uint32Array(ab, offset, 1);\n let n = u32[0];\n vt.u32 = new Uint32Array(ab, offset, 1+2*n);\n return vt;\n }\n\n // Returns string given offset into value table\n fromOffset(offset: number): string\n {\n let o1 = this.u32[offset];\n let o2 = this.u32[offset+1];\n let n = 0;\n if (o1) n += this.u8[o1];\n if (o2) n += this.u8[o2];\n let ab = new ArrayBuffer(n);\n let u8 = new Uint8Array(ab);\n n = this.u8[o1];\n let j = 0;\n while (j < n) u8[j++] = this.u8[++o1];\n n = this.u8[o2];\n let k = 0;\n while (k < n) k++, u8[j++] = this.u8[++o2];\n return u82s(this.coder, u8, 0, j);\n }\n}\n\nclass ValueTableBuilder\n{\n coder: Coder;\n values: string[];\n fragments: FragmentTable;\n pairs: { [value: string]: FragmentPair };\n ab: ArrayBuffer;\n u8: Uint8Array;\n u32: Uint32Array;\n\n constructor(coder: Coder) { this.coder = coder }\n\n // Building\n static fromStrings(coder: Coder, values: string[]): ValueTableBuilder\n {\n let nc = 0;\n values.forEach(s => nc += s.length);\n //console.log(`bintrie: ValueTable: ${values.length} initial values, ${nc} initial char count`);\n values = unique(values);\n //console.log(`bintrie: ValueTable: ${values.length} unique values`);\n let vtb = new ValueTableBuilder(coder);\n vtb.values = values;\n vtb.fragments = {};\n vtb.pairs = {};\n values.forEach(s => vtb.extractFragments(s));\n values.forEach(s => vtb.pickFragments(s));\n //console.log(`bintrie: ValueTable: ${Object.keys(vtb.fragments).length} initial fragments`);\n Object.keys(vtb.fragments).forEach(s => { if (! vtb.fragments[s].used) delete vtb.fragments[s] });\n //console.log(`bintrie: ValueTable: ${Object.keys(vtb.fragments).length} final fragments`);\n vtb.toBinary();\n vtb.validateStrings(values);\n //console.log(`bintrie: ValueTable: ${vtb.u8.length} final byte length`);\n return vtb;\n }\n\n // Validation\n validateStrings(values: string[]): void\n {\n let vt = ValueTable.fromBuffer(this.coder, this.ab, 0, this.ab.byteLength);\n let orig = values.slice().sort();\n let here: string[] = [];\n let n = this.u32[0];\n for (let i = 0; i < n; i++)\n here.push(vt.fromOffset(i*2+1));\n here.sort();\n for (let i = 0; i < here.length; i++)\n if (orig[i] !== here[i])\n {\n console.error('ValueTable: content mismatch');\n break;\n }\n }\n\n // Building\n addFragment(s: string): void\n {\n let f = this.fragments[s];\n if (f === undefined)\n f = { count: 0, used: 0, s: s, offset: 0, u8: s2u8(this.coder, s) }, this.fragments[s] = f;\n f.count++;\n }\n\n // Building\n extractFragments(s: string): void\n {\n let n = s.length;\n if (n < 6)\n this.addFragment(s);\n else\n for (let j = 3; j < n-2; j++)\n {\n this.addFragment(s.substring(0, j));\n this.addFragment(s.substring(j));\n }\n }\n\n // Building\n pickFragments(s: string): void\n {\n let a: { f1: Fragment, f2: Fragment }[] = [];\n let n = s.length;\n if (n < 6)\n a.push({ f1: this.fragments[s], f2: NullFragment });\n else\n for (let j = 3; j < n-2; j++)\n a.push({ f1: this.fragments[s.substring(0, j)], f2: this.fragments[s.substring(j)] });\n a.sort(sortBestPair);\n let p = a[0];\n p.f1.used = 1;\n p.f2.used = 1;\n this.pairs[s] = p;\n }\n\n // Building\n toOffset(s: string): number\n {\n return this.pairs[s].offset;\n }\n\n // Building\n toBinary(): void\n {\n let byteLength = 0;\n byteLength += (this.values.length * 2 * 4) + 4;\n let keys = Object.keys(this.fragments);\n keys.forEach(s => {\n let f = this.fragments[s];\n f.offset = byteLength;\n byteLength += f.u8.byteLength + 1;\n });\n this.ab = new ArrayBuffer(byteLength);\n this.u8 = new Uint8Array(this.ab);\n this.u32 = new Uint32Array(this.ab, 0, this.values.length*2+1);\n let pOffset = 0;\n this.u32[pOffset++] = this.values.length;\n this.values.forEach(s => {\n let p = this.pairs[s];\n p.offset = pOffset;\n this.u32[pOffset++] = p.f1.offset;\n this.u32[pOffset++] = p.f2.offset;\n });\n let fOffset = (this.values.length * 2 * 4) + 4;\n keys.forEach(s => {\n let f = this.fragments[s];\n this.u8[fOffset++] = f.u8.length;\n for (let i = 0; i < f.u8.length; i++)\n this.u8[fOffset++] = f.u8[i];\n });\n }\n}\n\nexport type StringMap = { [key: string]: string };\n\n// Building\ninterface UnpackedNode\n{\n // This for leaf node\n suffix: Uint8Array;\n value: number;\n\n // This for internal node\n bytes: number[] | null;\n nodes: UnpackedNode[] | null;\n}\n\nfunction pad(n: number, pad: number): number { let mod = n % pad; return mod ? pad - mod : 0; }\nfunction pad4(n: number): number { return pad(n, 4) }\n\nexport class BinTrie\n{\n coder: Coder;\n ab: ArrayBuffer;\n vt: ValueTable;\n u8: Uint8Array;\n i32: Int32Array;\n\n constructor(coder: Coder)\n {\n this.coder = coder;\n }\n\n static fromBuffer(coder: Coder, ab: ArrayBuffer): BinTrie\n {\n let bt = new BinTrie(coder);\n bt.ab = ab;\n bt.u8 = new Uint8Array(bt.ab);\n let i32 = new Int32Array(bt.ab, 0, 1);\n let valueOffset = i32[0];\n bt.i32 = new Int32Array(bt.ab, 0, valueOffset >> 2);\n bt.vt = ValueTable.fromBuffer(coder, bt.ab, valueOffset, bt.u8.length - valueOffset);\n return bt;\n }\n\n get(key: string): string\n {\n let u8 = s2u8(this.coder, key);\n let byteOffset = 4;\n for (let i = 0; i <= u8.length; i++)\n {\n let iOffset = byteOffset >> 2;\n let n = this.i32[iOffset];\n if (i == u8.length)\n return undefined;\n let b = u8[i];\n byteOffset += 4;\n let j: number;\n for (j = 0; j < n; j++)\n if (this.u8[byteOffset+j] === b)\n {\n byteOffset += n + pad4(n); // move past byte table\n iOffset = byteOffset >> 2; // convert ioffset to that location\n iOffset += j; // index intoo node offset table\n byteOffset = this.i32[iOffset]; // and move to child node\n if (byteOffset < 0)\n return this.vt.fromOffset(-byteOffset);\n break;\n }\n if (j === n)\n return undefined;\n }\n return undefined;\n }\n\n forEach(cb: (k: string, v: string) => void)\n {\n let keybuf = new Uint8Array(MaxKeyLength);\n let keylen = 0;\n\n let processNode = (len: number, byteOffset: number) => {\n let iOffset = byteOffset >> 2;\n let n = this.i32[iOffset];\n byteOffset += 4;\n for (let j = 0; j < n; j++)\n {\n keybuf[keylen++] = this.u8[byteOffset+j];\n }\n };\n processNode(0, 4);\n }\n}\n\nexport interface BinTrieOptions\n{\n dedup?: boolean,\n verbose?: boolean,\n}\nlet DefaultOptions: BinTrieOptions = { dedup: true, verbose: false };\n\nexport class BinTrieBuilder\n{\n options: BinTrieOptions;\n coder: Coder;\n root: UnpackedNode;\n vtb: ValueTableBuilder;\n vt: ValueTable;\n ab: ArrayBuffer;\n u8: Uint8Array;\n i32: Int32Array;\n\n constructor(coder: Coder, options?: BinTrieOptions)\n {\n this.coder = coder;\n this.options = U.shallowAssignImmutable(DefaultOptions, options);\n }\n\n // Building\n nodeCount(node: UnpackedNode): number\n {\n let n = 1;\n if (node.nodes)\n node.nodes.forEach(child => n += this.nodeCount(child))\n return n;\n }\n\n // Validation\n nodeBranching(node: UnpackedNode, counts: number[]): number\n {\n let n = node.nodes ? node.nodes.length : 0;\n counts[n] = counts[n] === undefined ? 1 : counts[n]+1;\n if (node.nodes)\n node.nodes.forEach(child => n += this.nodeBranching(child, counts))\n return n;\n }\n\n // Validation\n nodeValueCount(node: UnpackedNode): number\n {\n let n = node.value ? 1 : 0;\n if (node.nodes)\n node.nodes.forEach(child => n += this.nodeValueCount(child))\n return n;\n }\n\n // Building\n nodeByteLength(node: UnpackedNode): number\n {\n let byteLength = 0; // length of child arrays\n if (node.nodes)\n {\n byteLength += 4; // length of child arrays\n byteLength += node.bytes.length + pad4(node.bytes.length);\n byteLength += node.nodes.length * 4;\n node.nodes.forEach(n => { byteLength += this.nodeByteLength(n) });\n }\n return byteLength;\n }\n\n // Building\n addString(s: string, value: number): void\n {\n let u8 = s2u8(this.coder, s);\n if (this.root == null)\n this.root = { suffix: u8, value: value, bytes: null, nodes: null };\n else\n {\n let node = this.root;\n let n = u8.length;\n let j = 0;\n while (j < n)\n {\n // If at leaf node, need to split it\n if (node.bytes == null)\n {\n node.bytes = [ node.suffix[0] ];\n node.nodes = [ { suffix: node.suffix.subarray(1), value: node.value, bytes: null, nodes: null } ];\n node.suffix = null;\n node.value = 0;\n }\n\n let k: number;\n for (k = 0; k < node.bytes.length; k++)\n if (node.bytes[k] == u8[j])\n break;\n \n if (k < node.bytes.length)\n {\n node = node.nodes[k];\n j++;\n }\n else\n {\n node.bytes.push(u8[j++]);\n let nNew: UnpackedNode = { suffix: u8.subarray(j), value: value, bytes: null, nodes: null };\n node.nodes.push(nNew);\n node = nNew;\n }\n }\n }\n }\n\n // Building\n dedup(node: UnpackedNode): void\n {\n // If all subnodes point to the same value, we can just turn this node into a value node\n if (node.nodes)\n {\n node.nodes.forEach(n => this.dedup(n));\n let value = node.nodes[0].value;\n if (value)\n {\n node.nodes.forEach(n => { if (n.value != value) value = 0 });\n if (value)\n {\n node.value = value;\n delete node.nodes;\n delete node.bytes;\n }\n }\n }\n }\n\n // Validation\n getUnpacked(key: string): string\n {\n function getFromNode(vt: ValueTable, node: UnpackedNode, u8: Uint8Array, offset: number): string\n {\n if (node.value)\n return vt.fromOffset(node.value);\n else\n {\n if (offset >= u8.length)\n {\n console.error('bintrie: failure during lookup in unpacked format');\n return 'undefined';\n }\n let j = node.bytes.findIndex(e => e === u8[offset]);\n if (j === undefined)\n {\n console.error('bintrie: failure during lookup in unpacked format');\n return 'undefined';\n }\n return getFromNode(vt, node.nodes[j], u8, offset+1);\n }\n }\n\n return getFromNode(this.vt, this.root, s2u8(this.coder, key), 0);\n }\n\n // Building\n packNode(node: UnpackedNode, byteOffset: number): number\n {\n if (node.nodes)\n {\n let i;\n let iOffset = byteOffset >> 2;\n this.i32[iOffset] = node.nodes.length;\n byteOffset += 4;\n for (i = 0; i < node.bytes.length; i++)\n this.u8[byteOffset++] = node.bytes[i];\n byteOffset += pad4(byteOffset);\n iOffset = byteOffset >> 2;\n byteOffset += node.nodes.length * 4;\n for (i = 0; i < node.nodes.length; i++)\n {\n let n = node.nodes[i];\n if (n.value)\n this.i32[iOffset++] = - n.value;\n else\n {\n this.i32[iOffset++] = byteOffset;\n byteOffset = this.packNode(n, byteOffset);\n }\n }\n }\n return byteOffset;\n }\n\n // Building\n toBinary(): void\n {\n let byteLength = 4 + this.nodeByteLength(this.root);\n let valueOffset = byteLength;\n byteLength += this.vtb.u8.length;\n this.ab = new ArrayBuffer(byteLength);\n this.u8 = new Uint8Array(this.ab);\n this.i32 = new Int32Array(this.ab, 0, valueOffset >> 2);\n this.i32[0] = valueOffset;\n let byteOffset = this.packNode(this.root, 4);\n if (byteOffset != valueOffset)\n throw 'unexpected result from packNode';\n\n // Now copy in ValueTable\n let u8 = this.vtb.u8;\n let n = u8.length;\n for (let j = 0, k = valueOffset; j < n; j++, k++)\n this.u8[k] = u8[j];\n }\n\n // Building\n static fromMap(coder: Coder, o: StringMap, options?: BinTrieOptions): BinTrie\n {\n let btb = new BinTrieBuilder(coder, options);\n btb.vtb = ValueTableBuilder.fromStrings(coder, Object.values(o));\n btb.vt = ValueTable.fromBuffer(coder, btb.vtb.ab, 0, btb.vtb.ab.byteLength);\n let keys = Object.keys(o);\n keys.forEach(s => btb.addString(s, btb.vtb.toOffset(o[s])));\n\n //console.log(`bintrie: initial node count: ${btb.nodeCount(btb.root)}`);\n\n // validate\n let good = true;\n keys.forEach(k => {\n if (good && btb.getUnpacked(k) !== o[k])\n {\n //console.error('bintrie: missing key in unpacked, un-deduped tree');\n good = false;\n }\n });\n\n // dedup (collapse branches pointing to same value)\n if (btb.options.dedup)\n btb.dedup(btb.root);\n\n // validate\n keys.forEach(k => {\n if (good && btb.getUnpacked(k) !== o[k])\n {\n //console.error('bintrie: missing key in unpacked, deduped tree');\n good = false;\n }\n });\n\n //console.log(`bintrie: final node count after dedup: ${btb.nodeCount(btb.root)}`);\n //console.log(`bintrie: value nodes after dedup: ${btb.nodeValueCount(btb.root)}`);\n let counts: number[] = [];\n //console.log(`bintrie: singleton nodes after dedup: ${btb.nodeBranching(btb.root, counts)}`);\n counts.forEach((count: number, i: number) => {\n //if (count !== undefined)\n //console.log(`bintrie: branch factor: ${i}, count: ${count}`);\n });\n\n btb.toBinary();\n\n let bt = BinTrie.fromBuffer(coder, btb.ab);\n\n // validate\n keys.forEach((k: string, i: number) => {\n if (good && bt.get(k) !== o[k])\n {\n console.error(`bintrie: missing key (${i}th) in packed structure`);\n good = false;\n }\n });\n\n if (btb.options.verbose)\n console.log(`bintrie: total size: ${btb.u8.length}, value table size: ${btb.vtb.u8.length}`);\n\n return bt;\n }\n}\n","const BitLookup = [ 1, 2, 4, 8, 16, 32, 64, 128 ];\n\nexport interface Converter\n{\n atob?: (s: string) => string;\n btoa?: (s: string) => string;\n}\n\n// In NodeJS:\n\n// {\n// btoa: (s: string) => { return Buffer.from(s, 'binary').toString('base64') },\n// atob: (s: string) => { return Buffer.from(s, 'base64').toString('binary') },\n// }\n\n// In Browser:\n\n// {\n// btoa: window.btoa,\n// atob: window.atob,\n// }\n\nexport class ListToBitset\n{\n list: string[];\n index: { [s: string]: number };\n size: number;\n converter: Converter;\n\n constructor(list: string[], converter?: Converter)\n {\n this.list = list;\n this.converter = converter;\n }\n\n toBits(l: string[]): Uint8Array\n {\n if (! this.index)\n {\n this.size = Math.floor((this.list.length+7)/8);\n this.index = {};\n this.list.forEach((s: string, i: number) => { this.index[s] = i });\n }\n let ab = new ArrayBuffer(this.size);\n let u8 = new Uint8Array(ab);\n if (l) l.forEach(s => {\n let n = this.index[s];\n let i = Math.floor(n/8);\n u8[i] |= BitLookup[n % 8];\n });\n return u8;\n }\n\n toList(u8: Uint8Array): string[]\n {\n let list: string[] = [];\n for (let i = 0; i < u8.length; i++)\n {\n let u = u8[i];\n if (u)\n {\n if (u & 1) list.push(this.list[i*8+0]);\n if (u & 2) list.push(this.list[i*8+1]);\n if (u & 4) list.push(this.list[i*8+2]);\n if (u & 8) list.push(this.list[i*8+3]);\n if (u & 16) list.push(this.list[i*8+4]);\n if (u & 32) list.push(this.list[i*8+5]);\n if (u & 64) list.push(this.list[i*8+6]);\n if (u & 128) list.push(this.list[i*8+7]);\n }\n }\n return list;\n }\n\n base64tou8(base64: string): Uint8Array\n {\n let raw = this.converter.atob(base64);\n let rawLength = raw.length;\n let u8 = new Uint8Array(new ArrayBuffer(rawLength));\n for (let i = 0; i < rawLength; i++)\n u8[i] = raw.charCodeAt(i);\n return u8;\n }\n\n u8ToBase64(u8: Uint8Array): string\n {\n let binary: string[] = [];\n let len = u8.byteLength;\n for (let i = 0; i < len; i++) {\n binary.push(String.fromCharCode(u8[i]));\n }\n return this.converter.btoa(binary.join(''));\n}\n\n fromBitString(base64: string): string[]\n {\n return this.toList(this.base64tou8(base64));\n }\n\n toBitString(l: string[]): string\n {\n // Note: On server, Buffer.from(this.toBits(l)).toString('base64') probably faster\n return this.u8ToBase64(this.toBits(l));\n }\n}\n","export class CountedHash\n{\n n: number;\n val: { [id: string]: true|null }; // true === isset, null === indeterminant\n\n constructor()\n {\n this.n = 0;\n this.val = {};\n }\n\n get length(): number { return this.n; }\n\n indeterminate(id: string): boolean\n {\n return id != '' && this.val[id] === null;\n }\n\n test(id: string): boolean\n {\n return id != '' && this.val[id] !== undefined;\n }\n\n set(id: string, val: true|null = true): void\n {\n if (id != '')\n {\n if (! this.test(id))\n this.n++;\n this.val[id] = val;\n }\n }\n\n clear(id: string): void\n {\n if (this.test(id))\n {\n this.n--;\n delete this.val[id];\n }\n }\n\n apply(vals: { [id: string]: boolean|null }): void\n {\n this.empty();\n\n if (vals)\n Object.keys(vals).forEach((id) => {\n if (vals[id] !== false)\n this.set(id, vals[id] === true ? true : null);\n });\n }\n\n empty(): void\n {\n this.n = 0;\n this.val = {};\n }\n\n asArray(): string[]\n {\n let a: string[] = [];\n\n this.forEach(id => { a.push(id) });\n\n return a;\n }\n\n // This really only useful when length === 0|1\n asString(): string\n {\n for (var id in this.val) if (this.val.hasOwnProperty(id))\n return id;\n\n return '';\n }\n\n forEach(f: (id: string) => void): void\n {\n for (var id in this.val) if (this.val.hasOwnProperty(id))\n f(id);\n }\n}\n","interface RGB\n{\n r: number,\n g: number,\n b: number,\n}\n\nexport interface Stop\n{\n color: string,\n stop: number,\n rgb?: RGB;\n}\n\nexport type GradientStops = Stop[];\n\nfunction parseStops(stops: GradientStops): void\n{\n if (stops[0].rgb) return;\n\n stops.forEach((s) => {\n if (s.rgb === undefined)\n {\n let r = parseInt(s.color.substr(1, 2), 16);\n let g = parseInt(s.color.substr(3, 2), 16);\n let b = parseInt(s.color.substr(5, 2), 16);\n s.rgb = { r: r, g: g, b: b };\n }\n });\n stops.sort();\n}\n\nfunction asHex(v: number): string\n{\n return v.toString(16).padStart(2, '0');\n}\n\nfunction toHexColor(r: number, g: number, b: number): string\n{\n return `#${asHex(r)}${asHex(g)}${asHex(b)}`;\n}\n\nexport function execGradient(stops: GradientStops, value: number): string\n{\n parseStops(stops);\n let r = stops[stops.length-1].rgb.r;\n let g = stops[stops.length-1].rgb.g;\n let b = stops[stops.length-1].rgb.b;\n for (let i = 1; i < stops.length; i++)\n {\n let e = stops[i];\n if (value < e.stop)\n {\n let s = stops[i-1];\n r = s.rgb.r + Math.floor(((e.rgb.r - s.rgb.r) * (value - s.stop) / (e.stop - s.stop)));\n g = s.rgb.g + Math.floor(((e.rgb.g - s.rgb.g) * (value - s.stop) / (e.stop - s.stop)));\n b = s.rgb.b + Math.floor(((e.rgb.b - s.rgb.b) * (value - s.stop) / (e.stop - s.stop)));\n break;\n }\n }\n return toHexColor(r, g, b);\n}\n\nexport function parseGradient(sStops: string): GradientStops\n{\n let stops: GradientStops = [];\n let re = / ?([^ ]+) ([^ ,]+%?),?(.*)/;\n\n if (sStops == null || sStops == '' ) return stops;\n\n // Strip off leading CSS form if present\n if (sStops.indexOf('linear-gradient') == 0)\n {\n let rePre = /^[^,]*, (.*)\\)$/;\n let a = rePre.exec(sStops);\n if (a)\n sStops = a[1];\n }\n\n while (sStops && sStops != '')\n {\n let a = re.exec(sStops);\n if (a == null)\n break;\n let stop = a[2];\n sStops = a[3];\n if (a[2].indexOf('%') >= 0)\n {\n stop = stop.substr(0, stop.length-1);\n stop = String(Number(stop) * 0.01);\n }\n \n stops.push({ color: a[1], stop: Number(stop) });\n }\n return stops;\n}\n\nexport function asCSSGradient(stops: GradientStops): string\n{\n parseStops(stops);\n\n let a: string[] = [];\n stops.forEach((s) => {\n let stop = s.stop >= 0.0 && s.stop <= 1.0 ? `${Math.round(s.stop*100)}%` : String(s.stop);\n a.push(`${toHexColor(s.rgb.r, s.rgb.g, s.rgb.b)} ${stop}`);\n });\n return `linear-gradient(to right, ${a.join(', ')})`;\n}\n","export class IndexedArray\n{\n o: any;\n a: any[];\n\n constructor()\n {\n this.o = {};\n this.a = null;\n }\n\n ensure(): void\n {\n if (this.a === null)\n {\n this.a = [];\n for (let p in this.o) if (this.o.hasOwnProperty(p))\n this.a.push(p);\n this.a.sort((a: string, b: string) => { a = a.toUpperCase(); b = b.toUpperCase(); return a < b ? -1 : (a > b ? 1 : 0); });\n }\n }\n\n asArray(): any[]\n {\n this.ensure();\n return this.a;\n }\n\n get length(): number { this.ensure(); return this.a.length; }\n\n test(s: string): boolean\n {\n return !!s && this.o[s] !== undefined;\n }\n\n set(s: string): void\n {\n if (!!s && !this.test(s))\n {\n this.o[s] = true;\n this.a = null;\n }\n }\n\n setAll(a: string[]): void\n {\n if (a && a.length)\n for (let i: number = 0; i < a.length; i++)\n this.set(a[i]);\n }\n\n clear(s: string): void\n {\n if (this.test(s))\n {\n delete this.o[s];\n this.a = null;\n }\n }\n\n at(i: number): string\n {\n this.ensure();\n if (i < 0 || i >= this.a.length)\n return undefined;\n return this.a[i];\n }\n\n empty(): void\n {\n this.o = {};\n this.a = null;\n }\n\n forEach(f: (s: string) => void): void\n {\n for (var s in this.o) if (this.o.hasOwnProperty(s))\n f(s);\n }\n}\n","export type DateString = string;\nexport function Now(): DateString { return (new Date()).toJSON(); }\n\n// polyfill\nlet hrtime: any = global && global.process && global.process.hrtime ? global.process.hrtime : null;\n\nexport class Elapsed\n{\n tStart: any;\n tDur: any;\n\n constructor(bStart: boolean = true)\n {\n this.tStart = undefined;\n this.tDur = undefined;\n if (bStart) this.start();\n }\n\n start(): void\n {\n if (hrtime)\n this.tStart = hrtime();\n else\n this.tStart = performance.now();\n if (this.tDur) this.tDur = undefined;\n }\n\n restart(): void\n {\n if (this.tStart === undefined) this.start();\n delete this.tDur;\n }\n\n end(): void\n {\n if (this.tStart === undefined) this.start();\n if (hrtime)\n this.tDur = hrtime(this.tStart);\n else\n this.tDur = performance.now() - this.tStart;\n }\n\n ms(): number\n {\n if (this.tDur === undefined) this.end();\n if (hrtime)\n return Math.round((this.tDur[0]*1000) + (this.tDur[1]/1000000));\n else\n return this.tDur;\n }\n\n mscur(): number\n {\n let ms = this.ms();\n this.restart();\n return ms;\n }\n\n nano(): number\n {\n if (this.tDur === undefined) this.end();\n if (hrtime)\n return (this.tDur[0]*1000000000) + this.tDur[1];\n else\n return this.tDur * 1000000;\n }\n\n nanocur(): number\n {\n let nano = this.nano();\n this.restart();\n return nano;\n }\n}\n\nexport class MultiTimer\n{\n _overall: Elapsed;\n _segment: Elapsed;\n _msAggregate: number;\n\n constructor(bStart: boolean = true)\n {\n this._overall = new Elapsed(bStart);\n this._segment = new Elapsed(bStart);\n this._msAggregate = 0;\n }\n\n start(): void\n {\n this._overall.start();\n this._segment = new Elapsed();\n this._msAggregate = 0;\n }\n\n end(): number\n {\n this._overall.end();\n this.segend();\n return this._overall.ms();\n }\n\n segstart(): void\n {\n this._segment = new Elapsed();\n }\n\n segend(): number\n {\n let ms = 0;\n if (this._segment)\n {\n ms = this._segment.ms();\n this._msAggregate += ms;\n this._segment = null;\n }\n return ms;\n }\n\n get overall(): number { return this._overall.ms() }\n get aggregate(): number { return this._msAggregate }\n}\n\nexport class Deadline\n{\n msDelta: number;\n elapsed: Elapsed;\n\n constructor(msDelta: number)\n {\n this.msDelta = msDelta;\n this.elapsed = new Elapsed();\n }\n\n start(): void\n {\n this.elapsed.start();\n }\n\n done(): boolean\n {\n this.elapsed.end();\n return this.elapsed.ms() > this.msDelta;\n }\n}\n\nexport function createGuid(): string\n{\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random()*16|0, v = c === 'x' ? r : (r&0x3|0x8);\n return v.toString(16);\n });\n}\n\nconst reGuid = /.*-.*-.*-.*-/;\n\nexport function isGuid(s: string): boolean\n{\n return reGuid.test(s) && s.length >= 36\n}\n\nexport function createKeyedGuid(key: string): string\n{\n return `xxxxxxxx-xxxx-${key}xxx-yxxx-xxxxxxxxxxxx`.replace(/[xy]/g, function(c) {\n var r = Math.random()*16|0, v = c === 'x' ? r : (r&0x3|0x8);\n return v.toString(16);\n });\n}\n\nexport function guidKey(guid: string): string\n{\n return guid.substr(14, 1); // See above\n}\n\ntype LoopTest = WeakMap<any,boolean>;\n\nfunction _sizeof(a: any, loops: LoopTest): number\n{\n if (a === null || a === undefined) return 0;\n\n switch (typeof a)\n {\n default: return 0;\n case 'number': return 8;\n case 'boolean': return 4;\n case 'string': return a.length * 2;\n\n case 'object':\n {\n if (loops.has(a))\n return 0;\n else\n loops.set(a, true);\n\n let t: number = 0;\n if (Array.isArray(a))\n {\n for (let i: number = 0; i < a.length; i++)\n t += _sizeof(a[i], loops);\n t += 8; // length\n }\n else if (Buffer && Buffer.isBuffer(a))\n {\n t = a.length;\n }\n else if (a.hasOwnProperty === undefined)\n return t;\n else\n {\n for (var key in a) if (a.hasOwnProperty && a.hasOwnProperty(key))\n {\n t += _sizeof(key, loops); // this is a good estimate of download size, but poor estimate of internal size\n // because of JS object templating vs. naive hashtables\n t += _sizeof(a[key], loops);\n }\n }\n return t;\n }\n }\n}\n\nexport function sizeof(a: any): number\n{\n let loops: LoopTest = new WeakMap();\n let n: number = _sizeof(a, loops);\n return n;\n}\n\nexport function depthof(a: any): number\n{\n if (a === null || a === undefined) return 1;\n\n switch (typeof a)\n {\n default: return 1;\n case 'number': return 1;\n case 'boolean': return 1;\n case 'string': return 1;\n\n case 'object':\n {\n let d: number = 0;\n if (Array.isArray(a))\n return a.length > 0 ? (1 + depthof(a[0])) : 2; // still return 2 for empty array\n else if (Buffer && Buffer.isBuffer(a))\n return 2;\n else if (a.hasOwnProperty === undefined)\n return 1;\n else\n {\n for (var key in a) if (a.hasOwnProperty(key))\n return 1 + depthof(a[key]);\n return 2; // or 2 for empty object\n }\n }\n }\n}\nexport function isEmpty(o: any): boolean\n{\n if (o === null || o === undefined) return true;\n for (var p in o) if (o.hasOwnProperty(p)) return false;\n return true;\n}\n\nexport function countKeys(o: any): number\n{\n if (o === undefined || typeof o !== 'object') return -1;\n\n let count: number = 0;\n for (let p in o) if (o.hasOwnProperty(p))\n count++;\n return count;\n}\n\nexport function nthProperty(o: any, n: number = 0): any\n{\n for (let p in o) if (o.hasOwnProperty(p))\n {\n if (n <= 0) return o[p];\n n--;\n }\n return undefined;\n}\n\nexport function nthKey(o: any, n: number = 0): any\n{\n for (let p in o) if (o.hasOwnProperty(p))\n {\n if (n <= 0) return p;\n n--;\n }\n return undefined;\n}\n\nexport function partialEqual(o: any, subset: any): boolean\n{\n for (let p in subset) if (subset.hasOwnProperty(p))\n if (o[p] !== subset[p])\n return false;\n return true;\n}\n\nexport interface EqOptions\n{\n omitKey?: { [key: string]: boolean },\n unorderedArrays?: boolean,\n emptyStringIsNull?: boolean,\n epsilon?: number,\n}\n\nfunction exactEqual(o1: any, o2: any, options?: EqOptions): boolean\n{\n if (o1 === o2) return true;\n if (options && options.epsilon && typeof o1 === 'number' && typeof o2 === 'number' && Math.abs(o1-o2) < options.epsilon) return true;\n if (options && options.emptyStringIsNull)\n if ((o1 == null && o2 == '') || (o2 == null && o1 == ''))\n return true;\n return false;\n}\n\nexport function deepEqual(o1: any, o2: any, options?: EqOptions): boolean\n{\n // fast exit\n if (exactEqual(o1, o2, options)) return true;\n\n // must be same types\n if (typeof o1 !== typeof o2) return false;\n\n // Already tested for exact primitive equality so if not objects, not equal\n if (typeof o1 !== 'object' || o1 == null) return false;\n if (typeof o2 !== 'object' || o2 == null) return false;\n\n // Special case Set\n if (o1 instanceof Set && o2 instanceof Set)\n {\n if (o1.size !== o2.size) return false;\n let eq = true;\n o1.forEach((k: any) => { if (! o2.has(k)) eq = false });\n return eq;\n }\n\n // Special case Map\n if (o1 instanceof Map && o2 instanceof Map)\n {\n if (o1.size !== o2.size) return false;\n let eq = true;\n o1.forEach((v1: any, k1: any) => {\n if (eq)\n {\n if (! o2.has(k1))\n eq = false;\n else\n {\n let v2 = o2.get(k1);\n eq = deepEqual(v1, v2, options);\n }\n }\n });\n return eq;\n }\n\n // Special case array\n if (Array.isArray(o1))\n {\n if (! Array.isArray(o2)) return false;\n if (o1.length != o2.length) return false;\n if (options && options.unorderedArrays)\n {\n o1 = o1.sort();\n o2 = o2.sort();\n }\n for (let i: number = 0; i < o1.length; i++)\n if (! deepEqual(o1[i], o2[i], options))\n return false;\n return true;\n }\n\n // Special case object\n if (o1.hasOwnProperty === undefined || o2.hasOwnProperty === undefined)\n return exactEqual(o1, o2, options);\n\n for (let p in o1) if (o1.hasOwnProperty(p))\n {\n if (options && options.omitKey && options.omitKey[p])\n continue;\n if (o2[p] === undefined && o1[p] !== undefined)\n return false;\n if (! deepEqual(o1[p], o2[p], options))\n return false;\n }\n // If any properties in o2 aren't in o1, not equal\n for (let p in o2) if (o2.hasOwnProperty(p))\n {\n if (options && options.omitKey && options.omitKey[p])\n continue;\n if (o1[p] === undefined && o2[p] !== undefined)\n return false;\n }\n\n return true;\n}\n\nconst Months = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ];\n\nexport function prettyDate(d: Date): string\n{\n if (d == null) return 'unknown';\n\n let mmm = Months[d.getMonth()];\n let dd = d.getDate();\n let yyyy = d.getFullYear();\n let hh = d.getHours();\n let m = d.getMinutes();\n let mm = m < 10 ? `0${m}` : String(m);\n let ampm = hh >= 12 ? 'PM' : 'AM';\n if (hh > 12) hh -= 12;\n\n return `${mmm} ${dd}, ${yyyy} at ${hh}:${mm} ${ampm}`;\n}\n\nexport function relativeDate(d: Date): string\n{\n if (d == null) return 'unknown';\n let now = new Date();\n let yyyyNow = now.getFullYear();\n let mmmNow = Months[now.getMonth()];\n let ddNow = now.getDate();\n\n let mmm = Months[d.getMonth()];\n let dd = d.getDate();\n let yyyy = d.getFullYear();\n let hh = d.getHours();\n let m = d.getMinutes();\n let mm = m < 10 ? `0${m}` : String(m);\n let ampm = hh >= 12 ? 'PM' : 'AM';\n if (hh > 12) hh -= 12;\n\n if (yyyyNow === yyyy && mmmNow === mmm && ddNow === dd)\n return `Today at ${hh}:${mm} ${ampm}`;\n else if (yyyyNow === yyyy)\n return `${mmm} ${dd}`;\n else\n return `${mmm} ${dd}, ${yyyy}`;\n}\n\nconst OneMinute = 1000 * 60;\nconst OneHour = OneMinute * 60;\nconst OneDay = OneHour * 24;\n\nexport function recentDate(d: Date): string\n{\n if (d == null) return 'u';\n let now = new Date();\n let msNow = now.getTime();\n let msThen = d.getTime();\n let msDelta = msNow - msThen;\n\n // Within the hour, display in minutes\n if (msDelta < OneHour)\n return `${Math.round(msDelta/OneMinute)+1}m`;\n\n // Within the day, display in hours\n else if (msDelta < OneDay)\n return `${Math.round(msDelta/OneHour)+1}h`;\n\n // Otherwise, display using relativeDate\n else\n return relativeDate(d);\n}\n\nexport function textToHtml(sText: string): string\n{\n let lines: string[] = sText.split('\\n');\n let aHtml: string[] = [];\n let inTable: boolean = false;\n aHtml.push('<body>');\n for (let i: number = 0; i < lines.length; i++)\n {\n let line = lines[i];\n let isRow: boolean = line.indexOf('|') === 0;\n if (inTable && !isRow)\n {\n aHtml.push('</tbody></table>');\n inTable = false;\n }\n if (isRow && !inTable)\n {\n inTable = true;\n aHtml.push('<table border=\"1\" cellspacing=\"0\" cellpadding=\"2\"><tbody>');\n }\n if (isRow)\n {\n let cells = line.split('|');\n if (cells.length > 2)\n {\n aHtml.push('<tr>');\n for (let j: number = 1; j < cells.length-1; j++)\n aHtml.push(`<td>${cells[j]}</td>`);\n aHtml.push('</tr>');\n }\n }\n else\n aHtml.push(`<div>${line} </div>`);\n }\n if (inTable)\n aHtml.push('</tbody></table>');\n aHtml.push('</body>');\n return aHtml.join('');\n}\n\nexport function shallowCopy(src: any): any\n{\n if (src === null || src === undefined) return src;\n\n switch (typeof src)\n {\n case 'boolean':\n case 'number':\n case 'string':\n case 'symbol':\n case 'function':\n default:\n return src;\n\n case 'object':\n if (Array.isArray(src))\n return src.slice();\n else\n {\n let copy: any = {};\n\n for (var p in src) if (src.hasOwnProperty(p))\n copy[p] = src[p];\n return copy;\n }\n }\n}\n\nexport function shallowAssign(o1: any, o2: any): any\n{\n if (o1 === null || o1 === undefined) o1 = {};\n if (o2 === null || o2 === undefined) return o1;\n if (typeof o2 !== 'object' || typeof o1 !== 'object') return o1;\n\n for (var p in o2) if (o2.hasOwnProperty(p))\n o1[p] = o2[p];\n return o1;\n}\n\nexport function shallowDelete(o1: any, o2: any): any\n{\n if (o1 == null || o2 == null) return o1;\n if (typeof o2 !== 'object' || typeof o1 !== 'object') return o1;\n\n for (var p in o2) if (o2.hasOwnProperty(p))\n delete o1[p];\n return o1;\n}\n\nexport function shallowAssignImmutable(o1: any, o2: any): any\n{\n if (o1 === null || o1 === undefined) o1 = {};\n if (o2 === null || o2 === undefined) return o1;\n if (typeof o2 !== 'object' || typeof o1 !== 'object') return o1;\n\n // First determine whether o2 changes any properties, if it has, make new instance\n let oNew: any = o1;\n for (let p in o2) if (o2.hasOwnProperty(p))\n {\n if (o1[p] != o2[p])\n {\n oNew = shallowCopy(o1);\n break;\n }\n }\n if (oNew !== o1)\n shallowAssign(oNew, o2);\n return oNew;\n}\n\nexport function shallowEqual(o1: any, o2: any): boolean\n{\n if (o1 === undefined || o2 === undefined || typeof o1 !== 'object' || typeof o2 !== 'object')\n return o1 === o2;\n\n if (Array.isArray(o1) && Array.isArray(o2))\n {\n if (o1.length != o2.length) return false;\n for (let i: number = 0; i < o1.length; i++)\n if (o1[i] !== o2[i]) return false;\n return true;\n }\n else\n {\n let p: any;\n\n for (p in o1) if (o1.hasOwnProperty(p))\n if (o1[p] !== o2[p]) return false;\n for (p in o2) if (o2.hasOwnProperty(p))\n if (o1[p] === undefined) return false;\n return true;\n }\n}\n\nexport function deepCopy(src: any): any\n{\n // Beware typeof oddities\n if (src === null || src === undefined) return src;\n\n if (typeof src === 'object')\n {\n if (src instanceof Set)\n {\n let dst = new Set<any>();\n src.forEach((i: any) => { dst.add(deepCopy(i)) });\n return dst;\n }\n else if (src instanceof Map)\n {\n let dst = new Map<any, any>();\n src.forEach((v: any, k: any) => { dst.set(deepCopy(k), deepCopy(v)) });\n return dst;\n }\n else if (Array.isArray(src))\n {\n let dst: any[] = [];\n\n for (let i: number = 0; i < src.length; i++)\n dst.push(deepCopy(src[i]));\n return dst;\n }\n else\n {\n if (src.hasOwnProperty === undefined)\n return src;\n\n let dst: any = {};\n for (var p in src) if (src.hasOwnProperty(p))\n dst[p] = deepCopy(src[p]);\n return dst;\n }\n }\n else\n return src;\n}\n\nexport function deepAccum(accum: any, o: any): any\n{\n if (accum == null) accum = {};\n if (o == null) return accum;\n for (let p in o) if (o.hasOwnProperty(p))\n {\n let vs: any = o[p];\n let vd: any = accum[p];\n let ts = typeof vs;\n if (ts === 'number')\n {\n if (vd !== undefined && typeof vd !== 'number')\n throw 'deepAccum: unexpected type mismatch';\n if (p === 'min')\n accum[p] = vd === undefined ? vs : Math.min(vd, vs);\n else if (p === 'max')\n accum[p] = vd === undefined ? vs : Math.max(vd, vs);\n else\n accum[p] = (vd === undefined ? 0 : vd) + vs;\n }\n else if (vs == null || ts === 'string' || ts === 'boolean')\n accum[p] = vs;\n else if (ts === 'object')\n {\n if (vd === undefined)\n {\n vd = {};\n accum[p] = vd;\n }\n else if (typeof vd !== 'object')\n throw 'deepAccum: unexpected type mismatch';\n deepAccum(vd, vs);\n }\n }\n return accum;\n}\n\nexport function precisionRound(n: number, p: number): number\n{\n let f: number = Math.pow(10, p);\n return Math.round(n * f) / f;\n}\n\nexport function percentString(num: number, den: number, precision: number = 0): string\n{\n if (den == 0)\n return '(-)';\n\n let p: number = precisionRound((num/den) * 100, precision);\n\n return String(p) + '%';\n}\n\nexport function hash(s: string): number\n{\n let hash: number = 5381;\n let i: number = s.length;\n\n while (i)\n hash = (hash * 33) ^ s.charCodeAt(--i);\n\n /* JavaScript does bitwise operations (like XOR, above) on 32-bit signed\n * integers. Since we want the results to be always positive, convert the\n * signed int to an unsigned by doing an unsigned bitshift. */\n return hash >>> 0;\n}\n\nexport function hashObject(o: any): number\n{\n return hash(o ? JSON.stringify(o) : '');\n}\n\nconst HexTable: string[] = [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' ];\nexport function toHex(n: number): string\n{\n if (n < 0 || n > 255) throw('only 0 to 255 supported now');\n n = Math.floor(n);\n return HexTable[n >> 4] + HexTable[n & 15];\n}\n\nexport function toRGBA(color: string, alpha: number): string\n{\n // Allow passing rgba in rather than only '#ffffff' form\n if (color.indexOf('rgba') === 0)\n return color;\n\n let r: number;\n let g: number;\n let b: number;\n\n switch (color)\n {\n case 'white':\n r = 255; g = 255; b = 255;\n break;\n\n case 'black':\n r = 0; g = 0; b = 0;\n break;\n\n default:\n r = parseInt(color.substr(1, 2), 16);\n g = parseInt(color.substr(3, 2), 16);\n b = parseInt(color.substr(5, 2), 16);\n break;\n }\n\n return `rgba(${String(r)}, ${String(g)}, ${String(b)}, ${String(alpha)})`;\n}\n\nexport function toRGBAIntensity(color: string, intensity: number, alpha: number): string\n{\n // for now assume color is black\n let g: number = precisionRound(255 * intensity, 0);\n return `rgba(${String(g)}, ${String(g)}, ${String(g)}, ${String(alpha)})`;\n}\n\n// Geo functions\nexport function distance(x0: number, y0: number, x1: number, y1: number): number\n{\n return Math.hypot(x0 - x1, y0 - y1);\n}\n\nexport function deg2rad(num: number): number { return num * Math.PI / 180; }\nexport function rad2deg(num: number): number { return num / Math.PI * 180; }\n\n// Restricts lon to range [-180..180]\nexport function wrapLon(lon: number): number\n{\n let worlds = Math.floor((lon + 180) / 360);\n return lon - (worlds * 360);\n}\n\nlet reNumber = /^\\s*-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?\\s*$/;\nexport function isNumber(s: string): boolean { return !!s && reNumber.test(s) }\nexport function toNumber(a: any): number\n{\n if (typeof a === 'number') return a;\n if (typeof a === 'string' && !isNumber(a as string)) return NaN;\n return Number(a);\n}\nexport function toSafeNumber(a: any): number\n{\n let n = toNumber(a);\n return (isNaN(n) || typeof n !== 'number') ? 0 : n;\n}\n","module.exports = require(\"@dra2020/topojson-client\");","module.exports = require(\"@dra2020/topojson-server\");","module.exports = require(\"@dra2020/topojson-simplify\");","module.exports = require(\"diff-match-patch\");","module.exports = require(\"polygon-clipping\");","module.exports = require(\"splaytree\");","module.exports = require(\"tinyqueue\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./lib/all/all.ts\");\n",""],"names":[],"sourceRoot":""}
|