{"version":3,"sources":["webpack:///webpack/bootstrap fed4b3bdaa7c23e0c54e","webpack:///./~/scrollmonitor/src/constants.js","webpack:///./~/unfetch/dist/unfetch.es.js","webpack:///./js/HorizontalMenu.js","webpack:///./js/animotion.js","webpack:///./js/kudos.js","webpack:///./js/throttle.js","webpack:///./~/fastdom/fastdom.js","webpack:///./~/fetchival/index.js","webpack:///./~/js-cookie/src/js.cookie.js","webpack:///./~/promise-polyfill/promise.js","webpack:///./~/scrollmonitor/index.js","webpack:///./~/unfetch/polyfill.js","webpack:///./~/dush/index.js","webpack:///./~/process/browser.js","webpack:///./~/scrollmonitor/src/container.js","webpack:///./~/scrollmonitor/src/watcher.js","webpack:///./~/setimmediate/setImmediate.js","webpack:///./~/timers-browserify/main.js","webpack:///(webpack)/buildin/global.js","webpack:///./js/main.js"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA,mDAA2C,cAAc;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA;;;;;;;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,0BAA0B;;;;;;;;ACrB1B;AAAA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8CAA8C,EAAE;AACvE,uBAAuB,+DAA+D,EAAE;AACxF,sBAAsB,6CAA6C,EAAE;AACrE,uBAAuB,sDAAsD,EAAE;AAC/E;AACA,wBAAwB,aAAa,EAAE;AACvC,2BAA2B,YAAY,EAAE;AACzC,wBAAwB,iCAAiC,EAAE;AAC3D,wBAAwB,mCAAmC;AAC3D;AACA;AACA;AACA,EAAE;AACF;;AAEA;AACA;;;;;;;;ACxDA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,eAAe;;AAEpB;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;;;;;;;ACvIA;AACA;AACA,8CAA8C,UAAU;AACxD,wCAAwC,UAAU;;AAElD;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;ACrBA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;AChFA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;;AAEA;;;;;;;ACnCA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,mBAAmB,2BAA2B;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,aAAa,OAAO;AACpB,cAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA,cAAc,OAAO;AACrB,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG,YAAY,WAAW;;AAE1B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,EAAE;AACd,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2DAA2D;;AAE3D;AACA,0EAAkD,gBAAgB,EAAE;AAAA;AACpE;;AAEA,CAAC;;;;;;;ACjPD,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;;AAEA,CAAC;;;;;;;AC9FD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,4BAA4B;AAC5B,yBAAyB;AACzB,2BAA2B;AAC3B,2BAA2B;AAC3B;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,2DAA2D;AAC3D,6BAA6B,EAAE;AAC/B;;AAEA,SAAS,oBAAoB;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;;AAEA;;AAEA;AACA;;AAEA,2BAA2B;AAC3B,CAAC;;;;;;;AC3JD;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA,iDAAiD,SAAS;AAC1D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA,qBAAqB,iBAAiB;AACtC;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA,0CAA0C,SAAS;AACnD;AACA;AACA,KAAK;AACL;;AAEA;AACA,+EAA+E,kBAAkB,EAAE;AACnG;AACA;AACA;;AAEA;AACA;AACA,iEAAiE;AACjE;AACA;;AAEA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA,CAAC;;;;;;;;ACxOD,KAAK,cAAc;;AAEnB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;ACZA;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;;AAEA,eAAe,oBAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnFA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA,4BAA4B,UAAU;;;;;;;ACnLtC,KAAK,sCAAsC;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;;;;;;;ACpOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;;AAEA;AACA;AACA,EAAE;AACF,kBAAkB;AAClB,EAAE;AACF;AACA;AACA;AACA;AACA;;AAEA,qBAAqB,KAAK;;AAE1B,uCAAuC,OAAO;AAC9C;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,GAAG,+CAA+C;AAClD;AACA;AACA,IAAI;AACJ;AACA;;AAEA,GAAG,OAAO;AACV;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,wCAAwC;AACvE,GAAG;AACH;AACA;AACA,EAAE;AACF;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;;AAEA,EAAE;AACF;AACA;AACA;AACA;AACA,wCAAwC,OAAO;AAC/C;AACA;AACA,EAAE;AACF;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sCAAsC,OAAO;AAC7C;AACA;AACA;;AAEA;;;;;;;ACjPA;AACA;;AAEA;AACA;AACA;;AAEA,uBAAuB;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,iBAAiB;AACtC;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0CAA0C,sBAAsB,EAAE;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA;;AAEA,KAAK;AACL;AACA;;AAEA,KAAK;AACL;AACA;;AAEA,KAAK;AACL;AACA;;AAEA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,CAAC;;;;;;;;ACzLD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;;;;;;ACpDA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C;;;;;;;;;;;;;;;;;;ACpBA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA,SAAS;AACT;;;AAGA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;;AAEA,aAAa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;;AAEb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,aAAa;;;AAGb;AACA;;AAEA;;;AAGA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;;AAEb,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qDAAqD,OAAO;AAC5D;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA,qDAAqD,OAAO;AAC5D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,kEAAkE,MAAM;AACxE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;;AAEA;AACA;AACA;AACA;AACA,SAAS;;;AAGT;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,SAAS;;AAET;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;;AAEA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;;AAET;AACA;AACA,0EAA0E,gBAAgB;AAC1F;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,mGAAqD,QAAQ;AAC7D;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA,CAAC,6CAA6C;;AAE9C,kB","file":"main.bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 19);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap fed4b3bdaa7c23e0c54e","exports.VISIBILITYCHANGE = 'visibilityChange';\r\nexports.ENTERVIEWPORT = 'enterViewport';\r\nexports.FULLYENTERVIEWPORT = 'fullyEnterViewport';\r\nexports.EXITVIEWPORT = 'exitViewport';\r\nexports.PARTIALLYEXITVIEWPORT = 'partiallyExitViewport';\r\nexports.LOCATIONCHANGE = 'locationChange';\r\nexports.STATECHANGE = 'stateChange';\r\n\r\nexports.eventTypes = [\r\n\texports.VISIBILITYCHANGE,\r\n\texports.ENTERVIEWPORT,\r\n\texports.FULLYENTERVIEWPORT,\r\n\texports.EXITVIEWPORT,\r\n\texports.PARTIALLYEXITVIEWPORT,\r\n\texports.LOCATIONCHANGE,\r\n\texports.STATECHANGE\r\n];\r\n\r\nexports.isOnServer = (typeof window === 'undefined');\r\nexports.isInBrowser = !exports.isOnServer;\r\n\r\nexports.defaultOffsets = {top: 0, bottom: 0};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/scrollmonitor/src/constants.js\n// module id = 0\n// module chunks = 0","var index = typeof fetch=='function' ? fetch : function(url, options) {\n\toptions = options || {};\n\treturn new Promise( function (resolve, reject) {\n\t\tvar request = new XMLHttpRequest();\n\n\t\trequest.open(options.method || 'get', url);\n\n\t\tfor (var i in options.headers) {\n\t\t\trequest.setRequestHeader(i, options.headers[i]);\n\t\t}\n\n\t\trequest.withCredentials = options.credentials=='include';\n\n\t\trequest.onload = function () {\n\t\t\tresolve(response());\n\t\t};\n\n\t\trequest.onerror = reject;\n\n\t\trequest.send(options.body);\n\n\t\tfunction response() {\n\t\t\tvar keys = [],\n\t\t\t\tall = [],\n\t\t\t\theaders = {},\n\t\t\t\theader;\n\n\t\t\trequest.getAllResponseHeaders().replace(/^(.*?):\\s*([\\s\\S]*?)$/gm, function (m, key, value) {\n\t\t\t\tkeys.push(key = key.toLowerCase());\n\t\t\t\tall.push([key, value]);\n\t\t\t\theader = headers[key];\n\t\t\t\theaders[key] = header ? (header + \",\" + value) : value;\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tok: (request.status/200|0) == 1,\t\t// 200-399\n\t\t\t\tstatus: request.status,\n\t\t\t\tstatusText: request.statusText,\n\t\t\t\turl: request.responseURL,\n\t\t\t\tclone: response,\n\t\t\t\ttext: function () { return Promise.resolve(request.responseText); },\n\t\t\t\tjson: function () { return Promise.resolve(request.responseText).then(JSON.parse); },\n\t\t\t\txml: function () { return Promise.resolve(request.responseXML); },\n\t\t\t\tblob: function () { return Promise.resolve(new Blob([request.response])); },\n\t\t\t\theaders: {\n\t\t\t\t\tkeys: function () { return keys; },\n\t\t\t\t\tentries: function () { return all; },\n\t\t\t\t\tget: function (n) { return headers[n.toLowerCase()]; },\n\t\t\t\t\thas: function (n) { return n.toLowerCase() in headers; }\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n};\n\nexport default index;\n//# sourceMappingURL=unfetch.es.js.map\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/unfetch/dist/unfetch.es.js\n// module id = 1\n// module chunks = 0","/* global document */\r\n/* global window */\r\n\r\nfunction extend(base, source) {\r\n for (var i in source) {\r\n if (base.hasOwnProperty(i)) {\r\n base[i] = source[i];\r\n }\r\n }\r\n return base;\r\n}\r\n\r\nconst supportsTouch = () => 'ontouchstart' in document.documentElement;\r\n\r\nfunction HorizontalMenu(el, options) {\r\n this.el = el;\r\n this.options = extend({\r\n menuSelector: '.menu',\r\n menuItemSelector: '.menu > .nav__item',\r\n overlayClass: 'overlay fill',\r\n menuItemOpenClass: 'nav__item--open',\r\n submenuSelector: '.submenu',\r\n }, options || {});\r\n\r\n this.init();\r\n}\r\n\r\n\r\nHorizontalMenu.prototype = {\r\n init: function () {\r\n this.current = -1;\r\n this.menu = this.el.querySelector(this.options.menuSelector);\r\n this.menuItems = this.el.querySelectorAll(this.options.menuItemSelector);\r\n\r\n const overlay = document.createElement('div');\r\n overlay.className = this.options.overlayClass;\r\n document.body.appendChild(overlay);\r\n this.overlay = overlay;\r\n\r\n this.bindEvents();\r\n },\r\n openMenu: function (anchorEl, e) {\r\n const self = this;\r\n const menuItem = anchorEl.parentNode;\r\n const items = [].slice.call(this.menuItems);\r\n const subMenu = menuItem.querySelector(this.options.submenuSelector);\r\n\r\n const closeCurrent = (currItem) => {\r\n const current = currItem || self.menuItems[self.current];\r\n current.classList.remove(self.options.menuItemOpenClass);\r\n current.setAttribute('data-open', '');\r\n };\r\n\r\n // any submenu under current item\r\n if (subMenu) {\r\n if (supportsTouch()) console.log(e);\r\n\r\n // current clicked item is visible\r\n if (menuItem.getAttribute('data-open') === 'open') {\r\n // this.closeMenu(menuItem);\r\n }\r\n // some other item is visible\r\n else {\r\n // set item visible\r\n menuItem.setAttribute('data-open', 'open');\r\n if (self.current !== -1) {\r\n closeCurrent();\r\n }\r\n // open current\r\n self.current = items.indexOf(menuItem);\r\n menuItem.classList.add(this.options.menuItemOpenClass);\r\n this.overlay.classList.add('show');\r\n }\r\n }\r\n // no submenu, plain item\r\n else {\r\n // close any visible item\r\n if (self.current !== -1) {\r\n this.closeMenu();\r\n }\r\n }\r\n },\r\n\r\n closeMenu: function (currItem) {\r\n let current = currItem || this.menuItems[this.current];\r\n if (current) {\r\n current.classList.remove(this.options.menuItemOpenClass);\r\n current.setAttribute('data-open', '');\r\n this.current = -1;\r\n }\r\n this.overlay.classList.remove('show');\r\n },\r\n bindEvents: function () {\r\n const self = this;\r\n const event = supportsTouch() ? 'click' : 'mouseover';\r\n\r\n this.menuItems.forEach((item) => {\r\n let trigger = item.querySelector('a');\r\n // check if link exists in current menu item\r\n if (!trigger) return;\r\n\r\n\r\n trigger.addEventListener(event, function (e) {\r\n console.log(e);\r\n self.openMenu(this, e);\r\n });\r\n });\r\n this.overlay.addEventListener('click', (e) => {\r\n if (event === 'click') e.preventDefault();\r\n return self.closeMenu();\r\n });\r\n window.addEventListener('resize', (e) => {\r\n self.handleResize();\r\n });\r\n },\r\n handleResize: function () {\r\n // fires resize handler some moment after resizing stops\r\n let self = this;\r\n\r\n if (this.resizeTimeout) {\r\n clearTimeout(this.resizeTimeout);\r\n }\r\n\r\n this.resizeTimeout = setTimeout(() => {\r\n self.resize();\r\n self.resizeTimeout = null;\r\n }, 50);\r\n },\r\n resize: function () {\r\n if (this.current !== -1) {\r\n this.closeMenu();\r\n }\r\n },\r\n};\r\n\r\nexport default HorizontalMenu;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./js/HorizontalMenu.js\n// module id = 2\n// module chunks = 0","const on = (element, animationName) => (eventName, handler) => {\r\n const isValidEventName = ['start', 'iteration', 'end'].indexOf(eventName) > -1;\r\n if (!isValidEventName) throw new Error(`${eventName} not supported`);\r\n const nativeEventName = `animation${eventName}`;\r\n\r\n element.addEventListener(nativeEventName, (e) => {\r\n const matches = animationName ? e.animationName === animationName : true;\r\n\r\n if (matches) handler(e);\r\n });\r\n\r\n return animotion(element, animationName);\r\n};\r\nconst name = element => animationName => animotion(element, animationName);\r\nfunction animotion(element, animationName) {\r\n return {\r\n on: on(element, animationName),\r\n name: name(element),\r\n };\r\n}\r\n\r\nmodule.exports = element => animotion(element);\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./js/animotion.js\n// module id = 3\n// module chunks = 0","import Dush from 'dush';\r\n\r\nfunction Kudos(el, opts) {\r\n if (!(this instanceof Kudos)) {\r\n return new Kudos(opts);\r\n }\r\n\r\n Dush.call(this);\r\n\r\n // check if el is actually a dom element\r\n if (!this._d(el)) {\r\n throw new TypeError('expected DOM element for \"el\" argument');\r\n }\r\n\r\n this.options = typeof opts === 'object' ? opts : {};\r\n this._el = el;\r\n\r\n this._init();\r\n}\r\n\r\nDush.mixin(Kudos.prototype);\r\nconst $ = Kudos.prototype;\r\n$._init = function () {\r\n const self = this;\r\n\r\n this.start = (e) => {\r\n self._el.classList.add('active');\r\n self.startTimer().emit('kudo:in', e);\r\n };\r\n\r\n this.end = (e) => {\r\n self._el.classList.remove('active');\r\n self.resetTimer().emit('kudo:out', e);\r\n };\r\n this.startTouch = (e) => {\r\n if (e.touches.length === 1) {\r\n // prevent from propagation and preventDefault.\r\n // So we can use both touch events and mouse events.\r\n e.stopPropagation();\r\n // e.preventDefault();\r\n }\r\n self._el.classList.add('active');\r\n self.startTimer().emit('kudo:in', e);\r\n };\r\n\r\n\r\n self.on('mouseover', this.start, this._el)\r\n .on('mouseout', this.end, this._el)\r\n .on('touchstart', this.startTouch, this._el)\r\n .on('touchend', this.end, this._el);\r\n};\r\n$.startTimer = function () {\r\n const self = this;\r\n const time = this.options.duration || this.options.delay;\r\n const duration = typeof time === 'number' ? time : 1500;\r\n\r\n this.timeout = setInterval(() => {\r\n self._el.classList.remove('active');\r\n self._el.classList.add('complete');\r\n self.emit('kudo:complete', self);\r\n self.resetTimer()\r\n .off('mouseover', self.start)\r\n .off('mouseout', self.end)\r\n .off('touchstart', self.startTouch)\r\n .off('touchend', self.end);\r\n }, duration);\r\n\r\n return this;\r\n};\r\n$.resetTimer = function () {\r\n clearInterval(this.timeout);\r\n return this;\r\n};\r\n$.destroy = function () {\r\n this.off('mouseover', this.start, this._el)\r\n .off('mouseout', this.end, this._el)\r\n .off('touchstart', this.startTouch, this._el)\r\n .off('touchend', this.end, this._el);\r\n};\r\n\r\nexport default Kudos;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./js/kudos.js\n// module id = 4\n// module chunks = 0","/**\r\n * Created by Abdus on 3.03.2017.\r\n */\r\n\r\n/* global window */\r\n/* global CustomEvent */\r\n\r\nconst raf = window.requestAnimationFrame\r\n || window.webkitRequestAnimationFrame\r\n || window.mozRequestAnimationFrame\r\n || window.msRequestAnimationFrame\r\n || window.oRequestAnimationFrame\r\n || function timeout(callback) {\r\n window.setTimeout(callback, 1000 / 60);\r\n };\r\n\r\nfunction throttle(type, name, obj) {\r\n let running = false;\r\n\r\n if (!obj) obj = window;\r\n\r\n const func = () => {\r\n if (running) return;\r\n\r\n running = true;\r\n\r\n raf(() => {\r\n obj.dispatchEvent(new CustomEvent(name));\r\n running = false;\r\n });\r\n };\r\n\r\n obj.addEventListener(type, func);\r\n}\r\n\r\nexport default throttle;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./js/throttle.js\n// module id = 5\n// module chunks = 0","!(function(win) {\n\n/**\n * FastDom\n *\n * Eliminates layout thrashing\n * by batching DOM read/write\n * interactions.\n *\n * @author Wilson Page \n * @author Kornel Lesinski \n */\n\n'use strict';\n\n/**\n * Mini logger\n *\n * @return {Function}\n */\nvar debug = 0 ? console.log.bind(console, '[fastdom]') : function() {};\n\n/**\n * Normalized rAF\n *\n * @type {Function}\n */\nvar raf = win.requestAnimationFrame\n || win.webkitRequestAnimationFrame\n || win.mozRequestAnimationFrame\n || win.msRequestAnimationFrame\n || function(cb) { return setTimeout(cb, 16); };\n\n/**\n * Initialize a `FastDom`.\n *\n * @constructor\n */\nfunction FastDom() {\n var self = this;\n self.reads = [];\n self.writes = [];\n self.raf = raf.bind(win); // test hook\n debug('initialized', self);\n}\n\nFastDom.prototype = {\n constructor: FastDom,\n\n /**\n * Adds a job to the read batch and\n * schedules a new frame if need be.\n *\n * @param {Function} fn\n * @public\n */\n measure: function(fn, ctx) {\n debug('measure');\n var task = !ctx ? fn : fn.bind(ctx);\n this.reads.push(task);\n scheduleFlush(this);\n return task;\n },\n\n /**\n * Adds a job to the\n * write batch and schedules\n * a new frame if need be.\n *\n * @param {Function} fn\n * @public\n */\n mutate: function(fn, ctx) {\n debug('mutate');\n var task = !ctx ? fn : fn.bind(ctx);\n this.writes.push(task);\n scheduleFlush(this);\n return task;\n },\n\n /**\n * Clears a scheduled 'read' or 'write' task.\n *\n * @param {Object} task\n * @return {Boolean} success\n * @public\n */\n clear: function(task) {\n debug('clear', task);\n return remove(this.reads, task) || remove(this.writes, task);\n },\n\n /**\n * Extend this FastDom with some\n * custom functionality.\n *\n * Because fastdom must *always* be a\n * singleton, we're actually extending\n * the fastdom instance. This means tasks\n * scheduled by an extension still enter\n * fastdom's global task queue.\n *\n * The 'super' instance can be accessed\n * from `this.fastdom`.\n *\n * @example\n *\n * var myFastdom = fastdom.extend({\n * initialize: function() {\n * // runs on creation\n * },\n *\n * // override a method\n * measure: function(fn) {\n * // do extra stuff ...\n *\n * // then call the original\n * return this.fastdom.measure(fn);\n * },\n *\n * ...\n * });\n *\n * @param {Object} props properties to mixin\n * @return {FastDom}\n */\n extend: function(props) {\n debug('extend', props);\n if (typeof props != 'object') throw new Error('expected object');\n\n var child = Object.create(this);\n mixin(child, props);\n child.fastdom = this;\n\n // run optional creation hook\n if (child.initialize) child.initialize();\n\n return child;\n },\n\n // override this with a function\n // to prevent Errors in console\n // when tasks throw\n catch: null\n};\n\n/**\n * Schedules a new read/write\n * batch if one isn't pending.\n *\n * @private\n */\nfunction scheduleFlush(fastdom) {\n if (!fastdom.scheduled) {\n fastdom.scheduled = true;\n fastdom.raf(flush.bind(null, fastdom));\n debug('flush scheduled');\n }\n}\n\n/**\n * Runs queued `read` and `write` tasks.\n *\n * Errors are caught and thrown by default.\n * If a `.catch` function has been defined\n * it is called instead.\n *\n * @private\n */\nfunction flush(fastdom) {\n debug('flush');\n\n var writes = fastdom.writes;\n var reads = fastdom.reads;\n var error;\n\n try {\n debug('flushing reads', reads.length);\n runTasks(reads);\n debug('flushing writes', writes.length);\n runTasks(writes);\n } catch (e) { error = e; }\n\n fastdom.scheduled = false;\n\n // If the batch errored we may still have tasks queued\n if (reads.length || writes.length) scheduleFlush(fastdom);\n\n if (error) {\n debug('task errored', error.message);\n if (fastdom.catch) fastdom.catch(error);\n else throw error;\n }\n}\n\n/**\n * We run this inside a try catch\n * so that if any jobs error, we\n * are able to recover and continue\n * to flush the batch until it's empty.\n *\n * @private\n */\nfunction runTasks(tasks) {\n debug('run tasks');\n var task; while (task = tasks.shift()) task();\n}\n\n/**\n * Remove an item from an Array.\n *\n * @param {Array} array\n * @param {*} item\n * @return {Boolean}\n */\nfunction remove(array, item) {\n var index = array.indexOf(item);\n return !!~index && !!array.splice(index, 1);\n}\n\n/**\n * Mixin own properties of source\n * object into the target.\n *\n * @param {Object} target\n * @param {Object} source\n */\nfunction mixin(target, source) {\n for (var key in source) {\n if (source.hasOwnProperty(key)) target[key] = source[key];\n }\n}\n\n// There should never be more than\n// one instance of `FastDom` in an app\nvar exports = win.fastdom = (win.fastdom || new FastDom()); // jshint ignore:line\n\n// Expose to CJS & AMD\nif ((typeof define)[0] == 'f') define(function() { return exports; });\nelse if ((typeof module)[0] == 'o') module.exports = exports;\n\n})( typeof window !== 'undefined' ? window : this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/fastdom/fastdom.js\n// module id = 6\n// module chunks = 0",";(function (window) {\n\n function defaults (target, obj) {\n for (var prop in obj) target[prop] = target[prop] || obj[prop]\n }\n\n function getQuery (queryParams) {\n var arr = Object.keys(queryParams).map(function (k) {\n return [k, encodeURIComponent(queryParams[k])].join('=')\n })\n return '?' + arr.join('&')\n }\n\n function _fetch (method, url, opts, data, queryParams) {\n opts.method = method\n opts.headers = opts.headers || {}\n opts.responseAs = (opts.responseAs && ['json', 'text', 'response'].indexOf(opts.responseAs) >= 0) ? opts.responseAs : 'json'\n\n defaults(opts.headers, {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n })\n\n if (queryParams) {\n url += getQuery(queryParams)\n }\n\n if (data) {\n opts.body = JSON.stringify(data);\n } else {\n delete opts.body;\n }\n\n return fetchival.fetch(url, opts)\n .then(function (response) {\n if (response.status >= 200 && response.status < 300) {\n if(opts.responseAs==\"response\")\n return response\n if (response.status == 204)\n return null;\n return response[opts.responseAs]();\n }\n var err = new Error(response.statusText)\n err.response = response\n throw err\n })\n }\n\n function fetchival (url, opts) {\n opts = opts || {}\n\n var _ = function (u, o) {\n // Extend parameters with previous ones\n u = url + '/' + u\n o = o || {}\n defaults(o, opts)\n return fetchival(u, o)\n }\n\n _.get = function (queryParams) {\n return _fetch('GET', url, opts, null, queryParams)\n }\n\n _.post = function (data) {\n return _fetch('POST', url, opts, data)\n }\n\n _.put = function (data) {\n return _fetch('PUT', url, opts, data)\n }\n\n _.patch = function (data) {\n return _fetch('PATCH', url, opts, data)\n }\n\n _.delete = function () {\n return _fetch('DELETE', url, opts)\n }\n\n return _\n }\n\n // Expose fetch so that other polyfills can be used\n // Bind fetch to window to avoid TypeError: Illegal invocation\n fetchival.fetch = typeof fetch !== 'undefined' ? fetch.bind(window) : null\n\n // Support CommonJS, AMD & browser\n if (typeof exports === 'object')\n module.exports = fetchival\n else if (typeof define === 'function' && define.amd)\n define(function() { return fetchival })\n else\n window.fetchival = fetchival\n\n})(typeof window != 'undefined' ? window : undefined);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/fetchival/index.js\n// module id = 7\n// module chunks = 0","/*!\n * JavaScript Cookie v2.1.3\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;(function (factory) {\n\tvar registeredInModuleLoader = false;\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (!registeredInModuleLoader) {\n\t\tvar OldCookies = window.Cookies;\n\t\tvar api = window.Cookies = factory();\n\t\tapi.noConflict = function () {\n\t\t\twindow.Cookies = OldCookies;\n\t\t\treturn api;\n\t\t};\n\t}\n}(function () {\n\tfunction extend () {\n\t\tvar i = 0;\n\t\tvar result = {};\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar attributes = arguments[ i ];\n\t\t\tfor (var key in attributes) {\n\t\t\t\tresult[key] = attributes[key];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction init (converter) {\n\t\tfunction api (key, value, attributes) {\n\t\t\tvar result;\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Write\n\n\t\t\tif (arguments.length > 1) {\n\t\t\t\tattributes = extend({\n\t\t\t\t\tpath: '/'\n\t\t\t\t}, api.defaults, attributes);\n\n\t\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\t\tvar expires = new Date();\n\t\t\t\t\texpires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);\n\t\t\t\t\tattributes.expires = expires;\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tresult = JSON.stringify(value);\n\t\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\t\tvalue = result;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\n\t\t\t\tif (!converter.write) {\n\t\t\t\t\tvalue = encodeURIComponent(String(value))\n\t\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\t\t\t\t} else {\n\t\t\t\t\tvalue = converter.write(value, key);\n\t\t\t\t}\n\n\t\t\t\tkey = encodeURIComponent(String(key));\n\t\t\t\tkey = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);\n\t\t\t\tkey = key.replace(/[\\(\\)]/g, escape);\n\n\t\t\t\treturn (document.cookie = [\n\t\t\t\t\tkey, '=', value,\n\t\t\t\t\tattributes.expires ? '; expires=' + attributes.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE\n\t\t\t\t\tattributes.path ? '; path=' + attributes.path : '',\n\t\t\t\t\tattributes.domain ? '; domain=' + attributes.domain : '',\n\t\t\t\t\tattributes.secure ? '; secure' : ''\n\t\t\t\t].join(''));\n\t\t\t}\n\n\t\t\t// Read\n\n\t\t\tif (!key) {\n\t\t\t\tresult = {};\n\t\t\t}\n\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all. Also prevents odd result when\n\t\t\t// calling \"get()\"\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\tvar rdecode = /(%[0-9A-Z]{2})+/g;\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar cookie = parts.slice(1).join('=');\n\n\t\t\t\tif (cookie.charAt(0) === '\"') {\n\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar name = parts[0].replace(rdecode, decodeURIComponent);\n\t\t\t\t\tcookie = converter.read ?\n\t\t\t\t\t\tconverter.read(cookie, name) : converter(cookie, name) ||\n\t\t\t\t\t\tcookie.replace(rdecode, decodeURIComponent);\n\n\t\t\t\t\tif (this.json) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\tresult = cookie;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!key) {\n\t\t\t\t\t\tresult[name] = cookie;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\tapi.set = api;\n\t\tapi.get = function (key) {\n\t\t\treturn api.call(api, key);\n\t\t};\n\t\tapi.getJSON = function () {\n\t\t\treturn api.apply({\n\t\t\t\tjson: true\n\t\t\t}, [].slice.call(arguments));\n\t\t};\n\t\tapi.defaults = {};\n\n\t\tapi.remove = function (key, attributes) {\n\t\t\tapi(key, '', extend(attributes, {\n\t\t\t\texpires: -1\n\t\t\t}));\n\t\t};\n\n\t\tapi.withConverter = init;\n\n\t\treturn api;\n\t}\n\n\treturn init(function () {});\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/js-cookie/src/js.cookie.js\n// module id = 8\n// module chunks = 0","(function (root) {\n\n // Store setTimeout reference so promise-polyfill will be unaffected by\n // other code modifying setTimeout (like sinon.useFakeTimers())\n var setTimeoutFunc = setTimeout;\n\n function noop() {}\n \n // Polyfill for Function.prototype.bind\n function bind(fn, thisArg) {\n return function () {\n fn.apply(thisArg, arguments);\n };\n }\n\n function Promise(fn) {\n if (typeof this !== 'object') throw new TypeError('Promises must be constructed via new');\n if (typeof fn !== 'function') throw new TypeError('not a function');\n this._state = 0;\n this._handled = false;\n this._value = undefined;\n this._deferreds = [];\n\n doResolve(fn, this);\n }\n\n function handle(self, deferred) {\n while (self._state === 3) {\n self = self._value;\n }\n if (self._state === 0) {\n self._deferreds.push(deferred);\n return;\n }\n self._handled = true;\n Promise._immediateFn(function () {\n var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n return;\n }\n var ret;\n try {\n ret = cb(self._value);\n } catch (e) {\n reject(deferred.promise, e);\n return;\n }\n resolve(deferred.promise, ret);\n });\n }\n\n function resolve(self, newValue) {\n try {\n // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n if (newValue === self) throw new TypeError('A promise cannot be resolved with itself.');\n if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\n var then = newValue.then;\n if (newValue instanceof Promise) {\n self._state = 3;\n self._value = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(bind(then, newValue), self);\n return;\n }\n }\n self._state = 1;\n self._value = newValue;\n finale(self);\n } catch (e) {\n reject(self, e);\n }\n }\n\n function reject(self, newValue) {\n self._state = 2;\n self._value = newValue;\n finale(self);\n }\n\n function finale(self) {\n if (self._state === 2 && self._deferreds.length === 0) {\n Promise._immediateFn(function() {\n if (!self._handled) {\n Promise._unhandledRejectionFn(self._value);\n }\n });\n }\n\n for (var i = 0, len = self._deferreds.length; i < len; i++) {\n handle(self, self._deferreds[i]);\n }\n self._deferreds = null;\n }\n\n function Handler(onFulfilled, onRejected, promise) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n }\n\n /**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\n function doResolve(fn, self) {\n var done = false;\n try {\n fn(function (value) {\n if (done) return;\n done = true;\n resolve(self, value);\n }, function (reason) {\n if (done) return;\n done = true;\n reject(self, reason);\n });\n } catch (ex) {\n if (done) return;\n done = true;\n reject(self, ex);\n }\n }\n\n Promise.prototype['catch'] = function (onRejected) {\n return this.then(null, onRejected);\n };\n\n Promise.prototype.then = function (onFulfilled, onRejected) {\n var prom = new (this.constructor)(noop);\n\n handle(this, new Handler(onFulfilled, onRejected, prom));\n return prom;\n };\n\n Promise.all = function (arr) {\n var args = Array.prototype.slice.call(arr);\n\n return new Promise(function (resolve, reject) {\n if (args.length === 0) return resolve([]);\n var remaining = args.length;\n\n function res(i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(val, function (val) {\n res(i, val);\n }, reject);\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n };\n\n Promise.resolve = function (value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n\n return new Promise(function (resolve) {\n resolve(value);\n });\n };\n\n Promise.reject = function (value) {\n return new Promise(function (resolve, reject) {\n reject(value);\n });\n };\n\n Promise.race = function (values) {\n return new Promise(function (resolve, reject) {\n for (var i = 0, len = values.length; i < len; i++) {\n values[i].then(resolve, reject);\n }\n });\n };\n\n // Use polyfill for setImmediate for performance gains\n Promise._immediateFn = (typeof setImmediate === 'function' && function (fn) { setImmediate(fn); }) ||\n function (fn) {\n setTimeoutFunc(fn, 0);\n };\n\n Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console\n }\n };\n\n /**\n * Set the immediate function to execute callbacks\n * @param fn {function} Function to execute\n * @deprecated\n */\n Promise._setImmediateFn = function _setImmediateFn(fn) {\n Promise._immediateFn = fn;\n };\n\n /**\n * Change the function to execute on unhandled rejection\n * @param {function} fn Function to execute on unhandled rejection\n * @deprecated\n */\n Promise._setUnhandledRejectionFn = function _setUnhandledRejectionFn(fn) {\n Promise._unhandledRejectionFn = fn;\n };\n \n if (typeof module !== 'undefined' && module.exports) {\n module.exports = Promise;\n } else if (!root.Promise) {\n root.Promise = Promise;\n }\n\n})(this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/promise-polyfill/promise.js\n// module id = 9\n// module chunks = 0","var { isInBrowser } = require('./src/constants');\r\n\r\nvar ScrollMonitorContainer = require('./src/container');\r\n\r\nvar scrollMonitor = new ScrollMonitorContainer(isInBrowser ? document.body : null);\r\nscrollMonitor.setStateFromDOM(null);\r\nscrollMonitor.listenToDOM();\r\n\r\nif (isInBrowser) {\r\n\twindow.scrollMonitor = scrollMonitor;\r\n}\r\n\r\nmodule.exports = scrollMonitor;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/scrollmonitor/index.js\n// module id = 10\n// module chunks = 0","if (!window.fetch) window.fetch = require('unfetch').default || require('unfetch');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/unfetch/polyfill.js\n// module id = 11\n// module chunks = 0","/*!\n * dush \n *\n * Copyright (c) 2015 Charlike Mike Reagent <@tunnckoCore> (http://www.tunnckocore.tk)\n * Released under the MIT license.\n */\n\n/* jshint asi:true */\n\n'use strict'\n\nvar o = 'outerHTML'\nvar l = 'EventListener'\nvar p = 'prototype'\nvar op = Object[p]\nvar has = op.hasOwnProperty\n\nmodule.exports = Dush\n\nfunction Dush ($) {\n if (!(this instanceof Dush)) {\n return new Dush($)\n }\n $ = $ || this\n $._e = $._e || {}\n $._d = function (v) {\n v = op.toString.call(v)\n return /(?:HTML)?(?:.*)Element/gi.test(v)\n }\n $.on = function (n, f, e, i) {\n $._e[n] = $._e[n] || []\n $._e[n].push(f)\n\n if (e && $._d(e)) {\n f[o] = e[o]\n i = e['add' + l]\n i ? e['add' + l](n, f, 0) : e.attachEvent('on' + n, f)\n }\n return $\n }\n $.off = function (n, f, e, i) {\n if (!has.call($._e, n)) {return $}\n $._e[n].splice($._e[n].indexOf(f), 1)\n\n if (e && $._d(e)) {\n i = e['remove' + l]\n i ? e['remove' + l](n, f, 0) : e.detachEvent('on' + n, f)\n }\n return $\n }\n $.once = function (n, f, e) {\n function h () {\n $.off(n, h, e)\n return f.apply(e, arguments)\n }\n return $.on(n, h, e)\n }\n $.emit = function (n, a, e, i, f, d) {\n if (!has.call($._e, n)) {return $}\n a = [].slice.call(arguments, 1)\n e = a[a.length - 1]\n d = $._d(e)\n e = d ? e : $\n a = d ? a.slice(0, -1) : a\n\n for (i = 0; i < $._e[n].length; i++) {\n f = $._e[n][i]\n if (d && f[o] !== e[o]) {\n continue\n }\n f.apply(e, a)\n }\n return $\n }\n}\nDush.mixin = function (r, s, c, k, j) {\n s = s || Dush\n c = r.constructor\n for (k in s) c[k] = s[k]\n c[p] = Object.create(s[p])\n for (j in r) c[p][j] = r[j]\n c.__super__ = p[p]\n return c\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/dush/index.js\n// module id = 12\n// module chunks = 0","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/process/browser.js\n// module id = 13\n// module chunks = 0","var { isOnServer, isInBrowser, eventTypes } = require('./constants');\r\nvar Watcher = require('./watcher');\r\n\r\nfunction getViewportHeight (element) {\r\n\tif (isOnServer) {\r\n\t\treturn 0;\r\n\t}\r\n\tif (element === document.body) {\r\n\t\treturn window.innerHeight || document.documentElement.clientHeight;\r\n\t} else {\r\n\t\treturn element.clientHeight;\r\n\t}\r\n}\r\n\r\nfunction getContentHeight (element) {\r\n\tif (isOnServer) {\r\n\t\treturn 0;\r\n\t}\r\n\r\n\tif (element === document.body) {\r\n\t\t// jQuery approach\r\n\t\t// whichever is greatest\r\n\t\treturn Math.max(\r\n\t\t\tdocument.body.scrollHeight, document.documentElement.scrollHeight,\r\n\t\t\tdocument.body.offsetHeight, document.documentElement.offsetHeight,\r\n\t\t\tdocument.documentElement.clientHeight\r\n\t\t);\r\n\t} else {\r\n\t\treturn element.scrollHeight;\r\n\t}\r\n}\r\n\r\nfunction scrollTop (element) {\r\n\tif (isOnServer) {\r\n\t\treturn 0;\r\n\t}\r\n\tif (element === document.body) {\r\n\t\treturn window.pageYOffset ||\r\n\t\t\t(document.documentElement && document.documentElement.scrollTop) ||\r\n\t\t\tdocument.body.scrollTop;\r\n\t} else {\r\n\t\treturn element.scrollTop;\r\n\t}\r\n}\r\n\r\n\r\nclass ScrollMonitorContainer {\r\n\tconstructor (item, parentWatcher) {\r\n\t\tvar self = this;\r\n\r\n\t\tthis.item = item;\r\n\t\tthis.watchers = [];\r\n\t\tthis.viewportTop = null;\r\n\t\tthis.viewportBottom = null;\r\n\t\tthis.documentHeight = getContentHeight(item);\r\n\t\tthis.viewportHeight = getViewportHeight(item);\r\n\t\tthis.DOMListener = function () {\r\n\t\t\tScrollMonitorContainer.prototype.DOMListener.apply(self, arguments);\r\n\t\t};\r\n\t\tthis.eventTypes = eventTypes;\r\n\r\n\t\tif (parentWatcher) {\r\n\t\t\tthis.containerWatcher = parentWatcher.create(item);\r\n\t\t}\r\n\r\n\t\tvar previousDocumentHeight;\r\n\r\n\t\tvar calculateViewportI;\r\n\t\tfunction calculateViewport() {\r\n\t\t\tself.viewportTop = scrollTop(item);\r\n\t\t\tself.viewportBottom = self.viewportTop + self.viewportHeight;\r\n\t\t\tself.documentHeight = getContentHeight(item);\r\n\t\t\tif (self.documentHeight !== previousDocumentHeight) {\r\n\t\t\t\tcalculateViewportI = self.watchers.length;\r\n\t\t\t\twhile( calculateViewportI-- ) {\r\n\t\t\t\t\tself.watchers[calculateViewportI].recalculateLocation();\r\n\t\t\t\t}\r\n\t\t\t\tpreviousDocumentHeight = self.documentHeight;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar updateAndTriggerWatchersI;\r\n\t\tfunction updateAndTriggerWatchers() {\r\n\t\t\t// update all watchers then trigger the events so one can rely on another being up to date.\r\n\t\t\tupdateAndTriggerWatchersI = self.watchers.length;\r\n\t\t\twhile( updateAndTriggerWatchersI-- ) {\r\n\t\t\t\tself.watchers[updateAndTriggerWatchersI].update();\r\n\t\t\t}\r\n\r\n\t\t\tupdateAndTriggerWatchersI = self.watchers.length;\r\n\t\t\twhile( updateAndTriggerWatchersI-- ) {\r\n\t\t\t\tself.watchers[updateAndTriggerWatchersI].triggerCallbacks();\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tthis.update = function() {\r\n\t\t\tcalculateViewport();\r\n\t\t\tupdateAndTriggerWatchers();\r\n\t\t};\r\n\t\tthis.recalculateLocations = function() {\r\n\t\t\tthis.documentHeight = 0;\r\n\t\t\tthis.update();\r\n\t\t};\r\n\r\n\t}\r\n\r\n\tlistenToDOM () {\r\n\t\tif (isInBrowser) {\r\n\t\t\tif (window.addEventListener) {\r\n\t\t\t\tif (this.item === document.body) {\r\n\t\t\t\t\twindow.addEventListener('scroll', this.DOMListener);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.item.addEventListener('scroll', this.DOMListener);\r\n\t\t\t\t}\r\n\t\t\t\twindow.addEventListener('resize', this.DOMListener);\r\n\t\t\t} else {\r\n\t\t\t\t// Old IE support\r\n\t\t\t\tif (this.item === document.body) {\r\n\t\t\t\t\twindow.attachEvent('onscroll', this.DOMListener);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.item.attachEvent('onscroll', this.DOMListener);\r\n\t\t\t\t}\r\n\t\t\t\twindow.attachEvent('onresize', this.DOMListener);\r\n\t\t\t}\r\n\t\t\tthis.destroy = function () {\r\n\t\t\t\tif (window.addEventListener) {\r\n\t\t\t\t\tif (this.item === document.body) {\r\n\t\t\t\t\t\twindow.removeEventListener('scroll', this.DOMListener);\r\n\t\t\t\t\t\tthis.containerWatcher.destroy();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.item.removeEventListener('scroll', this.DOMListener);\r\n\t\t\t\t\t}\r\n\t\t\t\t\twindow.removeEventListener('resize', this.DOMListener);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Old IE support\r\n\t\t\t\t\tif (this.item === document.body) {\r\n\t\t\t\t\t\twindow.detachEvent('onscroll', this.DOMListener);\r\n\t\t\t\t\t\tthis.containerWatcher.destroy();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.item.detachEvent('onscroll', this.DOMListener);\r\n\t\t\t\t\t}\r\n\t\t\t\t\twindow.detachEvent('onresize', this.DOMListener);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\tdestroy () {\r\n\t\t// noop, override for your own purposes.\r\n\t\t// in listenToDOM, for example.\r\n\t}\r\n\r\n\tDOMListener (event) {\r\n\t\t//alert('got scroll');\r\n\t\tthis.setStateFromDOM(event);\r\n\t}\r\n\r\n\tsetStateFromDOM (event) {\r\n\t\tvar viewportTop = scrollTop(this.item);\r\n\t\tvar viewportHeight = getViewportHeight(this.item);\r\n\t\tvar contentHeight = getContentHeight(this.item);\r\n\r\n\t\tthis.setState(viewportTop, viewportHeight, contentHeight, event);\r\n\t}\r\n\r\n\tsetState (newViewportTop, newViewportHeight, newContentHeight, event) {\r\n\t\tvar needsRecalcuate = (newViewportHeight !== this.viewportHeight || newContentHeight !== this.contentHeight);\r\n\r\n\t\tthis.latestEvent = event;\r\n\t\tthis.viewportTop = newViewportTop;\r\n\t\tthis.viewportHeight = newViewportHeight;\r\n\t\tthis.viewportBottom = newViewportTop + newViewportHeight;\r\n\t\tthis.contentHeight = newContentHeight;\r\n\r\n\t\tif (needsRecalcuate) {\r\n\t\t\tlet i = this.watchers.length;\r\n\t\t\twhile (i--) {\r\n\t\t\t\tthis.watchers[i].recalculateLocation();\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.updateAndTriggerWatchers(event);\r\n\t}\r\n\r\n\tupdateAndTriggerWatchers (event) {\r\n\t\tlet i = this.watchers.length;\r\n\t\twhile (i--) {\r\n\t\t\tthis.watchers[i].update();\r\n\t\t}\r\n\r\n\t\ti = this.watchers.length;\r\n\t\twhile (i--) {\r\n\t\t\tthis.watchers[i].triggerCallbacks(event);\r\n\t\t}\r\n\t}\r\n\r\n\tcreateCustomContainer () {\r\n\t\treturn new ScrollMonitorContainer();\r\n\t}\r\n\r\n\tcreateContainer (item) {\r\n\t\tif (typeof item === 'string') {\r\n\t\t\titem = document.querySelector(item);\r\n\t\t} else if (item && item.length > 0) {\r\n\t\t\titem = item[0];\r\n\t\t}\r\n\t\tvar container = new ScrollMonitorContainer(item, this);\r\n\t\tcontainer.setStateFromDOM();\r\n\t\tcontainer.listenToDOM();\r\n\t\treturn container;\r\n\t}\r\n\r\n\tcreate (item, offsets) {\r\n\t\tif (typeof item === 'string') {\r\n\t\t\titem = document.querySelector(item);\r\n\t\t} else if (item && item.length > 0) {\r\n\t\t\titem = item[0];\r\n\t\t}\r\n\t\tvar watcher = new Watcher(this, item, offsets);\r\n\t\tthis.watchers.push(watcher);\r\n\t\treturn watcher;\r\n\t}\r\n\r\n\tbeget (item, offsets) {\r\n\t\treturn this.create(item, offsets);\r\n\t}\r\n}\r\n\r\nmodule.exports = ScrollMonitorContainer;\r\n\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/scrollmonitor/src/container.js\n// module id = 14\n// module chunks = 0","var {\r\n\tVISIBILITYCHANGE,\r\n\tENTERVIEWPORT,\r\n\tFULLYENTERVIEWPORT,\r\n\tEXITVIEWPORT,\r\n\tPARTIALLYEXITVIEWPORT,\r\n\tLOCATIONCHANGE,\r\n\tSTATECHANGE,\r\n\teventTypes,\r\n\tdefaultOffsets\r\n} = require('./constants');\r\n\r\nfunction ElementWatcher (containerWatcher, watchItem, offsets) {\r\n\tvar self = this;\r\n\r\n\tthis.watchItem = watchItem;\r\n\tthis.container = containerWatcher;\r\n\r\n\tif (!offsets) {\r\n\t\tthis.offsets = defaultOffsets;\r\n\t} else if (offsets === +offsets) {\r\n\t\tthis.offsets = {top: offsets, bottom: offsets};\r\n\t} else {\r\n\t\tthis.offsets = {\r\n\t\t\ttop: offsets.top || defaultOffsets.top,\r\n\t\t\tbottom: offsets.bottom || defaultOffsets.bottom\r\n\t\t};\r\n\t}\r\n\r\n\tthis.callbacks = {}; // {callback: function, isOne: true }\r\n\r\n\tfor (var i = 0, j = eventTypes.length; i < j; i++) {\r\n\t\tself.callbacks[eventTypes[i]] = [];\r\n\t}\r\n\r\n\tthis.locked = false;\r\n\r\n\tvar wasInViewport;\r\n\tvar wasFullyInViewport;\r\n\tvar wasAboveViewport;\r\n\tvar wasBelowViewport;\r\n\r\n\tvar listenerToTriggerListI;\r\n\tvar listener;\r\n\tfunction triggerCallbackArray (listeners, event) {\r\n\t\tif (listeners.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tlistenerToTriggerListI = listeners.length;\r\n\t\twhile (listenerToTriggerListI--) {\r\n\t\t\tlistener = listeners[listenerToTriggerListI];\r\n\t\t\tlistener.callback.call(self, event, self);\r\n\t\t\tif (listener.isOne) {\r\n\t\t\t\tlisteners.splice(listenerToTriggerListI, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tthis.triggerCallbacks = function triggerCallbacks (event) {\r\n\r\n\t\tif (this.isInViewport && !wasInViewport) {\r\n\t\t\ttriggerCallbackArray( this.callbacks[ENTERVIEWPORT], event );\r\n\t\t}\r\n\t\tif (this.isFullyInViewport && !wasFullyInViewport) {\r\n\t\t\ttriggerCallbackArray( this.callbacks[FULLYENTERVIEWPORT], event );\r\n\t\t}\r\n\r\n\r\n\t\tif (this.isAboveViewport !== wasAboveViewport &&\r\n\t\t\tthis.isBelowViewport !== wasBelowViewport) {\r\n\r\n\t\t\ttriggerCallbackArray( this.callbacks[VISIBILITYCHANGE], event );\r\n\r\n\t\t\t// if you skip completely past this element\r\n\t\t\tif (!wasFullyInViewport && !this.isFullyInViewport) {\r\n\t\t\t\ttriggerCallbackArray( this.callbacks[FULLYENTERVIEWPORT], event );\r\n\t\t\t\ttriggerCallbackArray( this.callbacks[PARTIALLYEXITVIEWPORT], event );\r\n\t\t\t}\r\n\t\t\tif (!wasInViewport && !this.isInViewport) {\r\n\t\t\t\ttriggerCallbackArray( this.callbacks[ENTERVIEWPORT], event );\r\n\t\t\t\ttriggerCallbackArray( this.callbacks[EXITVIEWPORT], event );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!this.isFullyInViewport && wasFullyInViewport) {\r\n\t\t\ttriggerCallbackArray( this.callbacks[PARTIALLYEXITVIEWPORT], event );\r\n\t\t}\r\n\t\tif (!this.isInViewport && wasInViewport) {\r\n\t\t\ttriggerCallbackArray( this.callbacks[EXITVIEWPORT], event );\r\n\t\t}\r\n\t\tif (this.isInViewport !== wasInViewport) {\r\n\t\t\ttriggerCallbackArray( this.callbacks[VISIBILITYCHANGE], event );\r\n\t\t}\r\n\t\tswitch( true ) {\r\n\t\t\tcase wasInViewport !== this.isInViewport:\r\n\t\t\tcase wasFullyInViewport !== this.isFullyInViewport:\r\n\t\t\tcase wasAboveViewport !== this.isAboveViewport:\r\n\t\t\tcase wasBelowViewport !== this.isBelowViewport:\r\n\t\t\t\ttriggerCallbackArray( this.callbacks[STATECHANGE], event );\r\n\t\t}\r\n\r\n\t\twasInViewport = this.isInViewport;\r\n\t\twasFullyInViewport = this.isFullyInViewport;\r\n\t\twasAboveViewport = this.isAboveViewport;\r\n\t\twasBelowViewport = this.isBelowViewport;\r\n\r\n\t};\r\n\r\n\tthis.recalculateLocation = function () {\r\n\t\tif (this.locked) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tvar previousTop = this.top;\r\n\t\tvar previousBottom = this.bottom;\r\n\t\tif (this.watchItem.nodeName) { // a dom element\r\n\t\t\tvar cachedDisplay = this.watchItem.style.display;\r\n\t\t\tif (cachedDisplay === 'none') {\r\n\t\t\t\tthis.watchItem.style.display = '';\r\n\t\t\t}\r\n\r\n\t\t\tvar containerOffset = 0;\r\n\t\t\tvar container = this.container;\r\n\t\t\twhile (container.containerWatcher) {\r\n\t\t\t\tcontainerOffset += container.containerWatcher.top - container.containerWatcher.container.viewportTop;\r\n\t\t\t\tcontainer = container.containerWatcher.container;\r\n\t\t\t}\r\n\r\n\t\t\tvar boundingRect = this.watchItem.getBoundingClientRect();\r\n\t\t\tthis.top = boundingRect.top + this.container.viewportTop - containerOffset;\r\n\t\t\tthis.bottom = boundingRect.bottom + this.container.viewportTop - containerOffset;\r\n\r\n\t\t\tif (cachedDisplay === 'none') {\r\n\t\t\t\tthis.watchItem.style.display = cachedDisplay;\r\n\t\t\t}\r\n\r\n\t\t} else if (this.watchItem === +this.watchItem) { // number\r\n\t\t\tif (this.watchItem > 0) {\r\n\t\t\t\tthis.top = this.bottom = this.watchItem;\r\n\t\t\t} else {\r\n\t\t\t\tthis.top = this.bottom = this.container.documentHeight - this.watchItem;\r\n\t\t\t}\r\n\r\n\t\t} else { // an object with a top and bottom property\r\n\t\t\tthis.top = this.watchItem.top;\r\n\t\t\tthis.bottom = this.watchItem.bottom;\r\n\t\t}\r\n\r\n\t\tthis.top -= this.offsets.top;\r\n\t\tthis.bottom += this.offsets.bottom;\r\n\t\tthis.height = this.bottom - this.top;\r\n\r\n\t\tif ( (previousTop !== undefined || previousBottom !== undefined) && (this.top !== previousTop || this.bottom !== previousBottom) ) {\r\n\t\t\ttriggerCallbackArray( this.callbacks[LOCATIONCHANGE], null );\r\n\t\t}\r\n\t};\r\n\r\n\tthis.recalculateLocation();\r\n\tthis.update();\r\n\r\n\twasInViewport = this.isInViewport;\r\n\twasFullyInViewport = this.isFullyInViewport;\r\n\twasAboveViewport = this.isAboveViewport;\r\n\twasBelowViewport = this.isBelowViewport;\r\n}\r\n\r\nElementWatcher.prototype = {\r\n\ton: function (event, callback, isOne) {\r\n\r\n\t\t// trigger the event if it applies to the element right now.\r\n\t\tswitch( true ) {\r\n\t\t\tcase event === VISIBILITYCHANGE && !this.isInViewport && this.isAboveViewport:\r\n\t\t\tcase event === ENTERVIEWPORT && this.isInViewport:\r\n\t\t\tcase event === FULLYENTERVIEWPORT && this.isFullyInViewport:\r\n\t\t\tcase event === EXITVIEWPORT && this.isAboveViewport && !this.isInViewport:\r\n\t\t\tcase event === PARTIALLYEXITVIEWPORT && this.isInViewport && this.isAboveViewport:\r\n\t\t\t\tcallback.call(this, this.container.latestEvent, this);\r\n\t\t\t\tif (isOne) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.callbacks[event]) {\r\n\t\t\tthis.callbacks[event].push({callback: callback, isOne: isOne||false});\r\n\t\t} else {\r\n\t\t\tthrow new Error('Tried to add a scroll monitor listener of type '+event+'. Your options are: '+eventTypes.join(', '));\r\n\t\t}\r\n\t},\r\n\toff: function( event, callback ) {\r\n\t\tif (this.callbacks[event]) {\r\n\t\t\tfor (var i = 0, item; item = this.callbacks[event][i]; i++) {\r\n\t\t\t\tif (item.callback === callback) {\r\n\t\t\t\t\tthis.callbacks[event].splice(i, 1);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthrow new Error('Tried to remove a scroll monitor listener of type '+event+'. Your options are: '+eventTypes.join(', '));\r\n\t\t}\r\n\t},\r\n\tone: function( event, callback ) {\r\n\t\tthis.on( event, callback, true);\r\n\t},\r\n\trecalculateSize: function() {\r\n\t\tthis.height = this.watchItem.offsetHeight + this.offsets.top + this.offsets.bottom;\r\n\t\tthis.bottom = this.top + this.height;\r\n\t},\r\n\tupdate: function() {\r\n\t\tthis.isAboveViewport = this.top < this.container.viewportTop;\r\n\t\tthis.isBelowViewport = this.bottom > this.container.viewportBottom;\r\n\r\n\t\tthis.isInViewport = (this.top < this.container.viewportBottom && this.bottom > this.container.viewportTop);\r\n\t\tthis.isFullyInViewport = (this.top >= this.container.viewportTop && this.bottom <= this.container.viewportBottom) || (this.isAboveViewport && this.isBelowViewport);\r\n\r\n\t},\r\n\tdestroy: function() {\r\n\t\tvar index = this.container.watchers.indexOf(this),\r\n\t\t\tself = this;\r\n\t\tthis.container.watchers.splice(index, 1);\r\n\t\tfor (var i = 0, j = eventTypes.length; i < j; i++) {\r\n\t\t\tself.callbacks[eventTypes[i]].length = 0;\r\n\t\t}\r\n\t},\r\n\t// prevent recalculating the element location\r\n\tlock: function() {\r\n\t\tthis.locked = true;\r\n\t},\r\n\tunlock: function() {\r\n\t\tthis.locked = false;\r\n\t}\r\n};\r\n\r\nvar eventHandlerFactory = function (type) {\r\n\treturn function( callback, isOne ) {\r\n\t\tthis.on.call(this, type, callback, isOne);\r\n\t};\r\n};\r\n\r\nfor (var i = 0, j = eventTypes.length; i < j; i++) {\r\n\tvar type = eventTypes[i];\r\n\tElementWatcher.prototype[type] = eventHandlerFactory(type);\r\n}\r\n\r\nmodule.exports = ElementWatcher;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/scrollmonitor/src/watcher.js\n// module id = 15\n// module chunks = 0","(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a